TLDAPSearch - Exemples
| TLDAPSearch = class (TObject) | Interface de TLDAPSearch | Exemples de TLDAPSearch |
Exemple de programme permettant de mettre à jour la liste des utilisateurs à partir des données contenues dans le LDAP.
Dans cet exemple, les utilisateurs sont créés si ils n'existent pas dans Qubes
var ldapSearch : TLDAPSearch;
var ldapEntryList : TLDAPEntryList;
var ldapEntry : TLDAPEntry;
var i : Integer;
var userLogin, userFirstName, userLastName : String;
var user : TUser;
// Connection au LDAP de l'entreprise
ldapSearch:=TLDAPSearch.connect('zeus',389, 'CN=Qubes Account,CN=Users,DC=CIT,DC=local', 'shaka');
ldapEntryList:=TLDAPEntryList.Create;
// Recherche dans le LDAP de l'entreprise des utilisateurs (objectClass=person)
ldapSearch.Search(ldapEntryList, 'OU=CIT,DC=cit,DC=local', '(objectClass=person)');
for i:=0 to ldapEntryList.Count-1 do begin
ldapEntry := ldapEntryList.GetITEM(i);
userLogin:=ldapEntry.AttributeValueByName('sAMAccountName', 0);
userFirstName:=ldapEntry.AttributeValueByName('givenName', 0);
userLastName:=ldapEntry.AttributeValueByName('sn', 0);
if not UserExists(userLogin) then begin
// Création d'un nouvel utilisateur (LOGIN doit être inférieur à 12 caractères)
if Length(userLogin)<=12 then
user:=TUser.CreateNew(userLogin, userLastName, userFirstName)
else begin
// LOGIN trop long, ignoré
continue;
end;
end else begin
// Mise à jour de l'utilisateur
user:=TUser.Connect(userLogin);
user.FirstName:=userFirstName;
user.LastName:=userLastName;
end;
user.ContractType:='CDI'; //CDI,CDD,Intérimaire,Prestataire,Contrat de Qualification,Stagiaire
user.ManagerLogin:='pr';
user.MainSite:='ECL';
user.MainService:='COM';
// Ajout d'une fonction existante dans le LDAP non renseignée dans Qubes
if not user.HasSiteServiceFunction('ECL', 'COM', 'IC') then
user.AddFunction('IC', 'ECL', 'COM');
// Suppression d'une fonction renseignée dans Qubes qui n'existe pas dans le LDAP
if user.HasSiteServiceFunction('ECL', 'COM', 'SEC') then
user.RemoveFunction('SEC', 'ECL', 'COM');
user.SetTypeMessagerie('SMTP'); // SMTP,QUBES
user.SetSMTPMail(userFirstName+'.'+userLastName+'@acme.net');
user.SetLDAPLogin(userLogin);
user.SetUseLDAPAuth(True);
user.SetADSPath('-');
end;
var ldapEntryList : TLDAPEntryList;
var ldapEntry : TLDAPEntry;
var i : Integer;
var userLogin, userFirstName, userLastName : String;
var user : TUser;
// Connection au LDAP de l'entreprise
ldapSearch:=TLDAPSearch.connect('zeus',389, 'CN=Qubes Account,CN=Users,DC=CIT,DC=local', 'shaka');
ldapEntryList:=TLDAPEntryList.Create;
// Recherche dans le LDAP de l'entreprise des utilisateurs (objectClass=person)
ldapSearch.Search(ldapEntryList, 'OU=CIT,DC=cit,DC=local', '(objectClass=person)');
for i:=0 to ldapEntryList.Count-1 do begin
ldapEntry := ldapEntryList.GetITEM(i);
userLogin:=ldapEntry.AttributeValueByName('sAMAccountName', 0);
userFirstName:=ldapEntry.AttributeValueByName('givenName', 0);
userLastName:=ldapEntry.AttributeValueByName('sn', 0);
if not UserExists(userLogin) then begin
// Création d'un nouvel utilisateur (LOGIN doit être inférieur à 12 caractères)
if Length(userLogin)<=12 then
user:=TUser.CreateNew(userLogin, userLastName, userFirstName)
else begin
// LOGIN trop long, ignoré
continue;
end;
end else begin
// Mise à jour de l'utilisateur
user:=TUser.Connect(userLogin);
user.FirstName:=userFirstName;
user.LastName:=userLastName;
end;
user.ContractType:='CDI'; //CDI,CDD,Intérimaire,Prestataire,Contrat de Qualification,Stagiaire
user.ManagerLogin:='pr';
user.MainSite:='ECL';
user.MainService:='COM';
// Ajout d'une fonction existante dans le LDAP non renseignée dans Qubes
if not user.HasSiteServiceFunction('ECL', 'COM', 'IC') then
user.AddFunction('IC', 'ECL', 'COM');
// Suppression d'une fonction renseignée dans Qubes qui n'existe pas dans le LDAP
if user.HasSiteServiceFunction('ECL', 'COM', 'SEC') then
user.RemoveFunction('SEC', 'ECL', 'COM');
user.SetTypeMessagerie('SMTP'); // SMTP,QUBES
user.SetSMTPMail(userFirstName+'.'+userLastName+'@acme.net');
user.SetLDAPLogin(userLogin);
user.SetUseLDAPAuth(True);
user.SetADSPath('-');
end;
Cet exemple permet de consulter la liste des informations contenues dans le LDAP pour les utilisateurs du domaine CIT.
var lds : TLDAPSearch;
var lst : TLDAPEntryList;
var ent : TLDAPEntry;
var s : TStrings;
var i, j : Integer;
s := TStrings.create;
lds := TLDAPSearch.connect('zeus',389, 'CN=Qubes Account,CN=Users,DC=CIT,DC=local', '*****'); // Remplacer ***** par le mot de passe de l'utilisateur
lst := TLDAPEntryList.create;
lds.Search(lst, 'OU=CIT,DC=cit,DC=local', '(objectClass=*)');
for i := 0 to lst.count-1 do begin
ent := lst.GetITEM(i);
s.Add('*****************');
s.add(ent.getDN);
for j := 0 to ent.AttributesCount-1 do begin
s.add(ent.AttributeName(j)+'='+ent.AttributeValueByIndex(j,0));
end;
s.Add('*****************');
end;
Print(s.text);
var lst : TLDAPEntryList;
var ent : TLDAPEntry;
var s : TStrings;
var i, j : Integer;
s := TStrings.create;
lds := TLDAPSearch.connect('zeus',389, 'CN=Qubes Account,CN=Users,DC=CIT,DC=local', '*****'); // Remplacer ***** par le mot de passe de l'utilisateur
lst := TLDAPEntryList.create;
lds.Search(lst, 'OU=CIT,DC=cit,DC=local', '(objectClass=*)');
for i := 0 to lst.count-1 do begin
ent := lst.GetITEM(i);
s.Add('*****************');
s.add(ent.getDN);
for j := 0 to ent.AttributesCount-1 do begin
s.add(ent.AttributeName(j)+'='+ent.AttributeValueByIndex(j,0));
end;
s.Add('*****************');
end;
Print(s.text);
Exemple de données que l'on peut ainsi retrouver en interrogeant l'annuaire LDAP (Attention, l'utilisation de certains champs peut varier d'un annuaire LDAP à l'autre) :
objectClass=top cn=Georges DUPONT sn=DUPONT givenName=Georges distinguishedName=CN=Georges DUPONT,OU=CIT,DC=CIT,DC=local instanceType=4 whenCreated=20080905134118.0Z whenChanged=20090717074759.0Z displayName=Georges DUPONT uSNCreated=1333892 memberOf=CN=CIT,OU=CIT,DC=CIT,DC=local uSNChanged=1530937 name=Georges DUPONT userAccountControl=512 badPwdCount=0 codePage=0 countryCode=0 badPasswordTime=0 lastLogoff=0 lastLogon=0 pwdLastSet=128650956794218750 primaryGroupID=513 accountExpires=9223372036854775807 logonCount=0 sAMAccountName=gdupont sAMAccountType=805306368 [email protected] objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=CIT,DC=local dSCorePropagationData=20090528103736.0Z lastLogonTimestamp=128922904791875000
La fonction suivante permet de décoder les champs active directory suivant : pwdLastSet, accountExpires, LastLogon, LastLogonTimestamp and LastPwdSet
function ConvertADLDAPDate(aMSLDAPdate : integer) : Float; var epoch : integer; begin epoch := (aMSLDAPdate div 10000000) - 11644473600; result := (epoch/86400)+25569; end;