diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-12-10 23:44:05 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-12-14 22:29:57 +1100 |
commit | 725e25a20604c7032a14bcc8e3c33625e802757a (patch) | |
tree | 817a52bde8297c43709f417ca2c1b61451c7443f /source4/lib/ldb/common | |
parent | 56b90acbf6ada4c9e2565770918673419b708479 (diff) | |
download | samba-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')
-rw-r--r-- | source4/lib/ldb/common/ldb_controls.c | 27 |
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; |