Net::LDAP & LDAP Decoding Error

--mvpLiMfbWzRoNl4x
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello!

I have a question about an LDAP query with Net::LDAP. I send queries to
an OpenLDAP server (version 2.2.24). The queries are very simple and
intended to detect already existing user entries. The code that prepares
and sends the query looks like this:

$filter    =3D "(uid=3D".$username.")";
$filterobj =3D Net::LDAP::Filter->new($filter);
$lres      =3D $ldap->search( base =3D> $base,
                            scope =3D> 'sub',
			    sizelimit =3D> 1,
			    timelimit =3D> 15,
			    attrs =3D> ['uid','cn','mail','accountStatus'],
			    filter =3D> $filterobj );

I ask for four attributes. The entry belong to the account object
classes. accountStatus and mail is from qmail-ldap's object classes. The
script and the OpenLDAP server sit on the same host, so I talk to
localhost via TCP and OpenLDAP V3. TLS is not used. The bind works, the
login works, the query is sent and the OpenLDAP server returns the
resulting attributes. I double checked this with ldapsearch on the
command line and with the tethereal sniffer by observing the TCP
connection. However the resulting error code I get in the script is
LDAP_DECODING_ERROR. I have no idea what I did wrong or what happenend
here. Can anyone shed some light on this?

The system the script is running on is a Debian Sarge 3.1r1 with the
latest upgrades. The OpenLDAP server is compiled from source.

Best regards,
Lynx.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--mvpLiMfbWzRoNl4x
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFDzrCVeMu5lRpXJ7kRAu3hAJ90jkZ3GVrL4ZaG+w+C3eUVpeNDEwCg2/6C
+ja9YtGrpKlOswBZx3R0eio=
=SB2g
-----END PGP SIGNATURE-----

--mvpLiMfbWzRoNl4x--
0
lynx
1/18/2006 9:18:13 PM
perl.ldap 1268 articles. 0 followers. Follow

13 Replies
8725 Views

Similar Articles

[PageSpeed] 18
Get it on Google Play
Get it on Apple App Store

Hi Ren=C3=A9,

On Wednesday, 18. January 2006 22:18, Ren=C3=A9 Pfeiffer wrote:
> I have a question about an LDAP query with Net::LDAP. I send queries to
> an OpenLDAP server (version 2.2.24). The queries are very simple and
> intended to detect already existing user entries. The code that prepares
> and sends the query looks like this:
>
> $filter    =3D "(uid=3D".$username.")";
> $filterobj =3D Net::LDAP::Filter->new($filter);
> $lres      =3D $ldap->search( base =3D> $base,
>                             scope =3D> 'sub',
> 			    sizelimit =3D> 1,
> 			    timelimit =3D> 15,
> 			    attrs =3D> ['uid','cn','mail','accountStatus'],
> 			    filter =3D> $filterobj );
>
> I ask for four attributes. The entry belong to the account object
> classes. accountStatus and mail is from qmail-ldap's object classes. The
> script and the OpenLDAP server sit on the same host, so I talk to
> localhost via TCP and OpenLDAP V3. TLS is not used. The bind works, the
> login works, the query is sent and the OpenLDAP server returns the
> resulting attributes. I double checked this with ldapsearch on the
> command line and with the tethereal sniffer by observing the TCP
> connection. However the resulting error code I get in the script is
> LDAP_DECODING_ERROR. I have no idea what I did wrong or what happenend
> here. Can anyone shed some light on this?
>
> The system the script is running on is a Debian Sarge 3.1r1 with the
> latest upgrades. The OpenLDAP server is compiled from source.

The code snippet above looks correct with only one omission:
you do not test if the Net::LDAP::Filter object was correctly created.

Unfortunately you do not tell what version of perl-ldap you use and what ki=
nd=20
of data triggers the error.
I.e. what are the exact values for $base and $username, what is it that the=
=20
server returns.

Please try inserting the call=20
	$ldap->debug(15);
before the search call to find out what gets sent and received over the lin=
e.

Regards
Peter

=2D-=20
Peter Marschall
eMail: peter@adpm.de
0
peter
1/20/2006 11:57:18 AM
--gJNQRAHI5jiYqw2y
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello, Peter!

On Jan 20, 2006 at 1257 +0100, Peter Marschall appeared and said:
> [...]
> > The system the script is running on is a Debian Sarge 3.1r1 with the
> > latest upgrades. The OpenLDAP server is compiled from source.
>=20
> The code snippet above looks correct with only one omission:
> you do not test if the Net::LDAP::Filter object was correctly created.

That's something I forgot, because I didn't expect the filter
preparation to create an error. I will fix that in the scripts.

> Unfortunately you do not tell what version of perl-ldap you use and what =
kind=20
> of data triggers the error.
> I.e. what are the exact values for $base and $username, what is it that t=
he=20
> server returns.

Yes, you are right, I forgot that also. I did a grep in
/usr/share/perl5/Net/LDAP/ showing the following version strings:

ASN.pm:$VERSION =3D "0.03";
Bind.pm:$VERSION =3D "1.02";
Constant.pm:$VERSION =3D "0.03";
Control.pm:$VERSION =3D "0.05";
DSML.pm:$VERSION =3D "0.12";
Entry.pm:$VERSION =3D "0.22";
Extension.pm:$VERSION =3D "1.01";
Extra.pm:$VERSION =3D "0.01";
Filter.pm:$VERSION =3D "0.14";
LDIF.pm:$VERSION =3D "0.15_03";
Message.pm:$VERSION =3D "1.08";
RootDSE.pm:$VERSION =3D "0.01";
Schema.pm:$VERSION =3D "0.9903";
Search.pm:$VERSION =3D "0.10";
Util.pm:$VERSION =3D "0.10";

The $base variable holds "ou=3Dusers,ou=3Daccounts,dc=3Dluchs,dc=3Dat" and =
the
username was "rene.pfeiffer". I also tried other username. Most of the
usernames have a "." to seperate given name from surname. Could this be
a problem since "." is also used in regexes?

> Please try inserting the call=20
> 	$ldap->debug(15);
> before the search call to find out what gets sent and received over the l=
ine.

I will do that and try to produce a dump of the interaction.

Best regards,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--gJNQRAHI5jiYqw2y
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD0l4VeMu5lRpXJ7kRAutfAKCRsJwg9sJ67m37md0ijEXyX/pozgCdG3Jx
eSodjKsnynNptMOIJKzROAw=
=Dxc3
-----END PGP SIGNATURE-----

--gJNQRAHI5jiYqw2y--
0
lynx
1/21/2006 4:15:17 PM
On 21/1/06 4:15, Ren=E9 Pfeiffer <lynx@luchs.at> wrote:

> Hello, Peter!
>=20
> On Jan 20, 2006 at 1257 +0100, Peter Marschall appeared and said:
>> [...]
>>> The system the script is running on is a Debian Sarge 3.1r1 with the
>>> latest upgrades. The OpenLDAP server is compiled from source.
>>=20
>> The code snippet above looks correct with only one omission:
>> you do not test if the Net::LDAP::Filter object was correctly created.
>=20
> That's something I forgot, because I didn't expect the filter
> preparation to create an error. I will fix that in the scripts.
>=20
>> Unfortunately you do not tell what version of perl-ldap you use and what=
 kind
>> of data triggers the error.
>> I.e. what are the exact values for $base and $username, what is it that =
the
>> server returns.
>=20
> Yes, you are right, I forgot that also. I did a grep in
> /usr/share/perl5/Net/LDAP/ showing the following version strings:

Actually, the version of LDAP.pm itself would be good, and the exact perl
version. There used to be some problems with perl mangling the encoded byte=
s
(thinking they were UTF-8 or something) and since Debian has a reputation
for being "old" :-) but stable...
=20
Cheers,

Chris


0
chrisridd
1/21/2006 6:18:01 PM
--sDKAb4OeUBrWWL6P
Content-Type: multipart/mixed; boundary="ILuaRSyQpoVaJ1HG"
Content-Disposition: inline


--ILuaRSyQpoVaJ1HG
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Jan 21, 2006 at 1818 +0000, Chris Ridd appeared and said:
> [...]
> Actually, the version of LDAP.pm itself would be good, and the exact perl
> version.

The version of LDAP.pm is 0.32. I have attached the output of 'perl -V'
to this mail.=20

> There used to be some problems with perl mangling the encoded bytes
> (thinking they were UTF-8 or something) and since Debian has a reputation
> for being "old" :-) but stable...

Well, yes, I know, but before I enter dependency hell and use fresh meat
=66rom CPAN, I'd like to know why I have to do that. Besides there's
always the possibility to file a bug to the Debian package maintainers.

I also ran the script with debug enabled, as Peter suggested. The output
is also attached. The server where the script is executed is configure
with LANG=3Den_GB.UTF-8, so you guess pointing to UTF-8 may be right.

Best regards,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--ILuaRSyQpoVaJ1HG
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="perl.txt"
Content-Transfer-Encoding: quoted-printable

Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
  Platform:
    osname=3Dlinux, osvers=3D2.4.27-ti1211, archname=3Di386-linux-thread-mu=
lti
    uname=3D'linux kosh 2.4.27-ti1211 #1 sun sep 19 18:17:45 est 2004 i686 =
gnulinux '
    config_args=3D'-Dusethreads -Duselargefiles -Dccflags=3D-DDEBIAN -Dcccd=
lflags=3D-fPIC -Darchname=3Di386-linux -Dprefix=3D/usr -Dprivlib=3D/usr/sha=
re/perl/5.8 -Darchlib=3D/usr/lib/perl/5.8 -Dvendorprefix=3D/usr -Dvendorlib=
=3D/usr/share/perl5 -Dvendorarch=3D/usr/lib/perl5 -Dsiteprefix=3D/usr/local=
 -Dsitelib=3D/usr/local/share/perl/5.8.7 -Dsitearch=3D/usr/local/lib/perl/5=
=2E8.7 -Dman1dir=3D/usr/share/man/man1 -Dman3dir=3D/usr/share/man/man3 -Dsi=
teman1dir=3D/usr/local/man/man1 -Dsiteman3dir=3D/usr/local/man/man3 -Dman1e=
xt=3D1 -Dman3ext=3D3perl -Dpager=3D/usr/bin/sensible-pager -Uafs -Ud_csh -U=
usesfio -Uusenm -Duseshrplib -Dlibperl=3Dlibperl.so.5.8.7 -Dd_dosuid -des'
    hint=3Drecommended, useposix=3Dtrue, d_sigaction=3Ddefine
    usethreads=3Ddefine use5005threads=3Dundef useithreads=3Ddefine usemult=
