<div dir="ltr"><div>Hello Maxim,<br><br></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 4 Oct 2019 at 13:16, Minin Maxim <<a href="mailto:Maxim.Minin@baaderbank.de">Maxim.Minin@baaderbank.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="DE">
<div class="gmail-m_6346471489322007530WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hello,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I have a problem with eldap module.  The call  eldap:simple_bind(Handle, Dn, Password) don't work correct if the password contains sign '§'.
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Is it a known issue? Have I to report this as a bug?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I think , the cause of the problem is maybe the encoding function in ELDAPv3 module (asn1 module from eldap lib). I have generated ELDAPv3.erl from ELDAPv3.asn1 (call asn1ct:compile("ELDAPv3.asn1") and found this:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">...<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">encode(Type, Data) -><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">try <b>iolist_to_binary(element(1, encode_disp(Type, Data)))</b> of<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  Bytes -><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">    {ok,Bytes}<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">......<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">this call to iolist_to_binary makes the problem by § sign and should by replace by  unicode:characters_to_binary/3<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">1> erlang:iolist_to_binary([167]).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><<"§">><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">2> unicode:characters_to_binary([167], utf8, utf8).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><<"§"/utf8>><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">3> <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">As a workaround I just convert the password string to binary bevor eldap:simple_bind/4 call, like that:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">...<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">PaswordAsBin = unicode:characters_to_binary(Password,utf8,utf8),<u></u><u></u></span></p>
<p class="MsoNormal">BindAnswer =  eldap:simple_bind(UserHandle,DN,PaswordAsBin),</p></div></div></blockquote><div><br></div><div><div>I've encountered this issue before; I worked around it the same way you did, while also applying an extra conversion for Dialyzer's sake:<br><br></div><div>    Normalized = unicode:characters_to_nfkc_binary(Password),<br></div><div>    ByteList = binary_to_list(Normalized)<br><br></div><div>Which in effect produces a list of bytes that's UTF-8 encoded rather than in <span class="gmail-st">IEC 8859-1.<br><br></span></div><div><span class="gmail-st">I should point out though, that normalizing it to a single Unicode form is important in this sort of thing, lest you get failed authorizations because some password contains a symbol with more than a single representation.<br>At the time I concluded that the KC norm was the one to be used with LDAP, but I don't recall the source.</span></div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="DE"><div class="gmail-m_6346471489322007530WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">...<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">It works but according to documentation of eldap module the password have to be string:<u></u><u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US">"simple_bind(Handle, Dn, Password) -> return_value()<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">                OTP R15B01<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">Types<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">Handle = handle()<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">Dn = string()<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">Password = string()<u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US">Authenticate the connection using simple authentication."<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal">Thanks<u></u><u></u></p>
<p class="MsoNormal">Maxim<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Guilherme<br></div></div></div></div></div></div></div>