Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Connexion sur un domaine AD avec AdsOpenObject

9 réponses
Avatar
Oriane
Bonjour,

Suposons que je sois sur un PC appartenant à un domaine NT4. Je veux me
connecter sur un client d'un domaine AD (les deux domaines ayant des
relations d'approbation bidirectionnelles).

Quel paramètre dois-je passer dans le script suivant:

' Determine DNS name of domain from RootDSE.
Set objRootDSE = GetObject("LDAP://???")
strDNSDomain = objRootDSE.Get("defaultNamingContext")

De fait j'utilise non pas un script mais un code C++:

...
hr = ADsOpenObject(L"RootDSE", NULL, NULL,
ADS_SECURE_AUTHENTICATION, IID_IADs, (void**)&pObject);

hr = ADsGetObject( L"LDAP://OU=Users,CN=toto",
IID_IADsContainer,(void**)&pCont);
...

Ce code marche très bien s'il est lancé sur le domaine AD. Mais comment le
faire fonctionner s'il est lancé depuis le domaine NT4 ? J'ai essayé de
remplacer RootDSE par le nom du domaine AD, le nom du contrôleur de domaine
AD... rien ne marche :-(

Merci d'avance pour vos pistes !

9 réponses

Avatar
Michaël THIBAUT [MVP]
Bonjour,

Qui dit ADSI sur NT4, dit installation de DSCLIENT:
http://www.microsoft.com/ntworkstation/downloads/Other/adclient.asp
--
Cordialement,
Michaël

MVP Windows Server - Directory Services
MCSA/MCSE 2003 Security
MCSA/MCSE 2003 Messaging

Mon blog:
http://mthibaut.over-blog.com

"Oriane" a écrit dans le message de
news:
Bonjour,

Suposons que je sois sur un PC appartenant à un domaine NT4. Je veux me
connecter sur un client d'un domaine AD (les deux domaines ayant des
relations d'approbation bidirectionnelles).

Quel paramètre dois-je passer dans le script suivant:

' Determine DNS name of domain from RootDSE.
Set objRootDSE = GetObject("LDAP://???")
strDNSDomain = objRootDSE.Get("defaultNamingContext")

De fait j'utilise non pas un script mais un code C++:

...
hr = ADsOpenObject(L"RootDSE", NULL, NULL,
ADS_SECURE_AUTHENTICATION, IID_IADs, (void**)&pObject);

hr = ADsGetObject( L"LDAP://OU=Users,CN=toto",
IID_IADsContainer,(void**)&pCont);
...

Ce code marche très bien s'il est lancé sur le domaine AD. Mais comment le
faire fonctionner s'il est lancé depuis le domaine NT4 ? J'ai essayé de
remplacer RootDSE par le nom du domaine AD, le nom du contrôleur de
domaine AD... rien ne marche :-(

Merci d'avance pour vos pistes !



Avatar
Oriane
Je n'ai pas dit ADSI sur NT4... C'est ADSI sur XP...

Merci qd même
Avatar
Gilles LAURENT
"Oriane" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| Suposons que je sois sur un PC appartenant à un domaine NT4. Je veux
| me connecter sur un client d'un domaine AD (les deux domaines ayant
| des relations d'approbation bidirectionnelles).
|
| Quel paramètre dois-je passer dans le script suivant:
|
| ' Determine DNS name of domain from RootDSE.
| Set objRootDSE = GetObject("LDAP://???")
| strDNSDomain = objRootDSE.Get("defaultNamingContext")
|
| De fait j'utilise non pas un script mais un code C++:
|
| ...
| hr = ADsOpenObject(L"RootDSE", NULL, NULL,
| ADS_SECURE_AUTHENTICATION, IID_IADs, (void**)&pObject);
|
| hr = ADsGetObject( L"LDAP://OU=Users,CN=toto",
| IID_IADsContainer,(void**)&pCont);
| ...
|
| Ce code marche très bien s'il est lancé sur le domaine AD. Mais
| comment le faire fonctionner s'il est lancé depuis le domaine NT4 ?
| J'ai essayé de remplacer RootDSE par le nom du domaine AD, le nom du
| contrôleur de domaine AD... rien ne marche :-(
|
| Merci d'avance pour vos pistes !

Lorsque vous utilisez la syntaxe "serverless binding" à partir d'un
domaine NT4, le provider ADSI recherche un contrôleur disponible sur
lequel se connecter. Il ne trouve que le PDC NT4 donc la connection
échoue car le PDC NT4 n'assure pas le service LDAP. Pour que cela
fonctionne, il est nécessaire "d'aider" le provider ADSI en lui
indiquant sur quelle machine/domaine distant(e) se connecter :

--- VBScript ---

Set oRootDse = GetObject ("LDAP://computer/RootDSE")
WScript.Echo oRootDse.Get ("DNSHostName")

--- VBScript ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Oriane
Bonjour,
"Gilles LAURENT" a écrit dans le message de news:
%
--- VBScript ---

Set oRootDse = GetObject ("LDAP://computer/RootDSE")
WScript.Echo oRootDse.Get ("DNSHostName")

--- VBScript ---
Voilà une réponse qu'elle est bonne :-) !!

Cela fonctionne. Mon problème c'est qu'en fait je n'utilise pas un script
mais ADSI via C++.
J'utilise la fonction OpenADsObject ("LDAP://RootDSE"). Je l'ai remplacée
par OpenADsObject ("LDAP://computer/RootDSE") ou computer est le nom du DC
AD. Mais là ca échoue...


Oriane

Avatar
Oriane
"Gilles LAURENT" a écrit dans le message de news:
%
--- VBScript ---

Set oRootDse = GetObject ("LDAP://computer/RootDSE")
WScript.Echo oRootDse.Get ("DNSHostName")

--- VBScript ---
Incidemment, si on remplace "computer" par "domaine", ca marche aussi...


Oriane

Avatar
Gilles LAURENT
"Oriane" a écrit dans le message de
news:%
| Bonjour,
| "Gilles LAURENT" a écrit dans le message de news:
| %
|| --- VBScript ---
||
|| Set oRootDse = GetObject ("LDAP://computer/RootDSE")
|| WScript.Echo oRootDse.Get ("DNSHostName")
||
|| --- VBScript ---
| Voilà une réponse qu'elle est bonne :-) !!
| Cela fonctionne. Mon problème c'est qu'en fait je n'utilise pas un
| script mais ADSI via C++.
| J'utilise la fonction OpenADsObject ("LDAP://RootDSE"). Je l'ai
| remplacée par OpenADsObject ("LDAP://computer/RootDSE") ou computer
| est le nom du DC AD. Mais là ca échoue...
|
|
| Oriane

Quel est le return code de la fonction AdsOpenObject ?

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Oriane
Erreur Win32 -
8007052e
Code d'erreur: -2146893044
Libelle: 8009030C: LdapErr: DSID-0C09043E, comment: AcceptSecurityContext
error,
data 0, vece
Fournisseur: LDAP Provider

Oui donc cela est lié au contexte de sécurité...

Bon ben grand merci, faut que je cherche de ce coté...

Oriane
Avatar
Oriane
Il est dommage quand même que l'un des rares endroits de mon code dans lequel je n'ai pas affiché le code d'erreur précis soit justement celui sur lequel je bute depuis maintenant 3 jours ou presque.

Il est fort heureux que je sois tombé sur toi car mes autres demandes dans les NG anglophones ou français n'ont rien donné.

Maintenant mon code marche sur une station XP d'un domaine NT4 dans le contexte d'un user admin du domaine AD (ou à défaut qui a les droits de création/modification sur les OU de AD que je veux manipuler).

Grâce à toi je vais sans doute pouvoir livrer mon évolution à mon bien aimé client vendredi :-))

Oriane
Avatar
Gilles LAURENT
"Oriane" a écrit dans le message de
news:u%
| Il est dommage quand même que l'un des rares endroits de mon code
| dans lequel je n'ai pas affiché le code d'erreur précis soit
| justement celui sur lequel je bute depuis maintenant 3 jours ou
| presque.
|
| Il est fort heureux que je sois tombé sur toi car mes autres demandes
| dans les NG anglophones ou français n'ont rien donné.
|
| Maintenant mon code marche sur une station XP d'un domaine NT4 dans
| le contexte d'un user admin du domaine AD (ou à défaut qui a les
| droits de création/modification sur les OU de AD que je veux
| manipuler).
|
| Grâce à toi je vais sans doute pouvoir livrer mon évolution à mon
| bien aimé client vendredi :-))
|
| Oriane

Merci pour ce retour ;-)

--
Gilles LAURENT
http://glsft.free.fr