s4:ldb: add support for the new Recycle Bin Feature LDAP controls
authorStefan Metzmacher <metze@samba.org>
Thu, 23 Jul 2009 15:54:02 +0000 (17:54 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 23 Jul 2009 16:04:33 +0000 (18:04 +0200)
LDB_CONTROL_SHOW_RECYCLED_OID         1.2.840.113556.1.4.2064
LDB_CONTROL_SHOW_DEACTIVATED_LINK_OID 1.2.840.113556.1.4.2065

metze

source4/lib/ldb/common/ldb_controls.c
source4/lib/ldb/include/ldb.h

index 6f127d8c39c57e79c716e46bde5471c1baf5b9a1..3c2ef5ea0025a4b1aa9abbdf841a725e8c819cb5 100644 (file)
@@ -555,6 +555,60 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, void *me
                        continue;
                }
 
+               if (strncmp(control_strings[i], "show_deactivated_link:", 22) == 0) {
+                       const char *p;
+                       int crit, ret;
+
+                       p = &(control_strings[i][22]);
+                       ret = sscanf(p, "%d", &crit);
+                       if ((ret != 1) || (crit < 0) || (crit > 1)) {
+                               error_string = talloc_asprintf(mem_ctx, "invalid show_deactivated_link control syntax\n");
+                               error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n");
+                               error_string = talloc_asprintf_append(error_string, "   note: b = boolean");
+                               ldb_set_errstring(ldb, error_string);
+                               talloc_free(error_string);
+                               return NULL;
+                       }
+
+                       ctrl[i] = talloc(ctrl, struct ldb_control);
+                       if (!ctrl[i]) {
+                               ldb_oom(ldb);
+                               return NULL;
+                       }
+                       ctrl[i]->oid = LDB_CONTROL_SHOW_DEACTIVATED_LINK_OID;
+                       ctrl[i]->critical = crit;
+                       ctrl[i]->data = NULL;
+
+                       continue;
+               }
+
+               if (strncmp(control_strings[i], "show_recycled:", 14) == 0) {
+                       const char *p;
+                       int crit, ret;
+
+                       p = &(control_strings[i][14]);
+                       ret = sscanf(p, "%d", &crit);
+                       if ((ret != 1) || (crit < 0) || (crit > 1)) {
+                               error_string = talloc_asprintf(mem_ctx, "invalid show_recycled control syntax\n");
+                               error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n");
+                               error_string = talloc_asprintf_append(error_string, "   note: b = boolean");
+                               ldb_set_errstring(ldb, error_string);
+                               talloc_free(error_string);
+                               return NULL;
+                       }
+
+                       ctrl[i] = talloc(ctrl, struct ldb_control);
+                       if (!ctrl[i]) {
+                               ldb_oom(ldb);
+                               return NULL;
+                       }
+                       ctrl[i]->oid = LDB_CONTROL_SHOW_RECYCLED_OID;
+                       ctrl[i]->critical = crit;
+                       ctrl[i]->data = NULL;
+
+                       continue;
+               }
+
                if (strncmp(control_strings[i], "permissive_modify:", 18) == 0) {
                        const char *p;
                        int crit, ret;
index 8e4e2e0db3564905c412d0429991bc597c7997c8..20f0f9cc5a2ee4ce1968f84ac32e1a25fb375052 100644 (file)
@@ -485,6 +485,20 @@ typedef int (*ldb_qsort_cmp_fn_t) (void *v1, void *v2, void *opaque);
 */
 #define LDB_CONTROL_SHOW_DELETED_OID   "1.2.840.113556.1.4.417"
 
+/**
+   OID for getting recycled objects
+
+   \sa <a href="http://msdn.microsoft.com/en-us/library/dd304621(PROT.13).aspx">Microsoft documentation of this OID</a>
+*/
+#define LDB_CONTROL_SHOW_RECYCLED_OID         "1.2.840.113556.1.4.2064"
+
+/**
+   OID for getting deactivated linked attributes
+
+   \sa <a href="http://msdn.microsoft.com/en-us/library/dd302781(PROT.13).aspx">Microsoft documentation of this OID</a>
+*/
+#define LDB_CONTROL_SHOW_DEACTIVATED_LINK_OID "1.2.840.113556.1.4.2065"
+
 /**
    OID for extended DN