Add option --password to groupadd and groupmod (similar to useradd and usermod).
This commit is contained in:
parent
e94d2da45e
commit
f8a95f7ca1
@ -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
4
NEWS
@ -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.
|
||||||
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user