Simplify gpasswd's main():
New function: process_flags(). Split the processing of options out of main().
This commit is contained in:
parent
7b05484494
commit
f429f3e38d
@ -4,6 +4,8 @@
|
|||||||
* src/gpasswd.c: Add argument name to the internal function
|
* src/gpasswd.c: Add argument name to the internal function
|
||||||
prototypes.
|
prototypes.
|
||||||
* src/gpasswd.c: Document global variables.
|
* src/gpasswd.c: Document global variables.
|
||||||
|
* src/gpasswd.c: New function: process_flags(). Split the processing
|
||||||
|
of options out of main().
|
||||||
|
|
||||||
2007-12-27 Nicolas François <nicolas.francois@centraliens.net>
|
2007-12-27 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
129
src/gpasswd.c
129
src/gpasswd.c
@ -58,11 +58,25 @@ static char *Prog;
|
|||||||
static int is_shadowgrp;
|
static int is_shadowgrp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Flags set by options */
|
||||||
static int
|
static int
|
||||||
aflg = 0, Aflg = 0, dflg = 0, Mflg = 0, rflg = 0, Rflg = 0;
|
aflg = 0, Aflg = 0, dflg = 0, Mflg = 0, rflg = 0, Rflg = 0;
|
||||||
|
/* The name of the group that is being affected */
|
||||||
|
static char *group = NULL;
|
||||||
|
/* The name of the user being added (-a) or removed (-d) from group */
|
||||||
|
static char *user = NULL;
|
||||||
|
/* The new list of members set with -M */
|
||||||
|
static char *members = NULL;
|
||||||
|
#ifdef SHADOWGRP
|
||||||
|
/* The new list of group administrators set with -A */
|
||||||
|
static char*admins = NULL;
|
||||||
|
#endif
|
||||||
|
/* The name of the caller */
|
||||||
|
static char *myname = NULL;
|
||||||
/* The UID of the caller */
|
/* The UID of the caller */
|
||||||
unsigned long bywho = -1;
|
static unsigned long bywho = -1;
|
||||||
|
/* Indicate if gpasswd was called by root */
|
||||||
|
#define amroot (0 == bywho)
|
||||||
|
|
||||||
/* The number of retries for th user to provide and repeat a new password */
|
/* The number of retries for th user to provide and repeat a new password */
|
||||||
#ifndef RETRIES
|
#ifndef RETRIES
|
||||||
@ -73,6 +87,7 @@ unsigned long bywho = -1;
|
|||||||
static void usage (void);
|
static void usage (void);
|
||||||
static RETSIGTYPE catch_signals (int killed);
|
static RETSIGTYPE catch_signals (int killed);
|
||||||
static int check_list (const char *users);
|
static int check_list (const char *users);
|
||||||
|
static void process_flags (int argc, char **argv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* usage - display usage message
|
* usage - display usage message
|
||||||
@ -161,63 +176,12 @@ static void failure (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gpasswd - administer the /etc/group file
|
* process_flags - process the command line options and arguments
|
||||||
*
|
|
||||||
* -a user add user to the named group
|
|
||||||
* -d user remove user from the named group
|
|
||||||
* -r remove password from the named group
|
|
||||||
* -R restrict access to the named group
|
|
||||||
* -A user,... make list of users the administrative users
|
|
||||||
* -M user,... make list of users the group members
|
|
||||||
*/
|
*/
|
||||||
int main (int argc, char **argv)
|
static void process_flags (int argc, char **argv)
|
||||||
{
|
{
|
||||||
int flag;
|
int flag;
|
||||||
char *cp;
|
|
||||||
int amroot;
|
|
||||||
int retries;
|
|
||||||
struct group const*gr = NULL;
|
|
||||||
struct group grent;
|
|
||||||
static char pass[BUFSIZ];
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
struct sgrp const*sg = NULL;
|
|
||||||
struct sgrp sgent;
|
|
||||||
char *admins = NULL;
|
|
||||||
#endif
|
|
||||||
struct passwd *pw = NULL;
|
|
||||||
char *myname;
|
|
||||||
char *user = NULL;
|
|
||||||
char *group = NULL;
|
|
||||||
char *members = NULL;
|
|
||||||
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_help_open ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sanitize_env ();
|
|
||||||
setlocale (LC_ALL, "");
|
|
||||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
|
||||||
textdomain (PACKAGE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make a note of whether or not this command was invoked by root.
|
|
||||||
* This will be used to bypass certain checks later on. Also, set
|
|
||||||
* the real user ID to match the effective user ID. This will
|
|
||||||
* prevent the invoker from issuing signals which would interfer
|
|
||||||
* with this command.
|
|
||||||
*/
|
|
||||||
amroot = getuid () == 0;
|
|
||||||
bywho = getuid ();
|
|
||||||
Prog = Basename (argv[0]);
|
|
||||||
|
|
||||||
OPENLOG ("gpasswd");
|
|
||||||
setbuf (stdout, NULL);
|
|
||||||
setbuf (stderr, NULL);
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
is_shadowgrp = sgr_file_present ();
|
|
||||||
#endif
|
|
||||||
while ((flag = getopt (argc, argv, "a:A:d:gM:rR")) != EOF) {
|
while ((flag = getopt (argc, argv, "a:A:d:gM:rR")) != EOF) {
|
||||||
switch (flag) {
|
switch (flag) {
|
||||||
case 'a': /* add a user */
|
case 'a': /* add a user */
|
||||||
@ -288,6 +252,61 @@ int main (int argc, char **argv)
|
|||||||
usage ();
|
usage ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* gpasswd - administer the /etc/group file
|
||||||
|
*
|
||||||
|
* -a user add user to the named group
|
||||||
|
* -d user remove user from the named group
|
||||||
|
* -r remove password from the named group
|
||||||
|
* -R restrict access to the named group
|
||||||
|
* -A user,... make list of users the administrative users
|
||||||
|
* -M user,... make list of users the group members
|
||||||
|
*/
|
||||||
|
int main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
char *cp;
|
||||||
|
int retries;
|
||||||
|
struct group const*gr = NULL;
|
||||||
|
struct group grent;
|
||||||
|
static char pass[BUFSIZ];
|
||||||
|
|
||||||
|
#ifdef SHADOWGRP
|
||||||
|
struct sgrp const*sg = NULL;
|
||||||
|
struct sgrp sgent;
|
||||||
|
#endif
|
||||||
|
struct passwd *pw = NULL;
|
||||||
|
|
||||||
|
#ifdef WITH_AUDIT
|
||||||
|
audit_help_open ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sanitize_env ();
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||||
|
textdomain (PACKAGE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make a note of whether or not this command was invoked by root.
|
||||||
|
* This will be used to bypass certain checks later on. Also, set
|
||||||
|
* the real user ID to match the effective user ID. This will
|
||||||
|
* prevent the invoker from issuing signals which would interfer
|
||||||
|
* with this command.
|
||||||
|
*/
|
||||||
|
bywho = getuid ();
|
||||||
|
Prog = Basename (argv[0]);
|
||||||
|
|
||||||
|
OPENLOG ("gpasswd");
|
||||||
|
setbuf (stdout, NULL);
|
||||||
|
setbuf (stderr, NULL);
|
||||||
|
|
||||||
|
#ifdef SHADOWGRP
|
||||||
|
is_shadowgrp = sgr_file_present ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Parse the options */
|
||||||
|
process_flags (argc, argv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure exclusive flags are exclusive
|
* Make sure exclusive flags are exclusive
|
||||||
|
Loading…
x
Reference in New Issue
Block a user