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) {
