PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Aide sur les Fonctions LDAP
Aide sur les Fonctions LDAP
Débuté par Greg, 10 jan. 2006 13:31 - 7 réponses
Posté le 10 janvier 2006 - 13:31
quel est la commande qui permet de lister tous les ordinateurs du domaine et les serveurs faut il utiliser les assemblages.NET ou alors utiliser les fonctions LDAP si oui laquelle c'est dommage qu'il ny ai pas d aide dessus
Posté le 10 janvier 2006 - 14:34
Cela passe par un filtre. Il est bon, avant d'utiliser les fonctions du protocole LDAP de comprendre comment est organisé l'active directory. Pour cela je te conseille l'utilitaire "ADSI Edit" et de consulter les liens suivants :

Classes : http://msdn.microsoft.com/library/default.asp…

Attributs : http://msdn.microsoft.com/library/default.asp…

Fonctions : http://msdn.microsoft.com/library/default.asp…

Ldap : http://msdn.microsoft.com/library/default.asp…

Filtre : http://msdn.microsoft.com/library/default.asp…

Pour les oridnateurs c'est la Classe "computer" donc tu dois filtrer avec : (objectclass=computer)
Posté le 10 janvier 2006 - 14:47
Petits suppléménts "gratuits"... n'utilise pas LDAP mais peuvent te servir

1° CONNAITRE LE NOM DU DOMAINE
--------------------------------------------------------------
FUNCTION LDAPGetDomainName()
NomDuDomaine est une chaîne = ""
nCONTROLLER_INFO est un entier sans signe sur 8 octets
sDomainControllerName est une chaîne ASCIIZ sur 1024 =""
dwRes est un entier sur 8 octets
i, ErrorCode sont des entiers

WHEN EXCEPTION IN
ErrorCode = API(NomDllNet, "DsGetDcNameA", 0x00, 0x00, 0x00, 0x00, 0 , &nCONTROLLER_INFO)
IF ErrorCode=ERROR_SUCCESS THEN
Transfert(&dwRes, nCONTROLLER_INFO, 4)
Transfert(&sDomainControllerName, dwRes, 1023)
ELSE
RENVOYER ""
END
DO
RENVOYER ""
END
i = Position(sDomainControllerName,".")
IF i>0 THEN
NomDuDomaine = sDomainControllerName[[ i+1 A ]]
ELSE
NomDuDomaine = ""
END

RENVOYER NomDuDomaine

2° CONNAITRE LES SERVEURS D'UN DOMAINE (Windows)
--------------------------------------------------------------
FUNCTION LDAPGetAllDomainControler()
DomainName est une chaîne ASCIIZ sur 512
Retry est un entier
RetGetDcContext est un entier = 0
RetFunction est un entier = 0
SockAddressCount, SockAddresses, DnsHostName sont des entier sans signe sur 8 octets
SockAddressCount=0x00; SockAddresses=0x00; DnsHostName=0x00
ServeurName est une chaîne ASCIIZ sur 256
ListeDesServeur est une chaîne = ""

Retry = 0
DomainName = LDAPGetDomainName()
WHILE DomainName="" AND Retry<10
DomainName = LDAPGetDomainName()
Retry++
END
IF DomainName="" THEN RENVOYER ""

RetFunction = API(NomDllNet, "DsGetDcOpen", &DomainName, 0x2, 0x00, 0x00, 0x00, 0, &RetGetDcContext )
IF RetFunction = 0 THEN
WHILE RetFunction = 0
RetFunction = API(NomDllNet,"DsGetDcNext", RetGetDcContext, &SockAddressCount, &SockAddresses, &DnsHostName)
IF RetFunction = 0 THEN
IF SockAddressCount>0 THEN
Transfert(&ServeurName,DnsHostName,255)
IF ListeDesServeur<>"" THEN ListeDesServeur += TAB
ListeDesServeur += Remplace(ServeurName,"."+DomainName,"")
END
END
END
API(NomDllNet, "DsGetDcClose",RetGetDcContext)
END

RENVOYER ListeDesServeur


3° CONNAITRE LE PDC DU DOMAINE
--------------------------------------------------------------
// Renvoie le nom du PDC du domaine

FUNCTION LDAPGetNameOfPDC()
Retry est un entier
Domain est une chaîne ASCIIZ sur 256
sDomainControllerName est une chaîne ASCIIZ sur 1024 =""
nCONTROLLER_INFO est un entier sans signe sur 8 octets
dwRes est un entier sur 8 octets

