diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c index cc358ceefc..d5bd6715bf 100644 --- a/libraries/libldap/os-ip.c +++ b/libraries/libldap/os-ip.c @@ -5,69 +5,29 @@ * os-ip.c -- platform-specific TCP & UDP related code */ -#ifndef lint -static char copyright[] = "@(#) Copyright (c) 1995 Regents of the University of Michigan.\nAll rights reserved.\n"; -#endif +#include "portable.h" #include #include -#include -#include -#ifdef _WIN32 +#include +#include +#include +#include +#include + +#ifdef HAVE_IO_H #include -#include "msdos.h" -#else /* _WIN32 */ -#include -#include -#include -#include -#include -#include -#include -#endif /* _WIN32 */ -#ifdef _AIX -#include -#endif /* _AIX */ -#ifdef VMS -#include "ucx_select.h" -#endif /* VMS */ +#endif /* HAVE_IO_H */ + +#if defined( HAVE_SYS_FILIO_H ) +#include +#elif defined( HAVE_SYS_IOCTL_H ) +#include +#endif -#include "portable.h" #include "lber.h" #include "ldap.h" - -#ifdef LDAP_REFERRALS -#ifdef USE_SYSCONF -#include -#endif /* USE_SYSCONF */ -#ifdef notyet -#ifdef NEED_FILIO -#include -#else /* NEED_FILIO */ -#include -#endif /* NEED_FILIO */ -#endif /* notyet */ -#endif /* LDAP_REFERRALS */ - -#ifdef MACOS -#define tcp_close( s ) tcpclose( s ) -#else /* MACOS */ -#ifdef DOS -#ifdef PCNFS -#define tcp_close( s ) close( s ) -#endif /* PCNFS */ -#ifdef NCSA -#define tcp_close( s ) netclose( s ); netshut() -#endif /* NCSA */ -#ifdef WINSOCK -#define tcp_close( s ) closesocket( s ); WSACleanup(); -#endif /* WINSOCK */ -#else /* DOS */ -#define tcp_close( s ) close( s ) -#endif /* DOS */ -#endif /* MACOS */ - #include "ldap-int.h" int @@ -92,13 +52,17 @@ ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, #endif /* notyet */ Debug( LDAP_DEBUG_TRACE, "ldap_connect_to_host: %s:%d\n", - ( host == NULL ) ? "(by address)" : host, ntohs( port ), 0 ); + ( host == NULL ) ? "(by address)" : host, (int) ntohs( (short) port ), 0 ); connected = use_hp = 0; if ( host != NULL && ( address = inet_addr( host )) == -1 ) { if ( (hp = gethostbyname( host )) == NULL ) { +#ifdef HAVE_WINSOCK + errno = WSAGetLastError(); +#else errno = EHOSTUNREACH; /* not exactly right, but... */ +#endif return( -1 ); } use_hp = 1; @@ -131,6 +95,9 @@ ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, rc = 0; break; } else { +#ifdef HAVE_WINSOCK + errno = WSAGetLastError(); +#endif #ifdef notyet #ifdef LDAP_REFERRALS #ifdef EAGAIN @@ -151,7 +118,7 @@ ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, perror( (char *)inet_ntoa( sin.sin_addr )); } #endif - close( s ); + tcp_close( s ); if ( !use_hp ) { break; } @@ -172,7 +139,7 @@ ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, #endif /* notyet */ Debug( LDAP_DEBUG_TRACE, "sd %d connected to: %s\n", - s, inet_ntoa( sin.sin_addr ), 0 ); + s, (char *) inet_ntoa( sin.sin_addr ), 0 ); } return( rc ); @@ -186,7 +153,7 @@ ldap_close_connection( Sockbuf *sb ) } -#ifdef KERBEROS +#ifdef HAVE_KERBEROS char * ldap_host_connected_to( Sockbuf *sb ) { @@ -215,7 +182,7 @@ ldap_host_connected_to( Sockbuf *sb ) return( NULL ); } -#endif /* KERBEROS */ +#endif /* HAVE_KERBEROS */ #ifdef LDAP_REFERRALS @@ -236,7 +203,7 @@ ldap_mark_select_write( LDAP *ld, Sockbuf *sb ) sip = (struct selectinfo *)ld->ld_selectinfo; if ( !FD_ISSET( sb->sb_sd, &sip->si_writefds )) { - FD_SET( sb->sb_sd, &sip->si_writefds ); + FD_SET( (u_int) sb->sb_sd, &sip->si_writefds ); } } @@ -249,7 +216,7 @@ ldap_mark_select_read( LDAP *ld, Sockbuf *sb ) sip = (struct selectinfo *)ld->ld_selectinfo; if ( !FD_ISSET( sb->sb_sd, &sip->si_readfds )) { - FD_SET( sb->sb_sd, &sip->si_readfds ); + FD_SET( (u_int) sb->sb_sd, &sip->si_readfds ); } } @@ -261,8 +228,8 @@ ldap_mark_select_clear( LDAP *ld, Sockbuf *sb ) sip = (struct selectinfo *)ld->ld_selectinfo; - FD_CLR( sb->sb_sd, &sip->si_writefds ); - FD_CLR( sb->sb_sd, &sip->si_readfds ); + FD_CLR( (u_int) sb->sb_sd, &sip->si_writefds ); + FD_CLR( (u_int) sb->sb_sd, &sip->si_readfds ); } @@ -319,9 +286,9 @@ do_ldap_select( LDAP *ld, struct timeval *timeout ) Debug( LDAP_DEBUG_TRACE, "do_ldap_select\n", 0, 0, 0 ); if ( tblsize == 0 ) { -#ifdef USE_SYSCONF +#if defined( HAVE_SYSCONF ) tblsize = sysconf( _SC_OPEN_MAX ); -#else /* !USE_SYSCONF */ +#elif defined( HAVE_GETDTABLESIZE ) tblsize = getdtablesize(); #endif /* !USE_SYSCONF */ diff --git a/libraries/libldbm/ldbm.c b/libraries/libldbm/ldbm.c index d4ff0d395c..df3bb6d57c 100644 --- a/libraries/libldbm/ldbm.c +++ b/libraries/libldbm/ldbm.c @@ -6,12 +6,262 @@ * - DB_DBT_MALLOC ; 1998/03/22, /KSp */ +#include "portable.h" + +#ifdef SLAPD_LDBM + #include +#include +#include + #include "ldbm.h" -#ifdef LDBM_USE_GDBM +#if defined( LDBM_USE_DBHASH ) || defined( LDBM_USE_DBBTREE ) + +/***************************************************************** + * * + * use berkeley db hash or btree package * + * * + *****************************************************************/ + +#ifdef HAVE_BERKELEY_DB2 +/************************************************* + * * + * A malloc routine for use with DB_DBT_MALLOC * + * * + *************************************************/ + +void * +ldbm_malloc( size_t size ) +{ + return( calloc( 1, size )); +} + +#endif + + +LDBM +ldbm_open( char *name, int rw, int mode, int dbcachesize ) +{ + LDBM ret = NULL; + +#ifdef HAVE_BERKELEY_DB2 + DB_INFO dbinfo; + + memset( &dbinfo, 0, sizeof( dbinfo )); + dbinfo.db_cachesize = dbcachesize; + dbinfo.db_pagesize = DEFAULT_DB_PAGE_SIZE; + dbinfo.db_malloc = ldbm_malloc; + + db_open( name, DB_TYPE, rw, mode, NULL, &dbinfo, &ret ); + +#else + void *info; + BTREEINFO binfo; + HASHINFO hinfo; + + if ( DB_TYPE == DB_HASH ) { + memset( (char *) &hinfo, '\0', sizeof(hinfo) ); + hinfo.cachesize = dbcachesize; + info = &hinfo; + } else if ( DB_TYPE == DB_BTREE ) { + memset( (char *) &binfo, '\0', sizeof(binfo) ); + binfo.cachesize = dbcachesize; + info = &binfo; + } else { + info = NULL; + } + + ret = dbopen( name, rw, mode, DB_TYPE, info ); + +#endif + + return( ret ); +} + +void +ldbm_close( LDBM ldbm ) +{ +#ifdef HAVE_BERKELEY_DB2 + (*ldbm->close)( ldbm, 0 ); +#else + (*ldbm->close)( ldbm ); +#endif +} + +void +ldbm_sync( LDBM ldbm ) +{ + (*ldbm->sync)( ldbm, 0 ); +} + +void +ldbm_datum_free( LDBM ldbm, Datum data ) +{ + free( data.dptr ); +} + +Datum +ldbm_datum_dup( LDBM ldbm, Datum data ) +{ + Datum dup; + +#ifdef HAVE_BERKELEY_DB2 + memset( &dup, 0, sizeof( dup )); +#endif + + if ( data.dsize == 0 ) { + dup.dsize = 0; + dup.dptr = NULL; + + return( dup ); + } + dup.dsize = data.dsize; + if ( dup.dptr = (char *) malloc( data.dsize ) ) + memcpy( dup.dptr, data.dptr, data.dsize ); + + return( dup ); +} + +Datum +ldbm_fetch( LDBM ldbm, Datum key ) +{ + Datum data; + int rc; + +#ifdef HAVE_BERKELEY_DB2 + memset( &data, 0, sizeof( data )); + + data.flags = DB_DBT_MALLOC; + + if ( (rc = (*ldbm->get)( ldbm, NULL, &key, &data, 0 )) != 0 ) { + if ( data.dptr ) free( data.dptr ); +#else + if ( (rc = (*ldbm->get)( ldbm, &key, &data, 0 )) == 0 ) { + data = ldbm_datum_dup( ldbm, data ); + } else { +#endif + data.dptr = NULL; + data.dsize = 0; + } + + return( data ); +} + +int +ldbm_store( LDBM ldbm, Datum key, Datum data, int flags ) +{ + int rc; + +#ifdef HAVE_BERKELEY_DB2 + rc = (*ldbm->put)( ldbm, NULL, &key, &data, flags & ~LDBM_SYNC ); + rc = (-1 ) * rc; +#else + rc = (*ldbm->put)( ldbm, &key, &data, flags & ~LDBM_SYNC ); +#endif + if ( flags & LDBM_SYNC ) + (*ldbm->sync)( ldbm, 0 ); + return( rc ); +} + +int +ldbm_delete( LDBM ldbm, Datum key ) +{ + int rc; + +#ifdef HAVE_BERKELEY_DB2 + rc = (*ldbm->del)( ldbm, NULL, &key, 0 ); + rc = (-1 ) * rc; +#else + rc = (*ldbm->del)( ldbm, &key, 0 ); +#endif + (*ldbm->sync)( ldbm, 0 ); + return( rc ); +} + +Datum +#ifdef HAVE_BERKELEY_DB2 +ldbm_firstkey( LDBM ldbm, DBC **dbch ) +#else +ldbm_firstkey( LDBM ldbm ) +#endif +{ + Datum key, data; + int rc; + +#ifdef HAVE_BERKELEY_DB2 + DBC *dbci; + + memset( &key, 0, sizeof( key )); + memset( &data, 0, sizeof( data )); + + key.flags = data.flags = DB_DBT_MALLOC; + + /* acquire a cursor for the DB */ + if ( (*ldbm->cursor)( ldbm, NULL, &dbci )) { + return( key ); + } else { + *dbch = dbci; + if ( (*dbci->c_get)( dbci, &key, &data, DB_NEXT ) == 0 ) { + if ( data.dptr ) free( data.dptr ); +#else + if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_FIRST )) == 0 ) { + key = ldbm_datum_dup( ldbm, key ); +#endif + } else { + key.dptr = NULL; + key.dsize = 0; + } + +#ifdef HAVE_BERKELEY_DB2 + } +#endif + + return( key ); +} + +Datum +#ifdef HAVE_BERKELEY_DB2 +ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp ) +#else +ldbm_nextkey( LDBM ldbm, Datum key ) +#endif +{ + Datum data; + int rc; + +#ifdef HAVE_BERKELEY_DB2 + void *oldKey = key.dptr; + + memset( &data, 0, sizeof( data )); + + data.flags = DB_DBT_MALLOC; + + if ( (*dbcp->c_get)( dbcp, &key, &data, DB_NEXT ) == 0 ) { + if ( data.dptr ) free( data.dptr ); +#else + if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_NEXT )) == 0 ) { + key = ldbm_datum_dup( ldbm, key ); +#endif + } else { + key.dptr = NULL; + key.dsize = 0; + } +#ifdef HAVE_BERKELEY_DB2 + if ( oldKey ) free( oldKey ); +#endif + + return( key ); +} + +int +ldbm_errno( LDBM ldbm ) +{ + return( errno ); +} + +#elif defined( HAVE_GDBM ) -#include #include /***************************************************************** @@ -118,257 +368,7 @@ ldbm_errno( LDBM ldbm ) return( (int) gdbm_errno ); } -#else -#if defined( LDBM_USE_DBHASH ) || defined( LDBM_USE_DBBTREE ) - -/***************************************************************** - * * - * use berkeley db hash or btree package * - * * - *****************************************************************/ - -#ifdef LDBM_USE_DB2 -/************************************************* - * * - * A malloc routine for use with DB_DBT_MALLOC * - * * - *************************************************/ - -#include - - -void * -ldbm_malloc( size_t size ) -{ - return( calloc( 1, size )); -} - -#endif - - -LDBM -ldbm_open( char *name, int rw, int mode, int dbcachesize ) -{ - LDBM ret = NULL; - -#ifdef LDBM_USE_DB2 - DB_INFO dbinfo; - - memset( &dbinfo, 0, sizeof( dbinfo )); - dbinfo.db_cachesize = dbcachesize; - dbinfo.db_pagesize = DEFAULT_DB_PAGE_SIZE; - dbinfo.db_malloc = ldbm_malloc; - - db_open( name, DB_TYPE, rw, mode, NULL, &dbinfo, &ret ); - -#else - void *info; - BTREEINFO binfo; - HASHINFO hinfo; - - if ( DB_TYPE == DB_HASH ) { - memset( (char *) &hinfo, '\0', sizeof(hinfo) ); - hinfo.cachesize = dbcachesize; - info = &hinfo; - } else if ( DB_TYPE == DB_BTREE ) { - memset( (char *) &binfo, '\0', sizeof(binfo) ); - binfo.cachesize = dbcachesize; - info = &binfo; - } else { - info = NULL; - } - - ret = dbopen( name, rw, mode, DB_TYPE, info ); - -#endif - - return( ret ); -} - -void -ldbm_close( LDBM ldbm ) -{ -#ifdef LDBM_USE_DB2 - (*ldbm->close)( ldbm, 0 ); -#else - (*ldbm->close)( ldbm ); -#endif -} - -void -ldbm_sync( LDBM ldbm ) -{ - (*ldbm->sync)( ldbm, 0 ); -} - -void -ldbm_datum_free( LDBM ldbm, Datum data ) -{ - free( data.dptr ); -} - -Datum -ldbm_datum_dup( LDBM ldbm, Datum data ) -{ - Datum dup; - -#ifdef LDBM_USE_DB2 - memset( &dup, 0, sizeof( dup )); -#endif - - if ( data.dsize == 0 ) { - dup.dsize = 0; - dup.dptr = NULL; - - return( dup ); - } - dup.dsize = data.dsize; - if ( dup.dptr = (char *) malloc( data.dsize ) ) - memcpy( dup.dptr, data.dptr, data.dsize ); - - return( dup ); -} - -Datum -ldbm_fetch( LDBM ldbm, Datum key ) -{ - Datum data; - int rc; - -#ifdef LDBM_USE_DB2 - memset( &data, 0, sizeof( data )); - - data.flags = DB_DBT_MALLOC; - - if ( (rc = (*ldbm->get)( ldbm, NULL, &key, &data, 0 )) != 0 ) { - if ( data.dptr ) free( data.dptr ); -#else - if ( (rc = (*ldbm->get)( ldbm, &key, &data, 0 )) == 0 ) { - data = ldbm_datum_dup( ldbm, data ); - } else { -#endif - data.dptr = NULL; - data.dsize = 0; - } - - return( data ); -} - -int -ldbm_store( LDBM ldbm, Datum key, Datum data, int flags ) -{ - int rc; - -#ifdef LDBM_USE_DB2 - rc = (*ldbm->put)( ldbm, NULL, &key, &data, flags & ~LDBM_SYNC ); - rc = (-1 ) * rc; -#else - rc = (*ldbm->put)( ldbm, &key, &data, flags & ~LDBM_SYNC ); -#endif - if ( flags & LDBM_SYNC ) - (*ldbm->sync)( ldbm, 0 ); - return( rc ); -} - -int -ldbm_delete( LDBM ldbm, Datum key ) -{ - int rc; - -#ifdef LDBM_USE_DB2 - rc = (*ldbm->del)( ldbm, NULL, &key, 0 ); - rc = (-1 ) * rc; -#else - rc = (*ldbm->del)( ldbm, &key, 0 ); -#endif - (*ldbm->sync)( ldbm, 0 ); - return( rc ); -} - -Datum -#ifdef LDBM_USE_DB2 -ldbm_firstkey( LDBM ldbm, DBC **dbch ) -#else -ldbm_firstkey( LDBM ldbm ) -#endif -{ - Datum key, data; - int rc; - -#ifdef LDBM_USE_DB2 - DBC *dbci; - - memset( &key, 0, sizeof( key )); - memset( &data, 0, sizeof( data )); - - key.flags = data.flags = DB_DBT_MALLOC; - - /* acquire a cursor for the DB */ - if ( (*ldbm->cursor)( ldbm, NULL, &dbci )) { - return( key ); - } else { - *dbch = dbci; - if ( (*dbci->c_get)( dbci, &key, &data, DB_NEXT ) == 0 ) { - if ( data.dptr ) free( data.dptr ); -#else - if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_FIRST )) == 0 ) { - key = ldbm_datum_dup( ldbm, key ); -#endif - } else { - key.dptr = NULL; - key.dsize = 0; - } - -#ifdef LDBM_USE_DB2 - } -#endif - - return( key ); -} - -Datum -#ifdef LDBM_USE_DB2 -ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp ) -#else -ldbm_nextkey( LDBM ldbm, Datum key ) -#endif -{ - Datum data; - int rc; - -#ifdef LDBM_USE_DB2 - void *oldKey = key.dptr; - - memset( &data, 0, sizeof( data )); - - data.flags = DB_DBT_MALLOC; - - if ( (*dbcp->c_get)( dbcp, &key, &data, DB_NEXT ) == 0 ) { - if ( data.dptr ) free( data.dptr ); -#else - if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_NEXT )) == 0 ) { - key = ldbm_datum_dup( ldbm, key ); -#endif - } else { - key.dptr = NULL; - key.dsize = 0; - } -#ifdef LDBM_USE_DB2 - if ( oldKey ) free( oldKey ); -#endif - - return( key ); -} - -int -ldbm_errno( LDBM ldbm ) -{ - return( errno ); -} - -#else - -#ifdef LDBM_USE_NDBM +#elif defined( HAVE_NDBM ) /***************************************************************** * * @@ -457,5 +457,4 @@ ldbm_errno( LDBM ldbm ) } #endif /* ndbm */ -#endif /* db */ -#endif /* gdbm */ +#endif /* ldbm */