X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/19bf8698eeb0ab3d7694232af115fa3f007d5c7b..5dd3af5ac619fa57de69eb8777ced3376fafc593:/sbr/context_save.c diff --git a/sbr/context_save.c b/sbr/context_save.c index 70809595..9f53397b 100644 --- a/sbr/context_save.c +++ b/sbr/context_save.c @@ -1,26 +1,24 @@ - -/* - * context_save.c -- write out the updated context file +/* context_save.c -- write out the updated context file * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. */ -#include -#include - /* - * static prototypes + * 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. */ -static int m_chkids(void); +#include +#include +#include "lock_file.h" void context_save (void) { - int action; - register struct node *np; + struct node *np; FILE *out; sigset_t set, oset; int failed_to_lock = 0; @@ -33,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); @@ -57,48 +52,4 @@ context_save (void) lkfclosedata (out, ctxpath); sigprocmask (SIG_SETMASK, &oset, &set); /* reset the signal mask */ - - if (action == 0) - /* This must be _exit(), not exit(), because the child didn't - call unregister_for_removal() in m_chkids(). */ - _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) -{ - int i; - pid_t pid; - - if (getuid () == geteuid ()) - return (-1); - - for (i = 0; (pid = fork ()) == -1 && i < 5; i++) - sleep (5); - - switch (pid) { - case -1: - break; - - case 0: - /* It's not necessary to call unregister_for_removal(0) - because the child calls _exit() in context_save(). */ - break; - - default: - pidwait (pid, -1); - break; - } - - return pid; }