diff options
author | imp <imp@FreeBSD.org> | 1998-06-09 05:01:38 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1998-06-09 05:01:38 +0000 |
commit | 87738602a9bddfd717b3fb188735bbd8b570eee0 (patch) | |
tree | 4568fb7b07382b20c9ba6659855622c58fc6859d /usr.sbin/mrouted/mapper.c | |
parent | d07721cd78a2f86312bc422b1f5bedde80d5aedb (diff) | |
download | FreeBSD-src-87738602a9bddfd717b3fb188735bbd8b570eee0.zip FreeBSD-src-87738602a9bddfd717b3fb188735bbd8b570eee0.tar.gz |
use strncpy correctly
use strncat correctly
check buffer size in graph_name
Change paths from /tmp to /var/run for server sockets
This has been building in my tree for ages, but has remained lightly
tested.
Reviewed by: jkh ages ago
Diffstat (limited to 'usr.sbin/mrouted/mapper.c')
-rw-r--r-- | usr.sbin/mrouted/mapper.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/usr.sbin/mrouted/mapper.c b/usr.sbin/mrouted/mapper.c index 10fffb7..e440bbc 100644 --- a/usr.sbin/mrouted/mapper.c +++ b/usr.sbin/mrouted/mapper.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "$Id$"; + "$Id: mapper.c,v 1.12 1998/01/16 07:17:43 charnier Exp $"; #endif /* not lint */ #include <err.h> @@ -87,7 +87,7 @@ void ask2 __P((u_int32 dst)); int retry_requests __P((Node *node)); char * inet_name __P((u_int32 addr)); void print_map __P((Node *node)); -char * graph_name __P((u_int32 addr, char *buf)); +char * graph_name __P((u_int32 addr, char *buf, int len)); void graph_edges __P((Node *node)); void elide_aliases __P((Node *node)); void graph_map __P((void)); @@ -192,8 +192,9 @@ log(severity, syserr, format, va_alist) default: fmt[0] = '\0'; if (severity == LOG_WARNING) - strcat(fmt, "warning - "); - strncat(fmt, format, 80); + strcpy(fmt, "warning - "); + strncat(fmt, format, sizeof(fmt)-strlen(fmt)); + fmt[sizeof(fmt)-1]='\0'; vfprintf(stderr, fmt, ap); if (syserr == 0) fprintf(stderr, "\n"); @@ -703,15 +704,23 @@ void print_map(node) } -char *graph_name(addr, buf) +char *graph_name(addr, buf, len) u_int32 addr; char *buf; + int len; { char *name; - if (show_names && (name = inet_name(addr))) - strcpy(buf, name); - else + if (len < sizeof("255.255.255.255")) { + fprintf(stderr, +"Buffer too small in graph_name, provided %d bytes, but needed %d.\n", + len, sizeof("255.255.255.255")); + return NULL; + } + if (show_names && (name = inet_name(addr))) { + strncpy(buf, name, len - 1); + buf[len - 1] = '\0'; + } else inet_fmt(addr, buf); return buf; @@ -731,7 +740,7 @@ void graph_edges(node) printf(" %d {$ NP %d0 %d0 $} \"%s%s\" \n", (int) node->addr, node->addr & 0xFF, (node->addr >> 8) & 0xFF, - graph_name(node->addr, name), + graph_name(node->addr, name, sizeof(name)), node->u.interfaces ? "" : "*"); for (ifc = node->u.interfaces; ifc; ifc = ifc->next) for (nb = ifc->neighbors; nb; nb = nb->next) { |