summaryrefslogtreecommitdiff
path: root/sbin/dhclient
AgeCommit message (Collapse)Author
2015-05-18Tweak parsing so that hostnames starting with 0-9 are accepted.Kenneth R Westerback
Reported long ago by matthieu@. Also Jacob Berkman via the lists. Tests and suggestions from Jacob and Matthieu.
2015-05-18Stop rejecting leases with a subnet that overlaps a subnet alreadyKenneth R Westerback
present. The latest routing stack code can now handle these situations. Much requested by beck@ and others. Detailed discussion at s2k15 identified required routing changes. ok claudio@
2015-05-02Hoist common assignments out of a series of if/if-else statementsKenneth R Westerback
in get_token(). Simplifies code and shrinks future diff. No intentional functional change.
2015-05-02Correct switch between current and previous line buffers whenKenneth R Westerback
encountering a carriage return in the input. Found by jsg@ a long time ago in a respository far, far away.
2015-04-16Tweak error output.Gleydson Soares
ok krw@
2015-02-15convert bcmp to memcmpTed Unangst
ok doug millert miod
2015-02-10Groundwork for better route support over multiple interfaces byKenneth R Westerback
using RTM_IFA to bind routes to an interface. Keep the subnet route conflict avoidance code for the time being. diff from claudio@ as part of larger routing magic diff. ok claudio@ mpi@
2015-02-08Get rid of a bunch of memset()'s where struct variables and arraysKenneth R Westerback
are clearly properly initialized in the same area. Prompted by the recent shrinkage of most imsg structs.
2015-02-07Add support for interface-mtu (option 26).Kenneth R Westerback
Original request+diff from matthew@ ok dlg@
2015-02-07GC unused parameters now that ifname and rdomain are not used inKenneth R Westerback
constructing imsgs. ok reyk@
2015-02-06The write_file() privsep interface was too permissive andReyk Floeter
theoretically allowed the unprivileged child process to write to arbitrary files. Restrict it by replacing it with two specific write_resolv_conf() and write_option_db() privsep interfaces where all the critical decision has been moved to the parent. OK krw@
2015-02-06matthew@ points out that it's a bad idea to rely on the non-privileged,Kenneth R Westerback
network-facing process to properly fill out the interface name and rdomain on which operations are to be performed. Instead, always use the interface name and rdomain discovered before forking and dropping privs. Lets all the imsg structs to drop a couple of members. ok matthew@ henning@
2015-02-06Don't let errors leak the memory returned by getifaddrs().Kenneth R Westerback
2015-02-05Use sizeof(struct X) rather than sizeof(*p) in calloc() invocations.Kenneth R Westerback
History indicates this is slightly less error prone. Inconsistant usage pointed out by Benjamin Baier.
2015-02-01free(NULL) works, so stop checking for non-zero length allocationKenneth R Westerback
or non-NULLness before calling free(). This batch from Benjamin Baier.
2015-01-31free(NULL) works, so stop checking for non-zero length allocationKenneth R Westerback
or non-NULLness before calling free().
2015-01-31Don't leak the "access protected, zero sized object" returned byKenneth R Westerback
calloc(N, 0). Avoid the whole controversy by skipping zero length options while cloning a lease. Leak reported by Remco van den Berg via bugs@. Additional testing and diagnostic help from Benjamin Baier. Thanks!
2015-01-31Set is_static to 0 before trying to free a lease. Otherwise itKenneth R Westerback
might leak. *Should* not be possible but better safe than sorry.
2015-01-31Always free(buf) if errmsg is set while trying to flush routes.Kenneth R Westerback
2015-01-30Don't leak incompletely cloned static lease. Should never happenKenneth R Westerback
but better safe than sorry. Noted and diff from Benjamin Baier. Thanks!
2015-01-30Tweak error message to say 'realloc' since that's what's failing,Kenneth R Westerback
not 'malloc'.
2015-01-16Replace <sys/param.h> with <limits.h> and other less dirty headers whereTheo de Raadt
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)
2014-12-10Reusing the same field for different things in different contexts mayKenneth R Westerback
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.
2014-12-10The consensus is that RTM_IFINFO messages do not always carry theKenneth R Westerback
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.
2014-12-09Move the initial link status check and possible forceup back beforeKenneth R Westerback
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.
2014-12-08Try harder to avoid displaying "no link ... got link" when initialKenneth R Westerback
link comes up and nothing has yet been displayed.
2014-12-07Do not move from S_PREBOOT to S_REBOOT just because link_timeoutKenneth R Westerback
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.
2014-12-07Ensure we grab the interface LLADDR as soon as the link state isKenneth R Westerback
noted as being up. Thus avoiding a premature exit if extra RTM_IFINFO messages arrive before state_reboot() gets a chance to run.
2014-12-07Retract check for IFF_RUNNING when checking for link state. At leastKenneth R Westerback
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!
2014-12-05Move initial wait for network link into the state machine by addingKenneth R Westerback
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.
2014-12-03Correct comment to state that the BPF program is patched inKenneth R Westerback
if_register_receive.
2014-11-30Don't check for hardware address change unless link was up. DelayKenneth R Westerback
construction of default client identifier until link is up (i.e. do it in state_reboot()).
2014-11-29Explicitly initialize client->state to S_REBOOTING rather thanKenneth R Westerback
relying on S_REBOOTING being 0.
2014-11-27Use if_nametoindex() to get the interface index, and thereby checkKenneth R Westerback
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.
2014-11-26Reset ifi->errors after a successful receive_packet(), rather thanKenneth R Westerback
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.
2014-11-26'ifi' is successfully calloc'd during initialization or dhclientKenneth R Westerback
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.
2014-11-26Rename 'got_one()' to 'packethandler()'.Kenneth R Westerback
2014-11-25r1.118 starting using LINK_STATE_IS_UP() to check the link statusKenneth R Westerback
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@
2014-11-23Rename discover_interface() to more meaningful get_hw_address().Kenneth R Westerback
Hoist one-time initialization of client identifier out of get_hw_address() to the one-time initialization code in main(). No intentional functional change.
2014-11-23Cleanup some struct interface_info fields. Make 'nomedia' a flag. ReplaceKenneth R Westerback
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.
2014-11-20A little too agressive reordering. Must initialize the client structKenneth R Westerback
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!
2014-11-17Further juggle startup code, putting config file reading after forkingKenneth R Westerback
the priv child but before getting hardware link. Reducing further the possibly inappropriate information the priv child could read.
2014-11-16Move some memory allocations/initialization and file reading toKenneth R Westerback
after forking the privileged process, which should not be reading those bits. No intentional functional change.
2014-11-16Read your compiler output even when it succeeds. Add missing variable toKenneth R Westerback
error print statement.
2014-11-15Make -q (quiet) and -d (don't daemonize) options mutually exclusive.Kenneth R Westerback
2014-11-13Tweak some comments and error messages. Put all "I can't handleKenneth R Westerback
this" tests at the top of the dispatch loop. Use a 'continue' instead of 'goto <label just after the while>'. No intended functional change.
2014-11-08Use open(O_CLOEXEC) rather than open() + fcntl(FD_CLOEXEC). InspiredKenneth R Westerback
by and ok guenther@.
2014-11-08Exhort user to recompile 'dhclient', not 'dhcpd', when bpf versions areKenneth R Westerback
mismatched.
2014-11-04Of the 14 occurances of free_client_lease() only 2 deal with leasesKenneth R Westerback
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.
2014-11-04Instead of correcting things after the fact, use SOCK_NONBLOCK and SOCK_CLOEXECPhilip Guenther
to create the socketpair() with non-blocking and close-on-exec set. ok krw@