Add option --password to groupadd and groupmod (similar to useradd and usermod).

This commit is contained in:
nekral-guest 2008-01-05 14:17:43 +00:00
parent e94d2da45e
commit f8a95f7ca1
4 changed files with 48 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
* NEWS, src/groupmod.c, src/groupadd.c: Add option --password to
groupadd and groupmod (similar to useradd and usermod).
2008-01-05 Nicolas François <nicolas.francois@centraliens.net> 2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
* lib/prototypes.h: grent.c does not exist anymore. Remove the * lib/prototypes.h: grent.c does not exist anymore. Remove the

4
NEWS
View File

@ -8,6 +8,10 @@ shadow-4.1.0 -> shadow-4.1.1 UNRELEASED
- chage - chage
* Fix bug which forbid to set the aging information of an account with a * Fix bug which forbid to set the aging information of an account with a
passwd entry, but no shadow entry. passwd entry, but no shadow entry.
- groupadd
* New option -p/--password to specify an encrypted password.
- groupmod
* New option -p/--password to specify an encrypted password.
- grpck - grpck
* Fix logging of changes to syslog when a group file is provided, * Fix logging of changes to syslog when a group file is provided,
without a gshadow file. without a gshadow file.

View File

@ -68,6 +68,7 @@ static int is_shadow_grp;
*/ */
static char *group_name; static char *group_name;
static gid_t group_id; static gid_t group_id;
static char *group_passwd;
static char *empty_list = NULL; static char *empty_list = NULL;
static char *Prog; static char *Prog;
@ -75,6 +76,7 @@ static char *Prog;
static int oflg = 0; /* permit non-unique group ID to be specified with -g */ static int oflg = 0; /* permit non-unique group ID to be specified with -g */
static int gflg = 0; /* ID value for the new group */ static int gflg = 0; /* ID value for the new group */
static int fflg = 0; /* if group already exists, do nothing and exit(0) */ static int fflg = 0; /* if group already exists, do nothing and exit(0) */
static int pflg = 0; /* new encrypted password */
#ifdef USE_PAM #ifdef USE_PAM
static pam_handle_t *pamh = NULL; static pam_handle_t *pamh = NULL;
@ -127,7 +129,11 @@ static void new_grent (struct group *grent)
{ {
memzero (grent, sizeof *grent); memzero (grent, sizeof *grent);
grent->gr_name = group_name; grent->gr_name = group_name;
if (pflg) {
grent->gr_passwd = group_passwd;
} else {
grent->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */ grent->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
}
grent->gr_gid = group_id; grent->gr_gid = group_id;
grent->gr_mem = &empty_list; grent->gr_mem = &empty_list;
} }
@ -143,7 +149,11 @@ static void new_sgent (struct sgrp *sgent)
{ {
memzero (sgent, sizeof *sgent); memzero (sgent, sizeof *sgent);
sgent->sg_name = group_name; sgent->sg_name = group_name;
if (pflg) {
sgent->sg_passwd = group_passwd;
} else {
sgent->sg_passwd = "!"; /* XXX warning: const */ sgent->sg_passwd = "!"; /* XXX warning: const */
}
sgent->sg_adm = &empty_list; sgent->sg_adm = &empty_list;
sgent->sg_mem = &empty_list; sgent->sg_mem = &empty_list;
} }
@ -168,6 +178,9 @@ static void grp_update (void)
new_grent (&grp); new_grent (&grp);
#ifdef SHADOWGRP #ifdef SHADOWGRP
new_sgent (&sgrp); new_sgent (&sgrp);
if (is_shadow_grp && pflg) {
grent->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
}
#endif /* SHADOWGRP */ #endif /* SHADOWGRP */
/* /*
@ -393,6 +406,7 @@ static void process_flags (int argc, char **argv)
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"key", required_argument, NULL, 'K'}, {"key", required_argument, NULL, 'K'},
{"non-unique", required_argument, NULL, 'o'}, {"non-unique", required_argument, NULL, 'o'},
{"password", required_argument, NULL, 'p'},
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
@ -440,6 +454,10 @@ static void process_flags (int argc, char **argv)
case 'o': case 'o':
oflg++; oflg++;
break; break;
case 'p':
pglf++;
group_passwd = optarg;
break;
default: default:
usage (); usage ();
} }

View File

@ -67,6 +67,7 @@ static int is_shadow_grp;
#endif #endif
static char *group_name; static char *group_name;
static char *group_newname; static char *group_newname;
static char *group_passwd;
static gid_t group_id; static gid_t group_id;
static gid_t group_newid; static gid_t group_newid;
@ -75,7 +76,8 @@ static char *Prog;
static int static int
oflg = 0, /* permit non-unique group ID to be specified with -g */ oflg = 0, /* permit non-unique group ID to be specified with -g */
gflg = 0, /* new ID value for the group */ gflg = 0, /* new ID value for the group */
nflg = 0; /* a new name has been specified for the group */ nflg = 0, /* a new name has been specified for the group */
pflg = 0; /* new encrypted password */
/* local function prototypes */ /* local function prototypes */
static void usage (void); static void usage (void);
@ -105,6 +107,7 @@ static void usage (void)
" -h, --help display this help message and exit\n" " -h, --help display this help message and exit\n"
" -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n" " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
" -o, --non-unique allow using duplicate (non-unique) GID by GROUP\n" " -o, --non-unique allow using duplicate (non-unique) GID by GROUP\n"
" -p, --password PASSWORD use encrypted password for the new password\n"
"\n")); "\n"));
exit (E_USAGE); exit (E_USAGE);
} }
@ -122,6 +125,9 @@ static void new_grent (struct group *grent)
if (gflg) if (gflg)
grent->gr_gid = group_newid; grent->gr_gid = group_newid;
if (pflg)
grent->gr_passwd = group_passwd;
} }
#ifdef SHADOWGRP #ifdef SHADOWGRP
@ -135,6 +141,9 @@ static void new_sgent (struct sgrp *sgent)
{ {
if (nflg) if (nflg)
sgent->sg_name = xstrdup (group_newname); sgent->sg_name = xstrdup (group_newname);
if (pflg)
sgent->sg_passwd = group_passwd;
} }
#endif /* SHADOWGRP */ #endif /* SHADOWGRP */
@ -173,6 +182,8 @@ static void grp_update (void)
if (is_shadow_grp && (osgrp = sgr_locate (group_name))) { if (is_shadow_grp && (osgrp = sgr_locate (group_name))) {
sgrp = *osgrp; sgrp = *osgrp;
new_sgent (&sgrp); new_sgent (&sgrp);
if (pflg)
grp.gr_passwd = SHADOW_PASSWD_STRING;
} }
#endif /* SHADOWGRP */ #endif /* SHADOWGRP */
@ -208,7 +219,7 @@ static void grp_update (void)
/* /*
* Write out the new shadow group entries as well. * Write out the new shadow group entries as well.
*/ */
if (!sgr_update (&sgrp)) { if (is_shadow_grp && !sgr_update (&sgrp)) {
fprintf (stderr, _("%s: error adding new group entry\n"), Prog); fprintf (stderr, _("%s: error adding new group entry\n"), Prog);
#ifdef WITH_AUDIT #ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding group", audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding group",
@ -216,7 +227,7 @@ static void grp_update (void)
#endif #endif
exit (E_GRP_UPDATE); exit (E_GRP_UPDATE);
} }
if (nflg && !sgr_remove (group_name)) { if (is_shadow_grp && nflg && !sgr_remove (group_name)) {
fprintf (stderr, _("%s: error removing group entry\n"), Prog); fprintf (stderr, _("%s: error removing group entry\n"), Prog);
#ifdef WITH_AUDIT #ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "deleting group", audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "deleting group",
@ -354,6 +365,7 @@ static void process_flags (int argc, char **argv)
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"new-name", required_argument, NULL, 'n'}, {"new-name", required_argument, NULL, 'n'},
{"non-unique", no_argument, NULL, 'o'}, {"non-unique", no_argument, NULL, 'o'},
{"password", required_argument, NULL, 'p'},
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
while ((c = while ((c =
@ -376,6 +388,10 @@ static void process_flags (int argc, char **argv)
case 'o': case 'o':
oflg++; oflg++;
break; break;
case 'p':
group_passwd = optarg;
pflg++;
break;
default: default:
usage (); usage ();
} }