Merge from Subversion r50.
[ira/wip.git] / source3 / sam / sam_skel.c
1 /*
2    Unix SMB/CIFS implementation.
3    this is a skeleton for SAM backend modules.
4         
5    Copyright (C) Stefan (metze) Metzmacher              2002
6    Copyright (C) Jelmer Vernooij                        2002
7    Copyright (C) Andrew Bartlett                        2002
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #include "includes.h"
25
26 static int sam_skel_debug_level = DBGC_SAM;
27
28 #undef DBGC_CLASS
29 #define DBGC_CLASS sam_skel_debug_level
30
31 /* define the version of the SAM interface */ 
32 SAM_MODULE_VERSIONING_MAGIC
33
34 /* General API */
35
36 static NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd)
37 {
38         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
39         return NT_STATUS_NOT_IMPLEMENTED;
40 }
41
42 static NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd)
43 {
44         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
45         return NT_STATUS_NOT_IMPLEMENTED;
46 }
47
48         
49 static NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type)
50 {
51         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
52         return NT_STATUS_NOT_IMPLEMENTED;
53 }
54
55 static NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, uint32 *type)
56 {
57         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
58         return NT_STATUS_NOT_IMPLEMENTED;
59 }
60
61         
62 /* Domain API */
63
64 static NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain)
65 {
66         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
67         return NT_STATUS_NOT_IMPLEMENTED;
68 }
69
70 static NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain)
71 {
72         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
73         return NT_STATUS_NOT_IMPLEMENTED;
74 }
75
76
77 /* Account API */
78
79 static NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account)
80 {
81         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
82         return NT_STATUS_NOT_IMPLEMENTED;
83 }
84
85 static NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
86 {
87         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
88         return NT_STATUS_NOT_IMPLEMENTED;
89 }
90
91 static NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
92 {
93         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
94         return NT_STATUS_NOT_IMPLEMENTED;
95 }
96
97 static NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
98 {
99         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
100         return NT_STATUS_NOT_IMPLEMENTED;
101 }
102
103 static NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts)
104 {
105         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
106         return NT_STATUS_NOT_IMPLEMENTED;
107 }
108
109
110 static NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account)
111 {
112         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
113         return NT_STATUS_NOT_IMPLEMENTED;
114 }
115
116 static NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account)
117 {
118         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
119         return NT_STATUS_NOT_IMPLEMENTED;
120 }
121
122
123 /* Group API */
124
125 static NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group)
126 {
127         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
128         return NT_STATUS_NOT_IMPLEMENTED;
129 }
130
131 static NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
132 {
133         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
134         return NT_STATUS_NOT_IMPLEMENTED;
135 }
136
137 static NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
138 {
139         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
140         return NT_STATUS_NOT_IMPLEMENTED;
141 }
142
143 static NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
144 {
145         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
146         return NT_STATUS_NOT_IMPLEMENTED;
147 }
148
149 static NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups)
150 {
151         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
152         return NT_STATUS_NOT_IMPLEMENTED;
153 }
154
155 static NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group)
156 {
157         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
158         return NT_STATUS_NOT_IMPLEMENTED;
159 }
160
161 static NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group)
162 {
163         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
164         return NT_STATUS_NOT_IMPLEMENTED;
165 }
166
167
168 static NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
169 {
170         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
171         return NT_STATUS_NOT_IMPLEMENTED;
172 }
173
174 static NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
175 {
176         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
177         return NT_STATUS_NOT_IMPLEMENTED;
178 }
179
180 static NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members)
181 {
182         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
183         return NT_STATUS_NOT_IMPLEMENTED;
184 }
185
186
187 static NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups)
188 {
189         DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
190         return NT_STATUS_NOT_IMPLEMENTED;
191 }
192
193 NTSTATUS sam_init_skel(SAM_METHODS *sam_methods, const char *module_params)
194 {
195         /* Functions your SAM module doesn't provide should be set 
196          * to NULL */
197
198         sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc;
199         sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc;
200         
201         sam_methods->sam_lookup_sid = sam_skel_lookup_sid;
202         sam_methods->sam_lookup_name = sam_skel_lookup_name;
203         
204         /* Domain API */
205
206         sam_methods->sam_update_domain = sam_skel_update_domain;
207         sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle;
208
209         /* Account API */
210
211         sam_methods->sam_create_account = sam_skel_create_account;
212         sam_methods->sam_add_account = sam_skel_add_account;
213         sam_methods->sam_update_account = sam_skel_update_account;
214         sam_methods->sam_delete_account = sam_skel_delete_account;
215         sam_methods->sam_enum_accounts = sam_skel_enum_accounts;
216
217         sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid;
218         sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name;
219
220         /* Group API */
221
222         sam_methods->sam_create_group = sam_skel_create_group;
223         sam_methods->sam_add_group = sam_skel_add_group;
224         sam_methods->sam_update_group = sam_skel_update_group;
225         sam_methods->sam_delete_group = sam_skel_delete_group;
226         sam_methods->sam_enum_groups = sam_skel_enum_groups;
227         sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid;
228         sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name;
229
230         sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group;
231         sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group;
232         sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers;
233
234         sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid;
235
236         sam_methods->free_private_data = NULL;
237
238
239         sam_skel_debug_level = debug_add_class("sam_skel");
240         if (sam_skel_debug_level == -1) {
241                 sam_skel_debug_level = DBGC_SAM;
242                 DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n"));
243         } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level));
244     
245         if(module_params)
246                 DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name));
247         else
248                 DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name));
249
250         return NT_STATUS_OK;
251 }