Retry = 0
Domain = LDAPGetDomainName()
WHILE Domain="" AND Retry<10
Domain = LDAPGetDomainName()
Retry++
END
IF Domain="" THEN RENVOYER ""

WHEN EXCEPTION IN
API(NomDllNet, "DsGetDcNameA", 0x00, &Domain, 0x00, 0x00, DS_PDC_REQUIRED+DS_RETURN_FLAT_NAME , &nCONTROLLER_INFO)
Transfert(&dwRes, nCONTROLLER_INFO, 4)
Transfert(&sDomainControllerName, dwRes, 1023)
DO
RENVOYER ""
END

API(NomDllNet, "NetApiBufferFree", &nCONTROLLER_INFO)
sDomainControllerName = Remplace(sDomainControllerName,"\","")

RENVOYER sDomainControllerName
Posté le 10 janvier 2006 - 15:00
okkk je vais regarder tout ca mercii bcp pouvons nous prendre contact ensemble que vous m expliquiez certaines choses parce que la je nage un peuuu je ne c pas utiliser les assemblages.NET dans windev et plein de petite choses merci beaucoup de votre aide GREG
Posté le 10 janvier 2006 - 15:51
OUP'S petit oubli : les constantes ( toutes ne sont pas utiles car c'est une version de ldap en 7.5 donc j'avais tout écrit maintenant c'est en standard dans WD10)
CONSTANT

LDAP_USER = "" // Mettre ici un login de type administrateur
LDAP_PASSWORD = "" // Mettre ici son mot de passe pas trouvé encore d'autre méthode hélas

NomDllLdap = "wldap32.dll" // DLL utilisée pour LDAP
NomDllNet = "Netapi32.dll" // DLL utilisée pour les serveur

LDAP_POR_NUMBER = 389 // Port utilisé normalement par le protocol LDAP

SEC_WINNT_AUTH_IDENTITY_ANSI = 0x01
LDAP_SCOPE_SUBTREE = 0x02
LDAP_AUTH_NEGOTIATE = 0x0486

LDAP_MOD_ADD = 0x00
LDAP_MOD_DELETE = 0x01
LDAP_MOD_REPLACE = 0x02

WSADESCRIPTION_LEN = 256
WSASYSSTATUS_LEN = 256
WSADESCRIPTION_LEN_1 = WSADESCRIPTION_LEN+1
WSASYSSTATUS_LEN_1 = WSASYSSTATUS_LEN+1
SOCKET_ERROR = -1
FRANCAIS = 5
ANGLAIS = 3
NEERLANDAIS = 12
LDAP_ATTRIBUT_TEXTE = 0
LDAP_ATTRIBUT_BINAIRE = 1