iplicity=3Ddefine
    useperlio=3Ddefine d_sfio=3Dundef uselargefiles=3Ddefine usesocks=3Dund=
ef
    use64bitint=3Dundef use64bitall=3Dundef uselongdouble=3Dundef
    usemymalloc=3Dn, bincompat5005=3Dundef
  Compiler:
    cc=3D'cc', ccflags =3D'-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -=
DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE=
 -D_FILE_OFFSET_BITS=3D64',
    optimize=3D'-O2',
    cppflags=3D'-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fn=
o-strict-aliasing -pipe -I/usr/local/include'
    ccversion=3D'', gccversion=3D'3.3.6 (Debian 1:3.3.6-6)', gccosandvers=
=3D''
    intsize=3D4, longsize=3D4, ptrsize=3D4, doublesize=3D8, byteorder=3D1234
    d_longlong=3Ddefine, longlongsize=3D8, d_longdbl=3Ddefine, longdblsize=
=3D12
    ivtype=3D'long', ivsize=3D4, nvtype=3D'double', nvsize=3D8, Off_t=3D'of=
f_t', lseeksize=3D8
    alignbytes=3D4, prototype=3Ddefine
  Linker and Libraries:
    ld=3D'cc', ldflags =3D' -L/usr/local/lib'
    libpth=3D/usr/local/lib /lib /usr/lib
    libs=3D-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=3D-ldl -lm -lpthread -lc -lcrypt
    libc=3D/lib/libc-2.3.2.so, so=3Dso, useshrplib=3Dtrue, libperl=3Dlibper=
l.so.5.8.7
    gnulibc_version=3D'2.3.2'
  Dynamic Linking:
    dlsrc=3Ddl_dlopen.xs, dlext=3Dso, d_dlsymun=3Dundef, ccdlflags=3D'-Wl,-=
E'
    cccdlflags=3D'-fPIC', lddlflags=3D'-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):=20
  Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
                        PERL_IMPLICIT_CONTEXT
  Built under linux
  Compiled at Jun  8 2005 23:43:21
  @INC:
    /etc/perl
    /usr/local/lib/perl/5.8.7
    /usr/local/share/perl/5.8.7
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    .

--ILuaRSyQpoVaJ1HG
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="debug.txt"
Content-Transfer-Encoding: quoted-printable

Net::LDAP=3DHASH(0x830cdbc) sending:

30 70 02 01 02 63 6B 04 24 6F 75 3D 75 73 65 72 0p...ck.$ou=3Duser
73 2C 6F 75 3D 61 63 63 6F 75 6E 74 73 2C 64 63 s,ou=3Daccounts,dc
3D 67 72 75 65 6E 65 2C 64 63 3D 61 74 0A 01 02 =3Dpentex,dc=3Dat...
0A 01 02 02 01 0A 02 01 0F 01 01 00 A3 14 04 03 ................
75 69 64 04 0D 72 65 6E 65 2E 70 66 65 69 66 66 uid..rene.pfeiff
65 72 30 1E 04 03 75 69 64 04 02 63 6E 04 04 6D er0...uid..cn..m
61 69 6C 04 0D 61 63 63 6F 75 6E 74 53 74 61 74 ail..accountStat
75 73 __ __ __ __ __ __ __ __ __ __ __ __ __ __ us

0000  112: SEQUENCE {
0002    1:   INTEGER =3D 2
0005  107:   [APPLICATION 3] {
0007   36:     STRING =3D 'ou=3Dusers,ou=3Daccounts,dc=3Dpentex,dc=3Dat'
002D    1:     ENUM =3D 2
0030    1:     ENUM =3D 2
0033    1:     INTEGER =3D 10
0036    1:     INTEGER =3D 15
0039    1:     BOOLEAN =3D FALSE
003C   20:     [PRIVATE 29] {
003E    3:       STRING =3D 'uid'
0043   13:       STRING =3D 'rene.pfeiffer'
0052     :     }
0052   30:     SEQUENCE {
0054    3:       STRING =3D 'uid'
0059    2:       STRING =3D 'cn'
005D    4:       STRING =3D 'mail'
0063   13:       STRING =3D 'accountStatus'
0072     :     }
0072     :   }
0072     : }
Net::LDAP=3DHASH(0x86c7410) received:

30 81 AD 02 01 02 64 81 A7 04 36 75 69 64 3D 72 0.....d...6uid=3Dr
65 6E 65 2E 70 66 65 69 66 66 65 72 2C 6F 75 3D ene.pfeiffer,ou=3D
75 73 65 72 73 2C 6F 75 3D 61 63 63 6F 75 6E 74 users,ou=3Daccount
73 2C 64 63 3D 67 72 75 65 6E 65 2C 64 63 3D 61 s,dc=3Dpentex,dc=3Da
74 30 6D 30 18 04 0D 61 63 63 6F 75 6E 74 53 74 t0m0...accountSt
61 74 75 73 31 07 04 05 61 6B 74 69 76 30 21 04 atus1...aktiv0!.
04 6D 61 69 6C 31 19 04 17 72 65 6E 65 2E 70 66 .mail1...rene.pf
65 69 66 66 65 72 40 67 72 75 65 6E 65 2E 61 74 eiffer@pentex.at
30 16 04 03 75 69 64 31 0F 04 0D 72 65 6E 65 2E 0...uid1...rene.
70 66 65 69 66 66 65 72 30 16 04 02 63 6E 31 10 pfeiffer0...cn1.
04 0E 52 65 6E C3 A9 20 50 66 65 69 66 66 65 72 ..Ren.. Pfeiffer

Use of uninitialized value in addition (+) at /usr/share/perl5/Convert/ASN1=
/Debug.pm line 88, <DATA> line 283.
Use of uninitialized value in printf at /usr/share/perl5/Convert/ASN1/Debug=
=2Epm line 94, <DATA> line 283.
0000    0: SEQUENCE {
Use of uninitialized value in numeric lt (<) at /usr/share/perl5/Convert/AS=
N1/Debug.pm line 103, <DATA> line 283.
Use of uninitialized value in addition (+) at /usr/share/perl5/Convert/ASN1=
/Debug.pm line 107, <DATA> line 283.
0001     : }
Use of uninitialized value in addition (+) at /usr/share/perl5/Convert/ASN1=
/Debug.pm line 88, <DATA> line 283.
Use of uninitialized value in printf at /usr/share/perl5/Convert/ASN1/Debug=
=2Epm line 94, <DATA> line 283.
0001    0: [PRIVATE 29] {
Use of uninitialized value in numeric lt (<) at /usr/share/perl5/Convert/AS=
N1/Debug.pm line 103, <DATA> line 283.
Use of uninitialized value in addition (+) at /usr/share/perl5/Convert/ASN1=
/Debug.pm line 107, <DATA> line 283.
0002     : }
0002    2: [PRIVATE 29] {
0004    2:   BOOLEAN =3D TRUE
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
0008     : }
0008    4: [PRIVATE 29] {
000A  117:   [UNIVERSAL 22] {
000C  100:     [APPLICATION 9] {
000E  114:       [UNIVERSAL 29] {
0010  110:         [APPLICATION 5] {
0012   46:           [APPLICATION 5] {
0014  102:             [APPLICATION 16] {
0016  105:               [APPLICATION 5] {
0018  102:                 [APPLICATION 6] {
001A  114:                   [APPLICATION 5] {
001C  111:                     [UNIVERSAL 12] {
001E   61:                       [APPLICATION 21] {
0020  115:                         [APPLICATION 21] {
0022  114:                           [APPLICATION 5] {
0024   44:                             [APPLICATION 19] {
0026  117:                               [APPLICATION 15] {
0028   97:                                 [UNIVERSAL 29] {
002A   99:                                   [APPLICATION 3] {
002C  117:                                     [APPLICATION 15] {
002E  116:                                       [APPLICATION 14] {
0030   44:                                         [APPLICATION 19] {
0032   99:                                           [APPLICATION 4] {
0034  103:                                             [UNIVERSAL 29] {
0036  117:                                               [APPLICATION 18] {
0038  110:                                                 [APPLICATION 5] {
003A   44:                                                   [APPLICATION 5=
] {
003C   99:                                                     [APPLICATION=
 4] {
003E   97:                                                       [UNIVERSAL=
 29] {
0040   48:                                                         [APPLICA=
TION 20] {
0042   48:                                                           [APPLI=
CATION 13] {
0044    4:                                                             [UNI=
VERSAL 24]
0046     :                                                               0D=
 61 63 63 __ __ __ __ __ __ __ __ __ __ __=20
__ .acc
004A  117:                                                             [APP=
LICATION 15] {
004C  116:                                                               [A=
PPLICATION 14] {
004E  116:                                                                 =
[APPLICATION 19]
0050     :                                                                 =
  61 74 75 73 31 07 04 05 61 6B 74 69 76 30=20
21 04 atus1...aktiv0!.
0060     :                                                                 =
  04 6D 61 69 6C 31 19 04 17 72 65 6E 65 2E=20
70 66 .mail1...rene.pf
0070     :                                                                 =
  65 69 66 66 65 72 40 67 72 75 65 6E 65 2E=20
61 74 eiffer@pentex.at
0080     :                                                                 =
  30 16 04 03 75 69 64 31 0F 04 0D 72 65 6E=20
65 2E 0...uid1...rene.
0090     :                                                                 =
  70 66 65 69 66 66 65 72 30 16 04 02 63 6E=20
31 10 pfeiffer0...cn1.
00A0     :                                                                 =
  04 0E 52 65 6E C3 A9 20 50 66 65 69 66 66=20
65 72 ..Ren.. Pfeiffer
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                               }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                             }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                           }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                         }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                       }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                     }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                   }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                                 }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                               }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                             }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                           }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                         }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                       }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                     }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                   }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                                 }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                               }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                             }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                           }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                         }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                       }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                     }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                   }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :                 }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :               }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :             }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :           }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :         }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :       }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :     }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     :   }
Bad sequence length  at /usr/share/perl5/Convert/ASN1/Debug.pm line 79, <DA=
TA> line 283.
00C4     : }
Net::LDAP=3DHASH(0x830cdbc) sending:

