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.
26 static int sam_skel_debug_level
= DBGC_SAM
;
29 #define DBGC_CLASS sam_skel_debug_level
31 /* define the version of the SAM interface */
32 SAM_MODULE_VERSIONING_MAGIC
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
;
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
;
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
;
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
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
;
206 sam_methods
->sam_update_domain
= sam_skel_update_domain
;
207 sam_methods
->sam_get_domain_handle
= sam_skel_get_domain_handle
;
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
;
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
));
246 DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params
, sam_methods
->domain_name
));
248 DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods
->domain_name
));