diff options
author | brian <brian@FreeBSD.org> | 1999-01-25 10:19:03 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-01-25 10:19:03 +0000 |
commit | 5d6ddef65c057f4e64302e6ebe6e580223beed24 (patch) | |
tree | fb1465ca4c0464e24032d8fbde80956f9c1b2222 /usr.sbin/ppp/main.c | |
parent | 4770188a9f503fa764131ac80dbba8a0ebf3e9ce (diff) | |
download | FreeBSD-src-5d6ddef65c057f4e64302e6ebe6e580223beed24.zip FreeBSD-src-5d6ddef65c057f4e64302e6ebe6e580223beed24.tar.gz |
Don't SEGV when ``set proctitle'' is used in the default
section.
Submitted by: Dan Lukes <dan@obluda.cz>
PR: 9669
Diffstat (limited to 'usr.sbin/ppp/main.c')
-rw-r--r-- | usr.sbin/ppp/main.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c index b9cf61d..910f48c 100644 --- a/usr.sbin/ppp/main.c +++ b/usr.sbin/ppp/main.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: main.c,v 1.145 1998/10/31 17:38:46 brian Exp $ + * $Id: main.c,v 1.146 1998/12/10 18:36:30 brian Exp $ * * TODO: */ @@ -251,6 +251,7 @@ int main(int argc, char **argv) { char *name; + const char *lastlabel; int nfds, mode, alias, label, arg; struct bundle *bundle; struct prompt *prompt; @@ -325,6 +326,9 @@ main(int argc, char **argv) log_Printf(LogWARN, "bundle_Create: %s\n", strerror(errno)); return EX_START; } + + /* NOTE: We may now have changed argv[1] via a ``set proctitle'' */ + if (prompt) { prompt->bundle = bundle; /* couldn't do it earlier */ prompt_Printf(prompt, "Using interface: %s\n", bundle->iface->name); @@ -349,15 +353,17 @@ main(int argc, char **argv) sig_signal(SIGUSR2, BringDownServer); + lastlabel = argc == 2 ? bundle->argv1 : argv[argc - 1]; for (arg = label; arg < argc; arg++) { /* In case we use LABEL or ``set enddisc label'' */ - bundle_SetLabel(bundle, argv[argc - 1]); - system_Select(bundle, argv[arg], CONFFILE, prompt, NULL); + bundle_SetLabel(bundle, lastlabel); + system_Select(bundle, arg == 1 ? bundle->argv1 : argv[arg], + CONFFILE, prompt, NULL); } if (label < argc) /* In case the last label did a ``load'' */ - bundle_SetLabel(bundle, argv[argc - 1]); + bundle_SetLabel(bundle, lastlabel); if (mode == PHYS_AUTO && bundle->ncp.ipcp.cfg.peer_range.ipaddr.s_addr == INADDR_ANY) { |