SHA256
1
0
forked from pool/dhcp
dhcp/dhcp-4.1.1-dhclient-send-hostname-rml.diff
Marius Tomaschewski b6b28d718d - Updated to ISC DHCP 4.1.1, the current 4.x series production
release, providing DHCPv6 client/server/relay implementation.
  The programs act in DHCPv6 mode, when the -6 start option is set.
  We install separate init scripts with a 6 at the end to handle
  them, that is /etc/init.d/dhcpd6 and dhrelay6. Further, there is
  also a link to the binaries with a 6 at the end, e.g. dhclient6,
  making it visible, that the installed version supports DHCPv6.
- Moved additional documentation to a separate dhcp-doc package.
- Changed to provide config files and scripts as source files
  instead of patches to the ISC scripts.
- Adopted spec file and config/scripts, merged in all patches.
- Implemented RFC 3442 classless static routes support in the
  dhclient-script (bnc#555870).

OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=15
2010-05-07 14:12:44 +00:00

104 lines
3.1 KiB
Diff

diff --git a/client/dhclient.8 b/client/dhclient.8
index b805528..d31fa8d 100644
--- a/client/dhclient.8
+++ b/client/dhclient.8
@@ -60,6 +60,9 @@ dhclient - Dynamic Host Configuration Protocol Client
.I port
]
[
+.B -H hostname
+]
+[
.B -d
]
[
@@ -227,6 +230,11 @@ If a different port is specified for the client to listen on and
transmit on, the client will also use a different destination port -
one less than the specified port.
.PP
+The
+.B -H
+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.
+.PP
The DHCP client normally transmits any protocol messages it sends
before acquiring an IP address to, 255.255.255.255, the IP limited
broadcast address. For debugging purposes, it may be useful to have
diff --git a/client/dhclient.c b/client/dhclient.c
index 15c31a5..65e9c23 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -108,6 +108,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 */
@@ -212,6 +213,16 @@ main(int argc, char **argv) {
if (++i == argc)
usage();
mockup_relay = argv[i];
+ } else if (!strcmp (argv[i], "-H")) {
+ if (++i == argc || !argv[i] || *(argv[i]) == '\0')
+ usage ();
+ if (strlen (argv[i]) > 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);
+ }
+ dhclient_hostname = argv [i];
} else if (!strcmp(argv[i], "-nw")) {
nowait = 1;
} else if (!strcmp(argv[i], "-n")) {
@@ -445,6 +456,32 @@ 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();
@@ -653,12 +690,12 @@ static void usage()
log_error("Usage: dhclient %s %s",
#ifdef DHCPv6
- "[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>]",
+ "[-4|-6] [-SNTP1dvrx] [-nw] [-H <hostname>] [-p <port>]",
#else /* DHCPv6 */
"[-1dvrx] [-nw] [-p <port>]",
#endif /* DHCPv6 */
"[-s server]");
- log_error(" [-cf config-file] [-lf lease-file]%s",
+ log_error(" [-cf config-file] [-lf lease-file] %s",
"[-pf pid-file] [-e VAR=val]");
log_fatal(" [-sf script-file] [interface]");
}