#1069897 Netcfg to get search domain

#1069897#5
Date:
2024-04-26 15:45:17 UTC
From:
To:
As explained in this thread:
https://lists.debian.org/debian-boot/2024/04/msg00061.html , netcfg
doesn't read the search domain property sent by dhcp to make it
available to udhcpc and fill /etc/resolv.conf + lease file properly.
This setup doesn't work in an environment where you have multiple
search domains and it's getting even more complicated if your network
mirror is on one of those search domains that is different from
$domain.

A commit as already been made for the udhcpc script here:
https://salsa.debian.org/installer-team/busybox/-/commit/bd0d90574a4e39b39d38b664ad15ac0c2ca1bbad
We now just need to update netcfg package to make $search available to udhcpc.

A proposed solution would be to update this line
(https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L38)
as follow:

const char* dhclient_request_options_udhcpc[] = { "subnet",
"broadcast", "router", "domain", "hostname", "dns", "search",
"ntpsrv", /* extra */ NULL };

Thanks

#1069897#10
Date:
2024-05-01 10:31:06 UTC
From:
To:
Here is a proposed patch:

diff -Naur netcfg-master/dhcp.c netcfg-master-updated/dhcp.c
--- netcfg-master/dhcp.c 2024-05-01 11:14:26.209026580 +0100
+++ netcfg-master-updated/dhcp.c 2024-05-01 11:15:11.888387848 +0100
@@ -41,6 +41,7 @@
                                                   "domain",
                                                   "hostname",
                                                   "dns",
+                                                 "search",
                                                   "ntpsrv", /* extra */
                                                   NULL };

#1069897#15
Date:
2024-05-03 10:04:18 UTC
From:
To:
This will require a bit more work than anticipated.

The patch posted above will only do half of the job.
netcfg will call udhcp with the "-O search" option added which will update
/etc/resolv.conf with the correct search domain values assuming that the
patch for /etc/udhcpc/default.script is also applied along this one.

Now the problem is that netcfg is calling the "netcfg_write_resolv"
function from static.c that will overwrite any changes made by udhcpc on
resolv.conf and will only keep the domain and nameservers.

https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L513
https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L616
https://salsa.debian.org/installer-team/netcfg/-/blob/master/static.c?ref_type=heads#L261

#1069897#20
Date:
2025-07-03 10:30:03 UTC
From:
To:
Here is an updated patch for this issue:
--- dhcp.c +++ dhcp.c @@ -41,6 +41,7 @@ "domain", "hostname", "dns", + "search", "ntpsrv", /* extra */ NULL }; @@ -510,7 +511,7 @@ * nameservers now so we can do rDNS lookups later to possibly * find out the domain. */ - netcfg_write_resolv(NULL, interface); + netcfg_write_resolv(NULL, NULL, interface); state = HOSTNAME; break; @@ -613,7 +614,7 @@ netcfg_write_common("", hostname, domain); netcfg_write_loopback(); netcfg_write_interface(interface); - netcfg_write_resolv(domain, interface); + netcfg_write_resolv(domain, search, interface); #if !defined(__FreeBSD_kernel__) kill_dhcp_client(); #endif
--- static.c +++ static.c @@ -258,14 +258,16 @@ return 1; }
#1069897#25
Date:
2025-07-03 12:14:11 UTC
From:
To:
The patch above won't work alone as we would need udhcpc to write the
search domain to a file and make a read function in netcfg to get the info
(or something along those lines)

Here is an updated version of the hack:
d-i preseed/early_command string \
        sed -i 's|printf "\$domain" > /tmp/domain_name|printf "$search" >
/tmp/domain_name|' /etc/udhcpc/default.script; \
        mv /sbin/udhcpc /sbin/udhcpc.real; \
        echo '#!/bin/sh' > /sbin/udhcpc; \
        echo 'exec /bin/busybox udhcpc -O search "$@"' >> /sbin/udhcpc; \
        chmod +x /sbin/udhcpc