diff options
author | brian <brian@FreeBSD.org> | 1999-02-25 20:05:55 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-02-25 20:05:55 +0000 |
commit | 909314a3a7d15c37f170149208b7e71611ae2a35 (patch) | |
tree | afdc682e8f39824684da2407e9680b1c33720bb8 /usr.sbin/ppp/command.c | |
parent | a3fa9785d059a69334c6d4842a24d0e8300c8300 (diff) | |
download | FreeBSD-src-909314a3a7d15c37f170149208b7e71611ae2a35.zip FreeBSD-src-909314a3a7d15c37f170149208b7e71611ae2a35.tar.gz |
Parse IP addresses more securely - specifically, don't allow
a bum name to return as 0.0.0.0... we don't want ``delete xxx''
to delete the default route when xxx doesn't resolve.
Support IP number specifications as the host when specifying
a tcp-style device (rather than *just* hostnames).
Diffstat (limited to 'usr.sbin/ppp/command.c')
-rw-r--r-- | usr.sbin/ppp/command.c | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index 20a158d..91f43c33 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.181 1999/02/16 00:16:55 brian Exp $ + * $Id: command.c,v 1.182 1999/02/18 00:52:12 brian Exp $ * */ #include <sys/param.h> @@ -141,7 +141,7 @@ #define NEG_DNS 52 const char Version[] = "2.11"; -const char VersionDate[] = "$Date: 1999/02/16 00:16:55 $"; +const char VersionDate[] = "$Date: 1999/02/18 00:52:12 $"; static int ShowCommand(struct cmdargs const *); static int TerminalCommand(struct cmdargs const *); @@ -1271,22 +1271,6 @@ SetEscape(struct cmdargs const *arg) return 0; } -static struct in_addr -GetIpAddr(const char *cp) -{ - struct hostent *hp; - struct in_addr ipaddr; - - if (inet_aton(cp, &ipaddr) == 0) { - hp = gethostbyname(cp); - if (hp && hp->h_addrtype == AF_INET) - memcpy(&ipaddr, hp->h_addr, hp->h_length); - else - ipaddr.s_addr = 0; - } - return (ipaddr); -} - static int SetInterfaceAddr(struct cmdargs const *arg) { @@ -1941,10 +1925,11 @@ DeleteCommand(struct cmdargs const *arg) dest = arg->bundle->ncp.ipcp.peer_ip; addrs = ROUTE_DSTHISADDR; } else { - if (strcasecmp(arg->argv[arg->argn], "default") == 0) - dest.s_addr = INADDR_ANY; - else - dest = GetIpAddr(arg->argv[arg->argn]); + dest = GetIpAddr(arg->argv[arg->argn]); + if (dest.s_addr == INADDR_NONE) { + log_Printf(LogWARN, "%s: Invalid IP address\n", arg->argv[arg->argn]); + return -1; + } addrs = ROUTE_STATIC; } none.s_addr = INADDR_ANY; |