{"action":"created","issue":{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/2000","labels_url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/2000/labels{/name}","comments_url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/2000/comments","events_url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/2000/events","html_url":"https://github.com/letsencrypt/letsencrypt/issues/2000","id":123701413,"number":2000,"title":"RenewableCert should verify symlinks and targets","user":{"login":"bmw","id":6504915,"avatar_url":"https://avatars.githubusercontent.com/u/6504915?v=3","gravatar_id":"","url":"https://api.github.com/users/bmw","html_url":"https://github.com/bmw","followers_url":"https://api.github.com/users/bmw/followers","following_url":"https://api.github.com/users/bmw/following{/other_user}","gists_url":"https://api.github.com/users/bmw/gists{/gist_id}","starred_url":"https://api.github.com/users/bmw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmw/subscriptions","organizations_url":"https://api.github.com/users/bmw/orgs","repos_url":"https://api.github.com/users/bmw/repos","events_url":"https://api.github.com/users/bmw/events{/privacy}","received_events_url":"https://api.github.com/users/bmw/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/labels/easy-fix","name":"easy-fix","color":"207de5"},{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/labels/error-messages","name":"error-messages","color":"eb6420"},{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/labels/Good%20Volunteer%20Task","name":"Good Volunteer Task","color":"fef2c0"},{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/labels/renewal","name":"renewal","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/milestones/13","html_url":"https://github.com/letsencrypt/letsencrypt/milestones/0.3.0","labels_url":"https://api.github.com/repos/letsencrypt/letsencrypt/milestones/13/labels","id":1458720,"number":13,"title":"0.3.0","description":"This release will feature reasonable autorenewal support, at least for users who are willing to configure their own cron jobs.","creator":{"login":"pde","id":479213,"avatar_url":"https://avatars.githubusercontent.com/u/479213?v=3","gravatar_id":"","url":"https://api.github.com/users/pde","html_url":"https://github.com/pde","followers_url":"https://api.github.com/users/pde/followers","following_url":"https://api.github.com/users/pde/following{/other_user}","gists_url":"https://api.github.com/users/pde/gists{/gist_id}","starred_url":"https://api.github.com/users/pde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pde/subscriptions","organizations_url":"https://api.github.com/users/pde/orgs","repos_url":"https://api.github.com/users/pde/repos","events_url":"https://api.github.com/users/pde/events{/privacy}","received_events_url":"https://api.github.com/users/pde/received_events","type":"User","site_admin":false},"open_issues":17,"closed_issues":1,"state":"open","created_at":"2015-12-14T09:29:18Z","updated_at":"2015-12-23T18:05:17Z","due_on":"2016-01-22T08:00:00Z","closed_at":null},"comments":1,"created_at":"2015-12-23T18:05:17Z","updated_at":"2015-12-29T14:17:40Z","closed_at":null,"body":"In `letsencrypt.storage.RenewableCert.__init__`, we should verify that all symlinks and their targets exist after calling `_fix_symlinks`. If they do not, we should raise an exception to prevent problems like the one identified in #1959 from occurring."},"comment":{"url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/comments/167798876","html_url":"https://github.com/letsencrypt/letsencrypt/issues/2000#issuecomment-167798876","issue_url":"https://api.github.com/repos/letsencrypt/letsencrypt/issues/2000","id":167798876,"user":{"login":"cowlicks","id":598099,"avatar_url":"https://avatars.githubusercontent.com/u/598099?v=3","gravatar_id":"","url":"https://api.github.com/users/cowlicks","html_url":"https://github.com/cowlicks","followers_url":"https://api.github.com/users/cowlicks/followers","following_url":"https://api.github.com/users/cowlicks/following{/other_user}","gists_url":"https://api.github.com/users/cowlicks/gists{/gist_id}","starred_url":"https://api.github.com/users/cowlicks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cowlicks/subscriptions","organizations_url":"https://api.github.com/users/cowlicks/orgs","repos_url":"https://api.github.com/users/cowlicks/repos","events_url":"https://api.github.com/users/cowlicks/events{/privacy}","received_events_url":"https://api.github.com/users/cowlicks/received_events","type":"User","site_admin":false},"created_at":"2015-12-29T14:17:40Z","updated_at":"2015-12-29T14:17:40Z","body":"We depend on the symlinks not existing in some places in the tests.\r\n\r\nIn the `le/le/tests/renewer_tests.py::BaseRenewableCertTest` we create a test `RenewabelCert` ([here](https://github.com/letsencrypt/letsencrypt/blob/master/letsencrypt/tests/renewer_test.py#L70)) where the  `self.cert`, `self.privkey`, etc. symlinks do not exists yet.\r\n\r\nThen later, in some tests we manually add the links ([here](https://github.com/letsencrypt/letsencrypt/blob/master/letsencrypt/tests/renewer_test.py#L173)).\r\n\r\nSo I think this check should still be added, but the tests need to be changed too."}}