30 06 02 01 03 50 01 02 __ __ __ __ __ __ __ __ 0....P..

0000    6: SEQUENCE {
0002    1:   INTEGER =3D 3
0005    1:   [APPLICATION 16]
0007     :     02 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ .
0008     :=20


--ILuaRSyQpoVaJ1HG--

--sDKAb4OeUBrWWL6P
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD1NOGeMu5lRpXJ7kRAu9iAJsGj9beOv1qqNpiamQZnD+YQBWqBgCg3DSI
MTeQWJYb7fnGLG8zZJ+6hHg=
=gZwG
-----END PGP SIGNATURE-----

--sDKAb4OeUBrWWL6P--
0
lynx
1/23/2006 1:00:54 PM
--wzJLGUyc3ArbnUjN
Content-Type: multipart/mixed; boundary="6TrnltStXW4iwmi0"
Content-Disposition: inline


--6TrnltStXW4iwmi0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Jan 23, 2006 at 1400 +0100, Ren=C3=A9 Pfeiffer appeared and said:
> On Jan 21, 2006 at 1818 +0000, Chris Ridd appeared and said:
> > [...]
> > Actually, the version of LDAP.pm itself would be good, and the exact pe=
rl
> > version.
>=20
> The version of LDAP.pm is 0.32. I have attached the output of 'perl -V'
> to this mail.=20
> [...]

I did some more testing, because I thought this error to be peculiar to
the server's AMD64 architecture. I get the same LDAP_DECODING_ERROR on
x86 and with OpenLDAP 2.2.x in addition to 2.3.x. I also tried the Perl
5.8.7 version from Debian's testing tree along with Perl module updates.
I also get this error when skipping filter preparation with
Net::LDAP::Filter and simply use "(uid=3D*)" as search filter. In every
case the results from the OpenLDAP server are correct. I doublechecked
this by using tethereal and looking into the result packets. server_error()
says:

decode error at /usr/share/perl5/Convert/ASN1/_decode.pm line 60

I even tried using different encodings though the whole scripts run with
UTF-8 enabled everywhere. I have attached a simple test script that was
taken from the CGIs that hit the error in the first place.

I have really no idea what to test next or what to code differently, so
if you want me to run any other code please feel free to send
suggestions.

Best regards,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--6TrnltStXW4iwmi0
Content-Type: application/x-perl
Content-Disposition: attachment; filename="ldap_decoding_test.pl"
Content-Transfer-Encoding: quoted-printable

#!/usr/bin/perl -w=0A=0Ause Carp;=0Ause Encode;=0Ause encoding 'UTF-8';=0Au=
se English;=0Ause Net::LDAP;=0Ause Net::LDAP::Entry;=0Ause Net::LDAP::Filte=
r;=0Ause Net::LDAP::Util qw(escape_dn_value);=0Ause strict;=0Ause utf8;=0A=
=0A# LDAP bindings=0Amy $admin_binddn   =3D 'cn=3Duser,ou=3Dsystem,ou=3Dacc=
ounts,dc=3Dpentex,dc=3Dat';=0Amy $admin_password =3D 'XXXXXXXXXXXXXXX';=0A=
=0A# ----------------------------------------------------------------------=
-------=0A# LDAP=0Amy $base           =3D 'ou=3Dusers,ou=3Daccounts,dc=3Dpe=
ntex,dc=3Dat';=0Amy $binddn;=0Amy $dn;=0Amy $entry;=0Amy $filter;=0Amy $fil=
terobj;=0Amy $ldap;=0A=0A# Things we read from the server=0Amy $ldapentry;=
=0A=0Amy $lres;=0Amy $mesg;=0Amy $server =3D 'localhost';=0Amy $port   =3D =
389;=0A=0Amy $suchname =3D 'rene.pfeiffer';=0A=0A# ------------------------=
----------------------------------------------------=0A# Debug level=0Amy $=
debug =3D 5;=0A=0Amy $errorflag =3D 0;=0Amy $errormsg;=0A=0A# -------------=
--------------------------------------------------------=0A# Subroutines=0A=
=0A# Prints search results =0Asub html_display {=0A	my $l =3D shift(@_);=0A=
	my @objects;=0A	my $ldap_cn;=0A	my $ldap_description;=0A	my $ldap_mail;=0A=
	my $ldap_mailalternateaddress;=0A	my $ldap_mailforwardingaddress;=0A	my $l=
dap_mailquotasize;=0A	my $ldap_uid;=0A	my $ldap_userpassword;=0A	my $format=
 =3D "<td align=3D\"left\">%s</td>"x7;=0A=0A	# Start table=0A	print "<table=
 border=3D\"0\"><tr align=3D\"center\" valign=3D\"top\">";=0A	print "<th al=
ign=3D\"left\">UserID</th>";=0A	print "<th align=3D\"left\">Name</th>";=0A	=
print "<th align=3D\"left\">Mail</th>";=0A	print "<th align=3D\"left\">Alia=
s</th>";=0A	print "<th align=3D\"left\">Weiterleitung</th>";=0A	print "<th =
align=3D\"left\">Mailquote (kB)</th>";=0A	print "<th align=3D\"left\">Besch=
reibung</th>";=0A	print "</tr>";=0A	@objects =3D $l->entries;=0A	foreach $e=
ntry (@objects) {=0A		print "<tr align=3D\"center\" valign=3D\"top\">";=0A	=
	$ldap_cn                   =3D $entry->get_value("cn");=0A		$ldap_descript=
ion          =3D $entry->get_value("description");=0A		$ldap_mail          =
       =3D $entry->get_value("mail");=0A		$ldap_mailalternateaddress =3D $e=
ntry->get_value("mailAlternateAddress");=0A		$ldap_mailforwardingaddress=3D=
 $entry->get_value("mailForwardingAddress");=0A		$ldap_mailquotasize       =
 =3D $entry->get_value("mailQuotaSize");=0A		$ldap_uid                  =3D=
 $entry->get_value("uid");=0A		printf $format,$ldap_uid,$ldap_cn,$ldap_mail=
,=0A		       ( length($ldap_mailalternateaddress)>2 ? $ldap_mailalternatead=
dress : '-' ),=0A		       ( length($ldap_mailforwardingaddress)>2 ? $ldap_m=
ailforwardingaddress : '-' ),=0A		       $ldap_mailquotasize,=0A		       ( =
length($ldap_description)>2 ? $ldap_description : '-' );=0A		print "</tr>";=
=0A	}=0A	print "</table>";=0A	return 0;=0A}=0A=0A# ------=0A# MAIN=0A=0A$ld=
ap =3D Net::LDAP->new( $server, port =3D> $port, version =3D> 3, async =3D>=
 0 );=0A$mesg =3D $ldap->bind( $admin_binddn, password =3D> $admin_password=
 );=0Aif ( (! $mesg->code) ) {=0A	# Create search filter=0A	if ( $debug > 2=
0 ) {=0A		# Enable Net::LDAP's debug mode and redirect STDERR=0A		open (STD=
ERR, ">&STDOUT");=0A		$ldap->debug(15);=0A	}=0A	#$filter    =3D Encode::enc=
ode( "UTF-8", "(uid=3D".$suchname.")");=0A	$filter    =3D "(uid=3D*)";=0A	#=
$filterobj =3D Net::LDAP::Filter->new($filter);=0A	print 'Filter: ',$filter=
obj->as_string,"\n";=0A	$lres      =3D $ldap->search( base =3D> $base,=0A		=
		    scope =3D> 'sub',=0A				    sizelimit =3D> 1,=0A				    timelimit =3D=
> 60,=0A				    attrs =3D> ['uid','cn','mail','accountStatus',=0A					     =
 'mailQuotaSize','mailAlternateAddress',=0A					      'mailForwardingAddres=
s',=0A					      'description'],=0A				    filter =3D> $filter );=0A	if ( $=
lres->is_error ) {=0A		$errormsg =3D "Der LDAP Server meldete einen Fehler =
zur=C3=BCck. ";=0A		$errormsg =3D $errormsg."Der LDAP Server meldete \"".$l=
res->error_name."\".\n";=0A		$errormsg =3D $errormsg."Die vollst=C3=A4ndige=
 Fehlerbeschreibung lautet: \"".$lres->error_text."\".\n";=0A		$errormsg =
=3D $errormsg."Der volle Fehlertext lautet: \"".$lres->error_desc."\".\n";=
=0A		$errormsg =3D $errormsg."Der Serverfehler lautet: \"".$lres->server_er=
ror."\".\n";=0A	}=0A	else {=0A		# We found our user and prepare the results=
 for display=0A		#=0A		if ( $lres->count > 0 ) {=0A			$errorflag =3D html_d=
isplay($lres);=0A		}=0A		else {=0A			$errorflag =3D 1;=0A			$errormsg =3D "=
Der LDAP Server hat keine Benutzer gefunden, die den Text ";=0A			$errormsg=
 =3D $errormsg."\"".$suchname."\" enthalten!";=0A		}=0A	}=0A}=0A=0Aprint $e=
rrormsg;=0A$ldap->unbind;=0A=0A__END__=0A
--6TrnltStXW4iwmi0--

--wzJLGUyc3ArbnUjN
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD3MqleMu5lRpXJ7kRApNGAJ0TtpRnEIHNdrbyQzYw8FDdtxrtJQCeKSQo
UpOKTaEMrfDawUMOBrC2y3Q=
=eCQP
-----END PGP SIGNATURE-----

--wzJLGUyc3ArbnUjN--
0
lynx
1/29/2006 2:01:09 PM
On 29/1/06 2:01, Ren=E9 Pfeiffer <lynx@luchs.at> wrote:

