From: Joan Lledó <[email protected]>
dhcpcd creates some directory entries which names are or include interface
names.
In the Hurd, interface names can include invalid characters like `/`. So those
must be escaped.
---
src/dhcp-common.c | 7 ++++++-
src/script.c | 6 +++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/dhcp-common.c b/src/dhcp-common.c
index 14d2d92a..3679b79e 100644
--- a/src/dhcp-common.c
+++ b/src/dhcp-common.c
@@ -853,6 +853,7 @@ int
dhcp_set_leasefile(char *leasefile, size_t len, int family,
const struct interface *ifp)
{
+ char escaped_ifname[IF_NAMESIZE];
char ssid[1 + (IF_SSIDLEN * 4) + 1]; /* - prefix and NUL terminated. */
if (ifp->name[0] == '\0') {
@@ -869,6 +870,10 @@ dhcp_set_leasefile(char *leasefile, size_t len, int family,
return -1;
}
+ print_string(escaped_ifname + 1, sizeof(escaped_ifname) - 1,
+ OT_ESCFILE,
+ (const uint8_t *)ifp->name, IF_NAMESIZE);
+
if (ifp->wireless) {
ssid[0] = '-';
print_string(ssid + 1, sizeof(ssid) - 1,
@@ -878,7 +883,7 @@ dhcp_set_leasefile(char *leasefile, size_t len, int family,
ssid[0] = '\0';
return snprintf(leasefile, len,
family == AF_INET ? LEASEFILE : LEASEFILE6,
- ifp->name, ssid);
+ escaped_ifname, ssid);
}
void
diff --git a/src/script.c b/src/script.c
index 0149aee9..aceef7ba 100644
--- a/src/script.c
+++ b/src/script.c
@@ -232,6 +232,7 @@ make_env(struct dhcpcd_ctx *ctx, const struct interface
*ifp,
const struct interface *ifp2;
int af;
bool is_stdin = ifp->name[0] == '\0';
+ char escaped_ifname[IF_NAMESIZE];
const char *if_up, *if_down;
rb_tree_t ifaces;
struct rt *rt;
@@ -348,7 +349,10 @@ make_env(struct dhcpcd_ctx *ctx, const struct interface
*ifp,
#endif
if (!is_stdin) {
- if (efprintf(fp, "interface=%s", ifp->name) == -1)
+ print_string(escaped_ifname + 1, sizeof(escaped_ifname) - 1,
+ OT_ESCFILE,
+ (const uint8_t *)ifp->name, IF_NAMESIZE);
+ if (efprintf(fp, "interface=%s", escaped_ifname) == -1)
goto eexit;
if (protocols[protocol] != NULL) {
if (efprintf(fp, "protocol=%s",
--
2.50.1