1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-22 16:23:49 +03:00

libreplace: Add tests for connect and gethostbyname.

Provide dummy replacements when a function isnt found.
The functions are also searched for in certain libraries,
and variables SOCKET_LIBS and NSL_LIBS are set accordingly.

One purpose of this is to fix the getifaddrs tests on
systems where e.g. the socket calls require special libs
for linking.

Michael
This commit is contained in:
Michael Adam
2008-02-26 13:24:54 +01:00
parent 85f707c6ab
commit 900d17acb9
5 changed files with 96 additions and 0 deletions

View File

@@ -344,6 +344,7 @@ m4_include(getpass.m4)
m4_include(strptime.m4) m4_include(strptime.m4)
m4_include(win32.m4) m4_include(win32.m4)
m4_include(timegm.m4) m4_include(timegm.m4)
m4_include(socket.m4)
m4_include(inet_ntop.m4) m4_include(inet_ntop.m4)
m4_include(inet_pton.m4) m4_include(inet_pton.m4)
m4_include(getaddrinfo.m4) m4_include(getaddrinfo.m4)

View File

@@ -340,6 +340,16 @@ ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
/* prototype is in "system/network.h" */ /* prototype is in "system/network.h" */
#endif #endif
#ifndef HAVE_CONNECT
#define connect rep_connect
/* prototype is in "system/network.h" */
#endif
#ifndef HAVE_GETHOSTBYNAME
#define gethostbyname rep_gethostbyname
/* prototype is in "system/network.h" */
#endif
#ifndef HAVE_GETIFADDRS #ifndef HAVE_GETIFADDRS
#define getifaddrs rep_getifaddrs #define getifaddrs rep_getifaddrs
/* prototype is in "system/network.h" */ /* prototype is in "system/network.h" */

View File

@@ -0,0 +1,35 @@
/*
* Unix SMB/CIFS implementation.
*
* Dummy replacements for socket functions.
*
* Copyright (C) Michael Adam <obnox@samba.org> 2008
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "replace.h"
#include "system/network.h"
int rep_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
{
errno = ENOSYS;
return -1;
}
struct hostent *rep_gethostbyname(const char *name)
{
errno = ENOSYS;
return NULL;
}

View File

@@ -0,0 +1,40 @@
dnl The following test is roughl taken from the cvs sources.
dnl
dnl If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
dnl The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
dnl libsocket.so which has a bad implementation of gethostbyname (it
dnl only looks in /etc/hosts), so we only look for -lsocket if we need
dnl it.
AC_CHECK_FUNCS(connect)
if test x"$ac_cv_func_connect" = x"no"; then
AC_CHECK_LIB_EXT(nsl_s, SOCKET_LIBS, connect)
AC_CHECK_LIB_EXT(nsl, SOCKET_LIBS, connect)
AC_CHECK_LIB_EXT(socket, SOCKET_LIBS, connect)
AC_CHECK_LIB_EXT(inet, SOCKET_LIBS, connect)
dnl We can't just call AC_CHECK_FUNCS(connect) here,
dnl because the value has been cached.
if test x"$ac_cv_lib_ext_nsl_s_connect" = x"yes" ||
test x"$ac_cv_lib_ext_nsl_connect" = x"yes" ||
test x"$ac_cv_lib_ext_socket_connect" = x"yes" ||
test x"$ac_cv_lib_ext_inet_connect" = x"yes"
then
AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
fi
fi
AC_CHECK_FUNCS(gethostbyname)
if test x"$ac_cv_func_gethostbyname" = x"no"; then
AC_CHECK_LIB_EXT(nsl_s, NSL_LIBS, gethostbyname)
AC_CHECK_LIB_EXT(nsl, NSL_LIBS, gethostbyname)
AC_CHECK_LIB_EXT(socket, NSL_LIBS, gethostbyname)
dnl We can't just call AC_CHECK_FUNCS(gethostbyname) here,
dnl because the value has been cached.
if test x"$ac_cv_lib_ext_nsl_s_gethostbyname" = x"yes" ||
test x"$ac_cv_lib_ext_nsl_gethostbyname" = x"yes" ||
test x"$ac_cv_lib_ext_socket_gethostbyname" = x"yes"
then
AC_DEFINE(HAVE_GETHOSTBYNAME,1,
[Whether the system has gethostbyname()])
fi
fi

View File

@@ -103,6 +103,16 @@ int rep_inet_pton(int af, const char *src, void *dst);
const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size); const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size);
#endif #endif
#ifndef HAVE_CONNECT
/* define is in "replace.h" */
int rep_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
#endif
#ifndef HAVE_GETHOSTBYNAME
/* define is in "replace.h" */
struct hostent *rep_gethostbyname(const char *name);
#endif
#ifdef HAVE_IFADDRS_H #ifdef HAVE_IFADDRS_H
#include <ifaddrs.h> #include <ifaddrs.h>
#endif #endif