Tool name: rlogind
rlogind/rlogind.c
* Removed getopt () interface
* Added argp_* interface
* Moved 'maxchildren', 'mode' and 'port' out of main ()
* Removed usage ()
Index: rlogind/rlogind.c
===================================================================
RCS file: /sources/inetutils/inetutils/rlogind/rlogind.c,v
retrieving revision 1.41
diff -u -p -r1.41 rlogind.c
--- rlogind/rlogind.c 21 May 2008 04:48:59 -0000 1.41
+++ rlogind/rlogind.c 22 Aug 2008 13:06:27 -0000
@@ -66,7 +66,7 @@
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
-#include <getopt.h>
+#include <argp.h>
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
@@ -154,24 +154,6 @@ struct auth_data
};
#endif
-static const char *short_options = "aD::d::hk::L:lnp:orxV";
-static struct option long_options[] = {
- {"allow-root", no_argument, 0, 'o'},
- {"verify-hostname", no_argument, 0, 'a'},
- {"daemon", optional_argument, 0, 'd'},
- {"no-rhosts", no_argument, 0, 'l'},
- {"no-keepalive", no_argument, 0, 'n'},
- {"local-domain", required_argument, 0, 'L'},
- {"kerberos", optional_argument, 0, 'k'},
- {"encrypt", no_argument, 0, 'x'},
- {"debug", optional_argument, 0, 'D'},
- {"help", no_argument, 0, 'h'},
- {"version", no_argument, 0, 'V'},
- {"port", required_argument, 0, 'p'},
- {"reverse-required", no_argument, 0, 'r'},
- {0, 0, 0, 0}
-};
-
int allow_root = 0;
int verify_hostname = 0;
int keepalive = 1;
@@ -196,7 +178,6 @@ int local_dot_count;
struct winsize win = { 0, 0, 0, 0 };
-void usage (void);
void rlogin_daemon (int maxchildren, int port);
int rlogind_auth (int fd, struct auth_data *ap);
void setup_tty (int fd, struct auth_data *ap);
@@ -262,101 +243,134 @@ rlogind_sigchld (int sig)
# define ENC_WRITE(c, fd, buf, size, ap) c = write (fd, buf, size)
#endif
+int maxchildren = DEFMAXCHILDREN;
+int mode = MODE_INETD;
+int port = 0;
+
char *program_name;
-int
-main (int argc, char *argv[])
-{
- int port = 0;
- int maxchildren = DEFMAXCHILDREN;
- int mode = MODE_INETD;
- int c;
+ARGP_PROGRAM_DATA ("rlogind", "2008", "FIXME unknown");
- program_name = argv[0];
- while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
- != EOF)
- {
- switch (c)
- {
- case 'a':
- verify_hostname = 1;
- break;
-
- case 'D':
- if (optarg)
- debug_level = strtoul (optarg, NULL, 10);
- break;
-
- case 'd':
- mode = MODE_DAEMON;
- if (optarg)
- maxchildren = strtoul (optarg, NULL, 10);
- if (maxchildren == 0)
- maxchildren = DEFMAXCHILDREN;
- break;
-
- case 'l':
- __check_rhosts_file = 0; /* FIXME: extern var? */
- break;
-
- case 'L':
- local_domain_name = optarg;
- break;
-
- case 'n':
- keepalive = 0;
- break;
+const char args_doc[] = "";
+const char doc[] = "Remote terminal session server.";
+static struct argp_option argp_options[] = {
+#define GRP 0
+ {"allow-root", 'o', NULL, 0, "Allow uid == 0 to login, disable by default",
+ GRP+1},
+ {"verify-hostname", 'a', NULL, 0, "Ask hostname for verification", GRP+1},
+ /* Added 'maxfork' for --daemon argument name */
+ {"daemon", 'd', "MAXFORK", OPTION_ARG_OPTIONAL, "Daemon mode", GRP+1},
+ {"no-rhosts", 'l', NULL, 0, "Ignore .rhosts file", GRP+1},
+ {"no-keepalive", 'n', NULL, 0, "Do not set SO_KEEPALIVE", GRP+1},
+ {"local-domain", 'L', "NAME", 0, "Set local domain name", GRP+1},
#if defined(KERBEROS) || defined(SHISHI)
- case 'k':
- if (optarg)
- {
- if (*optarg == '4')
- kerberos = AUTH_KERBEROS_4;
- else if (*optarg == '5')
- kerberos = AUTH_KERBEROS_5;
- }
- else
- kerberos = AUTH_KERBEROS_DEFAULT;
- break;
+ {"kerberos", 'k', "NAME", OPTION_ARG_OPTIONAL,
+ "Use kerberos IV/V authentication", GRP+1},
+# ifdef ENCRYPTION
+ {"encrypt", 'x', NULL, 0, "Use DES encryption", GRP+1},
+# endif
+#endif
+ {"debug", 'D', "LEVEL", OPTION_ARG_OPTIONAL, "Set debug level", GRP+1},
+ {"port", 'p', "PORT", 0, "Listen on given port (valid only in daemon mode)",
+ GRP+1},
+ {"reverse-required", 'r', NULL, 0, "Require reverse resolving of"
+ "a remote host IP", GRP+1},
+#undef GRP
+ {NULL}
+};
+
+static error_t
+parse_opt (int key, char *arg, struct argp_state *state)
+{
+ switch (key)
+ {
+ case 'a':
+ verify_hostname = 1;
+ break;
+
+ case 'D':
+ if (arg)
+ debug_level = strtoul (arg, NULL, 10);
+ break;
+
+ case 'd':
+ mode = MODE_DAEMON;
+ if (arg)
+ maxchildren = strtoul (arg, NULL, 10);
+ if (maxchildren == 0)
+ maxchildren = DEFMAXCHILDREN;
+ break;
+
+ case 'l':
+ __check_rhosts_file = 0; /* FIXME: extern var? */
+ break;
+
+ case 'L':
+ local_domain_name = arg;
+ break;
+
+ case 'n':
+ keepalive = 0;
+ break;
+
+#if defined(KERBEROS) || defined(SHISHI)
+ case 'k':
+ if (arg)
+ {
+ if (*arg == '4')
+ kerberos = AUTH_KERBEROS_4;
+ else if (*arg == '5')
+ kerberos = AUTH_KERBEROS_5;
+ }
+ else
+ kerberos = AUTH_KERBEROS_DEFAULT;
+ break;
# ifdef ENCRYPTION
- case 'x':
- encrypt_io = 1;
- break;
+ case 'x':
+ encrypt_io = 1;
+ break;
# endif /* ENCRYPTION */
#endif /* KERBEROS */
- case 'o':
- allow_root = 1;
- break;
-
- case 'p':
- port = strtoul (optarg, NULL, 10);
- break;
-
- case 'r':
- reverse_required = 1;
- break;
-
- case 'V':
- printf ("rlogind (%s %s)\n", PACKAGE_NAME, PACKAGE_VERSION);
- exit (0);
-
- case 'h':
- default:
- usage ();
- exit (0);
- }
- }
+ case 'o':
+ allow_root = 1;
+ break;
+
+ case 'p':
+ port = strtoul (arg, NULL, 10);
+ break;
+
+ case 'r':
+ reverse_required = 1;
+ break;
+
+ case ARGP_KEY_ARG:
+ argp_usage (state);
+
+ default:
+ ARGP_ERR_UNKNOWN;
+ }
+
+ return 0;
+}
+
+static struct argp argp = {argp_options, parse_opt, args_doc, doc};
+
+int
+main (int argc, char *argv[])
+{
+ int index;
+
+ program_name = argv[0];
+
+ /* Parse command line */
+ argp_parse (&argp, argc, argv, 0, &index, NULL);
openlog ("rlogind", LOG_PID | LOG_CONS, LOG_AUTH);
- argc -= optind;
- if (argc > 0)
- {
+ argc -= index;
syslog (LOG_ERR, "%d extra arguments", argc);
- exit (1);
- }
signal (SIGHUP, SIG_IGN);
@@ -1518,31 +1532,3 @@ fatal (int f, const char *msg, int syser
write (f, buf, bp + len - buf);
exit (1);
}
-
-static const char usage_str[] =
- "usage: rlogind [options]\n"
- "\n"
- "Options are:\n"
- " -a, --verify-hostname Ask hostname for verification\n"
- " -d, --daemon Daemon mode\n"
- " -l, --no-rhosts Ignore .rhosts file\n"
- " -L, --local-domain=NAME Set local domain name\n"
- " -n, --no-keepalive Do not set SO_KEEPALIVE\n"
-#if defined(KERBEROS) || defined(SHISHI)
- " -k, --kerberos Use kerberos IV/V authentication\n"
-# ifdef ENCRYPTION
- " -x, --encrypt Use DES encryption\n"
-# endif /* ENCRYPTION */
-#endif /* KERBEROS */
- " -D, --debug[=LEVEL] Set debug level\n"
- " -h, --help Display usage instructions\n"
- " -V, --version Display program version\n"
- " -o, --allow-root Allow uid == 0 to login, disable by default\n"
- " -p, --port PORT Listen on given port (valid only in daemon mode)\n"
- " -r, --reverse-required Require reverse resolving of a remote host IP\n";
-
-void
-usage ()
-{
- printf ("%s\n" "Send bug reports to %s\n", usage_str, PACKAGE_BUGREPORT);
-}
_______________________________________________
bug-inetutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-inetutils