On Sunday 07 November 2010 20:53, Tito wrote:
> On Sunday 07 November 2010 17:52:54 Denys Vlasenko wrote:
> > On Sunday 07 November 2010 15:38, Tito wrote:
> 
> Snip
> 
> Here a list of tests of the current code:
> 
> delgroup wrong arg num                                ok /* show usage */
> delgroup unknown group                                ok /* die with error 
> msg */
> delgroup unknown_member group         ok /* die with error msg */
> delgroup member group                         ok /* success */
> delgroup group                                        ok /* success */
> delgroup group_UPG                            ok /* die with error msg */
> deluser wrong arg num                         ok /* show usage */
> deluser unknown user                          ok /* die with error msg */
> deluser user_with_shared_gid                  KO /* spurious warning */
> deluser user                                          ok /* success */
> 
> So we are almost there. ;-)
> 
> Attached a patch that fixes it.
> 
> Ciao,
> Tito
> 
> --- loginutils/deluser.c.original     2010-11-07 20:35:15.000000000 +0100
> +++ loginutils/deluser.c      2010-11-07 20:33:11.000000000 +0100
> @@ -23,7 +23,7 @@
>       /* Name of shadow or gshadow file */
>       const char *sfile;
>       /* Are we deluser or delgroup? */
> -     bool do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || 
> applet_name[3] == 'u'));
> +     int do_deluser = (ENABLE_DELUSER && (!ENABLE_DELGROUP || applet_name[3] 
> == 'u'));
>  
>       if (geteuid() != 0)
>               bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
> @@ -51,7 +51,12 @@
>                       struct group *gr;
>   do_delgroup:
>                       /* "delgroup GROUP" or "delgroup USER GROUP" */
> -                     gr = xgetgrnam(name); /* bail out if GROUP is wrong */
> +                     if (do_deluser < 0) {
> +                             if((gr = getgrnam(name)) == NULL)
> +                                     return EXIT_SUCCESS;
> +                     } else {
> +                             gr = xgetgrnam(name); /* bail out if GROUP is 
> wrong */
> +                     }
>                       if (!member) {
>                               /* "delgroup GROUP" */
>                               struct passwd *pw;
> @@ -79,13 +84,13 @@
>                       }
>               } while (ENABLE_FEATURE_SHADOWPASSWDS && pfile);
>  
> -             if (ENABLE_DELGROUP && do_deluser) {
> +             if (ENABLE_DELGROUP && do_deluser > 0) {
>                       /* "deluser USER" also should try to delete
>                        * same-named group. IOW: do "delgroup USER"
>                        */
>  //TODO: check how it actually works in upstream.
>  //I suspect it is only done if group has no more members.
> -                     do_deluser = 0;
> +                     do_deluser = -1;
>                       goto do_delgroup;
>               }
>               return EXIT_SUCCESS;


Applied, thanks
-- 
vda
 
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to