// LES CODES DE RETOUR DES APPELS A LA DLL : wLDAP32.dll
LDAP_SUCCESS = 0x00
LDAP_OPERATIONS_ERROR = 0x01
LDAP_PROTOCOL_ERROR = 0x02
LDAP_TIMELIMIT_EXCEEDED = 0x03
LDAP_SIZELIMIT_EXCEEDED = 0x04
LDAP_COMPARE_FALSE = 0x05
LDAP_COMPARE_TRUE = 0x06
LDAP_AUTH_METHOD_NOT_SUPPORTED = 0x07
LDAP_STRONG_AUTH_REQUIRED = 0x08
LDAP_REFERRAL_V2 = 0x09
LDAP_PARTIAL_RESULTS = 0x09
LDAP_REFERRAL = 0x0a
LDAP_ADMIN_LIMIT_EXCEEDED = 0x0b
LDAP_UNAVAILABLE_CRIT_EXTENSION = 0x0c
LDAP_CONFIDENTIALITY_REQUIRED = 0x0d
LDAP_SASL_BIND_IN_PROGRESS = 0x0e
LDAP_NO_SUCH_ATTRIBUTE = 0x10
LDAP_UNDEFINED_TYPE = 0x11
LDAP_INAPPROPRIATE_MATCHING = 0x12
LDAP_CONSTRAINT_VIOLATION = 0x13
LDAP_ATTRIBUTE_OR_VALUE_EXISTS = 0x14
LDAP_INVALID_SYNTAX = 0x15
LDAP_NO_SUCH_OBJECT = 0x20
LDAP_ALIAS_PROBLEM = 0x21
LDAP_INVALID_DN_SYNTAX = 0x22
LDAP_IS_LEAF = 0x23
LDAP_ALIAS_DEREF_PROBLEM = 0x24
LDAP_INAPPROPRIATE_AUTH = 0x30
LDAP_INVALID_CREDENTIALS = 0x31
LDAP_INSUFFICIENT_RIGHTS = 0x32
LDAP_BUSY = 0x33
LDAP_UNAVAILABLE = 0x34
LDAP_UNWILLING_TO_PERFORM = 0x35
LDAP_LOOP_DETECT = 0x36
LDAP_SORT_CONTROL_MISSING = 0x3C
LDAP_OFFSET_RANGE_ERROR = 0x3D
LDAP_NAMING_VIOLATION = 0x40
LDAP_OBJECT_CLASS_VIOLATION = 0x41
LDAP_NOT_ALLOWED_ON_NONLEAF = 0x42
LDAP_NOT_ALLOWED_ON_RDN = 0x43
LDAP_ALREADY_EXISTS = 0x44
LDAP_NO_OBJECT_CLASS_MODS = 0x45
LDAP_RESULTS_TOO_LARGE = 0x46
LDAP_AFFECTS_MULTIPLE_DSAS = 0x47
LDAP_OTHER = 0x50
LDAP_SERVER_DOWN = 0x51
LDAP_LOCAL_ERROR = 0x52
LDAP_ENCODING_ERROR = 0x53
LDAP_DECODING_ERROR = 0x54
LDAP_TIMEOUT = 0x55
LDAP_AUTH_UNKNOWN = 0x56
LDAP_FILTER_ERROR = 0x57
LDAP_USER_CANCELLED = 0x58
LDAP_PARAM_ERROR = 0x59
LDAP_NO_MEMORY = 0x5a
LDAP_CONNECT_ERROR = 0x5b
LDAP_NOT_SUPPORTED = 0x5c
LDAP_NO_RESULTS_RETURNED = 0x5e
LDAP_CONTROL_NOT_FOUND = 0x5d
LDAP_MORE_RESULTS_TO_RETURN = 0x5f
LDAP_CLIENT_LOOP = 0x60
LDAP_REFERRAL_LIMIT_EXCEEDED = 0x61

ERROR_SUCCESS = 0
ERROR_INVALID_DOMAINNAME = 1212
ERROR_INVALID_FLAG = 1004
ERROR_NOT_ENOUGH_MEMORY = 8
ERROR_NO_SUCH_DOMAIN = 1355

DS_AVOID_SELF = 0x00004000
DS_BACKGROUND_ONLY = 0x00000100
DS_DIRECTORY_SERVICE_PREFERRED = 0x00000020
DS_DIRECTORY_SERVICE_REQUIRED = 0x00000010
DS_FORCE_REDISCOVERY = 0x00000001
DS_GC_SERVER_REQUIRED = 0x00000040
DS_GOOD_TIMESERV_PREFERRED = 0x00002000
DS_IP_REQUIRED = 0x00000200
DS_IS_DNS_NAME = 0x00020000
DS_IS_FLAT_NAME = 0x00010000
DS_KDC_REQUIRED = 0x00000400
DS_ONLY_LDAP_NEEDED = 0x00008000
DS_PDC_REQUIRED = 0x00000080
DS_RETURN_DNS_NAME = 0x40000000
DS_RETURN_FLAT_NAME = 0x80000000
DS_TIMESERV_REQUIRED = 0x00000800
DS_WRITABLE_REQUIRED = 0x00001000
END

// Structure utilisée pour s'autentifier sur un serveur
struct_SEC_WINNT_AUTH_IDENTITY est une structure
User est un entier // le login
UserLength est un entier sans signe // longueur du champ "login"
Domain est un entier // le nom du domaine
DomainLength est un entier sans signe // la logueur du champ "Domain"
Password est un entier // le mot de passe du login
PasswordLength est un entier sans signe // la longueur du champ "Password"
Flags est un entier sans signe
END
Posté le 10 janvier 2006 - 15:51
ok pas de soucis
Posté le 10 janvier 2006 - 16:00
je dois etre complètement a la rue parce ke je comprend rien du tout a ce que tu m'as envoyé j essaie de comprendre c'est pas facile ...
Posté le 10 janvier 2006 - 16:16
okkk avez MSN par hazard ?? plus simple pour communiquer sinon mon adresse c celle la

thepsychokillah@msn.com voila merciiii pour tout c'est vraiment cool