r2444: Based on jmcd's patch, implement special lists for the ldap user attributes to
authorVolker Lendecke <vlendec@samba.org>
Mon, 20 Sep 2004 11:02:14 +0000 (11:02 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:52:43 +0000 (10:52 -0500)
delete.

Richard, IMHO this is the better solution to the problem you currently
have. Please review.

Thanks,

Volker

source/include/smbldap.h
source/lib/smbldap.c
source/passdb/pdb_ldap.c

index 953937fb75d1aead91f2e4cde9a4fcd6bfc173c6..58502ec34e759632682dbbed3c4411ba6b668bee 100644 (file)
@@ -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[];
index c4abc8cf1ab3fa9c18e3b05ce325de92fb308364..57aab70a5ba1859515f3e3d2d3bb820d506e71b6 100644 (file)
@@ -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[] = {
index 4f9140d3a854e0cee956fdda1cfb71acb41a3866..35dbf4f0dc954412cd24deb60718275d46e22f00 100644 (file)
@@ -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)  {