From 4426899e8c9469518325f39f173151b3535ac20e Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 6 May 2015 21:02:59 -0700 Subject: [PATCH] Add support for local user account caching of authtoken.secret as in old UI -- this is now pretty much working. --- .gitignore | 2 +- .../UserInterfaceState.xcuserstate | Bin 19568 -> 0 bytes .../api.xcuserdatad/xcschemes/MacGap.xcscheme | 88 ---------- .../xcschemes/xcschememanagement.plist | 22 --- .../MacGap/AppDelegate.m | 157 +++++++++++------- 5 files changed, 97 insertions(+), 172 deletions(-) delete mode 100644 ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/MacGap.xcscheme delete mode 100644 ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore index f789b3b78..4a24c4db6 100755 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,4 @@ /root-topology/*.secret /root-topology/test/supernodes /root-topology/test/test-root-topology -xcuserdata +/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/project.xcworkspace/xcuserdata/* diff --git a/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/UserInterfaceState.xcuserstate b/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 6dfcf6d063cad694d23a1f13b2cf3f49bbd662ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19568 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 AW&i*H diff --git a/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/MacGap.xcscheme b/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/MacGap.xcscheme deleted file mode 100644 index 2555dc89c..000000000 --- a/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/MacGap.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/xcschememanagement.plist b/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 921f1a6fe..000000000 --- a/ext/mac-ui-macgap1-wrapper/MacGap.xcodeproj/xcuserdata/api.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - MacGap.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - FAE451B914BA79C600190544 - - primary - - - - - diff --git a/ext/mac-ui-macgap1-wrapper/MacGap/AppDelegate.m b/ext/mac-ui-macgap1-wrapper/MacGap/AppDelegate.m index 96a3e8201..3e25ca13f 100644 --- a/ext/mac-ui-macgap1-wrapper/MacGap/AppDelegate.m +++ b/ext/mac-ui-macgap1-wrapper/MacGap/AppDelegate.m @@ -7,6 +7,8 @@ // #import "AppDelegate.h" +#include +#include @implementation AppDelegate @@ -29,75 +31,108 @@ } - (void) applicationDidFinishLaunching:(NSNotification *)aNotification { - // Create authorization reference - OSStatus status; - AuthorizationRef authorizationRef; - - // AuthorizationCreate and pass NULL as the initial - // AuthorizationRights set so that the AuthorizationRef gets created - // successfully, and then later call AuthorizationCopyRights to - // determine or extend the allowable rights. - // http://developer.apple.com/qa/qa2001/qa1172.html - status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef); - if (status != errAuthorizationSuccess) - { - NSLog(@"Error Creating Initial Authorization: %d", status); - return; - } - - // kAuthorizationRightExecute == "system.privilege.admin" - AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; - AuthorizationRights rights = {1, &right}; - AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | - kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights; - - // Call AuthorizationCopyRights to determine or extend the allowable rights. - status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL); - if (status != errAuthorizationSuccess) - { - NSLog(@"Copy Rights Unsuccessful: %d", status); - return; - } - - // use rm tool with -rf - char *tool = "/bin/cat"; - char *args[] = {"/Library/Application Support/ZeroTier/One/authtoken.secret", NULL}; - FILE *pipe = NULL; - - status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe); - if (status != errAuthorizationSuccess) - { - NSLog(@"Error: %d", status); - } - - char url[16384]; - memset(url,0,sizeof(url)); - if (pipe) { - char buf[16384]; + char buf[16384],userAuthTokenPath[4096]; - FILE *pf = fopen("/Library/Application Support/ZeroTier/One/zerotier-one.port","r"); + FILE *pf = fopen("/Library/Application Support/ZeroTier/One/zerotier-one.port","r"); + long port = 9993; // default + if (pf) { long n = fread(buf,1,sizeof(buf)-1,pf); - long port = 9993; // default if (n > 0) { buf[n] = (char)0; port = strtol(buf,(char **)0,10); } fclose(pf); - - n = (long)fread(buf,1,sizeof(buf)-1,pipe); - if (n > 0) { - buf[n] = (char)0; - snprintf(url,sizeof(url),"http://127.0.0.1:%ld/index.html?authToken=%s",port,buf); - } - fclose(pipe); } - - // The only way to guarantee that a credential acquired when you - // request a right is not shared with other authorization instances is - // to destroy the credential. To do so, call the AuthorizationFree - // function with the flag kAuthorizationFlagDestroyRights. - // http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/02authconcepts/chapter_2_section_7.html - status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights); + + char url[16384]; + memset(url,0,sizeof(url)); + + const char *homeDir = getenv("HOME"); + if (homeDir) { + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One/authtoken.secret",homeDir); + pf = fopen(userAuthTokenPath,"r"); + if (pf) { + long n = fread(buf,1,sizeof(buf)-1,pf); + if (n > 0) { + buf[n] = (char)0; + snprintf(url,sizeof(url),"http://127.0.0.1:%ld/index.html?authToken=%s",port,buf); + } + fclose(pf); + } + } + + if (!url[0]) { + // Create authorization reference + OSStatus status; + AuthorizationRef authorizationRef; + + // AuthorizationCreate and pass NULL as the initial + // AuthorizationRights set so that the AuthorizationRef gets created + // successfully, and then later call AuthorizationCopyRights to + // determine or extend the allowable rights. + // http://developer.apple.com/qa/qa2001/qa1172.html + status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef); + if (status != errAuthorizationSuccess) + { + NSLog(@"Error Creating Initial Authorization: %d", status); + return; + } + + // kAuthorizationRightExecute == "system.privilege.admin" + AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights rights = {1, &right}; + AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | + kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights; + + // Call AuthorizationCopyRights to determine or extend the allowable rights. + status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL); + if (status != errAuthorizationSuccess) + { + NSLog(@"Copy Rights Unsuccessful: %d", status); + return; + } + + // use rm tool with -rf + char *tool = "/bin/cat"; + char *args[] = {"/Library/Application Support/ZeroTier/One/authtoken.secret", NULL}; + FILE *pipe = NULL; + + status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe); + if (status != errAuthorizationSuccess) + { + NSLog(@"Error: %d", status); + } + + if (pipe) { + long n = (long)fread(buf,1,sizeof(buf)-1,pipe); + if (n > 0) { + buf[n] = (char)0; + snprintf(url,sizeof(url),"http://127.0.0.1:%ld/index.html?authToken=%s",port,buf); + + if (homeDir) { + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier",homeDir); + mkdir(userAuthTokenPath,0755); + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One",homeDir); + mkdir(userAuthTokenPath,0755); + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One/authtoken.secret",homeDir); + pf = fopen(userAuthTokenPath,"w"); + if (pf) { + fwrite(buf,1,strlen(buf),pf); + fclose(pf); + chmod(userAuthTokenPath,0600); + } + } + } + fclose(pipe); + } + + // The only way to guarantee that a credential acquired when you + // request a right is not shared with other authorization instances is + // to destroy the credential. To do so, call the AuthorizationFree + // function with the flag kAuthorizationFlagDestroyRights. + // http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/02authconcepts/chapter_2_section_7.html + status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights); + } NSString *urlStr = [[NSString alloc] initWithCString:url]; self.windowController = [[WindowController alloc] initWithURL: urlStr];