mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-24 17:44:17 +01:00
Fix some of my mistakes, slight cleanup, improve reliability (the old
ifconfig would segfault on "ifconfig ed0 ether up" and the like). The main reason for this commit was that an "ifconfig -a" would also show the AF_INET addresses in AF_IPX form (if the kernel was configured for IPX) due to insufficient AF checking in my "new way" of doing it.
This commit is contained in:
parent
b20235a04a
commit
79769a745d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=13329
@ -185,7 +185,7 @@ struct afswtch {
|
||||
SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) },
|
||||
{ "iso", AF_ISO, iso_status, iso_getaddr,
|
||||
SIOCDIFADDR_ISO, SIOCAIFADDR_ISO, C(iso_ridreq), C(iso_addreq) },
|
||||
/* { "ether", AF_INET, ether_status, NULL }, XXX - broken */
|
||||
{ "ether", AF_INET, ether_status, NULL },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
@ -424,6 +424,13 @@ ifconfig(argc,argv,af,rafp)
|
||||
if (setsockopt(s, 0, SO_NSIP_ROUTE, &rq, size) < 0)
|
||||
Perror("Encapsulation Routing");
|
||||
}
|
||||
if (clearaddr) {
|
||||
if (rafp->af_ridreq == NULL || rafp->af_difaddr == 0) {
|
||||
warnx("interface %s cannot change %s addresses!",
|
||||
name, rafp->af_name);
|
||||
clearaddr = NULL;
|
||||
}
|
||||
}
|
||||
if (clearaddr) {
|
||||
int ret;
|
||||
strncpy(rafp->af_ridreq, name, sizeof ifr.ifr_name);
|
||||
@ -434,6 +441,13 @@ ifconfig(argc,argv,af,rafp)
|
||||
Perror("ioctl (SIOCDIFADDR)");
|
||||
}
|
||||
}
|
||||
if (newaddr) {
|
||||
if (rafp->af_ridreq == NULL || rafp->af_difaddr == 0) {
|
||||
warnx("interface %s cannot change %s addresses!",
|
||||
name, rafp->af_name);
|
||||
newaddr = NULL;
|
||||
}
|
||||
}
|
||||
if (newaddr) {
|
||||
strncpy(rafp->af_addreq, name, sizeof ifr.ifr_name);
|
||||
if (ioctl(s, rafp->af_aifaddr, rafp->af_addreq) < 0)
|
||||
@ -583,6 +597,13 @@ status()
|
||||
printf(" mtu %d", mtu);
|
||||
putchar('\n');
|
||||
|
||||
/*
|
||||
* XXX: Sigh. This is bad, I know. At this point, we may have
|
||||
* *zero* RTM_NEWADDR's, so we have to "feel the water" before
|
||||
* incrementing the loop. One day, I might feel inspired enough
|
||||
* to get the top level loop to pass a count down here so we
|
||||
* dont have to mess with this. -Peter
|
||||
*/
|
||||
myifm = ifm;
|
||||
|
||||
while (1) {
|
||||
@ -610,13 +631,16 @@ status()
|
||||
|
||||
|
||||
if ((p = afp) != NULL) {
|
||||
(*p->af_status)(1);
|
||||
if (p->af_status != ether_status)
|
||||
(*p->af_status)(1);
|
||||
} else for (p = afs; p->af_name; p++) {
|
||||
ifr.ifr_addr.sa_family = p->af_af;
|
||||
(*p->af_status)(0);
|
||||
if (p->af_status != ether_status)
|
||||
(*p->af_status)(0);
|
||||
}
|
||||
}
|
||||
ether_status();
|
||||
if (afp == NULL || afp->af_status == ether_status)
|
||||
ether_status();
|
||||
}
|
||||
|
||||
in_status(force)
|
||||
@ -629,10 +653,10 @@ in_status(force)
|
||||
memset(&null_sin, 0, sizeof(null_sin));
|
||||
|
||||
sin = (struct sockaddr_in *)info.rti_info[RTAX_IFA];
|
||||
if (!sin) {
|
||||
if (!sin || sin->sin_family != AF_INET) {
|
||||
if (!force)
|
||||
return;
|
||||
warnx("%s has no AF_INET IFA address!", name);
|
||||
/* warnx("%s has no AF_INET IFA address!", name); */
|
||||
sin = &null_sin;
|
||||
}
|
||||
printf("\tinet %s ", inet_ntoa(sin->sin_addr));
|
||||
@ -676,10 +700,10 @@ ipx_status(force)
|
||||
memset(&null_sipx, 0, sizeof(null_sipx));
|
||||
|
||||
sipx = (struct sockaddr_ipx *)info.rti_info[RTAX_IFA];
|
||||
if (!sipx) {
|
||||
if (!sipx || sipx->sipx_family != AF_IPX) {
|
||||
if (!force)
|
||||
return;
|
||||
warnx("%s has no AF_IPX IFA address!", name);
|
||||
/* warnx("%s has no AF_IPX IFA address!", name); */
|
||||
sipx = &null_sipx;
|
||||
}
|
||||
printf("\tipx %s ", ipx_ntoa(sipx->sipx_addr));
|
||||
@ -710,10 +734,10 @@ xns_status(force)
|
||||
memset(&null_sns, 0, sizeof(null_sns));
|
||||
|
||||
sns = (struct sockaddr_ns *)info.rti_info[RTAX_IFA];
|
||||
if (!sns) {
|
||||
if (!sns || sns->sns_family != AF_NS) {
|
||||
if (!force)
|
||||
return;
|
||||
warnx("%s has no AF_NS IFA address!", name);
|
||||
/* warnx("%s has no AF_NS IFA address!", name); */
|
||||
sns = &null_sns;
|
||||
}
|
||||
printf("\tns %s ", ns_ntoa(sns->sns_addr));
|
||||
@ -745,10 +769,10 @@ iso_status(force)
|
||||
memset(&null_siso, 0, sizeof(null_siso));
|
||||
|
||||
siso = (struct sockaddr_iso *)info.rti_info[RTAX_IFA];
|
||||
if (!siso) {
|
||||
if (!siso || siso->siso_family != AF_ISO) {
|
||||
if (!force)
|
||||
return;
|
||||
warnx("%s has no AF_ISO IFA address!", name);
|
||||
/* warnx("%s has no AF_ISO IFA address!", name); */
|
||||
siso = &null_siso;
|
||||
}
|
||||
printf("\tiso %s ", iso_ntoa(&siso->siso_addr));
|
||||
|
Loading…
Reference in New Issue
Block a user