Index: sbin/init/init.c =================================================================== --- sbin/init/init.c +++ sbin/init/init.c @@ -205,7 +205,7 @@ /* Dispose of random users. */ if (getuid() != 0) - errx(1, "%s", strerror(EPERM)); + err(1, NULL); /* System V users like to reexec init. */ if (getpid() != 1) { @@ -539,8 +539,7 @@ name[1] = KERN_SECURELVL; len = sizeof curlevel; if (sysctl(name, 2, &curlevel, &len, NULL, 0) == -1) { - emergency("cannot get kernel security level: %s", - strerror(errno)); + emergency("cannot get kernel security level: %m"); return (-1); } return (curlevel); @@ -565,8 +564,8 @@ name[1] = KERN_SECURELVL; if (sysctl(name, 2, NULL, NULL, &newlevel, sizeof newlevel) == -1) { emergency( - "cannot change kernel security level from %d to %d: %s", - curlevel, newlevel, strerror(errno)); + "cannot change kernel security level from %d to %d: %m", + curlevel, newlevel); return; } #ifdef SECURE @@ -658,13 +657,13 @@ fd = open(path, O_RDONLY); if (fd < 0) { - emergency("%s: %s", path, strerror(errno)); + emergency("%s: %m", path); return (-1); } error = fstat(fd, &sb); if (error != 0) { - emergency("fstat: %s", strerror(errno)); + emergency("fstat: %m"); close(fd); return (error); } @@ -672,14 +671,14 @@ bufsize = sb.st_size; buf = malloc(bufsize); if (buf == NULL) { - emergency("malloc: %s", strerror(errno)); + emergency("malloc: %m"); close(fd); return (error); } nbytes = read(fd, buf, bufsize); if (nbytes != (ssize_t)bufsize) { - emergency("read: %s", strerror(errno)); + emergency("read: %m"); close(fd); free(buf); return (error); @@ -687,7 +686,7 @@ error = close(fd); if (error != 0) { - emergency("close: %s", strerror(errno)); + emergency("close: %m"); free(buf); return (error); } @@ -706,20 +705,20 @@ fd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0700); if (fd < 0) { - emergency("%s: %s", path, strerror(errno)); + emergency("%s: %m", path); return (-1); } nbytes = write(fd, buf, bufsize); if (nbytes != (ssize_t)bufsize) { - emergency("write: %s", strerror(errno)); + emergency("write: %m"); close(fd); return (-1); } error = close(fd); if (error != 0) { - emergency("close: %s", strerror(errno)); + emergency("close: %m"); return (-1); } @@ -746,11 +745,11 @@ error = nmount(iov, iovlen, 0); if (error != 0) { if (*errmsg != '\0') { - emergency("cannot mount tmpfs on %s: %s: %s", - fspath, errmsg, strerror(errno)); + emergency("cannot mount tmpfs on %s: %s: %m", + fspath, errmsg); } else { - emergency("cannot mount tmpfs on %s: %s", - fspath, strerror(errno)); + emergency("cannot mount tmpfs on %s: %m", + fspath); } return (error); } @@ -777,7 +776,7 @@ */ error = kill(-1, SIGKILL); if (error != 0 && errno != ESRCH) { - emergency("kill(2) failed: %s", strerror(errno)); + emergency("kill(2) failed: %m"); goto out; } @@ -799,7 +798,7 @@ * Execute the temporary init. */ execl(_PATH_REROOT_INIT, _PATH_REROOT_INIT, "-r", NULL); - emergency("cannot exec %s: %s", _PATH_REROOT_INIT, strerror(errno)); + emergency("cannot exec %s: %m", _PATH_REROOT_INIT); out: emergency("reroot failed; going to single user mode"); @@ -819,7 +818,7 @@ */ error = reboot(RB_REROOT); if (error != 0) { - emergency("RB_REBOOT failed: %s", strerror(errno)); + emergency("RB_REBOOT failed: %m"); goto out; } @@ -836,8 +835,7 @@ error = sysctlbyname("kern.init_path", init_path, &init_path_len, NULL, 0); if (error != 0) { - emergency("failed to retrieve kern.init_path: %s", - strerror(errno)); + emergency("failed to retrieve kern.init_path: %m"); goto out; } } @@ -852,7 +850,7 @@ */ execl(path, path, NULL); } - emergency("cannot exec init from %s: %s", init_path, strerror(errno)); + emergency("cannot exec init from %s: %m", init_path); out: emergency("reroot failed; going to single user mode"); @@ -886,8 +884,7 @@ /* Instead of going single user, let's reboot the machine */ sync(); if (reboot(howto) == -1) { - emergency("reboot(%#x) failed, %s", howto, - strerror(errno)); + emergency("reboot(%#x) failed, %m", howto); _exit(1); /* panic and reboot */ } warning("reboot(%#x) returned", howto); @@ -1151,9 +1148,9 @@ start_session_db(void) { if (session_db && (*session_db->close)(session_db)) - emergency("session database close: %s", strerror(errno)); + emergency("session database close: %m"); if ((session_db = dbopen(NULL, O_RDWR, 0, DB_HASH, NULL)) == NULL) { - emergency("session database open: %s", strerror(errno)); + emergency("session database open: %m"); return (1); } return (0); @@ -1175,7 +1172,7 @@ data.size = sizeof sp; if ((*session_db->put)(session_db, &key, &data, 0)) - emergency("insert %d: %s", sp->se_process, strerror(errno)); + emergency("insert %d: %m", sp->se_process); } /* @@ -1190,7 +1187,7 @@ key.size = sizeof sp->se_process; if ((*session_db->del)(session_db, &key, 0)) - emergency("delete %d: %s", sp->se_process, strerror(errno)); + emergency("delete %d: %m", sp->se_process); } /* @@ -1236,19 +1233,29 @@ static void free_session(session_t *sp) { + free(sp->se_device); - if (sp->se_getty) { + sp->se_device = NULL; + if (sp->se_getty != NULL) { free(sp->se_getty); free(sp->se_getty_argv_space); free(sp->se_getty_argv); + sp->se_getty = NULL; + sp->se_getty_argv_space = NULL; + sp->se_getty_argv = NULL; } - if (sp->se_window) { + if (sp->se_window != NULL) { free(sp->se_window); free(sp->se_window_argv_space); free(sp->se_window_argv); + sp->se_window = NULL; + sp->se_window_argv_space = NULL; + sp->se_window_argv = NULL; } - if (sp->se_type) + if (sp->se_type != NULL) { free(sp->se_type); + sp->se_type = NULL; + } free(sp); } @@ -1263,16 +1270,23 @@ int fd; if ((typ->ty_status & TTY_ON) == 0 || - typ->ty_name == 0 || - typ->ty_getty == 0) - return 0; + typ->ty_name == NULL || + typ->ty_getty == NULL) + return (NULL); sp = (session_t *) calloc(1, sizeof (session_t)); + if (sp == NULL) { + emergency("calloc: %m"); + return (NULL); + } sp->se_flags |= SE_PRESENT; - if (asprintf(&sp->se_device, "%s%s", _PATH_DEV, typ->ty_name) < 0) - err(1, "asprintf"); + if (asprintf(&sp->se_device, "%s%s", _PATH_DEV, typ->ty_name) < 0) { + emergency("asprintf: %m"); + free(sp); + return (NULL); + } /* * Attempt to open the device, if we get "device not configured" @@ -1281,26 +1295,26 @@ if ((fd = open(sp->se_device, O_RDONLY | O_NONBLOCK, 0)) < 0) { if (errno == ENXIO) { free_session(sp); - return (0); + return (NULL); } } else close(fd); if (setupargv(sp, typ) == 0) { free_session(sp); - return (0); + return (NULL); } - sp->se_next = 0; + sp->se_next = NULL; if (sprev == NULL) { sessions = sp; - sp->se_prev = 0; + sp->se_prev = NULL; } else { sprev->se_next = sp; sp->se_prev = sprev; } - return sp; + return (sp); } /* @@ -1310,45 +1324,69 @@ setupargv(session_t *sp, struct ttyent *typ) { - if (sp->se_getty) { + if (sp->se_getty != NULL) { free(sp->se_getty); free(sp->se_getty_argv_space); free(sp->se_getty_argv); + sp->se_getty = NULL; + sp->se_getty_argv_space = NULL; + sp->se_getty_argv = NULL; } - if (asprintf(&sp->se_getty, "%s %s", typ->ty_getty, typ->ty_name) < 0) - err(1, "asprintf"); + if (asprintf(&sp->se_getty, "%s %s", typ->ty_getty, typ->ty_name) < 0) { + emergency("asprintf: %m"); + return (0); + } sp->se_getty_argv_space = strdup(sp->se_getty); + if (sp->se_getty_argv_space == NULL) { + emergency("strdup: %m"); + free(sp->se_getty); + sp->se_getty = NULL; + return (0); + } sp->se_getty_argv = construct_argv(sp->se_getty_argv_space); if (sp->se_getty_argv == NULL) { warning("can't parse getty for port %s", sp->se_device); free(sp->se_getty); free(sp->se_getty_argv_space); - sp->se_getty = sp->se_getty_argv_space = 0; + sp->se_getty = NULL; + sp->se_getty_argv_space = NULL; return (0); } - if (sp->se_window) { + if (sp->se_window != NULL) { free(sp->se_window); free(sp->se_window_argv_space); free(sp->se_window_argv); + sp->se_window = NULL; + sp->se_window_argv_space = NULL; + sp->se_window_argv = NULL; } - sp->se_window = sp->se_window_argv_space = 0; - sp->se_window_argv = 0; if (typ->ty_window) { sp->se_window = strdup(typ->ty_window); + if (sp->se_window == NULL) { + emergency("strdup: %m"); + return (0); + } sp->se_window_argv_space = strdup(sp->se_window); + if (sp->se_window_argv_space == NULL) { + emergency("strdup: %m"); + free(sp->se_window); + sp->se_window = NULL; + return (0); + } sp->se_window_argv = construct_argv(sp->se_window_argv_space); if (sp->se_window_argv == NULL) { warning("can't parse window for port %s", sp->se_device); free(sp->se_window_argv_space); free(sp->se_window); - sp->se_window = sp->se_window_argv_space = 0; + sp->se_window = NULL; + sp->se_window_argv_space = NULL; return (0); } } if (sp->se_type) free(sp->se_type); - sp->se_type = typ->ty_type ? strdup(typ->ty_type) : 0; + sp->se_type = typ->ty_type ? strdup(typ->ty_type) : NULL; return (1); } @@ -1365,7 +1403,7 @@ * Destroy any previous session state. * There shouldn't be any, but just in case... */ - for (sp = sessions; sp; sp = snext) { + for (sp = sessions; sp != NULL; sp = snext) { snext = sp->se_next; free_session(sp); } @@ -1646,7 +1684,8 @@ devlen = sizeof(_PATH_DEV) - 1; while ((typ = getttyent()) != NULL) { - for (sprev = 0, sp = sessions; sp; sprev = sp, sp = sp->se_next) + for (sprev = NULL, sp = sessions; sp != NULL; + sprev = sp, sp = sp->se_next) if (strcmp(typ->ty_name, sp->se_device + devlen) == 0) break; @@ -1660,16 +1699,16 @@ continue; } sp->se_flags &= ~SE_SHUTDOWN; - old_getty = sp->se_getty ? strdup(sp->se_getty) : 0; - old_window = sp->se_window ? strdup(sp->se_window) : 0; - old_type = sp->se_type ? strdup(sp->se_type) : 0; + old_getty = sp->se_getty ? strdup(sp->se_getty) : NULL; + old_window = sp->se_window ? strdup(sp->se_window) : NULL; + old_type = sp->se_type ? strdup(sp->se_type) : NULL; if (setupargv(sp, typ) == 0) { warning("can't parse getty for port %s", sp->se_device); sp->se_flags |= SE_SHUTDOWN; kill(sp->se_process, SIGHUP); - } - else if ( !old_getty + free_session(sp); + } else if ( !old_getty || (!old_type && sp->se_type) || (old_type && !sp->se_type) || (!old_window && sp->se_window)