]> git.sur5r.net Git - openldap/commitdiff
ITS#6473 from HEAD
authorHoward Chu <hyc@openldap.org>
Tue, 2 Mar 2010 21:53:24 +0000 (21:53 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 2 Mar 2010 21:53:24 +0000 (21:53 +0000)
servers/slapd/syncrepl.c

index 0b9018bdedf921b2c6f412013cdaff87fdf77d27..4257cfcf0ba181f4317df56de051dbd53add658c 100644 (file)
@@ -1202,10 +1202,11 @@ static slap_verbmasks modops[] = {
        { BER_BVNULL, 0 }
 };
 
-static Modifications *
+static int
 syncrepl_accesslog_mods(
        syncinfo_t *si,
-       struct berval *vals
+       struct berval *vals,
+       struct Modifications **modres
 )
 {
        char *colon;
@@ -1214,7 +1215,7 @@ syncrepl_accesslog_mods(
        struct berval bv, bv2;
        short op;
        Modifications *mod = NULL, *modlist = NULL, **modtail;
-       int i;
+       int i, rc = 0;
 
        modtail = &modlist;
 
@@ -1228,7 +1229,13 @@ syncrepl_accesslog_mods(
                bv.bv_len = colon - bv.bv_val;
                if ( slap_bv2ad( &bv, &ad, &text )) {
                        /* Invalid */
-                       continue;
+                       Debug( LDAP_DEBUG_ANY, "syncrepl_accesslog_mods: %s "
+                               "Invalid attribute %s, %s\n",
+                               si->si_ridtxt, bv.bv_val, text );
+                       slap_mods_free( modlist, 1 );
+                       modlist = NULL;
+                       rc = -1;
+                       break;
                }
                /* Ignore dynamically generated attrs */
                if ( ad->ad_type->sat_flags & SLAP_AT_DYNAMIC )
@@ -1266,16 +1273,18 @@ syncrepl_accesslog_mods(
                        ber_bvarray_add( &mod->sml_values, &bv2 );
                }
        }
-       return modlist;
+       *modres = modlist;
+       return rc;
 }
 
-static Modifications *
+static int
 syncrepl_changelog_mods(
        syncinfo_t *si,
-       struct berval *vals
+       struct berval *vals,
+       struct Modifications **modres
 )
 {
-       return NULL;    /* FIXME */
+       return -1;      /* FIXME */
 }
 
 static int
@@ -1352,9 +1361,10 @@ syncrepl_message_to_op(
                } else if ( !ber_bvstrcasecmp( &bv, &ls->ls_mod )) {
                        /* Parse attribute into modlist */
                        if ( si->si_syncdata == SYNCDATA_ACCESSLOG )
-                               modlist = syncrepl_accesslog_mods( si, bvals );
+                               rc = syncrepl_accesslog_mods( si, bvals, &modlist );
                        else
-                               modlist = syncrepl_changelog_mods( si, bvals );
+                               rc = syncrepl_changelog_mods( si, bvals, &modlist );
+                       if ( rc ) goto done;
                } else if ( !ber_bvstrcasecmp( &bv, &ls->ls_newRdn )) {
                        rdn = bvals[0];
                } else if ( !ber_bvstrcasecmp( &bv, &ls->ls_delRdn )) {