1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

ldb:controls - add the "TREE_DELETE" control for allowing subtree deletes

This commit is contained in:
Matthias Dieter Wallnöfer
2010-06-20 12:19:31 +02:00
parent 065579b4c6
commit ad5e19f29e
3 changed files with 54 additions and 0 deletions

View File

@ -694,6 +694,33 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, void *me
continue;
}
if (strncmp(control_strings[i], "tree_delete:", 12) == 0) {
const char *p;
int crit, ret;
p = &(control_strings[i][12]);
ret = sscanf(p, "%d", &crit);
if ((ret != 1) || (crit < 0) || (crit > 1)) {
error_string = talloc_asprintf(mem_ctx, "invalid tree_delete 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_TREE_DELETE_OID;
ctrl[i]->critical = crit;
ctrl[i]->data = NULL;
continue;
}
if (strncmp(control_strings[i], "show_deleted:", 13) == 0) {
const char *p;
int crit, ret;

View File

@ -527,6 +527,13 @@ typedef int (*ldb_qsort_cmp_fn_t) (void *v1, void *v2, void *opaque);
*/
#define LDB_CONTROL_NOTIFICATION_OID "1.2.840.113556.1.4.528"
/**
OID for performing subtree deletes
\sa <a href="http://msdn.microsoft.com/en-us/library/aa366991(v=VS.85).aspx">Microsoft documentation of this OID</a>
*/
#define LDB_CONTROL_TREE_DELETE_OID "1.2.840.113556.1.4.805"
/**
OID for getting deleted objects

View File

@ -445,6 +445,15 @@ static bool decode_notification_request(void *mem_ctx, DATA_BLOB in, void *_out)
return true;
}
static bool decode_tree_delete_request(void *mem_ctx, DATA_BLOB in, void *_out)
{
if (in.length != 0) {
return false;
}
return true;
}
static bool decode_show_deleted_request(void *mem_ctx, DATA_BLOB in, void *_out)
{
if (in.length != 0) {
@ -969,6 +978,16 @@ static bool encode_notification_request(void *mem_ctx, void *in, DATA_BLOB *out)
return true;
}
static bool encode_tree_delete_request(void *mem_ctx, void *in, DATA_BLOB *out)
{
if (in) {
return false;
}
*out = data_blob(NULL, 0);
return true;
}
static bool encode_show_deleted_request(void *mem_ctx, void *in, DATA_BLOB *out)
{
if (in) {
@ -1278,6 +1297,7 @@ static const struct ldap_control_handler ldap_known_controls[] = {
{ "1.2.840.113556.1.4.1504", decode_asq_control, encode_asq_control },
{ "1.2.840.113556.1.4.841", decode_dirsync_request, encode_dirsync_request },
{ "1.2.840.113556.1.4.528", decode_notification_request, encode_notification_request },
{ "1.2.840.113556.1.4.805", decode_tree_delete_request, encode_tree_delete_request },
{ "1.2.840.113556.1.4.417", decode_show_deleted_request, encode_show_deleted_request },
{ "1.2.840.113556.1.4.2064", decode_show_recycled_request, encode_show_recycled_request },
{ "1.2.840.113556.1.4.2065", decode_show_deactivated_link_request, encode_show_deactivated_link_request },