version 1.1.1.2, 2012/05/29 12:26:49
|
version 1.1.1.3, 2013/07/22 10:46:13
|
Line 1
|
Line 1
|
/* |
/* |
* Copyright (c) 2004-2008, 2010-2011 Todd C. Miller <Todd.Miller@courtesan.com> | * Copyright (c) 2004-2008, 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 17
|
Line 17
|
#include <config.h> |
#include <config.h> |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/param.h> |
|
#include <sys/stat.h> |
#include <sys/stat.h> |
#include <sys/time.h> |
#include <sys/time.h> |
#include <sys/wait.h> |
#include <sys/wait.h> |
Line 63 switch_user(uid_t euid, gid_t egid, int ngroups, GETGR
|
Line 62 switch_user(uid_t euid, gid_t egid, int ngroups, GETGR
|
/* 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) { |
if (seteuid(ROOT_UID) != 0) |
if (seteuid(ROOT_UID) != 0) |
error(1, "seteuid(ROOT_UID)"); | fatal("seteuid(ROOT_UID)"); |
} |
} |
if (setegid(egid) != 0) |
if (setegid(egid) != 0) |
error(1, "setegid(%d)", (int)egid); | fatal("setegid(%d)", (int)egid); |
if (ngroups != -1) { |
if (ngroups != -1) { |
if (sudo_setgroups(ngroups, groups) != 0) |
if (sudo_setgroups(ngroups, groups) != 0) |
error(1, "setgroups"); | fatal("setgroups"); |
} |
} |
if (euid != ROOT_UID) { |
if (euid != ROOT_UID) { |
if (seteuid(euid) != 0) |
if (seteuid(euid) != 0) |
error(1, "seteuid(%d)", (int)euid); | fatal("seteuid(%d)", (int)euid); |
} |
} |
errno = serrno; |
errno = serrno; |
|
|
Line 188 sudo_edit(struct command_details *command_details)
|
Line 187 sudo_edit(struct command_details *command_details)
|
easprintf(&tf[j].tfile, "%.*s/%s.XXXXXXXX", tmplen, tmpdir, cp); |
easprintf(&tf[j].tfile, "%.*s/%s.XXXXXXXX", tmplen, tmpdir, cp); |
} |
} |
if (seteuid(user_details.uid) != 0) |
if (seteuid(user_details.uid) != 0) |
error(1, "seteuid(%d)", (int)user_details.uid); | fatal("seteuid(%d)", (int)user_details.uid); |
tfd = mkstemps(tf[j].tfile, suff ? strlen(suff) : 0); |
tfd = mkstemps(tf[j].tfile, suff ? strlen(suff) : 0); |
if (seteuid(ROOT_UID) != 0) |
if (seteuid(ROOT_UID) != 0) |
error(1, "seteuid(ROOT_UID)"); | fatal("seteuid(ROOT_UID)"); |
if (tfd == -1) { |
if (tfd == -1) { |
warning("mkstemps"); |
warning("mkstemps"); |
goto cleanup; |
goto cleanup; |
Line 258 sudo_edit(struct command_details *command_details)
|
Line 257 sudo_edit(struct command_details *command_details)
|
for (i = 0; i < nfiles; i++) { |
for (i = 0; i < nfiles; i++) { |
rc = -1; |
rc = -1; |
if (seteuid(user_details.uid) != 0) |
if (seteuid(user_details.uid) != 0) |
error(1, "seteuid(%d)", (int)user_details.uid); | fatal("seteuid(%d)", (int)user_details.uid); |
if ((tfd = open(tf[i].tfile, O_RDONLY, 0644)) != -1) { |
if ((tfd = open(tf[i].tfile, O_RDONLY, 0644)) != -1) { |
rc = fstat(tfd, &sb); |
rc = fstat(tfd, &sb); |
} |
} |
if (seteuid(ROOT_UID) != 0) |
if (seteuid(ROOT_UID) != 0) |
error(1, "seteuid(ROOT_UID)"); | fatal("seteuid(ROOT_UID)"); |
if (rc || !S_ISREG(sb.st_mode)) { |
if (rc || !S_ISREG(sb.st_mode)) { |
if (rc) |
if (rc) |
warning("%s", tf[i].tfile); |
warning("%s", tf[i].tfile); |