计算机组织单位,获取OU(组织单位)名称,它是本地计算机属于使用C++

对于一个简单的WINAPI(不COM)的方式来存取权限在C或C的Active Directory ++看到Lightweight Directory Access Protocol

void AfficheErreurLdap(char *fonction, ULONG rc);

/*

*

* Fonction d'entrée du programme

*

*/

void main(int argc, char* argv[])

{

LDAP *pSessionLdap; // Pointeur vers la session LDAP

char *pHote; // Pointeur vers la chaîne représentant le nom de l'hôte

char *pUtilisateur; // Pointeur vers la chaîne représentant l'utilisateur

char *pMotDePasse; // Pointeur vers la chaîne représentant le mot de passe

char *pRacineLdap; // Pointeur vers la racine Ldap

ULONG rc; // Récupération du code de retour des appels

LDAPMessage *pResultat; // Pointeur vers le message résultat de la réquête LDAP

LDAPMessage *pEntree; // Utilisée lors du parcours du résultat pour l'affichage

char *pDN; // Pointeur vers le DN d'une entrée du résultat

char *pAttribut; // Pointeur vers la chaîne représentant l'attribut

BerElement *pBer = NULL;// "curseur" interne à l'API LDAP pour le parcours des elts

char **pValeurs; // Valeurs de l'attribut lors de l'affichage du résultat

int i; // Indice pour la parcours des valeurs d'attribut

/* Analyse des Paramètres de lancement et affichage d’un message d’erreur si incorrect */

if (argc != 5)

{

fprintf(stderr,"Syntaxe :\n\tex_cldap_1 Hote Utilisateur MotDePasse RacineLdap\n");

exit (1);

}

/* Récupération des paramètres des lancement */

pHote = argv[1];

pUtilisateur = argv[2];

pMotDePasse = argv[3];

pRacineLdap = argv[4];

/* Ouverture de la session LDAP et récupération du handle de session */

pSessionLdap = ldap_open(pHote, 389); /* 389 est le numéro de port standard LDAP */

if (pSessionLdap == NULL)

{

// En cas d'erreur : affichage du message d'erreur adéquat

perror("ldap_open");

exit(2);

}

printf("Ouverture de la session réalisée\n");

/* Authentification du client */

/* Pour l'exemple, l'authentification est faite en tant qu'anonyme */

rc = ldap_simple_bind_s(pSessionLdap, pUtilisateur, pMotDePasse);

if (rc != LDAP_SUCCESS)

{

// Erreur lors de l'authentification, on termine après affichage d'un message

AfficheErreurLdap("ldap_simple_bind_s", rc);

exit(3);

}

printf("Authentification réalisée\n");

/* */

/* Recherche des données dans l'annuaire */

/* */

rc = ldap_search_s(pSessionLdap, // Session LDAP

pRacineLdap, // Base de la recherche

LDAP_SCOPE_SUBTREE, // Sccpe : LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE

"(objectClass=*)", // Filtre de recherche

NULL, // Attributs que l'on souhaite visualiser

0, // Indique si l'on souhaite uniquement les types (1) ou

// Les attributs et les valeurs (0)

&pResultat) ; // Pointeur vers le résultat

if (rc != LDAP_SUCCESS)

{

// Erreur lors de la recherche, on termine après affichage du message d'erreur

AfficheErreurLdap("ldap_search_s", rc);

exit (4);

}

printf("Requête réalisée\n");

/* On va maintenant parcourir le résultat et afficher les couples */

/* attributs, valeurs */

pEntree = ldap_first_entry(pSessionLdap, pResultat);

while (pEntree != NULL)

{

// Récupération du DN, et affichage de celui-ci

pDN = ldap_get_dn(pSessionLdap, pEntree);

if (pDN != NULL)

{

printf("dn: %s\n", pDN);

// Libération de la mémoire allouée par l'API LDAP

ldap_memfree(pDN);

}

// Pour chaque attribut, on va lire le couple attribut, valeur

pAttribut = ldap_first_attribute(pSessionLdap, pEntree, &pBer);

while ( pAttribut != NULL)

{

// Récupération des valeurs associées à un attribut

pValeurs = ldap_get_values(pSessionLdap, pEntree, pAttribut);

if (pValeurs != NULL)

{

for (i = 0; pValeurs[i] != NULL; i++)

printf("%s: %s\n", pAttribut, pValeurs[i]);

// Libération des valeurs lues

ldap_value_free(pValeurs);

}

// Libération de la mémoire utilisée par l'attribut

ldap_memfree(pAttribut);

// Lecture de l'attribut suivant

pAttribut = ldap_next_attribute(pSessionLdap, pEntree, pBer);

}

// Passage à la ligne dans l'affichage

printf("\n\n");

// Récupération de l'entrée suivante de l'annuaire

pEntree = ldap_next_entry(pSessionLdap, pEntree);

}

// Libération du message de résultat

ldap_msgfree(pResultat);

/* Fin de la session LDAP */

ldap_unbind(pSessionLdap);

}

/*

*

* Fonction permettant d'afficher les erreurs des opérations LDAP

*

*

*/

void AfficheErreurLdap(char *fonction, ULONG rc)

{

fprintf(stderr,"Erreur LDAP dans la fonction '%s', Code : %ld (0x%xld)\n", fonction, rc,rc);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值