Age | Commit message (Collapse) | Author |
|
state S_PREBOOT and associated state_preboot() function.
This results in routing socket messages being processed even while
the link is being waited for. Thus the RTM_IFINFO message announcing
the link is ready can be reacted to immediately, rather than waiting
for the sleep(1)'ing process to wake up and look at the link state.
Some interfaces seem to lose the first packet sent when the RTM_IFINFO
message is reacted to so quickly, so temporarily leave in place an
explicit delay before sending the first packet.
|
|
if_register_receive.
|
|
construction of default client identifier until link is up (i.e.
do it in state_reboot()).
|
|
relying on S_REBOOTING being 0.
|
|
the validity of the interface name as soon the actual name is known.
i.e. right after 'egress' is expanded. One less thing for
get_hw_address() to do.
|
|
incrementing sporadic errors until the limit is exceeded. i.e. only
exit dhclient when enough consecutive errors occur. Tweak error
messages.
Don't bother checking interface_status() when receive_packet()
fails. Let other status checks function on their own.
|
|
exits, so there is no need to constantly check if 'ifi' is NULL.
Similarly 'ifi->bfdesc' is successfully opened during initialization
or dhclient exits, so there is no point in constantly checking if
it has regressed to -1. Finally, no need to check 'ifi->linkstat'
before trying to read a packet. If there is a packet it should just
as well be read immediately rather than waiting for the link to
reappear and confuse things.
No intentional functional change.
|
|
|
|
info provided in RTM_IFINFO messages. But it didn't replicate the
checks for IFI_NOMEDIA and (IFF_UP | IFF_RUNNING) used in
interface_status() to set ifi->linkstat. So the test (LINK_STATE_IS_UP()
!= ifi->linkstat) was comparing kiwi fruit and hairballs.
Do the additional checks using info present in the RTM_IFINFO
message. As a result interface_status() need not be called to
update ifi->linkstat. Thus avoiding opening/closing a socket and
some ioctls to re-obtain the info already provided in the RTM_IFINFO
message.
Using RTM_IFINFO data ok mpi@
|
|
Hoist one-time initialization of client identifier out of
get_hw_address() to the one-time initialization code in main().
No intentional functional change.
|
|
the two copies of the bpf socket descriptor (rfdesc, wfdesc) with
just one (bfdesc). No need to keep a struct ifreq (ifp) since it's
only used once and can be constructed there and discarded. Nuke
unused 'primary_address' member.
No intentional functional change.
|
|
before filling it in with read_client_conf(). Fixes seg fault when
lease {} statement is used.
Problem reported by Alessandro de Laurenzis via misc@. Thanks!
|
|
the priv child but before getting hardware link. Reducing further the
possibly inappropriate information the priv child could read.
|
|
after forking the privileged process, which should not be reading
those bits. No intentional functional change.
|
|
error print statement.
|
|
|
|
this" tests at the top of the dispatch loop. Use a 'continue' instead
of 'goto <label just after the while>'. No intended functional change.
|
|
by and ok guenther@.
|
|
mismatched.
|
|
that might be in the client->leases TAILQ. So don't traverse said
TAILQ in free_client_lease() trying see if the lease should be
TAILQ_REMOVE()'d. Instead use TAILQ_REMOVE() in the two places (one
of which is dubious) where it might be relevant. Be careful not to
TAILQ_REMOVE() a static lease.
|
|
to create the socketpair() with non-blocking and close-on-exec set.
ok krw@
|
|
lease supersedes an earlier one.
|
|
leases. It will be ignored, so let the normal cleanup in bind_lease()
take care of it.
|
|
|
|
|
|
|
|
is before rebind is before expiry. Don't allow lease expiry to be
set past the end of time, but do allow lease lengths >INT32_MAX.
Tweak default times to be more reliably in-line with RFCs.
Nuke getULong(), the last function in convert.c, since its last
uses were in this now re-written code.
Suspicions aroused while diagnosing the expiry problem weerd@ found.
|
|
variable and memcpy() that value into 4 bytes of malloc()'d space
seems roundabout.
Just memcpy() a four byte constant string into the malloc()'d space
as required and kill putULong(). No functional change.
|
|
|
|
ntoh[ls]()) obscure rather than simplify things. Especially when
they are used only once. Just use the expansion.
|
|
an IPv4 address. Just memcpy() it.
|
|
|
|
fault when it tries to get a new one.
Problem spotted by weerd@
|
|
ok millert@
|
|
its value with the body of the if. No functional change.
'increase' was orphaned when r1.139 eliminated support for 'medium'
statements in dhclient.conf.
Stumbled over while looking into a problem for weerd@.
|
|
If the classless-static-routes option specifies the router IP address
as 0.0.0.0, then that indicates the route is a "local subnet route"
that should be directly routable via the interface. This reuses the
"route add -net $dest -netmask $mask -cloning -iface $addr" trick
suggested by claudio@ for r1.272.
Restores interoperability with Google Compute Engine after recent GCE
DHCP server changes.
ok krw, mpi
|
|
ok krw@
|
|
halex@ and krw@ pointed out that a NULL check before free can go, too.
ok deraadt@, halex@, krw@
|
|
Fix very hard to reach DoS attack vector, which would involve more than
8 billion network packets. Mixture of many many malformed and proper
packets could result in a division by zero.
ok krw@
|
|
allocation failure; ok krw@
|
|
tight renew loop. Caused by recent reshuffling of code in
bind_lease().
|
|
investigators some clue why dhclient may have gotten confused when
some RTM_ messages vanish.
sthen@ thinks this is a good start.
|
|
|
|
reducing resolv.conf writing.
|
|
manipulation starts. Thus making it more likely the correct resolv.conf
gets written.
|
|
and we become responsible for the interface. Don't write out a new
resolv.conf when our address has been deleted and we are no longer
responsible for the interface. Less writing is more better.
|
|
|
|
DHO_CLASSLESS_MS_STATIC_ROUTES. Remove 'C' (CIDR) pretty printing
outside of those special cases. Add a bunch of paranoia to protect
against confused/malicious dhcp servers.
Since 'C' is a variable size element it can't be handled by the
existing code, which is designed for fixed size elements.
Issue found by Someya Yuuichi, reported by yasuoka@ who also provided
the first diff.
ok yasuoka@
|
|
when it is set, and the current setlogmask(LOG_UPTO(LOG_INFO)) when it
is not set.
|
|
more obscurity than clarity. Nuke DHCPD_LOG_FACILITY and just use
LOG_DAEMON in openlog() call.
|