640b2adac05bb7f5e9fba064434c91852c3a72e6nd System Database - ID ranges related calls
640b2adac05bb7f5e9fba064434c91852c3a72e6nd Copyright (C) 2012 Sumit Bose <sbose@redhat.com>
8e34905974b7a442a55adac3b3fdb196c389e807takashi This program is free software; you can redistribute it and/or modify
8e34905974b7a442a55adac3b3fdb196c389e807takashi it under the terms of the GNU General Public License as published by
640b2adac05bb7f5e9fba064434c91852c3a72e6nd the Free Software Foundation; either version 3 of the License, or
6e89d4f6c259afc94f8806c74a33a8fe81392499sf (at your option) any later version.
640b2adac05bb7f5e9fba064434c91852c3a72e6nd This program is distributed in the hope that it will be useful,
640b2adac05bb7f5e9fba064434c91852c3a72e6nd but WITHOUT ANY WARRANTY; without even the implied warranty of
640b2adac05bb7f5e9fba064434c91852c3a72e6nd MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
640b2adac05bb7f5e9fba064434c91852c3a72e6nd GNU General Public License for more details.
640b2adac05bb7f5e9fba064434c91852c3a72e6nd You should have received a copy of the GNU General Public License
a27e9e05958bc51ea09edb8d8d862fe8b125313bslive along with this program. If not, see <http://www.gnu.org/licenses/>.
a27e9e05958bc51ea09edb8d8d862fe8b125313bslivestatic errno_t find_attr_as_uint32_t(const struct ldb_message *msg,
a27e9e05958bc51ea09edb8d8d862fe8b125313bslive val = ldb_msg_find_attr_as_uint64(msg, attr_name, UINT64_MAX);
a27e9e05958bc51ea09edb8d8d862fe8b125313bsliveerrno_t sysdb_get_ranges(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb,
dcbfc7bd0f8aaeea6833646813e948324fdc79a0rbowen basedn = ldb_dn_new(tmp_ctx, sysdb->ldb, SYSDB_TMPL_RANGE_BASE);
222f0f03c2f9ee6343c18f80f0cb6e9aad21bc58slive list = talloc_zero_array(tmp_ctx, struct range_info *, res->count + 1);
95e8cab14596a61826fa52477dcaebc07bfbad00colm tmp_str = ldb_msg_find_attr_as_string(res->msgs[c], SYSDB_NAME, NULL);
95e8cab14596a61826fa52477dcaebc07bfbad00colm DEBUG(SSSDBG_MINOR_FAILURE, "The object [%s] doesn't have a name.\n",
95e8cab14596a61826fa52477dcaebc07bfbad00colm tmp_str = ldb_msg_find_attr_as_string(res->msgs[c], SYSDB_DOMAIN_ID,
8e34905974b7a442a55adac3b3fdb196c389e807takashi list[c]->trusted_dom_sid = talloc_strdup(list, tmp_str);
cd51960ffc0f49d7a9e702162ed49b3eb0909276dirkx DEBUG(SSSDBG_MINOR_FAILURE, "find_attr_as_uint32_t failed.\n");
cd51960ffc0f49d7a9e702162ed49b3eb0909276dirkx ret = find_attr_as_uint32_t(res->msgs[c], SYSDB_ID_RANGE_SIZE,
86bb9693d63dfc1be14519a5b444467e4b0cdaf8kawai DEBUG(SSSDBG_MINOR_FAILURE, "find_attr_as_uint32_t failed.\n");
86bb9693d63dfc1be14519a5b444467e4b0cdaf8kawai ret = find_attr_as_uint32_t(res->msgs[c], SYSDB_BASE_RID,
8e34905974b7a442a55adac3b3fdb196c389e807takashi DEBUG(SSSDBG_MINOR_FAILURE, "find_attr_as_uint32_t failed.\n");
86bb9693d63dfc1be14519a5b444467e4b0cdaf8kawai ret = find_attr_as_uint32_t(res->msgs[c], SYSDB_SECONDARY_BASE_RID,
86bb9693d63dfc1be14519a5b444467e4b0cdaf8kawai DEBUG(SSSDBG_MINOR_FAILURE, "find_attr_as_uint32_t failed.\n");
8e34905974b7a442a55adac3b3fdb196c389e807takashi tmp_str = ldb_msg_find_attr_as_string(res->msgs[c], SYSDB_ID_RANGE_TYPE,
222f0f03c2f9ee6343c18f80f0cb6e9aad21bc58sliveerrno_t sysdb_range_create(struct sysdb_ctx *sysdb, struct range_info *range)
b44815871de48215476ad1d4cc46d3f99da532a5erikabele /* if both or none are set, skip */
222f0f03c2f9ee6343c18f80f0cb6e9aad21bc58slive if ((range->trusted_dom_sid == NULL && range->secondary_base_rid == 0) ||
222f0f03c2f9ee6343c18f80f0cb6e9aad21bc58slive (range->trusted_dom_sid != NULL && range->secondary_base_rid != 0)) {
17efa6b5344b7574597eec03f02ef28103e19265nd DEBUG(SSSDBG_OP_FAILURE, "Invalid range, skipping. Expected that "
1f2a7403f1389cbf2da0a53a2b2fb425dea75506erikabele "either the secondary base RID or the SID of the trusted "
94abf1cc80072ea31506946ac6595631ca6d2c14rbowen "domain is set, but not both or none of them.\n");
1f666f93c91dbb492dc7706573b369cd03b84265poirier ret = sysdb_add_string(msg, SYSDB_OBJECTCLASS, SYSDB_ID_RANGE_CLASS);
1f666f93c91dbb492dc7706573b369cd03b84265poirier if (range->trusted_dom_sid == NULL && range->secondary_base_rid != 0) {
b44815871de48215476ad1d4cc46d3f99da532a5erikabele ret = sysdb_add_ulong(msg, SYSDB_SECONDARY_BASE_RID,
ef685e00a47967e27d89709461728a229d762172nd ret = sysdb_add_string(msg, SYSDB_DOMAIN_ID, range->trusted_dom_sid);
81622596373177e079337e956f7a5800895443b3erikabele ret = sysdb_add_string(msg, SYSDB_NAME, range->name);
6e89d4f6c259afc94f8806c74a33a8fe81392499sf ret = sysdb_add_ulong(msg, SYSDB_BASE_ID, (unsigned long) range->base_id);
e554dd2dae4ba2c32dbd05fc0d4e0a42ef4ba902rbowen ret = sysdb_add_ulong(msg, SYSDB_CREATE_TIME, (unsigned long)time(NULL));
e554dd2dae4ba2c32dbd05fc0d4e0a42ef4ba902rbowen ret = sysdb_add_string(msg, SYSDB_ID_RANGE_TYPE, range->range_type);
e554dd2dae4ba2c32dbd05fc0d4e0a42ef4ba902rbowen DEBUG(SSSDBG_TRACE_FUNC, "Error: %d (%s)\n", ret, strerror(ret));
f0eae6f6191f5730fa8db049f7391e93b4ff41b9erikabeleerrno_t sysdb_update_ranges(struct sysdb_ctx *sysdb,
8e34905974b7a442a55adac3b3fdb196c389e807takashi /* Retrieve all ranges that are currently in sysdb */
8e34905974b7a442a55adac3b3fdb196c389e807takashi ret = sysdb_get_ranges(tmp_ctx, sysdb, &cur_range_count,
f4166cb2bf5e48c1b0f18b0d1f6757fce82230a8nd keep_range = talloc_zero_array(tmp_ctx, bool, cur_range_count);
4a67c5c0053e1c1c2202122e46a42987f6fd28dfyoshiki DEBUG(SSSDBG_OP_FAILURE, "sysdb_transaction_start failed.\n");
4a67c5c0053e1c1c2202122e46a42987f6fd28dfyoshiki /* Go through a list of retrieved ranges and:
17efa6b5344b7574597eec03f02ef28103e19265nd * - if a range already exists in sysdb, mark it for preservation
4a67c5c0053e1c1c2202122e46a42987f6fd28dfyoshiki * - if the range doesn't exist in sysdb, create it
17efa6b5344b7574597eec03f02ef28103e19265nd for (d = 0; d < cur_range_count; d++) {
e9e8e471353eaa5576e1e96530968d02f208e39fnd if (strcasecmp(ranges[c]->name, cur_ranges[d]->name) == 0) {
8e34905974b7a442a55adac3b3fdb196c389e807takashi /* range already in cache, nothing to do */
1e1be8a0871405df3c1ec4d6d33aab71996ad0c9nilgun DEBUG(SSSDBG_TRACE_FUNC, "Adding range [%s].\n", ranges[c]->name);
6e89d4f6c259afc94f8806c74a33a8fe81392499sf DEBUG(SSSDBG_OP_FAILURE, "sysdb_range_create failed.\n");
e9e8e471353eaa5576e1e96530968d02f208e39fnd /* Now delete all ranges that have been in sysdb prior to
for (d = 0; d < cur_range_count; d++) {
if (!keep_range[d]) {
goto done;
goto done;
goto done;
in_transaction = false;
done:
if (in_transaction) {
return ret;