> On Jan 23, 2006 at 1400 +0100, Ren=E9 Pfeiffer appeared and said:
>> On Jan 21, 2006 at 1818 +0000, Chris Ridd appeared and said:
>>> [...]
>>> Actually, the version of LDAP.pm itself would be good, and the exact pe=
rl
>>> version.
>>=20
>> The version of LDAP.pm is 0.32. I have attached the output of 'perl -V'
>> to this mail.=20
>> [...]
>=20
> I did some more testing, because I thought this error to be peculiar to
> the server's AMD64 architecture. I get the same LDAP_DECODING_ERROR on
> x86 and with OpenLDAP 2.2.x in addition to 2.3.x. I also tried the Perl
> 5.8.7 version from Debian's testing tree along with Perl module updates.
> I also get this error when skipping filter preparation with
> Net::LDAP::Filter and simply use "(uid=3D*)" as search filter. In every
> case the results from the OpenLDAP server are correct. I doublechecked
> this by using tethereal and looking into the result packets. server_error=
()
> says:
>=20
> decode error at /usr/share/perl5/Convert/ASN1/_decode.pm line 60
>=20
> I even tried using different encodings though the whole scripts run with
> UTF-8 enabled everywhere. I have attached a simple test script that was
> taken from the CGIs that hit the error in the first place.
>=20
> I have really no idea what to test next or what to code differently, so
> if you want me to run any other code please feel free to send
> suggestions.

Can you send us the actual raw bytes that Convert::ASN1's trying to decode?
Perhaps it *is* a 64-bit problem, though it is also possible that the
servers involved are sending something back that we're not expecting. (I
don't think it handles the ASN.1 extensibility required by RFC 2251, for
instance, so non-standard (but "legally non-standard") things in the LDAP
messages could cause a problem like this.)

Just call $ldap->debug(3) prior to your search, and this will log the searc=
h
op and the search results to stderr in hex.

Cheers,

Chris


0
chrisridd
1/29/2006 5:44:07 PM
--Boundary-00=_sSQ3Dj7ks5oOV9C
Content-Type: text/plain;
  charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi,

On Sunday, 29. January 2006 15:01, Ren=C3=A9 Pfeiffer wrote:
> I did some more testing, because I thought this error to be peculiar to
> the server's AMD64 architecture. I get the same LDAP_DECODING_ERROR on
> x86 and with OpenLDAP 2.2.x in addition to 2.3.x. I also tried the Perl
> 5.8.7 version from Debian's testing tree along with Perl module updates.
> I also get this error when skipping filter preparation with
> Net::LDAP::Filter and simply use "(uid=3D*)" as search filter. In every
> case the results from the OpenLDAP server are correct. I doublechecked
> this by using tethereal and looking into the result packets. server_error=
()
> says:
>
> decode error at /usr/share/perl5/Convert/ASN1/_decode.pm line 60
>
> I even tried using different encodings though the whole scripts run with
> UTF-8 enabled everywhere. I have attached a simple test script that was
> taken from the CGIs that hit the error in the first place.

I have reduced the test script even more (see the attached file).
Using this script I was able to find out a few more things.

1) the error goes away if "use encoding 'utf8'"  is not used.
2) the error disappears also if debug(3) is used [i.e. only asn_hexdump()
    is used to display debug information and not asn_dump()]
3) the error vanishes also with the following patch to
   Convert::ASN1

=2D-- Convert/ASN1.pm    2005-09-29 10:19:28.000000000 +0200
+++ Convert/ASN1.pm    2006-01-29 18:04:23.000000000 +0100
@@ -15,6 +15,8 @@

 BEGIN {

+  local $SIG{__DIE__};
+  eval { require bytes and 'bytes'->import };
   if (CHECK_UTF8) {
     require Encode;
     require utf8;

4) the hex dump output is identical for all cases.

Conclusion:
In my environment - I have SVN revision 102 of Convert-ASN1 installed - the
bug shows only when "use encoding 'utf8'" together with debugging using
asn_dump() is used.

Browsing through the changes between Convert::ASN1 0.19 and SVN revision 10=
2 I=20
found that in SVN rev 99 committed a fix for exactly this case.

Unfortunately this fix was not complete as it does not cover the [border] c=
ase=20
of debugging using asn_dump().

The patch given above fixes this case, but I do not know if it is the corre=
ct=20
one for all other cases.
I don't like it very much: it changes ASN1.pm to fix a problem that arises =
in=20
ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
to find a better one, but I hope Graham and Chris read this mail and ... ;-=
)))

> I have really no idea what to test next or what to code differently, so
> if you want me to run any other code please feel free to send
> suggestions.

If you want to you may try my private .deb which I have attached as well.
It is based upon the original dbian package with svn revision attached.
If you do not trust me enough to take the dinyry deb I have attached the
patch files to create this deb. Ithe .diff contains the original Debian pat=
ch
(with only debian/changelog adapted to increase the version number) and
the .patch contains the differences from 0.19 to SVN rev 102.

Hope it helps

Peter

=2D-=20
Peter Marschall
eMail: peter@adpm.de

--Boundary-00=_sSQ3Dj7ks5oOV9C
Content-Type: application/x-perl;
  name="ldap_decoding.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="ldap_decoding.pl"

#!/usr/bin/perl -w

use strict;
use utf8;
use encoding 'utf8';
use Net::LDAP;
use Net::LDAP::Util qw(escape_dn_value);

# LDAP bindings
my $binddn = 'cn=Administrator';
my $bindpw = '******';
my $base   = 'o=ADPM,c=DE';
my $filter = '(uid=*)';
my $server = 'localhost';
my $port   = 389;
my $debug  = 15;

my $ldap = Net::LDAP->new( $server, port => $port, version => 3, async => 0 );
my $mesg = $ldap->bind( $binddn, password => $bindpw );
if ( (! $mesg->code) ) {
	$ldap->debug($debug);
	my $lres = $ldap->search( base => $base,
				    scope => 'sub',
				    sizelimit => 1,
				    timelimit => 60,
				    attrs => ['uid','cn','mail','accountStatus',
					      'mailQuotaSize','mailAlternateAddress',
					      'mailForwardingAddress',
					      'description'],
				    filter => $filter );
	if ( $lres->is_error ) {
		print "error_name: \"".$lres->error_name."\".\n".
		      "error_text: \"".$lres->error_text."\".\n".
		      "error_description: \"".$lres->error_desc."\".\n".
		      "server_error: \"".$lres->server_error."\".\n";
	}
	else {
		# We found our user and prepare the results for display
		if ( $lres->count > 0 ) {
			print $lres->count()." entries found.\n";
		}
		else {
			print "no entries found below $base matching $filter\n";
		}
	}
}

$ldap->unbind;

__END__

