diff --git a/clients/tools/ldapmodify.c b/clients/tools/ldapmodify.c index 62746cc5080d13879ec3fb65ec56ad7b4ee7f95e..043d3bbc3dafd888a528f3932e88298c0c25daae 100644 --- a/clients/tools/ldapmodify.c +++ b/clients/tools/ldapmodify.c @@ -463,6 +463,7 @@ process_ldif_rec( char *rbuf, int count ) goto end_line; } else if ( strcasecmp( type, T_MODOPREPLACESTR ) == 0 ) { modop = LDAP_MOD_REPLACE; + addmodifyop( &pmods, modop, value, NULL, 0 ); goto end_line; } else if ( strcasecmp( type, T_MODOPDELETESTR ) == 0 ) { modop = LDAP_MOD_DELETE; diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index c5556a33dc270ceafe5763c6ce1d80e4a5fb1d58..8e3521bfac690c7c0d7dcce6f9ee5393085af629 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -124,6 +124,9 @@ do_modify( (*modtail)->ml_op != LDAP_MOD_DELETE && (*modtail)->ml_op != LDAP_MOD_REPLACE ) { + Debug( LDAP_DEBUG_ANY, + "do_modify: invalid modify operation (%ld)\n", + (long) (*modtail)->ml_op, 0, 0 ); send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "unrecognized modify operation", NULL, NULL ); free( ndn ); @@ -131,11 +134,16 @@ do_modify( return LDAP_PROTOCOL_ERROR; } - if ( (*modtail)->ml_bvalues == NULL - && (*modtail)->ml_op != LDAP_MOD_DELETE ) + if ( (*modtail)->ml_bvalues == NULL && ( + (*modtail)->ml_op != LDAP_MOD_REPLACE && + (*modtail)->ml_op != LDAP_MOD_DELETE ) ) { + Debug( LDAP_DEBUG_ANY, + "do_modify: invalid modify operation (%ld) without values\n", + (long) (*modtail)->ml_op, 0, 0 ); send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, - NULL, "unrecognized modify operation", NULL, NULL ); + NULL, "unrecognized modify operation without values", + NULL, NULL ); free( ndn ); modlist_free( modlist ); return LDAP_PROTOCOL_ERROR;