X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=clients%2Fgopher%2Fgo500gw.c;h=c1c5ab4a9ef47c556e3823f66d3ce195aedeb13f;hb=403f4479bc9f9a864122d4aeecf7284408918302;hp=e03bd4b4f821fd3559ecbc940e44857197d31e8e;hpb=ff23537bcb84998aa03156c89ee597ca02e86866;p=openldap diff --git a/clients/gopher/go500gw.c b/clients/gopher/go500gw.c index e03bd4b4f8..c1c5ab4a9e 100644 --- a/clients/gopher/go500gw.c +++ b/clients/gopher/go500gw.c @@ -1,3 +1,4 @@ +/* $OpenLDAP$ */ /* * Copyright (c) 1990 Regents of the University of Michigan. * All rights reserved. @@ -13,7 +14,8 @@ #include "portable.h" #include -#include + +#include #include #include @@ -35,19 +37,20 @@ #endif -#include "lber.h" -#include "ldap.h" +#include +#include #define ldap_debug debug #include "ldap_log.h" #include "lutil.h" -#include "disptmpl.h" -#include "ldapconfig.h" +#include "ldap_defaults.h" int debug; +int ldap_syslog; +int ldap_syslog_level; int dosyslog; int inetd; int dtblsize; @@ -61,10 +64,10 @@ char *templatefile = TEMPLATEFILE; char *friendlyfile = FRIENDLYFILE; int rdncount = GO500GW_RDNCOUNT; -static void usage ( char *name ); +static void usage ( char *name ) LDAP_GCCATTR((noreturn)); static int set_socket (int port); static RETSIGTYPE wait4child(int sig); -static void do_queries (int s); +static void do_queries (int s) LDAP_GCCATTR((noreturn)); static char *pick_oc ( char **oclist ); static int isnonleaf ( LDAP *ld, char **oclist, char *dn ); static void do_menu (LDAP *ld, FILE *fp, char *dn); @@ -72,7 +75,7 @@ static void do_list (LDAP *ld, FILE *fp, char *dn); static int isoc ( char **ocl, char *oc ); static int make_scope ( LDAP *ld, char *dn ); static void do_search (LDAP *ld, FILE *fp, char *query); -static int entry2textwrite( void *fp, char *buf, int len ); +static int entry2textwrite( void *fp, char *buf, ber_len_t len ); static void do_read (LDAP *ld, FILE *fp, char *dn); static void do_help (FILE *op); static void do_sizelimit(FILE *fp, char type); @@ -85,7 +88,7 @@ static void usage( char *name ) { fprintf( stderr, "usage: %s [-d debuglevel] [-I] [-p port] [-P ldapport] [-l]\r\n\t[-x ldaphost] [-a] [-h helpfile] [-f filterfile] [-t templatefile] [-c rdncount]\r\n", name ); - exit( 1 ); + exit( EXIT_FAILURE ); } int @@ -98,7 +101,7 @@ main (int argc, char **argv ) fd_set readfds; struct hostent *hp; struct sockaddr_in from; - int fromlen; + socklen_t fromlen; #if defined( LDAP_PROCTITLE ) && !defined( HAVE_SETPROCTITLE ) /* for setproctitle */ @@ -179,7 +182,7 @@ main (int argc, char **argv ) if ( myhost[0] == '\0' && gethostname( myhost, sizeof(myhost) ) == -1 ) { perror( "gethostname" ); - exit( 1 ); + exit( EXIT_FAILURE ); } #endif @@ -193,7 +196,7 @@ main (int argc, char **argv ) myname = strdup( myname + 1 ); if ( debug ) { - lber_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &debug); + ber_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &debug); ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &debug); } @@ -245,7 +248,7 @@ main (int argc, char **argv ) tcp_close( 0 ); - exit( 0 ); + exit( EXIT_SUCCESS ); } for ( ;; ) { @@ -266,7 +269,7 @@ main (int argc, char **argv ) if ( (ns = accept( s, (struct sockaddr *) &from, &fromlen )) == -1 ) { if ( debug ) perror( "accept" ); - exit( 1 ); + exit( EXIT_FAILURE ); } hp = gethostbyaddr( (char *) &(from.sin_addr.s_addr), @@ -310,30 +313,41 @@ set_socket( int port ) if ( (s = socket( AF_INET, SOCK_STREAM, 0 )) == -1 ) { perror( "socket" ); - exit( 1 ); + exit( EXIT_FAILURE ); } +#ifdef SO_REUSEADDR /* set option so clients can't keep us from coming back up */ - one = 1; + one = 1; if ( setsockopt( s, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(one) ) < 0 ) { perror( "setsockopt" ); - exit( 1 ); + exit( EXIT_FAILURE ); + } +#endif +#ifdef SO_KEEPALIVE + /* enable keep alives */ + one = 1; + if ( setsockopt( s, SOL_SOCKET, SO_KEEPALIVE, (char *) &one, + sizeof(one) ) < 0 ) { + perror( "setsockopt" ); + exit( EXIT_FAILURE ); } +#endif /* bind to a name */ addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons( port ); if ( bind( s, (struct sockaddr *) &addr, sizeof(addr) ) ) { perror( "bind" ); - exit( 1 ); + exit( EXIT_FAILURE ); } /* listen for connections */ if ( listen( s, 5 ) == -1 ) { perror( "listen" ); - exit( 1 ); + exit( EXIT_FAILURE ); } if ( debug ) @@ -376,7 +390,7 @@ do_queries( int s ) if ( (fp = fdopen( s, "a+")) == NULL ) { perror( "fdopen" ); - exit( 1 ); + exit( EXIT_FAILURE ); } timeout.tv_sec = GO500GW_TIMEOUT; @@ -385,16 +399,16 @@ do_queries( int s ) FD_SET( fileno( fp ), &readfds ); if ( (rc = select( dtblsize, &readfds, 0, 0, &timeout )) <= 0 ) - exit( 1 ); + exit( EXIT_FAILURE ); if ( fgets( buf, sizeof(buf), fp ) == NULL ) - exit( 1 ); + exit( EXIT_FAILURE ); len = strlen( buf ); if ( debug ) { fprintf( stderr, "got %d bytes\n", len ); #ifdef LDAP_DEBUG - lber_bprint( buf, len ); + ber_bprint( buf, len ); #endif } @@ -434,17 +448,17 @@ do_queries( int s ) fprintf( fp, ".\r\n" ); rewind(fp); - exit( 0 ); + exit( EXIT_SUCCESS ); /* NOT REACHED */ } - if ( (ld = ldap_open( ldaphost, ldapport )) == NULL ) { - if ( debug ) perror( "ldap_open" ); + if ( (ld = ldap_init( ldaphost, ldapport )) == NULL ) { + if ( debug ) perror( "ldap_init" ); fprintf(fp, "0An error occurred (explanation)\tE%d\t%s\t%d\r\n", LDAP_SERVER_DOWN, myhost, myport ); fprintf( fp, ".\r\n" ); rewind(fp); - exit( 1 ); + exit( EXIT_FAILURE ); } deref = LDAP_DEREF_ALWAYS; @@ -460,7 +474,7 @@ do_queries( int s ) rc, myhost, myport ); fprintf( fp, ".\r\n" ); rewind(fp); - exit( 1 ); + exit( EXIT_FAILURE ); } switch ( *query++ ) { @@ -484,7 +498,7 @@ do_queries( int s ) fprintf( fp, ".\r\n" ); rewind(fp); - exit( 0 ); + exit( EXIT_SUCCESS ); /* NOT REACHED */ } @@ -726,7 +740,7 @@ do_search( LDAP *ld, FILE *fp, char *query ) if ( (filter = strchr( query, '\t' )) == NULL ) { fprintf( fp, "3Missing filter!\r\n" ); - exit( 1 ); + exit( EXIT_FAILURE ); } *filter++ = '\0'; base = query; @@ -754,7 +768,7 @@ do_search( LDAP *ld, FILE *fp, char *query ) #endif if ( (scope = make_scope( ld, base )) == -1 ) { fprintf( fp, "3Bad scope\r\n" ); - exit( 1 ); + exit( EXIT_FAILURE ); } filtertype = (scope == LDAP_SCOPE_ONELEVEL ? @@ -768,7 +782,7 @@ do_search( LDAP *ld, FILE *fp, char *query ) if ( (filtd = ldap_init_getfilter( filterfile )) == NULL ) { fprintf( stderr, "Cannot open filter file (%s)\n", filterfile ); - exit( 1 ); + exit( EXIT_FAILURE ); } count = 0; @@ -848,7 +862,7 @@ do_search( LDAP *ld, FILE *fp, char *query ) static int -entry2textwrite( void *fp, char *buf, int len ) +entry2textwrite( void *fp, char *buf, ber_len_t len ) { return( fwrite( buf, len, 1, (FILE *)fp ) == 0 ? -1 : len ); } @@ -867,8 +881,8 @@ do_read( LDAP *ld, FILE *fp, char *dn ) ldap_get_option(ld, LDAP_OPT_ERROR_NUMBER, &ld_errno); fprintf(fp, - "0An error occurred (explanation)\t@%d\t%s\t%d\r\n", - ld_errno, myhost, myport ); + "0An error occurred (explanation)\t@%s\t%s\t%d\r\n", + ldap_err2string( ld_errno ), myhost, myport ); } if ( tmpllist != NULL ) {