--Boundary-00=_sSQ3Dj7ks5oOV9C
Content-Type: application/x-deb;
  name="libconvert-asn1-perl_0.19-1pm1+svn102_all.deb"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="libconvert-asn1-perl_0.19-1pm1+svn102_all.deb"

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
z8dhkcJwRpyuNguQsccwmX+c9h7/gjYfCFGyGxYU/sp6zGpX4Y+/891hEISTNU9KQfn8vBBjypvy
5eqWBAWxVQ7AtiQZj8AbagknYcmR9uWoyc5SdwdBKz3wZGhKMe6kqBy0mlWtkt90EJI3IJrcxqxO
ZCbHKlz9jNdmbMub6ezQesQq1WL1kNWsHbKndwzK2HU/J6XTHuum5LYH0VEPcD29WXZ5i5KMbj2R
cOyVGuIhdeoDmLwhv9Xutbh4prt6XlLAx1l8HhxpD3/mAC2XOP7wujBzosSSsJla4zFC98MZbx4s
+fqCxDcvXs+1Y4tlCOOpYondGSdV9f+aimfq34o2wB+qMRIp4//Fvgv/Lz2sLwnooYZQcAmJvO3/
tdvHn/4Xqv+njn+Qjn8YQsK+Pf7/rPE3OdPVhXJTdeOnvXX3/0OBSNgy/xsbG96+/79b/r3vgv32
i/9mXeeee9kGfcnNsanCEw0/evrVmsCpJ33X1T2Y/9Fne6/6vPZfd37q9tqrb7jh1wN3f+jgjg8f
funAq6NrN1z29D9eqFty8PZLn/vZ8FhwxZmlb4/O3rp/+4677jktffBfZ56t/d3DYw8c1/LzS6/O
nVc7M3lM1Ov96cy3MrEdL73rsxMf/Z3vVwdNH7njrrNefzx8614PXHzMnRd95Xf1DX/70NfO+Mf7
/h7Szrv911cu+1zxoJdTz56zx2DhiZc++PF4refbfxy6PLDla5Gbzrx9/NzIe48u/KXYdsaPP/n1
Q0496XJye3fwP+e6QmMv7Tg5v+Nrgy+f+eTWO7909ti9P7oi1N68Mflc7e2ferK/5luXX//n0876
Uu+r39vrsJcm9jjpTyfeu6r63F+uuOn1mv2e+7d239pz7zsofWBTxEc+/9uDSO/Hz64efPd5bQ/e
cWfV/CfPfOqyBw949qKLjjr/yIn3bH4x99P9T/nus9V7nnPfuxMvP3DzzFVPzl219NKT5r58zJkn
HqWdctZTT9yy+qFbn7vjw2c+t2wP97U3ry0dv/Tm748d/eKKrgddm+77e2jpIZmD55d86tCzqrJ3
9LovIT94OrrfpXt2NNy4560H7B87ePQv1xx6/t5PHbziyTP++I41r/3vjmOXvPvQ22775OHPRZs1
12eSH39863XXJh+uevHcg8Znl33xxT3/56n/fmqfZ6q/P3vqyr+vOOi59935oSNvm92wzwVHd133
2yu1/S6L+I6YP/iHeyW/e9KLdyUf/uuquz/08WM9DdnWf9zx97/cdcdX9v630C293nP9t/zjb3c+
fmf0yw+/+rXHX5y86uWvPFnyfPOah56rOmLHmnt+1nTFE3977mdL/EfuddQtN3RFf3vmZ5447fq9
73z8yn1rf/vH5z/363tmb7749cLhbVd8/NMHPZn57x9/84kbm98VPui2Rw76wfsv/+3dv7j4Re9f
hjb+14PT0/kz91nxk4nkzT3X7b3/tV++8rFT665/1fvtZ6+6bZ/2W392zes31+yRfOw3Fz5196NH
Rq76yBXvPL7z8Is+ePXZS7941xF3uy/091T96bpAYNmB4R/umfJ96Jczr+z7nb3+UBfwn9+y9dk/
+O6935v/8CcmT7k29XDdu9a7j22591eHXrX13bfcuGXp8Mn3libf+eV97z3v/LMCLd+978uf/gt5
5yd/ctU1J19//0VrxwOfu/S/Lo+7D3os+fVAt/7Thib3Cb9pcH+i5eKtY10r1182dSU5tD07VN1x
3X3PzyxZ88Jnj/7VBy8785R3d985l/vikUePf7vx2dBLjx/4y9h1p1z50PP3fPnlG/a4KHO257B7
33HQa5e/58PZjQ8173fJlteO2d4VPfA3V9xz+GuzR3k/tf+nPvqRPb701K8eeer+V1857cvnnL/+
0/XtI9d+9C8tK05dsu/tS6/zPqa/77h3rX2w6tX8ezZqW+9N/ebsFYlLMnd3frXr5we8sP6zT+Vd
S24YW/PDRy+r+dOxv71qr1V3vvDLf5u+afyFV1/+9qdffOaHhYa73/uNUzKH/vWFza9/rPWOr+3r
WXdNwT102aHj+v2f2eg+7383nH/PslO//frg+YlDr7hzpuuD1/3Hkqc3XH3YeeecsGLZYxd+YWD5
noef3vPMtPeVX/X/+qij//OTf/7Z9696/qHojiu/eftXn/juVWe0F7TjzrvzzoMfP+4Ll905WHhl
3y/+/rNPzzx69tkPHPf8Y6t8f3jtG9/6/Y3f+t3X97z99++ob378sZe/fO2eV33s9R883jB95e//
9J1v/unczze23f79x//yzKd+veeTr752yIVDtVe+OPzXV16NP3/j0mWvXfVfZ//qmGdzz2WPaO45
Ovra/Nan7rnkW+nf9F++Nbr2vKsvXv3X45defOL3n782vWPJGV9csv+PbvnJK/s+/P3IEeeNXPGd
kZePu+uHL30psv62vbc033n47//7kuhLD5910rpbv/Sl567+2QO/dO33l3d885Gz3jd5wSuvHtU0
uCQ7/cuNj37vnCVkj84vXRM6Ytnqr7yuXfLhiR9OnPDM35Kn73vmAdn3P3nMMTMfTj4RPeD8R37f
lD7vuXdf2No8eMRrZ58fnbr6+R3LPjX78Pc39Nz42kPZR5588a47njrro8uW/cb//pkdY+Pvb2hv
2/Tg1Rf3nbrv0Po9o6dvOv6bZ3/gapf+gfYjLrqmeO4lq4r3HfOOa9698ZiGRx948tvP7bW+Lrrs
g78MXeE/6qXL6jyznzn0/ML2V276/MQ5H+k5N332oysPaGhftTzxi/CO52763HdOe/wxEroidUT3
qXt1ffSbD//tb5f/6MP/8WrbPz7QuOZjob+3zG48ddh/5Fn1zUds+O3n33XxPo+edtKPb/rIveSn
K+46ezs5oNG/+fADHrhkaeze4Psf/FnjE//TnvnYJe+++4X3hn6y7e+3vVx11dGn5ZrjLa+d/siz
TVs+dMXfv5e9xXfb9Qc89ujK3684+tInfzu846J3H9hw+BM/u2j8x4XII/O5q/Pf+Upwr2fuuvSj
9xzpCb5j7vyfH3jHa68/517auOOZoxu+PXR+5K/xMz//9+/2ZE97NP7A4PvWjH/iph89fNSTn/70
+NQJL376fcuqfvbH/U794PiOwm/3nbj73ughG8nyk2444d8u3vrK+hdf/NgxSx7/9fItP/vTF/dd
+ul1pafG/vDT37R//o53vuf0bd956V1PbLvgwYtn9sz+9YmHJ1r+PrUy+c0bHrr5B/sfdvIDV5zx
gO+79T84Y4+zhw69fMmPl1+7duaYW665IPfy//7XmU/f/eB3rlt62NHJPe768/N9ex/V5zr31qfn
n3vpJ7c8fdXStY0vnLfqseIfvn/82Vf948zSx5ZccnXni8G7Prm0bp9DQr/90G8+etFfb7/nwg3j
lz3z8DnHvDJwimfs5T/+vHvD7z9982UffKX//b2nbjnoP68ZCfpev3SP7ZGuTz7edOPmPW64unnp
ecWnVt+77+q9n9jv18sOfecZH/p934qbvvT56Jnh4kNzP7jxkFtu2++F7399x4cPv7z61Y5Hzv32
aPDAfZJz+y/7nzv/7DvgE79/eO0FP56eS76359L37n3B8J6f+uKSqc/9+cFzfnTCvT9ZfX9Lrrp5
73H3xe/a+z/P+foF1zbc+Mu6kw6evP+Qd/QnYt/66YpTY7GjDot2hFYdvf61y545Yul/TPz6nLOu
H7v/jxe4T9ISD+X6zurwbb7n5mNit/6w+kfLk7875oKt2kUH/aIYaG45ev2Sh87vv/FCbdn9fz5l
pjla8+pJTzUP377Pto8csePiuS7vOWcdenvystr4xTeGrrrnwP0Pf32fdcceeOZt2oX/UZ38y4cS
Z3UsP/iJx7bee+PI9XXf/tafjwsctuP6Ey9cV7vpir1jN/b/+Lrl1R/88+0v5mrubLnxoct98/t9
/KgXAt3LH+3Z9x2tj52xfWbL2pOv2PPc93xz36svqt7j/EM3hu/b9uP4A9otpae+cUejf+a0g34z
03Su60enRsi5117b6Qvc3nZF5IQDwje+/0vXnXzhT1/I/K72p9VX/G6Pd91/0rW+x5dP3frX7v++
7fdbJvb/2MFTo+ffc8PK5v896tNLAkM7Pja29wU/TN5y/KbBK0549IOlSxIHjX/uqnfsP/eeK0bv
vTZQc88Rfdd8ZP3nH3jl4x86fs+f3xT4n1NOP/O5hx8bff8N5xz+rbYfhU8MnR99tu/4vzVn3O/9
8POf+PGa1u9MLu1//6fP/+7Kkx/+a+gIz/jXr02cd9FfDp+98aPZpsNuT+43eta/3/vvS69tmB38
+8ivq/f/6Dv/4d6r97wTC7N7fuRT63v2u8S34fLN1w187qzwx9OX3n3pXF3wi8VjznrpybEH70m+
91M/uO7OjtP/dMjqy2u+8AvfH793WmRseqh6/wuufvGPn9nwvWvPPb/5F48sO+4fTe9qWXX+nGeg
+hvXPfL0sqNO/5Xvq48cuOGnn7xV++qt/74p+fTHJ/eJ/sepF3T0HP2HHUvvH01e+MAhS5Zvioe9
T7/7xM9c+cPgz04LLHvswM5lx0xMb/9f9x2nPvDynecdEDryxjvuq0/FNy8fv/vcz9792vqb7tpz
+R1HXXnS/Ueu+8avbhy7ZdX1B65Obln73q+cdNud8T3O/cXFM7fs+5NvHeLfz33W2d4dXWsmju57
5gPH3HDeL/a864L2J68faGi6/r2FCy/a96xjjgl+df/7g/cd4f3AtoMHH6s+cq+O791/6TP+s0P3
ub/38rOtB4c2jN66ZP/s3sceN/DNF0Ln1hX6H/rYH3MfPN5/33j34Akf+oj7sa2fqG3J5Tae+dz9
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

--Boundary-00=_sSQ3Dj7ks5oOV9C
Content-Type: text/x-diff;
  charset="utf-8";
  name="Convert-ASN1-0.19-debian.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="Convert-ASN1-0.19-debian.diff"

#!/bin/sh -e
## Convert-ASN1-0.19-debian.diff by Peter Marschall <peter@adpm.de>
##
## DP: adapted from Debian's official package libconvert-asn1-perl 0.19
## DP: to suit my needs.

if [ $# -lt 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"

case "$1" in
    -patch)
	patch $patch_opts -p0 < $0
	test -d debian  &&  echo `basename $0` >> debian/patchlist
	test -f debian/rules  &&  chmod +x debian/rules
	;;
    -unpatch)
	test -f debian/patchlist  &&  rm -f debian/patchlist
	patch $patch_opts -p0 -R < $0
	;;
    *)
	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
	exit 1
	;;
esac

exit 0

