AuthtokenCopy.m 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //
  2. // AuthtokenCopy.m
  3. // ZeroTier One
  4. //
  5. // Created by Grant Limberg on 5/31/16.
  6. // Copyright © 2016 ZeroTier, Inc. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "AuthtokenCopy.h"
  10. NSString* getAdminAuthToken(AuthorizationRef authRef) {
  11. char *tool = "/bin/cat";
  12. char *args[] = { "/Library/Application Support/ZeroTier/One/authtoken.secret", NULL};
  13. FILE *pipe = nil;
  14. char token[25];
  15. memset(token, 0, sizeof(char)*25);
  16. OSStatus status = AuthorizationExecuteWithPrivileges(authRef, tool, kAuthorizationFlagDefaults, args, &pipe);
  17. if (status != errAuthorizationSuccess) {
  18. NSLog(@"Reading authtoken failed!");
  19. switch(status) {
  20. case errAuthorizationDenied:
  21. NSLog(@"Autorization Denied");
  22. break;
  23. case errAuthorizationCanceled:
  24. NSLog(@"Authorization Canceled");
  25. break;
  26. case errAuthorizationInternal:
  27. NSLog(@"Authorization Internal");
  28. break;
  29. case errAuthorizationBadAddress:
  30. NSLog(@"Bad Address");
  31. break;
  32. case errAuthorizationInvalidRef:
  33. NSLog(@"Invalid Ref");
  34. break;
  35. case errAuthorizationInvalidSet:
  36. NSLog(@"Invalid Set");
  37. break;
  38. case errAuthorizationInvalidTag:
  39. NSLog(@"Invalid Tag");
  40. break;
  41. case errAuthorizationInvalidFlags:
  42. NSLog(@"Invalid Flags");
  43. break;
  44. case errAuthorizationInvalidPointer:
  45. NSLog(@"Invalid Pointer");
  46. break;
  47. case errAuthorizationToolExecuteFailure:
  48. NSLog(@"Tool Execute Failure");
  49. break;
  50. case errAuthorizationToolEnvironmentError:
  51. NSLog(@"Tool Environment Failure");
  52. break;
  53. case errAuthorizationExternalizeNotAllowed:
  54. NSLog(@"Externalize Not Allowed");
  55. break;
  56. case errAuthorizationInteractionNotAllowed:
  57. NSLog(@"Interaction Not Allowed");
  58. break;
  59. case errAuthorizationInternalizeNotAllowed:
  60. NSLog(@"Internalize Not Allowed");
  61. break;
  62. default:
  63. NSLog(@"Unknown Error");
  64. break;
  65. }
  66. return @"";
  67. }
  68. if(pipe != nil) {
  69. fread(&token, sizeof(char), 24, pipe);
  70. fclose(pipe);
  71. return [NSString stringWithUTF8String:token];
  72. }
  73. return @"";
  74. }