diff options
author | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-10-23 16:15:51 +0200 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-10-23 16:37:29 +0200 |
commit | f9a6ff482c8d03e7e46fd6925d58214b7a097e02 (patch) | |
tree | 36bf703986179f59947e6d380162109f87338563 /source4/lib/ldb/common | |
parent | 89c42a96fcaa43a7f2c9aef9e708276a639e0051 (diff) | |
download | samba-f9a6ff482c8d03e7e46fd6925d58214b7a097e02.tar.gz samba-f9a6ff482c8d03e7e46fd6925d58214b7a097e02.tar.bz2 samba-f9a6ff482c8d03e7e46fd6925d58214b7a097e02.zip |
s4/ldb:introduce the LDB_CONTROL_PROVISION_OID control
This control is exactly thought for the actions which previously were performed
using the RELAX one.
We agreed that the RELAX control will only remain for interactions with OpenLDAP.
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 6ce08652a7..99154aa7d9 100644 --- a/source4/lib/ldb/common/ldb_controls.c +++ b/source4/lib/ldb/common/ldb_controls.c @@ -939,6 +939,33 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C continue; } + if (strncmp(control_strings[i], "provision:", 10) == 0) { + const char *p; + int crit, ret; + + p = &(control_strings[i][10]); + ret = sscanf(p, "%d", &crit); + if ((ret != 1) || (crit < 0) || (crit > 1)) { + error_string = talloc_asprintf(mem_ctx, "invalid provision 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_PROVISION_OID; + 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; |