diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-12-04 00:22:35 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-12-04 00:22:35 +0000 |
commit | a64909a2d7f7ce668a1531fa33db963234985274 (patch) | |
tree | 9bd6170d4ad5bb0f31f2de1873d7e3109430bf19 | |
parent | 5ea16bbb3a422a9ca207322a33a736a11138b96f (diff) |
avoid overflow
-rw-r--r-- | usr.sbin/named/dnsquery/dnsquery.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/usr.sbin/named/dnsquery/dnsquery.c b/usr.sbin/named/dnsquery/dnsquery.c index 4a8e42bf0ec..7a61479940a 100644 --- a/usr.sbin/named/dnsquery/dnsquery.c +++ b/usr.sbin/named/dnsquery/dnsquery.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dnsquery.c,v 1.3 1997/03/12 10:41:49 downsj Exp $ */ +/* $OpenBSD: dnsquery.c,v 1.4 1999/12/04 00:22:34 deraadt Exp $ */ #include <stdio.h> #include <sys/types.h> @@ -53,7 +53,12 @@ char *argv[]; case 'p' : _res.retrans = atoi(optarg); break; - case 'h' : strcpy(name, optarg); + case 'h' : if (strlen(optarg) > sizeof(name)-1) { + fprintf(stderr, + "Domain name too long (%s)\n", optarg); + exit(-1); + } + strlcpy(name, optarg, sizeof name); break; case 'c' : { @@ -130,8 +135,14 @@ char *argv[]; exit(-1); } } - if (optind < argc) - strcpy(name, argv[optind]); + if (optind < argc) { + if (strlen(argv[optind]) > sizeof(name)-1) { + fprintf(stderr, + "Domain name too long (%s)\n", argv[optind]); + exit(-1); + } + strlcpy(name, argv[optind], sizeof name); + } len = sizeof(answer); |