summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-12-10 15:48:16 -0500
committerStephen Gallagher <sgallagh@redhat.com>2009-12-10 17:20:27 -0500
commit781b66f3f87d11ae320a4c4a861f2599ca6edff6 (patch)
tree84e9c624059691c4e35742dcab88e4c544147619 /server
parent17980ab09ad29695e68bda67dbbd6cc3a8269f49 (diff)
downloadsssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.tar.gz
sssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.tar.bz2
sssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.zip
Fix for #322, update from old database versions.
Diffstat (limited to 'server')
-rw-r--r--server/db/sysdb.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/server/db/sysdb.c b/server/db/sysdb.c
index 10da9750..f22cea3b 100644
--- a/server/db/sysdb.c
+++ b/server/db/sysdb.c
@@ -1087,6 +1087,8 @@ static int sysdb_upgrade_02(struct confdb_ctx *cdb,
for (j = 0; j < res->count; j++) {
+ struct ldb_dn *orig_dn;
+
msg = res->msgs[j];
/* skip pre-created congtainers */
@@ -1096,6 +1098,17 @@ static int sysdb_upgrade_02(struct confdb_ctx *cdb,
continue;
}
+ /* regenerate the DN against the new ldb as it may have different
+ * casefolding rules (example: name changing from case insensitive
+ * to case sensitive) */
+ orig_dn = msg->dn;
+ msg->dn = ldb_dn_new(msg, ctx->ldb,
+ ldb_dn_get_linearized(orig_dn));
+ if (!msg->dn) {
+ ret = ENOMEM;
+ goto done;
+ }
+
ret = ldb_add(ctx->ldb, msg);
if (ret != LDB_SUCCESS) {
DEBUG(0, ("WARNING: Could not add entry %s,"
@@ -1104,7 +1117,7 @@ static int sysdb_upgrade_02(struct confdb_ctx *cdb,
ret, ldb_errstring(ctx->ldb)));
}
- ret = ldb_delete(local->ldb, msg->dn);
+ ret = ldb_delete(local->ldb, orig_dn);
if (ret != LDB_SUCCESS) {
DEBUG(0, ("WARNING: Could not remove entry %s,"
" from old ldb file! (%d [%s])\n",