X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fac%2Fsocket.h;h=0f4ea6fc397154ef7970c0600b965494e12a89b7;hb=b8edf539f21664f84c9acbb006ffa26aa7cd4931;hp=8ab6dfe74e659570f0d5f754f1d996d54287267b;hpb=5d9f41e8dc233e627d194b1bfd1cab91305cd44d;p=openldap diff --git a/include/ac/socket.h b/include/ac/socket.h index 8ab6dfe74e..0f4ea6fc39 100644 --- a/include/ac/socket.h +++ b/include/ac/socket.h @@ -1,13 +1,17 @@ /* Generic socket.h */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2000 The OpenLDAP Foundation, Redwood City, California, USA +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2013 The OpenLDAP Foundation. * All rights reserved. * - * Redistribution and use in source and binary forms are permitted only - * as authorized by the OpenLDAP Public License. A copy of this - * license is available at http://www.OpenLDAP.org/license.html or - * in file LICENSE in the top-level directory of the distribution. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #ifndef _AC_SOCKET_H_ @@ -17,6 +21,12 @@ #include #endif +#ifdef HAVE_POLL_H +#include +#elif defined(HAVE_SYS_POLL_H) +#include +#endif + #ifdef HAVE_SYS_SOCKET_H #include @@ -52,10 +62,9 @@ #ifdef HAVE_WINSOCK2 #include +#include #elif HAVE_WINSOCK #include -#else -#define WSACleanup() #endif #ifdef HAVE_PCNFS @@ -74,20 +83,20 @@ #undef sock_errstr #define sock_errno() errno #define sock_errstr(e) STRERROR(e) +#define sock_errset(e) ((void) (errno = (e))) #ifdef HAVE_WINSOCK -# define tcp_close( s ) closesocket( s ) # define tcp_read( s, buf, len ) recv( s, buf, len, 0 ) # define tcp_write( s, buf, len ) send( s, buf, len, 0 ) # define ioctl( s, c, a ) ioctlsocket( (s), (c), (a) ) # define ioctl_t u_long -# define AC_SOCKET_INVALID ((unsigned int) ~0) +# define AC_SOCKET_INVALID ((unsigned int) -1) -# if SD_BOTH +# ifdef SD_BOTH # define tcp_close( s ) (shutdown( s, SD_BOTH ), closesocket( s )) -#else +# else # define tcp_close( s ) closesocket( s ) -#endif +# endif #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS @@ -95,8 +104,10 @@ #undef sock_errno #undef sock_errstr +#undef sock_errset #define sock_errno() WSAGetLastError() #define sock_errstr(e) ber_pvt_wsa_err2string(e) +#define sock_errset(e) WSASetLastError(e) LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int)); @@ -117,7 +128,7 @@ LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int)); # define tcp_write( s, buf, len ) netwrite( s, buf, len ) # endif /* NCSA */ -#elif HAVE_CLOSESOCKET +#elif defined(HAVE_CLOSESOCKET) # define tcp_close( s ) closesocket( s ) # ifdef __BEOS__ @@ -129,18 +140,18 @@ LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int)); # define tcp_read( s, buf, len) read( s, buf, len ) # define tcp_write( s, buf, len) write( s, buf, len ) -# if SHUT_RDWR +# ifdef SHUT_RDWR # define tcp_close( s ) (shutdown( s, SHUT_RDWR ), close( s )) -#else -# define tcp_close( s ) close( s ) -#endif +# else +# define tcp_close( s ) close( s ) +# endif #ifdef HAVE_PIPE /* - * Only use pipe() on systems where file and socket descriptors + * Only use pipe() on systems where file and socket descriptors * are interchangable */ -#define USE_PIPE HAVE_PIPE +# define USE_PIPE HAVE_PIPE #endif #endif /* MACOS */ @@ -157,7 +168,7 @@ LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int)); #endif #if !defined( HAVE_INET_ATON ) && !defined( inet_aton ) -#define inet_aton ldap_pvt_inet_aton +# define inet_aton ldap_pvt_inet_aton struct in_addr; LDAP_F (int) ldap_pvt_inet_aton LDAP_P(( const char *, struct in_addr * )); #endif @@ -187,4 +198,57 @@ LDAP_F (int) ldap_pvt_inet_aton LDAP_P(( const char *, struct in_addr * )); # endif #endif +#ifndef INET_ADDRSTRLEN +# define INET_ADDRSTRLEN 16 +#endif +#ifndef INET6_ADDRSTRLEN +# define INET6_ADDRSTRLEN 46 +#endif + +#if defined( HAVE_GETADDRINFO ) || defined( HAVE_GETNAMEINFO ) +# ifdef HAVE_GAI_STRERROR +# define AC_GAI_STRERROR(x) (gai_strerror((x))) +# else +# define AC_GAI_STRERROR(x) (ldap_pvt_gai_strerror((x))) + LDAP_F (char *) ldap_pvt_gai_strerror( int ); +# endif +#endif + +#if defined(LDAP_PF_LOCAL) && \ + !defined(HAVE_GETPEEREID) && \ + !defined(HAVE_GETPEERUCRED) && \ + !defined(SO_PEERCRED) && !defined(LOCAL_PEERCRED) && \ + defined(HAVE_SENDMSG) && (defined(HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTSLEN) || \ + defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL)) +# define LDAP_PF_LOCAL_SENDMSG 1 +#endif + +#ifdef HAVE_GETPEEREID +#define LUTIL_GETPEEREID( s, uid, gid, bv ) getpeereid( s, uid, gid ) +#elif defined(LDAP_PF_LOCAL_SENDMSG) +struct berval; +LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t *, struct berval *bv ); +#define LUTIL_GETPEEREID( s, uid, gid, bv ) lutil_getpeereid( s, uid, gid, bv ) +#else +LDAP_LUTIL_F( int ) lutil_getpeereid( int s, uid_t *, gid_t * ); +#define LUTIL_GETPEEREID( s, uid, gid, bv ) lutil_getpeereid( s, uid, gid ) +#endif + +/* DNS RFC defines max host name as 255. New systems seem to use 1024 */ +#ifndef NI_MAXHOST +#define NI_MAXHOST 256 +#endif + +#ifdef HAVE_POLL +# ifndef INFTIM +# define INFTIM (-1) +# endif +#undef POLL_OTHER +#define POLL_OTHER (POLLERR|POLLHUP) +#undef POLL_READ +#define POLL_READ (POLLIN|POLLPRI|POLL_OTHER) +#undef POLL_WRITE +#define POLL_WRITE (POLLOUT|POLL_OTHER) +#endif + #endif /* _AC_SOCKET_H_ */