summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/common/ldb_controls.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-12-10 23:44:05 +1100
committerAndrew Tridgell <tridge@samba.org>2009-12-14 22:29:57 +1100
commit725e25a20604c7032a14bcc8e3c33625e802757a (patch)
tree817a52bde8297c43709f417ca2c1b61451c7443f /source4/lib/ldb/common/ldb_controls.c
parent56b90acbf6ada4c9e2565770918673419b708479 (diff)
downloadsamba-725e25a20604c7032a14bcc8e3c33625e802757a.tar.gz
samba-725e25a20604c7032a14bcc8e3c33625e802757a.tar.bz2
samba-725e25a20604c7032a14bcc8e3c33625e802757a.zip
s4-ldb: added a new "reveal" control
This control will allow inspection of internal ldb values, which would normally be stripped before being presented to users. The first use will be stripping linked attribute meta data extended components.
Diffstat (limited to 'source4/lib/ldb/common/ldb_controls.c')
-rw-r--r--source4/lib/ldb/common/ldb_controls.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/source4/lib/ldb/common/ldb_controls.c b/source4/lib/ldb/common/ldb_controls.c
index f2ab61bde6..8da43ab9b1 100644
--- a/source4/lib/ldb/common/ldb_controls.c
+++ b/source4/lib/ldb/common/ldb_controls.c
@@ -775,6 +775,33 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, void *me
continue;
}
+ if (strncmp(control_strings[i], "reveal_internals:", 17) == 0) {
+ const char *p;
+ int crit, ret;
+
+ p = &(control_strings[i][17]);
+ ret = sscanf(p, "%d", &crit);
+ if ((ret != 1) || (crit < 0) || (crit > 1)) {
+ error_string = talloc_asprintf(mem_ctx, "invalid reveal_internals 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_REVEAL_INTERNALS;
+ ctrl[i]->critical = crit;
+ ctrl[i]->data = NULL;
+
+ continue;
+ }
+
/* no controls matched, throw an error */
ldb_asprintf_errstring(ldb, "Invalid control name: '%s'", control_strings[i]);
return NULL;