|
|
| version 1.1.1.1, 2012/02/21 16:23:02 | version 1.1.1.2, 2012/05/29 12:26:49 |
|---|---|
| Line 16 | Line 16 |
| #include <config.h> | #include <config.h> |
| #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) | |
| #include <sys/types.h> | #include <sys/types.h> |
| #include <sys/param.h> | #include <sys/param.h> |
| #include <sys/stat.h> | #include <sys/stat.h> |
| Line 54 | Line 52 |
| #include "sudo.h" | #include "sudo.h" |
| #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) | |
| static void | static void |
| switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) | switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) |
| { | { |
| int serrno = errno; | int serrno = errno; |
| debug_decl(switch_user, SUDO_DEBUG_EDIT) | |
| /* When restoring root, change euid first; otherwise change it last. */ | /* When restoring root, change euid first; otherwise change it last. */ |
| if (euid == ROOT_UID) { | if (euid == ROOT_UID) { |
| Line 74 switch_user(uid_t euid, gid_t egid, int ngroups, GETGR | Line 75 switch_user(uid_t euid, gid_t egid, int ngroups, GETGR |
| if (seteuid(euid) != 0) | if (seteuid(euid) != 0) |
| error(1, "seteuid(%d)", (int)euid); | error(1, "seteuid(%d)", (int)euid); |
| } | } |
| errno = serrno; | errno = serrno; |
| debug_return; | |
| } | } |
| /* | /* |
| Line 98 sudo_edit(struct command_details *command_details) | Line 100 sudo_edit(struct command_details *command_details) |
| char *ofile; | char *ofile; |
| struct timeval omtim; | struct timeval omtim; |
| off_t osize; | off_t osize; |
| } *tf; | } *tf = NULL; |
| debug_decl(sudo_edit, SUDO_DEBUG_EDIT) | |
| /* | /* |
| * Set real, effective and saved uids to root. | * Set real, effective and saved uids to root. |
| Line 106 sudo_edit(struct command_details *command_details) | Line 109 sudo_edit(struct command_details *command_details) |
| */ | */ |
| if (setuid(ROOT_UID) != 0) { | if (setuid(ROOT_UID) != 0) { |
| warning(_("unable to change uid to root (%u)"), ROOT_UID); | warning(_("unable to change uid to root (%u)"), ROOT_UID); |
| return 1; | goto cleanup; |
| } | } |
| /* | /* |
| Line 138 sudo_edit(struct command_details *command_details) | Line 141 sudo_edit(struct command_details *command_details) |
| } | } |
| if (nfiles == 0) { | if (nfiles == 0) { |
| warningx(_("plugin error: missing file list for sudoedit")); | warningx(_("plugin error: missing file list for sudoedit")); |
| return 1; | goto cleanup; |
| } | } |
| /* | /* |
| Line 220 sudo_edit(struct command_details *command_details) | Line 223 sudo_edit(struct command_details *command_details) |
| j++; | j++; |
| } | } |
| if ((nfiles = j) == 0) | if ((nfiles = j) == 0) |
| return 1; /* no files readable, you lose */ | goto cleanup; /* no files readable, you lose */ |
| /* | /* |
| * Allocate space for the new argument vector and fill it in. | * Allocate space for the new argument vector and fill it in. |
| Line 317 sudo_edit(struct command_details *command_details) | Line 320 sudo_edit(struct command_details *command_details) |
| } | } |
| close(ofd); | close(ofd); |
| } | } |
| debug_return_int(rval); | |
| return rval; | |
| cleanup: | cleanup: |
| /* Clean up temp files and return. */ | /* Clean up temp files and return. */ |
| for (i = 0; i < nfiles; i++) { | if (tf != NULL) { |
| if (tf[i].tfile != NULL) | for (i = 0; i < nfiles; i++) { |
| unlink(tf[i].tfile); | if (tf[i].tfile != NULL) |
| unlink(tf[i].tfile); | |
| } | |
| } | } |
| return 1; | debug_return_int(1); |
| } | } |
| #else /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ | #else /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ |
| Line 336 cleanup: | Line 341 cleanup: |
| int | int |
| sudo_edit(struct command_details *command_details) | sudo_edit(struct command_details *command_details) |
| { | { |
| return 1; | debug_decl(sudo_edit, SUDO_DEBUG_EDIT) |
| debug_return_int(1); | |
| } | } |
| #endif /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ | #endif /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ |