Comment 4 for bug 67680

Revision history for this message
Matthew L. Dailey (matthew-l-dailey) wrote :

After running with my patch for a while, I saw the same behavior - cupsd running at 100% CPU. In our environment, we're running only clients, so the inability to bind port 631 wasn't immediately a problem. So, it looks like my "quick fix" is a bust.

My next thought is that this might actually be a CUPS problem. I looked through the source code a bit and in scheduler/dirsvc.c, the poller is spawned with:
    if (cupsdStartProcess(polld, argv, envp, -1, -1, statusfds[1], -1,
                          0, &(pollp->pid)) < 0)

And the actual cupsdStartProcess function in scheduler/process.c takes these arguments:
cupsdStartProcess(
    const char *command, /* I - Full path to command */
    char *argv[], /* I - Command-line arguments */
    char *envp[], /* I - Environment */
    int infd, /* I - Standard input file descriptor */
    int outfd, /* I - Standard output file descriptor */
    int errfd, /* I - Standard error file descriptor */
    int backfd, /* I - Backchannel file descriptor */
    int root, /* I - Run as root? */
    int *pid) /* O - Process ID */

This would seem to indicate that the polld process shouldn't be spawned as root (argument 8 = 0 ), but it is. I'm not much of a C programmer, so I could be completely off-base here, but this seems to be at least close to the problem. I may post this to the CUPS list and see if anyone knows anything about it.