That's interesting. What I'm really doing, instead of the second elog statement, is this:
$ret = $ldap->modify( $dn,
replace => {
unicodePwd => $mspass
} );
replace => {
unicodePwd => $mspass
} );
This does work for strings that don't contain consecutive zeroes. I'm not really passing the string to PostgreSQL, but to Net::LDAP, but it must hit PostgreSQL anyway? Active Directory requires this encoding, so I'm not sure what to do here.
On Wed, Jul 15, 2015 at 11:57 AM, Daniel Verite <daniel@xxxxxxxxxxxxxxxx> wrote:
Ronald Peterson wrote:
> # select * from doublezero();
> INFO: double00
> CONTEXT: PL/Perl function "doublezero"
> ERROR: invalid byte sequence for encoding "UTF8": 0x00 at line 8, <DATA>
> line 558.
> CONTEXT: PL/Perl function "doublezero"
>
> I don't understand this. I need to pass $mspass to Active Directory, and it
> the encoding is exactly as it should be, which is to say, it works for
> strings that don't include two consecutive zeros. Is this a bug?
When replacing the literal "double00" with "foobar" in your function,
the same error occurs for me:
test=# select doublezero();
INFO: foobar
CONTEXT: PL/Perl function "doublezero"
ERROR: invalid byte sequence for encoding "UTF8": 0x00 at line 6.
CONTEXT: fonction PL/Perl « doublezero »
Anyway it's not clear what you expect. PG doesn't support UTF-16,
and even if it did, it wouldn't accept such strings when the current
encoding is UTF-8.
If Active Directory wants UTF-16LE, you have to do that conversion, but
don't pass the result back to postgres in this format.
Best regards,
--
Daniel
PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org
-R-