X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcontext_save.c;h=0f7061a51e30b1a6ea88a5a95bb83a6cd58d1f2d;hp=d1371d017afc4b91f1ca25817f84f725a9c477b4;hb=d4bcca1aa235370bc20bc2734c0cd6f700b17871;hpb=ac0b9fcce4167e2959ebc5b8d6efb8511acec66d diff --git a/sbr/context_save.c b/sbr/context_save.c index d1371d0..0f7061a 100644 --- a/sbr/context_save.c +++ b/sbr/context_save.c @@ -6,20 +6,20 @@ ** complete copyright information. */ -#include -#include - /* -** static prototypes -*/ -static int m_chkids(void); + * This function used to support setuid/setgid programs by writing + * the file as the user. But that code, m_chkids(), was removed + * because there no longer are setuid/setgid programs in nmh. + */ +#include +#include +#include void context_save(void) { - int action; - register struct node *np; + struct node *np; FILE *out; sigset_t set, oset; @@ -31,9 +31,6 @@ context_save(void) return; ctxflags &= ~CTXMOD; - if ((action = m_chkids()) > 0) - return; /* child did it for us */ - /* block a few signals */ sigemptyset(&set); sigaddset(&set, SIGHUP); @@ -43,49 +40,11 @@ context_save(void) sigprocmask(SIG_BLOCK, &set, &oset); if (!(out = lkfopen(ctxpath, "w"))) - adios(ctxpath, "unable to write"); + adios(EX_IOERR, ctxpath, "unable to write"); for (np = m_defs; np; np = np->n_next) if (np->n_context) fprintf(out, "%s: %s\n", np->n_name, np->n_field); lkfclose(out, ctxpath); sigprocmask(SIG_SETMASK, &oset, &set); /* reset the signal mask */ - - if (action == 0) - _exit(0); /* we are child, time to die */ -} - -/* -** This hack brought to you so we can handle set[ug]id MH programs. -** If we return -1, then no fork is made, we update .mh_profile -** normally, and return to the caller normally. If we return 0, -** then the child is executing, .mh_profile is modified after -** we set our [ug]ids to the norm. If we return > 0, then the -** parent is executed and .mh_profile has already be modified. -** We can just return to the caller immediately. -*/ - -static int -m_chkids(void) -{ - pid_t pid; - - if (getuid() == geteuid()) - return (-1); - - switch (pid = fork()) { - case -1: - break; - - case 0: - setgid(getgid()); - setuid(getuid()); - break; - - default: - pidwait(pid, -1); - break; - } - - return pid; }