C语言Ou,使用C获取本地计算机所属的OU(组织单位)名称

该博客详细介绍了如何使用C或C++通过轻量级目录访问协议(LDAP)进行非COM方式访问ActiveDirectory。首先,它演示了如何打开和建立LDAP会话,然后进行匿名身份验证。接着,执行搜索操作,查找特定目录下的所有对象。最后,遍历搜索结果,显示每个条目的属性和值。博客中包含了一个完整的示例代码,用于理解LDAP操作流程。
摘要由CSDN通过智能技术生成

有关以C或C访问Active Directory的简单WINAPI(非COM)方式,请参阅

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值