mirror of
https://github.com/opnsense/src.git
synced 2026-04-01 23:45:12 -04:00
The logic in get_myaddress() is broken: it always returns the loopback
address due to the following rule:
if ((ifreq.ifr_flags & IFF_UP) &&
ifr->ifr_addr.sa_family == AF_INET &&
(loopback == 1 && (ifreq.ifr_flags & IFF_LOOPBACK))) {
The idea is that we want to select the interface address only if it's
up and it's in the AF_INET family. If it turns uout we don't have
such an interface available, we make a second pass through the loop,
this time settling for the loopback interface. But the logic inadvertently
locks out all cases when loopback == 0, so nothing is ever selected until
the second pass (when loopback == 1).
This is changed to:
if (((ifreq.ifr_flags & IFF_UP) &&
ifr->ifr_addr.sa_family == AF_INET) ||
(loopback == 1 && (ifreq.ifr_flags & IFF_LOOPBACK))) {
which I think does the right thing.
This is yet another bogon I discovered during NIS+ testing; I need
get_myaddress() to work correctly so that the callback code in the
client library will work.
|
||
|---|---|---|
| .. | ||
| amd64 | ||
| compat-43 | ||
| db | ||
| gen | ||
| gmon | ||
| i386 | ||
| locale | ||
| net | ||
| nls | ||
| quad | ||
| regex | ||
| rpc | ||
| stdio | ||
| stdlib | ||
| stdtime | ||
| string | ||
| sys | ||
| xdr | ||
| yp | ||
| Makefile | ||
| Makefile.inc | ||