AuthorizationExecuteWithPrivileges()作为root错误
|
我是可可的初学者。
我只想在我的Cocoa App中启动Apache和其他进程。
这是我的代码:
OSStatus myStatus;
AuthorizationFlags myFlags = kAuthorizationFlagDefaults;
AuthorizationRef myAuthorizationRef;
FILE *pipe = NULL;
myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, myFlags, &myAuthorizationRef);
AuthorizationItem myItems = {kAuthorizationRightExecute, 0, NULL, 0};
AuthorizationRights myRights = {1, &myItems};
myFlags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
myStatus = AuthorizationCopyPrivilegedReference (&myAuthorizationRef,kAuthorizationFlagDefaults);
myStatus = AuthorizationCopyRights (myAuthorizationRef,&myRights, NULL, myFlags, NULL );
char *tool = \"/usr/sbin/apachectl\";
char *args[] = { \"start\",NULL} ;
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);
char c[100];
int n=fread(c,1,100,pipe);
c[n] = \'\\0\';
NSLog(@\"%s\\n\",c);
theResult:此操作需要root当我运行\'whoami \'时,我是\'root \',但是当我运行getuid()时,我是\'501 \'...
我尝试使用setuid(0);但这没有设置!
你能帮助我吗?谢谢
没有找到相关结果
已邀请:
3 个回复
傻寺俊擒
草票
然后,基本上按以下方式运行(通过AuthorizationExecuteWithPrivileges调用):
它将setuid作为root,然后使用给定的args运行有问题的程序。 请注意,您必须从AuthorizationExecuteWithPrivileges调用setuid,因为只有AuthorizationExecuteWithPrivileges创建的pid才具有升级权限(setuid将执行并用您自己的进程替换)。
犁攀富