+- (int) preAuthorize
+{
+ int err;
+ AuthorizationFlags authFlags;
+
+
+ NSLog (@"MyWindowController: preAuthorize");
+
+ if (_authRef)
+ return errAuthorizationSuccess;
+
+ NSLog (@"MyWindowController: preAuthorize: ** calling AuthorizationCreate...**\n");
+
+ authFlags = kAuthorizationFlagDefaults;
+ err = AuthorizationCreate (NULL, kAuthorizationEmptyEnvironment, authFlags, &_authRef);
+ if (err != errAuthorizationSuccess)
+ return err;
+
+ NSLog (@"MyWindowController: preAuthorize: ** calling AuthorizationCopyRights...**\n");
+
+ _authItem.name = kAuthorizationRightExecute;
+ _authItem.valueLength = 0;
+ _authItem.value = NULL;
+ _authItem.flags = 0;
+ _authRights.count = 1;
+ _authRights.items = (AuthorizationItem*) malloc (sizeof (_authItem));
+ memcpy (&_authRights.items[0], &_authItem, sizeof (_authItem));
+ authFlags = kAuthorizationFlagDefaults
+ | kAuthorizationFlagExtendRights
+ | kAuthorizationFlagInteractionAllowed
+ | kAuthorizationFlagPreAuthorize;
+ err = AuthorizationCopyRights (_authRef, &_authRights, kAuthorizationEmptyEnvironment, authFlags, NULL);
+
+ return err;
+}
+
+- (int) launchAuthPrgm
+{
+ AuthorizationFlags authFlags;
+ int err;
+
+ // path
+ NSString * path = [[NSBundle mainBundle] executablePath];
+ if (![[NSFileManager defaultManager] isExecutableFileAtPath: path])
+ return -1;
+
+ // auth
+
+ if (!_authRef)
+ {
+ err = [self preAuthorize];
+ if (err != errAuthorizationSuccess)
+ return err;
+ }
+
+ // launch
+
+ NSLog (@"MyWindowController: launchWithPath: ** calling AuthorizationExecuteWithPrivileges...**\n");
+ authFlags = kAuthorizationFlagDefaults;
+ err = AuthorizationExecuteWithPrivileges (_authRef, [path cString], authFlags, NULL, NULL);
+ if(err==0) [NSApp terminate:self];
+
+ return err;
+}