diff options
author | Simo Sorce <ssorce@redhat.com> | 2009-12-10 15:48:16 -0500 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2009-12-10 17:20:27 -0500 |
commit | 781b66f3f87d11ae320a4c4a861f2599ca6edff6 (patch) | |
tree | 84e9c624059691c4e35742dcab88e4c544147619 | |
parent | 17980ab09ad29695e68bda67dbbd6cc3a8269f49 (diff) | |
download | sssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.tar.gz sssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.tar.bz2 sssd-781b66f3f87d11ae320a4c4a861f2599ca6edff6.zip |
Fix for #322, update from old database versions.
-rw-r--r-- | server/db/sysdb.c | 15 |
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", |