diff options
Diffstat (limited to 'mdk-stage1')
-rw-r--r-- | mdk-stage1/dhcp.c | 32 | ||||
-rw-r--r-- | mdk-stage1/dhcp.h | 2 | ||||
-rw-r--r-- | mdk-stage1/network.c | 2 |
3 files changed, 21 insertions, 15 deletions
diff --git a/mdk-stage1/dhcp.c b/mdk-stage1/dhcp.c index 34ce5a9e0..65b7df56e 100644 --- a/mdk-stage1/dhcp.c +++ b/mdk-stage1/dhcp.c @@ -502,6 +502,8 @@ static void add_vendor_code(struct bootp_request * breq, unsigned char option, u } +char * dhcp_hostname = NULL; +char * dhcp_domain = NULL; enum return_type perform_dhcp(struct interface_info * intf) { @@ -515,7 +517,7 @@ enum return_type perform_dhcp(struct interface_info * intf) short aShort; int num_options; char requested_options[50]; - char * my_hostname, * my_domainname, * client_id_str, * client_id_hwaddr; + char * client_id_str, * client_id_hwaddr; if (strncmp(intf->device, "eth", 3)) { stg1_error_message("DHCP available only for Ethernet networking."); @@ -535,7 +537,7 @@ enum return_type perform_dhcp(struct interface_info * intf) static char ** answers = NULL; char * boulet; - my_hostname = my_domainname = client_id_str = client_id_hwaddr = NULL; + client_id_str = client_id_hwaddr = NULL; results = ask_from_entries_auto("If the DHCP server needs to know you by name; please fill in this information. " "Valid answers are for example: `mybox' for hostname and `mynetwork.com' for " @@ -543,16 +545,16 @@ enum return_type perform_dhcp(struct interface_info * intf) questions, &answers, 32, questions_auto, NULL); if (results == RETURN_OK) { - my_hostname = answers[0]; - if ((boulet = strchr(my_hostname, '.')) != NULL) + dhcp_hostname = answers[0]; + if ((boulet = strchr(dhcp_hostname, '.')) != NULL) boulet[0] = '\0'; - my_domainname = answers[1]; + dhcp_domain = answers[1]; - if (*my_hostname && *my_domainname) { + if (*dhcp_hostname && *dhcp_domain) { /* if we have both, then create client id from them */ - client_id_str = memdup(my_hostname, strlen(my_domainname) + 2); + client_id_str = memdup(dhcp_hostname, strlen(dhcp_domain) + 2); strcat(client_id_str, "."); - strcat(client_id_str, my_domainname); + strcat(client_id_str, dhcp_domain); } } } @@ -571,8 +573,8 @@ enum return_type perform_dhcp(struct interface_info * intf) add_vendor_code(&breq, DHCP_OPTION_TYPE, 1, &messageType); /* add pieces needed to have DDNS/DHCP IP selection based on requested name */ - if (my_hostname && *my_hostname) { /* pick client id form based on absence or presence of domain name */ - if (*my_domainname) /* alternate style <hostname>.<domainname> */ + if (dhcp_hostname && *dhcp_hostname) { /* pick client id form based on absence or presence of domain name */ + if (*dhcp_domain) /* alternate style <hostname>.<domainname> */ add_vendor_code(&breq, DHCP_OPTION_CLIENT_IDENTIFIER, strlen(client_id_str), client_id_str); else { /* usual style (aka windows / dhcpcd) */ /* but put MAC in form required for client identifier first */ @@ -582,8 +584,8 @@ enum return_type perform_dhcp(struct interface_info * intf) add_vendor_code(&breq, DHCP_OPTION_CLIENT_IDENTIFIER, IFHWADDRLEN+1, client_id_hwaddr); } /* this is the one that the dhcp server really wants for DDNS updates */ - add_vendor_code(&breq, BOOTP_OPTION_HOSTNAME, strlen(my_hostname), my_hostname); - log_message("DHCP: telling server to use name = %s", my_hostname); + add_vendor_code(&breq, BOOTP_OPTION_HOSTNAME, strlen(dhcp_hostname), dhcp_hostname); + log_message("DHCP: telling server to use name = %s", dhcp_hostname); } memset(&client_addr.sin_addr, 0, sizeof(&client_addr.sin_addr)); @@ -626,13 +628,13 @@ enum return_type perform_dhcp(struct interface_info * intf) add_vendor_code(&breq, DHCP_OPTION_REQADDR, 4, &bresp.yiaddr); /* if used the first time, then have to use it again */ - if (my_hostname && *my_hostname) { /* add pieces needed to have DDNS/DHCP IP selection based on requested name */ - if (my_domainname && *my_domainname) /* alternate style */ + if (dhcp_hostname && *dhcp_hostname) { /* add pieces needed to have DDNS/DHCP IP selection based on requested name */ + if (dhcp_domain && *dhcp_domain) /* alternate style */ add_vendor_code(&breq, DHCP_OPTION_CLIENT_IDENTIFIER, strlen(client_id_str), client_id_str); else /* usual style (aka windows / dhcpcd) */ add_vendor_code(&breq, DHCP_OPTION_CLIENT_IDENTIFIER, IFHWADDRLEN+1, client_id_hwaddr); /* this is the one that the dhcp server really wants for DDNS updates */ - add_vendor_code(&breq, BOOTP_OPTION_HOSTNAME, strlen(my_hostname), my_hostname); + add_vendor_code(&breq, BOOTP_OPTION_HOSTNAME, strlen(dhcp_hostname), dhcp_hostname); } aShort = ntohs(sizeof(struct bootp_request)); diff --git a/mdk-stage1/dhcp.h b/mdk-stage1/dhcp.h index 6fb121ea4..71d062e9c 100644 --- a/mdk-stage1/dhcp.h +++ b/mdk-stage1/dhcp.h @@ -31,4 +31,6 @@ enum return_type perform_dhcp(struct interface_info * intf); +extern char * dhcp_hostname; + #endif diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c index 1f53813b2..5127872fc 100644 --- a/mdk-stage1/network.c +++ b/mdk-stage1/network.c @@ -283,6 +283,8 @@ static int save_netinfo(struct interface_info * intf) { fprintf(f, "HOSTNAME=%s\n", hostname); if (domain) fprintf(f, "DOMAINNAME=%s\n", domain); + if (dhcp_hostname) + fprintf(f, "DHCP_HOSTNAME=%s\n", dhcp_hostname); if (gateway.s_addr != 0) fprintf(f, "GATEWAY=%s\n", inet_ntoa(gateway)); |