sssd 2.6.1
data_provider.h
1/*
2 SSSD
3
4 Data Provider, private header file
5
6 Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#ifndef __DATA_PROVIDER_H__
23#define __DATA_PROVIDER_H__
24
25#include "config.h"
26
27#include <stdint.h>
28#include <sys/un.h>
29#include <errno.h>
30#include <stdbool.h>
31#ifdef USE_KEYRING
32#include <sys/types.h>
33#include <keyutils.h>
34#endif
35#include <talloc.h>
36#include <tevent.h>
37#include <ldb.h>
38#include <dbus/dbus.h>
39
40#include "util/util.h"
41#include "confdb/confdb.h"
42#include "sss_client/sss_cli.h"
43#include "util/authtok.h"
44#include "util/sss_pam_data.h"
45#include "providers/data_provider_req.h"
46
47#define DATA_PROVIDER_VERSION 0x0001
48#define DATA_PROVIDER_PIPE "private/sbus-dp"
49
50#define DP_PATH "/org/freedesktop/sssd/dataprovider"
51 /* end of group pamHandler */
115
116#define DP_ERR_DECIDE -1
117#define DP_ERR_OK 0
118#define DP_ERR_OFFLINE 1
119#define DP_ERR_TIMEOUT 2
120#define DP_ERR_FATAL 3
121
122#define BE_FILTER_NAME 1
123#define BE_FILTER_IDNUM 2
124#define BE_FILTER_ENUM 3
125#define BE_FILTER_SECID 4
126#define BE_FILTER_UUID 5
127#define BE_FILTER_CERT 6
128#define BE_FILTER_WILDCARD 7
129#define BE_FILTER_ADDR 8
130
131#define DP_SEC_ID "secid"
132#define DP_CERT "cert"
133/* sizeof() counts the trailing \0 so we must subtract 1 for the string
134 * length */
135#define DP_SEC_ID_LEN (sizeof(DP_SEC_ID) - 1)
136#define DP_CERT_LEN (sizeof(DP_CERT) - 1)
137
138#define DP_WILDCARD "wildcard"
139#define DP_WILDCARD_LEN (sizeof(DP_WILDCARD) - 1)
140
141#define EXTRA_NAME_IS_UPN "U"
142#define EXTRA_INPUT_MAYBE_WITH_VIEW "V"
143
144/* from dp_auth_util.c */
145#define SSS_SERVER_INFO 0x80000000
146
147#define SSS_KRB5_INFO 0x40000000
148#define SSS_LDAP_INFO 0x20000000
149#define SSS_PROXY_INFO 0x10000000
150
151#define SSS_KRB5_INFO_TGT_LIFETIME (SSS_SERVER_INFO|SSS_KRB5_INFO|0x01)
152#define SSS_KRB5_INFO_UPN (SSS_SERVER_INFO|SSS_KRB5_INFO|0x02)
153
154bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd);
155bool dp_unpack_pam_request(DBusMessage *msg, TALLOC_CTX *mem_ctx,
156 struct pam_data **new_pd, DBusError *dbus_error);
157
158bool dp_pack_pam_response(DBusMessage *msg, struct pam_data *pd);
159bool dp_unpack_pam_response(DBusMessage *msg, struct pam_data *pd,
160 DBusError *dbus_error);
161
162void dp_id_callback(DBusPendingCall *pending, void *ptr);
163
164/* from dp_sbus.c */
165int dp_get_sbus_address(TALLOC_CTX *mem_ctx,
166 char **address, const char *domain_name);
167
168
169/* Reserved filter name for request which waits until the files provider finishes mirroring
170 * the file content
171 */
172#define DP_REQ_OPT_FILES_INITGR "files_initgr_request"
173
174/* Helpers */
175
176#define NULL_STRING { .string = NULL }
177#define NULL_BLOB { .blob = { NULL, 0 } }
178#define NULL_NUMBER { .number = 0 }
179#define BOOL_FALSE { .boolean = false }
180#define BOOL_TRUE { .boolean = true }
181
182enum dp_opt_type {
183 DP_OPT_STRING,
184 DP_OPT_BLOB,
185 DP_OPT_NUMBER,
186 DP_OPT_BOOL
187};
188
189struct dp_opt_blob {
190 uint8_t *data;
191 size_t length;
192};
193
194union dp_opt_value {
195 const char *cstring;
196 char *string;
197 struct dp_opt_blob blob;
198 int number;
199 bool boolean;
200};
201
202struct dp_option {
203 const char *opt_name;
204 enum dp_opt_type type;
205 union dp_opt_value def_val;
206 union dp_opt_value val;
207};
208
209#define DP_OPTION_TERMINATOR { NULL, 0, NULL_STRING, NULL_STRING }
210
211void dp_option_inherit(char **inherit_opt_list,
212 int option,
213 struct dp_option *parent_opts,
214 struct dp_option *subdom_opts);
215
216int dp_get_options(TALLOC_CTX *memctx,
217 struct confdb_ctx *cdb,
218 const char *conf_path,
219 struct dp_option *def_opts,
220 int num_opts,
221 struct dp_option **_opts);
222
223int dp_copy_options(TALLOC_CTX *memctx,
224 struct dp_option *src_opts,
225 int num_opts,
226 struct dp_option **_opts);
227
228int dp_copy_defaults(TALLOC_CTX *memctx,
229 struct dp_option *src_opts,
230 int num_opts,
231 struct dp_option **_opts);
232
233const char *_dp_opt_get_cstring(struct dp_option *opts,
234 int id, const char *location);
235char *_dp_opt_get_string(struct dp_option *opts,
236 int id, const char *location);
237struct dp_opt_blob _dp_opt_get_blob(struct dp_option *opts,
238 int id, const char *location);
239int _dp_opt_get_int(struct dp_option *opts,
240 int id, const char *location);
241bool _dp_opt_get_bool(struct dp_option *opts,
242 int id, const char *location);
243#define dp_opt_get_cstring(o, i) _dp_opt_get_cstring(o, i, __FUNCTION__)
244#define dp_opt_get_string(o, i) _dp_opt_get_string(o, i, __FUNCTION__)
245#define dp_opt_get_blob(o, i) _dp_opt_get_blob(o, i, __FUNCTION__)
246#define dp_opt_get_int(o, i) _dp_opt_get_int(o, i, __FUNCTION__)
247#define dp_opt_get_bool(o, i) _dp_opt_get_bool(o, i, __FUNCTION__)
248
249int _dp_opt_set_string(struct dp_option *opts, int id,
250 const char *s, const char *location);
251int _dp_opt_set_blob(struct dp_option *opts, int id,
252 struct dp_opt_blob b, const char *location);
253int _dp_opt_set_int(struct dp_option *opts, int id,
254 int i, const char *location);
255int _dp_opt_set_bool(struct dp_option *opts, int id,
256 bool b, const char *location);
257#define dp_opt_set_string(o, i, v) _dp_opt_set_string(o, i, v, __FUNCTION__)
258#define dp_opt_set_blob(o, i, v) _dp_opt_set_blob(o, i, v, __FUNCTION__)
259#define dp_opt_set_int(o, i, v) _dp_opt_set_int(o, i, v, __FUNCTION__)
260#define dp_opt_set_bool(o, i, v) _dp_opt_set_bool(o, i, v, __FUNCTION__)
261
262/* Generic Data Provider options */
263
264/* Resolver DP options */
265enum dp_res_opts {
266 DP_RES_OPT_FAMILY_ORDER,
267 DP_RES_OPT_RESOLVER_TIMEOUT,
268 DP_RES_OPT_RESOLVER_OP_TIMEOUT,
269 DP_RES_OPT_RESOLVER_SERVER_TIMEOUT,
270 DP_RES_OPT_DNS_DOMAIN,
271
272 DP_RES_OPTS /* attrs counter */
273};
274
275#endif /* __DATA_PROVIDER_ */