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

Reply via email to