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;
Signed-off-by: Tito Ragusa <[email protected]>
--- 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;
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox