void Id_EndSuperUser(uid_t uid) // IN: { if ((uid != (uid_t) -1) && (uid != Id_GetEUid())) { ASSERT(uid != 0); // Don't allow cheating like this #if defined(__APPLE__) if (syscall(SYS_settid, uid, getgid()) == -1) { Log("Failed to release super user privileges.\n"); } #else Id_SetRESUid((uid_t) -1, uid, (uid_t) -1); // revert to uid #endif } }
uid_t Id_BeginSuperUser(void) { uid_t uid = Id_GetEUid(); ASSERT_NOT_IMPLEMENTED(uid != (uid_t) -1); if (uid == 0) { uid = (uid_t) -1; // already root; nothing to do } else { #if defined(__APPLE__) syscall(SYS_settid, KAUTH_UID_NONE, KAUTH_GID_NONE /* Ignored. */); #else Id_SetRESUid((uid_t) -1, (uid_t) 0, (uid_t) -1); // effectively root #endif } return uid; }
uid_t Id_BeginSuperUser(void) { uid_t uid = Id_GetEUid(); VERIFY(uid != (uid_t) -1); if (uid == 0) { uid = (uid_t) -1; // already root; nothing to do } else { #if defined(__APPLE__) #if TARGET_OS_IPHONE Warning("XXXIOS: implement %s\n", __func__); #else syscall(SYS_settid, KAUTH_UID_NONE, KAUTH_GID_NONE /* Ignored. */); #endif #else Id_SetRESUid((uid_t) -1, (uid_t) 0, (uid_t) -1); // effectively root #endif } return uid; }