]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/ldapsync.c
reject registrations when back-monitor is not configured
[openldap] / servers / slapd / ldapsync.c
index 290590377728a7f4032a304f2437cb7fa6285161..9d335860dfbb9c8057d27fc211f02f7bc7a1fd82 100644 (file)
@@ -95,17 +95,33 @@ slap_parse_sync_cookie(
        int csn_str_len;
        int valid = 0;
        char *rid_ptr;
-       char *rid_str;
        char *cval;
 
        if ( cookie == NULL )
                return -1;
 
+       cookie->rid = -1;
+       if (( rid_ptr = strstr( cookie->octet_str.bv_val, "rid=" )) != NULL ) {
+               if ( (cval = strchr( rid_ptr, ',' )) != NULL ) {
+                       *cval = '\0';
+               }
+               cookie->rid = atoi( rid_ptr + sizeof("rid=") - 1 );
+               if ( cval != NULL ) {
+                       *cval = ',';
+               }
+       } else {
+               return -1;
+       }
+
        while (( csn_ptr = strstr( cookie->octet_str.bv_val, "csn=" )) != NULL ) {
                AttributeDescription *ad = slap_schema.si_ad_modifyTimestamp;
                slap_syntax_validate_func *validate;
                struct berval stamp;
 
+               /* This only happens when called from main */
+               if ( ad == NULL )
+                       break;
+
                csn_str = csn_ptr + STRLENOF("csn=");
                cval = strchr( csn_str, ',' );
                if ( cval )
@@ -131,17 +147,6 @@ slap_parse_sync_cookie(
                BER_BVZERO( &cookie->ctxcsn );
        }
 
-       if (( rid_ptr = strstr( cookie->octet_str.bv_val, "rid=" )) != NULL ) {
-               rid_str = SLAP_STRNDUP( rid_ptr,
-                                                       SLAP_SYNC_RID_SIZE + sizeof("rid=") - 1 );
-               if ( (cval = strchr( rid_str, ',' )) != NULL ) {
-                       *cval = '\0';
-               }
-               cookie->rid = atoi( rid_str + sizeof("rid=") - 1 );
-               ch_free( rid_str );
-       } else {
-               cookie->rid = -1;
-       }
        return 0;
 }