Версия пакета: glibc-utils-2.38.0.23.0e1ef6779a-alt1.x86_64 (сизиф) glibc-2.32-alt5.x86_64 (p10) Шаги воспроизведения: 1. В /etc/hosts добавлены записи: # cat /etc/hosts 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain localhost6 2. Выполнить команду: # getent hosts Ожидаемый результат. IPv6 адрес отображается в формате IPv6: 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain localhost6 Получаемый результат. IPv6 адрес отображается в формате IPv4: 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost6.localdomain localhost6 Аналогичное поведение для ahosts и ahostsv6: # getent ahostsv6 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost6.localdomain localhost6 При этом, если третьим аргументом передать имя, то адрес отображается в ожидаемом формате: # getent hosts localhost6 ::1 localhost6.localdomain localhost6 Нашёл такой очень старый баг https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=113543, там пишут, что должно помочь RES_OPTIONS=inet6, но не помогает: # RES_OPTIONS=inet6 getent hosts 127.0.0.1 localhost.localdomain localhost 127.0.0.1 localhost6.localdomain localhost6 Возможно потому что, как написано тут https://man.archlinux.org/man/resolv.conf.5.ru#inet6, inet6 уже устарело.
Это upstream bug. Ulrich Drepper когда-то в 2008 решил, что и так сойдёт, и так вырастет. https://sourceware.org/git/?p=glibc.git;a=blob;f=nss/nss_files/files-hosts.c;hb=refs/tags/glibc-2.40#l58 Надо, конечно, если AF_UNSPEC (а туда будет передано именно такое значение), пробовать все address families по очереди (если inet_ntop определил AF_INET6, проверить ещё на AI_V4MAPPED), и только потом пытаться альтернативные формы искать. Короче, все ветки кода нужно перетрясти.