mirror of
https://github.com/samba-team/samba.git
synced 2025-07-30 19:42:05 +03:00
r2444: Based on jmcd's patch, implement special lists for the ldap user attributes to
delete.
Richard, IMHO this is the better solution to the problem you currently
have. Please review.
Thanks,
Volker
(This used to be commit 6957d6a892
)
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
5bfd4d2007
commit
ec62d5a968
@ -107,7 +107,9 @@ typedef struct _attrib_map_entry {
|
||||
/* structures */
|
||||
|
||||
extern ATTRIB_MAP_ENTRY attrib_map_v22[];
|
||||
extern ATTRIB_MAP_ENTRY attrib_map_to_delete_v22[];
|
||||
extern ATTRIB_MAP_ENTRY attrib_map_v30[];
|
||||
extern ATTRIB_MAP_ENTRY attrib_map_to_delete_v30[];
|
||||
extern ATTRIB_MAP_ENTRY dominfo_attr_list[];
|
||||
extern ATTRIB_MAP_ENTRY groupmap_attr_list[];
|
||||
extern ATTRIB_MAP_ENTRY groupmap_attr_list_to_delete[];
|
||||
|
@ -70,6 +70,28 @@ ATTRIB_MAP_ENTRY attrib_map_v22[] = {
|
||||
{ LDAP_ATTR_LIST_END, NULL }
|
||||
};
|
||||
|
||||
ATTRIB_MAP_ENTRY attrib_map_to_delete_v22[] = {
|
||||
{ LDAP_ATTR_PWD_LAST_SET, "pwdLastSet" },
|
||||
{ LDAP_ATTR_PWD_CAN_CHANGE, "pwdCanChange" },
|
||||
{ LDAP_ATTR_PWD_MUST_CHANGE, "pwdMustChange" },
|
||||
{ LDAP_ATTR_LOGON_TIME, "logonTime" },
|
||||
{ LDAP_ATTR_LOGOFF_TIME, "logoffTime" },
|
||||
{ LDAP_ATTR_KICKOFF_TIME, "kickoffTime" },
|
||||
{ LDAP_ATTR_DISPLAY_NAME, "displayName" },
|
||||
{ LDAP_ATTR_HOME_PATH, "smbHome" },
|
||||
{ LDAP_ATTR_HOME_DRIVE, "homeDrives" },
|
||||
{ LDAP_ATTR_LOGON_SCRIPT, "scriptPath" },
|
||||
{ LDAP_ATTR_PROFILE_PATH, "profilePath" },
|
||||
{ LDAP_ATTR_USER_WKS, "userWorkstations"},
|
||||
{ LDAP_ATTR_USER_RID, "rid" },
|
||||
{ LDAP_ATTR_PRIMARY_GROUP_RID, "primaryGroupID"},
|
||||
{ LDAP_ATTR_LMPW, "lmPassword" },
|
||||
{ LDAP_ATTR_NTPW, "ntPassword" },
|
||||
{ LDAP_ATTR_DOMAIN, "domain" },
|
||||
{ LDAP_ATTR_ACB_INFO, "acctFlags" },
|
||||
{ LDAP_ATTR_LIST_END, NULL }
|
||||
};
|
||||
|
||||
/* attributes used by Samba 3.0's sambaSamAccount */
|
||||
|
||||
ATTRIB_MAP_ENTRY attrib_map_v30[] = {
|
||||
@ -107,6 +129,32 @@ ATTRIB_MAP_ENTRY attrib_map_v30[] = {
|
||||
{ LDAP_ATTR_LIST_END, NULL }
|
||||
};
|
||||
|
||||
ATTRIB_MAP_ENTRY attrib_map_to_delete_v30[] = {
|
||||
{ LDAP_ATTR_PWD_LAST_SET, "sambaPwdLastSet" },
|
||||
{ LDAP_ATTR_PWD_CAN_CHANGE, "sambaPwdCanChange" },
|
||||
{ LDAP_ATTR_PWD_MUST_CHANGE, "sambaPwdMustChange" },
|
||||
{ LDAP_ATTR_LOGON_TIME, "sambaLogonTime" },
|
||||
{ LDAP_ATTR_LOGOFF_TIME, "sambaLogoffTime" },
|
||||
{ LDAP_ATTR_KICKOFF_TIME, "sambaKickoffTime" },
|
||||
{ LDAP_ATTR_HOME_DRIVE, "sambaHomeDrive" },
|
||||
{ LDAP_ATTR_HOME_PATH, "sambaHomePath" },
|
||||
{ LDAP_ATTR_LOGON_SCRIPT, "sambaLogonScript" },
|
||||
{ LDAP_ATTR_PROFILE_PATH, "sambaProfilePath" },
|
||||
{ LDAP_ATTR_USER_WKS, "sambaUserWorkstations" },
|
||||
{ LDAP_ATTR_USER_SID, LDAP_ATTRIBUTE_SID },
|
||||
{ LDAP_ATTR_PRIMARY_GROUP_SID, "sambaPrimaryGroupSID" },
|
||||
{ LDAP_ATTR_LMPW, "sambaLMPassword" },
|
||||
{ LDAP_ATTR_NTPW, "sambaNTPassword" },
|
||||
{ LDAP_ATTR_DOMAIN, "sambaDomainName" },
|
||||
{ LDAP_ATTR_ACB_INFO, "sambaAcctFlags" },
|
||||
{ LDAP_ATTR_MUNGED_DIAL, "sambaMungedDial" },
|
||||
{ LDAP_ATTR_BAD_PASSWORD_COUNT, "sambaBadPasswordCount" },
|
||||
{ LDAP_ATTR_BAD_PASSWORD_TIME, "sambaBadPasswordTime" },
|
||||
{ LDAP_ATTR_PWD_HISTORY, "sambaPasswordHistory" },
|
||||
{ LDAP_ATTR_LOGON_HOURS, "sambaLogonHours" },
|
||||
{ LDAP_ATTR_LIST_END, NULL }
|
||||
};
|
||||
|
||||
/* attributes used for allocating RIDs */
|
||||
|
||||
ATTRIB_MAP_ENTRY dominfo_attr_list[] = {
|
||||
|
@ -148,6 +148,27 @@ static char** get_userattr_list( int schema_ver )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
Return the list of attribute names to delete given a user schema version.
|
||||
**************************************************************************/
|
||||
|
||||
static char** get_userattr_delete_list( int schema_ver )
|
||||
{
|
||||
switch ( schema_ver ) {
|
||||
case SCHEMAVER_SAMBAACCOUNT:
|
||||
return get_attr_list( attrib_map_to_delete_v22 );
|
||||
|
||||
case SCHEMAVER_SAMBASAMACCOUNT:
|
||||
return get_attr_list( attrib_map_to_delete_v30 );
|
||||
default:
|
||||
DEBUG(0,("get_userattr_list: unknown schema version specified!\n"));
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
Generate the LDAP search filter for the objectclass based on the
|
||||
version of the schema we are using.
|
||||
@ -299,11 +320,11 @@ static NTSTATUS ldapsam_delete_entry(struct ldapsam_privates *ldap_state,
|
||||
really exist. */
|
||||
|
||||
for (attrib = attrs; *attrib != NULL; attrib++) {
|
||||
if ((StrCaseCmp(*attrib, name) == 0) &&
|
||||
!(StrCaseCmp(*attrib,
|
||||
get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_MOD_TIMESTAMP)))) {
|
||||
DEBUG(10, ("ldapsam_delete_entry: deleting attribute %s\n", name));
|
||||
smbldap_set_mod(&mods, LDAP_MOD_DELETE, name, NULL);
|
||||
if (strequal(*attrib, name)) {
|
||||
DEBUG(10, ("ldapsam_delete_entry: deleting "
|
||||
"attribute %s\n", name));
|
||||
smbldap_set_mod(&mods, LDAP_MOD_DELETE, name,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1520,7 +1541,7 @@ static NTSTATUS ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_A
|
||||
|
||||
DEBUG (3, ("ldapsam_delete_sam_account: Deleting user %s from LDAP.\n", sname));
|
||||
|
||||
attr_list= get_userattr_list( ldap_state->schema_ver );
|
||||
attr_list= get_userattr_delete_list( ldap_state->schema_ver );
|
||||
rc = ldapsam_search_suffix_by_name(ldap_state, sname, &result, attr_list);
|
||||
|
||||
if (rc != LDAP_SUCCESS) {
|
||||
|
Reference in New Issue
Block a user