diff options
-rw-r--r-- | libbb/xconnect.c | 7 | ||||
-rw-r--r-- | util-linux/mount.c | 6 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libbb/xconnect.c b/libbb/xconnect.c index 6e78e6363..3a0dc2653 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -496,12 +496,15 @@ char* FAST_FUNC xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa) { return sockaddr2str(sa, NI_NAMEREQD | IGNORE_PORT); } +#ifndef NI_NUMERICSCOPE +# define NI_NUMERICSCOPE 0 +#endif char* FAST_FUNC xmalloc_sockaddr2dotted(const struct sockaddr *sa) { - return sockaddr2str(sa, NI_NUMERICHOST); + return sockaddr2str(sa, NI_NUMERICHOST | NI_NUMERICSCOPE); } char* FAST_FUNC xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa) { - return sockaddr2str(sa, NI_NUMERICHOST | IGNORE_PORT); + return sockaddr2str(sa, NI_NUMERICHOST | NI_NUMERICSCOPE | IGNORE_PORT); } diff --git a/util-linux/mount.c b/util-linux/mount.c index 13590ceb4..c3e91e2a6 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -1975,6 +1975,12 @@ static int singlemount(struct mntent *mp, int ignore_busy) dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); if (ENABLE_FEATURE_CLEAN_UP) free(lsa); ip = xasprintf("ip=%s", dotted); +// Note: IPv6 scoped addresses ("name%iface", see RFC 4007) should be +// handled by libc in getnameinfo() (inside xmalloc_sockaddr2dotted_noport()). +// Currently, glibc does not support that (has no NI_NUMERICSCOPE), +// musl apparently does. This results in "ip=numericIPv6%iface_name" +// (instead of _numeric_ iface_id) with glibc. +// This probalby should be fixed in glibc, not here. if (ENABLE_FEATURE_CLEAN_UP) free(dotted); parse_mount_options(ip, &filteropts); if (ENABLE_FEATURE_CLEAN_UP) free(ip); |