J'ai inséré un enregistrement dans Ldap en utilisant JNDI. Son nom est c=""aa
. JNDI a fait un travail d'échapper cela pour moi, donc il a atterri en db comme c=\"\"aa
. Ok, c'est ce que je m'attendais à considérer toutes ces règles d'échappement.Impossible d'utiliser un SearchResult pour supprimer un enregistrement (guillemets échappés par double barre oblique inverse)
Maintenant, bien sûr, je veux supprimer cet enregistrement. Je peux le chercher et obtenir son nom. Le nom devrait être bon pour supprimer l'enregistrement.
Le problème est que le code suivant:
SearchResult sr = obtainSearchResultInJndiWay();
System.out.println("name: " + sr.getName())
retours name: c=\\"\\"aa
.
Cela ne fonctionne pas. Je ne peux pas supprimer un tel élément, car il n'est pas trouvé. Je devrais supprimer l'article c=\"\"aa
, mais je n'ai aucun moyen d'obtenir le bon LdapName.
Dois-je convertir manuellement les doubles antislashs? J'ai même trouvé un code tiers qui le fait. Est-ce une autre preuve que JNDI est un concept pauvre, comme dans cette question, à propos de forward slashes?
Ma solution est d'interdire l'entrée des barres obliques et des guillemets dans les noms ldap. Est-ce une bonne solution de contournement? Quels autres pièges puis-je espérer? Yat-il un guide pour utiliser JNDI pour Ldap en toute sécurité? Ce sont des questions d'un gars qui se perd. Pour rendre la question plus claire pour Stack: Comment faire face à ce problème?