https://bugs.winehq.org/show_bug.cgi?id=40865
Bug ID: 40865 Summary: Steam needs to be online to update. Please confirm your network connection and try again. Product: Wine Version: 1.9.12 Hardware: x86 OS: NetBSD Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: adrien_fernandes2@hotmail.com
Created attachment 54877 --> https://bugs.winehq.org/attachment.cgi?id=54877 WINEDEBUG=+winhttp,+wininit,+winsock,+teh,+sid wine Steam.exe
Steam can not fetch client (http problem ?). I don't think it is because it can't find my network, I was using mupen64pp.exe and I successfully joined a friend online to play with him.
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com --- Created attachment 54883 --> https://bugs.winehq.org/attachment.cgi?id=54883 debug patch
Please attach a new +winsock with the attached patch.
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #2 from Bruno Jesus 00cpxxx@gmail.com --- Created attachment 54884 --> https://bugs.winehq.org/attachment.cgi?id=54884 patch
I'm guessing the problem could be gethostbyname_r returning ENOBUFS instead of ERANGE so the attached patch should help if this is the case, if not try the debug patch.
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #3 from Adrien Fernandes adrien_fernandes2@hotmail.com --- Created attachment 54927 --> https://bugs.winehq.org/attachment.cgi?id=54927 (patched) WINEDEBUG=+winhttp,+wininit,+winsock,+teh,+sid wine Steam.exe
It didn't work with your second patch so here is the output with your first patch.
https://bugs.winehq.org/show_bug.cgi?id=40865
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Steam needs to be online to |Steam does not connect to |update. Please confirm your |internet (gethostbyname_r |network connection and try |does not return ERANGE in |again. |NetBSD) Component|-unknown |winsock
--- Comment #4 from Bruno Jesus 00cpxxx@gmail.com --- Thanks for both tests, this is very interesting. In GNU/Linux we expect the function to return ERANGE in order to keep reallocating memory until the function is satisfied. But in NetBSD it seems like they use a different approach of returning "non-zero" and setting locerr to ENOBUFS. I could not find the man for this function in NetBSD. What version of NetBSD are you using?
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #5 from Adrien Fernandes adrien_fernandes2@hotmail.com --- NetBSD 7.0.1 (GENERIC.201605221355Z) i386 It is the stable version
https://bugs.winehq.org/show_bug.cgi?id=40865
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |00cpxxx@gmail.com
--- Comment #6 from Bruno Jesus 00cpxxx@gmail.com --- (In reply to Adrien Fernandes from comment #5)
NetBSD 7.0.1 (GENERIC.201605221355Z) i386 It is the stable version
Thanks, I downloaded and installed it and gethostbyname_r is not documented anywhere, it is not even in header files. Maybe it was introduced recently, can you open a sister bug with NetBSD and quote or link to this comment and comment 4 to check what they have to tell us about it please?
If they just introduced the function and want it to be a drop-in replacement for the GNU/Linux function I guess they still have time to change the function.
I never used NetBSD so I may be very well doing something wrong too.
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #7 from Adrien Fernandes adrien_fernandes2@hotmail.com --- http://mail-index.netbsd.org/netbsd-users/2016/06/29/msg018649.html
https://bugs.winehq.org/show_bug.cgi?id=40865
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |major Status|UNCONFIRMED |NEW Summary|Steam does not connect to |Steam does not connect to |internet (gethostbyname_r |internet (gethostbyname_r |does not return ERANGE in |used even when not declared |NetBSD) |in netdb.h) Ever confirmed|0 |1
--- Comment #8 from Bruno Jesus 00cpxxx@gmail.com --- (In reply to Adrien Fernandes from comment #7)
http://mail-index.netbsd.org/netbsd-users/2016/06/29/msg018649.html
Thanks. I just saw Christos Zoulas reply but I don't know how to reply to his specific message. I'll quote him here:
==========
gethostbyname_r()/gethostbyaddr_r() are not documented for a reason; they are non-standard. There are at least 3 flavors out there last time I checked, and portable code should not be using them. I implemented them in NetBSD just to use them inside getaddrinfo()/getnameinfo(). I chose not to hide them completely and that was probably a bad decision seeing that some auto-configuration schemes look for functions in libc and then try to use the functions (even when they are no headers describing the functions; I'd really like to know how do they deduce the arguments...) Why doesn't wine use those instead (getaddrinfo()/getnameinfo())?
==========
I believe this is a bug in Wine's side because the function is not present in netdb.h as expected so the configure check does generate a warning (just tested). Maybe we can add -Werror to this specific check (is it possible?) which would ensure the function will not be used when it is linkable but not declared anywhere.
I just looked further about gethostbyname_r and it seems like there is at least one variation where the function returns a struct hostent * instead of an int [1].
So we need to be more careful in this case as it is not only used in winsock but also in kernel32 (bug 40799).
This is major since any network related program will not be usable in NetBSD.
[1] http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/g/gethostbyname...
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #9 from Bruno Jesus 00cpxxx@gmail.com --- Ok, everyone. I need help, even better, I need you to fix this bug if possible.
I looked into configure.ac but there is no precedent to this case as far as my limited knowledge goes. I tried to find a way to add -Werror to the compilation but failed, this should take 5 seconds for anyone used to change this file.
The check for gethostbyname_r is at line 2200, the test succeeds BUT must not (as the function is not declared in netdb.h), as the #define name implies HAVE_LINUX_GETHOSTBYNAME_R_6 must be LINUX only.
What about putting a #ifdef __linux__ in the test source?
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #10 from Henri Verbeet hverbeet@gmail.com --- (In reply to Bruno Jesus from comment #9)
The check for gethostbyname_r is at line 2200, the test succeeds BUT must not (as the function is not declared in netdb.h), as the #define name implies HAVE_LINUX_GETHOSTBYNAME_R_6 must be LINUX only.
What about putting a #ifdef __linux__ in the test source?
You'd want something like __GLIBC__ since it's more of a glibc feature than a Linux feature, but I think the right approach would be to just use getaddrinfo()/getnameinfo() instead of gethostbyname_r()/gethostbyaddr_r().
https://bugs.winehq.org/show_bug.cgi?id=40865
--- Comment #11 from Adrien Fernandes adrien_fernandes2@hotmail.com --- A NetBSD developer temporarily added this to the Makefile of our pkgsrc package.
CONFIGURE_ARGS.NetBSD+= wine_cv_linux_gethostbyname_r_6=no
It seems to do the job but the developer also told me that it could creates some new problems about resolving hostnames (no problem actually on Steam).
https://bugs.winehq.org/show_bug.cgi?id=40865
Alistair Leslie-Hughes leslie_alistair@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch
https://bugs.winehq.org/show_bug.cgi?id=40865
Alistair Leslie-Hughes leslie_alistair@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #54884|0 |1 is patch| |
https://bugs.winehq.org/show_bug.cgi?id=40865
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dark.shadow4@web.de
--- Comment #12 from Fabian Maurer dark.shadow4@web.de --- Is this still a problem as of wine 7.0-rc5?
https://bugs.winehq.org/show_bug.cgi?id=40865
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |austinenglish@gmail.com
--- Comment #13 from Austin English austinenglish@gmail.com --- (In reply to Fabian Maurer from comment #12)
Is this still a problem as of wine 7.0-rc5?
Probably. On NetBSD 9.2 (i386), bug 51843 is still present, in wine-7.12.
I can't build wine because of that, so can't explicitly test this.