Bug 5732

Summary: Не работает resolve из-под WINE приложений на ALTLinux 64
Product: WINE@Etersoft Reporter: Денис Баранов <baraka>
Component: Сетевые возможности ; TCP/IPAssignee: Devaev Maxim <mdevaev>
Status: CLOSED FIXED QA Contact: Денис Баранов <baraka>
Severity: minor    
Priority: P4 CC: amorozov, lav, night
Version: 1.0.12   
Target Milestone: ---   
Hardware: PC   
OS: ALT Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5991    

Description Денис Баранов 2010-07-06 15:57:10 MSD
WINE@Etersoft eter6.10/eter11
При попытке выполнить ping из $ wineconsole cmd на ALTLinux 64(тестировал на builder64) выдается unknow host
Хотя на 32 битном ALTLinux и на Ubuntu 64 работает без проблем.
Comment 1 Devaev Maxim 2010-11-09 20:24:13 MSK
Для проверки использовал код с примером из MSDN: http://msdn.microsoft.com/en-us/library/ms738524(VS.85).aspx , который так же воспроизвел данную проблему.

Она заключалась в неработающих функциях gethostbyname и gethostbyaddr. В dll socket.c они использовали линуксовые gethostbyname_r и gethostbyaddr_r
После отладок я выяснил, что ping.exe.so слинкован только с такими либами:
----------
[mdevaev@builder64 ping]$ ldd ping.exe.so 
        libwine.so.1 => /usr/lib/libwine.so.1 (0xb7e5a000)
        libc.so.6 => /lib/libc.so.6 (0xb7d02000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7cfd000)
        /lib/ld-linux.so.2 (0x00477000)
----------
Функции gethostbyname_r  и gethostbyaddr_r находились в libnss.so, которая динамически подгружается в glibc. Пути загрузки выглядели так:
----------
open("/lib/tls/libnss_dns.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                           
open("/lib/i686/libnss_dns.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                          
open("/lib/libnss_dns.so.2", O_RDONLY)  = -1 ENOENT (No such file or directory)                                                                              
open("/usr/lib/tls/libnss_dns.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_dns.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
----------
То есть, программа пыталась получить доступ к 32-битным либам. В случае использования builder64 эти либы не были установлены. Проблема решилась установкой пакета glibc-nss.i586.
Comment 2 Денис Баранов 2010-12-03 18:55:34 MSK
Принято.