1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/*
* Copyright 2013 Red Hat, Inc.
*
* 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; version 2 of the License.
*
* 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, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
*/
#ifndef back_sch_h
#define back_sch_h
enum sch_search_nsswitch_t {
SCH_NSSWITCH_NONE = 0,
SCH_NSSWITCH_USER,
SCH_NSSWITCH_GROUP
};
/* The data we ask the map cache to keep, for us, for each set. */
struct backend_set_data {
struct backend_shr_set_data common;
/* Schema compatibility-specific data. */
Slapi_DN *container_sdn;
char *rdn_format;
char **attribute_format;
bool_t check_access;
enum sch_search_nsswitch_t check_nsswitch;
unsigned long nsswitch_min_id;
};
struct backend_entry_data {
Slapi_DN *original_entry_dn;
enum backend_entry_source {
backend_entry_source_dit,
backend_entry_source_nsswitch
} source;
Slapi_Entry *e;
};
struct backend_staged_search {
struct backend_staged_search *next;
char *map_group, *map_set;
struct backend_set_data *set_data;
enum sch_search_nsswitch_t type;
bool_t is_id;
bool_t search_members;
char *name;
char *container_sdn;
int count;
Slapi_Entry **entries;
};
/* Intercept a search request, and if it belongs to one of our compatibility
* trees, answer from our cache before letting the default database have a
* crack at it. */
struct backend_search_cbdata {
Slapi_PBlock *pb;
struct plugin_state *state;
char *target, *strfilter, **attrs;
int scope, sizelimit, timelimit, attrsonly;
bool_t check_access;
enum sch_search_nsswitch_t check_nsswitch;
Slapi_DN *target_dn;
Slapi_Filter *filter;
unsigned long nsswitch_min_id;
char *nsswitch_buffer;
ssize_t nsswitch_buffer_len;
bool_t answer;
int result;
bool_t matched;
char *closest_match, *text;
int n_entries;
struct backend_staged_search *staged;
struct backend_staged_search *cur_staged;
};
void backend_search_nsswitch(struct backend_set_data *set_data,
struct backend_search_cbdata *cbdata);
bool_t backend_retrieve_from_nsswitch(struct backend_staged_search *staged,
struct backend_search_cbdata *cbdata);
int backend_sch_do_pam_auth(Slapi_PBlock *pb, const char *username);
#endif
|