Author: idra
Date: 2005-12-14 12:30:07 +0000 (Wed, 14 Dec 2005)
New Revision: 12231

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12231

Log:

add a new function to check for srtical controls not handled


Modified:
   branches/tmp/samba4_ldap_controls/source/lib/ldb/common/ldb_controls.c
   branches/tmp/samba4_ldap_controls/source/lib/ldb/include/ldb_private.h
   branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
   branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_tdb/ldb_tdb.c


Changeset:
Modified: branches/tmp/samba4_ldap_controls/source/lib/ldb/common/ldb_controls.c
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/common/ldb_controls.c      
2005-12-14 10:56:43 UTC (rev 12230)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/common/ldb_controls.c      
2005-12-14 12:30:07 UTC (rev 12231)
@@ -37,6 +37,8 @@
 #include "ldb/include/ldb_errors.h"
 #include "ldb/include/ldb_private.h"
 
+/* check if a control with the specified "oid" exist and return it */
+/* returns NULL if not found */
 struct ldb_control *get_control_from_list(struct ldb_control **controls, const 
char *oid)
 {
        int i;
@@ -55,6 +57,9 @@
        return NULL;
 }
 
+/* saves the current controls list into the "saver" and replace the one in req 
with a new one excluding
+the "exclude" control */
+/* returns False on error */
 BOOL save_controls(struct ldb_control *exclude, struct ldb_request *req, 
struct ldb_control ***saver)
 {
        struct ldb_control **lcs;
@@ -82,3 +87,22 @@
        req->controls = lcs;
        return True;
 }
+
+/* check if there's any control marked as critical in the list */
+/* return True if any, False if none */
+BOOL check_critical_controls(struct ldb_control **controls)
+{
+       int i;
+
+       if (controls == NULL) {
+               return False;
+       }
+
+       for (i = 0; controls[i]; i++) {
+               if (controls[i]->critical) {
+                       return True;
+               }
+       }
+
+       return False;
+}

Modified: branches/tmp/samba4_ldap_controls/source/lib/ldb/include/ldb_private.h
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/include/ldb_private.h      
2005-12-14 10:56:43 UTC (rev 12230)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/include/ldb_private.h      
2005-12-14 12:30:07 UTC (rev 12231)
@@ -185,5 +185,6 @@
 
 struct ldb_control *get_control_from_list(struct ldb_control **controls, const 
char *oid);
 BOOL save_controls(struct ldb_control *exclude, struct ldb_request *req, 
struct ldb_control ***saver);
+BOOL check_critical_controls(struct ldb_control **controls);
 
 #endif

Modified: 
branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c  
2005-12-14 10:56:43 UTC (rev 12230)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c  
2005-12-14 12:30:07 UTC (rev 12231)
@@ -1785,14 +1785,8 @@
 static int lsqlite3_request(struct ldb_module *module, struct ldb_request *req)
 {
        /* check for oustanding critical controls and return an error if found 
*/
-
-       if (req->controls) {
-               int i;
-               for (i = 0; req->controls[i]; i++) {
-                       if (req->controls[i]->critical) {
-                               return LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION;
-                       }
-               }
+       if (check_critical_controls(req->controls)) {
+               return LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION;
        }
        
        switch (req->operation) {

Modified: branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_tdb/ldb_tdb.c
===================================================================
--- branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_tdb/ldb_tdb.c  
2005-12-14 10:56:43 UTC (rev 12230)
+++ branches/tmp/samba4_ldap_controls/source/lib/ldb/ldb_tdb/ldb_tdb.c  
2005-12-14 12:30:07 UTC (rev 12231)
@@ -737,13 +737,8 @@
 {
        /* check for oustanding critical controls and return an error if found 
*/
 
-       if (req->controls) {
-               int i;
-               for (i = 0; req->controls[i] != NULL; i++) {
-                       if (req->controls[i]->critical) {
-                               return LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION;
-                       }
-               }
+       if (check_critical_controls(req->controls)) {
+               return LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION;
        }
        
        switch (req->operation) {

Reply via email to