svn commit: samba r2444 - in branches/SAMBA_3_0/source: include lib passdb

vlendec at samba.org vlendec at samba.org
Mon Sep 20 11:02:18 GMT 2004


Author: vlendec
Date: 2004-09-20 11:02:14 +0000 (Mon, 20 Sep 2004)
New Revision: 2444

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_3_0/source&rev=2444&nolog=1

Log:
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

Modified:
   branches/SAMBA_3_0/source/include/smbldap.h
   branches/SAMBA_3_0/source/lib/smbldap.c
   branches/SAMBA_3_0/source/passdb/pdb_ldap.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/smbldap.h
===================================================================
--- branches/SAMBA_3_0/source/include/smbldap.h	2004-09-20 10:40:11 UTC (rev 2443)
+++ branches/SAMBA_3_0/source/include/smbldap.h	2004-09-20 11:02:14 UTC (rev 2444)
@@ -107,7 +107,9 @@
 /* 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[];

Modified: branches/SAMBA_3_0/source/lib/smbldap.c
===================================================================
--- branches/SAMBA_3_0/source/lib/smbldap.c	2004-09-20 10:40:11 UTC (rev 2443)
+++ branches/SAMBA_3_0/source/lib/smbldap.c	2004-09-20 11:02:14 UTC (rev 2444)
@@ -70,6 +70,28 @@
 	{ 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 @@
 	{ 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[] = {

Modified: branches/SAMBA_3_0/source/passdb/pdb_ldap.c
===================================================================
--- branches/SAMBA_3_0/source/passdb/pdb_ldap.c	2004-09-20 10:40:11 UTC (rev 2443)
+++ branches/SAMBA_3_0/source/passdb/pdb_ldap.c	2004-09-20 11:02:14 UTC (rev 2444)
@@ -148,6 +148,27 @@
 	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 @@
 		   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 @@
 
 	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)  {



More information about the samba-cvs mailing list