--- debian/compat
+++ debian/compat
@@ -0,0 +1 @@
+4
--- debian/copyright
+++ debian/copyright
@@ -0,0 +1,17 @@
+This package was debianized by Davide Puricelli (evo) <apurice@tin.it> on
+Mon,  7 Aug 2000 17:22:44 +0200.
+
+It was downloaded from http://www.cpan.org/modules/by-module/Convert
+
+Upstream Author: Graham Barr <gbarr@pobox.com>
+
+Copyright:
+
+Copyright (c) 2000 Graham Barr. All rights reserved.
+This package is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+Perl is distributed under your choice of the GNU General Public License or
+the Artistic License.  On Debian GNU/Linux systems, the complete text of the
+GNU General Public License can be found in `/usr/share/common-licenses/GPL'
+and the Artistic Licence in `/usr/share/common-licenses/Artistic'.
--- debian/changelog
+++ debian/changelog
@@ -0,0 +1,69 @@
+libconvert-asn1-perl (0.19-1pm1+svn102) unstable; urgency=low
+
+  * NMU
+    - adapt to upstream SVN revision 102
+
+ -- Peter Marschall <peter@adpm.de>  Sun,  9 Oct 2005 11:54:30 +0200
+
+libconvert-asn1-perl (0.19-1) unstable; urgency=low
+
+  * New Maintainer (Closes: #322096).
+  * New upstream version (Closes: #306379).
+  * Moved debhelper build-dep-indep to Build-Depends.
+  * Better description.
+  * Updated Standards-Version.
+  * Using debhelper 4.
+
+ -- Florian Ragwitz <rafl@debianforum.de>  Fri, 12 Aug 2005 09:39:49 +0200
+
+libconvert-asn1-perl (0.18-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Thu, 23 Oct 2003 17:48:45 +0200
+
+libconvert-asn1-perl (0.16-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Sun, 19 Jan 2003 17:16:51 +0100
+
+libconvert-asn1-perl (0.15-2) unstable; urgency=low
+
+  * debian/copyright: added a pointer to Perl license; closes: #157557.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Mon,  2 Sep 2002 10:40:30 +0200
+
+libconvert-asn1-perl (0.15-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Fri,  2 Aug 2002 12:46:44 +0200
+
+libconvert-asn1-perl (0.11-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Sat, 21 Jul 2001 14:54:08 +0200
+
+libconvert-asn1-perl (0.08-2) unstable; urgency=low
+
+  * Updated debian/rules because of perl 5.6 and new perl policy.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Thu, 15 Feb 2001 21:31:53 +0100
+
+libconvert-asn1-perl (0.08-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Fri,  9 Feb 2001 16:07:26 +0100
+
+libconvert-asn1-perl (0.07-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Davide Puricelli (evo) <evo@debian.org>  Mon,  7 Aug 2000 17:22:44 +0200
+
+Local variables:
+mode: debian-changelog
+End:
--- debian/rules
+++ debian/rules
@@ -0,0 +1,59 @@
+#!/usr/bin/make -f
+
+export PERL_MM_USE_DEFAULT=1
+
+PACKAGE=$(shell dh_listpackages)
+
+ifndef PERL
+PERL = /usr/bin/perl
+endif
+
+TMP     =$(CURDIR)/debian/$(PACKAGE)
+
+build: build-stamp
+build-stamp:
+	dh_testdir
+	$(PERL) Makefile.PL INSTALLDIRS=vendor
+	$(MAKE) OPTIMIZE="-Wall -O2 -g"
+	touch build-stamp
+
+clean:
+	dh_testdir
+	dh_testroot
+	-$(MAKE) distclean
+	dh_clean build-stamp install-stamp
+
+install: build install-stamp
+install-stamp:
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	-$(MAKE) test
+	$(MAKE) install DESTDIR=$(TMP) PREFIX=/usr
+	rmdir --ignore-fail-on-non-empty --parents $(TMP)/usr/lib/perl5
+	touch install-stamp
+
+binary-arch:
+# We have nothing to do by default.
+
+binary-indep: build install
+	dh_testdir
+	dh_testroot
+	dh_installexamples examples/*
+	dh_installdocs
+	dh_installchangelogs ChangeLog
+	dh_perl
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+source diff:                                                                  
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- debian/control
+++ debian/control
@@ -0,0 +1,14 @@
+Source: libconvert-asn1-perl
+Section: perl
+Priority: optional
+Maintainer: Florian Ragwitz <rafl@debianforum.de>
+Build-Depends: debhelper (>= 4.0.0)
+Build-Depends-Indep: perl (>= 5.8.0-7)
+Standards-Version: 3.6.2
+
+Package: libconvert-asn1-perl
+Architecture: all
+Depends: ${perl:Depends}
+Description: Perl module for encoding and decoding ASN.1 data structures
+ Convert::ASN1 will parse ASN.1 descriptions and will encode from and decode to
+ perl data structures using a hierarchy of references.

--Boundary-00=_sSQ3Dj7ks5oOV9C
Content-Type: text/x-diff;
  charset="utf-8";
  name="Convert-ASN1-0.19-svn102.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="Convert-ASN1-0.19-svn102.patch"

#!/bin/sh -e
## Convert-ASN1-svn102.patch by Peter Marschall <peter@adpm.de>
##
## DP: adapt Convert::ASN1 to SVN revision 100

if [ $# -lt 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"

case "$1" in
    -patch)
	patch $patch_opts -p0 < $0
	test -d debian  &&  echo `basename $0` >> debian/patchlist
	;;
    -unpatch)
	test -f debian/patchlist  &&  rm -f debian/patchlist
	patch $patch_opts -p0 -R < $0
	;;
    *)
	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
	exit 1
	;;
esac

exit 0

--- lib/Convert/ASN1/Debug.pm
+++ lib/Convert/ASN1/Debug.pm	2005-09-29 10:19:28.000000000 +0200
@@ -1,11 +1,9 @@
-# Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
 
 package Convert::ASN1;
 
-# $Id: Debug.pm,v 1.8 2003/05/06 14:17:43 gbarr Exp $
-
 ##
 ## just for debug :-)
 ##
--- lib/Convert/ASN1/_decode.pm
+++ lib/Convert/ASN1/_decode.pm	2005-09-29 10:19:28.000000000 +0200
@@ -1,16 +1,12 @@
-# Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
 
 package Convert::ASN1;
 
-# $Id: _decode.pm,v 1.18 2003/05/07 09:26:36 gbarr Exp $
-
 BEGIN {
-  unless (CHECK_UTF8) {
     local $SIG{__DIE__};
-    eval { require bytes } and 'bytes'->import
-  }
+  eval { require bytes and 'bytes'->import };
 }
 
 # These are the subs that do the decode, they are called with
@@ -508,7 +504,7 @@
 
   my $mode = $_dec_time_opt{$_[0]->{'decode_time'} || ''} || 0;
 
-  if ($mode == 2) {
+  if ($mode == 2 or $_[6] == 0) {
     $_[3] = substr($_[4],$_[5],$_[6]);
     return;
   }
--- lib/Convert/ASN1/_encode.pm
+++ lib/Convert/ASN1/_encode.pm	2005-10-07 18:58:25.000000000 +0200
@@ -1,11 +1,9 @@
-# Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
 
 package Convert::ASN1;
 
-# $Id: _encode.pm,v 1.19 2003/10/08 12:28:09 gbarr Exp $
-
 BEGIN {
   unless (CHECK_UTF8) {
     local $SIG{__DIE__};
@@ -116,7 +114,7 @@
 
   if (ref($_[3])) {
     my $less = (8 - ($_[3]->[1] & 7)) & 7;
-    my $len = ($_[3]->[1] + 7)/8;
+    my $len = ($_[3]->[1] + 7) >> 3;
     $_[4] .= asn_encode_length(1+$len);
     $_[4] .= chr($less);
     $_[4] .= substr($$vref, 0, $len);
@@ -398,7 +396,7 @@
 sub _enc_bcd {
 # 0      1    2       3     4     5      6
 # $optn, $op, $stash, $var, $buf, $loop, $path
-  my $str = sprintf("%d",$_[3]);
+  my $str = ("$_[3]" =~ /^(\d+)/) ? $1 : "";
   $str .= "F" if length($str) & 1;
   $_[4] .= asn_encode_length(length($str) / 2);
   $_[4] .= pack("H*", $str);
--- lib/Convert/ASN1/IO.pm
+++ lib/Convert/ASN1/IO.pm	2005-09-29 10:19:28.000000000 +0200
@@ -1,11 +1,9 @@
-# Copyright (c) 2000-2004 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
 
 package Convert::ASN1;
 
-# $Id: IO.pm 87 2005-03-04 02:03:40Z gbarr $
-
 use strict;
 use Socket;
 
--- lib/Convert/ASN1/parser.pm
+++ lib/Convert/ASN1/parser.pm	2005-09-29 10:19:28.000000000 +0200
@@ -3,14 +3,12 @@
 
 # 22 "parser.y"
 
-;# Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+;# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 ;# This program is free software; you can redistribute it and/or
 ;# modify it under the same terms as Perl itself.
 
 package Convert::ASN1::parser;
 
-;# $Id: parser.pm,v 1.12 2003/05/07 15:13:28 gbarr Exp $
-
 use strict;
 use Convert::ASN1 qw(:all);
 use vars qw(
--- lib/Convert/ASN1.pod
+++ lib/Convert/ASN1.pod	2005-10-03 13:43:23.000000000 +0200
@@ -1,6 +1,6 @@
 =head1 NAME
 
-  Convert::ASN1 - ASN.1 Encode/Decode library
+Convert::ASN1 - ASN.1 Encode/Decode library
 
 =head1 SYNOPSYS
 
@@ -436,7 +436,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
--- Makefile.PL
+++ Makefile.PL	2005-09-29 10:19:29.000000000 +0200
@@ -22,7 +22,7 @@
 
   return <<POSTAMBLE;
 
-distdir : distsign
+mydist : manifest distsign dist
 
 run_byacc:
 	\$(PERL) mkparse parser.y lib/Convert/ASN1/parser.pm
--- parser.y
+++ parser.y	2005-09-29 10:19:29.000000000 +0200
@@ -20,14 +20,12 @@
 %token BY 20
 
 %{
-# Copyright (c) 2000-2002 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
 
 package Convert::ASN1::parser;
 
-;# $Id: parser.y,v 1.11 2003/05/07 15:13:27 gbarr Exp $
-
 use strict;
 use Convert::ASN1 qw(:all);
 use vars qw(
--- README
+++ README	2005-09-29 10:19:29.000000000 +0200
@@ -7,7 +7,7 @@
 Convert::ASN1 will parse ASN.1 descriptions and will encode from and
 decode to perl data structures using a hierarchy of references.
 
-Copyright (c) 2000-2002 Graham Barr. All rights reserved.
+Copyright (c) 2000-2005 Graham Barr. All rights reserved.
 This package is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
@@ -33,5 +33,3 @@
 If you find any bugs with Convert::ASN1, please report then via
 
   bugs-Convert-ASN1@rt.cpan.org
-
-$Id: README,v 1.4 2002/08/19 23:59:18 gbarr Exp $
--- t/00prim.t
+++ t/00prim.t	2005-09-29 10:19:28.000000000 +0200
@@ -6,7 +6,7 @@
 
 use Convert::ASN1 qw(:all);
 
-print "1..166\n";
+print "1..182\n";
 
 BEGIN { require 't/funcs.pl' }
 
@@ -237,8 +237,13 @@
 ##
 
 my %BCD = (
+  pack("C*", 0x04, 0x09, 0x12, 0x34, 0x56, 0x78, 0x91, 0x23, 0x45, 0x67, 0x89), "123456789123456789",
   pack("C*", 0x04, 0x04, 0x12, 0x34, 0x56, 0x78), 12345678,
   pack("C*", 0x04, 0x02, 0x56, 0x4f),             564,
+  pack("C*", 0x04, 0x00),             "",
+  pack("C*", 0x04, 0x00),             -1,
+  pack("C*", 0x04, 0x01, 0x0f),             0,
+  pack("C*", 0x04, 0x01, 0x2f),             2.2,
 );
 
 
@@ -248,6 +253,7 @@
   btest $test++, $asn->prepare('bcd BCDString') or warn $asn->error;
   stest $test++, $result, $asn->encode(bcd => $val) or warn $asn->error;
   btest $test++, $ret = $asn->decode($result) or warn $asn->error;
+  $val =~ s/\D.*//;
   stest $test++, $val, $ret->{'bcd'};
 }
 
--- t/06bigint.t
+++ t/06bigint.t	2005-09-29 10:19:28.000000000 +0200
@@ -9,7 +9,7 @@
 
 $^W=0 if $] < 5.005; # BigInt in 5.004 has undef issues
 
-print "1..59\n";
+print "1..67\n";
 
 btest 1, $asn = Convert::ASN1->new or warn $asn->error;
 btest 2, $asn->prepare(q(
@@ -107,3 +107,18 @@
 
 }
 
+my %BCD = (
+  pack("C*", 0x04, 0x05, 0x10, 0x73, 0x74, 0x18, 0x24),	     2**30,
+  pack("C*", 0x04, 0x00),	     -2**30,
+);
+
+while(($result,$val) = each %BCD) {
+  print "# BCDString $val\n";
+
+  btest $test++, $asn->prepare('bcd BCDString') or warn $asn->error;
+  stest $test++, $result, $asn->encode(bcd => $val) or warn $asn->error;
+  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
+  $val =~ s/\D.*//;
+  stest $test++, $val, $ret->{'bcd'};
+}
+

--Boundary-00=_sSQ3Dj7ks5oOV9C--
0
peter
1/29/2006 6:08:44 PM
--BwCQnh7xodEAoBMC
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Jan 29, 2006 at 1744 +0000, Chris Ridd appeared and said:
>=20
> Can you send us the actual raw bytes that Convert::ASN1's trying to decod=
e?

Here is the dump I got. I changed to the original OpenLDAP server, so
you have different DNs. I did the query with the string
"(uid=3Drene.pfeiffer)":

Net::LDAP=3DHASH(0x8456bb4) sending:

30 81 BA 02 01 02 63 81 B4 04 24 6F 75 3D 75 73 0.....c...$ou=3Dus
65 72 73 2C 6F 75 3D 61 63 63 6F 75 6E 74 73 2C ers,ou=3Daccounts,
64 63 3D 67 72 75 65 6E 65 2C 64 63 3D 61 74 0A dc=3Dgruene,dc=3Dat.
01 02 0A 01 02 02 01 01 02 01 3C 01 01 00 A3 14 ..........<.....
04 03 75 69 64 04 0D 72 65 6E 65 2E 70 66 65 69 ..uid..rene.pfei
66 66 65 72 30 67 04 03 75 69 64 04 02 63 6E 04 ffer0g..uid..cn.
04 6D 61 69 6C 04 0D 61 63 63 6F 75 6E 74 53 74 .mail..accountSt
61 74 75 73 04 0D 6D 61 69 6C 51 75 6F 74 61 53 atus..mailQuotaS
69 7A 65 04 14 6D 61 69 6C 41 6C 74 65 72 6E 61 ize..mailAlterna
74 65 41 64 64 72 65 73 73 04 15 6D 61 69 6C 46 teAddress..mailF
6F 72 77 61 72 64 69 6E 67 41 64 64 72 65 73 73 orwardingAddress
04 0B 64 65 73 63 72 69 70 74 69 6F 6E __ __ __ ..description

Net::LDAP=3DHASH(0x8456bb4) received:

30 81 F7 02 01 02 64 81 F1 04 36 75 69 64 3D 72 0.....d...6uid=3Dr
65 6E 65 2E 70 66 65 69 66 66 65 72 2C 6F 75 3D ene.pfeiffer,ou=3D
75 73 65 72 73 2C 6F 75 3D 61 63 63 6F 75 6E 74 users,ou=3Daccount
73 2C 64 63 3D 67 72 75 65 6E 65 2C 64 63 3D 61 s,dc=3Dgruene,dc=3Da
74 30 81 B6 30 18 04 0D 61 63 63 6F 75 6E 74 53 t0..0...accountS
74 61 74 75 73 31 07 04 05 61 6B 74 69 76 30 21 tatus1...aktiv0!
04 04 6D 61 69 6C 31 19 04 17 72 65 6E 65 2E 70 ..mail1...rene.p
66 65 69 66 66 65 72 40 67 72 75 65 6E 65 2E 61 feiffer@gruene.a
74 30 16 04 03 75 69 64 31 0F 04 0D 72 65 6E 65 t0...uid1...rene
2E 70 66 65 69 66 66 65 72 30 2D 04 14 6D 61 69 .pfeiffer0-..mai
6C 41 6C 74 65 72 6E 61 74 65 41 64 64 72 65 73 lAlternateAddres
73 31 15 04 13 6C 64 61 70 61 64 6D 69 6E 40 67 s1...ldapadmin@g
72 75 65 6E 65 2E 61 74 30 16 04 02 63 6E 31 10 ruene.at0...cn1.
04 0E 52 65 6E C3 A9 20 50 66 65 69 66 66 65 72 ..Ren.. Pfeiffer
30 18 04 0D 6D 61 69 6C 51 75 6F 74 61 53 69 7A 0...mailQuotaSiz
65 31 07 04 05 33 30 37 32 30 __ __ __ __ __ __ e1...30720

Net::LDAP=3DHASH(0x8456bb4) sending:

30 05 02 01 03 42 00 __ __ __ __ __ __ __ __ __ 0....B.

> Perhaps it *is* a 64-bit problem, though it is also possible that the
> servers involved are sending something back that we're not expecting.

I'll try to move the tree to a x86 32-bit test server and check if the
problem persists.

Best,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--BwCQnh7xodEAoBMC
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD3SgweMu5lRpXJ7kRAvW8AJwOs+vXx5+cJlTBi9kTpF2vdKfLDwCdGROE
tJP0mXfDplMV9+7zCIFV7zw=
=khMZ
-----END PGP SIGNATURE-----

--BwCQnh7xodEAoBMC--
0
lynx
1/29/2006 8:40:16 PM
--ZwgA9U+XZDXt4+m+
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Re!

On Jan 29, 2006 at 1908 +0100, Peter Marschall appeared and said:
> [...]
> 1) the error goes away if "use encoding 'utf8'"  is not used.
> 2) the error disappears also if debug(3) is used [i.e. only asn_hexdump()
>     is used to display debug information and not asn_dump()]

When using the Debian packages the error persisted even with debug
turned on.

> 3) the error vanishes also with the following patch to
>    Convert::ASN1
>=20
> --- Convert/ASN1.pm    2005-09-29 10:19:28.000000000 +0200
> +++ Convert/ASN1.pm    2006-01-29 18:04:23.000000000 +0100
> @@ -15,6 +15,8 @@
>=20
>  BEGIN {
>=20
> +  local $SIG{__DIE__};
> +  eval { require bytes and 'bytes'->import };
>    if (CHECK_UTF8) {
>      require Encode;
>      require utf8;

I assumed that the OpenLDAP <-> Net::LDAP communication and the internal
data processing of Net::LDAP is always done in UTF-8.

> Browsing through the changes between Convert::ASN1 0.19 and SVN revision =
102 I=20
> found that in SVN rev 99 committed a fix for exactly this case.
>=20
> Unfortunately this fix was not complete as it does not cover the [border]=
 case=20
> of debugging using asn_dump().
>=20
> The patch given above fixes this case, but I do not know if it is the cor=
rect=20
> one for all other cases.
> I don't like it very much: it changes ASN1.pm to fix a problem that arise=
s in=20
> ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
> to find a better one, but I hope Graham and Chris read this mail and ... =
;-)))
>=20
> > I have really no idea what to test next or what to code differently, so
> > if you want me to run any other code please feel free to send
> > suggestions.
>=20
> If you want to you may try my private .deb which I have attached as well.

I just installed it on my workstation and the error disappears. The
query is processed just fine and the data gets displayed as it should
be. I am going to try the same .deb or a patch on my AMD64 workstation
in the office to see what changes on this architecture.=20

A big thank you for this.

Best,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--ZwgA9U+XZDXt4+m+
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD3Ss6eMu5lRpXJ7kRAv1aAKC9HSzlu+adslBYfxPiZtZo1XMvqgCfZDSd
HglxcBIP8j64xLFgC64AZYg=
=EyoR
-----END PGP SIGNATURE-----

--ZwgA9U+XZDXt4+m+--
0
lynx
1/29/2006 8:53:14 PM
On 29/1/06 6:08, Peter Marschall <peter@adpm.de> wrote:
=20
> The patch given above fixes this case, but I do not know if it is the cor=
rect
> one for all other cases.
> I don't like it very much: it changes ASN1.pm to fix a problem that arise=
s in
> ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
> to find a better one, but I hope Graham and Chris read this mail and ... =
;-)))

