diff options
Diffstat (limited to 'src/providers/dp_backend.h')
-rw-r--r-- | src/providers/dp_backend.h | 142 |
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___ */ |