mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
r13460: by popular demand....
* remove pdb_context data structure * set default group for DOMAIN_RID_GUEST user as RID 513 (just like Windows) * Allow RID 513 to resolve to always resolve to a name * Remove auto mapping of guest account primary group given the previous 2 changes (This used to be commit 7a2da5f0cc05c1920c664c9a690a23bdf854e285)
This commit is contained in:
parent
85160e654e
commit
75ef18fa75
@ -558,15 +558,13 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info,
|
||||
gid_t *gids;
|
||||
auth_serversupplied_info *result;
|
||||
|
||||
pwd = getpwnam_alloc(NULL, pdb_get_username(sampass));
|
||||
if ( pwd == NULL ) {
|
||||
if ( !(pwd = getpwnam_alloc(NULL, pdb_get_username(sampass))) ) {
|
||||
DEBUG(1, ("User %s in passdb, but getpwnam() fails!\n",
|
||||
pdb_get_username(sampass)));
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
result = make_server_info(NULL);
|
||||
if (result == NULL) {
|
||||
if ( !(result = make_server_info(NULL)) ) {
|
||||
talloc_free(pwd);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
@ -1136,7 +1134,8 @@ NTSTATUS make_server_info_pw(auth_serversupplied_info **server_info,
|
||||
Make (and fill) a user_info struct for a guest login.
|
||||
This *must* succeed for smbd to start. If there is no mapping entry for
|
||||
the guest gid, then create one.
|
||||
***************************************************************************/
|
||||
**********************
|
||||
*****************************************************/
|
||||
|
||||
static NTSTATUS make_new_server_info_guest(auth_serversupplied_info **server_info)
|
||||
{
|
||||
@ -1165,48 +1164,9 @@ static NTSTATUS make_new_server_info_guest(auth_serversupplied_info **server_inf
|
||||
}
|
||||
|
||||
status = make_server_info_sam(server_info, sampass);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
|
||||
/* If there was no initial group mapping for the nobody user,
|
||||
create one*/
|
||||
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)) {
|
||||
GROUP_MAP map;
|
||||
struct passwd *pwd = getpwnam_alloc(NULL, pdb_get_username(sampass));
|
||||
|
||||
if ( pwd == NULL ) {
|
||||
DEBUG(1, ("No guest user %s!\n",
|
||||
pdb_get_username(sampass)));
|
||||
pdb_free_sam(&sampass);
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
map.gid = pwd->pw_gid;
|
||||
sid_copy(&map.sid, get_global_sam_sid());
|
||||
sid_append_rid(&map.sid, DOMAIN_GROUP_RID_GUESTS);
|
||||
map.sid_name_use = SID_NAME_DOM_GRP;
|
||||
fstrcpy(map.nt_name, "Domain Guests");
|
||||
map.comment[0] = '\0';
|
||||
|
||||
if ( !NT_STATUS_IS_OK(pdb_update_group_mapping_entry(&map)) ) {
|
||||
DEBUG(1, ("Could not update group database for guest user %s\n",
|
||||
pdb_get_username(sampass) ));
|
||||
talloc_free(pwd);
|
||||
pdb_free_sam(&sampass);
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
talloc_free(pwd);
|
||||
|
||||
/* And try again. */
|
||||
status = make_server_info_sam(server_info, sampass);
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
pdb_free_sam(&sampass);
|
||||
return status;
|
||||
}
|
||||
pdb_free_sam(&sampass);
|
||||
return status;
|
||||
}
|
||||
|
||||
(*server_info)->guest = True;
|
||||
@ -1264,6 +1224,8 @@ BOOL init_guest_info(void)
|
||||
{
|
||||
if (guest_info != NULL)
|
||||
return True;
|
||||
|
||||
|
||||
|
||||
return NT_STATUS_IS_OK(make_new_server_info_guest(&guest_info));
|
||||
}
|
||||
|
@ -249,158 +249,9 @@ struct pdb_search {
|
||||
|
||||
#define PASSDB_INTERFACE_VERSION 12
|
||||
|
||||
typedef struct pdb_context
|
||||
{
|
||||
struct pdb_methods *pdb_methods;
|
||||
struct pdb_methods *pwent_methods;
|
||||
|
||||
/* These functions are wrappers for the functions listed above.
|
||||
They may do extra things like re-reading a SAM_ACCOUNT on update */
|
||||
|
||||
NTSTATUS (*pdb_setsampwent)(struct pdb_context *, BOOL update, uint16 acb_mask);
|
||||
|
||||
void (*pdb_endsampwent)(struct pdb_context *);
|
||||
|
||||
NTSTATUS (*pdb_getsampwent)(struct pdb_context *, SAM_ACCOUNT *user);
|
||||
|
||||
NTSTATUS (*pdb_getsampwnam)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const char *username);
|
||||
|
||||
NTSTATUS (*pdb_getsampwsid)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const DOM_SID *sid);
|
||||
|
||||
NTSTATUS (*pdb_add_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass);
|
||||
|
||||
NTSTATUS (*pdb_update_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass);
|
||||
|
||||
NTSTATUS (*pdb_delete_sam_account)(struct pdb_context *, SAM_ACCOUNT *username);
|
||||
|
||||
NTSTATUS (*pdb_rename_sam_account)(struct pdb_context *, SAM_ACCOUNT *oldname, const char *newname);
|
||||
|
||||
NTSTATUS (*pdb_update_login_attempts)(struct pdb_context *context, SAM_ACCOUNT *sam_acct, BOOL success);
|
||||
|
||||
NTSTATUS (*pdb_getgrsid)(struct pdb_context *context, GROUP_MAP *map, DOM_SID sid);
|
||||
|
||||
NTSTATUS (*pdb_getgrgid)(struct pdb_context *context, GROUP_MAP *map, gid_t gid);
|
||||
|
||||
NTSTATUS (*pdb_getgrnam)(struct pdb_context *context, GROUP_MAP *map, const char *name);
|
||||
|
||||
NTSTATUS (*pdb_add_group_mapping_entry)(struct pdb_context *context,
|
||||
GROUP_MAP *map);
|
||||
|
||||
NTSTATUS (*pdb_update_group_mapping_entry)(struct pdb_context *context,
|
||||
GROUP_MAP *map);
|
||||
|
||||
NTSTATUS (*pdb_delete_group_mapping_entry)(struct pdb_context *context,
|
||||
DOM_SID sid);
|
||||
|
||||
NTSTATUS (*pdb_enum_group_mapping)(struct pdb_context *context,
|
||||
enum SID_NAME_USE sid_name_use,
|
||||
GROUP_MAP **pp_rmap, size_t *p_num_entries,
|
||||
BOOL unix_only);
|
||||
|
||||
NTSTATUS (*pdb_enum_group_members)(struct pdb_context *context,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
const DOM_SID *group,
|
||||
uint32 **pp_member_rids,
|
||||
size_t *p_num_members);
|
||||
|
||||
NTSTATUS (*pdb_enum_group_memberships)(struct pdb_context *context,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
SAM_ACCOUNT *user,
|
||||
DOM_SID **pp_sids,
|
||||
gid_t **pp_gids,
|
||||
size_t *p_num_groups);
|
||||
|
||||
NTSTATUS (*pdb_find_alias)(struct pdb_context *context,
|
||||
const char *name, DOM_SID *sid);
|
||||
|
||||
NTSTATUS (*pdb_create_alias)(struct pdb_context *context,
|
||||
const char *name, uint32 *rid);
|
||||
|
||||
NTSTATUS (*pdb_delete_alias)(struct pdb_context *context,
|
||||
const DOM_SID *sid);
|
||||
|
||||
NTSTATUS (*pdb_get_aliasinfo)(struct pdb_context *context,
|
||||
const DOM_SID *sid,
|
||||
struct acct_info *info);
|
||||
|
||||
NTSTATUS (*pdb_set_aliasinfo)(struct pdb_context *context,
|
||||
const DOM_SID *sid,
|
||||
struct acct_info *info);
|
||||
|
||||
NTSTATUS (*pdb_add_aliasmem)(struct pdb_context *context,
|
||||
const DOM_SID *alias,
|
||||
const DOM_SID *member);
|
||||
|
||||
NTSTATUS (*pdb_del_aliasmem)(struct pdb_context *context,
|
||||
const DOM_SID *alias,
|
||||
const DOM_SID *member);
|
||||
|
||||
NTSTATUS (*pdb_enum_aliasmem)(struct pdb_context *context,
|
||||
const DOM_SID *alias,
|
||||
DOM_SID **pp_members, size_t *p_num_members);
|
||||
|
||||
NTSTATUS (*pdb_enum_alias_memberships)(struct pdb_context *context,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
const DOM_SID *domain_sid,
|
||||
const DOM_SID *members,
|
||||
size_t num_members,
|
||||
uint32 **pp_alias_rids,
|
||||
size_t *p_num_alias_rids);
|
||||
|
||||
NTSTATUS (*pdb_lookup_rids)(struct pdb_context *context,
|
||||
const DOM_SID *domain_sid,
|
||||
size_t num_rids,
|
||||
uint32 *rids,
|
||||
const char **pp_names,
|
||||
uint32 *attrs);
|
||||
|
||||
NTSTATUS (*pdb_lookup_names)(struct pdb_context *context,
|
||||
const DOM_SID *domain_sid,
|
||||
size_t num_names,
|
||||
const char **names,
|
||||
uint32 *rids,
|
||||
uint32 *attrs);
|
||||
|
||||
NTSTATUS (*pdb_get_account_policy)(struct pdb_context *context,
|
||||
int policy_index, uint32 *value);
|
||||
|
||||
NTSTATUS (*pdb_set_account_policy)(struct pdb_context *context,
|
||||
int policy_index, uint32 value);
|
||||
|
||||
NTSTATUS (*pdb_get_seq_num)(struct pdb_context *context, time_t *seq_num);
|
||||
|
||||
BOOL (*pdb_search_users)(struct pdb_context *context,
|
||||
struct pdb_search *search,
|
||||
uint16 acct_flags);
|
||||
BOOL (*pdb_search_groups)(struct pdb_context *context,
|
||||
struct pdb_search *search);
|
||||
BOOL (*pdb_search_aliases)(struct pdb_context *context,
|
||||
struct pdb_search *search,
|
||||
const DOM_SID *sid);
|
||||
BOOL (*pdb_uid_to_rid)(struct pdb_context *context,
|
||||
uid_t uid, uint32 *rid);
|
||||
BOOL (*pdb_gid_to_sid)(struct pdb_context *context,
|
||||
uid_t gid, DOM_SID *sid);
|
||||
BOOL (*pdb_sid_to_id)(struct pdb_context *context, const DOM_SID *sid,
|
||||
union unid_t *id, enum SID_NAME_USE *type);
|
||||
|
||||
BOOL (*pdb_rid_algorithm)(struct pdb_context *context);
|
||||
BOOL (*pdb_new_rid)(struct pdb_context *context, uint32 *rid);
|
||||
|
||||
void (*free_fn)(struct pdb_context **);
|
||||
|
||||
TALLOC_CTX *mem_ctx;
|
||||
|
||||
} PDB_CONTEXT;
|
||||
|
||||
typedef struct pdb_methods
|
||||
struct pdb_methods
|
||||
{
|
||||
const char *name; /* What name got this module */
|
||||
struct pdb_context *parent;
|
||||
|
||||
/* Use macros from dlinklist.h on these two */
|
||||
struct pdb_methods *next;
|
||||
struct pdb_methods *prev;
|
||||
|
||||
NTSTATUS (*setsampwent)(struct pdb_methods *, BOOL update, uint16 acb_mask);
|
||||
|
||||
@ -530,17 +381,16 @@ typedef struct pdb_methods
|
||||
void *private_data; /* Private data of some kind */
|
||||
|
||||
void (*free_private_data)(void **);
|
||||
};
|
||||
|
||||
} PDB_METHODS;
|
||||
|
||||
typedef NTSTATUS (*pdb_init_function)(struct pdb_context *,
|
||||
struct pdb_methods **,
|
||||
const char *);
|
||||
typedef NTSTATUS (*pdb_init_function)(struct pdb_methods **, const char *);
|
||||
|
||||
struct pdb_init_function_entry {
|
||||
const char *name;
|
||||
|
||||
/* Function to create a member of the pdb_methods list */
|
||||
pdb_init_function init;
|
||||
|
||||
struct pdb_init_function_entry *prev, *next;
|
||||
};
|
||||
|
||||
|
@ -195,17 +195,13 @@ struct ldapsam_privates {
|
||||
};
|
||||
|
||||
/* Functions shared between pdb_ldap.c and pdb_nds.c. */
|
||||
NTSTATUS pdb_init_ldapsam_compat(PDB_CONTEXT *pdb_context,
|
||||
PDB_METHODS **pdb_method,
|
||||
const char *location);
|
||||
NTSTATUS pdb_init_ldapsam_compat( struct pdb_methods **pdb_method, const char *location);
|
||||
void private_data_free_fn(void **result);
|
||||
int ldapsam_search_suffix_by_name(struct ldapsam_privates *ldap_state,
|
||||
const char *user,
|
||||
LDAPMessage ** result,
|
||||
const char **attr);
|
||||
NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context,
|
||||
PDB_METHODS **pdb_method,
|
||||
const char *location);
|
||||
NTSTATUS pdb_init_ldapsam( struct pdb_methods **pdb_method, const char *location);
|
||||
const char** get_userattr_list( TALLOC_CTX *mem_ctx, int schema_ver );
|
||||
|
||||
char * smbldap_talloc_single_attribute(LDAP *ldap_struct, LDAPMessage *entry,
|
||||
@ -217,7 +213,6 @@ const char *smbldap_talloc_dn(TALLOC_CTX *mem_ctx, LDAP *ld,
|
||||
LDAPMessage *entry);
|
||||
|
||||
|
||||
|
||||
#endif /* HAVE_LDAP */
|
||||
|
||||
#define LDAP_CONNECT_DEFAULT_TIMEOUT 15
|
||||
|
@ -209,9 +209,30 @@ NTSTATUS pdb_default_enum_group_memberships(struct pdb_methods *methods,
|
||||
size_t i;
|
||||
gid_t gid;
|
||||
|
||||
if (!sid_to_gid(pdb_get_group_sid(user), &gid)) {
|
||||
DEBUG(10, ("sid_to_gid failed\n"));
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
if ( !sid_to_gid(pdb_get_group_sid(user), &gid) )
|
||||
{
|
||||
uint32 rid;
|
||||
struct passwd *pwd;
|
||||
|
||||
/* second try, allow the DOMAIN_USERS group to pass */
|
||||
|
||||
if ( !sid_peek_check_rid( get_global_sam_sid(), pdb_get_group_sid(user), &rid ) )
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
|
||||
if ( rid != DOMAIN_GROUP_RID_USERS ) {
|
||||
DEBUG(10, ("sid_to_gid failed\n"));
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
DEBUG(5,("pdb_default_enum_group_memberships: sid_to_gid() failed but giving "
|
||||
"free pass to 'Domain Users' as primary group\n"));
|
||||
|
||||
if ( !(pwd = getpwnam_alloc( NULL, pdb_get_username(user) ) ) )
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
|
||||
gid = pwd->pw_gid;
|
||||
|
||||
TALLOC_FREE( pwd );
|
||||
}
|
||||
|
||||
if (!getgroups_unix_user(mem_ctx, pdb_get_username(user), gid,
|
||||
|
@ -124,7 +124,7 @@ typedef struct {
|
||||
char *szConfigFile;
|
||||
char *szSMBPasswdFile;
|
||||
char *szPrivateDir;
|
||||
char **szPassdbBackend;
|
||||
char *szPassdbBackend;
|
||||
char **szPreloadModules;
|
||||
char *szPasswordServer;
|
||||
char *szSocketOptions;
|
||||
@ -861,7 +861,7 @@ static struct parm_struct parm_table[] = {
|
||||
{"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD},
|
||||
{"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED},
|
||||
{"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED},
|
||||
{"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD},
|
||||
{"passdb backend", P_STRING, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD},
|
||||
{"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.AlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED},
|
||||
{"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED},
|
||||
{"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE},
|
||||
@ -1560,13 +1560,12 @@ static void init_globals(BOOL first_time_only)
|
||||
a large number of sites (tridge) */
|
||||
Globals.bHostnameLookups = False;
|
||||
|
||||
str_list_free(&Globals.szPassdbBackend);
|
||||
#ifdef WITH_LDAP_SAMCONFIG
|
||||
string_set(&Globals.szLdapServer, "localhost");
|
||||
Globals.ldap_port = 636;
|
||||
Globals.szPassdbBackend = str_list_make("ldapsam_compat", NULL);
|
||||
string_set(&Globals.szPassdbBackend, "ldapsam_compat");
|
||||
#else
|
||||
Globals.szPassdbBackend = str_list_make("smbpasswd", NULL);
|
||||
string_set(&Globals.szPassdbBackend, "smbpasswd");
|
||||
#endif /* WITH_LDAP_SAMCONFIG */
|
||||
string_set(&Globals.szLdapSuffix, "");
|
||||
string_set(&Globals.szLdapMachineSuffix, "");
|
||||
@ -1807,7 +1806,7 @@ FN_GLOBAL_STRING(lp_socket_address, &Globals.szSocketAddress)
|
||||
FN_GLOBAL_STRING(lp_nis_home_map_name, &Globals.szNISHomeMapName)
|
||||
static FN_GLOBAL_STRING(lp_announce_version, &Globals.szAnnounceVersion)
|
||||
FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases)
|
||||
FN_GLOBAL_LIST(lp_passdb_backend, &Globals.szPassdbBackend)
|
||||
FN_GLOBAL_STRING(lp_passdb_backend, &Globals.szPassdbBackend)
|
||||
FN_GLOBAL_LIST(lp_preload_modules, &Globals.szPreloadModules)
|
||||
FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction)
|
||||
FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript)
|
||||
|
@ -206,7 +206,11 @@ static NTSTATUS pdb_set_sam_sids(SAM_ACCOUNT *account_data, const struct passwd
|
||||
if (!pdb_set_user_sid_from_rid(account_data, DOMAIN_USER_RID_GUEST, PDB_DEFAULT)) {
|
||||
return NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
if (!pdb_set_group_sid_from_rid(account_data, DOMAIN_GROUP_RID_GUESTS, PDB_DEFAULT)) {
|
||||
|
||||
/* by default the guest account is a member of of the domain users group
|
||||
as well as the domain guests group. Verified against Windows NT - 2003 */
|
||||
|
||||
if (!pdb_set_group_sid_from_rid(account_data, DOMAIN_GROUP_RID_USERS, PDB_DEFAULT)) {
|
||||
return NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
return NT_STATUS_OK;
|
||||
|
@ -114,7 +114,7 @@ static NTSTATUS guestsam_update_sam_account (struct pdb_methods *methods, SAM_AC
|
||||
|
||||
/* apparently thr build farm relies upon this heavior :-( */
|
||||
|
||||
return methods->parent->pdb_add_sam_account(methods->parent, newpwd);
|
||||
return methods->add_sam_account(methods, newpwd);
|
||||
#else
|
||||
/* I don't think we should allow any modification of
|
||||
the guest account as SID will could messed up with
|
||||
@ -124,16 +124,11 @@ static NTSTATUS guestsam_update_sam_account (struct pdb_methods *methods, SAM_AC
|
||||
#endif
|
||||
}
|
||||
|
||||
NTSTATUS pdb_init_guestsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
NTSTATUS pdb_init_guestsam(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
|
||||
if (!pdb_context) {
|
||||
DEBUG(0, ("invalid pdb_context specified\n"));
|
||||
return NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4632,17 +4632,17 @@ static void free_private_data(void **vp)
|
||||
/* No need to free any further, as it is talloc()ed */
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
Intitalise the parts of the pdb_context that are common to all pdb_ldap modes
|
||||
*********************************************************************/
|
||||
/*********************************************************************
|
||||
Intitalise the parts of the pdb_methods structure that are common to
|
||||
all pdb_ldap modes
|
||||
*********************************************************************/
|
||||
|
||||
static NTSTATUS pdb_init_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method,
|
||||
const char *location)
|
||||
static NTSTATUS pdb_init_ldapsam_common(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
struct ldapsam_privates *ldap_state;
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
@ -4676,18 +4676,18 @@ static NTSTATUS pdb_init_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHODS **
|
||||
|
||||
/* TODO: Setup private data and free */
|
||||
|
||||
ldap_state = TALLOC_ZERO_P(pdb_context->mem_ctx, struct ldapsam_privates);
|
||||
if (!ldap_state) {
|
||||
if ( !(ldap_state = TALLOC_ZERO_P(*pdb_method, struct ldapsam_privates)) ) {
|
||||
DEBUG(0, ("pdb_init_ldapsam_common: talloc() failed for ldapsam private_data!\n"));
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status =
|
||||
smbldap_init(pdb_context->mem_ctx, location,
|
||||
&ldap_state->smbldap_state)));
|
||||
nt_status = smbldap_init(*pdb_method, location, &ldap_state->smbldap_state);
|
||||
|
||||
ldap_state->domain_name = talloc_strdup(pdb_context->mem_ctx, get_global_sam_name());
|
||||
if (!ldap_state->domain_name) {
|
||||
if ( !NT_STATUS_IS_OK(nt_status) ) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
if ( !(ldap_state->domain_name = talloc_strdup(*pdb_method, get_global_sam_name()) ) ) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
@ -4702,13 +4702,14 @@ static NTSTATUS pdb_init_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHODS **
|
||||
Initialise the 'compat' mode for pdb_ldap
|
||||
*********************************************************************/
|
||||
|
||||
NTSTATUS pdb_init_ldapsam_compat(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
NTSTATUS pdb_init_ldapsam_compat(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
struct ldapsam_privates *ldap_state;
|
||||
char *uri = talloc_strdup( NULL, location );
|
||||
|
||||
#ifdef WITH_LDAP_SAMCONFIG
|
||||
if (!location) {
|
||||
if (!uri) {
|
||||
int ldap_port = lp_ldap_port();
|
||||
|
||||
/* remap default port if not using SSL (ie clear or TLS) */
|
||||
@ -4716,17 +4717,23 @@ NTSTATUS pdb_init_ldapsam_compat(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_met
|
||||
ldap_port = 389;
|
||||
}
|
||||
|
||||
location = talloc_asprintf(pdb_context->mem_ctx, "%s://%s:%d", lp_ldap_ssl() == LDAP_SSL_ON ? "ldaps" : "ldap", lp_ldap_server(), ldap_port);
|
||||
if (!location) {
|
||||
uri = talloc_asprintf(NULL, "%s://%s:%d", lp_ldap_ssl() == LDAP_SSL_ON ? "ldaps" : "ldap", lp_ldap_server(), ldap_port);
|
||||
if (!uri) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
location = uri;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status = pdb_init_ldapsam_common(pdb_context, pdb_method, location))) {
|
||||
if (!NT_STATUS_IS_OK(nt_status = pdb_init_ldapsam_common( pdb_method, uri ))) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
/* the module itself stores a copy of the location so throw this one away */
|
||||
|
||||
if ( uri )
|
||||
TALLOC_FREE( uri );
|
||||
|
||||
(*pdb_method)->name = "ldapsam_compat";
|
||||
|
||||
ldap_state = (*pdb_method)->private_data;
|
||||
@ -4741,7 +4748,7 @@ NTSTATUS pdb_init_ldapsam_compat(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_met
|
||||
Initialise the normal mode for pdb_ldap
|
||||
*********************************************************************/
|
||||
|
||||
NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
struct ldapsam_privates *ldap_state;
|
||||
@ -4754,7 +4761,7 @@ NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, co
|
||||
pstring domain_sid_string;
|
||||
char *dn;
|
||||
|
||||
nt_status = pdb_init_ldapsam_common(pdb_context, pdb_method, location);
|
||||
nt_status = pdb_init_ldapsam_common(pdb_method, location);
|
||||
if (!NT_STATUS_IS_OK(nt_status)) {
|
||||
return nt_status;
|
||||
}
|
||||
|
@ -848,10 +848,11 @@ static NTSTATUS pdb_nds_update_login_attempts(struct pdb_methods *methods,
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
Intitalise the parts of the pdb_context that are common to NDS_ldapsam modes
|
||||
Intitalise the parts of the pdb_methods structuire that are common
|
||||
to NDS_ldapsam modes
|
||||
*********************************************************************/
|
||||
|
||||
static NTSTATUS pdb_init_NDS_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
static NTSTATUS pdb_init_NDS_ldapsam_common(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
struct ldapsam_privates *ldap_state = (*pdb_method)->private_data;
|
||||
|
||||
@ -872,13 +873,13 @@ static NTSTATUS pdb_init_NDS_ldapsam_common(PDB_CONTEXT *pdb_context, PDB_METHOD
|
||||
Initialise the 'nds compat' mode for pdb_ldap
|
||||
*********************************************************************/
|
||||
|
||||
static NTSTATUS pdb_init_NDS_ldapsam_compat(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
static NTSTATUS pdb_init_NDS_ldapsam_compat(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status = pdb_init_ldapsam_compat(pdb_context, pdb_method, location);
|
||||
NTSTATUS nt_status = pdb_init_ldapsam_compat(pdb_method, location);
|
||||
|
||||
(*pdb_method)->name = "NDS_ldapsam_compat";
|
||||
|
||||
pdb_init_NDS_ldapsam_common(pdb_context, pdb_method, location);
|
||||
pdb_init_NDS_ldapsam_common(pdb_method, location);
|
||||
|
||||
return nt_status;
|
||||
}
|
||||
@ -888,13 +889,13 @@ static NTSTATUS pdb_init_NDS_ldapsam_compat(PDB_CONTEXT *pdb_context, PDB_METHOD
|
||||
Initialise the 'nds' normal mode for pdb_ldap
|
||||
*********************************************************************/
|
||||
|
||||
static NTSTATUS pdb_init_NDS_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
static NTSTATUS pdb_init_NDS_ldapsam(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status = pdb_init_ldapsam(pdb_context, pdb_method, location);
|
||||
NTSTATUS nt_status = pdb_init_ldapsam(pdb_method, location);
|
||||
|
||||
(*pdb_method)->name = "NDS_ldapsam";
|
||||
|
||||
pdb_init_NDS_ldapsam_common(pdb_context, pdb_method, location);
|
||||
pdb_init_NDS_ldapsam_common(pdb_method, location);
|
||||
|
||||
return nt_status;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
#undef DBGC_CLASS
|
||||
#define DBGC_CLASS DBGC_PASSDB
|
||||
|
||||
NTSTATUS pdb_init_plugin(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
NTSTATUS pdb_init_plugin(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
void * dl_handle;
|
||||
char *plugin_location, *plugin_name, *p;
|
||||
@ -76,5 +76,5 @@ NTSTATUS pdb_init_plugin(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, con
|
||||
}
|
||||
|
||||
DEBUG(5, ("Starting sam plugin %s with location %s\n", plugin_name, plugin_location));
|
||||
return plugin_init(pdb_context, pdb_method, plugin_location);
|
||||
return plugin_init(pdb_method, plugin_location);
|
||||
}
|
||||
|
@ -1540,12 +1540,12 @@ static void free_private_data(void **vp)
|
||||
/* No need to free any further, as it is talloc()ed */
|
||||
}
|
||||
|
||||
static NTSTATUS pdb_init_smbpasswd(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
static NTSTATUS pdb_init_smbpasswd( struct pdb_methods **pdb_method, const char *location )
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
struct smbpasswd_privates *privates;
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
|
||||
if ( !NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method )) ) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
@ -1565,9 +1565,7 @@ static NTSTATUS pdb_init_smbpasswd(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_m
|
||||
|
||||
/* Setup private data and free function */
|
||||
|
||||
privates = TALLOC_ZERO_P(pdb_context->mem_ctx, struct smbpasswd_privates);
|
||||
|
||||
if (!privates) {
|
||||
if ( !(privates = TALLOC_ZERO_P( *pdb_method, struct smbpasswd_privates )) ) {
|
||||
DEBUG(0, ("talloc() failed for smbpasswd private_data!\n"));
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
@ -1575,9 +1573,9 @@ static NTSTATUS pdb_init_smbpasswd(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_m
|
||||
/* Store some config details */
|
||||
|
||||
if (location) {
|
||||
privates->smbpasswd_file = talloc_strdup(pdb_context->mem_ctx, location);
|
||||
privates->smbpasswd_file = talloc_strdup(*pdb_method, location);
|
||||
} else {
|
||||
privates->smbpasswd_file = talloc_strdup(pdb_context->mem_ctx, lp_smb_passwd_file());
|
||||
privates->smbpasswd_file = talloc_strdup(*pdb_method, lp_smb_passwd_file());
|
||||
}
|
||||
|
||||
if (!privates->smbpasswd_file) {
|
||||
|
@ -965,25 +965,21 @@ static void free_private_data(void **vp)
|
||||
/* No need to free any further, as it is talloc()ed */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Init tdbsam backend
|
||||
*
|
||||
* @param pdb_context initialised passdb context
|
||||
* @param pdb_method backend methods structure to be filled with function pointers
|
||||
* @param location the backend tdb file location
|
||||
*
|
||||
* @return nt_status code
|
||||
**/
|
||||
|
||||
static NTSTATUS pdb_init_tdbsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
||||
static NTSTATUS pdb_init_tdbsam(struct pdb_methods **pdb_method, const char *location)
|
||||
{
|
||||
NTSTATUS nt_status;
|
||||
struct tdbsam_privates *tdb_state;
|
||||
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
|
||||
if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) {
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
@ -1002,21 +998,19 @@ static NTSTATUS pdb_init_tdbsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_meth
|
||||
(*pdb_method)->rid_algorithm = tdbsam_rid_algorithm;
|
||||
(*pdb_method)->new_rid = tdbsam_new_rid;
|
||||
|
||||
tdb_state = TALLOC_ZERO_P(pdb_context->mem_ctx, struct tdbsam_privates);
|
||||
|
||||
if (!tdb_state) {
|
||||
if ( !(tdb_state = TALLOC_ZERO_P( *pdb_method, struct tdbsam_privates)) ) {
|
||||
DEBUG(0, ("talloc() failed for tdbsam private_data!\n"));
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (location) {
|
||||
tdb_state->tdbsam_location = talloc_strdup(pdb_context->mem_ctx, location);
|
||||
tdb_state->tdbsam_location = talloc_strdup(*pdb_method, location);
|
||||
} else {
|
||||
pstring tdbfile;
|
||||
get_private_directory(tdbfile);
|
||||
pstrcat(tdbfile, "/");
|
||||
pstrcat(tdbfile, PASSDB_FILE_NAME);
|
||||
tdb_state->tdbsam_location = talloc_strdup(pdb_context->mem_ctx, tdbfile);
|
||||
tdb_state->tdbsam_location = talloc_strdup(*pdb_method, tdbfile);
|
||||
}
|
||||
|
||||
(*pdb_method)->private_data = tdb_state;
|
||||
|
@ -54,70 +54,6 @@
|
||||
#define MASK_ALWAYS_GOOD 0x0000001F
|
||||
#define MASK_USER_GOOD 0x00405FE0
|
||||
|
||||
/*********************************************************
|
||||
Add all currently available users to another db
|
||||
********************************************************/
|
||||
|
||||
static int export_database (struct pdb_context *in, struct pdb_context
|
||||
*out, const char *username) {
|
||||
SAM_ACCOUNT *user = NULL;
|
||||
|
||||
DEBUG(3, ("called with username=\"%s\"\n", username));
|
||||
|
||||
if (NT_STATUS_IS_ERR(in->pdb_setsampwent(in, 0, 0))) {
|
||||
fprintf(stderr, "Can't sampwent!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(pdb_init_sam(&user))) {
|
||||
fprintf(stderr, "Can't initialize new SAM_ACCOUNT!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (NT_STATUS_IS_OK(in->pdb_getsampwent(in, user))) {
|
||||
DEBUG(4, ("Processing account %s\n",
|
||||
user->private_u.username));
|
||||
if (!username ||
|
||||
(strcmp(username, user->private_u.username)
|
||||
== 0)) {
|
||||
out->pdb_add_sam_account(out, user);
|
||||
if (!NT_STATUS_IS_OK(pdb_reset_sam(user))) {
|
||||
fprintf(stderr,
|
||||
"Can't reset SAM_ACCOUNT!\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
in->pdb_endsampwent(in);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
Add all currently available group mappings to another db
|
||||
********************************************************/
|
||||
|
||||
static int export_groups (struct pdb_context *in, struct pdb_context *out) {
|
||||
GROUP_MAP *maps = NULL;
|
||||
size_t i, entries = 0;
|
||||
|
||||
if (NT_STATUS_IS_ERR(in->pdb_enum_group_mapping(in, SID_NAME_UNKNOWN,
|
||||
&maps, &entries,
|
||||
False))) {
|
||||
fprintf(stderr, "Can't get group mappings!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i=0; i<entries; i++) {
|
||||
out->pdb_add_group_mapping_entry(out, &(maps[i]));
|
||||
}
|
||||
|
||||
SAFE_FREE(maps);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
Reset account policies to their default values and remove marker
|
||||
********************************************************/
|
||||
@ -146,38 +82,6 @@ static int reinit_account_policies (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************
|
||||
Add all currently available account policy from tdb to one backend
|
||||
********************************************************/
|
||||
|
||||
static int export_account_policies (struct pdb_context *in, struct pdb_context *out)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!account_policy_migrated(True)) {
|
||||
fprintf(stderr, "Can't set account policy marker in tdb\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i=1; decode_account_policy_name(i) != NULL; i++) {
|
||||
uint32 policy_value;
|
||||
if (NT_STATUS_IS_ERR(in->pdb_get_account_policy(in, i, &policy_value))) {
|
||||
fprintf(stderr, "Can't get account policy from tdb\n");
|
||||
remove_account_policy_migrated();
|
||||
return -1;
|
||||
}
|
||||
if (NT_STATUS_IS_ERR(out->pdb_set_account_policy(out, i, policy_value))) {
|
||||
fprintf(stderr, "Can't set account policy in passdb\n");
|
||||
remove_account_policy_migrated();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************
|
||||
Print info from sam structure
|
||||
**********************************************************/
|
||||
@ -266,7 +170,7 @@ static int print_sam_info (SAM_ACCOUNT *sam_pwent, BOOL verbosity, BOOL smbpwdst
|
||||
Get an Print User Info
|
||||
**********************************************************/
|
||||
|
||||
static int print_user_info (struct pdb_context *in, const char *username, BOOL verbosity, BOOL smbpwdstyle)
|
||||
static int print_user_info (struct pdb_methods *in, const char *username, BOOL verbosity, BOOL smbpwdstyle)
|
||||
{
|
||||
SAM_ACCOUNT *sam_pwent=NULL;
|
||||
BOOL ret;
|
||||
@ -275,7 +179,7 @@ static int print_user_info (struct pdb_context *in, const char *username, BOOL v
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = NT_STATUS_IS_OK(in->pdb_getsampwnam (in, sam_pwent, username));
|
||||
ret = NT_STATUS_IS_OK(in->getsampwnam (in, sam_pwent, username));
|
||||
|
||||
if (ret==False) {
|
||||
fprintf (stderr, "Username not found!\n");
|
||||
@ -292,12 +196,12 @@ static int print_user_info (struct pdb_context *in, const char *username, BOOL v
|
||||
/*********************************************************
|
||||
List Users
|
||||
**********************************************************/
|
||||
static int print_users_list (struct pdb_context *in, BOOL verbosity, BOOL smbpwdstyle)
|
||||
static int print_users_list (struct pdb_methods *in, BOOL verbosity, BOOL smbpwdstyle)
|
||||
{
|
||||
SAM_ACCOUNT *sam_pwent=NULL;
|
||||
BOOL check;
|
||||
|
||||
check = NT_STATUS_IS_OK(in->pdb_setsampwent(in, False, 0));
|
||||
check = NT_STATUS_IS_OK(in->setsampwent(in, False, 0));
|
||||
if (!check) {
|
||||
return 1;
|
||||
}
|
||||
@ -305,7 +209,7 @@ static int print_users_list (struct pdb_context *in, BOOL verbosity, BOOL smbpwd
|
||||
check = True;
|
||||
if (!(NT_STATUS_IS_OK(pdb_init_sam(&sam_pwent)))) return 1;
|
||||
|
||||
while (check && NT_STATUS_IS_OK(in->pdb_getsampwent (in, sam_pwent))) {
|
||||
while (check && NT_STATUS_IS_OK(in->getsampwent (in, sam_pwent))) {
|
||||
if (verbosity)
|
||||
printf ("---------------\n");
|
||||
print_sam_info (sam_pwent, verbosity, smbpwdstyle);
|
||||
@ -314,19 +218,19 @@ static int print_users_list (struct pdb_context *in, BOOL verbosity, BOOL smbpwd
|
||||
}
|
||||
if (check) pdb_free_sam(&sam_pwent);
|
||||
|
||||
in->pdb_endsampwent(in);
|
||||
in->endsampwent(in);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
Fix a list of Users for uninitialised passwords
|
||||
**********************************************************/
|
||||
static int fix_users_list (struct pdb_context *in)
|
||||
static int fix_users_list (struct pdb_methods *in)
|
||||
{
|
||||
SAM_ACCOUNT *sam_pwent=NULL;
|
||||
BOOL check;
|
||||
|
||||
check = NT_STATUS_IS_OK(in->pdb_setsampwent(in, False, 0));
|
||||
check = NT_STATUS_IS_OK(in->setsampwent(in, False, 0));
|
||||
if (!check) {
|
||||
return 1;
|
||||
}
|
||||
@ -334,7 +238,7 @@ static int fix_users_list (struct pdb_context *in)
|
||||
check = True;
|
||||
if (!(NT_STATUS_IS_OK(pdb_init_sam(&sam_pwent)))) return 1;
|
||||
|
||||
while (check && NT_STATUS_IS_OK(in->pdb_getsampwent (in, sam_pwent))) {
|
||||
while (check && NT_STATUS_IS_OK(in->getsampwent (in, sam_pwent))) {
|
||||
printf("Updating record for user %s\n", pdb_get_username(sam_pwent));
|
||||
|
||||
if (!NT_STATUS_IS_OK(pdb_update_sam_account(sam_pwent))) {
|
||||
@ -349,7 +253,7 @@ static int fix_users_list (struct pdb_context *in)
|
||||
}
|
||||
if (check) pdb_free_sam(&sam_pwent);
|
||||
|
||||
in->pdb_endsampwent(in);
|
||||
in->endsampwent(in);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -357,7 +261,7 @@ static int fix_users_list (struct pdb_context *in)
|
||||
Set User Info
|
||||
**********************************************************/
|
||||
|
||||
static int set_user_info (struct pdb_context *in, const char *username,
|
||||
static int set_user_info (struct pdb_methods *in, const char *username,
|
||||
const char *fullname, const char *homedir,
|
||||
const char *acct_desc,
|
||||
const char *drive, const char *script,
|
||||
@ -373,7 +277,7 @@ static int set_user_info (struct pdb_context *in, const char *username,
|
||||
|
||||
pdb_init_sam(&sam_pwent);
|
||||
|
||||
ret = NT_STATUS_IS_OK(in->pdb_getsampwnam (in, sam_pwent, username));
|
||||
ret = NT_STATUS_IS_OK(in->getsampwnam (in, sam_pwent, username));
|
||||
if (ret==False) {
|
||||
fprintf (stderr, "Username not found!\n");
|
||||
pdb_free_sam(&sam_pwent);
|
||||
@ -473,7 +377,7 @@ static int set_user_info (struct pdb_context *in, const char *username,
|
||||
pdb_set_bad_password_time(sam_pwent, 0, PDB_CHANGED);
|
||||
}
|
||||
|
||||
if (NT_STATUS_IS_OK(in->pdb_update_sam_account (in, sam_pwent)))
|
||||
if (NT_STATUS_IS_OK(in->update_sam_account (in, sam_pwent)))
|
||||
print_user_info (in, username, True, False);
|
||||
else {
|
||||
fprintf (stderr, "Unable to modify entry!\n");
|
||||
@ -487,7 +391,7 @@ static int set_user_info (struct pdb_context *in, const char *username,
|
||||
/*********************************************************
|
||||
Add New User
|
||||
**********************************************************/
|
||||
static int new_user (struct pdb_context *in, const char *username,
|
||||
static int new_user (struct pdb_methods *in, const char *username,
|
||||
const char *fullname, const char *homedir,
|
||||
const char *drive, const char *script,
|
||||
const char *profile, char *user_sid, char *group_sid)
|
||||
@ -568,7 +472,7 @@ static int new_user (struct pdb_context *in, const char *username,
|
||||
|
||||
pdb_set_acct_ctrl (sam_pwent, ACB_NORMAL, PDB_CHANGED);
|
||||
|
||||
if (NT_STATUS_IS_OK(in->pdb_add_sam_account (in, sam_pwent))) {
|
||||
if (NT_STATUS_IS_OK(in->add_sam_account (in, sam_pwent))) {
|
||||
print_user_info (in, username, True, False);
|
||||
} else {
|
||||
fprintf (stderr, "Unable to add user! (does it already exist?)\n");
|
||||
@ -583,7 +487,7 @@ static int new_user (struct pdb_context *in, const char *username,
|
||||
Add New Machine
|
||||
**********************************************************/
|
||||
|
||||
static int new_machine (struct pdb_context *in, const char *machine_in)
|
||||
static int new_machine (struct pdb_methods *in, const char *machine_in)
|
||||
{
|
||||
SAM_ACCOUNT *sam_pwent=NULL;
|
||||
fstring machinename;
|
||||
@ -625,7 +529,7 @@ static int new_machine (struct pdb_context *in, const char *machine_in)
|
||||
|
||||
pdb_set_group_sid_from_rid(sam_pwent, DOMAIN_GROUP_RID_COMPUTERS, PDB_CHANGED);
|
||||
|
||||
if (NT_STATUS_IS_OK(in->pdb_add_sam_account (in, sam_pwent))) {
|
||||
if (NT_STATUS_IS_OK(in->add_sam_account (in, sam_pwent))) {
|
||||
print_user_info (in, machineaccount, True, False);
|
||||
} else {
|
||||
fprintf (stderr, "Unable to add machine! (does it already exist?)\n");
|
||||
@ -640,7 +544,7 @@ static int new_machine (struct pdb_context *in, const char *machine_in)
|
||||
Delete user entry
|
||||
**********************************************************/
|
||||
|
||||
static int delete_user_entry (struct pdb_context *in, const char *username)
|
||||
static int delete_user_entry (struct pdb_methods *in, const char *username)
|
||||
{
|
||||
SAM_ACCOUNT *samaccount = NULL;
|
||||
|
||||
@ -648,12 +552,12 @@ static int delete_user_entry (struct pdb_context *in, const char *username)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(in->pdb_getsampwnam(in, samaccount, username))) {
|
||||
if (!NT_STATUS_IS_OK(in->getsampwnam(in, samaccount, username))) {
|
||||
fprintf (stderr, "user %s does not exist in the passdb\n", username);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(in->pdb_delete_sam_account (in, samaccount))) {
|
||||
if (!NT_STATUS_IS_OK(in->delete_sam_account (in, samaccount))) {
|
||||
fprintf (stderr, "Unable to delete user %s\n", username);
|
||||
return -1;
|
||||
}
|
||||
@ -664,7 +568,7 @@ static int delete_user_entry (struct pdb_context *in, const char *username)
|
||||
Delete machine entry
|
||||
**********************************************************/
|
||||
|
||||
static int delete_machine_entry (struct pdb_context *in, const char *machinename)
|
||||
static int delete_machine_entry (struct pdb_methods *in, const char *machinename)
|
||||
{
|
||||
fstring name;
|
||||
SAM_ACCOUNT *samaccount = NULL;
|
||||
@ -678,12 +582,12 @@ static int delete_machine_entry (struct pdb_context *in, const char *machinename
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(in->pdb_getsampwnam(in, samaccount, name))) {
|
||||
if (!NT_STATUS_IS_OK(in->getsampwnam(in, samaccount, name))) {
|
||||
fprintf (stderr, "machine %s does not exist in the passdb\n", name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!NT_STATUS_IS_OK(in->pdb_delete_sam_account (in, samaccount))) {
|
||||
if (!NT_STATUS_IS_OK(in->delete_sam_account (in, samaccount))) {
|
||||
fprintf (stderr, "Unable to delete machine %s\n", name);
|
||||
return -1;
|
||||
}
|
||||
@ -733,9 +637,7 @@ int main (int argc, char **argv)
|
||||
static char *pwd_must_change_time = NULL;
|
||||
static char *pwd_time_format = NULL;
|
||||
|
||||
struct pdb_context *bin;
|
||||
struct pdb_context *bout;
|
||||
struct pdb_context *bdef;
|
||||
struct pdb_methods *bdef = NULL;
|
||||
poptContext pc;
|
||||
struct poptOption long_options[] = {
|
||||
POPT_AUTOHELP
|
||||
@ -835,12 +737,12 @@ int main (int argc, char **argv)
|
||||
(pwd_must_change_time ? BIT_MUST_CHANGE: 0);
|
||||
|
||||
if (setparms & BIT_BACKEND) {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_context_string(&bdef, backend))) {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_method_name( &bdef, backend ))) {
|
||||
fprintf(stderr, "Can't initialize passdb backend.\n");
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_context_list(&bdef, lp_passdb_backend()))) {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_method_name(&bdef, lp_passdb_backend()))) {
|
||||
fprintf(stderr, "Can't initialize passdb backend.\n");
|
||||
return 1;
|
||||
}
|
||||
@ -894,41 +796,6 @@ int main (int argc, char **argv)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* import and export operations */
|
||||
if (((checkparms & BIT_IMPORT) || (checkparms & BIT_EXPORT))
|
||||
&& !(checkparms & ~(BIT_IMPORT +BIT_EXPORT +BIT_USER))) {
|
||||
if (backend_in) {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_context_string(&bin, backend_in))) {
|
||||
fprintf(stderr, "Can't initialize passdb backend.\n");
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
bin = bdef;
|
||||
}
|
||||
if (backend_out) {
|
||||
if (!NT_STATUS_IS_OK(make_pdb_context_string(&bout, backend_out))) {
|
||||
fprintf(stderr, "Can't initialize %s.\n", backend_out);
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
bout = bdef;
|
||||
}
|
||||
if (transfer_account_policies) {
|
||||
if (!(checkparms & BIT_USER))
|
||||
return export_account_policies(bin, bout);
|
||||
} else if (transfer_groups) {
|
||||
if (!(checkparms & BIT_USER))
|
||||
return export_groups(bin, bout);
|
||||
} else {
|
||||
if (checkparms & BIT_USER)
|
||||
return export_database(bin, bout,
|
||||
user_name);
|
||||
else
|
||||
return export_database(bin, bout,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* if BIT_USER is defined but nothing else then threat it as -l -u for compatibility */
|
||||
/* fake up BIT_LIST if only BIT_USER is defined */
|
||||
if ((checkparms & BIT_USER) && !(checkparms & ~BIT_USER)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user