SHA256
1
0
forked from pool/dhcp
dhcp/0006-dhcp-4.3.2-dhclient-send-hostname-or-fqdn.patch
Marius Tomaschewski 479a80499b - Update to dhcp-4.3.3 (fate#319067) provinding many bug fixes,
features and obsoletes several patches we were using before.
  For complete list of the changes, please read the RELNOTES
  file shipped along with the package or online:
  https://kb.isc.org/article/AA-01297/82/DHCP-4.3.3-Release-Notes.html
- Removed obsolete patches included upstream now:
  [- 0007-dhcp-4.2.6-ldap-mt01.patch,
   - 0009-dhcp-4.2.6-xen-checksum.patch,
   - 0013-dhcp-4.2.3-P1-dhclient-log-pid.patch,
   - 0015-Ignore-SIGPIPE-to-not-die-in-socket-code.patch,
   - 0016-server-log-DHCPv6-addresses-assigned-to-clients.patch,
   - 0019-dhcp-4.2.x-ldap-debug-write.bnc835818.patch,
   - 0021-dhcp-4.2.4-P2-bnc878846-conf-to-ldap.patch,
   - 0022-dhcp-4.2.x-contrib-conf-to-ldap-reorder.886094.patch,
   - 0023-dhcp-4.2.x-ddns-tsig-hmac-sha-support.890731.patch,
   - 0025-dhcp-4.2.x-dhcpv6-retransmission-until-MRD.872609.patch,
   - 0026-dhcp-4.2.x-disable-unused-ddns-port-in-server.891655.patch]
- Replaced hostname patch with a dhcpv6 and fqdn aware variant:
  [- 0006-dhcp-4.2.5-dhclient-send-hostname-rml.patch,
   + 0006-dhcp-4.3.2-dhclient-send-hostname-or-fqdn.patch]
- Replaced infiniband support patch with fixed variant:
  [- 0017-dhcp-4.2.6-lpf-ip-over-ib-support.patch
   - 0018-dhcp-4.2.6-improved-xid.patch
   - 0027-dhcp-4.2.x-handle-ifa_addr-NULL.909189.patch,
   + 0030-infiniband-support.patch]
- Merged/Adopted patches for the dhcp-4.3.3 sources:
  [* 0004-dhcp-4.1.1-tmpfile.patch,
   * 0011-dhcp-4.2.6-close-on-exec.patch,
   * 0020-dhcp-4.2.x-chown-server-leases.bnc868253.patch]

OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=151
2015-09-14 12:11:04 +00:00

132 lines
3.9 KiB
Diff

From ec55fe43e597e5ea0f8dff5b8edef091c0911801 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.3.2-dhclient-send-hostname-or-fqdn
Signed-off-by: Marius Tomaschewski <mt@suse.de>
diff --git a/client/dhclient.8 b/client/dhclient.8
index 5b05698..d9a26b7 100644
--- a/client/dhclient.8
+++ b/client/dhclient.8
@@ -66,6 +66,10 @@ dhclient - Dynamic Host Configuration Protocol Client
.I LL|LLT
]
[
+.B -H
+.I hostname
+]
+[
.B -p
.I port-number
]
@@ -326,6 +330,11 @@ 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 as host-name (ipv4 only) or fqdn to perform dns update.
+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 cf612d1..0e39161 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -124,6 +124,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 */
@@ -241,6 +242,24 @@ 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 hostname 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,
+ local_family == AF_INET6 ? 1 : 0) != 0) {
+ log_error("suspect %s in -H option: \"%s\"",
+ local_family == AF_INET6 ? "fqdn" : "hostname",
+ argv[i]);
+ exit(1);
+ }
+ dhclient_hostname = argv [i];
} else if (!strcmp(argv[i], "-nw")) {
nowait = 1;
} else if (!strcmp(argv[i], "-n")) {
@@ -510,6 +529,48 @@ 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[1024] = {'\0'};
+ int len;
+
+ if (strchr(dhclient_hostname, '.')) {
+ len = strlen(dhclient_hostname);
+ snprintf (buf, sizeof(buf),
+ "send fqdn.fqdn \"%s%s\";\n"
+ "send fqdn.encoded on;\n"
+ "send fqdn.server-update on;\n"
+ "also request %s;\n",
+ dhclient_hostname,
+ dhclient_hostname[len - 1] == '.' ? "" : ".",
+ local_family == AF_INET6 ? "dhcp6.fqdn" : "fqdn");
+ } else if (local_family == AF_INET) {
+ snprintf (buf, sizeof(buf),
+ "send host-name \"%s\";",
+ dhclient_hostname);
+ }
+ if ((len = strlen(buf))) {
+ status = new_parse (&cfile, -1, buf, len,
+ "hostname update options", 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();
@@ -756,6 +817,7 @@ static void usage()
#else /* DHCPv6 */
"[-I1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
#endif /* DHCPv6 */
+ " [-H hostname]\n"
" [-s server-addr] [-cf config-file]\n"
" [-df duid-file] [-lf lease-file]\n"
" [-pf pid-file] [--no-pid] [-e VAR=val]\n"
--
2.1.4