Marius Tomaschewski
58f1b21b5d
complete list of changes -- digest of fixes not in dhcp-4.2.4-P2: - Correct code to calculate rebind timing values in client [ISC-Bugs #29062] - Fix some issues in the code for parsing and printing options. [ISC-Bugs #22625,#27289,#27296,#27314] - Update the memory leakage debug code to work with v6. [ISC-Bugs #30297] - Relax the requirements for deleting an A or AAAA record. This relaxation was codified in RFC 4703. [ISC-Bugs #30734] - Modify the failover code to handle incorrect peer names better. [ISC-Bugs #30320] - Fix a set of issues that were discovered via a code inspection tool. [ISC-Bugs #23833] - Parsing unquoted base64 strings improved. [ISC-Bugs #23048] - The client now passes information about the options it requested from the server to the script code via environment variables. These variables are of the form requested_<option_name>=1 with the option name being the same as used in the new_* and old_* variables. [ISC-Bugs #29068] - Check the status value when trying to read from a connection to see if it may have been closed. If it appears closed don't try to read from it again. This avoids a potential busy-wait like loop when the peer names are mismatched. [ISC-Bugs #31231] - Remove an unused variable to keep compilers happy. [ISC-Bugs #31983] - Removed obsolete parsing and printing option patch [dhcp-4.2.4-parsing-and-printing-options.patch] - Merged dhcp-4.2.2-dhclient-send-hostname-rml.diff [dhcp-4.2.5-dhclient-send-hostname-rml.patch] OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=96
123 lines
3.5 KiB
Diff
123 lines
3.5 KiB
Diff
From ebc6e17683e4a4d7f2316c1ea46d680955df7d26 Mon Sep 17 00:00:00 2001
|
|
From: Marius Tomaschewski <mt@suse.de>
|
|
Date: Thu, 18 Aug 2011 10:49:07 +0200
|
|
Subject: [PATCH] dhcp-4.2.5-dhclient-send-hostname-rml
|
|
|
|
---
|
|
client/dhclient.8 | 8 ++++++++
|
|
client/dhclient.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++--
|
|
2 Dateien geändert, 56 Zeilen hinzugefügt(+), 2 Zeilen entfernt(-)
|
|
|
|
diff --git a/client/dhclient.8 b/client/dhclient.8
|
|
index 3539591..4a7647a 100644
|
|
--- a/client/dhclient.8
|
|
+++ b/client/dhclient.8
|
|
@@ -60,6 +60,10 @@ dhclient - Dynamic Host Configuration Protocol Client
|
|
.I LL|LLT
|
|
]
|
|
[
|
|
+.B -H
|
|
+.I hostname
|
|
+]
|
|
+[
|
|
.B -p
|
|
.I port-number
|
|
]
|
|
@@ -316,6 +320,10 @@ transmits these messages to 255.255.255.255 (the IP limited broadcast
|
|
address). Overriding this is mostly useful for debugging purposes. This
|
|
feature is not supported in DHCPv6 (\fB-6\fR) mode.
|
|
.TP
|
|
+.BI \-H \ hostname
|
|
+This flag may be used to specify a client hostname that should be sent to
|
|
+the DHCP server. Note, that this option is a SUSE/Novell extension.
|
|
+.TP
|
|
.BI \-g \ relay
|
|
.\" mockup relay
|
|
Set the giaddr field of all packets to the \fIrelay\fR IP address
|
|
diff --git a/client/dhclient.c b/client/dhclient.c
|
|
index 0c1ed24..de93499 100644
|
|
--- a/client/dhclient.c
|
|
+++ b/client/dhclient.c
|
|
@@ -119,6 +119,7 @@ main(int argc, char **argv) {
|
|
int no_dhclient_db = 0;
|
|
int no_dhclient_pid = 0;
|
|
int no_dhclient_script = 0;
|
|
+ char *dhclient_hostname = NULL;
|
|
#ifdef DHCPv6
|
|
int local_family_set = 0;
|
|
#endif /* DHCPv6 */
|
|
@@ -231,6 +232,22 @@ main(int argc, char **argv) {
|
|
if (++i == argc)
|
|
usage();
|
|
mockup_relay = argv[i];
|
|
+ } else if (!strcmp (argv[i], "-H")) {
|
|
+ size_t len;
|
|
+ if (++i == argc || !argv[i] || *(argv[i]) == '\0')
|
|
+ usage ();
|
|
+ len = strlen (argv[i]);
|
|
+ if (len > HOST_NAME_MAX) {
|
|
+ log_error("-H option host-name string \"%s\" is too long:"
|
|
+ "maximum length is %d characters",
|
|
+ argv[i], HOST_NAME_MAX);
|
|
+ exit(1);
|
|
+ } else if(check_domain_name(argv[i], len, 0) != 0) {
|
|
+ log_error("suspect host-name in -H \"%s\"",
|
|
+ argv[i]);
|
|
+ exit(1);
|
|
+ }
|
|
+ dhclient_hostname = argv [i];
|
|
} else if (!strcmp(argv[i], "-nw")) {
|
|
nowait = 1;
|
|
} else if (!strcmp(argv[i], "-n")) {
|
|
@@ -484,6 +501,35 @@ main(int argc, char **argv) {
|
|
/* Parse the dhclient.conf file. */
|
|
read_client_conf();
|
|
|
|
+ /* If the user specified a hostname, send it here and now */
|
|
+ if ((dhclient_hostname != NULL) && (*dhclient_hostname != '\0') ) {
|
|
+ struct parse *cfile = NULL;
|
|
+ char buf[HOST_NAME_MAX + 40];
|
|
+ int len;
|
|
+
|
|
+ snprintf (buf, sizeof(buf), "send host-name \"%s\";",
|
|
+ dhclient_hostname);
|
|
+ len = strlen(buf);
|
|
+
|
|
+ status = new_parse (&cfile, -1, buf, len,
|
|
+ "host-name option", 0);
|
|
+ if (status != ISC_R_SUCCESS)
|
|
+ log_fatal ("Cannot parse send host-name statement!");
|
|
+
|
|
+ for (;;) {
|
|
+ const char *val = NULL;
|
|
+ int token;
|
|
+
|
|
+ token = peek_token (&val, (unsigned *)0, cfile);
|
|
+ if (token == END_OF_FILE)
|
|
+ break;
|
|
+
|
|
+ parse_client_statement (cfile, NULL,
|
|
+ &top_level_config);
|
|
+ }
|
|
+ end_parse (&cfile);
|
|
+ }
|
|
+
|
|
/* Parse the lease database. */
|
|
read_client_leases();
|
|
|
|
@@ -708,9 +754,9 @@ static void usage()
|
|
|
|
log_fatal("Usage: dhclient "
|
|
#ifdef DHCPv6
|
|
- "[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>] [-D LL|LLT]\n"
|
|
+ "[-4|-6] [-SNTP1dvrx] [-nw] [-H <hostname>] [-p <port>] [-D LL|LLT]\n"
|
|
#else /* DHCPv6 */
|
|
- "[-1dvrx] [-nw] [-p <port>]\n"
|
|
+ "[-1dvrx] [-nw] [-H <hostname>] [-p <port>]\n"
|
|
#endif /* DHCPv6 */
|
|
" [-s server-addr] [-cf config-file] "
|
|
"[-lf lease-file]\n"
|
|
--
|
|
1.7.10.4
|
|
|