LINUX.ORG.RU

gethostbyname segfault


0

0

Hi all!

Обнаружилось довольно любопытное явление: 
на новых Линуксах (ядрo 2.4.18 libc 2.2.5 , ядрo 2.4.17-z1 libc 2.2.2
и еще куча -- все ядра 2.4.x) статически слинкованная программа,
вызывающая gethostbyname с несуществующим символич. адресом, валится
по SIGSEGV. Динамически слинкованная - все ок.

Дело, видимо, в ядре. На ядрах 2.0.x и 2.2.x явление не наблюдалось,
Более того, прога, статически линкованная c libc 2.1.3 под ядром 2.2.16,
при вызове gethostbyname сразу валится, если резолвится символич.
имя, не прописанное в /etc/hosts. Если IPшник - все ok.

Кто сталкивался? Куда про баг писать?

З.Ы.
Кто не верит - попробуйте статически любую Xовую прогу слинковать,
и дайте ей -display ququ:0.0 Или поиграйте:

#include <netdb.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  struct hostent *hp;
  if( (argc<2)||( (hp=gethostbyname(argv[1]))==NULL) ){
     printf("NULL\n"); return 1;
  }else
     printf("%s\n",inet_ntoa(*(struct in_addr *)(hp->h_addr))   );
  return 0;
}

Компилить:
gcc -Xlinker -Bstatic try.c
★★★★★

> прога, статически линкованная c libc 2.1.3 под ядром 2.2.16,
> при вызове gethostbyname сразу валится, если резолвится символич.
> имя, не прописанное в /etc/hosts.
Имелось в виду - "прога, статически линкованная c libc 2.1.3 под ядром
2.2.16 И ЗАПУЩЕННАЯ ПОД ЯДРОМ 2.4.18, при вызове gethostbyname сразу
валится..."

Die-Hard ★★★★★
() автор топика

Проблема, похоже, не с ядром, а с LDAP сервером. Но как ее решить
я не знаю.


Die-Hard ★★★★★
() автор топика

Эк я - тихо сам с собою:)

Короче, все ясно - надо на Бздю перефревать. Столь пионЭрской поделки,
как glibc2, я еще не видел.

man nsswitch.conf:
(в конце):
With Solaris, it isn't possible to link programs using the
NSS Service statically. With Linux, this is no problem.
(так, с гордостью...)

Орлы на полном серьезе ВРУЧНУЮ, минуя явные механизмы загрузки шареных
либ, втихаря грузят libnss_*.so.2 согласно nsswitch.conf. При этом,
ессно, тянется и ld-linux.so, и ... libc.so.6 :O). В статически
слинкованную прогу!! И - никакой возможности это запретить, никакой
защиты от левых модулей!!!

А если я НЕ хочу юзать NSS Service? Хрена, мы лучше знаем, что тебе
надо! Изволь ползовать наше гениальное техническое решение!

И подробно описано, как Васе Пупкину собрать свой модуль nss_vasya.
Что и проделала великолепная команда nss_ldap.

Die-Hard ★★★★★
() автор топика

Все, тема закрыта. Спасибо всем за большое кол-во мудрых советов и
стремление поделиться опытом;).

Дело было в чудаках-разработчиках GNU libc и libnss_ldap.so.
Последняя версия сего чуда,
http://www.padl.com/download/nss_ldap.tgz
ведет себя как дОлжно.

Die-Hard ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.