[PATCH] 2nd attempt at deluser/delgroup size reduction and improvements
Denys Vlasenko
vda.linux at googlemail.com
Mon Nov 8 04:45:03 UTC 2010
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
More information about the busybox
mailing list