2011-02-28 4 views
0

Je suis coincé avec le formatage d'une requête LDAP sur mon AD. Il semble que le caractère '+' gâche ma vie.Caractères non valides de requête LDAP

la requête suivante fonctionne bien pour moi:

//C# AD lookup 

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=group name that works,OU=Groups,DC=myDomain,DC=us"); 

mais quand je tente de trouver un groupe qui a le signe « + » en elle:

//C# AD Lookup failure with '+' in CN 

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=name+ thatFails,OU=Groups,DC=myDomain,DC=us"); 

Je reçois un « non valide La syntaxe dn a été spécifiée 'exception.

J'ai passé un tas de noms de groupes valides avec toutes sortes de caractères 'spéciaux' tels que '_' et '&' qui fonctionnent. il semble que le caractère «+» est ce qui cause mon chagrin. Comment puis-je formater mon CN correctement pour rendre ma requête valide?

EDIT

comme le suggère, je me suis évadé du char '+'. Cela n'a malheureusement pas aidé. ci-dessous est mon format actuel ldap:

LDAP://mydomain/cn=_bigGroup\+ management office,OU=Groups,DC=myDomain,DC=us 
+0

Avez-vous utilisé des barres obliques inverses doubles dans votre code ou utilisez-vous l'opérateur littéral? par exemple. new DirectoryEntry ("LDAP: // mondomaine/cn = _bigGroup \\ + bureau de gestion, OU = Groupes, DC = myDomain, DC = us") ou nouveau DirectoryEntry (@ "LDAP: // mydomain/cn = _bigGroup \ + bureau de gestion, OU = Groupes, DC = myDomain, DC = nous " Je crois qu'il doit s'agir d'une barre oblique inverse réelle, pas un caractère d'échappement dans une chaîne C# –

+0

voir ma réponse mise à jour ci-dessous. ('\\') avant que le caractère échappé ne fonctionne –

Répondre

3

Apparemment, vous avez besoin d'échapper à certains personnages avec une barre oblique inverse, voir la liste her e

Mise à jour:

La barre oblique inverse ne fonctionne en fait . J'ai créé un nouvel objet utilisateur avec cn = 'Escape + Test' dans mon instance ADAM locale (hébergée sur le port 9389). J'ai écrit un petit programme Windows Forms avec le code suivant:

using (DirectoryEntry entry = new DirectoryEntry("LDAP://localhost:9389/CN=Escape\\+Test,OU=MyUsers Users,DC=TEST,DC=LOCAL", "test", "xxxx", AuthenticationTypes.None)) 
{ 
    MessageBox.Show(entry.Properties["cn"][0].ToString()); 
} 

Le programme affiché « Escape + Test » quand je l'ai couru. Notez les doubles barres obliques inverses pour représenter un backslash réel et non un caractère d'échappement. Je m'attendrais au même comportement sur un domaine AD complet. Juste comme une vérification de santé j'ai remplacé la barre oblique inverse avec% 2B comme mentionné par une autre réponse et quand j'ai fait j'ai reçu une erreur "aucun objet sur le serveur" en essayant d'accéder aux propriétés de l'entrée.

+0

@EJP - Oui cela fonctionne Votre suggestion ne fonctionne pas Lorsque je remplace la barre oblique inverse par% 2B, il répond par "aucun objet de ce type sur le serveur" lorsque j'essaie d'accéder les propriétés de l'entrée. –

-1

La connexion à LDAP est possible uniquement pour des utilisateurs spécifiques. Nous devons donc spécifier le groupe d'utilisateurs ayant accès au LDAP et les définir dans le pool d'applications. Lorsque nous créons un nouveau site Web, ajoutez ce groupe d'applications qui dispose des droits d'accès, À moins que vous ne fournissiez un pool d'applications correct, nous obtiendrons ce type d'erreur.

Questions connexes