Date: Wed, 13 Nov 1996 22:06:59 -0500 From: adrian@virginia.edu To: FreeBSD-gnats-submit@freebsd.org Subject: bin/2005: patch for dig Message-ID: <199611140306.WAA13138@celt.neuro.virginia.edu> Resent-Message-ID: <199611140350.TAA09821@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2005 >Category: bin >Synopsis: Poor command line argument checking and bad "ping" arguments. >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Nov 13 19:50:03 PST 1996 >Last-Modified: >Originator: Adrian Filipi-Martin >Organization: University of Virginia >Release: FreeBSD 2.1.5-RELEASE i386 >Environment: >Description: The /usr/bin/dig program does not check that arguments are present for command line flags that require them. It also passes incompatible flags to the ping command when the -P option is used. The documentation also reflects this last problem. How-To-Repeat: : adrian@lorax; dig -p Segmentation fault (core dumped) : adrian@lorax; dig -P localhost ; <<>> DiG 2.1 <<>> -P localhost ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 6 ;; flags: qr aa rd ra; Ques: 1, Ans: 0, Auth: 1, Addit: 0 ;; QUESTIONS: ;; localhost, type = A, class = IN ;; AUTHORITY RECORDS: . 86400 SOA A.ROOT-SERVERS.NET. hostmaster.INTERNIC.NET. ( 1996111100 ; serial 10800 ; refresh (3 hours) 900 ; retry (15 mins) 604800 ; expire (7 days) 86400 ) ; minimum (1 day) ;; Total query time: 99 msec ;; FROM: lorax.neuro.virginia.edu to SERVER: default -- 128.143.2.7 ;; WHEN: Wed Nov 13 21:48:29 1996 ;; MSG SIZE sent: 27 rcvd: 100 usage: ping [-Rdfnqrv] [-c count] [-i wait] [-l preload] [-p pattern] [-s packetsize] host : adrian@lorax; >How-To-Repeat: >Fix: Apply the following _two_ patches: <<<<<<<<<<<-----cut--here---for---dig.c.patch----- *** dig.c.orig Wed Aug 30 00:06:06 1995 --- dig.c Wed Nov 13 22:15:34 1996 *************** *** 409,418 **** if (**argv == '-') { switch (argv[0][1]) { ! case 'T': wait = atoi(*++argv); break; case 'c': ! if ((tmp = atoi(*++argv)) || *argv[0]=='0') { queryClass = tmp; } else if (tmp = StringToClass(*argv, --- 409,427 ---- if (**argv == '-') { switch (argv[0][1]) { ! case 'T': ! if (*++argv == 0) { ! Usage(); ! exit(1); ! } ! wait = atoi(*argv); break; case 'c': ! if (*++argv == 0) { ! Usage(); ! exit(1); ! } ! if ((tmp = atoi(*argv)) || *argv[0]=='0') { queryClass = tmp; } else if (tmp = StringToClass(*argv, *************** *** 426,432 **** } break; case 't': ! if ((tmp = atoi(*++argv)) || *argv[0]=='0') { queryType = tmp; qtypeSet++; --- 435,445 ---- } break; case 't': ! if (*++argv == 0) { ! Usage(); ! exit(1); ! } ! if ((tmp = atoi(*argv)) || *argv[0]=='0') { queryType = tmp; qtypeSet++; *************** *** 447,456 **** qtypeSet++; } if (!(addrc = *++argv)) { ! printf( ! "; no arg for -x?\n" ! ); ! break; } addrend = addrc + strlen(addrc); if (*addrend == '.') --- 460,467 ---- qtypeSet++; } if (!(addrc = *++argv)) { ! Usage(); ! exit(1); } addrend = addrc + strlen(addrc); if (*addrend == '.') *************** *** 464,475 **** strcat(domain, addrc); strcat(domain, ".in-addr.arpa."); break; ! case 'p': port = htons(atoi(*++argv)); break; case 'P': if (argv[0][2] != '\0') strcpy(pingstr,&argv[0][2]); else strcpy(pingstr,"ping -s"); break; #if defined(__RES) && (__RES >= 19931104) case 'n': --- 475,495 ---- strcat(domain, addrc); strcat(domain, ".in-addr.arpa."); break; ! case 'p': ! if (*++argv == 0) { ! Usage(); ! exit(1); ! } ! port = htons(atoi(*argv)); break; case 'P': if (argv[0][2] != '\0') strcpy(pingstr,&argv[0][2]); else + #if defined(__FreeBSD__) + strcpy(pingstr,"ping"); + #else strcpy(pingstr,"ping -s"); + #endif /*__FreeBSD__*/ break; #if defined(__RES) && (__RES >= 19931104) case 'n': *************** *** 689,696 **** --- 709,721 ---- * Would necessitate root priviledges for icmp port though! */ if (*pingstr) { + #if defined(__FreeBSD__) + sprintf(doping,"%s -s 56 -c 3 %s | tail -3",pingstr, + (srv==NULL)?(defsrv+10):srv); + #else sprintf(doping,"%s %s 56 3 | tail -3",pingstr, (srv==NULL)?(defsrv+10):srv); + #endif /*__FreeBSD__*/ system(doping); } putchar('\n'); <<<<<<<<<<<-----cut--here---for---dig.1.patch----- *** dig.1.orig Wed Nov 13 22:21:35 1996 --- dig.1 Wed Nov 13 22:19:51 1996 *************** *** 195,204 **** three lines of statistics is printed for the command: .sp 1 ! ping \-s server_name 56 3 .sp 1 If the optional "ping string" is present, it ! replaces "ping \-s" in the shell command. .IP "\-t \fIquery-type\fP" Specify type of query. May specify either an integer value to be included in the type field --- 195,204 ---- three lines of statistics is printed for the command: .sp 1 ! ping \-s 56 \-c 3 server_name .sp 1 If the optional "ping string" is present, it ! replaces "ping" in the shell command. .IP "\-t \fIquery-type\fP" Specify type of query. May specify either an integer value to be included in the type field >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611140306.WAA13138>