]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
sulogin: check chdir and getcwd return values [-Wunused-result]
authorKarel Zak <kzak@redhat.com>
Mon, 12 Mar 2012 11:32:03 +0000 (12:32 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 12 Mar 2012 11:32:03 +0000 (12:32 +0100)
sulogin.c: In function ‘sushell’:
sulogin.c:338:7: warning: ignoring return value of ‘chdir’, declared
with attribute warn_unused_result [-Wunused-result]
sulogin.c:359:8: warning: ignoring return value of ‘getcwd’, declared
with attribute warn_unused_result [-Wunused-result]

Signed-off-by: Karel Zak <kzak@redhat.com>
login-utils/sulogin.c

index 14843d0b438132f411272a0fa800f6a3e2d635e8..01304593600595f8c819e41d709a1817c88d75f7 100644 (file)
@@ -327,15 +327,22 @@ static char *getpasswd(char *crypted)
  */
 static void sushell(struct passwd *pwd)
 {
-       char shell[128];
-       char home[128];
+       char shell[PATH_MAX];
+       char home[PATH_MAX];
        char *p;
        char *sushell;
 
        /*
         * Set directory and shell.
         */
-       chdir(pwd->pw_dir);
+       if (chdir(pwd->pw_dir) != 0) {
+               warn(_("%s: change directory failed"), pwd->pw_dir);
+               printf(_("Logging in with home = \"/\".\n"));
+
+               if (chdir("/") != 0)
+                       warn(_("change directory to system root failed"));
+       }
+
        if ((p = getenv("SUSHELL")) != NULL)
                sushell = p;
        else if ((p = getenv("sushell")) != NULL)
@@ -356,8 +363,9 @@ static void sushell(struct passwd *pwd)
        /*
         * Set some important environment variables.
         */
-       getcwd(home, sizeof(home));
-       setenv("HOME", home, 1);
+       if (getcwd(home, sizeof(home)) != NULL)
+               setenv("HOME", home, 1);
+
        setenv("LOGNAME", "root", 1);
        setenv("USER", "root", 1);
        if (!profile)