fix wrong string handling
[Samba.git] / source / sam / sam_skel.c
blobb4d64bb6da7ec35d6be0077f0ca63adc19a8c8b7
1 /*
2 Unix SMB/CIFS implementation.
3 this is a skeleton for SAM backend modules.
5 Copyright (C) Stefan (metze) Metzmacher 2002
6 Copyright (C) Jelmer Vernooij 2002
7 Copyright (C) Andrew Bartlett 2002
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.
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.
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.
24 #include "includes.h"
26 static int sam_skel_debug_level = DBGC_SAM;
28 #undef DBGC_CLASS
29 #define DBGC_CLASS sam_skel_debug_level
31 /* define the version of the SAM interface */
32 SAM_MODULE_VERSIONING_MAGIC
34 /* General API */
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)
38 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
39 return NT_STATUS_NOT_IMPLEMENTED;
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)
44 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
45 return NT_STATUS_NOT_IMPLEMENTED;
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)
51 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
52 return NT_STATUS_NOT_IMPLEMENTED;
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)
57 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
58 return NT_STATUS_NOT_IMPLEMENTED;
62 /* Domain API */
64 static NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain)
66 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
67 return NT_STATUS_NOT_IMPLEMENTED;
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)
72 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
73 return NT_STATUS_NOT_IMPLEMENTED;
77 /* Account API */
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)
81 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
82 return NT_STATUS_NOT_IMPLEMENTED;
85 static NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
87 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
88 return NT_STATUS_NOT_IMPLEMENTED;
91 static NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
93 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
94 return NT_STATUS_NOT_IMPLEMENTED;
97 static NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account)
99 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
100 return NT_STATUS_NOT_IMPLEMENTED;
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)
105 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
106 return NT_STATUS_NOT_IMPLEMENTED;
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)
112 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
113 return NT_STATUS_NOT_IMPLEMENTED;
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)
118 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
119 return NT_STATUS_NOT_IMPLEMENTED;
123 /* Group API */
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)
127 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
128 return NT_STATUS_NOT_IMPLEMENTED;
131 static NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
133 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
134 return NT_STATUS_NOT_IMPLEMENTED;
137 static NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
139 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
140 return NT_STATUS_NOT_IMPLEMENTED;
143 static NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group)
145 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
146 return NT_STATUS_NOT_IMPLEMENTED;
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)
151 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
152 return NT_STATUS_NOT_IMPLEMENTED;
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)
157 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
158 return NT_STATUS_NOT_IMPLEMENTED;
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)
163 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
164 return NT_STATUS_NOT_IMPLEMENTED;
168 static NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
170 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
171 return NT_STATUS_NOT_IMPLEMENTED;
174 static NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
176 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
177 return NT_STATUS_NOT_IMPLEMENTED;
180 static NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members)
182 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
183 return NT_STATUS_NOT_IMPLEMENTED;
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)
189 DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO));
190 return NT_STATUS_NOT_IMPLEMENTED;
193 NTSTATUS sam_init_skel(SAM_METHODS *sam_methods, const char *module_params)
195 /* Functions your SAM module doesn't provide should be set
196 * to NULL */
198 sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc;
199 sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc;
201 sam_methods->sam_lookup_sid = sam_skel_lookup_sid;
202 sam_methods->sam_lookup_name = sam_skel_lookup_name;
204 /* Domain API */
206 sam_methods->sam_update_domain = sam_skel_update_domain;
207 sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle;
209 /* Account API */
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;
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;
220 /* Group API */
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;
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;
234 sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid;
236 sam_methods->free_private_data = NULL;
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));
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));
250 return NT_STATUS_OK;