[PATCH] group control bits ....
Stefan (metze) Metzmacher
metze at metzemix.de
Fri Sep 6 07:46:01 GMT 2002
>
> >
> > -NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods
>*sam_method, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32
>*group_count, SAM_GROUP_ENUM **groups)
> > +NTSTATUS sam_skel_get_groups_of_sid(const struct sam_methods *sam_method,
>const NT_USER_TOKEN *access_token, const DOM_SID **sids, const uint32 type,
>uint32 *group_count, SAM_GROUP_ENUM **groups)
>
>you forgott to change the const uint32 type to uint16 group_ctrl
I fixed that :-)
I also change 'struct sam_methods' -> 'SAM_METHODS' in sam_skel.c
I also change the prototypes of sam_create_account ,sam_create_group
and set SAM_INTERFACE_VERSION 0 until we have a stable interface:-)
metze
-----------------------------------------------------------------------------
Stefan "metze" Metzmacher <metze at metzemix.de>
-------------- next part --------------
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/api.c HEAD-fix/source/sam/api.c
--- HEAD/source/sam/api.c Thu Aug 29 09:19:05 2002
+++ HEAD-fix/source/sam/api.c Fri Sep 6 08:10:46 2002
@@ -1,7 +1,7 @@
/*
Unix SMB/CIFS implementation.
SAM interface API.
-
+
Copyright (C) Stefan (metze) Metzmacher 2002
This program is free software; you can redistribute it and/or modify
@@ -120,7 +120,7 @@ NTSTATUS sam_get_domain_by_sid(const NT_
/* Account API */
-NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account)
+NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account)
{
SAM_CONTEXT *sam_context = sam_get_static_context(False);
@@ -128,7 +128,7 @@ NTSTATUS sam_create_account(const NT_USE
return NT_STATUS_UNSUCCESSFUL;
}
- return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account);
+ return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account);
}
NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account)
@@ -164,7 +164,7 @@ NTSTATUS sam_delete_account(const SAM_AC
return sam_context->sam_delete_account(sam_context, account);
}
-NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts)
+NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts)
{
SAM_CONTEXT *sam_context = sam_get_static_context(False);
@@ -172,7 +172,7 @@ NTSTATUS sam_enum_accounts(const NT_USER
return NT_STATUS_UNSUCCESSFUL;
}
- return sam_context->sam_enum_accounts(sam_context, access_token, domain, account_count, accounts);
+ return sam_context->sam_enum_accounts(sam_context, access_token, domain, acct_ctrl, account_count, accounts);
}
NTSTATUS sam_get_account_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account)
@@ -199,6 +199,17 @@ NTSTATUS sam_get_account_by_name(const N
/* Group API */
+NTSTATUS sam_create_group(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group)
+{
+ SAM_CONTEXT *sam_context = sam_get_static_context(False);
+
+ if (!sam_context) {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ return sam_context->sam_create_group(sam_context, access_token, access_desired, domainsid, group_name, group_ctrl, group);
+}
+
NTSTATUS sam_add_group(const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group)
{
SAM_CONTEXT *sam_context = sam_get_static_context(False);
@@ -232,7 +243,7 @@ NTSTATUS sam_delete_group(const SAM_GROU
return sam_context->sam_delete_group(sam_context, group);
}
-NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups)
+NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups)
{
SAM_CONTEXT *sam_context = sam_get_static_context(False);
@@ -240,7 +251,7 @@ NTSTATUS sam_enum_groups(const NT_USER_T
return NT_STATUS_UNSUCCESSFUL;
}
- return sam_context->sam_enum_groups(sam_context, access_token, domainsid, type, groups_count, groups);
+ return sam_context->sam_enum_groups(sam_context, access_token, domainsid, group_ctrl, groups_count, groups);
}
NTSTATUS sam_get_group_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group)
@@ -298,7 +309,7 @@ NTSTATUS sam_enum_groupmembers(const SAM
return sam_context->sam_enum_groupmembers(sam_context, group, members_count, members);
}
-NTSTATUS sam_get_groups_of_account(const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups)
+NTSTATUS sam_get_groups_of_sid(const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups)
{
SAM_CONTEXT *sam_context = sam_get_static_context(False);
@@ -306,6 +317,6 @@ NTSTATUS sam_get_groups_of_account(const
return NT_STATUS_UNSUCCESSFUL;
}
- return sam_context->sam_get_groups_of_account(sam_context, account, type, group_count, groups);
+ return sam_context->sam_get_groups_of_sid(sam_context, access_token, sids, group_ctrl, group_count, groups);
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/get_set_account.c HEAD-fix/source/sam/get_set_account.c
--- HEAD/source/sam/get_set_account.c Thu Aug 29 09:19:05 2002
+++ HEAD-fix/source/sam/get_set_account.c Thu Sep 5 03:27:40 2002
@@ -355,7 +355,7 @@ NTSTATUS sam_get_account_unknown_3(const
Collection of set...() functions for SAM_ACCOUNT_HANDLE_INFO.
********************************************************************/
-NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 flags)
+NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, const uint16 flags)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -365,7 +365,7 @@ NTSTATUS sam_set_account_acct_ctrl(SAM_A
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store)
+NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -378,7 +378,7 @@ NTSTATUS sam_set_account_logon_time(SAM_
return NT_STATUS_UNSUCCESSFUL;
}
-NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store)
+NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -391,7 +391,7 @@ NTSTATUS sam_set_account_logoff_time(SAM
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store)
+NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -404,7 +404,7 @@ NTSTATUS sam_set_account_kickoff_time(SA
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store)
+NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -417,7 +417,7 @@ NTSTATUS sam_set_account_pass_can_change
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store)
+NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -430,7 +430,7 @@ NTSTATUS sam_set_account_pass_must_chang
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime)
+NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, const NTTIME mytime)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -440,7 +440,7 @@ NTSTATUS sam_set_account_pass_last_set_t
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len)
+NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, const uint32 len)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -449,7 +449,7 @@ NTSTATUS sam_set_account_hours_len(SAM_A
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours)
+NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, const uint16 hours)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -465,7 +465,7 @@ NTSTATUS sam_set_account_logon_divs(SAM_
* this flag is only added.
**/
-NTSTATUS sam_set_account_init_flag(SAM_ACCOUNT_HANDLE *sampass, uint32 flag)
+NTSTATUS sam_set_account_init_flag(SAM_ACCOUNT_HANDLE *sampass, const uint32 flag)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -475,7 +475,7 @@ NTSTATUS sam_set_account_init_flag(SAM_A
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *u_sid)
+NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *u_sid)
{
if (!sampass || !u_sid)
return NT_STATUS_UNSUCCESSFUL;
@@ -488,7 +488,7 @@ NTSTATUS sam_set_account_sid(SAM_ACCOUNT
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, fstring u_sid)
+NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, const fstring u_sid)
{
DOM_SID new_sid;
if (!sampass || !u_sid)
@@ -510,7 +510,7 @@ NTSTATUS sam_set_account_sid_from_string
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *g_sid)
+NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *g_sid)
{
if (!sampass || !g_sid)
return NT_STATUS_UNSUCCESSFUL;
@@ -523,7 +523,7 @@ NTSTATUS sam_set_account_pgroup_sid(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, fstring g_sid)
+NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, const fstring g_sid)
{
DOM_SID new_sid;
if (!sampass || !g_sid)
@@ -594,7 +594,7 @@ NTSTATUS sam_set_account_fullname(SAM_AC
Set the account's logon script.
********************************************************************/
-NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *logon_script, BOOL store)
+NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *logon_script, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -612,7 +612,7 @@ NTSTATUS sam_set_account_logon_script(SA
Set the account's profile path.
********************************************************************/
-NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *profile_path, BOOL store)
+NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *profile_path, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -633,7 +633,7 @@ NTSTATUS sam_set_account_profile_path(SA
Set the account's directory drive.
********************************************************************/
-NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_drive, BOOL store)
+NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_drive, const BOOL store)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -655,7 +655,7 @@ NTSTATUS sam_set_account_dir_drive(SAM_A
Set the account's home directory.
********************************************************************/
-NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_dir, BOOL store)
+NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_dir, const BOOL store)
{
if (!sampass) return NT_STATUS_UNSUCCESSFUL;
@@ -751,7 +751,7 @@ NTSTATUS sam_set_account_munged_dial(SAM
Set the account's NT hash.
********************************************************************/
-NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data)
+NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -765,7 +765,7 @@ NTSTATUS sam_set_account_nt_pwd(SAM_ACCO
Set the account's LM hash.
********************************************************************/
-NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data)
+NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -790,7 +790,7 @@ NTSTATUS sam_set_account_plaintext_pwd(S
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn)
+NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, const uint32 unkn)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -800,7 +800,7 @@ NTSTATUS sam_set_account_unknown_1(SAM_A
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn)
+NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, const uint32 unkn)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
@@ -810,7 +810,7 @@ NTSTATUS sam_set_account_unknown_2(SAM_A
return NT_STATUS_OK;
}
-NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn)
+NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, const uint32 unkn)
{
if (!sampass)
return NT_STATUS_UNSUCCESSFUL;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/get_set_domain.c HEAD-fix/source/sam/get_set_domain.c
--- HEAD/source/sam/get_set_domain.c Thu Aug 29 16:26:44 2002
+++ HEAD-fix/source/sam/get_set_domain.c Thu Sep 5 03:29:38 2002
@@ -25,7 +25,7 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_SAM
-NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid)
+NTSTATUS sam_get_domain_sid(const SAM_DOMAIN_HANDLE *domain, DOM_SID **sid)
{
if (!domain || !sid) return NT_STATUS_UNSUCCESSFUL;
@@ -34,7 +34,7 @@ NTSTATUS sam_get_domain_sid(SAM_DOMAIN_H
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_accounts)
+NTSTATUS sam_get_domain_num_accounts(const SAM_DOMAIN_HANDLE *domain, uint32 *num_accounts)
{
if (!domain || !num_accounts) return NT_STATUS_UNSUCCESSFUL;
@@ -43,7 +43,7 @@ NTSTATUS sam_get_domain_num_accounts(SAM
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups)
+NTSTATUS sam_get_domain_num_groups(const SAM_DOMAIN_HANDLE *domain, uint32 *num_groups)
{
if (!domain || !num_groups) return NT_STATUS_UNSUCCESSFUL;
@@ -52,7 +52,7 @@ NTSTATUS sam_get_domain_num_groups(SAM_D
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases)
+NTSTATUS sam_get_domain_num_aliases(const SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases)
{
if (!domain || !num_aliases) return NT_STATUS_UNSUCCESSFUL;
@@ -61,7 +61,7 @@ NTSTATUS sam_get_domain_num_aliases(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name)
+NTSTATUS sam_get_domain_name(const SAM_DOMAIN_HANDLE *domain, char **domain_name)
{
if (!domain || !domain_name) return NT_STATUS_UNSUCCESSFUL;
@@ -70,7 +70,7 @@ NTSTATUS sam_get_domain_name(SAM_DOMAIN_
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name)
+NTSTATUS sam_get_domain_server(const SAM_DOMAIN_HANDLE *domain, char **server_name)
{
if (!domain || !server_name) return NT_STATUS_UNSUCCESSFUL;
@@ -79,7 +79,7 @@ NTSTATUS sam_get_domain_server(SAM_DOMAI
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage)
+NTSTATUS sam_get_domain_max_pwdage(const SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage)
{
if (!domain || !max_passwordage) return NT_STATUS_UNSUCCESSFUL;
@@ -88,7 +88,7 @@ NTSTATUS sam_get_domain_max_pwdage(SAM_D
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage)
+NTSTATUS sam_get_domain_min_pwdage(const SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage)
{
if (!domain || !min_passwordage) return NT_STATUS_UNSUCCESSFUL;
@@ -97,7 +97,7 @@ NTSTATUS sam_get_domain_min_pwdage(SAM_D
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration)
+NTSTATUS sam_get_domain_lockout_duration(const SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration)
{
if (!domain || !lockout_duration) return NT_STATUS_UNSUCCESSFUL;
@@ -106,7 +106,7 @@ NTSTATUS sam_get_domain_lockout_duration
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count)
+NTSTATUS sam_get_domain_reset_count(const SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count)
{
if (!domain || !reset_lockout_count) return NT_STATUS_UNSUCCESSFUL;
@@ -115,7 +115,7 @@ NTSTATUS sam_get_domain_reset_count(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength)
+NTSTATUS sam_get_domain_min_pwdlength(const SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength)
{
if (!domain || !min_passwordlength) return NT_STATUS_UNSUCCESSFUL;
@@ -124,7 +124,7 @@ NTSTATUS sam_get_domain_min_pwdlength(SA
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history)
+NTSTATUS sam_get_domain_pwd_history(const SAM_DOMAIN_HANDLE *domain, uint16 *password_history)
{
if (!domain || !password_history) return NT_STATUS_UNSUCCESSFUL;
@@ -133,7 +133,7 @@ NTSTATUS sam_get_domain_pwd_history(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count)
+NTSTATUS sam_get_domain_lockout_count(const SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count)
{
if (!domain || !lockout_count) return NT_STATUS_UNSUCCESSFUL;
@@ -142,7 +142,7 @@ NTSTATUS sam_get_domain_lockout_count(SA
return NT_STATUS_OK;
}
-NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff)
+NTSTATUS sam_get_domain_force_logoff(const SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff)
{
if (!domain || !force_logoff) return NT_STATUS_UNSUCCESSFUL;
@@ -152,7 +152,7 @@ NTSTATUS sam_get_domain_force_logoff(SAM
}
-NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange)
+NTSTATUS sam_get_domain_login_pwdchange(const SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange)
{
if (!domain || !login_pwdchange) return NT_STATUS_UNSUCCESSFUL;
@@ -163,7 +163,7 @@ NTSTATUS sam_get_domain_login_pwdchange(
/* Set */
-NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name)
+NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, const char *domain_name)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -173,7 +173,7 @@ NTSTATUS sam_set_domain_name(SAM_DOMAIN_
}
-NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage)
+NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, const NTTIME max_passwordage)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -182,7 +182,7 @@ NTSTATUS sam_set_domain_max_pwdage(SAM_D
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage)
+NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, const NTTIME min_passwordage)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -191,7 +191,7 @@ NTSTATUS sam_set_domain_min_pwdage(SAM_D
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration)
+NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, const NTTIME lockout_duration)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -199,7 +199,7 @@ NTSTATUS sam_set_domain_lockout_duration
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count)
+NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, const NTTIME reset_lockout_count)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -208,7 +208,7 @@ NTSTATUS sam_set_domain_reset_count(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength)
+NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, const uint16 min_passwordlength)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -217,7 +217,7 @@ NTSTATUS sam_set_domain_min_pwdlength(SA
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history)
+NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, const uint16 password_history)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -226,7 +226,7 @@ NTSTATUS sam_set_domain_pwd_history(SAM_
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count)
+NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, const uint16 lockout_count)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -235,7 +235,7 @@ NTSTATUS sam_set_domain_lockout_count(SA
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff)
+NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, const BOOL force_logoff)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -244,7 +244,7 @@ NTSTATUS sam_set_domain_force_logoff(SAM
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange)
+NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, const BOOL login_pwdchange)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
@@ -253,7 +253,7 @@ NTSTATUS sam_set_domain_login_pwdchange(
return NT_STATUS_OK;
}
-NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name)
+NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, const char *server_name)
{
if (!domain) return NT_STATUS_UNSUCCESSFUL;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/get_set_group.c HEAD-fix/source/sam/get_set_group.c
--- HEAD/source/sam/get_set_group.c Thu Aug 29 14:24:29 2002
+++ HEAD-fix/source/sam/get_set_group.c Thu Sep 5 04:27:56 2002
@@ -36,11 +36,11 @@ NTSTATUS sam_get_group_sid(const SAM_GRO
return NT_STATUS_OK;
}
-NTSTATUS sam_get_group_typ(const SAM_GROUP_HANDLE *group, uint32 *typ)
+NTSTATUS sam_get_group_ctrl(const SAM_GROUP_HANDLE *group, uint32 *group_ctrl)
{
- if (!group || !typ) return NT_STATUS_UNSUCCESSFUL;
+ if (!group || !group_ctrl) return NT_STATUS_UNSUCCESSFUL;
- *typ = group->private.flags;
+ *group_ctrl = group->private.group_ctrl;
return NT_STATUS_OK;
}
@@ -49,32 +49,23 @@ NTSTATUS sam_get_group_name(const SAM_GR
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
- *group_name = group->private.name;
+ *group_name = group->private.group_name;
return NT_STATUS_OK;
}
-NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **comment)
+NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **group_desc)
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
- *comment = group->private.comment;
-
- return NT_STATUS_OK;
-}
-
-NTSTATUS sam_get_group_priv_set(const SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set)
-{
- if (!group) return NT_STATUS_UNSUCCESSFUL;
-
- *priv_set = group->private.privileges;
+ *group_desc = group->private.group_desc;
return NT_STATUS_OK;
}
/* sam group set functions */
-NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, DOM_SID *sid)
+NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, const DOM_SID *sid)
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
@@ -84,11 +75,11 @@ NTSTATUS sam_set_group_sid(SAM_GROUP_HAN
return NT_STATUS_OK;
}
-NTSTATUS sam_set_group_typ(SAM_GROUP_HANDLE *group, uint32 typ)
+NTSTATUS sam_set_group_group_ctrl(SAM_GROUP_HANDLE *group, const uint32 group_ctrl)
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
- group->private.flags = typ;
+ group->private.group_ctrl = group_ctrl;
return NT_STATUS_OK;
}
@@ -97,27 +88,17 @@ NTSTATUS sam_set_group_name(SAM_GROUP_HA
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
- group->private.name = talloc_strdup(group->mem_ctx, group_name);
+ group->private.group_name = talloc_strdup(group->mem_ctx, group_name);
return NT_STATUS_OK;
}
-NTSTATUS sam_set_group_comment(SAM_GROUP_HANDLE *group, char *comment)
+NTSTATUS sam_set_group_description(SAM_GROUP_HANDLE *group, const char *group_desc)
{
if (!group) return NT_STATUS_UNSUCCESSFUL;
- group->private.comment = talloc_strdup(group->mem_ctx, comment);
+ group->private.group_desc = talloc_strdup(group->mem_ctx, group_desc);
return NT_STATUS_OK;
-}
-
-NTSTATUS sam_set_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set)
-{
- if (!group) return NT_STATUS_UNSUCCESSFUL;
-
- if (!priv_set) ZERO_STRUCT(group->private.privileges);
- else memcpy(&(group->private.privileges), priv_set, sizeof(PRIVILEGE_SET));
-
- return NT_STATUS_OK;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/group.c HEAD-fix/source/sam/group.c
--- HEAD/source/sam/group.c Thu Jan 1 01:00:00 1970
+++ HEAD-fix/source/sam/group.c Thu Sep 5 04:29:20 2002
@@ -0,0 +1,193 @@
+/*
+ Unix SMB/CIFS implementation.
+ SAM_GROUP_HANDLE /SAM_GROUP_ENUM helpers
+
+ Copyright (C) Stefan (metze) Metzmacher 2002
+
+ 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; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SAM
+
+/************************************************************
+ Fill the SAM_GROUP_HANDLE with default values.
+ ***********************************************************/
+
+static void sam_fill_default_group(SAM_GROUP_HANDLE *group)
+{
+ ZERO_STRUCT(group->private); /* Don't touch the talloc context */
+
+}
+
+static void destroy_sam_group_handle_talloc(SAM_GROUP_HANDLE **group)
+{
+ if (*group) {
+
+ talloc_destroy((*group)->mem_ctx);
+ *group = NULL;
+ }
+}
+
+
+/**********************************************************************
+ Alloc memory and initialises a SAM_GROUP_HANDLE on supplied mem_ctx.
+***********************************************************************/
+
+NTSTATUS sam_init_group_talloc(TALLOC_CTX *mem_ctx, SAM_GROUP_HANDLE **group)
+{
+ SMB_ASSERT(*group != NULL);
+
+ if (!mem_ctx) {
+ DEBUG(0,("sam_init_group_talloc: mem_ctx was NULL!\n"));
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ *group=(SAM_GROUP_HANDLE *)talloc(mem_ctx, sizeof(SAM_GROUP_HANDLE));
+
+ if (*group==NULL) {
+ DEBUG(0,("sam_init_group_talloc: error while allocating memory\n"));
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ (*group)->mem_ctx = mem_ctx;
+
+ (*group)->free_fn = NULL;
+
+ sam_fill_default_group(*group);
+
+ return NT_STATUS_OK;
+}
+
+
+/*************************************************************
+ Alloc memory and initialises a struct SAM_GROUP_HANDLE.
+ ************************************************************/
+
+NTSTATUS sam_init_group(SAM_GROUP_HANDLE **group)
+{
+ TALLOC_CTX *mem_ctx;
+ NTSTATUS nt_status;
+
+ mem_ctx = talloc_init_named("sam internal SAM_GROUP_HANDLE allocation");
+
+ if (!mem_ctx) {
+ DEBUG(0,("sam_init_group: error while doing talloc_init()\n"));
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ if (!NT_STATUS_IS_OK(nt_status = sam_init_group_talloc(mem_ctx, group))) {
+ talloc_destroy(mem_ctx);
+ return nt_status;
+ }
+
+ (*group)->free_fn = destroy_sam_group_handle_talloc;
+
+ return NT_STATUS_OK;
+}
+
+
+/************************************************************
+ Reset the SAM_GROUP_HANDLE.
+ ***********************************************************/
+
+NTSTATUS sam_reset_group(SAM_GROUP_HANDLE *group)
+{
+ SMB_ASSERT(group != NULL);
+
+ sam_fill_default_group(group);
+
+ return NT_STATUS_OK;
+}
+
+
+/************************************************************
+ Free the SAM_GROUP_HANDLE and the member pointers.
+ ***********************************************************/
+
+NTSTATUS sam_free_group(SAM_ACCOUNT_HANDLE **group)
+{
+ SMB_ASSERT(*group != NULL);
+
+ if ((*group)->free_fn) {
+ (*group)->free_fn(group);
+ }
+
+ return NT_STATUS_OK;
+}
+
+
+/**********************************************************
+ Encode the group control bits into a string.
+ length = length of string to encode into (including terminating
+ null). length *MUST BE MORE THAN 2* !
+ **********************************************************/
+
+char *sam_encode_acct_ctrl(uint16 group_ctrl, size_t length)
+{
+ static fstring group_str;
+ size_t i = 0;
+
+ group_str[i++] = '[';
+
+ if (group_ctrl & GCB_LOCAL_GROUP ) group_str[i++] = 'L';
+ if (group_ctrl & GCB_GLOBAL_GROUP ) group_str[i++] = 'G';
+
+ for ( ; i < length - 2 ; i++ )
+ group_str[i] = ' ';
+
+ i = length - 2;
+ group_str[i++] = ']';
+ group_str[i++] = '\0';
+
+ return group_str;
+}
+
+/**********************************************************
+ Decode the group control bits from a string.
+ **********************************************************/
+
+uint16 sam_decode_group_ctrl(const char *p)
+{
+ uint16 group_ctrl = 0;
+ BOOL finished = False;
+
+ /*
+ * Check if the account type bits have been encoded after the
+ * NT password (in the form [NDHTUWSLXI]).
+ */
+
+ if (*p != '[')
+ return 0;
+
+ for (p++; *p && !finished; p++) {
+ switch (*p) {
+ case 'L': { group_ctrl |= GCB_LOCAL_GROUP; break; /* 'L'ocal Aliases Group. */ }
+ case 'G': { group_ctrl |= GCB_GLOBAL_GROUP; break; /* 'G'lobal Domain Group. */ }
+
+ case ' ': { break; }
+ case ':':
+ case '\n':
+ case '\0':
+ case ']':
+ default: { finished = True; }
+ }
+ }
+
+ return group_ctrl;
+}
+
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/sam/interface.c HEAD-fix/source/sam/interface.c
--- HEAD/source/sam/interface.c Thu Aug 29 16:26:44 2002
+++ HEAD-fix/source/sam/interface.c Fri Sep 6 07:55:11 2002
@@ -354,7 +354,7 @@ NTSTATUS context_sam_get_domain_by_sid(c
return NT_STATUS_OK;
}
-NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account)
+NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account)
{
SAM_METHODS *tmp_methods;
NTSTATUS nt_status;
@@ -371,7 +371,7 @@ NTSTATUS context_sam_create_account(cons
return NT_STATUS_NOT_IMPLEMENTED;
}
- if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account))) {
+ if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) {
DEBUG(4,("context_sam_create_account in backend %s failed\n",
tmp_methods->backendname));
return nt_status;
@@ -494,7 +494,7 @@ NTSTATUS context_sam_delete_account(cons
return NT_STATUS_OK;
}
-NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, int32 *account_count, SAM_ACCOUNT_ENUM **accounts)
+NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts)
{
SAM_METHODS *tmp_methods;
NTSTATUS nt_status;
@@ -511,7 +511,7 @@ NTSTATUS context_sam_enum_accounts(const
return NT_STATUS_NOT_IMPLEMENTED;
}
- if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, account_count, accounts))) {
+ if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) {
DEBUG(4,("context_sam_enum_accounts for domain %s in backend %s failed\n",
tmp_methods->domain->private.name, tmp_methods->backendname));
return nt_status;
@@ -582,14 +582,14 @@ NTSTATUS context_sam_get_account_by_name
return NT_STATUS_OK;
}
-NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, DOM_SID *sid, SAM_GROUP_HANDLE **group)
+NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group)
{
SAM_METHODS *tmp_methods;
NTSTATUS nt_status;
DEBUG(5,("context_sam_create_group: %d\n", __LINE__));
- if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) {
+ if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) {
DEBUG(4,("sam_get_methods_by_sid failed\n"));
return nt_status;
}
@@ -599,7 +599,7 @@ NTSTATUS context_sam_create_group(const
return NT_STATUS_UNSUCCESSFUL;
}
- if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, type, group))) {
+ if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) {
DEBUG(4,("context_sam_create_group in backend %s failed\n",
tmp_methods->backendname));
return nt_status;
@@ -722,7 +722,7 @@ NTSTATUS context_sam_delete_group(const
return NT_STATUS_OK;
}
-NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups)
+NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups)
{
SAM_METHODS *tmp_methods;
NTSTATUS nt_status;
@@ -739,7 +739,7 @@ NTSTATUS context_sam_enum_groups(const S
return NT_STATUS_NOT_IMPLEMENTED;
}
- if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, type, groups_count, groups))) {
+ if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) {
DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n",
tmp_methods->domain->private.name, tmp_methods->backendname));
return nt_status;
@@ -823,7 +823,7 @@ NTSTATUS context_sam_enum_groupmembers(c
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS context_sam_get_groups_of_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups)
+NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups)
{
return NT_STATUS_NOT_IMPLEMENTED;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/examples/sam/sam_skel.c HEAD-fix/examples/sam/sam_skel.c
--- HEAD/examples/sam/sam_skel.c Sat Aug 31 15:36:26 2002
+++ HEAD-fix/examples/sam/sam_skel.c Fri Sep 6 07:16:33 2002
@@ -32,26 +32,26 @@ SAM_MODULE_VERSIONING_MAGIC
/* General API */
-NTSTATUS sam_skel_get_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd)
+NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_set_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd)
+NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_lookup_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type)
+NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_lookup_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type)
+NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
@@ -60,13 +60,13 @@ NTSTATUS sam_skel_lookup_name(const stru
/* Domain API */
-NTSTATUS sam_skel_update_domain(const struct sam_methods *sam_method, const SAM_DOMAIN_HANDLE *domain)
+NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_domain_handle(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain)
+NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
@@ -75,44 +75,44 @@ NTSTATUS sam_skel_get_domain_handle(cons
/* Account API */
-NTSTATUS sam_skel_create_account(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account)
+NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_add_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account)
+NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_update_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account)
+NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_delete_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account)
+NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_enum_accounts(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts)
+NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_account_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account)
+NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_account_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account)
+NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
@@ -121,69 +121,69 @@ NTSTATUS sam_skel_get_account_by_name(co
/* Group API */
-NTSTATUS sam_skel_create_group(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group)
+NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_add_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group)
+NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_update_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group)
+NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_delete_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group)
+NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_enum_groups(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups)
+NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_group_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group)
+NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_group_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group)
+NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_add_member_to_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
+NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_delete_member_from_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
+NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_enum_groupmembers(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members)
+NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
}
-NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups)
+NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups)
{
DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__));
return NT_STATUS_NOT_IMPLEMENTED;
@@ -238,7 +238,7 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam
(*sam_method)->sam_delete_member_from_group = sam_skel_delete_member_from_group;
(*sam_method)->sam_enum_groupmembers = sam_skel_enum_groupmembers;
- (*sam_method)->sam_get_groups_of_account = sam_skel_get_groups_of_account;
+ (*sam_method)->sam_get_groups_of_sid = sam_skel_get_groups_of_sid;
(*sam_method)->free_private_data = NULL;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=.#* HEAD/source/include/sam.h HEAD-fix/source/include/sam.h
--- HEAD/source/include/sam.h Mon Sep 2 15:06:55 2002
+++ HEAD-fix/source/include/sam.h Fri Sep 6 09:39:44 2002
@@ -25,7 +25,9 @@
#ifndef _SAM_H
#define _SAM_H
-#define SAM_INTERFACE_VERSION 1
+
+/* let it be 0 until we have a stable interface --metze */
+#define SAM_INTERFACE_VERSION 0
/* use this inside a passdb module */
#define SAM_MODULE_VERSIONING_MAGIC \
@@ -104,12 +106,11 @@ typedef struct sam_group_handle {
struct sam_methods *current_sam_methods; /* sam_methods creating this handle */
void (*free_fn)(struct sam_group_handle **);
struct sam_group_data {
- char *name;
- char *comment;
+ char *group_name;
+ char *group_desc;
DOM_SID sid;
- int32 flags; /* specifies if the group is a local group or a global group */
+ uint16 group_ctrl; /* specifies if the group is a local group or a global group */
uint32 num_members;
- PRIVILEGE_SET privileges;
} private;
} SAM_GROUP_HANDLE;
@@ -117,7 +118,6 @@ typedef struct sam_group_handle {
typedef struct sam_group_member {
DOM_SID sid;
BOOL group; /* specifies if it is a group or a account */
-
} SAM_GROUP_MEMBER;
typedef struct sam_account_enum {
@@ -125,15 +125,23 @@ typedef struct sam_account_enum {
char *account_name;
char *full_name;
char *account_desc;
- uint16 acc_ctrl;
+ uint16 acct_ctrl;
} SAM_ACCOUNT_ENUM;
typedef struct sam_group_enum {
DOM_SID sid;
- char *groupname;
- char *comment;
+ char *group_name;
+ char *group_desc;
+ uint16 group_ctrl;
} SAM_GROUP_ENUM;
+
+/* bits for group_ctrl: to spezify if the group is global group or alias */
+#define GCB_LOCAL_GROUP 0x0001
+#define GCB_ALIAS_GROUP GCB_LOCAL_GROUP
+#define GCB_GLOBAL_GROUP 0x0002
+
+
typedef struct sam_context
{
struct sam_methods *methods;
@@ -160,22 +168,22 @@ typedef struct sam_context
/* Account API */
- NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account);
+ NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account);
NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account);
NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account);
NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account);
- NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts);
+ NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts);
NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account);
NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account);
/* Group API */
-
+ NTSTATUS (*sam_create_group) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group);
NTSTATUS (*sam_add_group) (const struct sam_context *, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group);
NTSTATUS (*sam_update_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group);
NTSTATUS (*sam_delete_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group);
- NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups);
+ NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups);
NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group);
NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group);
@@ -183,8 +191,7 @@ typedef struct sam_context
NTSTATUS (*sam_delete_member_from_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member);
NTSTATUS (*sam_enum_groupmembers) (const struct sam_context *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members);
- NTSTATUS (*sam_get_groups_of_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups);
-
+ NTSTATUS (*sam_get_groups_of_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, const uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups);
void (*free_fn)(struct sam_context **);
} SAM_CONTEXT;
@@ -212,22 +219,22 @@ typedef struct sam_methods
/* Account API */
- NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account);
+ NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account);
NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account);
NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account);
NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account);
- NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts);
+ NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts);
NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account);
NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account);
/* Group API */
- NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group);
+ NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group);
NTSTATUS (*sam_add_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group);
NTSTATUS (*sam_update_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group);
NTSTATUS (*sam_delete_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group);
- NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups);
+ NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups);
NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group);
NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group);
@@ -235,7 +242,7 @@ typedef struct sam_methods
NTSTATUS (*sam_delete_member_from_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member);
NTSTATUS (*sam_enum_groupmembers) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members);
- NTSTATUS (*sam_get_groups_of_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups);
+ NTSTATUS (*sam_get_groups_of_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups);
void (*free_private_data)(void **);
} SAM_METHODS;
More information about the samba-technical
mailing list