From 71db0fbd81336df4f91a981f9edccc08bc4f8f37 Mon Sep 17 00:00:00 2001 From: mdw Date: Fri, 24 Jan 2003 20:12:26 +0000 Subject: [PATCH] Correctly cast uid and gid sentinel values. Parse full filenames in exec arguments (can't do it for program, unfortunately, since the die is cast). --- exec.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/exec.c b/exec.c index 1f0102b..54a6547 100644 --- a/exec.c +++ b/exec.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: exec.c,v 1.6 2002/02/22 23:43:32 mdw Exp $ + * $Id: exec.c,v 1.7 2003/01/24 20:12:26 mdw Exp $ * * Source and target for executable programs * @@ -29,6 +29,11 @@ /*----- Revision history --------------------------------------------------* * * $Log: exec.c,v $ + * Revision 1.7 2003/01/24 20:12:26 mdw + * Correctly cast uid and gid sentinel values. Parse full filenames in + * exec arguments (can't do it for program, unfortunately, since the die is + * cast). + * * Revision 1.6 2002/02/22 23:43:32 mdw * Call @xfree@ rather than @free@. * @@ -591,7 +596,7 @@ static void xept_attach(endpt *e, reffd *in, reffd *out) /* --- Set group id --- */ - if (xo->gid != -1) { + if (xo->gid != (gid_t)-1) { if (setgid(xo->gid)) { moan("couldn't set gid %i: %s", xo->gid, strerror(errno)); _exit(1); @@ -605,7 +610,7 @@ static void xept_attach(endpt *e, reffd *in, reffd *out) /* --- Set uid --- */ - if (xo->uid != -1) { + if (xo->uid != (uid_t)-1) { if (setuid(xo->uid)) { moan("couldn't set uid %i: %s", xo->uid, strerror(errno)); _exit(1); @@ -787,7 +792,9 @@ static endpt_ops xept_ops = { xept_attach, xept_file, 0, xept_close }; void exec_init(void) { +#ifdef HAVE_SETRLIMIT rlimit_get(&exec_opts.xl); +#endif sig_add(&xept_sig, SIGCHLD, xept_chld, 0); sym_create(&env); env_import(&env, environ); @@ -892,8 +899,10 @@ static int exec_option(xdata *x, scanner *sc) /* --- Now try resource limit settings --- */ +#ifdef HAVE_SETRLIMIT if (rlimit_option(&xo->xl, sc)) CONF_ACCEPT; +#endif /* --- And then environment settings --- */ @@ -971,8 +980,12 @@ static void exec_read(xdata *x, scanner *sc) char *p, *q; char **v; - /* --- Strip off the leading `[' --- */ + /* --- Strip off the leading `[' --- * + * + * Allow various handy filename characters to be entered without quoting. + */ + conf_undelim(sc, "=:/.", "=:/."); token(sc); /* --- Read a sequence of arguments --- */ @@ -982,6 +995,7 @@ static void exec_read(xdata *x, scanner *sc) token(sc); argc++; } + conf_undelim(sc, 0, 0); /* --- Expect the closing `]' --- */ -- 2.11.0