i* Add contextual error information in die() - sup - small tool for privilege escalation Err bitreich.org 70
hgit clone git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup URL:git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup bitreich.org 70
1Log /scm/sup/log.gph bitreich.org 70
1Files /scm/sup/files.gph bitreich.org 70
1Refs /scm/sup/refs.gph bitreich.org 70
1Tags /scm/sup/tag bitreich.org 70
1README /scm/sup/file/README.gph bitreich.org 70
1LICENSE /scm/sup/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 8078fe60673809c9ce32dd85613e9f96d7278742 /scm/sup/commit/8078fe60673809c9ce32dd85613e9f96d7278742.gph bitreich.org 70
1parent 0492cb034b11bc7ae89a4be974cf80678c74bfe8 /scm/sup/commit/0492cb034b11bc7ae89a4be974cf80678c74bfe8.gph bitreich.org 70
hAuthor: pancake@dazo <unknown> URL:mailto:unknown bitreich.org 70
iDate: Mon, 4 Jan 2010 00:06:28 +0100 Err bitreich.org 70
i Err bitreich.org 70
i* Add contextual error information in die() Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M sup.c | 24 ++++++++++++------------ Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 12 insertions(+), 12 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/sup.c b/sup.c /scm/sup/file/sup.c.gph bitreich.org 70
i@@ -18,8 +18,8 @@ struct rule_t { Err bitreich.org 70
i Err bitreich.org 70
i #include "config.h" Err bitreich.org 70
i Err bitreich.org 70
i-static int die(int ret, const char *str) { Err bitreich.org 70
i- fprintf (stderr, "%s\n", str); Err bitreich.org 70
i+static int die(int ret, const char *org, const char *str) { Err bitreich.org 70
i+ fprintf (stderr, "%s%s%s\n", org, org?": ":"", str); Err bitreich.org 70
i return ret; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -27,10 +27,10 @@ int main(int argc, char **argv) { Err bitreich.org 70
i int i, uid, gid, ret; Err bitreich.org 70
i Err bitreich.org 70
i if (argc < 2 || !strcmp (argv[1], "-h")) Err bitreich.org 70
i- return die (1, HELP); Err bitreich.org 70
i+ return die (1, NULL, HELP); Err bitreich.org 70
i Err bitreich.org 70
i if (!strcmp (argv[1], "-v")) Err bitreich.org 70
i- return die (1, VERSION); Err bitreich.org 70
i+ return die (1, NULL, VERSION); Err bitreich.org 70
i Err bitreich.org 70
i if (!strcmp (argv[1], "-l")) { Err bitreich.org 70
i for (i = 0; rules[i].cmd != NULL; i++) Err bitreich.org 70
i@@ -48,29 +48,29 @@ int main(int argc, char **argv) { Err bitreich.org 70
i struct stat st; Err bitreich.org 70
i lstat (rules[i].path, &st); Err bitreich.org 70
i if (st.st_mode & 0222) Err bitreich.org 70
i- return die (1, "Cannot run writable binaries."); Err bitreich.org 70
i+ return die (1, "stat", "Cannot run writable binaries."); Err bitreich.org 70
i #endif Err bitreich.org 70
i if (uid != SETUID && rules[i].uid != -1 && rules[i].uid != uid) Err bitreich.org 70
i- return die (1, "User does not match"); Err bitreich.org 70
i+ return die (1, "urule", "User does not match"); Err bitreich.org 70
i Err bitreich.org 70
i if (gid != SETGID && rules[i].gid != -1 && rules[i].gid != gid) Err bitreich.org 70
i- return die (1, "Group id does not match"); Err bitreich.org 70
i+ return die (1, "grule", "Group id does not match"); Err bitreich.org 70
i Err bitreich.org 70
i if (setuid (SETUID) == -1 || setgid (SETGID) == -1 || Err bitreich.org 70
i seteuid (SETUID) == -1 || setegid (SETGID) == -1) Err bitreich.org 70
i- return die (1, strerror (errno)); Err bitreich.org 70
i+ return die (1, "set[e][ug]id", strerror (errno)); Err bitreich.org 70
i #ifdef CHROOT Err bitreich.org 70
i if (*CHROOT) Err bitreich.org 70
i if (chdir (CHROOT) == -1 || chroot (".") == -1) Err bitreich.org 70
i- return die (1, strerror (errno)); Err bitreich.org 70
i+ return die (1, "chroot", strerror (errno)); Err bitreich.org 70
i if (*CHRDIR) Err bitreich.org 70
i if (chdir (CHRDIR) == -1) Err bitreich.org 70
i- return die (1, strerror (errno)); Err bitreich.org 70
i+ return die (1, "chdir", strerror (errno)); Err bitreich.org 70
i #endif Err bitreich.org 70
i ret = execv (*rules[i].path? rules[i].path:argv[1], argv+1); Err bitreich.org 70
i- return die (ret, strerror (errno)); Err bitreich.org 70
i+ return die (ret, "execv", strerror (errno)); Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- return die (1, "Sorry"); Err bitreich.org 70
i+ return die (1, NULL, "Sorry"); Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain