Browse Source

Fix for coverty issues 12028,12029,12030

Ludwig Krispenz 12 years ago
parent
commit
5862d6ceeb

+ 1 - 1
ldap/servers/plugins/sync/sync_persist.c

@@ -582,7 +582,7 @@ sync_send_results( void *arg )
 			char	**noattrs = NULL;
 			LDAPControl	**ectrls = NULL;
 			Slapi_Entry	*ec;
-			int chg_type;
+			int chg_type = LDAP_SYNC_NONE;
 		
 			/* deque one element */
 			PR_Lock( req->req_lock );

+ 5 - 0
ldap/servers/plugins/sync/sync_refresh.c

@@ -457,6 +457,10 @@ sync_read_entry_from_changelog( Slapi_Entry *cl_entry, void *cb_data)
 	int index = 0;
 	Sync_CallBackData *cb = (Sync_CallBackData *) cb_data;
 
+	if (cb == NULL) {
+		return(1);
+	}
+
 	uniqueid = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_UNIQUEID);
 	chgtype = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_CHGTYPE);
 	chgnr = sync_get_attr_value_from_entry (cl_entry, CL_ATTR_CHANGENUMBER);
@@ -465,6 +469,7 @@ sync_read_entry_from_changelog( Slapi_Entry *cl_entry, void *cb_data)
 		slapi_log_error (SLAPI_LOG_FATAL, SYNC_PLUGIN_SUBSYSTEM, 
 			"Retro Changelog does not provied nsuniquedid."
 			"Check RCL plugin configuration." );
+		return(1);
 	}
 		
 

+ 20 - 3
ldap/servers/plugins/sync/sync_util.c

@@ -80,8 +80,25 @@ sync_parse_control_value( struct berval *psbvp, ber_int_t *mode, int *reload, ch
             if ( ber_scanf( ber, "{e", mode ) == LBER_ERROR )
             {
             	rc= LDAP_PROTOCOL_ERROR;
-            } else if ( ber_scanf( ber, "a", cookie ) != LBER_ERROR )
-            	ber_scanf( ber, "b}", reload );
+            } else {
+		ber_tag_t tag;
+		ber_len_t len;
+		tag = ber_peek_tag( ber, &len );
+		if ( tag == LDAP_TAG_SYNC_COOKIE ) {
+			rc = ber_scanf( ber, "a", cookie );
+			tag = ber_peek_tag( ber, &len );
+		}
+		if (rc != LBER_ERROR && tag == LDAP_TAG_RELOAD_HINT ) {
+            		rc = ber_scanf( ber, "b", reload );
+		}
+		if (rc != LBER_ERROR) {
+			rc = ber_scanf( ber, "}");
+		}
+		if (rc == LBER_ERROR) {
+ 
+            		rc= LDAP_PROTOCOL_ERROR;
+		};
+	    }
 
        	    /* the ber encoding is no longer needed */
        	    ber_free(ber,1);
@@ -147,7 +164,7 @@ sync_create_state_control( Slapi_Entry *e, LDAPControl **ctrlp, int type, Sync_C
 	Slapi_Attr *attr;
 	Slapi_Value *val;
 
-	if ( ctrlp == NULL || ( ber = der_alloc()) == NULL ) {
+	if ( type == LDAP_SYNC_NONE || ctrlp == NULL || ( ber = der_alloc()) == NULL ) {
 		return( LDAP_OPERATIONS_ERROR );
 	}