]> granicus.if.org Git - sudo/commitdiff
Add fallback to PERM_IOLOG when making the final componenet of iolog_dir.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 22 Mar 2017 21:55:16 +0000 (15:55 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 22 Mar 2017 21:55:16 +0000 (15:55 -0600)
plugins/sudoers/iolog.c

index 743ec6ed943370bd428e25e3389e6993715fb56a..53c0405353b72e39527d0139c5b4ccbf90d71f1d 100644 (file)
@@ -125,9 +125,15 @@ io_mkdirs(char *path)
        /* Create final path component. */
        sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO,
            "mkdir %s, mode 0%o", path, (unsigned int) iolog_dirmode);
-       if (mkdir(path, iolog_dirmode) != 0 && errno != EEXIST) {
-           sudo_warn(U_("unable to mkdir %s"), path);
-           ok = false;
+       ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST;
+       if (!ok) {
+           if (!uid_changed) {
+               /* Try again as the I/O log owner (for NFS). */
+               uid_changed = set_perms(PERM_IOLOG);
+               ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST;
+           }
+           if (!ok)
+               sudo_warn(U_("unable to mkdir %s"), path);
        } else {
            ignore_result(chown(path, iolog_uid, iolog_gid));
        }