sysdb_upgrade.c revision f983b400bf4f6fb14a2174d6f58071e06e9ec832
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher/*
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher SSSD
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher Authors:
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher Simo Sorce <ssorce@redhat.com>
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher Stephen Gallagher <sgallagh@redhat.com>
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher Copyright (C) 2008-2011 Simo Sorce <ssorce@redhat.com>
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher Copyright (C) 2008-2011 Stephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher This program is free software; you can redistribute it and/or modify
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher it under the terms of the GNU General Public License as published by
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher the Free Software Foundation; either version 3 of the License, or
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher (at your option) any later version.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher This program is distributed in the hope that it will be useful,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher but WITHOUT ANY WARRANTY; without even the implied warranty of
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher GNU General Public License for more details.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher You should have received a copy of the GNU General Public License
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher along with this program. If not, see <http://www.gnu.org/licenses/>.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher*/
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher#include "util/util.h"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher#include "db/sysdb_private.h"
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek#include "db/sysdb_autofs.h"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcestruct upgrade_ctx {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct ldb_context *ldb;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce const char *new_version;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce};
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcestatic errno_t commence_upgrade(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce const char *new_ver, struct upgrade_ctx **_ctx)
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce{
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce int ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE, "UPGRADING DB TO VERSION %s\n", new_ver);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ctx = talloc(mem_ctx, struct upgrade_ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (!ctx) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ctx->ldb = ldb;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ctx->new_version = new_ver;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ldb_transaction_start(ldb);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret != LDB_SUCCESS) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = EIO;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = EOK;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcedone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret != EOK) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce talloc_free(ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce } else {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce *_ctx = ctx;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce}
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcestatic errno_t update_version(struct upgrade_ctx *ctx)
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce{
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct ldb_message *msg = NULL;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce errno_t ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce msg = ldb_msg_new(ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (!msg) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce msg->dn = ldb_dn_new(msg, ctx->ldb, SYSDB_BASE);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (!msg->dn) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ldb_msg_add_empty(msg, "version", LDB_FLAG_MOD_REPLACE, NULL);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret != LDB_SUCCESS) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ldb_msg_add_string(msg, "version", ctx->new_version);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret != LDB_SUCCESS) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = ldb_modify(ctx->ldb, msg);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret != LDB_SUCCESS) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = sysdb_error_to_errno(ret);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce goto done;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = EOK;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcedone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce talloc_free(msg);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce}
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcestatic int finish_upgrade(int ret, struct upgrade_ctx **ctx, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher int lret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret == EOK) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce lret = ldb_transaction_commit((*ctx)->ldb);
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher ret = sysdb_error_to_errno(lret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret == EOK) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce *ver = (*ctx)->new_version;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce lret = ldb_transaction_cancel((*ctx)->ldb);
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher if (lret != LDB_SUCCESS) {
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher DEBUG(SSSDBG_CRIT_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Could not cancel transaction! [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_strerror(lret));
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher /* Do not overwrite ret here, we want to return
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher * the original failure, not the failure of the
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher * transaction cancellation.
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher */
cff916f5352fe7c3a679571130090efdb935618aStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce talloc_zfree(*ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher/* serach all groups that have a memberUid attribute.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * change it into a member attribute for a user of same domain.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * remove the memberUid attribute
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * add the new member attribute
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * finally stop indexing memberUid
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * upgrade version to 0.2
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_upgrade_01(struct ldb_context *ldb, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message_element *el;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_result *res;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *basedn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *mem_dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const struct ldb_val *val;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const char *filter = "(&(memberUid=*)(objectclass=group))";
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const char *attrs[] = { "memberUid", NULL };
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const char *mdn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher char *domain;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret, i, j;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ENOMEM;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(tmp_ctx, ldb, SYSDB_VERSION_0_2, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce talloc_free(tmp_ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher basedn = ldb_dn_new(tmp_ctx, ldb, SYSDB_BASE);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!basedn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_search(ldb, tmp_ctx, &res,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher basedn, LDB_SCOPE_SUBTREE,
87c9241da76f8a7c93095649b2c09a2a07190a36Krzysztof Klimonda attrs, "%s", filter);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher for (i = 0; i < res->count; i++) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher el = ldb_msg_find_element(res->msgs[i], "memberUid");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!el) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "memberUid is missing from message [%s], skipping\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher continue;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* create modification message */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = res->msgs[i]->dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "memberUid", LDB_FLAG_MOD_DELETE, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, SYSDB_MEMBER, LDB_FLAG_MOD_ADD, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* get domain name component value */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher val = ldb_dn_get_component_val(res->msgs[i]->dn, 2);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher domain = talloc_strndup(tmp_ctx, (const char *)val->data, val->length);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!domain) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher for (j = 0; j < el->num_values; j++) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher mem_dn = ldb_dn_new_fmt(tmp_ctx, ldb, SYSDB_TMPL_USER,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher (const char *)el->values[j].data, domain);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!mem_dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher mdn = talloc_strdup(msg, ldb_dn_get_linearized(mem_dn));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!mdn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, SYSDB_MEMBER, mdn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(mem_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* ok now we are ready to modify the entry */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_check_upgrade_02(struct sss_domain_info *domains,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const char *db_path)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx = NULL;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_context *ldb;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher char *ldb_file;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct sysdb_ctx *sysdb;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct sss_domain_info *dom;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message_element *el;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_result *res;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *verdn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher const char *version = NULL;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher bool do_02_upgrade = false;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher bool ctx_trans = false;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
f983b400bf4f6fb14a2174d6f58071e06e9ec832Jakub Hrozek ldb_file = talloc_asprintf(tmp_ctx, "%s/"LOCAL_SYSDB_FILE,
f983b400bf4f6fb14a2174d6f58071e06e9ec832Jakub Hrozek db_path);
f983b400bf4f6fb14a2174d6f58071e06e9ec832Jakub Hrozek if (ldb_file == NULL) {
f983b400bf4f6fb14a2174d6f58071e06e9ec832Jakub Hrozek ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
72dbcd0a3361f1c0f0c3e348aa2fbcabd926188bJakub Hrozek ret = sysdb_ldb_connect(tmp_ctx, ldb_file, 0, &ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE, "sysdb_ldb_connect failed.\n");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher verdn = ldb_dn_new(tmp_ctx, ldb, SYSDB_BASE);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!verdn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_search(ldb, tmp_ctx, &res,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher verdn, LDB_SCOPE_BASE,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher NULL, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (res->count > 1) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (res->count == 1) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher el = ldb_msg_find_element(res->msgs[0], "version");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (el) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (el->num_values != 1) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EINVAL;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher version = talloc_strndup(tmp_ctx,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher (char *)(el->values[0].data),
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher el->values[0].length);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!version) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (strcmp(version, SYSDB_VERSION) == 0) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* all fine, return */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EOK;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CONF_SETTINGS,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Upgrading DB from version: %s\n", version);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (strcmp(version, SYSDB_VERSION_0_1) == 0) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* convert database */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_upgrade_01(ldb, &version);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (strcmp(version, SYSDB_VERSION_0_2) == 0) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* need to convert database to split files */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher do_02_upgrade = true;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!do_02_upgrade) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* not a v2 upgrade, return and let the normal code take over any
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * further upgrade */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EOK;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* == V2->V3 UPGRADE == */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "UPGRADING DB TO VERSION %s\n", SYSDB_VERSION_0_3);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* ldb uses posix locks,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * posix is stupid and kills all locks when you close *any* file
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * descriptor associated to the same file.
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * Therefore we must close and reopen the ldb file here */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* == Backup and reopen ldb == */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* close */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* backup*/
dfdc99afd56b605632adc265bfb1f55cd52b3dbeNikolai Kondrashov ret = backup_file(ldb_file, SSSDBG_FATAL_FAILURE);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* reopen */
72dbcd0a3361f1c0f0c3e348aa2fbcabd926188bJakub Hrozek ret = sysdb_ldb_connect(tmp_ctx, ldb_file, 0, &ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE, "sysdb_ldb_connect failed.\n");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* open a transaction */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_start(ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to start ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* == Upgrade contents == */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher for (dom = domains; dom; dom = dom->next) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *domain_dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *users_dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *groups_dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int i;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* skip local */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (strcasecmp(dom->provider, "local") == 0) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher continue;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* create new dom db */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_domain_init_internal(tmp_ctx, dom,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher db_path, false, &sysdb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_start(sysdb->ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to start ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ctx_trans = true;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* search all entries for this domain in local,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * copy them all in the new database,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * then remove them from local */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher domain_dn = ldb_dn_new_fmt(tmp_ctx, sysdb->ldb,
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorce SYSDB_DOM_BASE, dom->name);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!domain_dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_search(ldb, tmp_ctx, &res,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher domain_dn, LDB_SCOPE_SUBTREE,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher NULL, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
12a000c8c7c07259e438fb1e992134bdd07d9a30Pavel Březina users_dn = sysdb_user_base_dn(tmp_ctx, dom);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!users_dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
12a000c8c7c07259e438fb1e992134bdd07d9a30Pavel Březina groups_dn = sysdb_group_base_dn(tmp_ctx, dom);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!groups_dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher for (i = 0; i < res->count; i++) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_dn *orig_dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = res->msgs[i];
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* skip pre-created congtainers */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if ((ldb_dn_compare(msg->dn, domain_dn) == 0) ||
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher (ldb_dn_compare(msg->dn, users_dn) == 0) ||
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher (ldb_dn_compare(msg->dn, groups_dn) == 0)) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher continue;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* regenerate the DN against the new ldb as it may have different
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * casefolding rules (example: name changing from case insensitive
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * to case sensitive) */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher orig_dn = msg->dn;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(msg, sysdb->ldb,
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(orig_dn));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_add(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "WARNING: Could not add entry %s,"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher " to new ldb file! (%d [%s])\n",
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(msg->dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(sysdb->ldb));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_delete(ldb, orig_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "WARNING: Could not remove entry %s,"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher " from old ldb file! (%d [%s])\n",
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(orig_dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(ldb));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* now remove the basic containers from local */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* these were optional so debug at level 9 in case
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher * of failure just for tracing */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_delete(ldb, groups_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_TRACE_ALL, "WARNING: Could not remove entry %s,"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher " from old ldb file! (%d [%s])\n",
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(groups_dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(ldb));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_delete(ldb, users_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_TRACE_ALL, "WARNING: Could not remove entry %s,"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher " from old ldb file! (%d [%s])\n",
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(users_dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(ldb));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_delete(ldb, domain_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_TRACE_ALL, "WARNING: Could not remove entry %s,"
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher " from old ldb file! (%d [%s])\n",
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ldb_dn_get_linearized(domain_dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(ldb));
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_commit(sysdb->ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to commit ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ctx_trans = false;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(domain_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(groups_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(users_dn);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_zfree(res);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* conversion done, upgrade version number */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, ldb, SYSDB_BASE);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "version", LDB_FLAG_MOD_REPLACE, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, "version", SYSDB_VERSION_0_3);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_commit(ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to commit ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EIO;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto exit;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = EOK;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != EOK) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ctx_trans) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_cancel(sysdb->ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to cancel ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_transaction_cancel(ldb);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov DEBUG(SSSDBG_CRIT_FAILURE,
83bf46f4066e3d5e838a32357c201de9bd6ecdfdNikolai Kondrashov "Failed to cancel ldb transaction! (%d)\n", ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherexit:
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_upgrade_03(struct sysdb_ctx *sysdb, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_4, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Make this database case-sensitive */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@ATTRIBUTES");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "name", LDB_FLAG_MOD_DELETE, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_upgrade_04(struct sysdb_ctx *sysdb, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_5, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Add new index */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, "@IDXATTR", "originalDN");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Rebuild memberuid and memberoif attributes */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@MEMBEROF-REBUILD");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_add(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_upgrade_05(struct sysdb_ctx *sysdb, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_6, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Add new indexes */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Add Index for dataExpireTimestamp */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, "@IDXATTR", "dataExpireTimestamp");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Add index to speed up ONELEVEL searches */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, "@IDXONE", LDB_FLAG_MOD_ADD, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, "@IDXONE", "1");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherint sysdb_upgrade_06(struct sysdb_ctx *sysdb, const char **ver)
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher{
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher TALLOC_CTX *tmp_ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher int ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher tmp_ctx = talloc_new(NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!tmp_ctx) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_7, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Add new indexes */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg = ldb_msg_new(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@ATTRIBUTES");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (!msg->dn) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher /* Case insensitive search for originalDN */
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_empty(msg, SYSDB_ORIG_DN, LDB_FLAG_MOD_ADD, NULL);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_msg_add_string(msg, SYSDB_ORIG_DN, "CASE_INSENSITIVE");
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ENOMEM;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher if (ret != LDB_SUCCESS) {
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher ret = sysdb_error_to_errno(ret);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher goto done;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher }
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher talloc_free(tmp_ctx);
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher return ret;
c2352a73f52f600d95966ebe0b0819649ba923faStephen Gallagher}
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagherint sysdb_upgrade_07(struct sysdb_ctx *sysdb, const char **ver)
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher{
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher TALLOC_CTX *tmp_ctx;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher int ret;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher tmp_ctx = talloc_new(NULL);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (!tmp_ctx) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher return ENOMEM;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_8, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher /* Add new indexes */
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher msg = ldb_msg_new(tmp_ctx);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (!msg) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ENOMEM;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher goto done;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (!msg->dn) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ENOMEM;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher goto done;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher /* Add Index for nameAlias */
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (ret != LDB_SUCCESS) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ENOMEM;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher goto done;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ldb_msg_add_string(msg, "@IDXATTR", "nameAlias");
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (ret != LDB_SUCCESS) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ENOMEM;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher goto done;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher if (ret != LDB_SUCCESS) {
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher ret = sysdb_error_to_errno(ret);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher goto done;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher }
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher
0387564f38698c5301b76b24eda000c448174171Stephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher talloc_free(tmp_ctx);
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher return ret;
0387564f38698c5301b76b24eda000c448174171Stephen Gallagher}
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagherint sysdb_upgrade_08(struct sysdb_ctx *sysdb, const char **ver)
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher{
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher TALLOC_CTX *tmp_ctx;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher int ret;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher tmp_ctx = talloc_new(NULL);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (!tmp_ctx) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher return ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_9, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher /* Add new indexes */
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher msg = ldb_msg_new(tmp_ctx);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (!msg) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (!msg->dn) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher /* Add Index for servicePort and serviceProtocol */
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (ret != LDB_SUCCESS) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ldb_msg_add_string(msg, "@IDXATTR", "servicePort");
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (ret != LDB_SUCCESS) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ldb_msg_add_string(msg, "@IDXATTR", "serviceProtocol");
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (ret != LDB_SUCCESS) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ENOMEM;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = ldb_modify(sysdb->ldb, msg);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher if (ret != LDB_SUCCESS) {
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher ret = sysdb_error_to_errno(ret);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher goto done;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher }
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagherdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher talloc_free(tmp_ctx);
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher return ret;
ff907ba7a9b5e429de086515642f97a0447e546aStephen Gallagher}
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozekint sysdb_upgrade_09(struct sysdb_ctx *sysdb, const char **ver)
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek{
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek TALLOC_CTX *tmp_ctx;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek int ret;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek tmp_ctx = talloc_new(NULL);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (!tmp_ctx) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek return ENOMEM;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_10, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek /* Add new indexes */
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek msg = ldb_msg_new(tmp_ctx);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (!msg) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ENOMEM;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek goto done;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (!msg->dn) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ENOMEM;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek goto done;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek /* Add Index for servicePort and serviceProtocol */
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (ret != LDB_SUCCESS) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ENOMEM;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek goto done;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ldb_msg_add_string(msg, "@IDXATTR", "sudoUser");
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (ret != LDB_SUCCESS) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ENOMEM;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek goto done;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = ldb_modify(sysdb->ldb, msg);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek if (ret != LDB_SUCCESS) {
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek ret = sysdb_error_to_errno(ret);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek goto done;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek }
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozekdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek talloc_free(tmp_ctx);
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek return ret;
25a9a1768d2e3587cc68b76a0a5df1e42a2c89abJakub Hrozek}
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorceint sysdb_upgrade_10(struct sysdb_ctx *sysdb, struct sss_domain_info *domain,
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorce const char **ver)
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny{
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny TALLOC_CTX *tmp_ctx;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny int ret;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny struct ldb_result *res;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny struct ldb_message *msg;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny struct ldb_message *user;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny struct ldb_message_element *memberof_el;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny const char *name;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny struct ldb_dn *basedn;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny const char *filter = "(&(objectClass=user)(!(uidNumber=*))(memberOf=*))";
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny const char *attrs[] = { "name", "memberof", NULL };
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny int i, j;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny tmp_ctx = talloc_new(NULL);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (tmp_ctx == NULL) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny return ENOMEM;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_11, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
12a000c8c7c07259e438fb1e992134bdd07d9a30Pavel Březina basedn = sysdb_user_base_dn(tmp_ctx, domain);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (basedn == NULL) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = EIO;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ldb_search(sysdb->ldb, tmp_ctx, &res, basedn, LDB_SCOPE_SUBTREE,
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny attrs, "%s", filter);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (ret != LDB_SUCCESS) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = EIO;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny for (i = 0; i < res->count; i++) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny user = res->msgs[i];
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny memberof_el = ldb_msg_find_element(user, "memberof");
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny name = ldb_msg_find_attr_as_string(user, "name", NULL);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (name == NULL) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = EIO;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_LIBS, "User [%s] is a member of %d groups\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov name, memberof_el->num_values);
3cf417b8502f5af34e6680f12a3365bcdd9fa40dJakub Hrozek
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny for (j = 0; j < memberof_el->num_values; j++) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny msg = ldb_msg_new(tmp_ctx);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (msg == NULL) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ENOMEM;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny msg->dn = ldb_dn_from_ldb_val(tmp_ctx, sysdb->ldb, &memberof_el->values[j]);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (msg->dn == NULL) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ENOMEM;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (!ldb_dn_validate(msg->dn)) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_MINOR_FAILURE, "DN validation failed during "
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny "upgrade: [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov memberof_el->values[j].data);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny talloc_zfree(msg);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny continue;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ldb_msg_add_empty(msg, "ghost", LDB_FLAG_MOD_ADD, NULL);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (ret != LDB_SUCCESS) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ENOMEM;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ldb_msg_add_string(msg, "ghost", name);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (ret != LDB_SUCCESS) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ENOMEM;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "Adding ghost [%s] to entry [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov name, ldb_dn_get_linearized(msg->dn));
3cf417b8502f5af34e6680f12a3365bcdd9fa40dJakub Hrozek
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = sss_ldb_modify_permissive(sysdb->ldb, msg);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny talloc_zfree(msg);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (ret == LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek /* If we failed adding the ghost user(s) because the values already
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek * exist, they were probably propagated from a parent that was
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek * upgraded before us. Mark the group as expired so that it is
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek * refreshed on next request.
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek */
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek msg = ldb_msg_new(tmp_ctx);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (msg == NULL) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = ENOMEM;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek goto done;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek }
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek msg->dn = ldb_dn_from_ldb_val(tmp_ctx, sysdb->ldb, &memberof_el->values[j]);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (msg->dn == NULL) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = ENOMEM;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek goto done;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek }
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = ldb_msg_add_empty(msg, SYSDB_CACHE_EXPIRE,
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek LDB_FLAG_MOD_REPLACE, NULL);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (ret != LDB_SUCCESS) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek goto done;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek }
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = ldb_msg_add_string(msg, SYSDB_CACHE_EXPIRE, "1");
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (ret != LDB_SUCCESS) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek goto done;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek }
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek ret = sss_ldb_modify_permissive(sysdb->ldb, msg);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek talloc_zfree(msg);
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek if (ret != LDB_SUCCESS) {
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek goto done;
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek }
541ee4f36c58dac103dfb766231cf8f26db93676Jakub Hrozek } else if (ret != LDB_SUCCESS) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = sysdb_error_to_errno(ret);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "Removing fake user [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(user->dn));
3cf417b8502f5af34e6680f12a3365bcdd9fa40dJakub Hrozek
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = ldb_delete(sysdb->ldb, user->dn);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny if (ret != LDB_SUCCESS) {
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny ret = sysdb_error_to_errno(ret);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny goto done;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny }
7733e4179f56fb0ca41788b5d8de2ee1130b1badJakub Hrozek }
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zelenydone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny talloc_free(tmp_ctx);
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny return ret;
c193cdcb43bffc1eac1bde6dfb0311e033e0c12fJan Zeleny}
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorceint sysdb_upgrade_11(struct sysdb_ctx *sysdb, struct sss_domain_info *domain,
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorce const char **ver)
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek{
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek TALLOC_CTX *tmp_ctx;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek errno_t ret;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek struct ldb_result *res;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek struct ldb_message *entry;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek const char *key;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek const char *value;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek struct ldb_message_element *memberof_el;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek struct ldb_dn *memberof_dn;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek struct ldb_dn *basedn;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek const struct ldb_val *val;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek const char *attrs[] = { SYSDB_AUTOFS_ENTRY_KEY,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek SYSDB_AUTOFS_ENTRY_VALUE,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek SYSDB_MEMBEROF,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek NULL };
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek size_t i, j;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek tmp_ctx = talloc_new(NULL);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (!tmp_ctx) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek return ENOMEM;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_12, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce }
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek basedn = ldb_dn_new_fmt(tmp_ctx, sysdb->ldb, SYSDB_TMPL_CUSTOM_SUBTREE,
46675b5033169e1e954cd570413ce85b2c5e11fcSimo Sorce AUTOFS_ENTRY_SUBDIR, domain->name);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (basedn == NULL) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek ret = ENOMEM;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek goto done;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek ret = ldb_search(sysdb->ldb, tmp_ctx, &res, basedn, LDB_SCOPE_SUBTREE,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek attrs, "(objectClass=%s)", SYSDB_AUTOFS_ENTRY_OC);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (ret != LDB_SUCCESS) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek ret = EIO;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek goto done;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_LIBS, "Found %d autofs entries\n", res->count);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek for (i = 0; i < res->count; i++) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek entry = res->msgs[i];
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek key = ldb_msg_find_attr_as_string(entry,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek SYSDB_AUTOFS_ENTRY_KEY, NULL);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek value = ldb_msg_find_attr_as_string(entry,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek SYSDB_AUTOFS_ENTRY_VALUE, NULL);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek memberof_el = ldb_msg_find_element(entry, SYSDB_MEMBEROF);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (key && value && memberof_el) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek for (j = 0; j < memberof_el->num_values; j++) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek memberof_dn = ldb_dn_from_ldb_val(tmp_ctx, sysdb->ldb,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek &(memberof_el->values[j]));
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (!memberof_dn) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Cannot convert memberof into DN, skipping\n");
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek continue;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek val = ldb_dn_get_rdn_val(memberof_dn);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (!val) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Cannot get map name from map DN\n");
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek continue;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
e7d1cd14ce1a427007b1a7e9789dcb7e9619f84fJakub Hrozek ret = sysdb_save_autofsentry(domain,
2913240aee51ce81195148a4d814e967f66839c4Simo Sorce (const char *) val->data,
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek key, value, NULL);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (ret != EOK) {
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Cannot save autofs entry [%s]-[%s] into map %s\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov key, value, val->data);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek continue;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek /* Delete the old entry if it was either processed or incomplete */
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_LIBS, "Deleting [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(entry->dn));
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek ret = ldb_delete(sysdb->ldb, entry->dn);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek if (ret != EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Cannot delete old autofs entry %s\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(entry->dn));
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek continue;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek }
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozekdone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek talloc_free(tmp_ctx);
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek return ret;
77f445dbaecc8e792e1ad42e3742800ad141bee0Jakub Hrozek}
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholastaint sysdb_upgrade_12(struct sysdb_ctx *sysdb, const char **ver)
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta{
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta TALLOC_CTX *tmp_ctx;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta int ret;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta struct ldb_message *msg;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta tmp_ctx = talloc_new(NULL);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (!tmp_ctx) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta return ENOMEM;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_13, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta /* add new indexes */
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta msg = ldb_msg_new(tmp_ctx);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (!msg) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ENOMEM;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta goto done;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@INDEXLIST");
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (!msg->dn) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ENOMEM;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta goto done;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta /* add index for sshKnownHostsExpire */
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (ret != LDB_SUCCESS) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ENOMEM;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta goto done;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ldb_msg_add_string(msg, "@IDXATTR", "sshKnownHostsExpire");
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (ret != LDB_SUCCESS) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ENOMEM;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta goto done;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = ldb_modify(sysdb->ldb, msg);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta if (ret != LDB_SUCCESS) {
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta ret = sysdb_error_to_errno(ret);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta goto done;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorcedone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce talloc_free(tmp_ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce}
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorceint sysdb_upgrade_13(struct sysdb_ctx *sysdb, const char **ver)
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce{
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce struct upgrade_ctx *ctx;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce struct ldb_result *dom_res;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce struct ldb_result *res;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce struct ldb_dn *basedn;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce const char *attrs[] = { "cn", "name", NULL };
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce const char *tmp_str;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce errno_t ret;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce int i, j, l, n;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_14, &ctx);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (ret) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce return ret;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce basedn = ldb_dn_new(ctx, sysdb->ldb, SYSDB_BASE);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (!basedn) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Failed to build base dn\n");
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = EIO;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce goto done;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = ldb_search(sysdb->ldb, ctx, &dom_res,
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce basedn, LDB_SCOPE_ONELEVEL,
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce attrs, "objectclass=%s", SYSDB_SUBDOMAIN_CLASS);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (ret != LDB_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Failed to search subdomains\n");
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = EIO;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce goto done;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce for (i = 0; i < dom_res->count; i++) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce tmp_str = ldb_msg_find_attr_as_string(dom_res->msgs[i], "cn", NULL);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (tmp_str == NULL) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce DEBUG(SSSDBG_MINOR_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "The object [%s] doesn't have a name\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(dom_res->msgs[i]->dn));
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce continue;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce basedn = ldb_dn_new_fmt(ctx, sysdb->ldb, SYSDB_DOM_BASE, tmp_str);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (!basedn) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to build base dn for subdomain %s\n", tmp_str);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce continue;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = ldb_search(sysdb->ldb, ctx, &res,
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce basedn, LDB_SCOPE_SUBTREE, attrs, NULL);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (ret != LDB_SUCCESS) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to search subdomain %s\n", tmp_str);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce talloc_free(basedn);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce continue;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce l = ldb_dn_get_comp_num(basedn);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce for (j = 0; j < res->count; j++) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce n = ldb_dn_get_comp_num(res->msgs[j]->dn);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (n <= l + 1) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce /* Do not remove subdomain containers, only their contents */
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce continue;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = ldb_delete(sysdb->ldb, res->msgs[j]->dn);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce if (ret) {
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to delete %s\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[j]->dn));
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce continue;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce talloc_free(basedn);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce talloc_free(res);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce }
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce talloc_free(dom_res);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce /* conversion done, update version number */
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = update_version(ctx);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorcedone:
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce return ret;
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce}
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorceint sysdb_upgrade_14(struct sysdb_ctx *sysdb, const char **ver)
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce{
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce struct upgrade_ctx *ctx;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce struct ldb_message *msg;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce struct ldb_result *res;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce struct ldb_dn *basedn;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce struct ldb_dn *newdn;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce const char *attrs[] = { SYSDB_NAME, NULL };
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce const char *tmp_str;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce errno_t ret;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce int i;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_15, &ctx);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce return ret;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce basedn = ldb_dn_new(ctx, sysdb->ldb, SYSDB_BASE);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (!basedn) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Failed to build base dn\n");
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce /* create base ranges container */
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce msg = ldb_msg_new(ctx);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (!msg) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ENOMEM;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce msg->dn = ldb_dn_new(msg, sysdb->ldb, SYSDB_TMPL_RANGE_BASE);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (!msg->dn) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ENOMEM;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_msg_add_string(msg, "cn", "ranges");
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret != LDB_SUCCESS) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce /* do a synchronous add */
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_add(sysdb->ldb, msg);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret != LDB_SUCCESS) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_FATAL_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to upgrade DB (%d, [%s])!\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, ldb_errstring(sysdb->ldb));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce talloc_zfree(msg);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_search(sysdb->ldb, ctx, &res,
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce basedn, LDB_SCOPE_SUBTREE, attrs,
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce "objectclass=%s", SYSDB_ID_RANGE_CLASS);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret != LDB_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Failed to search range objects\n");
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce /* Failure to convert any range is not fatal. As long as there are no
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce * left-over objects we can fail to move them around, as they will be
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce * recreated on the next online access */
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce for (i = 0; i < res->count; i++) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce tmp_str = ldb_msg_find_attr_as_string(res->msgs[i], SYSDB_NAME, NULL);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (tmp_str == NULL) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "The object [%s] doesn't have a name\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_delete(sysdb->ldb, res->msgs[i]->dn);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to delete %s\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce continue;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce newdn = ldb_dn_new_fmt(ctx, sysdb->ldb, SYSDB_TMPL_RANGE, tmp_str);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (!newdn) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_CRIT_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to create new DN to move [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ENOMEM;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_rename(sysdb->ldb, res->msgs[i]->dn, newdn);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret != LDB_SUCCESS) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_CRIT_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to move [%s] to [%s]\n",
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ldb_dn_get_linearized(res->msgs[i]->dn),
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(newdn));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = ldb_delete(sysdb->ldb, res->msgs[i]->dn);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce if (ret) {
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce DEBUG(SSSDBG_OP_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to delete %s\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = EIO;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce goto done;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce talloc_zfree(newdn);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce }
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce /* conversion done, update version number */
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = update_version(ctx);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorcedone:
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce return ret;
73120327cc136229d56d08f7f8c5e8df4129c1e3Simo Sorce}
d096233fe7610186ee12f41f97ca9602a3768405Simo Sorce
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Boseint sysdb_upgrade_15(struct sysdb_ctx *sysdb, const char **ver)
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose{
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose TALLOC_CTX *tmp_ctx;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose int ret;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose struct ldb_message *msg;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose struct upgrade_ctx *ctx;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose tmp_ctx = talloc_new(NULL);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (!tmp_ctx) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose return ENOMEM;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_16, &ctx);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (ret) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose return ret;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose /* Add new indexes */
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose msg = ldb_msg_new(tmp_ctx);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (!msg) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ENOMEM;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose goto done;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose msg->dn = ldb_dn_new(tmp_ctx, sysdb->ldb, "@ATTRIBUTES");
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (!msg->dn) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ENOMEM;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose goto done;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose /* Case insensitive search for canonicalUserPrincipalName */
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ldb_msg_add_empty(msg, SYSDB_CANONICAL_UPN, LDB_FLAG_MOD_ADD, NULL);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (ret != LDB_SUCCESS) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ENOMEM;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose goto done;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ldb_msg_add_string(msg, SYSDB_CANONICAL_UPN, "CASE_INSENSITIVE");
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (ret != LDB_SUCCESS) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ENOMEM;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose goto done;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = ldb_modify(sysdb->ldb, msg);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose if (ret != LDB_SUCCESS) {
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = sysdb_error_to_errno(ret);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose goto done;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose }
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose /* conversion done, update version number */
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = update_version(ctx);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bosedone:
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose ret = finish_upgrade(ret, &ctx, ver);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose talloc_free(tmp_ctx);
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose return ret;
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose}
9ad2756fcf4df945f4cd09238e3f9fe707b0b70cSumit Bose
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozekint sysdb_upgrade_16(struct sysdb_ctx *sysdb, const char **ver)
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek{
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek struct ldb_message *msg;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek struct upgrade_ctx *ctx;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek errno_t ret;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_17, &ctx);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (ret) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek return ret;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek msg = ldb_msg_new(ctx);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (msg == NULL) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ENOMEM;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek goto done;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek msg->dn = ldb_dn_new(msg, sysdb->ldb, "@INDEXLIST");
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (msg->dn == NULL) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ENOMEM;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek goto done;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek /* add index for objectSIDString */
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ldb_msg_add_empty(msg, "@IDXATTR", LDB_FLAG_MOD_ADD, NULL);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (ret != LDB_SUCCESS) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ENOMEM;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek goto done;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ldb_msg_add_string(msg, "@IDXATTR", "objectSIDString");
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (ret != LDB_SUCCESS) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ENOMEM;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek goto done;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = ldb_modify(sysdb->ldb, msg);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek if (ret != LDB_SUCCESS) {
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = sysdb_error_to_errno(ret);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek goto done;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek }
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek /* conversion done, update version number */
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = update_version(ctx);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozekdone:
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek ret = finish_upgrade(ret, &ctx, ver);
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek return ret;
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek}
e61b0e41cb44004d2b260ad9d05802995f7bcb2eJakub Hrozek
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce/*
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce * Example template for future upgrades.
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce * Copy and change version numbers as appropriate.
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce#if 0
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorceint sysdb_upgrade_13(struct sysdb_ctx *sysdb, const char **ver)
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce{
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce struct upgrade_ctx *ctx;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce errno_t ret;
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = commence_upgrade(sysdb, sysdb->ldb, SYSDB_VERSION_0_14, &ctx);
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce if (ret) {
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce return ret;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta }
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* DO STUFF HERE (use ctx, as the local temporary memory context) */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce /* conversion done, update version number */
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = update_version(ctx);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholastadone:
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce ret = finish_upgrade(ret, &ctx, ver);
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta return ret;
3882325ff60f89d0c312e9519bdfd1351978fd73Jan Cholasta}
868ae511c9b0d610f83acf8f01975e1f5e3c1aa3Simo Sorce#endif