From 250920922b3be54741dcb0fc6afecb9150bf8c51 Mon Sep 17 00:00:00 2001 From: Brian Somers Date: Tue, 14 Apr 1998 23:17:24 +0000 Subject: [PATCH] Pass all command arguments around with struct cmdargs rather than incrementing argv and decrementing argc. Now individual functions can determine their caller. This also removes the "prefix" hack in FindExec(). --- usr.sbin/ppp/alias_cmd.c | 17 +-- usr.sbin/ppp/bundle.c | 4 +- usr.sbin/ppp/command.c | 261 ++++++++++++++++++++++----------------- usr.sbin/ppp/command.h | 3 +- usr.sbin/ppp/datalink.c | 22 ++-- usr.sbin/ppp/filter.c | 27 ++-- usr.sbin/ppp/ipcp.c | 14 +-- usr.sbin/ppp/log.c | 6 +- usr.sbin/ppp/mp.c | 6 +- usr.sbin/ppp/prompt.c | 8 +- usr.sbin/ppp/systems.c | 6 +- usr.sbin/ppp/vars.c | 6 +- 12 files changed, 206 insertions(+), 174 deletions(-) diff --git a/usr.sbin/ppp/alias_cmd.c b/usr.sbin/ppp/alias_cmd.c index 1ee01961393..ca48d308172 100644 --- a/usr.sbin/ppp/alias_cmd.c +++ b/usr.sbin/ppp/alias_cmd.c @@ -2,7 +2,7 @@ * The code in this file was written by Eivind Eklund , * who places it in the public domain without restriction. * - * $Id: alias_cmd.c,v 1.12.2.5 1998/04/07 00:53:12 brian Exp $ + * $Id: alias_cmd.c,v 1.12.2.6 1998/04/07 23:45:39 brian Exp $ */ #include @@ -34,7 +34,7 @@ AliasRedirectPort(struct cmdargs const *arg) if (!AliasEnabled()) { prompt_Printf(arg->prompt, "Alias not enabled\n"); return 1; - } else if (arg->argc == 3) { + } else if (arg->argc == arg->argn+3) { char proto_constant; const char *proto; u_short local_port; @@ -44,7 +44,7 @@ AliasRedirectPort(struct cmdargs const *arg) struct in_addr null_addr; struct alias_link *link; - proto = arg->argv[0]; + proto = arg->argv[arg->argn]; if (strcmp(proto, "tcp") == 0) { proto_constant = IPPROTO_TCP; } else if (strcmp(proto, "udp") == 0) { @@ -57,7 +57,8 @@ AliasRedirectPort(struct cmdargs const *arg) return 1; } - error = StrToAddrAndPort(arg->argv[1], &local_addr, &local_port, proto); + error = StrToAddrAndPort(arg->argv[arg->argn+1], &local_addr, &local_port, + proto); if (error) { prompt_Printf(arg->prompt, "port redirect: error reading" " local addr:port\n"); @@ -65,7 +66,7 @@ AliasRedirectPort(struct cmdargs const *arg) arg->cmd->syntax); return 1; } - error = StrToPort(arg->argv[2], &alias_port, proto); + error = StrToPort(arg->argv[arg->argn+2], &alias_port, proto); if (error) { prompt_Printf(arg->prompt, "port redirect: error reading alias port\n"); prompt_Printf(arg->prompt, "Usage: alias %s %s\n", arg->cmd->name, @@ -95,18 +96,18 @@ AliasRedirectAddr(struct cmdargs const *arg) if (!AliasEnabled()) { prompt_Printf(arg->prompt, "alias not enabled\n"); return 1; - } else if (arg->argc == 2) { + } else if (arg->argc == arg->argn+2) { int error; struct in_addr local_addr; struct in_addr alias_addr; struct alias_link *link; - error = StrToAddr(arg->argv[0], &local_addr); + error = StrToAddr(arg->argv[arg->argn], &local_addr); if (error) { prompt_Printf(arg->prompt, "address redirect: invalid local address\n"); return 1; } - error = StrToAddr(arg->argv[1], &alias_addr); + error = StrToAddr(arg->argv[arg->argn+1], &alias_addr); if (error) { prompt_Printf(arg->prompt, "address redirect: invalid alias address\n"); prompt_Printf(arg->prompt, "Usage: alias %s %s\n", arg->cmd->name, diff --git a/usr.sbin/ppp/bundle.c b/usr.sbin/ppp/bundle.c index 5e46aa2964f..b4b726a7ad4 100644 --- a/usr.sbin/ppp/bundle.c +++ b/usr.sbin/ppp/bundle.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: bundle.c,v 1.1.2.44 1998/04/10 13:19:01 brian Exp $ + * $Id: bundle.c,v 1.1.2.45 1998/04/11 21:50:37 brian Exp $ */ #include @@ -235,7 +235,6 @@ bundle_LayerDown(void *v, struct fsm *fp) if (fp->proto == PROTO_IPCP) { bundle_StopIdleTimer(bundle); - bundle_NewPhase(bundle, PHASE_TERMINATE); } else if (fp->proto == PROTO_LCP) { int speed, others_active; struct datalink *dl; @@ -268,6 +267,7 @@ bundle_LayerFinish(void *v, struct fsm *fp) struct datalink *dl; if (fp->proto == PROTO_IPCP) { + bundle_NewPhase(bundle, PHASE_TERMINATE); for (dl = bundle->links; dl; dl = dl->next) datalink_Close(dl, 0); FsmDown(fp); diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index 924df525172..3ec9c379c3c 100644 --- a/usr.sbin/ppp/command.c +++ b/usr.sbin/ppp/command.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: command.c,v 1.131.2.58 1998/04/10 23:51:27 brian Exp $ + * $Id: command.c,v 1.131.2.59 1998/04/11 21:50:44 brian Exp $ * */ #include @@ -108,11 +108,11 @@ HelpCommand(struct cmdargs const *arg) return 0; } - if (arg->argc > 0) { + if (arg->argc > arg->argn) { for (cmd = arg->cmdtab; cmd->name || cmd->alias; cmd++) if ((cmd->lauth & arg->prompt->auth) && - ((cmd->name && !strcasecmp(cmd->name, *arg->argv)) || - (cmd->alias && !strcasecmp(cmd->alias, *arg->argv)))) { + ((cmd->name && !strcasecmp(cmd->name, arg->argv[arg->argn])) || + (cmd->alias && !strcasecmp(cmd->alias, arg->argv[arg->argn])))) { prompt_Printf(arg->prompt, "%s\n", cmd->syntax); return 0; } @@ -148,7 +148,7 @@ CloneCommand(struct cmdargs const *arg) { int f; - if (arg->argc == 0) + if (arg->argc == arg->argn) return -1; if (!arg->bundle->ncp.mp.active) { @@ -156,7 +156,7 @@ CloneCommand(struct cmdargs const *arg) return 1; } - for (f = 0; f < arg->argc; f++) + for (f = arg->argn; f < arg->argc; f++) bundle_DatalinkClone(arg->bundle, arg->cx, arg->argv[f]); return 0; } @@ -164,7 +164,7 @@ CloneCommand(struct cmdargs const *arg) static int RemoveCommand(struct cmdargs const *arg) { - if (arg->argc != 0) + if (arg->argc != arg->argn) return -1; if (!arg->bundle->ncp.mp.active) { @@ -186,8 +186,8 @@ LoadCommand(struct cmdargs const *arg) { const char *name; - if (arg->argc > 0) - name = *arg->argv; + if (arg->argc > arg->argn) + name = arg->argv[arg->argn]; else name = "default"; @@ -198,7 +198,7 @@ LoadCommand(struct cmdargs const *arg) LogPrintf(LogWARN, "%s: label not found.\n", name); return -1; } else - SetLabel(arg->argc ? name : NULL); + SetLabel(arg->argc > arg->argn ? name : NULL); return 0; } @@ -221,7 +221,7 @@ DialCommand(struct cmdargs const *arg) return 1; } - if (arg->argc > 0 && (res = LoadCommand(arg)) != 0) + if (arg->argc > arg->argn && (res = LoadCommand(arg)) != 0) return res; bundle_Open(arg->bundle, arg->cx ? arg->cx->name : NULL, PHYS_ALL); @@ -245,7 +245,7 @@ ShellCommand(struct cmdargs const *arg, int bg) } #endif - if (arg->argc == 0) + if (arg->argc == arg->argn) if (!arg->prompt) { LogPrintf(LogWARN, "Can't start an interactive shell from" " a config file\n"); @@ -286,10 +286,10 @@ ShellCommand(struct cmdargs const *arg, int bg) close(i); setuid(geteuid()); - if (arg->argc > 0) { + if (arg->argc > arg->argn) { /* substitute pseudo args */ - argv[0] = strdup(arg->argv[0]); - for (argc = 1; argc < arg->argc; argc++) { + argv[0] = strdup(arg->argv[arg->argn]); + for (argc = arg->argn+1; argc < arg->argc; argc++) { if (strcasecmp(arg->argv[argc], "HISADDR") == 0) argv[argc] = strdup(inet_ntoa(arg->bundle->ncp.ipcp.peer_ip)); else if (strcasecmp(arg->argv[argc], "INTERFACE") == 0) @@ -309,7 +309,7 @@ ShellCommand(struct cmdargs const *arg, int bg) exit(1); } } else if (arg->prompt) - printf("ppp: Pausing until %s finishes\n", arg->argv[0]); + printf("ppp: Pausing until %s finishes\n", arg->argv[arg->argn]); execvp(argv[0], argv); } else { if (arg->prompt) @@ -319,7 +319,7 @@ ShellCommand(struct cmdargs const *arg, int bg) } LogPrintf(LogWARN, "exec() of %s failed\n", - arg->argc > 0 ? arg->argv[0] : shell); + arg->argc > arg->argn ? arg->argv[arg->argn] : shell); exit(255); } @@ -339,7 +339,7 @@ ShellCommand(struct cmdargs const *arg, int bg) static int BgShellCommand(struct cmdargs const *arg) { - if (arg->argc == 0) + if (arg->argc == arg->argn) return -1; return ShellCommand(arg, 1); } @@ -462,7 +462,7 @@ static int ShowVersion(struct cmdargs const *arg) { static char VarVersion[] = "PPP Version 2.0-beta"; - static char VarLocalVersion[] = "$Date: 1998/04/10 23:51:27 $"; + static char VarLocalVersion[] = "$Date: 1998/04/11 21:50:44 $"; prompt_Printf(arg->prompt, "%s - %s \n", VarVersion, VarLocalVersion); return 0; @@ -576,49 +576,72 @@ FindCommand(struct cmdtab const *cmds, const char *str, int *pmatch) return found; } +static const char * +mkPrefix(int argc, char const *const *argv, char *tgt, int sz) +{ + int f, tlen, len; + + tlen = 0; + for (f = 0; f < argc && tlen < sz - 2; f++) { + if (f) + tgt[tlen++] = ' '; + len = strlen(argv[f]); + if (len > sz - tlen - 1) + len = sz - tlen - 1; + strncpy(tgt+tlen, argv[f], len); + tlen += len; + } + tgt[tlen] = '\0'; + return tgt; +} + static int -FindExec(struct bundle *bundle, struct cmdtab const *cmds, int argc, - char const *const *argv, const char *prefix, struct prompt *prompt, - struct datalink *cx) +FindExec(struct bundle *bundle, struct cmdtab const *cmds, int argc, int argn, + char const *const *argv, struct prompt *prompt, struct datalink *cx) { struct cmdtab const *cmd; int val = 1; int nmatch; struct cmdargs arg; + char prefix[100]; - cmd = FindCommand(cmds, *argv, &nmatch); + cmd = FindCommand(cmds, argv[argn], &nmatch); if (nmatch > 1) - LogPrintf(LogWARN, "%s%s: Ambiguous command\n", prefix, *argv); + LogPrintf(LogWARN, "%s: Ambiguous command\n", + mkPrefix(argn+1, argv, prefix, sizeof prefix)); else if (cmd && (!prompt || (cmd->lauth & prompt->auth))) { if ((cmd->lauth & LOCAL_CX) && !cx) /* We've got no context, but we require it */ cx = bundle2datalink(bundle, NULL); if ((cmd->lauth & LOCAL_CX) && !cx) - LogPrintf(LogWARN, "%s%s: No context (use the `link' command)\n", - prefix, *argv); + LogPrintf(LogWARN, "%s: No context (use the `link' command)\n", + mkPrefix(argn+1, argv, prefix, sizeof prefix)); else { if (cx && !(cmd->lauth & (LOCAL_CX|LOCAL_CX_OPT))) { - LogPrintf(LogWARN, "%s%s: Redundant context (%s) ignored\n", - prefix, *argv, cx->name); + LogPrintf(LogWARN, "%s: Redundant context (%s) ignored\n", + mkPrefix(argn+1, argv, prefix, sizeof prefix), cx->name); cx = NULL; } arg.cmdtab = cmds; arg.cmd = cmd; - arg.argc = argc-1; - arg.argv = argv+1; + arg.argc = argc; + arg.argn = argn+1; + arg.argv = argv; arg.bundle = bundle; arg.cx = cx; arg.prompt = prompt; - val = (cmd->func) (&arg); + val = (*cmd->func) (&arg); } } else - LogPrintf(LogWARN, "%s%s: Invalid command\n", prefix, *argv); + LogPrintf(LogWARN, "%s: Invalid command\n", + mkPrefix(argn+1, argv, prefix, sizeof prefix)); if (val == -1) LogPrintf(LogWARN, "Usage: %s\n", cmd->syntax); else if (val) - LogPrintf(LogWARN, "%s%s: Failed %d\n", prefix, *argv, val); + LogPrintf(LogWARN, "%s: Failed %d\n", + mkPrefix(argn+1, argv, prefix, sizeof prefix), val); return val; } @@ -684,7 +707,7 @@ RunCommand(struct bundle *bundle, int argc, char const *const *argv, } LogPrintf(LogCOMMAND, "%s\n", buf); } - FindExec(bundle, Commands, argc, argv, "", prompt, NULL); + FindExec(bundle, Commands, argc, 0, argv, prompt, NULL); } } @@ -704,8 +727,8 @@ ShowCommand(struct cmdargs const *arg) { if (!arg->prompt) LogPrintf(LogWARN, "show: Cannot show without a prompt\n"); - else if (arg->argc > 0) - FindExec(arg->bundle, ShowCommands, arg->argc, arg->argv, "show ", + else if (arg->argc > arg->argn) + FindExec(arg->bundle, ShowCommands, arg->argc, arg->argn, arg->argv, arg->prompt, arg->cx); else prompt_Printf(arg->prompt, "Use ``show ?'' to get a list.\n"); @@ -736,7 +759,7 @@ static int QuitCommand(struct cmdargs const *arg) { if (!arg->prompt || prompt_IsController(arg->prompt) || - (arg->argc > 0 && !strcasecmp(*arg->argv, "all") && + (arg->argc > arg->argn && !strcasecmp(arg->argv[arg->argn], "all") && (arg->prompt->auth & LOCAL_AUTH))) Cleanup(EX_NORMAL); if (arg->prompt) @@ -765,24 +788,25 @@ SetModemSpeed(struct cmdargs const *arg) long speed; char *end; - if (arg->argc > 0 && **arg->argv) { - if (arg->argc > 1) { + if (arg->argc > arg->argn && *arg->argv[arg->argn]) { + if (arg->argc > arg->argn+1) { LogPrintf(LogWARN, "SetModemSpeed: Too many arguments"); return -1; } - if (strcasecmp(*arg->argv, "sync") == 0) { + if (strcasecmp(arg->argv[arg->argn], "sync") == 0) { Physical_SetSync(arg->cx->physical); return 0; } end = NULL; - speed = strtol(*arg->argv, &end, 10); + speed = strtol(arg->argv[arg->argn], &end, 10); if (*end) { - LogPrintf(LogWARN, "SetModemSpeed: Bad argument \"%s\"", *arg->argv); + LogPrintf(LogWARN, "SetModemSpeed: Bad argument \"%s\"", + arg->argv[arg->argn]); return -1; } if (Physical_SetSpeed(arg->cx->physical, speed)) return 0; - LogPrintf(LogWARN, "%s: Invalid speed\n", *arg->argv); + LogPrintf(LogWARN, "%s: Invalid speed\n", arg->argv[arg->argn]); } else LogPrintf(LogWARN, "SetModemSpeed: No speed specified\n"); @@ -796,11 +820,11 @@ SetStoppedTimeout(struct cmdargs const *arg) l->lcp.fsm.StoppedTimer.load = 0; l->ccp.fsm.StoppedTimer.load = 0; - if (arg->argc <= 2) { - if (arg->argc > 0) { - l->lcp.fsm.StoppedTimer.load = atoi(arg->argv[0]) * SECTICKS; - if (arg->argc > 1) - l->ccp.fsm.StoppedTimer.load = atoi(arg->argv[1]) * SECTICKS; + if (arg->argc <= arg->argn+2) { + if (arg->argc > arg->argn) { + l->lcp.fsm.StoppedTimer.load = atoi(arg->argv[arg->argn]) * SECTICKS; + if (arg->argc > arg->argn+1) + l->ccp.fsm.StoppedTimer.load = atoi(arg->argv[arg->argn+1]) * SECTICKS; } return 0; } @@ -815,17 +839,17 @@ SetServer(struct cmdargs const *arg) { int res = -1; - if (arg->argc > 0 && arg->argc < 4) { + if (arg->argc > arg->argn && arg->argc < arg->argn+4) { const char *port, *passwd, *mask; /* What's what ? */ - port = arg->argv[0]; - if (arg->argc == 2) { - passwd = arg->argv[1]; + port = arg->argv[arg->argn]; + if (arg->argc == arg->argn + 2) { + passwd = arg->argv[arg->argn+1]; mask = NULL; - } else if (arg->argc == 3) { - passwd = arg->argv[1]; - mask = arg->argv[2]; + } else if (arg->argc == arg->argn + 3) { + passwd = arg->argv[arg->argn+1]; + mask = arg->argv[arg->argn+2]; if (!ismask(mask)) return -1; } else if (strcasecmp(port, "none") == 0) { @@ -877,15 +901,16 @@ SetServer(struct cmdargs const *arg) static int SetModemParity(struct cmdargs const *arg) { - return arg->argc > 0 ? modem_SetParity(arg->cx->physical, *arg->argv) : -1; + return arg->argc > arg->argn ? modem_SetParity(arg->cx->physical, + arg->argv[arg->argn]) : -1; } static int SetEscape(struct cmdargs const *arg) { int code; - int argc = arg->argc; - char const *const *argv = arg->argv; + int argc = arg->argc - arg->argn; + char const *const *argv = arg->argv + arg->argn; for (code = 0; code < 33; code++) arg->cx->physical->async.cfg.EscMap[code] = 0; @@ -925,23 +950,24 @@ SetInterfaceAddr(struct cmdargs const *arg) ipcp->cfg.my_range.ipaddr.s_addr = INADDR_ANY; ipcp->cfg.peer_range.ipaddr.s_addr = INADDR_ANY; - if (arg->argc > 4) + if (arg->argc > arg->argn + 4) return -1; ipcp->cfg.HaveTriggerAddress = 0; ipcp->cfg.netmask.s_addr = INADDR_ANY; iplist_reset(&ipcp->cfg.peer_list); - if (arg->argc > 0) { - if (!ParseAddr(ipcp, arg->argc, arg->argv, &ipcp->cfg.my_range.ipaddr, - &ipcp->cfg.my_range.mask, &ipcp->cfg.my_range.width)) + if (arg->argc > arg->argn) { + if (!ParseAddr(ipcp, arg->argc - arg->argn, arg->argv + arg->argn, + &ipcp->cfg.my_range.ipaddr, &ipcp->cfg.my_range.mask, + &ipcp->cfg.my_range.width)) return 1; - if (arg->argc > 1) { - hisaddr = arg->argv[1]; - if (arg->argc > 2) { - ipcp->cfg.netmask = GetIpAddr(arg->argv[2]); - if (arg->argc > 3) { - ipcp->cfg.TriggerAddress = GetIpAddr(arg->argv[3]); + if (arg->argc > arg->argn+1) { + hisaddr = arg->argv[arg->argn+1]; + if (arg->argc > arg->argn+2) { + ipcp->cfg.netmask = GetIpAddr(arg->argv[arg->argn+2]); + if (arg->argc > arg->argn+3) { + ipcp->cfg.TriggerAddress = GetIpAddr(arg->argv[arg->argn+3]); ipcp->cfg.HaveTriggerAddress = 1; } } @@ -1001,7 +1027,8 @@ static int SetNS(struct cmdargs const *arg) { SetMSEXT(&arg->bundle->ncp.ipcp, &arg->bundle->ncp.ipcp.cfg.ns_entries[0], - &arg->bundle->ncp.ipcp.cfg.ns_entries[1], arg->argc, arg->argv); + &arg->bundle->ncp.ipcp.cfg.ns_entries[1], arg->argc - arg->argn, + arg->argv + arg->argn); return 0; } @@ -1009,7 +1036,8 @@ static int SetNBNS(struct cmdargs const *arg) { SetMSEXT(&arg->bundle->ncp.ipcp, &arg->bundle->ncp.ipcp.cfg.nbns_entries[0], - &arg->bundle->ncp.ipcp.cfg.nbns_entries[1], arg->argc, arg->argv); + &arg->bundle->ncp.ipcp.cfg.nbns_entries[1], arg->argc - arg->argn, + arg->argv + arg->argn); return 0; } @@ -1025,8 +1053,8 @@ SetVariable(struct cmdargs const *arg) const char *err = NULL; struct link *l = ChooseLink(arg); /* AUTH_CX_OPT uses this */ - if (arg->argc > 0) - argp = *arg->argv; + if (arg->argc > arg->argn) + argp = arg->argv[arg->argn]; else argp = ""; @@ -1070,16 +1098,16 @@ SetVariable(struct cmdargs const *arg) cx->cfg.script.login[sizeof cx->cfg.script.login - 1] = '\0'; break; case VAR_WINSIZE: - if (arg->argc > 0) { - l->ccp.cfg.deflate.out.winsize = atoi(arg->argv[0]); + if (arg->argc > arg->argn) { + l->ccp.cfg.deflate.out.winsize = atoi(arg->argv[arg->argn]); if (l->ccp.cfg.deflate.out.winsize < 8 || l->ccp.cfg.deflate.out.winsize > 15) { LogPrintf(LogWARN, "%d: Invalid outgoing window size\n", l->ccp.cfg.deflate.out.winsize); l->ccp.cfg.deflate.out.winsize = 15; } - if (arg->argc > 1) { - l->ccp.cfg.deflate.in.winsize = atoi(arg->argv[1]); + if (arg->argc > arg->argn+1) { + l->ccp.cfg.deflate.in.winsize = atoi(arg->argv[arg->argn+1]); if (l->ccp.cfg.deflate.in.winsize < 8 || l->ccp.cfg.deflate.in.winsize > 15) { LogPrintf(LogWARN, "%d: Invalid incoming window size\n", @@ -1094,10 +1122,11 @@ SetVariable(struct cmdargs const *arg) } break; case VAR_DEVICE: - Physical_SetDeviceList(cx->physical, arg->argc, arg->argv); + Physical_SetDeviceList(cx->physical, arg->argc - arg->argn, + arg->argv + arg->argn); break; case VAR_ACCMAP: - if (arg->argc > 0) { + if (arg->argc > arg->argn) { sscanf(argp, "%lx", &ulong_val); cx->physical->link.lcp.cfg.accmap = ulong_val; } else { @@ -1131,8 +1160,8 @@ SetVariable(struct cmdargs const *arg) break; case VAR_OPENMODE: if (strcasecmp(argp, "active") == 0) - cx->physical->link.lcp.cfg.openmode = arg->argc > 1 ? - atoi(arg->argv[1]) : 1; + cx->physical->link.lcp.cfg.openmode = arg->argc > arg->argn+1 ? + atoi(arg->argv[arg->argn+1]) : 1; else if (strcasecmp(argp, "passive") == 0) cx->physical->link.lcp.cfg.openmode = OPEN_PASSIVE; else { @@ -1149,9 +1178,9 @@ SetVariable(struct cmdargs const *arg) cx->cfg.script.hangup[sizeof cx->cfg.script.hangup - 1] = '\0'; break; case VAR_IDLETIMEOUT: - if (arg->argc > 1) + if (arg->argc > arg->argn+1) err = "Too many idle timeout values\n"; - else if (arg->argc == 1) + else if (arg->argc == arg->argn+1) bundle_SetIdleTimer(arg->bundle, atoi(argp)); if (err) LogPrintf(LogWARN, err); @@ -1212,10 +1241,10 @@ SetVariable(struct cmdargs const *arg) static int SetCtsRts(struct cmdargs const *arg) { - if (arg->argc == 1) { - if (strcmp(*arg->argv, "on") == 0) + if (arg->argc == arg->argn+1) { + if (strcmp(arg->argv[arg->argn], "on") == 0) Physical_SetRtsCts(arg->cx->physical, 1); - else if (strcmp(*arg->argv, "off") == 0) + else if (strcmp(arg->argv[arg->argn], "off") == 0) Physical_SetRtsCts(arg->cx->physical, 0); else return -1; @@ -1308,8 +1337,8 @@ static struct cmdtab const SetCommands[] = { static int SetCommand(struct cmdargs const *arg) { - if (arg->argc > 0) - FindExec(arg->bundle, SetCommands, arg->argc, arg->argv, "set ", + if (arg->argc > arg->argn) + FindExec(arg->bundle, SetCommands, arg->argc, arg->argn, arg->argv, arg->prompt, arg->cx); else if (arg->prompt) prompt_Printf(arg->prompt, "Use `set ?' to get a list or `set ? ' for" @@ -1327,32 +1356,32 @@ AddCommand(struct cmdargs const *arg) struct in_addr dest, gateway, netmask; int gw; - if (arg->argc != 3 && arg->argc != 2) + if (arg->argc != arg->argn+3 && arg->argc != arg->argn+2) return -1; - if (arg->argc == 2) - if (strcasecmp(arg->argv[0], "default")) + if (arg->argc == arg->argn+2) + if (strcasecmp(arg->argv[arg->argn], "default")) return -1; else { dest.s_addr = netmask.s_addr = INADDR_ANY; gw = 1; } else { - if (strcasecmp(arg->argv[0], "MYADDR") == 0) + if (strcasecmp(arg->argv[arg->argn], "MYADDR") == 0) dest = arg->bundle->ncp.ipcp.my_ip; - else if (strcasecmp(arg->argv[0], "HISADDR") == 0) + else if (strcasecmp(arg->argv[arg->argn], "HISADDR") == 0) dest = arg->bundle->ncp.ipcp.peer_ip; else - dest = GetIpAddr(arg->argv[0]); - netmask = GetIpAddr(arg->argv[1]); + dest = GetIpAddr(arg->argv[arg->argn]); + netmask = GetIpAddr(arg->argv[arg->argn+1]); gw = 2; } - if (strcasecmp(arg->argv[gw], "HISADDR") == 0) + if (strcasecmp(arg->argv[arg->argn+gw], "HISADDR") == 0) gateway = arg->bundle->ncp.ipcp.peer_ip; - else if (strcasecmp(arg->argv[gw], "INTERFACE") == 0) + else if (strcasecmp(arg->argv[arg->argn+gw], "INTERFACE") == 0) gateway.s_addr = INADDR_ANY; else - gateway = GetIpAddr(arg->argv[gw]); + gateway = GetIpAddr(arg->argv[arg->argn+gw]); bundle_SetRoute(arg->bundle, RTM_ADD, dest, gateway, netmask, arg->cmd->args ? 1 : 0); return 0; @@ -1363,16 +1392,16 @@ DeleteCommand(struct cmdargs const *arg) { struct in_addr dest, none; - if (arg->argc == 1) - if(strcasecmp(arg->argv[0], "all") == 0) + if (arg->argc == arg->argn+1) + if(strcasecmp(arg->argv[arg->argn], "all") == 0) DeleteIfRoutes(arg->bundle, 0); else { - if (strcasecmp(arg->argv[0], "MYADDR") == 0) + if (strcasecmp(arg->argv[arg->argn], "MYADDR") == 0) dest = arg->bundle->ncp.ipcp.my_ip; - else if (strcasecmp(arg->argv[0], "default") == 0) + else if (strcasecmp(arg->argv[arg->argn], "default") == 0) dest.s_addr = INADDR_ANY; else - dest = GetIpAddr(arg->argv[0]); + dest = GetIpAddr(arg->argv[arg->argn]); none.s_addr = INADDR_ANY; bundle_SetRoute(arg->bundle, RTM_DELETE, dest, none, none, arg->cmd->args ? 1 : 0); @@ -1417,8 +1446,8 @@ static struct cmdtab const AliasCommands[] = static int AliasCommand(struct cmdargs const *arg) { - if (arg->argc > 0) - FindExec(arg->bundle, AliasCommands, arg->argc, arg->argv, "alias ", + if (arg->argc > arg->argn) + FindExec(arg->bundle, AliasCommands, arg->argc, arg->argn, arg->argv, arg->prompt, arg->cx); else if (arg->prompt) prompt_Printf(arg->prompt, "Use `alias help' to get a list or `alias help" @@ -1432,13 +1461,13 @@ AliasCommand(struct cmdargs const *arg) static int AliasEnable(struct cmdargs const *arg) { - if (arg->argc == 1) - if (strcasecmp(arg->argv[0], "yes") == 0) { + if (arg->argc == arg->argn+1) + if (strcasecmp(arg->argv[arg->argn], "yes") == 0) { if (loadAliasHandlers() == 0) return 0; LogPrintf(LogWARN, "Cannot load alias library\n"); return 1; - } else if (strcasecmp(arg->argv[0], "no") == 0) { + } else if (strcasecmp(arg->argv[arg->argn], "no") == 0) { unloadAliasHandlers(); return 0; } @@ -1450,14 +1479,14 @@ static int AliasOption(struct cmdargs const *arg) { unsigned param = (unsigned)arg->cmd->args; - if (arg->argc == 1) - if (strcasecmp(arg->argv[0], "yes") == 0) { + if (arg->argc == arg->argn+1) + if (strcasecmp(arg->argv[arg->argn], "yes") == 0) { if (AliasEnabled()) { (*PacketAlias.SetMode)(param, param); return 0; } LogPrintf(LogWARN, "alias not enabled\n"); - } else if (strcmp(arg->argv[0], "no") == 0) { + } else if (strcmp(arg->argv[arg->argn], "no") == 0) { if (AliasEnabled()) { (*PacketAlias.SetMode)(0, param); return 0; @@ -1482,8 +1511,8 @@ static int AllowCommand(struct cmdargs const *arg) { /* arg->bundle may be NULL (see ValidSystem()) ! */ - if (arg->argc > 0) - FindExec(arg->bundle, AllowCommands, arg->argc, arg->argv, "allow ", + if (arg->argc > arg->argn) + FindExec(arg->bundle, AllowCommands, arg->argc, arg->argn, arg->argv, arg->prompt, arg->cx); else if (arg->prompt) prompt_Printf(arg->prompt, "Use `allow ?' to get a list or `allow ? '" @@ -1497,13 +1526,13 @@ AllowCommand(struct cmdargs const *arg) static int LinkCommand(struct cmdargs const *arg) { - if (arg->argc > 1) { - struct datalink *cx = bundle2datalink(arg->bundle, arg->argv[0]); + if (arg->argc > arg->argn+1) { + struct datalink *cx = bundle2datalink(arg->bundle, arg->argv[arg->argn]); if (cx) - FindExec(arg->bundle, Commands, arg->argc - 1, arg->argv + 1, "", + FindExec(arg->bundle, Commands, arg->argc, arg->argn+1, arg->argv, arg->prompt, cx); else { - LogPrintf(LogWARN, "link: %s: Invalid link name\n", arg->argv[0]); + LogPrintf(LogWARN, "link: %s: Invalid link name\n", arg->argv[arg->argn]); return 1; } } else { diff --git a/usr.sbin/ppp/command.h b/usr.sbin/ppp/command.h index f4f4e75e725..91cb9643f9e 100644 --- a/usr.sbin/ppp/command.h +++ b/usr.sbin/ppp/command.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: command.h,v 1.12.2.8 1998/04/03 19:25:26 brian Exp $ + * $Id: command.h,v 1.12.2.9 1998/04/07 00:53:34 brian Exp $ * * TODO: */ @@ -29,6 +29,7 @@ struct cmdargs { struct cmdtab const *cmdtab; /* The entire command table */ struct cmdtab const *cmd; /* This command entry */ int argc; /* Number of arguments (excluding cmd */ + int argn; /* Argument to start processing from */ char const *const *argv; /* Arguments */ struct bundle *bundle; /* Our bundle */ struct datalink *cx; /* Our context */ diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index d4399f98bb5..a2c622e77c8 100644 --- a/usr.sbin/ppp/datalink.c +++ b/usr.sbin/ppp/datalink.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: datalink.c,v 1.1.2.35 1998/04/07 00:53:35 brian Exp $ + * $Id: datalink.c,v 1.1.2.36 1998/04/10 13:19:05 brian Exp $ */ #include @@ -748,9 +748,9 @@ datalink_Show(struct datalink *dl, struct prompt *prompt) int datalink_SetReconnect(struct cmdargs const *arg) { - if (arg->argc == 2) { - arg->cx->cfg.reconnect.timeout = atoi(arg->argv[0]); - arg->cx->cfg.reconnect.max = atoi(arg->argv[1]); + if (arg->argc == arg->argn+2) { + arg->cx->cfg.reconnect.timeout = atoi(arg->argv[arg->argn]); + arg->cx->cfg.reconnect.max = atoi(arg->argv[arg->argn+1]); return 0; } return -1; @@ -763,13 +763,13 @@ datalink_SetRedial(struct cmdargs const *arg) int tries; char *dot; - if (arg->argc == 1 || arg->argc == 2) { - if (strncasecmp(arg->argv[0], "random", 6) == 0 && - (arg->argv[0][6] == '\0' || arg->argv[0][6] == '.')) { + if (arg->argc == arg->argn+1 || arg->argc == arg->argn+2) { + if (strncasecmp(arg->argv[arg->argn], "random", 6) == 0 && + (arg->argv[arg->argn][6] == '\0' || arg->argv[arg->argn][6] == '.')) { arg->cx->cfg.dial.timeout = -1; randinit(); } else { - timeout = atoi(arg->argv[0]); + timeout = atoi(arg->argv[arg->argn]); if (timeout >= 0) arg->cx->cfg.dial.timeout = timeout; @@ -779,7 +779,7 @@ datalink_SetRedial(struct cmdargs const *arg) } } - dot = strchr(arg->argv[0], '.'); + dot = strchr(arg->argv[arg->argn], '.'); if (dot) { if (strcasecmp(++dot, "random") == 0) { arg->cx->cfg.dial.next_timeout = -1; @@ -797,8 +797,8 @@ datalink_SetRedial(struct cmdargs const *arg) /* Default next timeout */ arg->cx->cfg.dial.next_timeout = DIAL_NEXT_TIMEOUT; - if (arg->argc == 2) { - tries = atoi(arg->argv[1]); + if (arg->argc == arg->argn+2) { + tries = atoi(arg->argv[arg->argn+1]); if (tries >= 0) { arg->cx->cfg.dial.max = tries; diff --git a/usr.sbin/ppp/filter.c b/usr.sbin/ppp/filter.c index 50a7b488f07..6b996a4f316 100644 --- a/usr.sbin/ppp/filter.c +++ b/usr.sbin/ppp/filter.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: filter.c,v 1.22.2.13 1998/04/06 09:12:27 brian Exp $ + * $Id: filter.c,v 1.22.2.14 1998/04/07 00:53:39 brian Exp $ * * TODO: Shoud send ICMP error message when we discard packets. */ @@ -374,21 +374,22 @@ SetFilter(struct cmdargs const *arg) { struct filter *filter; - if (arg->argc < 2) + if (arg->argc < arg->argn+2) return -1; - if (!strcmp(arg->argv[0], "in")) + if (!strcmp(arg->argv[arg->argn], "in")) filter = &arg->bundle->filter.in; - else if (!strcmp(arg->argv[0], "out")) + else if (!strcmp(arg->argv[arg->argn], "out")) filter = &arg->bundle->filter.out; - else if (!strcmp(arg->argv[0], "dial")) + else if (!strcmp(arg->argv[arg->argn], "dial")) filter = &arg->bundle->filter.dial; - else if (!strcmp(arg->argv[0], "alive")) + else if (!strcmp(arg->argv[arg->argn], "alive")) filter = &arg->bundle->filter.alive; else return -1; - Parse(&arg->bundle->ncp.ipcp, arg->argc - 1, arg->argv + 1, filter->rule); + Parse(&arg->bundle->ncp.ipcp, arg->argc - arg->argn - 1, + arg->argv + arg->argn + 1, filter->rule); return 0; } @@ -436,19 +437,19 @@ doShowFilter(struct filterent *fp, struct prompt *prompt) int ShowFilter(struct cmdargs const *arg) { - if (arg->argc > 1) + if (arg->argc > arg->argn+1) return -1; - if (arg->argc == 1) { + if (arg->argc == arg->argn+1) { struct filter *filter; - if (!strcmp(arg->argv[0], "in")) + if (!strcmp(arg->argv[arg->argn], "in")) filter = &arg->bundle->filter.in; - else if (!strcmp(arg->argv[0], "out")) + else if (!strcmp(arg->argv[arg->argn], "out")) filter = &arg->bundle->filter.out; - else if (!strcmp(arg->argv[0], "dial")) + else if (!strcmp(arg->argv[arg->argn], "dial")) filter = &arg->bundle->filter.dial; - else if (!strcmp(arg->argv[0], "alive")) + else if (!strcmp(arg->argv[arg->argn], "alive")) filter = &arg->bundle->filter.alive; else return -1; diff --git a/usr.sbin/ppp/ipcp.c b/usr.sbin/ppp/ipcp.c index c609a6b0d3e..b7397082ea5 100644 --- a/usr.sbin/ppp/ipcp.c +++ b/usr.sbin/ppp/ipcp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ipcp.c,v 1.50.2.34 1998/04/07 23:45:55 brian Exp $ + * $Id: ipcp.c,v 1.50.2.35 1998/04/10 13:19:08 brian Exp $ * * TODO: * o More RFC1772 backwoard compatibility @@ -180,20 +180,20 @@ ReportIpcpStatus(struct cmdargs const *arg) int SetInitVJ(struct cmdargs const *arg) { - if (arg->argc != 2) + if (arg->argc != arg->argn+2) return -1; - if (!strcasecmp(arg->argv[0], "slots")) { + if (!strcasecmp(arg->argv[arg->argn], "slots")) { int slots; - slots = atoi(arg->argv[1]); + slots = atoi(arg->argv[arg->argn+1]); if (slots < 4 || slots > 16) return 1; arg->bundle->ncp.ipcp.cfg.VJInitSlots = slots; return 0; - } else if (!strcasecmp(arg->argv[0], "slotcomp")) { - if (!strcasecmp(arg->argv[1], "on")) + } else if (!strcasecmp(arg->argv[arg->argn], "slotcomp")) { + if (!strcasecmp(arg->argv[arg->argn+1], "on")) arg->bundle->ncp.ipcp.cfg.VJInitComp = 1; - else if (!strcasecmp(arg->argv[1], "off")) + else if (!strcasecmp(arg->argv[arg->argn+1], "off")) arg->bundle->ncp.ipcp.cfg.VJInitComp = 0; else return 2; diff --git a/usr.sbin/ppp/log.c b/usr.sbin/ppp/log.c index e62425ebcfa..e31bf79cb45 100644 --- a/usr.sbin/ppp/log.c +++ b/usr.sbin/ppp/log.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: log.c,v 1.25.2.6 1998/04/07 00:54:00 brian Exp $ + * $Id: log.c,v 1.25.2.7 1998/04/10 13:19:10 brian Exp $ */ #include @@ -327,8 +327,8 @@ log_SetLevel(struct cmdargs const *arg) int i, res, argc, local; char const *const *argv, *argp; - argc = arg->argc; - argv = arg->argv; + argc = arg->argc - arg->argn; + argv = arg->argv + arg->argn; res = 0; if (argc == 0 || strcasecmp(argv[0], "local")) diff --git a/usr.sbin/ppp/mp.c b/usr.sbin/ppp/mp.c index 853a119dc89..8a960b5cbe8 100644 --- a/usr.sbin/ppp/mp.c +++ b/usr.sbin/ppp/mp.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: mp.c,v 1.1.2.1 1998/04/03 19:21:44 brian Exp $ + * $Id: mp.c,v 1.1.2.2 1998/04/06 09:12:34 brian Exp $ */ #include @@ -441,10 +441,10 @@ mp_SetDatalinkWeight(struct cmdargs const *arg) { int val; - if (arg->argc != 1) + if (arg->argc != arg->argn+1) return -1; - val = atoi(arg->argv[0]); + val = atoi(arg->argv[arg->argn]); if (val < LINK_MINWEIGHT) { LogPrintf(LogWARN, "Link weights must not be less than %d\n", LINK_MINWEIGHT); diff --git a/usr.sbin/ppp/prompt.c b/usr.sbin/ppp/prompt.c index 49bcf7239a7..687ab57dcb5 100644 --- a/usr.sbin/ppp/prompt.c +++ b/usr.sbin/ppp/prompt.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: prompt.c,v 1.1.2.24 1998/04/08 18:27:29 brian Exp $ + * $Id: prompt.c,v 1.1.2.25 1998/04/10 13:19:18 brian Exp $ */ #include @@ -469,12 +469,12 @@ PasswdCommand(struct cmdargs const *arg) return 0; } - if (arg->argc == 0) + if (arg->argc == arg->argn) pass = ""; - else if (arg->argc > 1) + else if (arg->argc > arg->argn+1) return -1; else - pass = *arg->argv; + pass = arg->argv[arg->argn]; if (!strcmp(arg->prompt->owner->passwd, pass)) arg->prompt->auth = LOCAL_AUTH; diff --git a/usr.sbin/ppp/systems.c b/usr.sbin/ppp/systems.c index e1aef8e634e..e501f55e667 100644 --- a/usr.sbin/ppp/systems.c +++ b/usr.sbin/ppp/systems.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: systems.c,v 1.35.2.5 1998/04/06 09:12:37 brian Exp $ + * $Id: systems.c,v 1.35.2.6 1998/04/10 13:19:21 brian Exp $ * * TODO: */ @@ -172,7 +172,7 @@ AllowUsers(struct cmdargs const *arg) userok = 0; user = getlogin(); if (user && *user) - for (f = 0; f < arg->argc; f++) + for (f = arg->argn; f < arg->argc; f++) if (!strcmp("*", arg->argv[f]) || !strcmp(user, arg->argv[f])) { userok = 1; break; @@ -216,7 +216,7 @@ AllowModes(struct cmdargs const *arg) int allowed; allowed = 0; - for (f = 0; f < arg->argc; f++) { + for (f = arg->argn; f < arg->argc; f++) { for (m = 0; modes[m].mode; m++) if (!strcasecmp(modes[m].name, arg->argv[f])) { allowed |= modes[m].mode; diff --git a/usr.sbin/ppp/vars.c b/usr.sbin/ppp/vars.c index 721bdc53f8b..207bc450d7e 100644 --- a/usr.sbin/ppp/vars.c +++ b/usr.sbin/ppp/vars.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: vars.c,v 1.45.2.25 1998/04/06 09:12:38 brian Exp $ + * $Id: vars.c,v 1.45.2.26 1998/04/07 00:54:24 brian Exp $ * */ #include @@ -78,9 +78,9 @@ ConfigCommand(struct cmdargs const *arg, int mine, int val) { int f; int err; - int narg = 0; + int narg = arg->argn; - if (arg->argc < 1) + if (arg->argc < narg+1) return -1; err = 0;