s3: Remove header==NULL code from db_ctdb_marshall_record
[kai/samba.git] / source3 / include / nss_info.h
1 /* 
2    Unix SMB/CIFS implementation.
3    Idmap NSS headers
4
5    Copyright (C) Gerald Carter             2006
6
7    This library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Lesser General Public
9    License as published by the Free Software Foundation; either
10    version 3 of the License, or (at your option) any later version.
11
12    This library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Library General Public License for more details.
16
17    You should have received a copy of the GNU Lesser General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef _IDMAP_NSS_H
22 #define _IDMAP_NSS_H
23
24 #ifndef HAVE_LDAP
25 #  ifndef LDAPMessage
26 #    define LDAPMessage void
27 #  endif
28 #endif
29
30 /* The interface version specifier */
31
32 #define SMB_NSS_INFO_INTERFACE_VERSION    1
33
34 /* List of available backends.  All backends must 
35    register themselves */
36
37 struct nss_function_entry {
38         struct nss_function_entry *prev, *next;
39
40         const char *name;
41         struct nss_info_methods *methods;
42 };
43
44 /* List of configured domains.  Each domain points 
45    back to its configured backend. */
46
47 struct nss_domain_entry {
48         struct nss_domain_entry *prev, *next;
49
50         const char *domain;
51
52         NTSTATUS init_status;   
53         struct nss_function_entry *backend;
54
55         /* hold state on a per domain basis */
56
57         void *state;
58 };
59
60 /* API */
61
62 struct nss_info_methods {
63         NTSTATUS (*init)( struct nss_domain_entry *e );
64         NTSTATUS (*get_nss_info)( struct nss_domain_entry *e, 
65                                   const struct dom_sid *sid,
66                                   TALLOC_CTX *ctx, 
67                                   const char **homedir, const char **shell,
68                                   const char **gecos, gid_t *p_gid);
69         NTSTATUS (*map_to_alias)(TALLOC_CTX *mem_ctx,
70                                  struct nss_domain_entry *e,
71                                  const char *name, char **alias);
72         NTSTATUS (*map_from_alias)(TALLOC_CTX *mem_ctx,
73                                    struct nss_domain_entry *e,
74                                    const char *alias, char **name);
75         NTSTATUS (*close_fn)( void );
76 };
77
78
79 /* The following definitions come from nsswitch/nss_info.c  */
80
81 NTSTATUS smb_register_idmap_nss(int version, 
82                                 const char *name, 
83                                 struct nss_info_methods *methods);
84
85 NTSTATUS nss_get_info( const char *domain, const struct dom_sid *user_sid,
86                        TALLOC_CTX *ctx,
87                        const char **homedir, const char **shell,
88                        const char **gecos, gid_t *p_gid);
89
90 NTSTATUS nss_map_to_alias( TALLOC_CTX *mem_ctx, const char *domain,
91                            const char *name, char **alias );
92
93 NTSTATUS nss_map_from_alias( TALLOC_CTX *mem_ctx, const char *domain,
94                              const char *alias, char **name );
95
96 NTSTATUS nss_close( const char *parameters );
97
98 /* The following definitions come from winbindd/nss_info.c  */
99
100
101 /* The following definitions come from winbindd/nss_info_template.c  */
102
103 NTSTATUS nss_info_template_init( void );
104
105 #endif /* _IDMAP_NSS_H_ */
106