cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdEndProcess(pid=%d, force=%d)", pid,
force);
- if (force)
+ if (!pid)
+ return (0);
+ else if (force)
return (kill(pid, SIGKILL));
else
return (kill(pid, SIGTERM));
return (0);
}
- else if ((commandinfo.st_mode & (S_ISUID | S_IWOTH)) ||
- (!RunUser && commandinfo.st_uid))
+ else if (!RunUser &&
+ ((commandinfo.st_mode & (S_ISUID | S_IWGRP | S_IWOTH)) ||
+ commandinfo.st_uid))
{
*pid = 0;
* Reset group membership to just the main one we belong to.
*/
- setgid(Group);
- setgroups(1, &Group);
+ if (setgid(Group) && !RunUser)
+ exit(errno);
+
+ if (setgroups(1, &Group) && !RunUser)
+ exit(errno);
}
/*
#ifdef HAVE_SIGSET
sigset(SIGTERM, SIG_DFL);
sigset(SIGCHLD, SIG_DFL);
+ sigset(SIGPIPE, SIG_DFL);
#elif defined(HAVE_SIGACTION)
memset(&action, 0, sizeof(action));
sigaction(SIGTERM, &action, NULL);
sigaction(SIGCHLD, &action, NULL);
+ sigaction(SIGPIPE, &action, NULL);
#else
signal(SIGTERM, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
+ signal(SIGPIPE, SIG_DFL);
#endif /* HAVE_SIGSET */
cupsdReleaseSignals();