]> git.sur5r.net Git - openldap/blobdiff - servers/slurpd/config.c
for slurpd's replica directory (slurpd.status, and rej file) use a subdir of what...
[openldap] / servers / slurpd / config.c
index 7c97aaaac850a4fa016e61ddc0d8351c185536b8..1df612324005a4dfa56b056644991200f7cd96e6 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /*
  * Copyright (c) 1996 Regents of the University of Michigan.
  * All rights reserved.
 
 #include <stdio.h>
 
+#include <ac/stdlib.h>
 #include <ac/string.h>
 #include <ac/socket.h>
+#include <ac/ctype.h>
 
 #include <lber.h>
 #include <ldap.h>
@@ -53,8 +56,7 @@ slurpd_read_config(
 )
 {
     FILE       *fp;
-    char       buf[BUFSIZ];
-    char       *line, *p;
+    char       *line;
     int                cargc;
     char       *cargv[MAXARGS];
 
@@ -63,7 +65,7 @@ slurpd_read_config(
 
     if ( (fp = fopen( fname, "r" )) == NULL ) {
        perror( fname );
-       exit( 1 );
+       exit( EXIT_FAILURE );
     }
 
     lineno = 0;
@@ -95,14 +97,14 @@ slurpd_read_config(
                        "line %d: missing filename in \"replogfile ",
                        lineno );
                    fprintf( stderr, "<filename>\" line\n" );
-                   exit( 1 );
+                   exit( EXIT_FAILURE );
                } else if ( cargc > 2 && *cargv[2] != '#' ) {
                    fprintf( stderr,
                        "line %d: extra cruft at the end of \"replogfile %s\"",
                        lineno, cargv[1] );
                    fprintf( stderr, "line (ignored)\n" );
                }
-               sprintf( sglob->slapd_replogfile, cargv[1] );
+               strcpy( sglob->slapd_replogfile, cargv[1] );
            }
        } else if ( strcasecmp( cargv[0], "replica" ) == 0 ) {
            add_replica( cargv, cargc );
@@ -172,11 +174,13 @@ strtok_quote(
            } else {
                inquote = 1;
            }
-           strcpy( next, next + 1 );
+           SAFEMEMCPY( next, next + 1, strlen( next + 1 ) + 1 );
            break;
 
        case '\\':
-           strcpy( next, next + 1 );
+           if ( next[1] )
+               SAFEMEMCPY( next, next + 1, strlen( next + 1 ) + 1 );
+           next++;             /* dont parse the escaped character */
            break;
 
        default:
@@ -227,7 +231,7 @@ getline(
            *p = '\0';
        }
        lineno++;
-       if ( ! isspace( buf[0] ) ) {
+       if ( ! isspace( (unsigned char) buf[0] ) ) {
            return( line );
        }
 
@@ -255,13 +259,13 @@ add_replica(
            ( nr + 1 )  * sizeof( Re * ));
     if ( sglob->replicas == NULL ) {
        fprintf( stderr, "out of memory, add_replica\n" );
-       exit( 1 );
+       exit( EXIT_FAILURE );
     }
     sglob->replicas[ nr ] = NULL; 
 
     if ( Ri_init( &(sglob->replicas[ nr - 1 ])) < 0 ) {
        fprintf( stderr, "out of memory, Ri_init\n" );
-       exit( 1 );
+       exit( EXIT_FAILURE );
     }
     if ( parse_replica_line( cargv, cargc,
            sglob->replicas[ nr - 1] ) < 0 ) {
@@ -284,7 +288,7 @@ add_replica(
                sglob->replicas[ nr - 1 ] );
        if ( sglob->replicas[ nr - 1]->ri_stel == NULL ) {
            fprintf( stderr, "Failed to add status element structure\n" );
-           exit( 1 );
+           exit( EXIT_FAILURE );
        }
     }
 }
@@ -338,7 +342,7 @@ parse_replica_line(
                ri->ri_port = atoi( hp );
            }
            if ( ri->ri_port <= 0 ) {
-               ri->ri_port = LDAP_PORT;
+               ri->ri_port = 0;
            }
            ri->ri_hostname = strdup( val );
            gots |= GOT_HOST;
@@ -351,21 +355,21 @@ parse_replica_line(
                strlen( BINDMETHSTR ))) {
            val = cargv[ i ] + strlen( BINDMETHSTR ) + 1;
            if ( !strcasecmp( val, KERBEROSSTR )) {
-#ifdef HAVE_KERBEROS
+#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
                ri->ri_bind_method = AUTH_KERBEROS;
                if ( ri->ri_srvtab == NULL ) {
                    ri->ri_srvtab = strdup( sglob->default_srvtab );
                }
                gots |= GOT_METHOD;
-#else /* HAVE_KERBEROS */
+#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND */
            fprintf( stderr, "Error: a bind method of \"kerberos\" was\n" );
            fprintf( stderr, "specified in the slapd configuration file,\n" );
            fprintf( stderr, "but slurpd was not built with kerberos.\n" );
            fprintf( stderr, "You must rebuild the LDAP release with\n" );
            fprintf( stderr, "kerberos support if you wish to use\n" );
            fprintf( stderr, "bindmethod=kerberos\n" );
-           exit( 1 );
-#endif /* HAVE_KERBEROS */
+           exit( EXIT_FAILURE );
+#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND */
            } else if ( !strcasecmp( val, SIMPLESTR )) {
                ri->ri_bind_method = AUTH_SIMPLE;
                gots |= GOT_METHOD;