{"action":"created","issue":{"url":"https://api.github.com/repos/mindaptiv/Ellen/issues/21","labels_url":"https://api.github.com/repos/mindaptiv/Ellen/issues/21/labels{/name}","comments_url":"https://api.github.com/repos/mindaptiv/Ellen/issues/21/comments","events_url":"https://api.github.com/repos/mindaptiv/Ellen/issues/21/events","html_url":"https://github.com/mindaptiv/Ellen/issues/21","id":96190760,"number":21,"title":"Status Update 7/20","user":{"login":"Scrubsauce","id":2531841,"avatar_url":"https://avatars.githubusercontent.com/u/2531841?v=3","gravatar_id":"","url":"https://api.github.com/users/Scrubsauce","html_url":"https://github.com/Scrubsauce","followers_url":"https://api.github.com/users/Scrubsauce/followers","following_url":"https://api.github.com/users/Scrubsauce/following{/other_user}","gists_url":"https://api.github.com/users/Scrubsauce/gists{/gist_id}","starred_url":"https://api.github.com/users/Scrubsauce/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scrubsauce/subscriptions","organizations_url":"https://api.github.com/users/Scrubsauce/orgs","repos_url":"https://api.github.com/users/Scrubsauce/repos","events_url":"https://api.github.com/users/Scrubsauce/events{/privacy}","received_events_url":"https://api.github.com/users/Scrubsauce/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/mindaptiv/Ellen/labels/status%20update","name":"status update","color":"0052cc"}],"state":"open","locked":false,"assignee":{"login":"Simulacrum0","id":8696781,"avatar_url":"https://avatars.githubusercontent.com/u/8696781?v=3","gravatar_id":"","url":"https://api.github.com/users/Simulacrum0","html_url":"https://github.com/Simulacrum0","followers_url":"https://api.github.com/users/Simulacrum0/followers","following_url":"https://api.github.com/users/Simulacrum0/following{/other_user}","gists_url":"https://api.github.com/users/Simulacrum0/gists{/gist_id}","starred_url":"https://api.github.com/users/Simulacrum0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Simulacrum0/subscriptions","organizations_url":"https://api.github.com/users/Simulacrum0/orgs","repos_url":"https://api.github.com/users/Simulacrum0/repos","events_url":"https://api.github.com/users/Simulacrum0/events{/privacy}","received_events_url":"https://api.github.com/users/Simulacrum0/received_events","type":"User","site_admin":false},"milestone":null,"comments":1,"created_at":"2015-07-20T23:44:50Z","updated_at":"2015-07-21T16:32:13Z","closed_at":null,"body":"Hey Jake,\r\n\r\n1. Spent first half of day working on Ellen.  Trying to learn how to handle dlsym'ing methods that expect arguments and tried to run it with getlogin_r(char*, sizet), but still had something off because it was complaining about too many arguments.  Switched gears because this made me suspicious I wasn't even doing the original getlogin() call correctly with dlsym.  I tried calling getlogin() without using dlopen() and still got null, and getlogin_r() was also returning an error of code 2 (was still looking for a definition for that error when I stopped today).  \r\n\r\nStill wrapping my head around some of the dynamic linking stuff, but do you know (since Googling hasn't given a straight answer yet) if dlsym works only with object definitions (like loading a class or a struct) and method definitions (like getlogin())?  There are some constants I want to use in unistd and could not get them to open via dlsym (namely for the max login name length to use as the buffer size).  Am I allowed to just grab those constants from including a header or am I supposed to be dynamically loading those as well?\r\n\r\n2. Spent the second half of the day working on Doubleheader stuff.  Now pointing to a correctly functioning link for sources to get s3cmd installed (using the master git release instead of some sketchy tarball out there on the Internet).  When I left today was able to successfully automate downloading, installation, and granting of sudo rights to the config file, only one command is failing right now (the uploading of the website assets to the bucket), so we're 75% done with this second half of our issues from Friday.  Will be updating Doubleheader repo accordingly when completed.\r\n\r\nThanks,\r\nJosh"},"comment":{"url":"https://api.github.com/repos/mindaptiv/Ellen/issues/comments/123394144","html_url":"https://github.com/mindaptiv/Ellen/issues/21#issuecomment-123394144","issue_url":"https://api.github.com/repos/mindaptiv/Ellen/issues/21","id":123394144,"user":{"login":"Scrubsauce","id":2531841,"avatar_url":"https://avatars.githubusercontent.com/u/2531841?v=3","gravatar_id":"","url":"https://api.github.com/users/Scrubsauce","html_url":"https://github.com/Scrubsauce","followers_url":"https://api.github.com/users/Scrubsauce/followers","following_url":"https://api.github.com/users/Scrubsauce/following{/other_user}","gists_url":"https://api.github.com/users/Scrubsauce/gists{/gist_id}","starred_url":"https://api.github.com/users/Scrubsauce/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scrubsauce/subscriptions","organizations_url":"https://api.github.com/users/Scrubsauce/orgs","repos_url":"https://api.github.com/users/Scrubsauce/repos","events_url":"https://api.github.com/users/Scrubsauce/events{/privacy}","received_events_url":"https://api.github.com/users/Scrubsauce/received_events","type":"User","site_admin":false},"created_at":"2015-07-21T16:32:13Z","updated_at":"2015-07-21T16:32:13Z","body":"Early Tuesday update: I found an alternative (still in libc) to getting username that's working.  Currently calling it the traditional way (#include  <unistd.h>, call the method).  I have to use the pw struct to get the information, so I guess my next question is- how far am I to take this dynamically loading methodology?  Should I only be worrying about methods, or should everythig be loaded up via dlsym?\r\ni.e. in my current function I'd have to:\r\n0. run for loop\r\n1. dlopen libc\r\n2. dlsym uid_t struct\r\n3. dlsym pw struct\r\n4. dlsym geteuid\r\n5. dlsym getpwuid\r\n6. dlsym string constructor\r\n7. store string in cylonStruct\r\n8. dlclose libc\r\n\r\nEach of these dl* calls requires at least one if-else clause to handle an error if the symbol isn't found, so <10 lines quickly morphs into <100."}}