if( rc == -1 ) return rc;
}
-#ifdef LDAP_DEVEL
+#ifdef SLAP_SORTED_RESULTS
/* this is a hack to avoid having to modify op->s_ctrls */
if( o->o_sortedresults ) {
BerElementBuffer berbuf;
{
int rc;
-#ifdef LDAP_DEVEL
slap_callback *sc = op->o_callback, **scp;
rc = SLAP_CB_CONTINUE;
}
op->o_callback = sc;
-#else /* ! LDAP_DEVEL */
- slap_callback *sc = op->o_callback, **sc_prev = &sc, *sc_next;
-
- rc = SLAP_CB_CONTINUE;
- for ( sc_next = op->o_callback; sc_next; op->o_callback = sc_next) {
- sc_next = op->o_callback->sc_next;
- if ( op->o_callback->sc_response ) {
- slap_callback *sc2 = op->o_callback;
- rc = op->o_callback->sc_response( op, rs );
- if ( op->o_callback != sc2 ) {
- *sc_prev = op->o_callback;
- }
- if ( rc != SLAP_CB_CONTINUE || !op->o_callback ) break;
- if ( op->o_callback != sc2 ) continue;
- }
- sc_prev = &op->o_callback->sc_next;
- }
-
- op->o_callback = sc;
-#endif /* ! LDAP_DEVEL */
-
return rc;
}
Operation *op,
SlapReply *rs )
{
-#ifdef LDAP_DEVEL
slap_callback *sc = op->o_callback, **scp;
for ( scp = ≻ *scp; ) {
}
op->o_callback = sc;
-#else /* ! LDAP_DEVEL */
- slap_callback *sc = op->o_callback, **sc_prev = &sc, *sc_next;
-
- for ( sc_next = op->o_callback; sc_next; op->o_callback = sc_next) {
- sc_next = op->o_callback->sc_next;
- if ( op->o_callback->sc_cleanup ) {
- slap_callback *sc2 = op->o_callback;
- (void)op->o_callback->sc_cleanup( op, rs );
- if ( op->o_callback != sc2 ) {
- *sc_prev = op->o_callback;
- }
- if ( !op->o_callback ) break;
- if ( op->o_callback != sc2 ) continue;
- }
- sc_prev = &op->o_callback->sc_next;
- }
-
- op->o_callback = sc;
-#endif /* ! LDAP_DEVEL */
-
return LDAP_SUCCESS;
}
}
if ( strncasecmp( s, "code", STRLENOF( "code" ) ) == 0 ) {
- if ( c != NULL ) {
- *code = atoi( c );
+ char *next = NULL;
+ long retcode;
+
+ if ( c == NULL ) {
+ Debug( LDAP_DEBUG_ANY, "str2result (%s) missing value\n",
+ s, 0, 0 );
+ rc = -1;
+ continue;
+ }
+
+ while ( isspace( (unsigned char) c[ 0 ] ) ) c++;
+ if ( c[ 0 ] == '\0' ) {
+ Debug( LDAP_DEBUG_ANY, "str2result (%s) missing or empty value\n",
+ s, 0, 0 );
+ rc = -1;
+ continue;
}
+
+ retcode = strtol( c, &next, 10 );
+ if ( next == NULL || next == c ) {
+ Debug( LDAP_DEBUG_ANY, "str2result (%s) unable to parse value\n",
+ s, 0, 0 );
+ rc = -1;
+ continue;
+ }
+
+ while ( isspace( (unsigned char) next[ 0 ] ) ) next++;
+ if ( next[ 0 ] != '\0' ) {
+ Debug( LDAP_DEBUG_ANY, "str2result (%s) extra cruft after value\n",
+ s, 0, 0 );
+ rc = -1;
+ continue;
+ }
+
+ /* FIXME: what if it's larger that max int? */
+ *code = (int)retcode;
+
} else if ( strncasecmp( s, "matched", STRLENOF( "matched" ) ) == 0 ) {
if ( c != NULL ) {
*matched = c;