setsid();
/* Notify parent it's safe to exit as we've detached. */
close(sidpipe[0]);
- write(sidpipe[1], &buf, 1);
+ if (write(sidpipe[1], &buf, 1) == -1)
+ syslog(LOG_ERR, "failed to notify parent: %m");
close(sidpipe[1]);
if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
dup2(fd, STDIN_FILENO);
signal_reset();
/* Wait for child to detach */
close(sidpipe[1]);
- read(sidpipe[0], &buf, 1);
+ if (read(sidpipe[0], &buf, 1) == -1)
+ syslog(LOG_ERR, "failed to read child: %m");
close(sidpipe[0]);
break;
}
read_pid(void)
{
FILE *fp;
- pid_t pid = 0;
+ pid_t pid;
if ((fp = fopen(pidfile, "r")) == NULL) {
errno = ENOENT;
return 0;
}
-
- fscanf(fp, "%d", &pid);
+ if (fscanf(fp, "%d", &pid) != 1)
+ pid = 0;
fclose(fp);
-
return pid;
}
if (argc == 1) {
for (ifp = ifaces; ifp; ifp = ifp->next)
len++;
- write(fd->fd, &len, sizeof(len));
+ len = write(fd->fd, &len, sizeof(len));
+ if (len != sizeof(len))
+ return -1;
for (ifp = ifaces; ifp; ifp = ifp->next)
send_interface(fd->fd, ifp);
return 0;
if (strcmp(argv[opt], ifp->name) == 0)
len++;
}
- write(fd->fd, &len, sizeof(len));
+ len = write(fd->fd, &len, sizeof(len));
+ if (len != sizeof(len))
+ return -1;
opt = 0;
while (argv[++opt] != NULL) {
for (ifp = ifaces; ifp; ifp = ifp->next)
options |= DHCPCD_MASTER;
}
- chdir("/");
+ if (chdir("/") == -1)
+ syslog(LOG_ERR, "failed to chdir to /: %m");
umask(022);
atexit(cleanup);
#include <errno.h>
#include <signal.h>
#include <string.h>
+#include <syslog.h>
#include <unistd.h>
#include "common.h"
{
int serrno = errno;
- write(signal_pipe[1], &sig, sizeof(sig));
+ if (write(signal_pipe[1], &sig, sizeof(sig)) != sizeof(sig))
+ syslog(LOG_ERR, "failed to write signal %d: %m", sig);
/* Restore errno */
errno = serrno;
}