Вы захотите использовать функцию AuthorizationExecuteWithPrivileges, например:
- (IBAction)touch: (id) sender {
NSString * filepath = [_filepathfield stringValue];
FILE *commpipe = NULL;
OSStatus execstatus;
NSLog(@"file path is %@", filepath);
char *args[] = {[filepath cString], NULL};
SFAuthorization * authorization = [SFAuthorization authorization];
execstatus = AuthorizationExecuteWithPrivileges([authorization authorizationRef],
"/usr/bin/touch",
kAuthorizationFlagDefaults,
args,
&commpipe);
if (execstatus == errAuthorizationSuccess)
NSlog(@"Toot! It worked");
else
NSLog(@"No dice");
}
Учитывая, что BSD - тонкий и раздражительный цветок, я бы рекомендовал не разрешать пользователю выполнять произвольные команды из приложения от имени пользователя root.
/ лекция
Код из вашего примера - это начало пути, если вы хотите ограничить функции своей собственной программы от своих собственных пользователей. Например, у вас может быть приложение, которое позволяет только определенным пользователям изменять данные из сохраненного файла. Таким образом, вы должны создать запись в базе данных безопасности «com.mycompany.LibraryApp.AlterData» и проверить, есть ли у пользователя эта привилегия при попытке изменить данные. Но это совсем другая тема ...
Надеюсь, это поможет,
-p.