]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
groupadd, groupmod: Update gshadow file with -U
authorDennis Baurichter <dennisba@mail.upb.de>
Sun, 17 Nov 2024 02:27:40 +0000 (03:27 +0100)
committerAlejandro Colomar <alx@kernel.org>
Tue, 3 Dec 2024 10:16:13 +0000 (11:16 +0100)
When running groupadd or groupmod with the -U|--user option, also update
the group shadow database if it is used.

Fixes: 342c934a (2020-08-09, "add -U option to groupadd and groupmod")
Closes: <https://github.com/shadow-maint/shadow/issues/1124>
src/groupadd.c
src/groupmod.c

index 1623ba804412c936d7709da5327a1022a0340c12..263dc93ae42f7417051012b8bb674ea56a785f6e 100644 (file)
@@ -204,6 +204,10 @@ static void grp_update (void)
                                exit (E_GRP_UPDATE);
                        }
                        grp.gr_mem = add_list(grp.gr_mem, token);
+#ifdef  SHADOWGRP
+                       if (is_shadow_grp)
+                               sgrp.sg_mem = add_list(sgrp.sg_mem, token);
+#endif
                        token = strtok(NULL, ",");
                }
        }
index ec2e6043480baaffa374aa628aa122dc1c177826..ee1b4a9d3e90352377d57358f0da48fbea06e8fa 100644 (file)
@@ -222,7 +222,7 @@ static void grp_update (void)
        new_grent (&grp);
 #ifdef SHADOWGRP
        if (   is_shadow_grp
-           && (pflg || nflg)) {
+           && (pflg || nflg || user_list)) {
                osgrp = sgr_locate (group_name);
                if (NULL != osgrp) {
                        sgrp = *osgrp;
@@ -262,6 +262,17 @@ static void grp_update (void)
                        if (NULL != grp.gr_mem[0])
                                grp.gr_mem = dup_list (grp.gr_mem);
                }
+#ifdef SHADOWGRP
+               if (NULL != osgrp) {
+                       if (!aflg) {
+                               sgrp.sg_mem = XMALLOC(1, char *);
+                               sgrp.sg_mem[0] = NULL;
+                       } else {
+                               if (NULL != sgrp.sg_mem[0])
+                                       sgrp.sg_mem = dup_list(sgrp.sg_mem);
+                       }
+               }
+#endif                         /* SHADOWGRP */
 
                token = strtok(user_list, ",");
                while (token) {
@@ -270,6 +281,10 @@ static void grp_update (void)
                                exit (E_GRP_UPDATE);
                        }
                        grp.gr_mem = add_list(grp.gr_mem, token);
+#ifdef SHADOWGRP
+                       if (NULL != osgrp)
+                               sgrp.sg_mem = add_list(sgrp.sg_mem, token);
+#endif                         /* SHADOWGRP */
                        token = strtok(NULL, ",");
                }
        }
@@ -486,7 +501,7 @@ static void close_files (void)
 
 #ifdef SHADOWGRP
        if (   is_shadow_grp
-           && (pflg || nflg)) {
+           && (pflg || nflg || user_list)) {
                if (sgr_close () == 0) {
                        fprintf (stderr,
                                 _("%s: failure while writing changes to %s\n"),
@@ -618,7 +633,7 @@ static void prepare_failure_reports (void)
        add_cleanup (cleanup_report_mod_group, &info_group);
 #ifdef SHADOWGRP
        if (   is_shadow_grp
-           && (pflg || nflg)) {
+           && (pflg || nflg || user_list)) {
                add_cleanup (cleanup_report_mod_gshadow, &info_gshadow);
        }
 #endif
@@ -645,7 +660,7 @@ static void lock_files (void)
 
 #ifdef SHADOWGRP
        if (   is_shadow_grp
-           && (pflg || nflg)) {
+           && (pflg || nflg || user_list)) {
                if (sgr_lock () == 0) {
                        fprintf (stderr,
                                 _("%s: cannot lock %s; try again later.\n"),
@@ -683,7 +698,7 @@ static void open_files (void)
 
 #ifdef SHADOWGRP
        if (   is_shadow_grp
-           && (pflg || nflg)) {
+           && (pflg || nflg || user_list)) {
                if (sgr_open (O_CREAT | O_RDWR) == 0) {
                        fprintf (stderr,
                                 _("%s: cannot open %s\n"),