I think you ought to commit the change, as it obviously fixes Ren=E9's bug.
Maybe we (more likely Graham) can fine tune it afterwards, but if it fixes
things already...

Cheers,

Chris


0
chrisridd
1/31/2006 6:23:06 PM
On Tue, January 31, 2006 12:23 pm, Chris Ridd wrote:
> On 29/1/06 6:08, Peter Marschall <peter@adpm.de> wrote:
>
>> The patch given above fixes this case, but I do not know if it is the
>> correct
>> one for all other cases.
>> I don't like it very much: it changes ASN1.pm to fix a problem that
>> arises in
>> ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
>> to find a better one, but I hope Graham and Chris read this mail and ...
>> ;-)))
>
> I think you ought to commit the change, as it obviously fixes Ren´┐Ż's bug.
> Maybe we (more likely Graham) can fine tune it afterwards, but if it fixes
> things already...

Sure submit it. I have never been able to figure out why use encoding
caused this issue. The pragma is only supposed to tell perl that the
script is written in that encoding. Why it affects modules I do not know.

Graham.


0
gbarr
1/31/2006 7:58:54 PM
--32u276st3Jlj2kUU
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Jan 31, 2006 at 1823 +0000, Chris Ridd appeared and said:
> On 29/1/06 6:08, Peter Marschall <peter@adpm.de> wrote:
> =20
> > The patch given above fixes this case, but I do not know if it is the c=
orrect
> > one for all other cases.
> > I don't like it very much: it changes ASN1.pm to fix a problem that ari=
ses in
> > ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
> > to find a better one, but I hope Graham and Chris read this mail and ..=
=2E ;-)))
>=20
> I think you ought to commit the change, as it obviously fixes Ren=C3=A9's=
 bug.
