]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
remove a componentCertificate attribute from the organizationalPerson objectclass
[openldap] / servers / slapd / config.c
index d44ad0005ff4b83960b6a77cd3e88310ca879800..c1f05a635e8857b8cf89e520481f6c0a498ece98 100644 (file)
@@ -240,6 +240,82 @@ read_config( const char *fname, int depth )
 
                        ldap_pvt_thread_set_concurrency( c );
 
+               /* set substring initial/final index minimum length */
+               } else if ( strcasecmp( cargv[0], "index_substr_if_minlen" ) == 0 ) {
+                       long min;
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: missing min in \"index_substr_if_minlen <length>\" line\n",
+                               fname, lineno, 0 );
+                               return( 1 );
+                       }
+                       min = atoi( cargv[1] );
+                       if( min < 1 || min > index_substr_if_maxlen ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: invalid min value (%ld) in "
+                               "\"index_substr_if_minlen <length>\" line.\n",
+                               fname, lineno, min );
+                               return( 1 );
+                       }
+                       index_substr_if_minlen = min;
+
+               /* set substring initial/final index maximum length */
+               } else if ( strcasecmp( cargv[0], "index_substr_if_maxlen" ) == 0 ) {
+                       long max;
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: missing max in \"index_substr_if_maxlen <length>\" line\n",
+                               fname, lineno, 0 );
+                               return( 1 );
+                       }
+                       max = atol( cargv[1] );
+                       if( max < 1 || max < index_substr_if_minlen ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: invalid max value (%ld) in "
+                               "\"index_substr_maxlen <length>\" line.\n",
+                               fname, lineno, max );
+                               return( 1 );
+                       }
+                       index_substr_if_maxlen = max;
+
+               /* set substring any index len */
+               } else if ( strcasecmp( cargv[0], "index_substr_any_len" ) == 0 ) {
+                       long len;
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: missing len in \"index_substr_any_len <len>\" line\n",
+                               fname, lineno, 0 );
+                               return( 1 );
+                       }
+                       len = atol( cargv[1] );
+                       if( len < 1 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: invalid len value (%ld) in "
+                               "\"index_substr_any_len <len>\" line.\n",
+                               fname, lineno, len );
+                               return( 1 );
+                       }
+                       index_substr_any_len = len;
+
+               /* set substring any index step */
+               } else if ( strcasecmp( cargv[0], "index_substr_any_step" ) == 0 ) {
+                       long step;
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: missing step in \"index_substr_any_step <step>\" line\n",
+                               fname, lineno, 0 );
+                               return( 1 );
+                       }
+                       step = atol( cargv[1] );
+                       if( step < 1 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                               "%s: line %d: invalid step value (%ld) in "
+                               "\"index_substr_any_step <step>\" line.\n",
+                               fname, lineno, step );
+                               return( 1 );
+                       }
+                       index_substr_any_step = step;
+
                /* set sockbuf max */
                } else if ( strcasecmp( cargv[0], "sockbuf_max_incoming" ) == 0 ) {
                        long max;
@@ -1269,25 +1345,6 @@ restrict_unknown:;
                        if( value_add( &default_referral, vals ) )
                                return LDAP_OTHER;
 
-               /* start of a new database definition */
-               } else if ( strcasecmp( cargv[0], "debug" ) == 0 ) {
-                        int level;
-                       if ( cargc < 3 ) {
-                               Debug( LDAP_DEBUG_ANY,
-                                       "%s: line %d: Error in debug directive, \"debug subsys level\"\n",
-                                       fname, lineno, 0 );
-                               return( 1 );
-                       }
-                        level = strtol( cargv[2], &next, 10 );
-                       if ( next == NULL || next[0] != '\0' ){
-                               Debug( LDAP_DEBUG_ANY,
-                                          "%s: line %d: unable to parse level \"%s\" in debug directive, "
-                                          "\"debug <subsys> <level>\"\n", fname, lineno , cargv[2] );
-                               return( 1 );
-                       }
-
-                        if ( level <= 0 ) level = lutil_mnem2level( cargv[2] );
-                        lutil_set_debug_level( cargv[1], level );
                /* specify an Object Identifier macro */
                } else if ( strcasecmp( cargv[0], "objectidentifier" ) == 0 ) {
                        rc = parse_oidm( fname, lineno, cargc, cargv );
@@ -1478,6 +1535,14 @@ restrict_unknown:;
                        } else {
                                int nr = -1;
 
+                               if ( SLAP_MONITOR( be ) ) {
+                                       Debug( LDAP_DEBUG_ANY, "%s: line %d: "
+                                               "\"replica\" should not be used "
+                                               "inside monitor database\n",
+                                               fname, lineno, 0 );
+                                       /* FIXME: turn into an error? */
+                               }
+
                                for ( i = 1; i < cargc; i++ ) {
                                        if ( strncasecmp( cargv[i], "host=", 5 )
                                            == 0 ) {
@@ -1654,7 +1719,15 @@ restrict_unknown:;
                                return( 1 );
                        }
                        if ( be ) {
+                               if ( SLAP_MONITOR( be ) ) {
+                                       Debug( LDAP_DEBUG_ANY, "%s: line %d: "
+                                               "\"replogfile\" should not be used "
+                                               "inside monitor database\n",
+                                               fname, lineno, 0 );
+                                       /* FIXME: turn into an error? */
+                               }
                                be->be_replogfile = ch_strdup( cargv[1] );
+
                        } else {
                                replogfile = ch_strdup( cargv[1] );
                        }
@@ -2326,48 +2399,54 @@ add_syncrepl(
        }
 }
 
+/* NOTE: used & documented in slapd.conf(5) */
 #define IDSTR                  "rid"
 #define PROVIDERSTR            "provider"
-#define SUFFIXSTR              "suffix"
+#define TYPESTR                        "type"
+#define INTERVALSTR            "interval"
+#define SEARCHBASESTR          "searchbase"
+#define FILTERSTR              "filter"
+#define SCOPESTR               "scope"
+#define ATTRSSTR               "attrs"
+#define ATTRSONLYSTR           "attrsonly"
+#define SLIMITSTR              "sizelimit"
+#define TLIMITSTR              "timelimit"
+#define SCHEMASTR              "schemachecking"
 #define UPDATEDNSTR            "updatedn"
 #define BINDMETHSTR            "bindmethod"
-#define SIMPLESTR              "simple"
-#define SASLSTR                        "sasl"
+#define SIMPLESTR                      "simple"
+#define SASLSTR                                "sasl"
 #define BINDDNSTR              "binddn"
-#define CREDSTR                        "credentials"
-#define OLDAUTHCSTR            "bindprincipal"
+#define SASLMECHSTR            "saslmech"
 #define AUTHCSTR               "authcID"
 #define AUTHZSTR               "authzID"
-#define SRVTABSTR              "srvtab"
-#define SASLMECHSTR            "saslmech"
+#define CREDSTR                        "credentials"
 #define REALMSTR               "realm"
 #define SECPROPSSTR            "secprops"
-#define STARTTLSSTR            "starttls"
-#define CRITICALSTR            "critical"
 
-#define SCHEMASTR              "schemachecking"
-#define FILTERSTR              "filter"
-#define SEARCHBASESTR  "searchbase"
-#define SCOPESTR               "scope"
-#define ATTRSSTR               "attrs"
+/* FIXME: undocumented */
+#define OLDAUTHCSTR            "bindprincipal"
+#define STARTTLSSTR            "starttls"
+#define CRITICALSTR                    "critical"
 #define EXATTRSSTR             "exattrs"
-#define ATTRSONLYSTR   "attrsonly"
-#define TYPESTR                        "type"
-#define INTERVALSTR            "interval"
+#define MANAGEDSAITSTR         "manageDSAit"
+#define RETRYSTR               "retry"
+
+/* FIXME: unused */
 #define LASTMODSTR             "lastmod"
-#define LMREQSTR               "req"
 #define LMGENSTR               "gen"
 #define LMNOSTR                        "no"
-#define MANAGEDSAITSTR "manageDSAit"
-#define SLIMITSTR              "sizelimit"
-#define TLIMITSTR              "timelimit"
-
-#define RETRYSTR               "retry"
+#define LMREQSTR               "req"
+#define SRVTABSTR              "srvtab"
+#define SUFFIXSTR              "suffix"
 
+/* mandatory */
 #define GOT_ID                 0x0001
-#define GOT_PROVIDER   0x0002
+#define GOT_PROVIDER           0x0002
 #define GOT_METHOD             0x0004
-#define GOT_ALL                        0x0007
+
+/* check */
+#define GOT_ALL                        (GOT_ID|GOT_PROVIDER|GOT_METHOD)
 
 static int
 parse_syncrepl_line(
@@ -2382,10 +2461,12 @@ parse_syncrepl_line(
        int     nr_attr = 0;
 
        for ( i = 1; i < cargc; i++ ) {
-               if ( !strncasecmp( cargv[ i ], IDSTR, sizeof( IDSTR ) - 1 )) {
+               if ( !strncasecmp( cargv[ i ], IDSTR "=",
+                                       STRLENOF( IDSTR "=" ) ) )
+               {
                        int tmp;
                        /* '\0' string terminator accounts for '=' */
-                       val = cargv[ i ] + sizeof( IDSTR );
+                       val = cargv[ i ] + STRLENOF( IDSTR "=" );
                        tmp= atoi( val );
                        if ( tmp >= 1000 || tmp < 0 ) {
                                fprintf( stderr, "Error: parse_syncrepl_line: "
@@ -2394,9 +2475,10 @@ parse_syncrepl_line(
                        }
                        si->si_rid = tmp;
                        gots |= GOT_ID;
-               } else if ( !strncasecmp( cargv[ i ], PROVIDERSTR,
-                                       sizeof( PROVIDERSTR ) - 1 )) {
-                       val = cargv[ i ] + sizeof( PROVIDERSTR );
+               } else if ( !strncasecmp( cargv[ i ], PROVIDERSTR "=",
+                                       STRLENOF( PROVIDERSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( PROVIDERSTR "=" );
                        si->si_provideruri = ch_strdup( val );
                        si->si_provideruri_bv = (BerVarray)
                                ch_calloc( 2, sizeof( struct berval ));
@@ -2405,27 +2487,28 @@ parse_syncrepl_line(
                        si->si_provideruri_bv[1].bv_len = 0;
                        si->si_provideruri_bv[1].bv_val = NULL;
                        gots |= GOT_PROVIDER;
-               } else if ( !strncasecmp( cargv[ i ], STARTTLSSTR,
-                       sizeof(STARTTLSSTR) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], STARTTLSSTR "=",
+                                       STRLENOF(STARTTLSSTR "=") ) )
                {
-                       val = cargv[ i ] + sizeof( STARTTLSSTR );
+                       val = cargv[ i ] + STRLENOF( STARTTLSSTR "=" );
                        if( !strcasecmp( val, CRITICALSTR ) ) {
                                si->si_tls = SYNCINFO_TLS_CRITICAL;
                        } else {
                                si->si_tls = SYNCINFO_TLS_ON;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       UPDATEDNSTR, sizeof( UPDATEDNSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], UPDATEDNSTR "=",
+                                       STRLENOF( UPDATEDNSTR "=" ) ) )
                {
-                       struct berval updatedn = {0, NULL};
-                       val = cargv[ i ] + sizeof( UPDATEDNSTR );
+                       struct berval updatedn = BER_BVNULL;
+
+                       val = cargv[ i ] + STRLENOF( UPDATEDNSTR "=" );
                        ber_str2bv( val, 0, 0, &updatedn );
                        ch_free( si->si_updatedn.bv_val );
                        dnNormalize( 0, NULL, NULL, &updatedn, &si->si_updatedn, NULL );
-               } else if ( !strncasecmp( cargv[ i ], BINDMETHSTR,
-                               sizeof( BINDMETHSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], BINDMETHSTR "=",
+                               STRLENOF( BINDMETHSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( BINDMETHSTR );
+                       val = cargv[ i ] + STRLENOF( BINDMETHSTR "=" );
                        if ( !strcasecmp( val, SIMPLESTR )) {
                                si->si_bindmethod = LDAP_AUTH_SIMPLE;
                                gots |= GOT_METHOD;
@@ -2436,52 +2519,60 @@ parse_syncrepl_line(
 #else /* HAVE_CYRUS_SASL */
                                fprintf( stderr, "Error: parse_syncrepl_line: "
                                        "not compiled with SASL support\n" );
-                               return 1;
+                               return -1;
 #endif /* HAVE_CYRUS_SASL */
                        } else {
                                si->si_bindmethod = -1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                               BINDDNSTR, sizeof( BINDDNSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( BINDDNSTR );
+               } else if ( !strncasecmp( cargv[ i ], BINDDNSTR "=",
+                                       STRLENOF( BINDDNSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( BINDDNSTR "=" );
                        si->si_binddn = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               CREDSTR, sizeof( CREDSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( CREDSTR );
+               } else if ( !strncasecmp( cargv[ i ], CREDSTR "=",
+                                       STRLENOF( CREDSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( CREDSTR "=" );
                        si->si_passwd = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               SASLMECHSTR, sizeof( SASLMECHSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( SASLMECHSTR );
+               } else if ( !strncasecmp( cargv[ i ], SASLMECHSTR "=",
+                                       STRLENOF( SASLMECHSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( SASLMECHSTR "=" );
                        si->si_saslmech = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               SECPROPSSTR, sizeof( SECPROPSSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( SECPROPSSTR );
+               } else if ( !strncasecmp( cargv[ i ], SECPROPSSTR "=",
+                                       STRLENOF( SECPROPSSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( SECPROPSSTR "=" );
                        si->si_secprops = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               REALMSTR, sizeof( REALMSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( REALMSTR );
+               } else if ( !strncasecmp( cargv[ i ], REALMSTR "=",
+                                       STRLENOF( REALMSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( REALMSTR "=" );
                        si->si_realm = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               AUTHCSTR, sizeof( AUTHCSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( AUTHCSTR );
+               } else if ( !strncasecmp( cargv[ i ], AUTHCSTR "=",
+                                       STRLENOF( AUTHCSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( AUTHCSTR "=" );
                        if ( si->si_authcId )
                                ch_free( si->si_authcId );
                        si->si_authcId = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               OLDAUTHCSTR, sizeof( OLDAUTHCSTR ) - 1 ) ) {
+               } else if ( !strncasecmp( cargv[ i ], OLDAUTHCSTR "=",
+                                       STRLENOF( OLDAUTHCSTR "=" ) ) ) 
+               {
                        /* Old authcID is provided for some backwards compatibility */
-                       val = cargv[ i ] + sizeof( OLDAUTHCSTR );
+                       val = cargv[ i ] + STRLENOF( OLDAUTHCSTR "=" );
                        if ( si->si_authcId )
                                ch_free( si->si_authcId );
                        si->si_authcId = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               AUTHZSTR, sizeof( AUTHZSTR ) - 1 ) ) {
-                       val = cargv[ i ] + sizeof( AUTHZSTR );
+               } else if ( !strncasecmp( cargv[ i ], AUTHZSTR "=",
+                                       STRLENOF( AUTHZSTR "=" ) ) )
+               {
+                       val = cargv[ i ] + STRLENOF( AUTHZSTR "=" );
                        si->si_authzId = ch_strdup( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                               SCHEMASTR, sizeof( SCHEMASTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], SCHEMASTR "=",
+                                       STRLENOF( SCHEMASTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( SCHEMASTR );
+                       val = cargv[ i ] + STRLENOF( SCHEMASTR "=" );
                        if ( !strncasecmp( val, "on", STRLENOF( "on" ) )) {
                                si->si_schemachecking = 1;
                        } else if ( !strncasecmp( val, "off", STRLENOF( "off" ) ) ) {
@@ -2489,28 +2580,28 @@ parse_syncrepl_line(
                        } else {
                                si->si_schemachecking = 1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       FILTERSTR, sizeof( FILTERSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], FILTERSTR "=",
+                                       STRLENOF( FILTERSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( FILTERSTR );
+                       val = cargv[ i ] + STRLENOF( FILTERSTR "=" );
                        ber_str2bv( val, 0, 1, &si->si_filterstr );
-               } else if ( !strncasecmp( cargv[ i ],
-                       SEARCHBASESTR, sizeof( SEARCHBASESTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], SEARCHBASESTR "=",
+                                       STRLENOF( SEARCHBASESTR "=" ) ) )
                {
                        struct berval bv;
-                       val = cargv[ i ] + sizeof( SEARCHBASESTR );
+                       val = cargv[ i ] + STRLENOF( SEARCHBASESTR "=" );
                        if ( si->si_base.bv_val ) {
                                ch_free( si->si_base.bv_val );
                        }
                        ber_str2bv( val, 0, 0, &bv );
                        if ( dnNormalize( 0, NULL, NULL, &bv, &si->si_base, NULL )) {
                                fprintf( stderr, "Invalid base DN \"%s\"\n", val );
-                               return 1;
+                               return -1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       SCOPESTR, sizeof( SCOPESTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], SCOPESTR "=",
+                                       STRLENOF( SCOPESTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( SCOPESTR );
+                       val = cargv[ i ] + STRLENOF( SCOPESTR "=" );
                        if ( !strncasecmp( val, "base", STRLENOF( "base" ) )) {
                                si->si_scope = LDAP_SCOPE_BASE;
                        } else if ( !strncasecmp( val, "one", STRLENOF( "one" ) )) {
@@ -2526,21 +2617,20 @@ parse_syncrepl_line(
                        } else {
                                fprintf( stderr, "Error: parse_syncrepl_line: "
                                        "unknown scope \"%s\"\n", val);
-                               return 1;
+                               return -1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       ATTRSONLYSTR, sizeof( ATTRSONLYSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], ATTRSONLYSTR "=",
+                                       STRLENOF( ATTRSONLYSTR "=" ) ) )
                {
                        si->si_attrsonly = 1;
-               } else if ( !strncasecmp( cargv[ i ],
-                       ATTRSSTR, sizeof( ATTRSSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], ATTRSSTR "=",
+                                       STRLENOF( ATTRSSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( ATTRSSTR );
-                       if ( !strncasecmp( val, ":include:", STRLENOF(":include:") )) {
+                       val = cargv[ i ] + STRLENOF( ATTRSSTR "=" );
+                       if ( !strncasecmp( val, ":include:", STRLENOF(":include:") ) ) {
                                char *attr_fname;
                                attr_fname = ch_strdup( val + STRLENOF(":include:") );
-                               si->si_anlist = file2anlist(
-                                                               si->si_anlist, attr_fname, " ,\t" );
+                               si->si_anlist = file2anlist( si->si_anlist, attr_fname, " ,\t" );
                                if ( si->si_anlist == NULL ) {
                                        ch_free( attr_fname );
                                        return -1;
@@ -2551,8 +2641,9 @@ parse_syncrepl_line(
                                char delimstr[] = " ,\t";
                                str = ch_strdup( val );
                                for ( s = ldap_pvt_strtok( str, delimstr, &next );
-                                         s != NULL;
-                                         s = ldap_pvt_strtok( NULL, delimstr, &next )) {
+                                               s != NULL;
+                                               s = ldap_pvt_strtok( NULL, delimstr, &next ) )
+                               {
                                        if ( strlen(s) == 1 && *s == '*' ) {
                                                si->si_allattrs = 1;
                                                *(val + ( s - str )) = delimstr[0];
@@ -2568,10 +2659,10 @@ parse_syncrepl_line(
                                        return -1;
                                }
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       EXATTRSSTR, sizeof( EXATTRSSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], EXATTRSSTR "=",
+                                       STRLENOF( EXATTRSSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( EXATTRSSTR );
+                       val = cargv[ i ] + STRLENOF( EXATTRSSTR "=" );
                        if ( !strncasecmp( val, ":include:", STRLENOF(":include:") )) {
                                char *attr_fname;
                                attr_fname = ch_strdup( val + STRLENOF(":include:") );
@@ -2589,26 +2680,28 @@ parse_syncrepl_line(
                                        return -1;
                                }
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       TYPESTR, sizeof( TYPESTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], TYPESTR "=",
+                                       STRLENOF( TYPESTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( TYPESTR );
-                       if ( !strncasecmp( val, "refreshOnly", STRLENOF("refreshOnly") )) {
+                       val = cargv[ i ] + STRLENOF( TYPESTR "=" );
+                       if ( !strncasecmp( val, "refreshOnly",
+                                               STRLENOF("refreshOnly") ))
+                       {
                                si->si_type = LDAP_SYNC_REFRESH_ONLY;
                        } else if ( !strncasecmp( val, "refreshAndPersist",
-                               STRLENOF("refreshAndPersist") ))
+                                               STRLENOF("refreshAndPersist") ))
                        {
                                si->si_type = LDAP_SYNC_REFRESH_AND_PERSIST;
                                si->si_interval = 60;
                        } else {
                                fprintf( stderr, "Error: parse_syncrepl_line: "
                                        "unknown sync type \"%s\"\n", val);
-                               return 1;
+                               return -1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       INTERVALSTR, sizeof( INTERVALSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], INTERVALSTR "=",
+                                       STRLENOF( INTERVALSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( INTERVALSTR );
+                       val = cargv[ i ] + STRLENOF( INTERVALSTR "=" );
                        if ( si->si_type == LDAP_SYNC_REFRESH_AND_PERSIST ) {
                                si->si_interval = 0;
                        } else {
@@ -2622,21 +2715,21 @@ parse_syncrepl_line(
                                if ( hstr == NULL ) {
                                        fprintf( stderr, "Error: parse_syncrepl_line: "
                                                "invalid interval \"%s\"\n", val );
-                                       return 1;
+                                       return -1;
                                }
                                *hstr++ = '\0';
                                mstr = strchr( hstr, ':' );
                                if ( mstr == NULL ) {
                                        fprintf( stderr, "Error: parse_syncrepl_line: "
                                                "invalid interval \"%s\"\n", val );
-                                       return 1;
+                                       return -1;
                                }
                                *mstr++ = '\0';
                                sstr = strchr( mstr, ':' );
                                if ( sstr == NULL ) {
                                        fprintf( stderr, "Error: parse_syncrepl_line: "
                                                "invalid interval \"%s\"\n", val );
-                                       return 1;
+                                       return -1;
                                }
                                *sstr++ = '\0';
 
@@ -2649,7 +2742,7 @@ parse_syncrepl_line(
                                        ( ss > 60 ) || ( ss < 0 ) || ( dd < 0 )) {
                                        fprintf( stderr, "Error: parse_syncrepl_line: "
                                                "invalid interval \"%s\"\n", val );
-                                       return 1;
+                                       return -1;
                                }
                                si->si_interval = (( dd * 24 + hh ) * 60 + mm ) * 60 + ss;
                        }
@@ -2657,16 +2750,16 @@ parse_syncrepl_line(
                                fprintf( stderr, "Error: parse_syncrepl_line: "
                                        "invalid interval \"%ld\"\n",
                                        (long) si->si_interval);
-                               return 1;
+                               return -1;
                        }
-               } else if ( !strncasecmp( cargv[ i ],
-                       RETRYSTR, sizeof( RETRYSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], RETRYSTR "=",
+                                       STRLENOF( RETRYSTR "=" ) ) )
                {
                        char *str;
                        char **retry_list;
                        int j, k, n;
 
-                       val = cargv[ i ] + sizeof( RETRYSTR );
+                       val = cargv[ i ] + STRLENOF( RETRYSTR "=" );
                        retry_list = (char **) ch_calloc( 1, sizeof( char * ));
                        retry_list[0] = NULL;
 
@@ -2706,24 +2799,25 @@ parse_syncrepl_line(
                                ch_free( retry_list[k] );
                        }
                        ch_free( retry_list );
-               } else if ( !strncasecmp( cargv[ i ],
-                       MANAGEDSAITSTR, sizeof( MANAGEDSAITSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], MANAGEDSAITSTR "=",
+                                       STRLENOF( MANAGEDSAITSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( MANAGEDSAITSTR );
+                       val = cargv[ i ] + STRLENOF( MANAGEDSAITSTR "=" );
                        si->si_manageDSAit = atoi( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                       SLIMITSTR, sizeof( SLIMITSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], SLIMITSTR "=",
+                                       STRLENOF( SLIMITSTR "=") ) )
                {
-                       val = cargv[ i ] + sizeof( SLIMITSTR );
+                       val = cargv[ i ] + STRLENOF( SLIMITSTR "=" );
                        si->si_slimit = atoi( val );
-               } else if ( !strncasecmp( cargv[ i ],
-                       TLIMITSTR, sizeof( TLIMITSTR ) - 1 ) )
+               } else if ( !strncasecmp( cargv[ i ], TLIMITSTR "=",
+                                       STRLENOF( TLIMITSTR "=" ) ) )
                {
-                       val = cargv[ i ] + sizeof( TLIMITSTR );
+                       val = cargv[ i ] + STRLENOF( TLIMITSTR "=" );
                        si->si_tlimit = atoi( val );
                } else {
                        fprintf( stderr, "Error: parse_syncrepl_line: "
                                "unknown keyword \"%s\"\n", cargv[ i ] );
+                       return -1;
                }
        }