ipa_hbac_hosts.c revision c935271de3b99d35112e0faf854cbfa9dfaa104a
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik Stephen Gallagher <sgallagh@redhat.com>
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik Copyright (C) 2011 Red Hat
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik This program is free software; you can redistribute it and/or modify
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik it under the terms of the GNU General Public License as published by
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik the Free Software Foundation; either version 3 of the License, or
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik (at your option) any later version.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik This program is distributed in the hope that it will be useful,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik but WITHOUT ANY WARRANTY; without even the implied warranty of
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik GNU General Public License for more details.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik You should have received a copy of the GNU General Public License
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik along with this program. If not, see <http://www.gnu.org/licenses/>.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik const char **attrs;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik /* Return values */
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikstatic struct sdap_attr_map hostgroup_map[] = {
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {"objectclass", "ipahostgroup", "hostgroup", NULL},
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {"member", IPA_MEMBER, SYSDB_ORIG_MEMBER, NULL},
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {"memberof", IPA_MEMBEROF, SYSDB_ORIG_MEMBEROF, NULL},
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {"ipa_id", IPA_UNIQUE_ID, IPA_UNIQUE_ID, NULL}
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikipa_hbac_host_info_done(struct tevent_req *subreq);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikipa_hbac_hostgroup_info_done(struct tevent_req *subreq);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikipa_hbac_host_info_next(struct tevent_req *req,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikipa_hbac_hostgroup_info_next(struct tevent_req *req,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik req = tevent_req_create(mem_ctx, &state, struct ipa_hbac_host_state);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik state->host_filter = talloc_asprintf(state, "(objectClass=%s)",
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik state->host_filter = talloc_asprintf(state, "(&(objectClass=%s)(%s=%s))",
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik state->attrs = talloc_array(state, const char *, 8);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik DEBUG(1, ("Failed to allocate host attribute list.\n"));
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik DEBUG(SSSDBG_CRIT_FAILURE, ("No host search base configured?\n"));
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikstatic errno_t ipa_hbac_host_info_next(struct tevent_req *req,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik base = state->search_bases[state->search_base_iter];
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik state->cur_filter = sdap_get_id_specific_filter(state, state->host_filter,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik subreq = sdap_get_generic_send(state, state->ev, state->opts,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik DEBUG(SSSDBG_CRIT_FAILURE, ("Error requesting host info\n"));
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik tevent_req_set_callback(subreq, ipa_hbac_host_info_done, req);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikipa_hbac_host_info_done(struct tevent_req *subreq)
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik tevent_req_callback_data(subreq, struct tevent_req);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik tevent_req_data(req, struct ipa_hbac_host_state);
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik /* No more search bases to try */
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik ret = replace_attribute_name(IPA_MEMBEROF, SYSDB_ORIG_MEMBEROF,
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik DEBUG(1, ("Could not replace attribute names\n"));
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik /* Complete the map */
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik for (i = 0; i < HOSTGROUP_MAP_ATTRS_COUNT; i++) {
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik /* These are allocated on the state, so the next time they'll
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik * have to be allocated again
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik /* Look up host groups */
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik state->host_filter = talloc_asprintf(state, "(objectClass=%s)",
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik ret = ipa_hbac_hostgroup_info_next(req, state);
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik DEBUG(SSSDBG_CRIT_FAILURE, ("No host search base configured?\n"));
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik state->hostgroup_map = talloc_zero(state, struct sdap_attr_map_info);
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik state->hostgroup_map->num_attrs = HOSTGROUP_MAP_ATTRS_COUNT;
381a9b85cf2c73401fc1bff06c2e0d86389a5e88Jorgen Austvik ret = sysdb_attrs_get_string(state->hosts[0], SYSDB_ORIG_DN, &host_dn);
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik subreq = sdap_deref_search_send(state, state->ev, state->opts, state->sh,
return EOK;
return ENOMEM;
return EIO;
return EAGAIN;
const char *hostgroup_name;
const char *hostgroup_dn;
&hostgroups);
if (hostgroup_count > 0) {
struct sysdb_attrs *,
&deref_result);
goto done;
NULL)) {
done:
size_t c;
return EOK;
const char *rule_name,
const char *category_attr,
const char *member_attr,
size_t i;
char *member_dn;
char *filter;
const char *name;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
&member_dn);
goto done;
NULL);
goto done;
name);
goto done;
num_hosts++;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
const char *rule_name,
const char *rule_name,
bool support_srchost,
if (!support_srchost) {
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
const char *host_dn,
char **hostgroupname)
const char *rdn_name;
const char *hostgroup_comp_name;
const char *account_comp_name;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
done:
return ret;