> Maybe we (more likely Graham) can fine tune it afterwards, but if it fixes
> things already...

Yes, it does so far. I use the patch on two development machines and it
works without problems. If you want me to do some more tests or want to
run debug scripts, just let me know.

Best,
Ren=C3=A9.

--=20
  )\._.,--....,'``.      Let GNU/Linux work for you while you take a nap.
 /,   _.. \   _\  (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs=
=2Eat/
`._.-(,_..'--(,_..'`-.;.'  - System administration + Consulting + Teaching -


--32u276st3Jlj2kUU
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFD4J8keMu5lRpXJ7kRAky0AJ92C+oMNb5Im9rOiv6S/XI9NKhW5wCfd4UJ
jSyLsvxNnlEQoNAwKE+Yhpo=
=Of7f
-----END PGP SIGNATURE-----

--32u276st3Jlj2kUU--
0
lynx
2/1/2006 11:44:36 AM
Hi,

done as requested ;-)

Peter

On Tuesday, 31. January 2006 20:58, Graham Barr wrote:
> On Tue, January 31, 2006 12:23 pm, Chris Ridd wrote:
> > On 29/1/06 6:08, Peter Marschall <peter@adpm.de> wrote:
> >> The patch given above fixes this case, but I do not know if it is the
> >> correct
> >> one for all other cases.
> >> I don't like it very much: it changes ASN1.pm to fix a problem that
> >> arises in
> >> ASN1/Debug.pm. I don't understand the internals of Convert::ASN1 enough
> >> to find a better one, but I hope Graham and Chris read this mail and .=
=2E.
> >> ;-)))
> >
> > I think you ought to commit the change, as it obviously fixes Ren=E9's =
bug.
> > Maybe we (more likely Graham) can fine tune it afterwards, but if it
> > fixes things already...
>
> Sure submit it. I have never been able to figure out why use encoding
> caused this issue. The pragma is only supposed to tell perl that the
> script is written in that encoding. Why it affects modules I do not know.
>
> Graham.

=2D-=20
Peter Marschall
eMail: peter@adpm.de
0
peter
2/3/2006 5:38:27 PM
Reply:

Similar Artilces:

Net::LDAP and Net:LDAP::LDIF read & add problems
I'm trying to read in a simple LDIF file to add an entry to my LDAP server. Here is the basic routine (extraneous details omitted for brevity and security): $ldif = Net::LDAP::LDIF->new($tmp,"r",onerror => 'warn'); $entry = $ldif->ready_entry(); $ldap = Net::LDAP->new($LDAPSERVER); $result=$ldap->bind("$binddn",password=>"$bindpass",version=>"3"); $result=$ldap->add($entry); Now, everything seems to work until I get to the $ldap->add method. From that I get various versions of the following: object...

Net::LDAP and Net:LDAP::LDIF read & add problems #2
I'm trying to read in a simple LDIF file to add an entry to my LDAP server. Here is the basic routine (extraneous details omitted for brevity and security): $ldif = Net::LDAP::LDIF->new($tmp,"r",onerror => 'warn'); $entry = $ldif->ready_entry(); $ldap = Net::LDAP->new($LDAPSERVER); $result=$ldap->bind("$binddn",password=>"$bindpass",version=>"3"); $result=$ldap->add($entry); Now, everything seems to work until I get to the $ldap->add method. From that I get various versions of the following: obj...

Net::LDAP->root_dse() not returning an error (when LDAP server does)
Hello, I'm experimenting with "start_tls()" in Net::LDAP. The manual suggests to check the RootDSE for LDAPv3 and TLS extension. Somhow I managed that creating the LDAP object (i.e. connect) suceeds, but $ldap->root_dse() returns undef. Interesting to say that you cannot get much information out of an undef: May code fragment is this: sub start_TLS($$) { my ($ldap, $q) = @_; my $dse = $ldap->root_dse(); if ($dse && $dse->supported_version(3) && $dse->supported_extension(LDAP_EXTENSION_START_TLS)) { ...

LDAP &amp; ASP.Net Error &quot;Network Path Not Found&quot;
Hi I'm trying to authenticate the Email id with the LDAP server. The attached code works fine if i run with Console application or Windows application. But I'm getting an error if i make it as ASP.net Web application. "SearchResultCollection ResEnt = mySearcher.FindAll();" this method throws "Network Path Not Found" Error. Please help me out! is there any settings needs to be done? DirectoryEntry entry = new DirectoryEntry("LDAP://CMRNT029:389/O=TRW"); DirectorySearcher mySearcher = new DirectorySearcher(entry); mySearcher.Filter = &quo...

make Net::LDAP::LDIF more similar to Net::LDAP
Hi Graham, hi Chris, hi list, I would like to rework Net::LDAP::LDIF a bit so that its API resembles that of Net::LDAP a bit more while still keeping the traditional API. The reason for this is that in application I often need to distinguish between Net::LDAP and Net::LDAP::LDIF because some methods are only implemented on one side. I\'d like to start with a code() method that tries to mimic the Net::LDAP one and I\'d like to extend the Net::LDAP::Entry->update() method so that it takes a Net::LDAP::LDIF object as an argument. The latter one requires a...

Help.... Net::LDAP error 84 (decode error) ..
For almost 1 year my script who queries a lotus notes LDAP server worked without any problem.... but since 3 days ago it stoped working.. Im not aware of any changes made on the Lotus Notes LDAP side.. here is a snippet of the $ldap-debug(3) --- 3D 44 49 53 2F 4F 55 3D 4D 54 59 2F 4F 3D 43 46 =DIS/OU=MTY/O=CF 45 04 2F 43 4E 3D 41 6C 6D 61 20 43 68 61 76 61 E./CN=Alma Chava 72 72 69 61 20 4D 61 72 72 6F 71 75 69 6E 2F 4F rria Marroquin/O 55 3D 44 49 53 2F 4F 55 3D 4D 54 59 2F 4F 3D 43 U=DIS/OU=MTY/O=C 46 45 04 2A 43 4E 3D 41 6C 6D 61 20 47 61 6C 69 FE.*CN=Alma Gali 6E 64 6F 20 46 6C...

Secure LDAP (ldaps)
hi I have implemented ldap authentication in our application using the sample given in "LDAP using EAServer and Powerbuilder" document. It is succefully implemented. But the network people has asked me to connect on secure port (ldaps) now. My problem is i don't know what i kind of setting i should do now on EAServer box and what i should do on the clients. I assume there is nothing to be done on the client because the call to ldap check is initiated from the EAServer Server to LDAP server using EJB (calling JNDI API). We are runnig EAServer on JDK 1.3. Can someone g...

[Fwd: make Net::LDAP::LDIF more similar to Net::LDAP]
--------------95D5815B06BDC2BD1A0ABFEB Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit --------------95D5815B06BDC2BD1A0ABFEB Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Mozilla-Status2: 00000000 Message-ID: <40C7B13E.8864E5A0@cs.adelaide.edu.au> Date: Thu, 10 Jun 2004 10:54:22 +1000 From: Sion Camilleri <sion@cs.adelaide.edu.au> Reply-To: sion@cs.adelaide.edu.au X-Mailer: Mozilla 4.8 [en] (Windows NT 5.0; U) X-Accept-Language: en MIME-Version: 1.0 To: Graham Barr <gbarr@pobox.com>...

iManager error with Error: NMAS LDAP Transport Error javax.naming.CommunicationException: [LDAP: error code 2
I have a problem exactly as related in tid (3947462), but the fix that I tried as posted in the TID did not do anything to rectify the problem. My server shows only 6 nmasldap before and after performing nmasinstall. This is a netware 6.5 server with service pack 5. No additional configuration changes or service packs were installed on the server since the last time this part of the functionality worked. The document says that there are 2 possible causes. The second cause, I don't beleive applies as there is only 1 netware server. I ran both the nmasinstall command on a wi...

Fw: Re: make Net::LDAP::LDIF more similar to Net::LDAP
Am 08.06.2004 um 18:29 Uhr haben Sie geschrieben: > On 8 Jun 2004, at 16:56, peter@adpm.de wrote: > > I\'d like to start with a code() method that tries to mimic the >> Net::LDAP one and >I assume you mean better error handling ? My first goal is having a code() method in Net::LDAP::LDIF. > > I\'d like to extend the > > Net::LDAP::Entry->update() method so that it takes a > > Net::LDAP::LDIF object as an argument. The latter one > > requires a bit of work in Net::LDAP::LDIF to make it > > correct. > Not su...

Net::LDAP v0.28, bug in Net::LDAP::Constant, :all not supported
Net::LDAP::Constant no longer supports the :all tag in the export list due to the switch from Exporter to a manual export routine. So, while the following: perl -MNet::LDAP::Constant=:all -e 1 worked fine in 0.2701, it now dies with the error: ":all" is not exported by the Net::LDAP::Constant module at -e line 0 Can't continue after import errors at -e line 0 BEGIN failed--compilation aborted, <DATA> line 197. The documentation for Net::LDAP::Constant still documents the ':all' tag. I am not subscribed to the list, so if some...

Fw: Re: make Net::LDAP::LDIF more similar to Net::LDAP #2
Hi, Am 09.06.2004 um 01:44 Uhr haben Sie geschrieben: > Extending Net::LDAP::Entry to update against LDIF and LDAP objects > could allow the changetype modifications to be to produced. > > This would be really useful to produce changetypes for entry objects by > updating against an LDIF object to produce the changetype LDIF required > up to synchronise entry objects. as Graham posted you can to that already now. Simply create your Net::LDAP::Entry object with the changes option set to TRUE. Having created the ::LDIF object that way you autom...

POA LDAP Authentication
Dear Sirs I have GroupWise and Messenger installed but the passwords are different, so i want to configure LDAP Auth for the POA, i complete the configuration that i found in docs but when i want to login in GroupWise Client i can't. I get the error 81 LDAP Error in the POA log file. I can access the LDAP server from outlook Express and with ldapsearch, but can do a login with GroupWise Client. Im using this ldapsearch command: ldapsearch -x -B 'cn=admined,o=myorg' -b 'o=myorg' -W I'm ussing High security level with LDAP ...

Net::LDAP based LDAP server available?
Hi, has anybody tried to build an LDAP server based on Net::LDAP or Convert::ASN1 yet? Thanks for any hint. Enrik ...