version 1.1, 2002/01/03 03:49:16 |
version 1.2, 2002/01/14 00:11:44 |
|
|
#include "sudo.h" |
#include "sudo.h" |
|
|
#ifndef lint |
#ifndef lint |
static const char rcsid[] = "$Sudo: set_perms.c,v 1.8 2001/12/31 17:18:05 millert Exp $"; |
static const char rcsid[] = "$Sudo: set_perms.c,v 1.9 2002/01/13 18:28:09 millert Exp $"; |
#endif /* lint */ |
#endif /* lint */ |
|
|
/* |
/* |
|
|
if (seteuid(0)) |
if (seteuid(0)) |
fatal("seteuid(0)"); |
fatal("seteuid(0)"); |
break; |
break; |
|
|
|
case PERM_FULL_ROOT: |
|
/* headed for exec() */ |
|
(void) seteuid(0); |
|
if (setuid(0)) |
|
fatal("setuid(0)"); |
|
break; |
|
|
case PERM_USER: |
case PERM_USER: |
(void) setegid(user_gid); |
(void) setegid(user_gid); |
if (seteuid(user_uid)) |
if (seteuid(user_uid)) |
fatal("seteuid(user_uid)"); |
fatal("seteuid(user_uid)"); |
break; |
break; |
|
|
case PERM_FULL_USER: |
|
/* headed for exec() */ |
|
(void) setgid(user_gid); |
|
if (setuid(user_uid)) |
|
fatal("setuid(user_uid)"); |
|
break; |
|
|
|
case PERM_RUNAS: |
case PERM_RUNAS: |
/* headed for exec(), assume euid == 0 */ |
/* headed for exec(), assume euid == 0 */ |
runas_setup(); |
runas_setup(); |
|
|
int error; |
int error; |
|
|
switch (perm) { |
switch (perm) { |
|
case PERM_FULL_ROOT: |
case PERM_ROOT: |
case PERM_ROOT: |
if (setuid(0)) |
if (setuid(0)) |
fatal("setuid(0)"); |
fatal("setuid(0)"); |
break; |
break; |
|
|
case PERM_USER: |
case PERM_USER: |
(void) setegid(user_gid); |
(void) setegid(user_gid); |
if (setreuid(0, user_uid)) |
if (setreuid(0, user_uid)) |
fatal("setreuid(0, user_uid)"); |
fatal("setreuid(0, user_uid)"); |
break; |
break; |
|
|
case PERM_FULL_USER: |
|
/* headed for exec() */ |
|
(void) setgid(user_gid); |
|
if (setuid(user_uid)) { |
|
fatal("setuid(user_uid)"); |
|
exit(1); |
|
} |
|
break; |
|
|
|
case PERM_RUNAS: |
case PERM_RUNAS: |
/* headed for exec(), assume euid == 0 */ |
/* headed for exec(), assume euid == 0 */ |
runas_setup(); |
runas_setup(); |
|
|
fatal("seteuid(user_uid)"); |
fatal("seteuid(user_uid)"); |
break; |
break; |
|
|
case PERM_FULL_USER: |
|
/* headed for exec() */ |
|
(void) setgid(user_gid); |
|
if (setuid(user_uid)) |
|
fatal("setuid(user_uid)"); |
|
break; |
|
|
|
case PERM_RUNAS: |
case PERM_RUNAS: |
/* headed for exec(), assume euid == 0 */ |
/* headed for exec(), assume euid == 0 */ |
runas_setup(); |
runas_setup(); |