ldbedit: Prevent the use of the reveal internals control
authorGarming Sam <garming@catalyst.net.nz>
Sun, 29 Jan 2017 22:08:07 +0000 (11:08 +1300)
committerGarming Sam <garming@samba.org>
Wed, 22 Feb 2017 03:23:05 +0000 (04:23 +0100)
This is almost certainly not what you want to do. Providing the output of reveal as the input of modify
will necessarily revivify all dead linked attributes (regardless of --extended-dn or not).

This is extremely unexpected behaviour, so we prevent this from happening.

Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12596

Autobuild-User(master): Garming Sam <garming@samba.org>
Autobuild-Date(master): Wed Feb 22 04:23:05 CET 2017 on sn-devel-144

lib/ldb/tools/ldbedit.c

index cf4ab3f8ec1cf459bcad268c8536a55cb2ef42c3..5b83783448232f1381d823d8dc85b0a66f26077a 100644 (file)
@@ -320,6 +320,7 @@ int main(int argc, const char **argv)
        const char * const * attrs = NULL;
        TALLOC_CTX *mem_ctx = talloc_new(NULL);
        struct ldb_control **req_ctrls;
+       unsigned int i;
 
        ldb = ldb_init(mem_ctx, NULL);
        if (ldb == NULL) {
@@ -347,6 +348,15 @@ int main(int argc, const char **argv)
                }
        }
 
+       for (i = 0; options->controls != NULL && options->controls[i] != NULL; i++) {
+               if (strncmp(options->controls[i], "reveal_internals:", 17) == 0) {
+                       printf("Using reveal internals has unintended consequences.\n");
+                       printf("If this is your intent, manually perform the search,"
+                              " and use ldbmodify directly.\n");
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
+       }
+
        req_ctrls = ldb_parse_control_strings(ldb, ldb, (const char **)options->controls);
        if (options->controls != NULL &&  req_ctrls== NULL) {
                printf("parsing controls failed: %s\n", ldb_errstring(ldb));