]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
sub/unsub: factorize the change uid code
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 28 Oct 2021 13:00:18 +0000 (15:00 +0200)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 28 Oct 2021 13:00:18 +0000 (15:00 +0200)
include/subscriberfuncs.h
src/mlmmj-sub.c
src/mlmmj-unsub.c
src/subscriberfuncs.c

index 68274bb20cbdcbe51edb96c75a9df18bd4363315..9e3d275d5a81b3b8a78664c6a32b6d6971b52a33 100644 (file)
@@ -31,5 +31,6 @@ off_t find_subscriber(int fd, const char *address);
 bool is_subbed_in(int fd, const char *address);
 enum subtype is_subbed(struct mlmmj_list *list, const char *address, int both);
 int open_subscriber_directory(struct mlmmj_list *list, enum subtype typesub, const char **subdir);
+void change_uid(struct mlmmj_list *list);
 
 #endif /* SUBSCRIBERFUNC_H */
index 832a4438dc00a9bf5fb1fea616a6b797356169b3..ee696e0afcaf5d676d4d7af161ffd76cf14a73e7 100644 (file)
@@ -585,9 +585,7 @@ int main(int argc, char **argv)
        int nogensubscribed = 0;
        int force = 0, quiet = 0, i = 0;
        enum subtype subbed;
-       struct stat st;
        pid_t pid, childpid = 0;
-       uid_t uid;
        enum subtype typesub = SUB_NORMAL;
        enum subreason reasonsub = SUB_ADMIN;
 
@@ -711,18 +709,8 @@ int main(int argc, char **argv)
                exit(EXIT_SUCCESS);  /* XXX is this success? */
        }
 
-       if(changeuid) {
-               uid = getuid();
-               if(!uid && stat(list.dir, &st) == 0) {
-                       printf("Changing to uid %d, owner of %s.\n",
-                                       (int)st.st_uid, list.dir);
-                       if(setuid(st.st_uid) < 0) {
-                               perror("setuid");
-                               fprintf(stderr, "Continuing as uid %d\n",
-                                               (int)uid);
-                       }
-               }
-       }
+       if(changeuid)
+               change_uid(&list);
 
        subbed = is_subbed(&list, address, 1);
 
index b6f013c229877f7082a4b00eaa6af736d707280e..697ceeb23042bb4dd757004aa4df2f47edbbdd14 100644 (file)
@@ -435,8 +435,6 @@ int main(int argc, char **argv)
        char *lowcaseaddr;
        enum subtype typesub = SUB_ALL;
        enum subreason reasonsub = SUB_ADMIN;
-       uid_t uid;
-       struct stat st;
        pid_t pid, childpid;
 
        mlmmj_list_init(&list);
@@ -543,18 +541,8 @@ int main(int argc, char **argv)
        }
        address = lowcaseaddr;
 
-       if(changeuid) {
-               uid = getuid();
-               if(!uid && stat(list.dir, &st) == 0) {
-                       printf("Changing to uid %d, owner of %s.\n",
-                                       (int)st.st_uid, list.dir);
-                       if(setuid(st.st_uid) < 0) {
-                               perror("setuid");
-                               fprintf(stderr, "Continuing as uid %d\n",
-                                               (int)uid);
-                       }
-               }
-       }
+       if(changeuid)
+               change_uid(&list);
 
        if (typesub == SUB_ALL) {
                subbed = is_subbed(&list, address, 0) != SUB_NONE;
index ee29b902622c7109eecd5e593fd714a476372637..ea4960e72e5a45540ee8417653e6aae722331caa 100644 (file)
@@ -200,3 +200,21 @@ open_subscriber_directory(struct mlmmj_list *list, enum subtype typesub, const c
                err(EXIT_FAILURE, "Unable to open %s/%s", list->dir, *subdir);
        return (fd);
 }
+
+void
+change_uid(struct mlmmj_list *list)
+{
+       struct stat st;
+       uid_t uid;
+
+       uid = getuid();
+       if (!uid && fstat(list->fd, &st) == 0) {
+               printf("Changing to uid %d, owner of %s.\n",
+                   (int)st.st_uid, list->dir);
+               if(setuid(st.st_uid) < 0) {
+                       perror("setuid");
+                       fprintf(stderr, "Continuing as uid %d\n",
+                               (int)uid);
+               }
+       }
+}