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:
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 },
|
||||
|
Reference in New Issue
Block a user