ipa_access.h revision 56789cfa13f85071f5fb37575fa1f1071f587efc
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina/*
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina SSSD
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina IPA Backend Module -- Access control
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina Authors:
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina Sumit Bose <sbose@redhat.com>
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina Copyright (C) 2009 Red Hat
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina This program is free software; you can redistribute it and/or modify
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina it under the terms of the GNU General Public License as published by
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina the Free Software Foundation; either version 3 of the License, or
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina (at your option) any later version.
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina This program is distributed in the hope that it will be useful,
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina GNU General Public License for more details.
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina You should have received a copy of the GNU General Public License
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina*/
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina#ifndef _IPA_ACCESS_H_
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina#define _IPA_ACCESS_H_
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina#include "providers/ldap/ldap_common.h"
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březinaenum ipa_access_mode {
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina IPA_ACCESS_DENY = 0,
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina IPA_ACCESS_ALLOW
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina};
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březinastruct hbac_host_info {
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina const char *fqdn;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina const char *serverhostname;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina const char *dn;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina const char **memberof;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina};
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březinastruct ipa_access_ctx {
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina struct sdap_id_ctx *sdap_ctx;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina struct dp_option *ipa_options;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina struct time_rules_ctx *tr_ctx;
a1e4113a5388e34c08459c5b69679c82ac2bddc9Pavel Březina};
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březinastruct hbac_ctx {
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct sdap_id_ctx *sdap_ctx;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct sdap_id_op *sdap_op;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct dp_option *ipa_options;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct time_rules_ctx *tr_ctx;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct be_req *be_req;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct pam_data *pd;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct sysdb_attrs **hbac_hosts_list;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina size_t hbac_hosts_count;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct hbac_host_info *remote_hhi;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct sysdb_attrs **hbac_rule_list;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina size_t hbac_rule_count;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina const char *user_dn;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina size_t groups_count;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina const char **groups;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina char *hbac_search_base;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct sysdb_attrs **hbac_services_list;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina size_t hbac_services_count;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina};
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina/* Get BE context associated with HBAC context */
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březinastatic inline struct be_ctx *hbac_ctx_be(struct hbac_ctx *hbac_ctx)
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina{
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct be_req *req = hbac_ctx != NULL ? hbac_ctx->be_req : NULL;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina return req != NULL ? req->be_ctx : NULL;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina}
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina/* Get sysdb associated with HBAC context */
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březinastatic inline struct sysdb_ctx *hbac_ctx_sysdb(struct hbac_ctx *hbac_ctx)
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina{
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina struct be_ctx *be_ctx = hbac_ctx_be(hbac_ctx);
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina return be_ctx != NULL ? be_ctx->sysdb : NULL;
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina}
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina
8fe171bf5a7a570591418e6548105f1d5a0097b3Pavel Březina/* Get tevent context associated with HBAC context */
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březinastatic inline struct tevent_context *hbac_ctx_ev(struct hbac_ctx *hbac_ctx)
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina{
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina struct be_ctx *be_ctx = hbac_ctx_be(hbac_ctx);
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina return be_ctx != NULL ? be_ctx->ev : NULL;
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina}
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina/* Get sdap_id_ctx associated with HBAC context */
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březinastatic inline struct sdap_id_ctx *hbac_ctx_sdap_id_ctx(struct hbac_ctx *hbac_ctx)
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina{
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina return hbac_ctx != NULL ? hbac_ctx->sdap_ctx : NULL;
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina}
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina/* Get struct sdap_id_op associated with HBAC context */
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březinastatic inline struct sdap_id_op *hbac_ctx_sdap_id_op(struct hbac_ctx *hbac_ctx)
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina{
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina return hbac_ctx != NULL ? hbac_ctx->sdap_op : NULL;
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina}
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina/* Check whether the current HBAC request is processed in off-line mode */
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březinastatic inline bool hbac_ctx_is_offline(struct hbac_ctx *ctx)
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina{
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina return ctx == NULL || ctx->sdap_op == NULL;
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina}
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březinavoid ipa_access_handler(struct be_req *be_req);
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina#endif /* _IPA_ACCESS_H_ */
132e477d69e07e02fe6e4d668c0bb6226206474aPavel Březina