diff --git a/servers/slurpd/config.c b/servers/slurpd/config.c index 308a4edd42104e28eb5cf928f926cf734dec297c..d56ca94f781e2285ca78d3cec48be7e71286abe1 100644 --- a/servers/slurpd/config.c +++ b/servers/slurpd/config.c @@ -34,7 +34,7 @@ #include "slurp.h" #include "globals.h" -#define MAXARGS 100 +#define MAXARGS 500 /* Forward declarations */ static void add_replica LDAP_P(( char **, int )); @@ -259,13 +259,17 @@ getline( CATLINE( buf ); while ( fgets( buf, sizeof(buf), fp ) != NULL ) { if ( (p = strchr( buf, '\n' )) != NULL ) { - *p = '\0'; + if( p > buf && p[-1] == '\r' ) --p; + *p = '\0'; } lineno++; if ( ! isspace( (unsigned char) buf[0] ) ) { return( line ); } + /* change leading whitespace to space */ + buf[0] = ' '; + CATLINE( buf ); } buf[0] = '\0'; diff --git a/servers/slurpd/ldap_op.c b/servers/slurpd/ldap_op.c index d02af7d1ce1d13064dfe9b0b1171c48a3cc52942..4e60debe6b9b5e4af5993fc12533dafa363aeb65 100644 --- a/servers/slurpd/ldap_op.c +++ b/servers/slurpd/ldap_op.c @@ -49,7 +49,7 @@ static int do_unbind LDAP_P(( Ri * )); /* * Determine the type of ldap operation being performed and call the * appropriate routine. - * - If successful, returns ERR_DO_LDAP_OK + * - If successful, returns DO_LDAP_OK * - If a retryable error occurs, ERR_DO_LDAP_RETRYABLE is returned. * The caller should wait a while and retry the operation. * - If a fatal error occurs, ERR_DO_LDAP_FATAL is returned. The caller @@ -58,88 +58,92 @@ static int do_unbind LDAP_P(( Ri * )); */ int do_ldap( - Ri *ri, - Re *re, - char **errmsg + Ri *ri, + Re *re, + char **errmsg ) { - int rc = 0; - int lderr = LDAP_SUCCESS; - int retry = 2; + int retry = 2; + *errmsg = NULL; - *errmsg = NULL; + do { + int lderr; + if ( ri->ri_ldp == NULL ) { + lderr = do_bind( ri, &lderr ); - while ( retry > 0 ) { - if ( ri->ri_ldp == NULL ) { - rc = do_bind( ri, &lderr ); + if ( lderr != BIND_OK ) { + return DO_LDAP_ERR_RETRYABLE; + } + } - if ( rc != BIND_OK ) { - return DO_LDAP_ERR_RETRYABLE; - } - } + switch ( re->re_changetype ) { + case T_ADDCT: + lderr = op_ldap_add( ri, re, errmsg ); + if ( lderr != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, + "Error: ldap_add_s failed adding \"%s\": %s\n", + *errmsg ? *errmsg : ldap_err2string( lderr ), + re->re_dn, 0 ); + } + break; + + case T_MODIFYCT: + lderr = op_ldap_modify( ri, re, errmsg ); + if ( lderr != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, + "Error: ldap_modify_s failed modifying \"%s\": %s\n", + *errmsg ? *errmsg : ldap_err2string( lderr ), + re->re_dn, 0 ); + } + break; + + case T_DELETECT: + lderr = op_ldap_delete( ri, re, errmsg ); + if ( lderr != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, + "Error: ldap_delete_s failed deleting \"%s\": %s\n", + *errmsg ? *errmsg : ldap_err2string( lderr ), + re->re_dn, 0 ); + } + break; + + case T_MODRDNCT: + lderr = op_ldap_modrdn( ri, re, errmsg ); + if ( lderr != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, + "Error: ldap_modrdn_s failed modifying %s: %s\n", + *errmsg ? *errmsg : ldap_err2string( lderr ), + re->re_dn, 0 ); + } + break; - switch ( re->re_changetype ) { - case T_ADDCT: - lderr = op_ldap_add( ri, re, errmsg ); - if ( lderr != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, - "Error: ldap_add_s failed adding \"%s\": %s\n", - *errmsg ? *errmsg : ldap_err2string( lderr ), - re->re_dn, 0 ); - } - break; - case T_MODIFYCT: - lderr = op_ldap_modify( ri, re, errmsg ); - if ( lderr != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, - "Error: ldap_modify_s failed modifying \"%s\": %s\n", - *errmsg ? *errmsg : ldap_err2string( lderr ), - re->re_dn, 0 ); - } - break; - case T_DELETECT: - lderr = op_ldap_delete( ri, re, errmsg ); - if ( lderr != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, - "Error: ldap_delete_s failed deleting \"%s\": %s\n", - *errmsg ? *errmsg : ldap_err2string( lderr ), - re->re_dn, 0 ); - } - break; - case T_MODRDNCT: - lderr = op_ldap_modrdn( ri, re, errmsg ); - if ( lderr != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, - "Error: ldap_modrdn_s failed modifying %s: %s\n", - *errmsg ? *errmsg : ldap_err2string( lderr ), - re->re_dn, 0 ); - } - break; - default: - Debug( LDAP_DEBUG_ANY, - "Error: do_ldap: bad op \"%d\", dn = \"%s\"\n", - re->re_changetype, re->re_dn, 0 ); - return DO_LDAP_ERR_FATAL; - } + default: + Debug( LDAP_DEBUG_ANY, + "Error: do_ldap: bad op \"%d\", dn = \"%s\"\n", + re->re_changetype, re->re_dn, 0 ); + return DO_LDAP_ERR_FATAL; + } - /* - * Analyze return code. If ok, just return. If LDAP_SERVER_DOWN, - * we may have been idle long enough that the remote slapd timed - * us out. Rebind and try again. - */ - if ( lderr == LDAP_SUCCESS ) { - return DO_LDAP_OK; - } else if ( lderr == LDAP_SERVER_DOWN ) { - /* The LDAP server may have timed us out - rebind and try again */ - (void) do_unbind( ri ); - retry--; - } else { - return DO_LDAP_ERR_FATAL; - } - } - return DO_LDAP_ERR_FATAL; -} + /* + * Analyze return code. If ok, just return. If LDAP_SERVER_DOWN, + * we may have been idle long enough that the remote slapd timed + * us out. Rebind and try again. + */ + switch( lderr ) { + case LDAP_SUCCESS: + return DO_LDAP_OK; + + default: + return DO_LDAP_ERR_FATAL; + + case LDAP_SERVER_DOWN: /* server went down */ + (void) do_unbind( ri ); + retry--; + } + } while ( retry > 0 ); + return DO_LDAP_ERR_RETRYABLE; +}