X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fcontext_save.c;h=1a381db2b30cdb01f0d1f4b9512ea495c04cb1a5;hb=865335e03bab5e0ceb47a4d20564c3afb3de30c4;hp=7d99cc3770a51469b5ee0f5c4828e9d7dac8b5a6;hpb=ced6090a330d3d83d0bce709f756aa3d7d65fea4;p=mmh diff --git a/sbr/context_save.c b/sbr/context_save.c index 7d99cc3..1a381db 100644 --- a/sbr/context_save.c +++ b/sbr/context_save.c @@ -16,7 +16,7 @@ static int m_chkids(void); void -context_save (void) +context_save(void) { int action; register struct node *np; @@ -31,28 +31,28 @@ context_save (void) return; ctxflags &= ~CTXMOD; - if ((action = m_chkids ()) > 0) + if ((action = m_chkids()) > 0) return; /* child did it for us */ /* block a few signals */ - sigemptyset (&set); - sigaddset (&set, SIGHUP); - sigaddset (&set, SIGINT); - sigaddset (&set, SIGQUIT); - sigaddset (&set, SIGTERM); - SIGPROCMASK (SIG_BLOCK, &set, &oset); - - if (!(out = lkfopen (ctxpath, "w"))) - adios (ctxpath, "unable to write"); + sigemptyset(&set); + sigaddset(&set, SIGHUP); + sigaddset(&set, SIGINT); + sigaddset(&set, SIGQUIT); + sigaddset(&set, SIGTERM); + SIGPROCMASK(SIG_BLOCK, &set, &oset); + + if (!(out = lkfopen(ctxpath, "w"))) + adios(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); + fprintf(out, "%s: %s\n", np->n_name, np->n_field); + lkfclose(out, ctxpath); - SIGPROCMASK (SIG_SETMASK, &oset, &set); /* reset the signal mask */ + SIGPROCMASK(SIG_SETMASK, &oset, &set); /* reset the signal mask */ if (action == 0) - _exit (0); /* we are child, time to die */ + _exit(0); /* we are child, time to die */ } /* @@ -66,29 +66,25 @@ context_save (void) */ static int -m_chkids (void) +m_chkids(void) { - int i; pid_t pid; - if (getuid () == geteuid ()) + if (getuid() == geteuid()) return (-1); - for (i = 0; (pid = fork ()) == -1 && i < 5; i++) - sleep (5); + switch (pid = fork()) { + case -1: + break; - switch (pid) { - case -1: - break; + case 0: + setgid(getgid()); + setuid(getuid()); + break; - case 0: - setgid (getgid ()); - setuid (getuid ()); - break; - - default: - pidwait (pid, -1); - break; + default: + pidwait(pid, -1); + break; } return pid;