Remove unused variable realuid from main().
[sysvinit.git] / src / shutdown.c
index 7e997da84e3acee8f29b45e110969d625fc403df..11c616fecc6ad8c9f8b1f227674c4e85fcb2965b 100644 (file)
@@ -76,7 +76,7 @@ int got_alrm = 0;
 
 char *clean_env[] = {
        "HOME=/",
-       "PATH=/bin:/usr/bin:/sbin:/usr/sbin",
+       "PATH=" PATH_DEFAULT,
        "TERM=dumb",
        "SHELL=/bin/sh",
        NULL,
@@ -154,7 +154,7 @@ int init_setenv(char *name, char *value)
        struct init_request     request;
        struct sigaction        sa;
        int                     fd;
-       int                     nl, vl;
+       size_t                  nl, vl;
 
        memset(&request, 0, sizeof(request));
        request.magic = INIT_MAGIC;
@@ -213,7 +213,7 @@ int init_setenv(char *name, char *value)
 /*
  *     Tell everyone the system is going down in 'mins' minutes.
  */
-void warn(int mins)
+void issue_warn(int mins)
 {
        char buf[MESSAGELEN + sizeof(newstate)];
        int len;
@@ -286,7 +286,8 @@ int spawn(int noerr, char *prog, ...)
        argv[i] = NULL;
        va_end(ap);
 
-       chdir("/");
+       if (chdir("/"))
+               exit(1);
        environ = clean_env;
 
        execvp(argv[0], argv);
@@ -399,14 +400,14 @@ void fastdown()
 /*
  *     Go to runlevel 0, 1 or 6.
  */
-void shutdown(char *halttype)
+void issue_shutdown(char *halttype)
 {
        char    *args[8];
        int     argp = 0;
        int     do_halt = (down_level[0] == '0');
 
        /* Warn for the last time */
-       warn(0);
+       issue_warn(0);
        if (dontshut) {
                hardsleep(1);
                stopit(0);
@@ -482,7 +483,6 @@ int main(int argc, char **argv)
        struct stat             st;
        struct utmp             *ut;
        time_t                  t;
-       uid_t                   realuid;
        char                    *halttype;
        char                    *downusers[32];
        char                    buf[128];
@@ -498,7 +498,6 @@ int main(int argc, char **argv)
        int                     user_ok = 0;
 
        /* We can be installed setuid root (executable for a special group) */
-       realuid = getuid();
        setuid(geteuid());
 
        if (getuid() != 0) {
@@ -627,7 +626,8 @@ int main(int argc, char **argv)
 
        /* Read pid of running shutdown from a file */
        if ((fp = fopen(SDPID, "r")) != NULL) {
-               fscanf(fp, "%d", &pid);
+               if (fscanf(fp, "%d", &pid) != 1)
+                       pid = 0;
                fclose(fp);
        }
 
@@ -692,6 +692,12 @@ int main(int argc, char **argv)
                        break;
        }
 
+       /* Go to the root directory */
+       if (chdir("/")) {
+               fprintf(stderr, "shutdown: chdir(/): %m\n");
+               exit(1);
+       }
+
        /* Create a new PID file. */
        unlink(SDPID);
        umask(022);
@@ -715,8 +721,6 @@ int main(int argc, char **argv)
        sa.sa_handler = stopit;
        sigaction(SIGINT, &sa, NULL);
 
-       /* Go to the root directory */
-       chdir("/");
        if (fastboot)  close(open(FASTBOOT,  O_CREAT | O_RDWR, 0644));
        if (forcefsck) close(open(FORCEFSCK, O_CREAT | O_RDWR, 0644));
 
@@ -743,20 +747,20 @@ int main(int argc, char **argv)
                if (wt < 0) wt += 1440;
        }
        /* Shutdown NOW if time == 0 */
-       if (wt == 0) shutdown(halttype);
+       if (wt == 0) issue_shutdown(halttype);
 
        /* Give warnings on regular intervals and finally shutdown. */
-       if (wt < 15 && !needwarning(wt)) warn(wt);
+       if (wt < 15 && !needwarning(wt)) issue_warn(wt);
        while(wt) {
                if (wt <= 5 && !didnolog) {
                        donologin(wt);
                        didnolog++;
                }
-               if (needwarning(wt)) warn(wt);
+               if (needwarning(wt)) issue_warn(wt);
                hardsleep(60);
                wt--;
        }
-       shutdown(halttype);
+       issue_shutdown(halttype);
 
        return 0; /* Never happens */
 }