summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/common/ldb_controls.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/ldb/common/ldb_controls.c')
-rw-r--r--source4/lib/ldb/common/ldb_controls.c52
1 files changed, 30 insertions, 22 deletions
diff --git a/source4/lib/ldb/common/ldb_controls.c b/source4/lib/ldb/common/ldb_controls.c
index e3b2870e98..9a864fa7dc 100644
--- a/source4/lib/ldb/common/ldb_controls.c
+++ b/source4/lib/ldb/common/ldb_controls.c
@@ -256,8 +256,15 @@ int ldb_request_replace_control(struct ldb_request *req, const char *oid, bool c
return LDB_ERR_OPERATIONS_ERROR;
}
-/* Parse controls from the format used on the command line and in ejs */
+/*
+ * A little trick to allow to use constants defined in headers rather than
+ * hardwritten in the file hardwritten in the file
+ * sizeof will return the \0 char as well so it will take the place of ":" in the
+ * length of the string
+ */
+#define LDB_CONTROL_CMP(control, NAME) strncmp(control, NAME ":", sizeof(NAME))
+/* Parse controls from the format used on the command line and in ejs */
struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char **control_strings)
{
unsigned int i;
@@ -273,7 +280,8 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
ctrl = talloc_array(mem_ctx, struct ldb_control *, i + 1);
for (i = 0; control_strings[i]; i++) {
- if (strncmp(control_strings[i], "vlv:", 4) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i],
+ LDB_CONTROL_VLV_REQ_NAME) == 0) {
struct ldb_vlv_req_control *control;
const char *p;
char attr[1024];
@@ -330,7 +338,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "dirsync:", 8) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_DIRSYNC_NAME) == 0) {
struct ldb_dirsync_control *control;
const char *p;
char cookie[1024];
@@ -374,7 +382,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "asq:", 4) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_ASQ_NAME) == 0) {
struct ldb_asq_control *control;
const char *p;
char attr[256];
@@ -408,7 +416,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "extended_dn:", 12) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_EXTENDED_DN_NAME) == 0) {
struct ldb_extended_dn_control *control;
const char *p;
int crit, type, ret;
@@ -446,7 +454,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "sd_flags:", 9) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SD_FLAGS_NAME) == 0) {
struct ldb_sd_flags_control *control;
const char *p;
int crit, ret;
@@ -477,7 +485,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "search_options:", 15) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SEARCH_OPTIONS_NAME) == 0) {
struct ldb_search_options_control *control;
const char *p;
int crit, ret;
@@ -508,7 +516,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "bypassoperational:", 18) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_BYPASS_OPERATIONAL_NAME) == 0) {
const char *p;
int crit, ret;
@@ -535,7 +543,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "relax:", 6) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_RELAX_NAME) == 0) {
const char *p;
int crit, ret;
@@ -562,7 +570,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "recalculate_sd:", 15) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_RECALCULATE_SD_NAME) == 0) {
const char *p;
int crit, ret;
@@ -589,7 +597,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "domain_scope:", 13) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_DOMAIN_SCOPE_NAME) == 0) {
const char *p;
int crit, ret;
@@ -616,7 +624,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "paged_results:", 14) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_PAGED_RESULTS_NAME) == 0) {
struct ldb_paged_control *control;
const char *p;
int crit, size, ret;
@@ -649,7 +657,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "server_sort:", 12) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SERVER_SORT_NAME) == 0) {
struct ldb_server_sort_control **control;
const char *p;
char attr[256];
@@ -689,7 +697,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "notification:", 13) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_NOTIFICATION_NAME) == 0) {
const char *p;
int crit, ret;
@@ -716,7 +724,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "tree_delete:", 12) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_TREE_DELETE_NAME) == 0) {
const char *p;
int crit, ret;
@@ -743,7 +751,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "show_deleted:", 13) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SHOW_DELETED_NAME) == 0) {
const char *p;
int crit, ret;
@@ -770,7 +778,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "show_deactivated_link:", 22) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SHOW_DEACTIVATED_LINK_NAME) == 0) {
const char *p;
int crit, ret;
@@ -797,7 +805,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "show_recycled:", 14) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_SHOW_RECYCLED_NAME) == 0) {
const char *p;
int crit, ret;
@@ -824,7 +832,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "permissive_modify:", 18) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_PERMISSIVE_MODIFY_NAME) == 0) {
const char *p;
int crit, ret;
@@ -851,7 +859,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "reveal_internals:", 17) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_REVEAL_INTERNALS_NAME) == 0) {
const char *p;
int crit, ret;
@@ -912,7 +920,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "rodc_join:", 10) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_RODC_DCPROMO_NAME) == 0) {
const char *p;
int crit, ret;
@@ -939,7 +947,7 @@ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_C
continue;
}
- if (strncmp(control_strings[i], "provision:", 10) == 0) {
+ if (LDB_CONTROL_CMP(control_strings[i], LDB_CONTROL_PROVISION_NAME) == 0) {
const char *p;
int crit, ret;