Age | Commit message (Collapse) | Author |
|
but better safe than sorry.
Noted and diff from Benjamin Baier. Thanks!
|
|
not 'malloc'.
|
|
possible. Annotate <sys/param.h> lines with their current reasons. Switch
to PATH_MAX, NGROUPS_MAX, HOST_NAME_MAX+1, LOGIN_NAME_MAX, etc. Change
MIN() and MAX() to local definitions of MINIMUM() and MAXIMUM() where
sensible to avoid pulling in the pollution. These are the files confirmed
through binary verification.
ok guenther, millert, doug (helped with the verification protocol)
|
|
be clever, but it is definitely confusing. Use a flag IFI_VALID_LLADDR
to indicate that the ifi->hw_address field is valid, rather than
assuming ifi->linkstat does that. Add startup_time to record client
startup rather than using first_sending and hoping nobody else needs
it until link is complete.
|
|
latest information. So back off to using interface_status() to
directly query the interface when link status is in question. Partly
from Nathanael Rensen's original diff.
Also, while waiting for initial link, keep checking every second
rather than backing off to checking every (default) 60 seconds after
(default) 10 seconds.
|
|
the routing socket initialization. Otherwise certain combinations
of UP/RUNNING/active will generate the deadly RTM_IFINFO with RTF_UP
== 0 and kill the client. Add comment to nail this section in place.
|
|
link comes up and nothing has yet been displayed.
|
|
has expired. In S_REBOOT state_reboot() assumes link is present and
starts sending REQUEST/DISCOVER packets and doing the backoff dance
after retry_interval expires. Stay in S_PREBOOT until link appears.
Pointed out by and initial diff from Nathanael Rensen.
|
|
noted as being up. Thus avoiding a premature exit if extra RTM_IFINFO
messages arrive before state_reboot() gets a chance to run.
|
|
some interfaces (e.g. em(4) in qemu) do not have this flag set in
the RTM_IFINFO message dhclient gets.
Problem found & fix tested by Nathanael Rensen. Thanks!
|
|
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@
|