-- (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;
-}