]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/controls.c
silence warning
[openldap] / servers / slapd / controls.c
index 8b31e2a677b8694c68b8703eb612f91f37297de5..a7188be37af4372d3c8996894d088242797815cd 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2010 The OpenLDAP Foundation.
+ * Copyright 1998-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -160,7 +160,7 @@ static struct slap_control control_defs[] = {
                parseDomainScope, LDAP_SLIST_ENTRY_INITIALIZER(next) },
        { LDAP_CONTROL_DONTUSECOPY,
                (int)offsetof(struct slap_control_ids, sc_dontUseCopy),
-               SLAP_CTRL_GLOBAL|SLAP_CTRL_INTROGATE|SLAP_CTRL_HIDE,
+               SLAP_CTRL_GLOBAL|SLAP_CTRL_INTROGATE,
                NULL, NULL,
                parseDontUseCopy, LDAP_SLIST_ENTRY_INITIALIZER(next) },
        { LDAP_CONTROL_X_PERMISSIVE_MODIFY,
@@ -357,9 +357,9 @@ unregister_supported_control( const char *controloid )
 
        for ( i = 0; slap_known_controls[ i ]; i++ ) {
                if ( strcmp( controloid, slap_known_controls[ i ] ) == 0 ) {
-                       while ( slap_known_controls[i] ) {
-                               slap_known_controls[i++] = slap_known_controls[i];
-                       }
+                       do {
+                               slap_known_controls[ i ] = slap_known_controls[ i+1 ];
+                       } while ( slap_known_controls[ i++ ] );
                        num_known_controls--;
                        break;
                }
@@ -690,10 +690,21 @@ int slap_parse_ctrl(
        return rc;
 }
 
-int get_ctrls(
+int
+get_ctrls(
        Operation *op,
        SlapReply *rs,
        int sendres )
+{
+       return get_ctrls2( op, rs, sendres, LDAP_TAG_CONTROLS );
+}
+
+int
+get_ctrls2(
+       Operation *op,
+       SlapReply *rs,
+       int sendres,
+       ber_tag_t ctag )
 {
        int nctrls = 0;
        ber_tag_t tag;
@@ -719,7 +730,7 @@ int get_ctrls(
                return rs->sr_err;
        }
 
-       if(( tag = ber_peek_tag( ber, &len )) != LDAP_TAG_CONTROLS ) {
+       if(( tag = ber_peek_tag( ber, &len )) != ctag ) {
                if( tag == LBER_ERROR ) {
                        rs->sr_err = SLAPD_DISCONNECT;
                        rs->sr_text = "unexpected data in PDU";