diff options
author | Thomas Markwalder <tmark@isc.org> | 2017-12-19 15:51:02 -0500 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2017-12-19 15:51:02 -0500 |
commit | ab77c8b8b58ae5741482886c74515d8c0772a92b (patch) | |
tree | 0582e874087f06cdf90ec150c31c2cba9d28f26d | |
parent | a2a0f98c21c7c9926bb8901344e939e276a6242e (diff) | |
download | isc-dhcp-ab77c8b8b58ae5741482886c74515d8c0772a92b.tar.gz |
[master] Restores use of env vars for lease and pid files
Merges in rt46859.
-rw-r--r-- | RELNOTES | 16 | ||||
-rw-r--r-- | server/dhcpd.c | 31 | ||||
-rw-r--r-- | server/dhcpd.conf.5 | 108 |
3 files changed, 77 insertions, 78 deletions
@@ -298,10 +298,10 @@ dhcp-users@lists.isc.org. - Added to the server (-6) a new statement, local-address6, which specifies the source address of packets sent by the server. An additional flag, - bind-local-address6, disabled by default makes the service socket to - be bound to local-address6. Note as for local-address this does not - work with direct client: a relay has to forward packets to the server - using the local-address6 destination. + bind-local-address6, disabled by default, binds the service socket to + to local-address6. Note that bind-local-address does not work with direct + clients: a relay has to forward packets to the server using the + local-address6 destination. [ISC-Bugs #46084] Changes since 4.3.6 (Bugs): @@ -338,6 +338,14 @@ dhcp-users@lists.isc.org. direction. [ISC-Bugs #46767] +- The server now recognizes environment variables PATH_DHCPD_DB and + PATH_DHCPD_PID. These had been incorrectly compiled out of the code + unless DHCPv6 support was disabled. Additionally, the server man + pages were corrected to accurately reflect how the server chooses + file names (see lease-file-name and pid-file-name statements). Thanks + to Fernando Soto at Bluecat for bringing this matter to our attention. + [ISC-Bugs #46859] + Changes since 4.3.6b1 - None diff --git a/server/dhcpd.c b/server/dhcpd.c index ea62d1a0..dfc617d0 100644 --- a/server/dhcpd.c +++ b/server/dhcpd.c @@ -271,9 +271,9 @@ main(int argc, char **argv) { struct parse *parse; int lose; #endif - int no_dhcpd_conf = 0; - int no_dhcpd_db = 0; - int no_dhcpd_pid = 0; + int have_dhcpd_conf = 0; + int have_dhcpd_db = 0; + int have_dhcpd_pid = 0; #ifdef DHCPv6 int local_family_set = 0; #ifdef DHCP4o6 @@ -464,17 +464,17 @@ main(int argc, char **argv) { if (++i == argc) usage(use_noarg, argv[i-1]); path_dhcpd_conf = argv [i]; - no_dhcpd_conf = 1; + have_dhcpd_conf = 1; } else if (!strcmp (argv [i], "-lf")) { if (++i == argc) usage(use_noarg, argv[i-1]); path_dhcpd_db = argv [i]; - no_dhcpd_db = 1; + have_dhcpd_db = 1; } else if (!strcmp (argv [i], "-pf")) { if (++i == argc) usage(use_noarg, argv[i-1]); path_dhcpd_pid = argv [i]; - no_dhcpd_pid = 1; + have_dhcpd_pid = 1; } else if (!strcmp(argv[i], "--no-pid")) { no_pid_file = ISC_TRUE; } else if (!strcmp (argv [i], "-t")) { @@ -570,42 +570,43 @@ main(int argc, char **argv) { } #endif /* DHCPv6 && DHCP4o6 */ - if (!no_dhcpd_conf && (s = getenv ("PATH_DHCPD_CONF"))) { + if (!have_dhcpd_conf && (s = getenv ("PATH_DHCPD_CONF"))) { path_dhcpd_conf = s; } #ifdef DHCPv6 if (local_family == AF_INET6) { /* DHCPv6: override DHCPv4 lease and pid filenames */ - if (!no_dhcpd_db) { + if (!have_dhcpd_db) { if ((s = getenv ("PATH_DHCPD6_DB"))) path_dhcpd_db = s; else path_dhcpd_db = _PATH_DHCPD6_DB; } - if (!no_dhcpd_pid) { + if (!have_dhcpd_pid) { if ((s = getenv ("PATH_DHCPD6_PID"))) path_dhcpd_pid = s; else path_dhcpd_pid = _PATH_DHCPD6_PID; } } else -#else /* !DHCPv6 */ +#endif /* DHCPv6 */ { - if (!no_dhcpd_db && (s = getenv ("PATH_DHCPD_DB"))) { + if (!have_dhcpd_db && (s = getenv ("PATH_DHCPD_DB"))) { path_dhcpd_db = s; + have_dhcpd_db = 1; } - if (!no_dhcpd_pid && (s = getenv ("PATH_DHCPD_PID"))) { + if (!have_dhcpd_pid && (s = getenv ("PATH_DHCPD_PID"))) { path_dhcpd_pid = s; + have_dhcpd_pid = 1; } } -#endif /* DHCPv6 */ /* * convert relative path names to absolute, for files that need * to be reopened after chdir() has been called */ - if (path_dhcpd_db[0] != '/') { + if (have_dhcpd_db && path_dhcpd_db[0] != '/') { const char *path = path_dhcpd_db; path_dhcpd_db = realpath(path_dhcpd_db, NULL); if (path_dhcpd_db == NULL) @@ -795,7 +796,7 @@ main(int argc, char **argv) { #if defined (TRACING) if (traceinfile) { - if (!no_dhcpd_db) { + if (!have_dhcpd_db) { log_error ("%s", ""); log_error ("** You must specify a lease file with -lf."); log_error (" Dhcpd will not overwrite your default"); diff --git a/server/dhcpd.conf.5 b/server/dhcpd.conf.5 index 1ba4009f..b32915d4 100644 --- a/server/dhcpd.conf.5 +++ b/server/dhcpd.conf.5 @@ -2633,31 +2633,16 @@ statement .B lease-file-name \fIname\fB;\fR .PP .I Name -should be the name of the DHCP server's lease file. By default, this -is DBDIR/dhcpd.leases. This statement \fBmust\fR appear in the outer -scope of the configuration file - if it appears in some other scope, -it will have no effect. Furthermore, it has no effect if overridden -by the -.B -lf -flag or the -.B PATH_DHCPD_DB -environment variable. -.RE -.PP -The -.I limit-addrs-per-ia -statement -.RS 0.25i +Where \fIname\fR is the name of the DHCP server's lease file. By default, +this is DBDIR/dhcpd.leases. This statement \fBmust\fR appear in the outer +scope of the configuration file - if it appears in some other scope, it will +have no effect. The value must be the absolute path of the file to use. +The order of precedence the server uses for the lease file name +is: .PP -.B limit-addrs-per-ia \fInumber\fB;\fR -.PP -By default, the DHCPv6 server will limit clients to one IAADDR per IA -option, meaning one address. If you wish to permit clients to hang onto -multiple addresses at a time, configure a larger \fInumber\fR here. -.PP -Note that there is no present method to configure the server to forcibly -configure the client with one IP address per each subnet on a shared network. -This is left to future work. + 1. \fBlease-file-name\fR configuration file statement. + 2. \fB-lf\fR command line flag. + 3. \fBPATH_DHCPD_DB\fR environment variable. .RE .PP The @@ -2667,21 +2652,16 @@ statement .PP .B dhcpv6-lease-file-name \fIname\fB;\fR .PP -.I Name -is the name of the lease file to use if and only if the server is running -in DHCPv6 mode. By default, this is DBDIR/dhcpd6.leases. This statement, -like -.I lease-file-name, -\fBmust\fR appear in the outer scope of the configuration file. It -has no effect if overridden by the -.B -lf -flag or the -.B PATH_DHCPD6_DB -environment variable. If -.I dhcpv6-lease-file-name -is not specified, but -.I lease-file-name -is, the latter value will be used. +Where \fIname\fR is the name of the DHCP server's lease file when the server +is running DHCPv6. By default, this is DBDIR/dhcpd6.leases. This statement +\fBmust\fR appear in the outer scope of the configuration file - if it appears +in some other scope, it will have no effect. The value must be the absolute +path of the file to use. The order of precedence the server uses +for the lease file name is: +.PP + 1. \fBdhcpv6-lease-file-name\fR configuration file statement. + 2. \fB-lf\fR command line flag. + 3. \fBPATH_DHCPD6_DB\fR environment variable. .RE .PP The @@ -2705,6 +2685,22 @@ automatically reads the values in either format. .RE .PP The +.I limit-addrs-per-ia +statement +.RS 0.25i +.PP +.B limit-addrs-per-ia \fInumber\fB;\fR +.PP +By default, the DHCPv6 server will limit clients to one IAADDR per IA +option, meaning one address. If you wish to permit clients to hang onto +multiple addresses at a time, configure a larger \fInumber\fR here. +.PP +Note that there is no present method to configure the server to forcibly +configure the client with one IP address per each subnet on a shared network. +This is left to future work. +.RE +.PP +The .I local-port statement .RS 0.25i @@ -2970,14 +2966,13 @@ statement .I Name should be the name of the DHCP server's process ID file. This is the file in which the DHCP server's process ID is stored when the server -starts. By default, this is RUNDIR/dhcpd.pid. Like the -.I lease-file-name -statement, this statement must appear in the outer scope -of the configuration file. It has no effect if overridden by the -.B -pf -flag or the -.B PATH_DHCPD_PID -environment variable. +starts. By default, this is RUNDIR/dhcpd.pid. Like the \fIlease-file-name\fR +statement, this statement must appear in the outer scope of the configuration +file. The order of precedence used by the server is: +.PP + 1. \fBpid-file-name\fR configuration file statement. + 2. \fB-lf\fR command line flag. + 3. \fBPATH_DHCPD_PID\fR environment variable. .PP The .I dhcpv6-pid-file-name @@ -2989,18 +2984,13 @@ statement .I Name is the name of the pid file to use if and only if the server is running in DHCPv6 mode. By default, this is DBDIR/dhcpd6.pid. This statement, -like -.I pid-file-name, -\fBmust\fR appear in the outer scope of the configuration file. It -has no effect if overridden by the -.B -pf -flag or the -.B PATH_DHCPD6_PID -environment variable. If -.I dhcpv6-pid-file-name -is not specified, but -.I pid-file-name -is, the latter value will be used. +like \fIpid-file-name\fr, \fBmust\fR appear in the outer scope of the +configuration file. The order of precedence used by the server is: +.PP + 1. \fBdhcpv6-pid-file-name\fR configuration file statement. + 2. \fB-lf\fR command line flag. + 3. \fBPATH_DHCPD6_PID\fR environment variable. +.PP .RE .PP The |