Tool name: telnetd
telnetd/telnetd.c:
* Removed getopt () interface
* Added argp_* interface
* Added missing '\n' for debug level error message
* Removed telnetd_version (), telnetd_license () and
telnetd_help ()
Index: telnetd/telnetd.c
===================================================================
RCS file: /sources/inetutils/inetutils/telnetd/telnetd.c,v
retrieving revision 1.38
diff -u -p -r1.38 telnetd.c
--- telnetd/telnetd.c 29 Jun 2007 16:29:29 -0000 1.38
+++ telnetd/telnetd.c 22 Aug 2008 15:44:54 -0000
@@ -19,35 +19,12 @@
#include "telnetd.h"
-#include <getopt.h>
-
#ifdef HAVE_SYS_UTSNAME_H
# include <sys/utsname.h>
#endif
#include <libinetutils.h>
+#include <argp.h>
-static char short_options[] = "a:D::d:E:HhLl::nS:Uu:VX:";
-
-static struct option long_options[] = {
- /* Help options */
- {"version", no_argument, NULL, 'V'},
- {"license", no_argument, NULL, 'L'},
- {"help", no_argument, NULL, 'H'},
- /* Common options */
- {"authmode", required_argument, NULL, 'a'},
- {"debug", optional_argument, NULL, 'D'},
- {"exec-login", required_argument, NULL, 'E'},
- {"no-hostinfo", no_argument, NULL, 'h'},
- {"linemode", optional_argument, NULL, 'l'},
- {"no-keepalive", no_argument, NULL, 'n'},
- {"reverse-lookup", no_argument, NULL, 'U'},
- {"disable-auth-type", required_argument, NULL, 'X'},
- {NULL, 0, NULL, 0}
-};
-
-static void telnetd_version (void);
-static void telnetd_license (void);
-static void telnetd_help (void);
static void parse_authmode (char *str);
static void parse_linemode (char *str);
static void parse_debug_level (char *str);
@@ -110,72 +87,91 @@ int SYNCHing; /* we are in TELNET SYNC
struct telnetd_clocks clocks;
char *program_name;
-int
-main (int argc, char **argv)
-{
- int c;
- program_name = argv[0];
- while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
- != EOF)
- {
- switch (c)
- {
- case 'V':
- telnetd_version ();
- exit (0);
-
- case 'L':
- telnetd_license ();
- exit (0);
+ARGP_PROGRAM_DATA ("telnetd", "2008", "FIXME unknown");
- case 'H':
- telnetd_help ();
- exit (0);
+const char args_doc[] = "";
+const char doc[] = "TELNET protocol server.";
- case 'a':
- parse_authmode (optarg);
- break;
-
- case 'D':
- parse_debug_level (optarg);
- break;
-
- case 'E':
- login_invocation = optarg;
- break;
-
- case 'h':
- hostinfo = 0;
- break;
-
- case 'l':
- parse_linemode (optarg);
- break;
-
- case 'n':
- keepalive = 0;
- break;
+static struct argp_option argp_options[] = {
+#define GRP 0
+ {"debug", 'D', "LEVEL", OPTION_ARG_OPTIONAL, "Set debugging level", GRP+1},
+ {"authmode", 'a', "AUTHMODE", 0, "Specify what mode to use for "
+ "authentication", GRP+1},
+ {"exec-login", 'E', "STRING", 0, "Set program to be executed instead "
+ "of /bin/login", GRP+1},
+ {"no-hostinfo", 'h', NULL, 0, "Do not print host information before login "
+ "has been completed", GRP+1},
+ {"linemode", 'l', "MODE", OPTION_ARG_OPTIONAL, "Set line mode", GRP+1},
+ {"no-keepalive", 'n', NULL, 0, "Disable TCP keep-alives", GRP+1},
+ {"reverse-lookup", 'U', NULL, 0, "Refuse connections from addresses that "
+ "cannot be mapped back into a symbolic name", GRP+1},
+#ifdef AUTHENTICATION
+ {"disable-auth-type", 'X', "AUTHTYPE", 0, "Disable the use of given "
+ "authentication option", GRP+1},
+#endif
+#undef GRP
+ {NULL}
+};
- case 'U':
- reverse_lookup = 1;
- break;
+static error_t
+parse_opt (int key, char *arg, struct argp_state *state)
+{
+ switch (key)
+ {
+ case 'a':
+ parse_authmode (arg);
+ break;
+
+ case 'D':
+ parse_debug_level (arg);
+ break;
+
+ case 'E':
+ login_invocation = arg;
+ break;
+
+ case 'h':
+ hostinfo = 0;
+ break;
+
+ case 'l':
+ parse_linemode (arg);
+ break;
+
+ case 'n':
+ keepalive = 0;
+ break;
+
+ case 'U':
+ reverse_lookup = 1;
+ break;
+
+#ifdef AUTHENTICATION
+ case 'X':
+ auth_disable_name (arg);
+ break;
+#endif
+
+ case ARGP_KEY_ARG:
+ argp_error (state, "junk arguments in the command line.");
+ /* Not reached */
+ break;
+
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }
+
+ return 0;
+}
-#ifdef AUTHENTICATION
- case 'X':
- auth_disable_name (optarg);
- break;
-#endif
- default:
- fprintf (stderr, "telnetd: unknown command line option: %c\n", c);
- exit (1);
- }
- }
+static struct argp argp = {argp_options, parse_opt, args_doc, doc};
- if (argc != optind)
- {
- fprintf (stderr, "telnetd: junk arguments in the command line\n");
- exit (1);
- }
+int
+main (int argc, char **argv)
+{
+ program_name = argv[0];
+ /* Parse command line */
+ argp_parse (&argp, argc, argv, 0, NULL, NULL);
openlog ("telnetd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
telnetd_setup (0);
@@ -265,7 +261,7 @@ parse_debug_level (char *str)
}
if (i == debug_max_mode)
- fprintf (stderr, "telnetd: unknown debug mode: %s", tok);
+ fprintf (stderr, "telnetd: unknown debug mode: %s\n", tok);
}
}
@@ -687,62 +683,6 @@ print_hostinfo ()
free (str);
}
-void
-telnetd_version ()
-{
- printf ("telnetd - %s %s\n", PACKAGE_NAME, PACKAGE_VERSION);
- printf ("Copyright (C) 1998,2001,2002 Free Software Foundation, Inc.\n");
- printf ("%s comes with ABSOLUTELY NO WARRANTY.\n", PACKAGE_NAME);
- printf ("You may redistribute copies of %s\n", PACKAGE_NAME);
- printf ("under the terms of the GNU General Public License.\n");
- printf ("For more information about these matters, ");
- printf ("see the files named COPYING.\n");
-}
-
-void
-telnetd_license ()
-{
- static char license_text[] =
- " This program is free software; you can redistribute it and/or modify\n"
- " it under the terms of the GNU General Public License as published by\n"
- " the Free Software Foundation; either version 3, or (at your option)\n"
- " any later version.\n"
- "\n"
- " This program is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU General Public License\n"
- " along with this program; if not, write to the Free Software\n"
- " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n";
- printf ("%s", license_text);
-}
-
-void
-telnetd_help ()
-{
- printf ("\
-Usage: telnetd [OPTION]\n\
-\n\
-Options are:\n\
- -a, --authmode AUTHMODE specify what mode to use for authentication\n\
- -D, --debug[=LEVEL] set debugging level\n\
- -E, --exec-login STRING set program to be executed instead of /bin/login\n\
- -h, --no-hostinfo do not print host information before login has\n\
- been completed\n\
- -l, --linemode[=MODE] set line mode\n\
- -n, --no-keepalive disable TCP keep-alives\n\
- -U, --reverse-lookup refuse connections from addresses that\n\
- cannot be mapped back into a symbolic name\n\
- -X, --disable-auth-type AUTHTYPE\n\
- disable the use of given authentication option\n\
-Informational options:\n\
- -V, --version display this help and exit\n\
- -L, --license display license and exit\n\
- -H. --help output version information and exit\n");
-}
-
int
stop ()
{
_______________________________________________
bug-inetutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-inetutils