mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
Fix failure to load the schema on read-only DB.
This also tries to simplify the logic in the schema -> @ATTRIBUTES and
@INDEXES code.
Andrew Bartlett
(This used to be commit a383b8bf88
)
This commit is contained in:
parent
ab555eb199
commit
acf11ddd5f
@ -79,13 +79,13 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
ret = ldb_msg_add_string(msg, attr->lDAPDisplayName, "CASE_INSENSITIVE");
|
||||
}
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
|
||||
if (attr->searchFlags & SEARCH_FLAG_ATTINDEX) {
|
||||
ret = ldb_msg_add_string(msg_idx, "@IDXATTR", attr->lDAPDisplayName);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,11 +105,11 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
}
|
||||
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!write_attributes) {
|
||||
if (!write_attributes || ret != LDB_SUCCESS) {
|
||||
talloc_free(mem_ctx);
|
||||
return ret;
|
||||
}
|
||||
@ -120,19 +120,13 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
if (ret == LDB_ERR_NO_SUCH_OBJECT) {
|
||||
ret = ldb_add(ldb, msg);
|
||||
} else if (ret != LDB_SUCCESS) {
|
||||
talloc_free(mem_ctx);
|
||||
return ret;
|
||||
} else if (res->count != 1) {
|
||||
ret = ldb_add(ldb, msg);
|
||||
} else {
|
||||
|
||||
if (res->count != 1) {
|
||||
talloc_free(mem_ctx);
|
||||
return LDB_ERR_NO_SUCH_OBJECT;
|
||||
}
|
||||
|
||||
ret = LDB_SUCCESS;
|
||||
/* Annoyingly added to our search results */
|
||||
ldb_msg_remove_attr(res->msgs[0], "distinguishedName");
|
||||
|
||||
|
||||
mod_msg = ldb_msg_diff(ldb, res->msgs[0], msg);
|
||||
if (mod_msg->num_elements > 0) {
|
||||
ret = ldb_modify(ldb, mod_msg);
|
||||
@ -141,10 +135,11 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
|
||||
if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
|
||||
/* We might be on a read-only DB */
|
||||
ret = LDB_SUCCESS;
|
||||
}
|
||||
if (ret != LDB_SUCCESS) {
|
||||
talloc_free(mem_ctx);
|
||||
return ret;
|
||||
} else if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Now write out the indexs, as found in the schema (if they have changed) */
|
||||
@ -153,14 +148,10 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
if (ret == LDB_ERR_NO_SUCH_OBJECT) {
|
||||
ret = ldb_add(ldb, msg_idx);
|
||||
} else if (ret != LDB_SUCCESS) {
|
||||
talloc_free(mem_ctx);
|
||||
return ret;
|
||||
} else if (res->count != 1) {
|
||||
ret = ldb_add(ldb, msg_idx);
|
||||
} else {
|
||||
if (res_idx->count != 1) {
|
||||
talloc_free(mem_ctx);
|
||||
return LDB_ERR_NO_SUCH_OBJECT;
|
||||
}
|
||||
|
||||
ret = LDB_SUCCESS;
|
||||
/* Annoyingly added to our search results */
|
||||
ldb_msg_remove_attr(res_idx->msgs[0], "distinguishedName");
|
||||
|
||||
@ -171,7 +162,6 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
|
||||
}
|
||||
if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
|
||||
/* We might be on a read-only DB */
|
||||
talloc_free(mem_ctx);
|
||||
ret = LDB_SUCCESS;
|
||||
}
|
||||
talloc_free(mem_ctx);
|
||||
|
Loading…
Reference in New Issue
Block a user