summaryrefslogtreecommitdiffstats
path: root/freebsd/sbin/ping/ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sbin/ping/ping.c')
-rw-r--r--freebsd/sbin/ping/ping.c103
1 files changed, 47 insertions, 56 deletions
diff --git a/freebsd/sbin/ping/ping.c b/freebsd/sbin/ping/ping.c
index 376564b7..74cc2fbb 100644
--- a/freebsd/sbin/ping/ping.c
+++ b/freebsd/sbin/ping/ping.c
@@ -305,7 +305,8 @@ main(int argc, char *const *argv)
#endif
struct sockaddr_in *to;
double t;
- u_long alarmtimeout, ultmp;
+ u_long alarmtimeout;
+ long ltmp;
int almost_done, ch, df, hold, i, icmp_len, mib[4], preload;
int ssend_errno, srecv_errno, tos, ttl;
char ctrl[CMSG_SPACE(sizeof(struct timeval))];
@@ -385,12 +386,12 @@ main(int argc, char *const *argv)
options |= F_AUDIBLE;
break;
case 'c':
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp > LONG_MAX || !ultmp)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp > LONG_MAX || ltmp <=0)
errx(EX_USAGE,
"invalid count of packets to transmit: `%s'",
optarg);
- npackets = ultmp;
+ npackets = ltmp;
break;
case 'D':
options |= F_HDRINCL;
@@ -408,46 +409,46 @@ main(int argc, char *const *argv)
setbuf(stdout, (char *)NULL);
break;
case 'G': /* Maximum packet size for ping sweep */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp <= 0)
errx(EX_USAGE, "invalid packet size: `%s'",
optarg);
- if (uid != 0 && ultmp > DEFDATALEN) {
+ if (uid != 0 && ltmp > DEFDATALEN) {
errno = EPERM;
err(EX_NOPERM,
- "packet size too large: %lu > %u",
- ultmp, DEFDATALEN);
+ "packet size too large: %ld > %u",
+ ltmp, DEFDATALEN);
}
options |= F_SWEEP;
- sweepmax = ultmp;
+ sweepmax = ltmp;
break;
case 'g': /* Minimum packet size for ping sweep */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp <= 0)
errx(EX_USAGE, "invalid packet size: `%s'",
optarg);
- if (uid != 0 && ultmp > DEFDATALEN) {
+ if (uid != 0 && ltmp > DEFDATALEN) {
errno = EPERM;
err(EX_NOPERM,
- "packet size too large: %lu > %u",
- ultmp, DEFDATALEN);
+ "packet size too large: %ld > %u",
+ ltmp, DEFDATALEN);
}
options |= F_SWEEP;
- sweepmin = ultmp;
+ sweepmin = ltmp;
break;
case 'h': /* Packet size increment for ping sweep */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp < 1)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp < 1)
errx(EX_USAGE, "invalid increment size: `%s'",
optarg);
- if (uid != 0 && ultmp > DEFDATALEN) {
+ if (uid != 0 && ltmp > DEFDATALEN) {
errno = EPERM;
err(EX_NOPERM,
- "packet size too large: %lu > %u",
- ultmp, DEFDATALEN);
+ "packet size too large: %ld > %u",
+ ltmp, DEFDATALEN);
}
options |= F_SWEEP;
- sweepincr = ultmp;
+ sweepincr = ltmp;
break;
case 'I': /* multicast interface */
if (inet_aton(optarg, &ifaddr) == 0)
@@ -473,15 +474,15 @@ main(int argc, char *const *argv)
loop = 0;
break;
case 'l':
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp > INT_MAX)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp > INT_MAX || ltmp < 0)
errx(EX_USAGE,
"invalid preload value: `%s'", optarg);
if (uid) {
errno = EPERM;
err(EX_NOPERM, "-l flag");
}
- preload = ultmp;
+ preload = ltmp;
break;
case 'M':
switch(optarg[0]) {
@@ -499,10 +500,10 @@ main(int argc, char *const *argv)
}
break;
case 'm': /* TTL */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp > MAXTTL)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp > MAXTTL || ltmp < 0)
errx(EX_USAGE, "invalid TTL: `%s'", optarg);
- ttl = ultmp;
+ ttl = ltmp;
options |= F_TTL;
break;
case 'n':
@@ -544,24 +545,24 @@ main(int argc, char *const *argv)
source = optarg;
break;
case 's': /* size of packet to send */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp < 0)
errx(EX_USAGE, "invalid packet size: `%s'",
optarg);
- if (uid != 0 && ultmp > DEFDATALEN) {
+ if (uid != 0 && ltmp > DEFDATALEN) {
errno = EPERM;
err(EX_NOPERM,
- "packet size too large: %lu > %u",
- ultmp, DEFDATALEN);
+ "packet size too large: %ld > %u",
+ ltmp, DEFDATALEN);
}
- datalen = ultmp;
+ datalen = ltmp;
break;
case 'T': /* multicast TTL */
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp > MAXTTL)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp > MAXTTL || ltmp < 0)
errx(EX_USAGE, "invalid multicast TTL: `%s'",
optarg);
- mttl = ultmp;
+ mttl = ltmp;
options |= F_MTTL;
break;
case 't':
@@ -587,10 +588,10 @@ main(int argc, char *const *argv)
break;
case 'z':
options |= F_HDRINCL;
- ultmp = strtoul(optarg, &ep, 0);
- if (*ep || ep == optarg || ultmp > MAXTOS)
+ ltmp = strtol(optarg, &ep, 0);
+ if (*ep || ep == optarg || ltmp > MAXTOS || ltmp < 0)
errx(EX_USAGE, "invalid TOS: `%s'", optarg);
- tos = ultmp;
+ tos = ltmp;
break;
default:
usage();
@@ -642,11 +643,7 @@ main(int argc, char *const *argv)
if (inet_aton(source, &sock_in.sin_addr) != 0) {
shostname = source;
} else {
- if (capdns != NULL)
- hp = cap_gethostbyname2(capdns, source,
- AF_INET);
- else
- hp = gethostbyname2(source, AF_INET);
+ hp = cap_gethostbyname2(capdns, source, AF_INET);
if (!hp)
errx(EX_NOHOST, "cannot resolve %s: %s",
source, hstrerror(h_errno));
@@ -674,10 +671,7 @@ main(int argc, char *const *argv)
if (inet_aton(target, &to->sin_addr) != 0) {
hostname = target;
} else {
- if (capdns != NULL)
- hp = cap_gethostbyname2(capdns, target, AF_INET);
- else
- hp = gethostbyname2(target, AF_INET);
+ hp = cap_gethostbyname2(capdns, target, AF_INET);
if (!hp)
errx(EX_NOHOST, "cannot resolve %s: %s",
target, hstrerror(h_errno));
@@ -695,7 +689,7 @@ main(int argc, char *const *argv)
if (capdns != NULL) {
const char *types[1];
- types[0] = "ADDR";
+ types[0] = "ADDR2NAME";
if (cap_dns_type_limit(capdns, types, 1) < 0)
err(1, "unable to limit access to system.dns service");
}
@@ -1789,10 +1783,7 @@ pr_addr(struct in_addr ina)
if (options & F_NUMERIC)
return inet_ntoa(ina);
- if (capdns != NULL)
- hp = cap_gethostbyaddr(capdns, (char *)&ina, 4, AF_INET);
- else
- hp = gethostbyaddr((char *)&ina, 4, AF_INET);
+ hp = cap_gethostbyaddr(capdns, (char *)&ina, 4, AF_INET);
if (hp == NULL)
return inet_ntoa(ina);
@@ -1887,8 +1878,8 @@ capdns_setup(void)
cap_close(capcas);
if (capdnsloc == NULL)
err(1, "unable to open system.dns service");
- types[0] = "NAME";
- types[1] = "ADDR";
+ types[0] = "NAME2ADDR";
+ types[1] = "ADDR2NAME";
if (cap_dns_type_limit(capdnsloc, types, 2) < 0)
err(1, "unable to limit access to system.dns service");
families[0] = AF_INET;