]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
If user's home dir doesn't exist, fallback to chdiring /tmp.
authorTimo Sirainen <tss@iki.fi>
Sun, 3 Aug 2003 18:54:56 +0000 (21:54 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 3 Aug 2003 18:54:56 +0000 (21:54 +0300)
--HG--
branch : HEAD

src/master/mail-process.c

index faf42b0465e6e611f01beacae3d7b3b0b9ee31fc..6e6a6144c4682be9ed7e4dbe34b0245761038526 100644 (file)
@@ -193,7 +193,9 @@ int create_mail_process(struct login_group *group, int socket,
 
        restrict_process_size(group->set->mail_process_size, (unsigned int)-1);
 
-       if (*home_dir != '\0') {
+       if (*home_dir == '\0')
+               ret = -1;
+       else {
                full_home_dir = *chroot_dir == '\0' ? home_dir :
                        t_strconcat(chroot_dir, "/", home_dir, NULL);
                /* NOTE: if home directory is NFS-mounted, we might not
@@ -204,11 +206,16 @@ int create_mail_process(struct login_group *group, int socket,
                ret = chdir(full_home_dir);
                if (reply->uid != master_uid && seteuid(master_uid) < 0)
                        i_fatal("seteuid(%s) failed: %m", dec2str(master_uid));
-               if (ret < 0) {
+
+               /* If user's home directory doesn't exist and we're not
+                  trying to chroot anywhere, fallback to /tmp as the mails
+                  could be stored elsewhere. */
+               if (ret < 0 && (errno != ENOENT || *chroot_dir != '\0')) {
                        i_fatal("chdir(%s) failed with uid %s: %m",
                                full_home_dir, dec2str(reply->uid));
                }
-       } else {
+       }
+       if (ret < 0) {
                /* We still have to change to some directory where we have
                   rx-access. /tmp should exist everywhere. */
                if (chdir("/tmp") < 0)