From 7ea485a1d20c1bf41926ebb4b0ae8f37a2d909f7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 27 Nov 2009 14:18:39 +1100 Subject: s4-ldb: better to test for valid arguments in ldb library than commandline We were testing for valid DNs in ldbrename in the command line tool. This hid a bug in the ldb library where we caught a bad DN in the objectclass module rather than in the main ldb code. It is better to do validation of the DNs passed on the command line in the library code, as this gives us more consistent error handling between the programming APIs for ldb and the command line. --- source4/lib/ldb/common/ldb.c | 10 ++++++++++ source4/lib/ldb/tools/ldbrename.c | 9 --------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c index 3a8023ac93..94a5fb2153 100644 --- a/source4/lib/ldb/common/ldb.c +++ b/source4/lib/ldb/common/ldb.c @@ -791,6 +791,16 @@ int ldb_request(struct ldb_context *ldb, struct ldb_request *req) ret = module->ops->del(module, req); break; case LDB_RENAME: + if (!ldb_dn_validate(req->op.rename.olddn)) { + ldb_asprintf_errstring(ldb, "ldb_rename: invalid olddn '%s'", + ldb_dn_get_linearized(req->op.rename.olddn)); + return LDB_ERR_INVALID_DN_SYNTAX; + } + if (!ldb_dn_validate(req->op.rename.newdn)) { + ldb_asprintf_errstring(ldb, "ldb_rename: invalid newdn '%s'", + ldb_dn_get_linearized(req->op.rename.newdn)); + return LDB_ERR_INVALID_DN_SYNTAX; + } FIRST_OP(ldb, rename); ret = module->ops->rename(module, req); break; diff --git a/source4/lib/ldb/tools/ldbrename.c b/source4/lib/ldb/tools/ldbrename.c index fcae766a20..bfccacc206 100644 --- a/source4/lib/ldb/tools/ldbrename.c +++ b/source4/lib/ldb/tools/ldbrename.c @@ -63,15 +63,6 @@ int main(int argc, const char **argv) dn1 = ldb_dn_new(ldb, ldb, options->argv[0]); dn2 = ldb_dn_new(ldb, ldb, options->argv[1]); - if ( ! ldb_dn_validate(dn1)) { - printf("Invalid DN1: %s\n", options->argv[0]); - return -1; - } - if ( ! ldb_dn_validate(dn2)) { - printf("Invalid DN2: %s\n", options->argv[1]); - return -1; - } - ret = ldb_rename(ldb, dn1, dn2); if (ret == 0) { printf("Renamed 1 record\n"); -- cgit