diff options
| author | Bill Fenner <fenner@FreeBSD.org> | 1996-10-27 17:50:49 +0000 |
|---|---|---|
| committer | Bill Fenner <fenner@FreeBSD.org> | 1996-10-27 17:50:49 +0000 |
| commit | 6773ede3bd31f5c37a43b8eee288423d82a5ba4d (patch) | |
| tree | 995ea11a4761cd782998878d6109c253982baf39 /sbin | |
| parent | 334e2320d8d9be7edfb81527484d5535dc1a3cb9 (diff) | |
Notes
Diffstat (limited to 'sbin')
| -rw-r--r-- | sbin/route/route.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/sbin/route/route.c b/sbin/route/route.c index 469c8a39b60a..7acbc8c99cf3 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -39,7 +39,11 @@ static char copyright[] = #endif /* not lint */ #ifndef lint +/* static char sccsid[] = "@(#)route.c 8.3 (Berkeley) 3/19/94"; +*/ +static const char rcsid[] = + "$Id: $"; #endif /* not lint */ #include <sys/param.h> @@ -173,6 +177,7 @@ main(argc, argv) s = socket(PF_ROUTE, SOCK_RAW, 0); if (s < 0) quit("socket"); + setuid(uid); if (*argv) switch (keyword(*argv)) { case K_GET: @@ -303,7 +308,7 @@ routename(sa) struct sockaddr *sa; { register char *cp; - static char line[50]; + static char line[MAXHOSTNAMELEN + 1]; struct hostent *hp; static char domain[MAXHOSTNAMELEN + 1]; static int first = 1; @@ -312,9 +317,10 @@ routename(sa) if (first) { first = 0; if (gethostname(domain, MAXHOSTNAMELEN) == 0 && - (cp = index(domain, '.'))) + (cp = index(domain, '.'))) { + domain[MAXHOSTNAMELEN] = '\0'; (void) strcpy(domain, cp + 1); - else + } else domain[0] = 0; } @@ -340,7 +346,7 @@ routename(sa) } } if (cp) - strcpy(line, cp); + strncpy(line, cp, sizeof line); else { #define C(x) ((x) & 0xff) in.s_addr = ntohl(in.s_addr); @@ -357,7 +363,7 @@ routename(sa) return (link_ntoa((struct sockaddr_dl *)sa)); case AF_ISO: - (void) sprintf(line, "iso %s", + (void) snprintf(line, sizeof line, "iso %s", iso_ntoa(&((struct sockaddr_iso *)sa)->siso_addr)); break; @@ -365,9 +371,10 @@ routename(sa) { u_short *s = (u_short *)sa; u_short *slim = s + ((sa->sa_len + 1) >> 1); char *cp = line + sprintf(line, "(%d)", sa->sa_family); + char *cpe = line + sizeof(line); - while (++s < slim) /* start with sa->sa_data */ - cp += sprintf(cp, " %x", *s); + while (++s < slim && cp < cpe) /* start with sa->sa_data */ + cp += snprintf(cp, cpe - cp, " %x", *s); break; } } @@ -383,7 +390,7 @@ netname(sa) struct sockaddr *sa; { char *cp = 0; - static char line[50]; + static char line[MAXHOSTNAMELEN + 1]; struct netent *np = 0; u_long net, mask; register u_long i; @@ -426,7 +433,7 @@ netname(sa) cp = np->n_name; } if (cp) - strcpy(line, cp); + strncpy(line, cp, sizeof(line)); else if ((in.s_addr & 0xffffff) == 0) (void) sprintf(line, "%u", C(in.s_addr >> 24)); else if ((in.s_addr & 0xffff) == 0) @@ -450,7 +457,7 @@ netname(sa) return (link_ntoa((struct sockaddr_dl *)sa)); case AF_ISO: - (void) sprintf(line, "iso %s", + (void) snprintf(line, sizeof(line), "iso %s", iso_ntoa(&((struct sockaddr_iso *)sa)->siso_addr)); break; @@ -458,9 +465,10 @@ netname(sa) { u_short *s = (u_short *)sa->sa_data; u_short *slim = s + ((sa->sa_len + 1)>>1); char *cp = line + sprintf(line, "af %d:", sa->sa_family); + char *cpe = line + sizeof(line); - while (s < slim) - cp += sprintf(cp, " %x", *s++); + while (s < slim && cp < cpe) + cp += snprintf(cp, cpe - cp, " %x", *s++); break; } } @@ -860,7 +868,8 @@ getaddr(which, s, hpp) } } if ((val = inet_network(s)) != -1 || - ((np = getnetbyname(s)) != NULL && (val = np->n_net) != 0)) { + (forcehost == 0 && (np = getnetbyname(s)) != NULL && + (val = np->n_net) != 0)) { netdone: if (which == RTA_DST) inet_makenetandmask(val, &su->sin); |
