sup

simple user privilege escalation
git clone git://git.suckless.org/sup
Log | Files | Refs

commit 8078fe60673809c9ce32dd85613e9f96d7278742
parent 0492cb034b11bc7ae89a4be974cf80678c74bfe8
Author: pancake@dazo <unknown>
Date:   Mon,  4 Jan 2010 00:06:28 +0100

* Add contextual error information in die()
Diffstat:
sup.c | 24++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/sup.c b/sup.c @@ -18,8 +18,8 @@ struct rule_t { #include "config.h" -static int die(int ret, const char *str) { - fprintf (stderr, "%s\n", str); +static int die(int ret, const char *org, const char *str) { + fprintf (stderr, "%s%s%s\n", org, org?": ":"", str); return ret; } @@ -27,10 +27,10 @@ int main(int argc, char **argv) { int i, uid, gid, ret; if (argc < 2 || !strcmp (argv[1], "-h")) - return die (1, HELP); + return die (1, NULL, HELP); if (!strcmp (argv[1], "-v")) - return die (1, VERSION); + return die (1, NULL, VERSION); if (!strcmp (argv[1], "-l")) { for (i = 0; rules[i].cmd != NULL; i++) @@ -48,29 +48,29 @@ int main(int argc, char **argv) { struct stat st; lstat (rules[i].path, &st); if (st.st_mode & 0222) - return die (1, "Cannot run writable binaries."); + return die (1, "stat", "Cannot run writable binaries."); #endif if (uid != SETUID && rules[i].uid != -1 && rules[i].uid != uid) - return die (1, "User does not match"); + return die (1, "urule", "User does not match"); if (gid != SETGID && rules[i].gid != -1 && rules[i].gid != gid) - return die (1, "Group id does not match"); + return die (1, "grule", "Group id does not match"); if (setuid (SETUID) == -1 || setgid (SETGID) == -1 || seteuid (SETUID) == -1 || setegid (SETGID) == -1) - return die (1, strerror (errno)); + return die (1, "set[e][ug]id", strerror (errno)); #ifdef CHROOT if (*CHROOT) if (chdir (CHROOT) == -1 || chroot (".") == -1) - return die (1, strerror (errno)); + return die (1, "chroot", strerror (errno)); if (*CHRDIR) if (chdir (CHRDIR) == -1) - return die (1, strerror (errno)); + return die (1, "chdir", strerror (errno)); #endif ret = execv (*rules[i].path? rules[i].path:argv[1], argv+1); - return die (ret, strerror (errno)); + return die (ret, "execv", strerror (errno)); } } - return die (1, "Sorry"); + return die (1, NULL, "Sorry"); }