4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina/*
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina Authors:
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina Pavel Březina <pbrezina@redhat.com>
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina Copyright (C) 2016 Red Hat
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina This program is free software; you can redistribute it and/or modify
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina it under the terms of the GNU General Public License as published by
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina the Free Software Foundation; either version 3 of the License, or
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina (at your option) any later version.
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina This program is distributed in the hope that it will be useful,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina GNU General Public License for more details.
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina You should have received a copy of the GNU General Public License
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina*/
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#ifndef _NSS_PRIVATE_H_
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#define _NSS_PRIVATE_H_
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include <talloc.h>
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include <tevent.h>
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include <dhash.h>
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include <ldb.h>
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "util/util.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "db/sysdb.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "responder/common/responder.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "responder/common/cache_req/cache_req.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "responder/nss/nsssrv_mmap_cache.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#include "lib/idmap/sss_idmap.h"
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct nss_enum_index {
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina unsigned int domain;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina unsigned int result;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina};
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct nss_enum_ctx {
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cache_req_result **result;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct sysdb_netgroup_ctx **netgroup;
08db22b1b1a2e742edbca92e35087294d963addaSumit Bose size_t netgroup_count;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* Ongoing cache request that is constructing enumeration result. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct tevent_req *ongoing;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* If true, the object is already constructed. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina bool is_ready;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* List of setent requests awaiting the result. We finish
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina * them when the ongoing cache request is completed. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct setent_req_list *notify_list;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina};
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct nss_state_ctx {
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_index pwent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_index grent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_index svcent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_index netgrent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina const char *netgroup;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina};
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct nss_ctx {
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct resp_ctx *rctx;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct sss_idmap_ctx *idmap_ctx;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* Options. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina int cache_refresh_percent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina int enum_cache_timeout;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina bool filter_users_in_groups;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina char *pwfield;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina char *override_homedir;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina char *fallback_homedir;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina char *homedir_substr;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina const char **extra_attributes;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* Enumeration. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_ctx pwent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_ctx grent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_ctx svcent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina hash_table_t *netgrent;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina /* Memory cache. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct sss_mc_ctx *pwd_mc_ctx;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct sss_mc_ctx *grp_mc_ctx;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct sss_mc_ctx *initgr_mc_ctx;
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina};
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct sss_cmd_table *get_nss_cmds(void);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinaint nss_connection_setup(struct cli_ctx *cli_ctx);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Boseerrno_t
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bosememcache_delete_entry(struct nss_ctx *nss_ctx,
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose struct resp_ctx *rctx,
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose struct sss_domain_info *domain,
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose const char *name,
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose uint32_t id,
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose enum sss_mc_type type);
a7d6ca275d6b2e5d396cbefb18d0ee880011e271Sumit Bose
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct tevent_req *
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_get_object_send(TALLOC_CTX *mem_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct tevent_context *ev,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cli_ctx *cli_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cache_req_data *data,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina enum sss_mc_type memcache,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina const char *input_name,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina uint32_t input_id);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinaerrno_t
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_get_object_recv(TALLOC_CTX *mem_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct tevent_req *req,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cache_req_result **_result,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina const char **_rawname);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct tevent_req *
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_setent_send(TALLOC_CTX *mem_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct tevent_context *ev,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cli_ctx *cli_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina enum cache_req_type type,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct nss_enum_ctx *enum_ctx);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinaerrno_t
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_setent_recv(struct tevent_req *req);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinastruct tevent_req *
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_setnetgrent_send(TALLOC_CTX *mem_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct tevent_context *ev,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct cli_ctx *cli_ctx,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina enum cache_req_type type,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina hash_table_t *table,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina const char *netgroup);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinaerrno_t
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_setnetgrent_recv(struct tevent_req *req);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina/* Utils. */
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinaconst char *
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březinanss_get_name_from_msg(struct sss_domain_info *domain,
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina struct ldb_message *msg);
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina
c778c36c5170c2b9f1cf7a6e3b0811124534df03Jakub Hrozekconst char *
c778c36c5170c2b9f1cf7a6e3b0811124534df03Jakub Hrozeknss_get_pwfield(struct nss_ctx *nctx,
c778c36c5170c2b9f1cf7a6e3b0811124534df03Jakub Hrozek struct sss_domain_info *dom);
c778c36c5170c2b9f1cf7a6e3b0811124534df03Jakub Hrozek
4049b63f8c67ada17b453463b0451ca6be3d5de4Pavel Březina#endif /* _NSS_PRIVATE_H_ */