From afe423ac1b240cae17d7b7a8c9bf4e7fbfdb64b6 Mon Sep 17 00:00:00 2001 From: trisk Date: Sat, 7 Jul 2007 03:50:34 +0000 Subject: [PATCH] pid_t can be larger than an unsigned int, update bounds checking and printf formats. --- src/apps/manager/manager.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/apps/manager/manager.c b/src/apps/manager/manager.c index 25b7a11..87afe9a 100644 --- a/src/apps/manager/manager.c +++ b/src/apps/manager/manager.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -397,12 +398,13 @@ SignalHandler(int signo) static int Lock(BOOL force) { - char pid[20]; int fd; int remaining; int written; int ret; int mode; + pid_t pid; + char pidstr[20]; mode = O_CREAT | O_WRONLY; if (!force) { @@ -414,17 +416,20 @@ Lock(BOOL force) return -1; } - remaining = snprintf(pid, sizeof(pid), "%d\n", getpid()); - if (remaining > (int)sizeof(pid)) { + pid = getpid(); + if ((unsigned long)pid > 999999) { + /* pid < 0 || pid > pidmax ceiling on Solaris */ fprintf(stderr, _("bongo-manager: unlikely pid, Exiting\n")); exit(1); } + snprintf(pidstr, sizeof(pidstr), "%dl\n", pid); + remaining = sizeof(pidstr); ret = 0; written = 0; while (remaining > 0) { - ret = write(fd, pid + written, remaining); + ret = write(fd, pidstr + written, remaining); if (ret != -1) { remaining -= ret; written += ret; @@ -596,7 +601,7 @@ StartSlapd(BOOL killExisting) return 1; } } else { - fprintf(stderr, _("bongo-manager: managed-slapd appears to be running as pid %d\n"), pid); + fprintf(stderr, _("bongo-manager: managed-slapd appears to be running as pid %dl\n"), pid); fprintf(stderr, _("bongo-manager: if this is definitely the bongo slapd, you can run with -e to kill it\n")); return 1; }