summaryrefslogtreecommitdiff
path: root/src/providers/dp_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/dp_backend.h')
-rw-r--r--src/providers/dp_backend.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/providers/dp_backend.h b/src/providers/dp_backend.h
new file mode 100644
index 00000000..f1069d0d
--- /dev/null
+++ b/src/providers/dp_backend.h
@@ -0,0 +1,142 @@
+/*
+ SSSD
+
+ Data Provider, private header file
+
+ Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __DP_BACKEND_H__
+#define __DP_BACKEND_H__
+
+#include "providers/data_provider.h"
+#include "providers/fail_over.h"
+#include "db/sysdb.h"
+
+struct be_ctx;
+struct bet_ops;
+struct be_req;
+
+typedef int (*bet_init_fn_t)(TALLOC_CTX *, struct bet_ops **, void **);
+typedef void (*be_shutdown_fn)(void *);
+typedef void (*be_req_fn_t)(struct be_req *);
+typedef void (*be_async_callback_t)(struct be_req *, int, int, const char *);
+
+enum bet_type {
+ BET_NULL = 0,
+ BET_ID,
+ BET_AUTH,
+ BET_ACCESS,
+ BET_CHPASS,
+ BET_MAX
+};
+
+struct bet_data {
+ enum bet_type bet_type;
+ const char *option_name;
+ const char *mod_init_fn_name_fmt;
+};
+
+struct loaded_be {
+ char *be_name;
+ void *handle;
+};
+
+struct bet_info {
+ enum bet_type bet_type;
+ struct bet_ops *bet_ops;
+ void *pvt_bet_data;
+ char *mod_name;
+};
+
+struct be_offline_status {
+ time_t went_offline;
+ bool offline;
+};
+
+struct be_client {
+ struct be_ctx *bectx;
+ struct sbus_connection *conn;
+ struct tevent_timer *timeout;
+ bool initialized;
+};
+
+struct be_failover_ctx;
+
+struct be_ctx {
+ struct tevent_context *ev;
+ struct confdb_ctx *cdb;
+ struct sysdb_ctx *sysdb;
+ struct sss_domain_info *domain;
+ const char *identity;
+ const char *conf_path;
+ struct be_failover_ctx *be_fo;
+
+ struct be_offline_status offstat;
+
+ struct sbus_connection *mon_conn;
+ struct sbus_connection *sbus_srv;
+
+ struct be_client *nss_cli;
+ struct be_client *pam_cli;
+
+ struct loaded_be loaded_be[BET_MAX];
+ struct bet_info bet_info[BET_MAX];
+};
+
+struct bet_ops {
+ be_req_fn_t check_online;
+ be_req_fn_t handler;
+ be_req_fn_t finalize;
+};
+
+struct be_req {
+ struct be_client *becli;
+ struct be_ctx *be_ctx;
+ void *req_data;
+
+ be_async_callback_t fn;
+ void *pvt;
+};
+
+struct be_acct_req {
+ int entry_type;
+ int attr_type;
+ int filter_type;
+ char *filter_value;
+};
+
+bool be_is_offline(struct be_ctx *ctx);
+void be_mark_offline(struct be_ctx *ctx);
+
+/* from data_provider_fo.c */
+typedef void (be_svc_callback_fn_t)(void *, struct fo_server *);
+
+int be_init_failover(struct be_ctx *ctx);
+int be_fo_add_service(struct be_ctx *ctx, const char *service_name);
+int be_fo_service_add_callback(TALLOC_CTX *memctx,
+ struct be_ctx *ctx, const char *service_name,
+ be_svc_callback_fn_t *fn, void *private_data);
+int be_fo_add_server(struct be_ctx *ctx, const char *service_name,
+ const char *server, int port, void *user_data);
+
+struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx,
+ struct tevent_context *ev,
+ struct be_ctx *ctx,
+ const char *service_name);
+int be_resolve_server_recv(struct tevent_req *req, struct fo_server **srv);
+
+#endif /* __DP_BACKEND_H___ */