]> granicus.if.org Git - sudo/commitdiff
When creating the timestamp directory, use the group of the timestamp
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 20 Mar 2017 18:59:28 +0000 (12:59 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 20 Mar 2017 18:59:28 +0000 (12:59 -0600)
owner instead of inheriting the group of the parent directory.

plugins/sudoers/sudoers.c
plugins/sudoers/sudoers.h
plugins/sudoers/timestamp.c

index 4bc397d62ad7902a1c4ec182ea08a6eb006e0816..ac5427b9eeca7ef24d9f5a1c15e7242095b8b4ff 100644 (file)
@@ -86,6 +86,7 @@ struct sudo_user sudo_user;
 struct passwd *list_pw;
 int long_list;
 uid_t timestamp_uid;
+gid_t timestamp_gid;
 #ifdef HAVE_BSD_AUTH_H
 char *login_style;
 #endif /* HAVE_BSD_AUTH_H */
@@ -381,11 +382,13 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
            pw = sudo_getpwnam(def_timestampowner);
        if (pw != NULL) {
            timestamp_uid = pw->pw_uid;
+           timestamp_gid = pw->pw_gid;
            sudo_pw_delref(pw);
        } else {
            log_warningx(SLOG_SEND_MAIL,
                N_("timestamp owner (%s): No such user"), def_timestampowner);
            timestamp_uid = ROOT_UID;
+           timestamp_gid = ROOT_GID;
        }
     }
 
index a9774b537485f6d667288f34f0d96c0d6da5000c..745619e83a477a00d7ce21490d03969797e23e72 100644 (file)
@@ -366,6 +366,7 @@ extern struct passwd *list_pw;
 extern int long_list;
 extern int sudo_mode;
 extern uid_t timestamp_uid;
+extern gid_t timestamp_gid;
 extern sudo_conv_t sudo_conv;
 extern sudo_printf_t sudo_printf;
 
index 0127a50aa7031f78b00ed46c96331e7eee04dfe5..8343c1a5cac8780186e031d475baccc99c8b4d51 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2016 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2014-2017 Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -150,24 +150,24 @@ ts_find_record(int fd, struct timestamp_entry *key, struct timestamp_entry *entr
  * Returns false on failure and displays a warning to stderr.
  */
 static bool
-ts_mkdirs(char *path, uid_t owner, mode_t mode, mode_t parent_mode, bool quiet)
+ts_mkdirs(char *path, uid_t owner, gid_t group, mode_t mode,
+    mode_t parent_mode, bool quiet)
 {
-    gid_t parent_gid = (gid_t)-1;
     bool ret;
     debug_decl(ts_mkdirs, SUDOERS_DEBUG_AUTH)
 
-    ret = sudo_mkdir_parents(path, owner, &parent_gid, parent_mode, quiet); 
+    ret = sudo_mkdir_parents(path, owner, &group, parent_mode, quiet); 
     if (ret) {
        /* Create final path component. */
        sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO,
            "mkdir %s, mode 0%o, uid %d, gid %d", path, (int)mode,
-           (int)owner, (int)parent_gid);
+           (int)owner, (int)group);
        if (mkdir(path, mode) != 0 && errno != EEXIST) {
            if (!quiet)
                sudo_warn(U_("unable to mkdir %s"), path);
            ret = false;
        } else {
-           ignore_result(chown(path, owner, parent_gid));
+           ignore_result(chown(path, owner, group));
        }
     }
     debug_return_bool(ret);
@@ -192,7 +192,7 @@ ts_secure_dir(char *path, bool make_it, bool quiet)
        ret = true;
        break;
     case SUDO_PATH_MISSING:
-       if (make_it && ts_mkdirs(path, timestamp_uid, S_IRWXU,
+       if (make_it && ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU,
            S_IRWXU|S_IXGRP|S_IXOTH, quiet)) {
            ret = true;
            break;