* src/login.c: check_flags() renamed process_flags(). All flag

processing blocs moved to process_flags().
This commit is contained in:
nekral-guest 2008-09-20 16:21:46 +00:00
parent 6b17118e72
commit f4860274be
2 changed files with 94 additions and 83 deletions

View File

@ -1,3 +1,8 @@
2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
* src/login.c: check_flags() renamed process_flags(). All flag
processing blocs moved to process_flags().
2008-09-20 Nicolas François <nicolas.francois@centraliens.net> 2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
* src/logoutd.c, src/userdel.c: Re-indent. This helps pmccabe. * src/logoutd.c, src/userdel.c: Re-indent. This helps pmccabe.

View File

@ -78,7 +78,11 @@ static pam_handle_t *pamh = NULL;
/* /*
* Global variables * Global variables
*/ */
const char *hostname = ""; char *Prog;
static const char *hostname = "";
static char username[32];
static int reason = PW_LOGIN;
static struct passwd pwent; static struct passwd pwent;
@ -102,11 +106,6 @@ static bool rflg = false;
static bool hflg = false; static bool hflg = false;
static bool preauth_flag = false; static bool preauth_flag = false;
/*
* Global variables.
*/
char *Prog;
static bool amroot; static bool amroot;
static int timeout; static int timeout;
@ -129,7 +128,7 @@ extern char **environ;
/* local function prototypes */ /* local function prototypes */
static void usage (void); static void usage (void);
static void setup_tty (void); static void setup_tty (void);
static void check_flags (int, char *const *); static void process_flags (int, char *const *);
#ifndef USE_PAM #ifndef USE_PAM
static struct faillog faillog; static struct faillog faillog;
@ -244,9 +243,12 @@ static void check_nologin (void)
} }
#endif /* !USE_PAM */ #endif /* !USE_PAM */
static void check_flags (int argc, char *const *argv) static void process_flags (int argc, char *const *argv)
{ {
int arg; int arg;
int flag;
username[0] = '\0';
/* /*
* Check the flags for proper form. Every argument starting with * Check the flags for proper form. Every argument starting with
@ -261,6 +263,84 @@ static void check_flags (int argc, char *const *argv)
break; /* stop checking on a "--" */ break; /* stop checking on a "--" */
} }
} }
/*
* Process options.
*/
while ((flag = getopt (argc, argv, "d:f::h:pr:")) != EOF) {
switch (flag) {
case 'd':
/* "-d device" ignored for compatibility */
break;
case 'f':
/*
* username must be a separate token
* (-f root, *not* -froot). --marekm
*
* if -f has an arg, use that, else use the
* normal user name passed after all options
* --benc
*/
if (optarg != NULL && optarg != argv[optind - 1]) {
usage ();
}
fflg = true;
if (optarg) {
STRFCPY (username, optarg);
}
break;
case 'h':
hflg = true;
hostname = optarg;
reason = PW_TELNET;
break;
#ifdef RLOGIN
case 'r':
rflg = true;
hostname = optarg;
reason = PW_RLOGIN;
break;
#endif
case 'p':
pflg = true;
break;
default:
usage ();
}
}
#ifdef RLOGIN
/*
* Neither -h nor -f should be combined with -r.
*/
if (rflg && (hflg || fflg)) {
usage ();
}
#endif
/*
* Allow authentication bypass only if real UID is zero.
*/
if ((rflg || fflg || hflg) && !amroot) {
fprintf (stderr, _("%s: Permission denied.\n"), Prog);
exit (1);
}
/*
* Get the user name.
*/
if (optind < argc) {
if (rflg || (fflg && ('\0' != username[0]))) {
usage ();
}
STRFCPY (username, argv[optind]);
strzero (argv[optind]);
++optind;
}
} }
@ -337,7 +417,6 @@ static RETSIGTYPE alarm_handler (unused int sig)
*/ */
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
char username[32];
char tty[BUFSIZ]; char tty[BUFSIZ];
#ifdef RLOGIN #ifdef RLOGIN
@ -346,11 +425,9 @@ int main (int argc, char **argv)
#if defined(HAVE_STRFTIME) && !defined(USE_PAM) #if defined(HAVE_STRFTIME) && !defined(USE_PAM)
char ptime[80]; char ptime[80];
#endif #endif
int reason = PW_LOGIN;
int delay; int delay;
int retries; int retries;
bool failed; bool failed;
int flag;
bool subroot = false; bool subroot = false;
#ifndef USE_PAM #ifndef USE_PAM
bool is_console; bool is_console;
@ -384,72 +461,10 @@ int main (int argc, char **argv)
initenv (); initenv ();
username[0] = '\0';
amroot = (getuid () == 0); amroot = (getuid () == 0);
Prog = Basename (argv[0]); Prog = Basename (argv[0]);
check_flags (argc, argv); process_flags (argc, argv);
while ((flag = getopt (argc, argv, "d:f::h:pr:")) != EOF) {
switch (flag) {
case 'd':
/* "-d device" ignored for compatibility */
break;
case 'f':
/*
* username must be a separate token
* (-f root, *not* -froot). --marekm
*
* if -f has an arg, use that, else use the
* normal user name passed after all options
* --benc
*/
if (optarg != NULL && optarg != argv[optind - 1]) {
usage ();
}
fflg = true;
if (optarg) {
STRFCPY (username, optarg);
}
break;
case 'h':
hflg = true;
hostname = optarg;
reason = PW_TELNET;
break;
#ifdef RLOGIN
case 'r':
rflg = true;
hostname = optarg;
reason = PW_RLOGIN;
break;
#endif
case 'p':
pflg = true;
break;
default:
usage ();
}
}
#ifdef RLOGIN
/*
* Neither -h nor -f should be combined with -r.
*/
if (rflg && (hflg || fflg)) {
usage ();
}
#endif
/*
* Allow authentication bypass only if real UID is zero.
*/
if ((rflg || fflg || hflg) && !amroot) {
fprintf (stderr, _("%s: Permission denied.\n"), Prog);
exit (1);
}
if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) { if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) {
exit (1); /* must be a terminal */ exit (1); /* must be a terminal */
@ -571,15 +586,6 @@ int main (int argc, char **argv)
init_env (); init_env ();
if (optind < argc) { /* get the user name */
if (rflg || (fflg && ('\0' != username[0]))) {
usage ();
}
STRFCPY (username, argv[optind]);
strzero (argv[optind]);
++optind;
}
if (optind < argc) { /* now set command line variables */ if (optind < argc) { /* now set command line variables */
set_env (argc - optind, &argv[optind]); set_env (argc - optind, &argv[optind]);
} }