diff options
author | Sumit Bose <sbose@redhat.com> | 2017-09-05 12:49:54 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-09-14 17:05:56 +0200 |
commit | 9acdf51bf32d7b4389f3faea0fc6b73c56b6da71 (patch) | |
tree | 6561d21fd30b445623aa2008a943a4ecdf59d4bc | |
parent | f2e70ec742cd7aab82b74d7e4b424ba3258da7aa (diff) | |
download | sssd-9acdf51bf32d7b4389f3faea0fc6b73c56b6da71.tar.gz sssd-9acdf51bf32d7b4389f3faea0fc6b73c56b6da71.tar.xz sssd-9acdf51bf32d7b4389f3faea0fc6b73c56b6da71.zip |
sysdb: add missing indices
Resolves https://pagure.io/SSSD/sssd/issue/3472
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r-- | src/db/sysdb_init.c | 7 | ||||
-rw-r--r-- | src/db/sysdb_private.h | 9 | ||||
-rw-r--r-- | src/db/sysdb_upgrade.c | 77 |
3 files changed, 92 insertions, 1 deletions
diff --git a/src/db/sysdb_init.c b/src/db/sysdb_init.c index 538ba027c..e246a165e 100644 --- a/src/db/sysdb_init.c +++ b/src/db/sysdb_init.c @@ -503,6 +503,13 @@ static errno_t sysdb_domain_cache_upgrade(TALLOC_CTX *mem_ctx, } } + if (strcmp(version, SYSDB_VERSION_0_18) == 0) { + ret = sysdb_upgrade_18(sysdb, &version); + if (ret != EOK) { + goto done; + } + } + ret = EOK; done: sysdb->ldb = save_ldb; diff --git a/src/db/sysdb_private.h b/src/db/sysdb_private.h index 433220dcc..dbd75615b 100644 --- a/src/db/sysdb_private.h +++ b/src/db/sysdb_private.h @@ -23,6 +23,7 @@ #ifndef __INT_SYS_DB_H__ #define __INT_SYS_DB_H__ +#define SYSDB_VERSION_0_19 "0.19" #define SYSDB_VERSION_0_18 "0.18" #define SYSDB_VERSION_0_17 "0.17" #define SYSDB_VERSION_0_16 "0.16" @@ -42,7 +43,7 @@ #define SYSDB_VERSION_0_2 "0.2" #define SYSDB_VERSION_0_1 "0.1" -#define SYSDB_VERSION SYSDB_VERSION_0_18 +#define SYSDB_VERSION SYSDB_VERSION_0_19 #define SYSDB_BASE_LDIF \ "dn: @ATTRIBUTES\n" \ @@ -72,6 +73,11 @@ "@IDXATTR: sshKnownHostsExpire\n" \ "@IDXATTR: objectSIDString\n" \ "@IDXONE: 1\n" \ + "@IDXATTR: ghost\n" \ + "@IDXATTR: userPrincipalName\n" \ + "@IDXATTR: canonicalUserPrincipalName\n" \ + "@IDXATTR: uniqueID\n" \ + "@IDXATTR: mail\n" \ "\n" \ "dn: @MODULES\n" \ "@LIST: asq,memberof\n" \ @@ -162,6 +168,7 @@ int sysdb_upgrade_16(struct sysdb_ctx *sysdb, const char **ver); int sysdb_upgrade_17(struct sysdb_ctx *sysdb, struct sysdb_dom_upgrade_ctx *upgrade_ctx, const char **ver); +int sysdb_upgrade_18(struct sysdb_ctx *sysdb, const char **ver); int sysdb_add_string(struct ldb_message *msg, const char *attr, const char *value); diff --git a/src/db/sysdb_upgrade.c b/src/db/sysdb_upgrade.c index 4ca8433f9..040c91ca6 100644 --- a/src/db/sysdb_upgrade.c +++ b/src/db/sysdb_upgrade.c @@ -2236,6 +2236,83 @@ done: } return ret; } + +int sysdb_upgrade_18(struct sysdb_ctx *sysdb, const char **ver) +{ + struct upgrade_ctx *ctx; + errno_t ret; + struct ldb_message *msg = NULL; + + ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_19, &ctx); + if (ret) { + return ret; + } + + /* Add missing indices */ + msg = ldb_msg_new(ctx); + if (msg == NULL) { + ret = ENOMEM; + goto done; + } + + msg->dn = ldb_dn_new(msg, sysdb->ldb, "@INDEXLIST"); + if (msg->dn == NULL) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_string(msg, "@IDXATTR", SYSDB_GHOST); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_string(msg, "@IDXATTR", SYSDB_UPN); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_string(msg, "@IDXATTR", SYSDB_CANONICAL_UPN); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_string(msg, "@IDXATTR", SYSDB_UUID); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_msg_add_string(msg, "@IDXATTR", SYSDB_USER_EMAIL); + if (ret != LDB_SUCCESS) { + ret = ENOMEM; + goto done; + } + + ret = ldb_modify(sysdb->ldb, msg); + if (ret != LDB_SUCCESS) { + ret = sysdb_error_to_errno(ret); + goto done; + } + + talloc_free(msg); + + /* conversion done, update version number */ + ret = update_version(ctx); + +done: + ret = finish_upgrade(ret, &ctx, ver); + return ret; +} + /* * Example template for future upgrades. * Copy and change version numbers as appropriate. |