summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEivind Næss <eivnaes@yahoo.com>2022-08-15 09:07:55 -0700
committerEivind Næss <eivnaes@yahoo.com>2022-08-18 20:23:14 -0700
commitcd3b93dd79c918474ac192c0dbe942727c4c2bec (patch)
treec24f48f7a8438c3e1d4a8568d613865dc3f0c566
parent8cbd7dd098cbb565dd9b01397fb352f1c98376f3 (diff)
downloadppp-cd3b93dd79c918474ac192c0dbe942727c4c2bec.tar.gz
Add option to show all options (show-options), and fixing up the version text to include copyright and package name from autotools.
Signed-off-by: Eivind Næss <eivnaes@yahoo.com>
-rw-r--r--pppd/main.c5
-rw-r--r--pppd/options.c106
-rw-r--r--pppd/pppd.h4
3 files changed, 95 insertions, 20 deletions
diff --git a/pppd/main.c b/pppd/main.c
index 7e47752..2eec966 100644
--- a/pppd/main.c
+++ b/pppd/main.c
@@ -364,6 +364,11 @@ main(int argc, char *argv[])
if (debug)
setlogmask(LOG_UPTO(LOG_DEBUG));
+ if (show_options) {
+ showopts();
+ die(0);
+ }
+
/*
* Check that we are running as root.
*/
diff --git a/pppd/options.c b/pppd/options.c
index 92997e6..cea09e3 100644
--- a/pppd/options.c
+++ b/pppd/options.c
@@ -127,6 +127,7 @@ char req_ifname[IFNAMSIZ]; /* requested interface name */
bool multilink = 0; /* Enable multilink operation */
char *bundle_name = NULL; /* bundle name for multilink */
bool dump_options; /* print out option values */
+bool show_options; /* print all supported options and exit */
bool dryrun; /* print out option values and exit */
char *domain; /* domain name set by domain option */
int child_wait = 5; /* # seconds to wait for children at exit */
@@ -263,6 +264,10 @@ option_t general_options[] = {
{ "--version", o_special_noarg, (void *)showversion,
"Show version number" },
+ { "-v", o_special_noarg, (void *)showversion,
+ "Show version number" },
+ { "show-options", o_bool, &show_options,
+ "Show all options and exit", 1 },
{ "--help", o_special_noarg, (void *)showhelp,
"Show brief listing of options" },
{ "-h", o_special_noarg, (void *)showhelp,
@@ -390,23 +395,6 @@ option_t general_options[] = {
#define IMPLEMENTATION ""
#endif
-static char *usage_string = "\
-pppd version %s\n\
-Usage: %s [ options ], where options are:\n\
- <device> Communicate over the named device\n\
- <speed> Set the baud rate to <speed>\n\
- <loc>:<rem> Set the local and/or remote interface IP\n\
- addresses. Either one may be omitted.\n\
- asyncmap <n> Set the desired async map to hex <n>\n\
- auth Require authentication from peer\n\
- connect <p> Invoke shell command <p> to set up the serial line\n\
- crtscts Use hardware RTS/CTS flow control\n\
- defaultroute Add default route through interface\n\
- file <f> Take options from file <f>\n\
- modem Use modem control lines\n\
- mru <n> Set MRU value to <n> for negotiation\n\
-See pppd(8) for more options.\n\
-";
/*
* parse_args - parse a string of arguments from the command line.
@@ -1066,8 +1054,33 @@ print_options(printer_func printer, void *arg)
static void
usage(void)
{
- if (phase == PHASE_INITIALIZE)
- fprintf(stderr, usage_string, VERSION, progname);
+ FILE *fp = stderr;
+ if (phase == PHASE_INITIALIZE) {
+ fprintf(fp, "%s v%s\n", PACKAGE_NAME, PACKAGE_VERSION);
+ fprintf(fp, "Copyright (C) 1999-2022 Paul Mackerras, and others. All rights reserved.\n\n");
+
+
+ fprintf(fp, "License BSD: The 3 clause BSD license <https://opensource.org/licenses/BSD-3-Clause>\n");
+ fprintf(fp, "This is free software: you are free to change and redistribute it.\n");
+ fprintf(fp, "There is NO WARRANTY, to the extent permitted by law.\n\n");
+
+ fprintf(fp, "Report Bugs:\n %s\n\n", PACKAGE_BUGREPORT);
+ fprintf(fp, "Usage: %s [ options ], where options are:\n", progname);
+ fprintf(fp, " <device> Communicate over the named device\n");
+ fprintf(fp, " <speed> Set the baud rate to <speed>\n");
+ fprintf(fp, " <loc>:<rem> Set the local and/or remote interface IP\n");
+ fprintf(fp, " addresses. Either one may be omitted.\n");
+ fprintf(fp, " asyncmap <n> Set the desired async map to hex <n>\n");
+ fprintf(fp, " auth Require authentication from peer\n");
+ fprintf(fp, " connect <p> Invoke shell command <p> to set up the serial line\n");
+ fprintf(fp, " crtscts Use hardware RTS/CTS flow control\n");
+ fprintf(fp, " defaultroute Add default route through interface\n");
+ fprintf(fp, " file <f> Take options from file <f>\n");
+ fprintf(fp, " modem Use modem control lines\n");
+ fprintf(fp, " mru <n> Set MRU value to <n> for negotiation\n");
+ fprintf(fp, " show-options Display an extended list of options\n");
+ fprintf(fp, "See pppd(8) for more options.\n");
+ }
}
/*
@@ -1097,6 +1110,61 @@ showversion(char **argv)
}
/*
+ * Print a set of options including the name of the group of options
+ */
+static void
+showopts_list(FILE *fp, const char *title, option_t *list, ...)
+{
+ option_t *opt = list;
+ va_list varg;
+
+ if (opt && opt->name) {
+ va_start(varg, list);
+ vfprintf(fp, title, varg);
+ fprintf(fp, ":\n");
+ va_end(varg);
+
+ do {
+ fprintf(fp, " %-22s %s\n", opt->name, opt->description?:"");
+ opt++;
+ } while (opt && opt->name);
+
+ fprintf(fp, "\n");
+ }
+}
+
+/*
+ * Dumps the list of available options
+ */
+void
+showopts(void)
+{
+ struct option_list *list;
+ FILE *fp = stderr;
+ int i = 0;
+
+ showopts_list(fp, "General Options",
+ general_options);
+
+ showopts_list(fp, "Authentication Options",
+ auth_options);
+
+ for (list = extra_options; list != NULL; list = list->next)
+ showopts_list(fp, "Extra Options", list->options);
+
+ showopts_list(fp, "Channel Options",
+ the_channel->options);
+
+ for (i = 0; protocols[i] != NULL; ++i) {
+ if (protocols[i]->options != NULL) {
+ showopts_list(fp, "%s Options",
+ protocols[i]->options,
+ protocols[i]->name);
+ }
+ }
+}
+
+/*
* option_error - print a message about an error in an option.
* The message is logged, and also sent to
* stderr if phase == PHASE_INITIALIZE.
diff --git a/pppd/pppd.h b/pppd/pppd.h
index bd9faf0..d4bc043 100644
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
@@ -358,6 +358,7 @@ extern bool multilink; /* enable multilink operation */
extern bool noendpoint; /* don't send or accept endpt. discrim. */
extern char *bundle_name; /* bundle name for multilink */
extern bool dump_options; /* print out option values */
+extern bool show_options; /* show all option names and descriptions */
extern bool dryrun; /* check everything, print options, exit */
extern int child_wait; /* # seconds to wait for children at end */
@@ -776,7 +777,8 @@ int override_value(char *, int, const char *);
/* override value if permitted by priority */
void print_options(printer_func, void *);
/* print out values of all options */
-
+void showopts(void);
+ /* show all option names and description */
int parse_dotted_ip(char *, u_int32_t *);
/*