You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(9) |
Nov
(4) |
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(23) |
Feb
(18) |
Mar
(11) |
Apr
(3) |
May
(23) |
Jun
(13) |
Jul
(16) |
Aug
(11) |
Sep
(5) |
Oct
(4) |
Nov
(2) |
Dec
(4) |
2003 |
Jan
(18) |
Feb
(13) |
Mar
(56) |
Apr
(3) |
May
(124) |
Jun
(21) |
Jul
(2) |
Aug
(8) |
Sep
(1) |
Oct
(23) |
Nov
(4) |
Dec
(2) |
2004 |
Jan
(18) |
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Graham B. <gb...@us...> - 2002-02-10 16:41:31
|
Update of /cvsroot/perl-ldap/asn/examples In directory usw-pr-cvs1:/tmp/cvs-serv14396/examples Added Files: x509decode Log Message: Added x509decode from Norbert Klasen --- NEW FILE: x509decode --- #!/usr/bin/perl # $Id: x509decode,v 1.1 2002/02/10 16:41:28 gbarr Exp $ # (c) 2001-2002 Norbert Klasen, DAASI International GmbH. All rights reserved. # This package is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # decode X.509 certificates # # varable naming # Convert::ASN1 objects are prefixed with asn_ # variables holding binary DER content are prefixed with der_ use strict; use Data::Dumper; $Data::Dumper::Indent=1; $Data::Dumper::Quotekeys=1; $Data::Dumper::Useqq=1; use Convert::ASN1 qw(:io :debug); # parse ASN.1 desciptions my $asn = Convert::ASN1->new; $asn->prepare(<<ASN1) or die "prepare: ", $asn->error; -- ASN.1 from RFC2459 and X.509(2001) -- Adapted for use with Convert::ASN1 -- $Id: x509decode,v 1.1 2002/02/10 16:41:28 gbarr Exp $ -- attribute data types -- Attribute ::= SEQUENCE { type AttributeType, values SET OF AttributeValue -- at least one value is required -- } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= DirectoryString --ANY AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } -- naming data types -- Name ::= CHOICE { -- only one possibility for now rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName DistinguishedName ::= RDNSequence RelativeDistinguishedName ::= SET OF AttributeTypeAndValue --SET SIZE (1 .. MAX) OF -- Directory string type -- DirectoryString ::= CHOICE { teletexString TeletexString, --(SIZE (1..MAX)), printableString PrintableString, --(SIZE (1..MAX)), bmpString BMPString, --(SIZE (1..MAX)), universalString UniversalString, --(SIZE (1..MAX)), utf8String UTF8String, --(SIZE (1..MAX)), ia5String IA5String --added for EmailAddress } -- certificate and CRL specific structures begin here Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version OPTIONAL, --DEFAULT v1 serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 extensions [3] EXPLICIT Extensions OPTIONAL -- If present, version shall be v3 } Version ::= INTEGER --{ v1(0), v2(1), v3(2) } CertificateSerialNumber ::= INTEGER Validity ::= SEQUENCE { notBefore Time, notAfter Time } Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } UniqueIdentifier ::= BIT STRING SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } Extensions ::= SEQUENCE OF Extension --SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN OPTIONAL, --DEFAULT FALSE, extnValue OCTET STRING } AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY } --extensions AuthorityKeyIdentifier ::= SEQUENCE { keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } -- authorityCertIssuer and authorityCertSerialNumber shall both -- be present or both be absent KeyIdentifier ::= OCTET STRING SubjectKeyIdentifier ::= KeyIdentifier -- key usage extension OID and syntax -- id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING --{ -- digitalSignature (0), -- nonRepudiation (1), -- keyEncipherment (2), -- dataEncipherment (3), -- keyAgreement (4), -- keyCertSign (5), -- cRLSign (6), -- encipherOnly (7), -- decipherOnly (8) } -- private key usage period extension OID and syntax -- id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE { notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL } -- either notBefore or notAfter shall be present -- certificate policies extension OID and syntax -- id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } CertificatePolicies ::= SEQUENCE OF PolicyInformation PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, policyQualifiers SEQUENCE OF PolicyQualifierInfo } --OPTIONAL } CertPolicyId ::= OBJECT IDENTIFIER PolicyQualifierInfo ::= SEQUENCE { policyQualifierId PolicyQualifierId, qualifier ANY } --DEFINED BY policyQualifierId } -- Implementations that recognize additional policy qualifiers shall -- augment the following definition for PolicyQualifierId PolicyQualifierId ::= OBJECT IDENTIFIER --( id-qt-cps | id-qt-unotice ) -- CPS pointer qualifier CPSuri ::= IA5String -- user notice qualifier UserNotice ::= SEQUENCE { noticeRef NoticeReference OPTIONAL, explicitText DisplayText OPTIONAL} NoticeReference ::= SEQUENCE { organization DisplayText, noticeNumbers SEQUENCE OF INTEGER } DisplayText ::= CHOICE { visibleString VisibleString , bmpString BMPString , utf8String UTF8String } -- policy mapping extension OID and syntax -- id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } PolicyMappings ::= SEQUENCE OF SEQUENCE { issuerDomainPolicy CertPolicyId, subjectDomainPolicy CertPolicyId } -- subject alternative name extension OID and syntax -- id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE OF GeneralName GeneralName ::= CHOICE { otherName [0] AnotherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ANY, --ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER } -- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as -- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax AnotherName ::= SEQUENCE { type OBJECT IDENTIFIER, value [0] EXPLICIT ANY } --DEFINED BY type-id } EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString } -- issuer alternative name extension OID and syntax -- id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } IssuerAltName ::= GeneralNames -- id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } SubjectDirectoryAttributes ::= SEQUENCE OF Attribute -- basic constraints extension OID and syntax -- id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } BasicConstraints ::= SEQUENCE { cA BOOLEAN OPTIONAL, --DEFAULT FALSE, pathLenConstraint INTEGER OPTIONAL } -- name constraints extension OID and syntax -- id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } GeneralSubtrees ::= SEQUENCE OF GeneralSubtree GeneralSubtree ::= SEQUENCE { base GeneralName, minimum [0] BaseDistance OPTIONAL, --DEFAULT 0, maximum [1] BaseDistance OPTIONAL } BaseDistance ::= INTEGER -- policy constraints extension OID and syntax -- id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } PolicyConstraints ::= SEQUENCE { requireExplicitPolicy [0] SkipCerts OPTIONAL, inhibitPolicyMapping [1] SkipCerts OPTIONAL } SkipCerts ::= INTEGER -- CRL distribution points extension OID and syntax -- id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} cRLDistributionPoints ::= SEQUENCE OF DistributionPoint DistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, reasons [1] ReasonFlags OPTIONAL, cRLIssuer [2] GeneralNames OPTIONAL } DistributionPointName ::= CHOICE { fullName [0] GeneralNames, nameRelativeToCRLIssuer [1] RelativeDistinguishedName } ReasonFlags ::= BIT STRING --{ -- unused (0), -- keyCompromise (1), -- cACompromise (2), -- affiliationChanged (3), -- superseded (4), -- cessationOfOperation (5), -- certificateHold (6), -- privilegeWithdrawn (7), -- aACompromise (8) } -- extended key usage extension OID and syntax -- id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} ExtKeyUsageSyntax ::= SEQUENCE OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER -- extended key purpose OIDs -- id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } -- id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } -- id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } -- id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } -- id-kp-ipsecEndSystem OBJECT IDENTIFIER ::= { id-kp 5 } -- id-kp-ipsecTunnel OBJECT IDENTIFIER ::= { id-kp 6 } -- id-kp-ipsecUser OBJECT IDENTIFIER ::= { id-kp 7 } -- id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } ASN1 # decoders for basic types my $asn_BitString = Convert::ASN1->new(); $asn_BitString->prepare("bitString BIT STRING"); my $asn_OctetString = Convert::ASN1->new(); $asn_OctetString->prepare("octetString OCTET STRING"); # decoders for extensions my %extnoid2asn = ( '2.5.29.9' => $asn->find('SubjectDirectoryAttributes'), '2.5.29.14' => $asn_OctetString, #'SubjectKeyIdentifier', '2.5.29.15' => $asn_BitString, #'keyUsage', '2.5.29.16' => $asn->find('PrivateKeyUsagePeriod'), '2.5.29.17' => $asn->find('SubjectAltName'), '2.5.29.18' => $asn->find('IssuerAltName'), '2.5.29.19' => $asn->find('BasicConstraints'), # '2.5.29.20' => 'cRLNumber', # '2.5.29.21' => 'cRLReasons', # '2.5.29.23' => 'holdInstructionCode', # '2.5.29.24' => 'invalidityDate', # '2.5.29.27' => 'deltaCRLIndicator', # '2.5.29.28' => 'issuingDistributionPoint', # '2.5.29.29' => 'certificateIssuer', '2.5.29.30' => $asn->find('NameConstraints'), '2.5.29.31' => $asn->find('cRLDistributionPoints'), '2.5.29.32' => $asn->find('CertificatePolicies'), '2.5.29.33' => $asn->find('PolicyMappings'), '2.5.29.35' => $asn->find('AuthorityKeyIdentifier'), '2.5.29.36' => $asn->find('PolicyConstraints'), '2.5.29.37' => $asn->find('ExtKeyUsageSyntax'), # '2.5.29.40' => 'cRLStreamIdentifier', # '2.5.29.44' => 'cRLScope', # '2.5.29.45' => 'statusReferrals', # '2.5.29.46' => 'freshestCRL', # '2.5.29.47' => 'orderedList', # '2.5.29.51' => 'baseUpdateTime', # '2.5.29.53' => 'deltaInfo', # '2.5.29.54' => 'inhibitAnyPolicy', # netscape-cert-extensions '2.16.840.1.113730.1.1' => $asn_BitString, # netscape-cert-type '2.16.840.1.113730.1.2' => $asn->find('DirectoryString'), # netscape-base-url '2.16.840.1.113730.1.3' => $asn->find('DirectoryString'), # netscape-revocation-url '2.16.840.1.113730.1.4' => $asn->find('DirectoryString'), # netscape-ca-revocation-url '2.16.840.1.113730.1.7' => $asn->find('DirectoryString'), # netscape-cert-renewal-url '2.16.840.1.113730.1.8' => $asn->find('DirectoryString'), # netscape-ca-policy-url '2.16.840.1.113730.1.12' => $asn->find('DirectoryString'), # netscape-ssl-server-name '2.16.840.1.113730.1.13' => $asn->find('DirectoryString'), # netscape-comment ); my $asn_cert = $asn->find('Certificate'); while ( my $filename = shift ) { my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat $filename; open FILE, "<$filename" or die "no such file"; binmode FILE; my $der_cert; read FILE, $der_cert, $size; close FILE; decodeCert( $der_cert ); } sub decodeCert() { my $der_cert = shift; #asn_dump( $der_cert ); my $cert = $asn_cert->decode($der_cert) or die $asn_cert->error; #extensions foreach my $extension ( @{$cert->{'tbsCertificate'}->{'extensions'}} ) { #print "extension: ", $oid2extension{$extension->{'extnID'}}, "\n"; if ( exists $extnoid2asn{$extension->{'extnID'}} ) { $extension->{'extnValue'} = ($extnoid2asn{$extension->{'extnID'}})->decode( $extension->{'extnValue'} ); } else { print STDERR "unknown ", $extension->{'critical'} ? "critical " : "", "extension: ", $extension->{'extnID'}, "\n"; asn_dump( $extension->{'extnValue'} ); } } print Dumper( $cert ); } |
From: Graham B. <gb...@us...> - 2002-02-10 16:12:20
|
Update of /cvsroot/perl-ldap/asn/t In directory usw-pr-cvs1:/tmp/cvs-serv8950/t Modified Files: 00prim.t 03seqof.t Log Message: Add support for units with one sinlge, unamed entry eg test ::= INTEGER or list ::= SEQUENCE OF OCTET STRING Index: 00prim.t =================================================================== RCS file: /cvsroot/perl-ldap/asn/t/00prim.t,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- 00prim.t 22 Sep 2001 00:16:49 -0000 1.6 +++ 00prim.t 10 Feb 2002 16:12:17 -0000 1.7 @@ -6,7 +6,7 @@ use Convert::ASN1 qw(:all); -print "1..146\n"; +print "1..150\n"; BEGIN { require 't/funcs.pl' } @@ -93,6 +93,14 @@ ntest $test++, $val, $ret->{integer}; } + +btest $test++, $asn->prepare('test ::= INTEGER '); + +$result = pack("C*", 0x02, 0x01, 0x09); + +stest $test++, $result, $asn->encode(9); +btest $test++, $ret = $asn->decode($result); +btest $test++, $ret == 9; ## ## STRING Index: 03seqof.t =================================================================== RCS file: /cvsroot/perl-ldap/asn/t/03seqof.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- 03seqof.t 21 Sep 2001 22:24:44 -0000 1.2 +++ 03seqof.t 10 Feb 2002 16:12:17 -0000 1.3 @@ -8,7 +8,7 @@ use Convert::ASN1; -print "1..29\n"; +print "1..35\n"; btest 1, $asn = Convert::ASN1->new; btest 2, $asn->prepare(' ints SEQUENCE OF INTEGER '); @@ -106,3 +106,15 @@ stest 27, 'b', $ret->{issuer}{rdnSequence}[0][1]{value}; stest 28, 'c', $ret->{issuer}{rdnSequence}[1][0]{value}; stest 29, 'd', $ret->{issuer}{rdnSequence}[1][1]{value}; + + +btest 30, $asn = Convert::ASN1->new; +btest 31, $asn->prepare('test ::= SEQUENCE OF INTEGER '); + +$result = pack("C*", 0x30, 0x0C, 0x02, 0x01, 0x09, 0x02, 0x01, 0x05, + 0x02, 0x01, 0x03, 0x02, 0x01, 0x01); + +stest 32, $result, $asn->encode([9,5,3,1]); +btest 33, $ret = $asn->decode($result); +btest 34, ref($ret) eq 'ARRAY'; +stest 35, "9:5:3:1", join(":", @{$ret}); |
From: Graham B. <gb...@us...> - 2002-02-10 16:12:19
|
Update of /cvsroot/perl-ldap/asn/lib/Convert/ASN1 In directory usw-pr-cvs1:/tmp/cvs-serv8950/lib/Convert/ASN1 Modified Files: _decode.pm _encode.pm Log Message: Add support for units with one sinlge, unamed entry eg test ::= INTEGER or list ::= SEQUENCE OF OCTET STRING Index: _decode.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/_decode.pm,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- _decode.pm 22 Jan 2002 11:24:28 -0000 1.12 +++ _decode.pm 10 Feb 2002 16:12:16 -0000 1.13 @@ -67,7 +67,7 @@ # We send 1 if there is not var as if there is the decode # should be getting undef. So if it does not get undef # it knows it has no variable - ($seqof ? $seqof->[$idx++] : defined($var) ? $stash->{$var} : 1), + ($seqof ? $seqof->[$idx++] : defined($var) ? $stash->{$var} : ref($stash) eq 'SCALAR' ? $$stash : 1), $buf,$npos,$len, $indef ? $larr : [] ); @@ -91,7 +91,7 @@ $buf, ); - ($seqof ? $seqof->[$idx++] : defined($var) ? $stash->{$var} : undef) + ($seqof ? $seqof->[$idx++] : defined($var) ? $stash->{$var} : ref($stash) eq 'SCALAR' ? $$stash : undef) = &{$ctr}(@ctrlist); $pos = $npos+$len+$indef; @@ -122,7 +122,7 @@ $len += $npos-$pos; - ($seqof ? $seqof->[$idx++] : $stash->{$var}) + ($seqof ? $seqof->[$idx++] : ref($stash) eq 'SCALAR' ? $$stash : $stash->{$var}) = substr($buf,$pos,$len); $pos += $len + $indef; @@ -145,7 +145,9 @@ my $nstash = $seqof ? ($seqof->[$idx++]={}) : defined($var) - ? ($stash->{$var}={}) : $stash; + ? ($stash->{$var}={}) + : ref($stash) eq 'SCALAR' + ? ($$stash={}) : $stash; &{$decode[$cop->[cTYPE]]}( $optn, @@ -167,7 +169,9 @@ my $nstash = $seqof ? ($seqof->[$idx++]={}) : defined($var) - ? ($stash->{$var}={}) : $stash; + ? ($stash->{$var}={}) + : ref($stash) eq 'SCALAR' + ? ($$stash={}) : $stash; _decode( $optn, Index: _encode.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/_encode.pm,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- _encode.pm 22 Jan 2002 11:24:28 -0000 1.13 +++ _encode.pm 10 Feb 2002 16:12:17 -0000 1.14 @@ -53,8 +53,9 @@ &{$encode[$op->[cTYPE]]}( $optn, $op, - $stash, - defined($var) ? $stash->{$var} : undef, + (ref($stash) ne 'HASH' + ? ({}, $stash) + : ($stash, defined($var) ? $stash->{$var} : undef)), $_[4], $op->[cLOOP], $path, |
From: Graham B. <gb...@us...> - 2002-02-10 16:12:19
|
Update of /cvsroot/perl-ldap/asn/lib/Convert In directory usw-pr-cvs1:/tmp/cvs-serv8950/lib/Convert Modified Files: ASN1.pm Log Message: Add support for units with one sinlge, unamed entry eg test ::= INTEGER or list ::= SEQUENCE OF OCTET STRING Index: ASN1.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1.pm,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- ASN1.pm 22 Jan 2002 11:24:28 -0000 1.20 +++ ASN1.pm 10 Feb 2002 16:12:16 -0000 1.21 @@ -13,7 +13,7 @@ BEGIN { @ISA = qw(Exporter); - $VERSION = '0.15'; + $VERSION = '0.15_01'; %EXPORT_TAGS = ( io => [qw(asn_recv asn_send asn_read asn_write asn_get asn_ready)], @@ -197,14 +197,28 @@ sub decode { my $self = shift; - my $stash = {}; local $SIG{__DIE__}; - eval { _decode($self->{options}, $self->{script}, $stash, 0, length $_[0], undef, [], $_[0]); $stash } - or do { - $self->{'error'} = $@; - undef; + my $ret = eval { + my (%stash, $result); + my $script = $self->{script}; + my $stash = (1 == @$script && !$self->{script}[0][cVAR]) ? \$result : ($result=\%stash); + _decode( + $self->{options}, + $script, + $stash, + 0, + length $_[0], + undef, + [], + $_[0]); + $result; }; + if ($@) { + $self->{'error'} = $@; + return undef; + } + $ret; } |
From: Graham B. <gb...@us...> - 2002-02-10 16:12:19
|
Update of /cvsroot/perl-ldap/asn In directory usw-pr-cvs1:/tmp/cvs-serv8950 Modified Files: ChangeLog Log Message: Add support for units with one sinlge, unamed entry eg test ::= INTEGER or list ::= SEQUENCE OF OCTET STRING Index: ChangeLog =================================================================== RCS file: /cvsroot/perl-ldap/asn/ChangeLog,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- ChangeLog 22 Jan 2002 11:24:28 -0000 1.20 +++ ChangeLog 10 Feb 2002 16:12:16 -0000 1.21 @@ -1,3 +1,12 @@ +2002-01-22 11:24 Graham Barr + + * README, parser.y, lib/Convert/ASN1.pm, lib/Convert/ASN1.pod, + lib/Convert/ASN1/Debug.pm, lib/Convert/ASN1/IO.pm, + lib/Convert/ASN1/_decode.pm, lib/Convert/ASN1/_encode.pm, + lib/Convert/ASN1/parser.pm: + + Release 0.15 + 2002-01-21 20:00 Graham Barr * t/06bigint.t: |
From: Graham B. <gb...@us...> - 2002-02-04 19:16:54
|
Update of /cvsroot/perl-ldap/ldap/t In directory usw-pr-cvs1:/tmp/cvs-serv5355/t Modified Files: 00ldif-entry.t 50populate.t 51search.t 52modify.t 53schema.t 54dse.t 55ssl.t common.pl Log Message: Some testcase tweaks Index: 00ldif-entry.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/00ldif-entry.t,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- 00ldif-entry.t 2001/10/29 16:48:12 1.5 +++ 00ldif-entry.t 2002/02/04 18:58:53 1.6 @@ -5,21 +5,29 @@ } -print "1..9\n"; +print "1..11\n"; use Net::LDAP::LDIF; -my $infile = "data/00-in.ldif"; -my $outfile = "$TEMPDIR/00-out1.ldif"; -my $cmpfile = $infile; +my $infile = "data/00-in.ldif"; +my $outfile1 = "$TEMPDIR/00-out1.ldif"; +my $outfile2 = "$TEMPDIR/00-out2.ldif"; +my $cmpfile1 = "data/00-cmp.ldif"; +my $cmpfile2 = $infile; -@entry = Net::LDAP::LDIF->new($infile,"r")->read; +my $ldif = Net::LDAP::LDIF->new($infile,"r"); -Net::LDAP::LDIF->new($outfile,"w")->write(@entry); +@entry = $ldif->read; -print "not " if compare($cmpfile,$outfile); -print "ok 1\n"; +ok($ldif->version == 1, "version == 1"); + +Net::LDAP::LDIF->new($outfile1,"w")->write(@entry); +Net::LDAP::LDIF->new($outfile2,"w", version => 1)->write(@entry); + +ok(!compare($cmpfile1,$outfile1), $cmpfile1); +ok(!compare($cmpfile2,$outfile2), $cmpfile2); + $e = $entry[0]; $e->changetype('modify'); @@ -36,33 +44,35 @@ $ldif->write($e); $ldif->write_cmd($e); $ldif->done; -print "not " if compare($cmpfile,$outfile); -print "ok 2\n"; +ok(!compare($cmpfile,$outfile), $cmpfile); $e->add('name' => 'Graham Barr'); $e->add('name;en-us' => 'Bob'); -print "not " unless join(":",sort $e->attributes) eq "associateddomain:counting:description:first:l:lastmodifiedby:lastmodifiedtime:name:name;en-us:o:postaladdress:second:st:streetaddress:telephonenumber"; -print "ok 3\n"; +print "not " unless +ok( + join(":",sort $e->attributes) + eq + "associateddomain:counting:description:first:l:lastmodifiedby:lastmodifiedtime:name:name;en-us:o:postaladdress:second:st:streetaddress:telephonenumber", + "attributes"); -print "not " unless join(":",sort $e->attributes(nooptions => 1)) eq "associateddomain:counting:description:first:l:lastmodifiedby:lastmodifiedtime:name:o:postaladdress:second:st:streetaddress:telephonenumber"; -print "ok 4\n"; +print "not " unless +ok( + join(":",sort $e->attributes(nooptions => 1)) + eq + "associateddomain:counting:description:first:l:lastmodifiedby:lastmodifiedtime:name:o:postaladdress:second:st:streetaddress:telephonenumber", + "attributes - nooptions"); $r = $e->get_value('name', asref => 1); -print "not " unless $r and @$r == 1 and $r->[0] eq 'Graham Barr'; -print "ok 5\n"; +ok(($r and @$r == 1 and $r->[0] eq 'Graham Barr'), "name eq Graham Barr"); $r = $e->get_value('name;en-us', asref => 1); -print "not " unless $r and @$r == 1 and $r->[0] eq 'Bob'; -print "ok 6\n"; +ok(($r and @$r == 1 and $r->[0] eq 'Bob'), "name;en-us eq Bob"); $r = $e->get_value('name', alloptions => 1, asref => 1); -print "not " unless $r and join("*", sort keys %$r) eq "*;en-us"; -print "ok 7\n"; +ok(($r and join("*", sort keys %$r) eq "*;en-us"), "name keys"); -print "not " unless $r and $r->{''} and @{$r->{''}} == 1 and $r->{''}[0] eq 'Graham Barr'; -print "ok 8\n"; +ok(($r and $r->{''} and @{$r->{''}} == 1 and $r->{''}[0] eq 'Graham Barr'), "name alloptions"); -print "not " unless $r and $r->{';en-us'} and @{$r->{';en-us'}} == 1 and $r->{';en-us'}[0] eq 'Bob'; -print "ok 9\n"; +ok(($r and $r->{';en-us'} and @{$r->{';en-us'}} == 1 and $r->{';en-us'}[0] eq 'Bob'), "name alloptions Bob"); Index: 50populate.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/50populate.t,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- 50populate.t 2001/06/14 20:13:58 1.3 +++ 50populate.t 2002/02/04 18:58:53 1.4 @@ -8,18 +8,16 @@ print "1..7\n"; $ldap = client(); -print "ok 1\n"; +ok($ldap, "client"); $mesg = $ldap->bind($MANAGERDN, password => $PASSWD); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 2\n"; +ok(!$mesg->code, "bind: " . $mesg->code . ": " . $mesg->error); -print "not " unless ldif_populate($ldap, "data/50-in.ldif"); -print "ok 3\n"; +ok(ldif_populate($ldap, "data/50-in.ldif"), "data/50-in.ldif"); + $mesg = $ldap->search(base => $BASEDN, filter => 'objectclass=*'); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 4\n"; +ok(!$mesg->code, "search: " . $mesg->code . ": " . $mesg->error); -compare_ldif("50",5,$mesg,$mesg->sorted); +compare_ldif("50",$mesg,$mesg->sorted); Index: 51search.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/51search.t,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- 51search.t 2001/06/14 20:13:58 1.3 +++ 51search.t 2002/02/04 18:58:56 1.4 @@ -5,38 +5,33 @@ start_server(); } -my $i = 4; - - print "1..15\n"; $ldap = client(); -print "ok 1\n"; +ok($ldap, "client"); $mesg = $ldap->bind($MANAGERDN, password => $PASSWD); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 2\n"; +ok(!$mesg->code, "bind: " . $mesg->code . ": " . $mesg->error); -print "not " unless ldif_populate($ldap, "data/51-in.ldif"); -print "ok 3\n"; +ok(ldif_populate($ldap, "data/51-in.ldif"), "data/51-in.ldif"); # now search the database # Exact searching $mesg = $ldap->search(base => $BASEDN, filter => 'sn=jensen'); -$i += compare_ldif("51a",$i,$mesg,$mesg->sorted); +compare_ldif("51a",$mesg,$mesg->sorted); # Or searching $mesg = $ldap->search(base => $BASEDN, filter => '(|(objectclass=groupofnames)(sn=jones))'); -$i += compare_ldif("51b",$i,$mesg,$mesg->sorted); +compare_ldif("51b",$mesg,$mesg->sorted); # And searching $mesg = $ldap->search(base => $BASEDN, filter => '(&(objectclass=groupofnames)(cn=A*))'); -$i += compare_ldif("51c",$i,$mesg,$mesg->sorted); +compare_ldif("51c",$mesg,$mesg->sorted); # Not searching $mesg = $ldap->search(base => $BASEDN, filter => '(!(objectclass=person))'); -$i += compare_ldif("51d",$i,$mesg,$mesg->sorted); +compare_ldif("51d",$mesg,$mesg->sorted); Index: 52modify.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/52modify.t,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- 52modify.t 2001/06/14 20:13:58 1.3 +++ 52modify.t 2002/02/04 18:58:57 1.4 @@ -8,23 +8,20 @@ print "1..7\n"; $ldap = client(); -print "ok 1\n"; +ok($ldap, "client"); $mesg = $ldap->bind($MANAGERDN, password => $PASSWD); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 2\n"; +ok(!$mesg->code, "bind: " . $mesg->code . ": " . $mesg->error); -print "not " unless ldif_populate($ldap, "data/52-in.ldif"); -print "ok 3\n"; +ok(ldif_populate($ldap, "data/52-in.ldif"), "data/52-in.ldif"); # load modify LDIF -print "not " unless ldif_populate($ldap, "data/52-mod.ldif", 'modify'); -print "ok 4\n"; +ok(ldif_populate($ldap, "data/52-mod.ldif", 'modify'), "data/52-mod.ldif"); # now search the database $mesg = $ldap->search(base => $BASEDN, filter => 'objectclass=*'); -compare_ldif("52",5,$mesg,$mesg->sorted); +compare_ldif("52",$mesg,$mesg->sorted); Index: 53schema.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/53schema.t,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- 53schema.t 2001/08/17 16:20:58 1.3 +++ 53schema.t 2002/02/04 18:59:02 1.4 @@ -6,32 +6,35 @@ my $schema = Net::LDAP::Schema->new( "data/schema.in" ) or die "Cannot open schema"; print "ok 1\n"; -my @atts = sort $schema->attributes(); +my @atts = $schema->all_attributes(); print "not " unless @atts == 55; print "ok 2\n"; print "The schema contains ", scalar @atts, " attributes\n"; -my @ocs = $schema->objectclasses(); +my @ocs = $schema->all_objectclasses(); print "not " unless @ocs == 22; print "ok 3\n"; print "The schema contains ", scalar @ocs, " object classes\n"; @atts = $schema->must( "person" ); -print "not " unless join(' ',@atts) eq join(' ',qw(cn sn)); +print "not " unless join(' ', sort map $_->{name}, @atts) eq join(' ',sort qw(cn sn objectClass)); print "ok 4\n"; print "The 'person' OC must have these attributes [", - join( ",", @atts ), + join( ",", map $_->{name}, @atts ), "]\n"; @atts = $schema->may( "mhsOrganizationalUser" ); print "not " if @atts; print "ok 5\n"; -print "The 'mhsOrganizationalUser' OC must have these attributes [", - join( ",", @atts ), +print "The 'mhsOrganizationalUser' OC may have these attributes [", + join( ",", map $_->{name}, @atts ), "]\n"; -print "not " if defined $schema->item('distinguishedName','max_length'); +print "not " if defined $schema->attribute('distinguishedName')->{max_length}; print "ok 6\n"; -print "not " unless $schema->item('userPassword','max_length') == 128; +print "not " unless $schema->attribute('userPassword')->{max_length} == 128; print "ok 7\n"; + +use Data::Dumper; +print Dumper($schema); Index: 54dse.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/54dse.t,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- 54dse.t 2001/07/06 10:55:21 1.1 +++ 54dse.t 2002/02/04 18:59:03 1.2 @@ -8,10 +8,10 @@ print "1..2\n"; $ldap = client(); -print "ok 1\n"; +ok($ldap, "client"); -$dse = $ldap->root_dse or print "not "; -print "ok 2\n"; +$dse = $ldap->root_dse; +ok($dse, "dse"); use Net::LDAP::LDIF; Net::LDAP::LDIF->new(qw(- w))->write_entry($dse) if $dse; Index: 55ssl.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/55ssl.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- 55ssl.t 2001/08/24 19:10:54 1.2 +++ 55ssl.t 2002/02/04 18:59:03 1.3 @@ -8,40 +8,33 @@ print "1..15\n"; $ldap = client(); -print "ok 1\n"; +ok($ldap, "client"); $mesg = $ldap->bind($MANAGERDN, password => $PASSWD, version => 3); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 2\n"; +ok(!$mesg->code, "bind: " . $mesg->code . ": " . $mesg->error); -print "not " unless ldif_populate($ldap, "data/50-in.ldif"); -print "ok 3\n"; +ok(ldif_populate($ldap, "data/50-in.ldif"), "data/50-in.ldif"); $mesg = $ldap->start_tls; -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 4\n"; +ok(!$mesg->code, "start_stl: " . $mesg->code . ": " . $mesg->error); $mesg = $ldap->start_tls; -print "# ",$mesg->code,": ",$mesg->error,"\nnot " unless $mesg->code; -print "ok 5\n"; +ok($mesg->code, "start_stl: " . $mesg->code . ": " . $mesg->error); $mesg = $ldap->search(base => $BASEDN, filter => 'objectclass=*'); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 6\n"; +ok(!$mesg->code, "search: " . $mesg->code . ": " . $mesg->error); -compare_ldif("50",7,$mesg,$mesg->sorted); +compare_ldif("50",$mesg,$mesg->sorted); -$ldap = client(ssl => 1) or print "not "; -print "ok 10\n"; +$ldap = client(ssl => 1); +ok($ldap, "ssl client"); $mesg = $ldap->start_tls; -print "# ",$mesg->code,": ",$mesg->error,"\nnot " unless $mesg->code; -print "ok 11\n"; +ok($mesg->code, "start_stl: " . $mesg->code . ": " . $mesg->error); $mesg = $ldap->search(base => $BASEDN, filter => 'objectclass=*'); -print "# ",$mesg->code,": ",$mesg->error,"\nnot " if $mesg->code; -print "ok 12\n"; +ok(!$mesg->code, "search: " . $mesg->code . ": " . $mesg->error); -compare_ldif("50",13,$mesg,$mesg->sorted); +compare_ldif("50",$mesg,$mesg->sorted); Index: common.pl =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/common.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- common.pl 2001/07/06 10:55:21 1.4 +++ common.pl 2002/02/04 18:59:04 1.5 @@ -88,7 +88,7 @@ open(STDOUT,">&STDERR"); close(STDIN); - exec(@LDAPD); + exec(@LDAPD) or die "cannot exec @LDAPD"; } sleep 2; # wait for server to start @@ -128,24 +128,18 @@ } sub compare_ldif { - my($test,$test_num,$mesg) = splice(@_,0,3); + my($test,$mesg) = splice(@_,0,2); - if ($mesg->code) { - print $mesg->error,"\n"; - print "not ok ",$test_num++,"\n"; - print "not ok ",$test_num++,"\n"; - print "not ok ",$test_num++,"\n"; - return 3; + unless (ok(!$mesg->code, $mesg->error)) { + skip(2, $mesg->error); + return; } - print "ok ",$test_num++,"\n"; my $ldif = Net::LDAP::LDIF->new("$TEMPDIR/${test}-out.ldif","w", lowercase => 1); - unless ($ldif) { - print "not ok",$test_num++,"\n"; - print "not ok",$test_num++,"\n"; - return 3; + unless (ok($ldif, "Read ${test}-out.ldif")) { + skip(1,"Read error"); + return; } - print "ok ",$test_num++,"\n"; foreach $entry (@_) { foreach $attr ($entry->attributes) { @@ -156,9 +150,7 @@ $ldif->done; # close the file; - compare("$TEMPDIR/${test}-out.ldif","data/${test}-cmp.ldif") && print "not "; - print "ok ",$test_num++,"\n"; - 3; + ok(!compare("$TEMPDIR/${test}-out.ldif","data/${test}-cmp.ldif"), "data/${test}-cmp.ldif"); } require File::Compare; @@ -188,5 +180,41 @@ } $ok; } + +my $number = 0; +sub ok { + my ($condition, $name) = @_; + + my $message = $condition ? "ok " : "not ok "; + $message .= ++$number; + $message .= " # $name" if defined $name; + print $message, "\n"; + return $condition; +} + +sub is { + my ($got, $expected, $name) = @_; + + for ($got, $expected) { + $_ = 'undef' unless defined $_; + } + + unless (ok($got eq $expected, $name)) { + warn "Got: '$got'\nExpected: '$expected'\n" . join(' ', caller) . "\n"; + } +} + +sub skip { + my ($reason, $num) = @_; + $reason ||= ''; + $number ||= 1; + + for (1 .. $num) { + $number++; + print "ok $number # skip $reason\n"; + } +} + +1; 1; |
From: Graham B. <gb...@us...> - 2002-02-04 19:16:50
|
Update of /cvsroot/perl-ldap/ldap/data In directory usw-pr-cvs1:/tmp/cvs-serv5355/data Modified Files: 00-in.ldif core.schema slapd2-conf.in Log Message: Some testcase tweaks Index: 00-in.ldif =================================================================== RCS file: /cvsroot/perl-ldap/ldap/data/00-in.ldif,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- 00-in.ldif 2000/05/03 12:28:42 1.1.1.1 +++ 00-in.ldif 2002/02/04 18:58:49 1.2 @@ -1,3 +1,4 @@ +version: 1 dn: o=University of Michigan, c=US objectclass: top objectclass: organization Index: core.schema =================================================================== RCS file: /cvsroot/perl-ldap/ldap/data/core.schema,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- core.schema 2001/06/11 17:03:35 1.1 +++ core.schema 2002/02/04 18:58:49 1.2 @@ -1,4 +1,4 @@ -# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.schema,v 1.7.2.8 2000/08/26 17:58:18 kurt Exp $ +# $OpenLDAP: pkg/ldap/servers/slapd/schema/core.schema,v 1.7.2.12 2001/09/18 18:34:22 kurt Exp $ # # OpenLDAP Core schema # @@ -77,8 +77,9 @@ EQUALITY objectIdentifierFirstComponentMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.31 USAGE directoryOperation ) -# From X.500(97?) +# From X.500(93) attributetype ( 2.5.21.9 NAME 'structuralObjectClass' + DESC 'X.500(93) structural object class' EQUALITY objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 NO-USER-MODIFICATION SINGLE-VALUE USAGE directoryOperation ) @@ -456,8 +457,8 @@ # attributetype ( 1.3.6.1.4.1.250.1.57 NAME 'labeledURI' DESC 'RFC2079: Uniform Resource Identifier with optional label' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) objectclass ( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject' DESC 'RFC2079: object that contains the URI attribute type' @@ -528,8 +529,8 @@ # attributetype ( 2.16.840.1.113730.3.1.34 NAME 'ref' DESC 'Named referral' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 USAGE distributedOperation ) objectclass ( 2.16.840.1.113730.3.2.6 NAME 'referral' @@ -568,6 +569,16 @@ EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + +# +# draft-zeilenga-ldap-features-xx.txt (supportedFeatures) +# +attributetype ( 1.3.6.1.4.1.4203.1.3.5 + NAME 'supportedFeatures' + DESC 'features supported by the server' + EQUALITY objectIdentifierMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 + USAGE dSAOperation ) # # OpenLDAP specific schema items Index: slapd2-conf.in =================================================================== RCS file: /cvsroot/perl-ldap/ldap/data/slapd2-conf.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- slapd2-conf.in 2001/07/06 10:55:21 1.2 +++ slapd2-conf.in 2002/02/04 18:58:49 1.3 @@ -20,4 +20,8 @@ TLSCertificateFile ./data/cert.pem TLSCertificateKeyFile ./data/key.pem - +#sasl-host localhost +#sasl-realm testing +#sasl-secprops passcred +#sasl-secprops noanonymous +sasl-secprops none |
From: Graham B. <gb...@us...> - 2002-02-04 14:58:39
|
Update of /cvsroot/perl-ldap/ldap/lib/Net/LDAP In directory usw-pr-cvs1:/tmp/cvs-serv2005/lib/Net/LDAP Modified Files: LDIF.pm Log Message: Add support for the version number line Index: LDIF.pm =================================================================== RCS file: /cvsroot/perl-ldap/ldap/lib/Net/LDAP/LDIF.pm,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- LDIF.pm 2002/01/31 13:32:25 1.14 +++ LDIF.pm 2002/02/04 14:58:35 1.15 @@ -9,7 +9,7 @@ require Net::LDAP::Entry; use vars qw($VERSION); -$VERSION = "0.10"; +$VERSION = "0.11"; my %mode = qw(w > r < a >>); @@ -106,6 +106,11 @@ return unless @ldif; shift @ldif if @ldif && $ldif[0] !~ /\D/; + if (@ldif and $ldif[0] =~ /^version:\s+(\d+)/) { + $self->{version} = $1; + shift @ldif; + } + if (@ldif <= 1) { $self->_error("LDIF entry is not valid", @ldif); return; @@ -357,7 +362,12 @@ # Skip entry if there is nothing to write next if $type eq 'modify' and !@changes; - print "\n" if $self->{write_count}++; + if ($self->{write_count}++) { + print "\n"; + } + else { + print "version: $self->{version}\n" if defined $self->{version}; + } _write_dn($entry->dn,$self->{'encode'},$wrap); print "changetype: $type\n"; @@ -395,7 +405,12 @@ } else { - print "\n" if $self->{write_count}++; + if ($self->{write_count}++) { + print "\n"; + } + else { + print "version: $self->{version}\n" if defined $self->{version}; + } _write_dn($entry->dn,$self->{'encode'},$wrap); _write_attrs($entry,$wrap,$lower); } @@ -494,6 +509,11 @@ sub current_lines { my $self = shift; $self->{_current_lines}; +} + +sub version { + my $self = shift; + $self->{version}; } sub next_lines { |
From: Graham B. <gb...@us...> - 2002-01-31 17:00:36
|
Update of /cvsroot/perl-ldap/sasl In directory usw-pr-cvs1:/tmp/cvs-serv13989 Added Files: ChangeLog Log Message: Release 2.00 --- NEW FILE: ChangeLog --- 2002-01-28 19:52 Graham Barr * lib/Authen/SASL.pm, t/anon.t, t/callback.t, t/cram_md5.t, t/external.t, t/plain.t: Add some tests 2002-01-24 15:21 Graham Barr * lib/Authen/SASL/Perl.pm: Allow callback to be called on the connection object 2002-01-24 12:04 Graham Barr * Makefile.PL, api.txt, compat_pl, example_pl, lib/Authen/SASL.pm, lib/Authen/SASL.pod, lib/Authen/SASL/CRAM_MD5.pm, lib/Authen/SASL/EXTERNAL.pm, lib/Authen/SASL/Perl.pm, lib/Authen/SASL/Perl/ANONYMOUS.pm, lib/Authen/SASL/Perl/CRAM_MD5.pm, lib/Authen/SASL/Perl/EXTERNAL.pm, lib/Authen/SASL/Perl/PLAIN.pm: Initial revision 2002-01-24 12:04 Graham Barr * Makefile.PL, api.txt, compat_pl, example_pl, lib/Authen/SASL.pm, lib/Authen/SASL.pod, lib/Authen/SASL/CRAM_MD5.pm, lib/Authen/SASL/EXTERNAL.pm, lib/Authen/SASL/Perl.pm, lib/Authen/SASL/Perl/ANONYMOUS.pm, lib/Authen/SASL/Perl/CRAM_MD5.pm, lib/Authen/SASL/Perl/EXTERNAL.pm, lib/Authen/SASL/Perl/PLAIN.pm: import |
From: Graham B. <gb...@us...> - 2002-01-31 15:25:55
|
Update of /cvsroot/perl-ldap/ldap/lib/Net/LDAP In directory usw-pr-cvs1:/tmp/cvs-serv19453/lib/Net/LDAP Modified Files: Util.pm Log Message: move some logic from canonical_dn into explode_dn and add some more tests for DNs Index: Util.pm =================================================================== RCS file: /cvsroot/perl-ldap/ldap/lib/Net/LDAP/Util.pm,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- Util.pm 2001/11/10 06:29:54 1.13 +++ Util.pm 2002/01/31 15:25:52 1.14 @@ -40,7 +40,7 @@ canonical_dn ldap_explode_dn ); -$VERSION = "0.07"; +$VERSION = "0.08"; =item ldap_error_name ( NUM ) @@ -286,13 +286,7 @@ my @t = sort keys %$h; join($plus, map { - my $val = $h->{$_}; - if ($val !~ /^#/) { - $val =~ s/([\\",=+<>#;])/\\$1/g; - $val =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\%02x",ord($1))/eg; - $val =~ s/(^\s+|\s+$)/"\\20" x length $1/ge; - } - "$_=$val"; + "$_=$h->{$_}"; } $rev ? reverse(@t) : @t) } $rev ? reverse(@dn) : @dn); @@ -326,6 +320,16 @@ Removes the leading OID. characters if the type is an OID instead of a name. +=item * + +Escapes all RFC 2253 special characters, and any other character +where the ASCII code is <32 or >= 127, with a backslash and a two +digit hex code. + +=item * + +Converts all leading and trailing spaces in values to be \20. + =back B<Note> values that are hex encoded (ie start with a #) are not @@ -365,6 +369,9 @@ $val =~ s/\\([\\ ",=+<>#;]|[0-9a-fA-F]{2}) /length($1)==1 ? $1 : chr(hex($1)) /xeg; + $val =~ s/([\\",=+<>#;])/\\$1/g; + $val =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\%02x",ord($1))/eg; + $val =~ s/(^\s+|\s+$)/"\\20" x length $1/ge; } $rdn{uc $type} = $val; |
From: Graham B. <gb...@us...> - 2002-01-31 15:25:55
|
Update of /cvsroot/perl-ldap/ldap/t In directory usw-pr-cvs1:/tmp/cvs-serv19453/t Modified Files: 01canon_dn.t Log Message: move some logic from canonical_dn into explode_dn and add some more tests for DNs Index: 01canon_dn.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/01canon_dn.t,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- 01canon_dn.t 2001/04/11 09:20:03 1.6 +++ 01canon_dn.t 2002/01/31 15:25:52 1.7 @@ -45,11 +45,106 @@ same cn=Clif Harden+IDNumber="a0125589 ",ou=tiPerson,ou=person,o=ti,c=us - ref CN=\20\20Graham Barr\20\20,OU=person,O=vc,C=us - same Cn=" Graham Barr ",OU=person,O=vc,C=us - same cn=" Graham \20Barr\20 ",OU=person,O=vc,C=us + ref CN=\20\20Graham Barr\20\20,OU=person,O=vc,C=us + same Cn=" Graham Barr ",OU=person,O=vc,C=us + same cn=" Graham \20Barr\20 ",OU=person,O=vc,C=us + + # empty + ref + + ref UID=jsmith,DC=example,DC=net + same UID=jsmith,DC=example,DC=net + + ref CN=J. Smith+OU=Sales,DC=example,DC=net + same OU=Sales+CN=J. Smith,DC=example,DC=net + + ref CN=John Smith\, III,DC=example,DC=net + same CN=John Smith\, III,DC=example,DC=net + same CN=John Smith\2C III,DC=example,DC=net + + ref CN=Before\\0dAfter,DC=example,DC=net + same CN=Before\\0dAfter,DC=example,DC=net + + ref CN=\#John Smith\20,DC=example,DC=net + same CN=\23John Smith\20,DC=example,DC=net + same CN=\#John Smith\ ,DC=example,DC=net + ref 1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com + same 1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com + + ref CN=Lu\\C4\\8Di\\C4\\87 + same CN=Lu\\C4\\8Di\\C4\\87 + + # empty value + ref 1.1.1= + + # option + bad uid;x-option=jsmith + + # invalid attribute type name + bad at_tr=jsmith + + # invalid attribute type name + bad -attr=jsmith + + # invalid attribute type name + #bad OID.1.1=jsmith + + # invalid numeric OID + bad 1..1=jsmith + + # invalid numeric OID + bad 1.1.=jsmith + # invalid numeric OID + #bad 01.1=jsmith + + # invalid numeric OID + bad 1.ff=jsmith + + # invalid HEX form + bad 1.1.1=#GG + + # invalid HEX form + bad 1.1.1=#000 + + # invalid HEX form + bad 1.1.1=#F + + # invalid HEX form + bad 1.1.1=# + + # spaces + #bad UID=jsmith, DC=example, DC=net + + # extra comma + bad UID=jsmith,,DC=example,DC=net + + # semi-colons + #bad UID=jsmith;DC=example;DC=net + + # quotes + #bad CN="John Smith",DC=example,DC=net + + # brackets + bad <UID=jsmith,DC=example,DC=net> + + # unescaped , + bad UID=john,smith + + # unescaped + + bad UID=john+smith + + # invalid escape of ? or unescaped \ + bad UID=john\?smith + + # invalid hex escape + bad UID=john\Fsmith + + # invalid hex escape + bad UID=john\GGsmith + + EOS print "1..", scalar(@tests)>>1, "\n"; @@ -68,7 +163,7 @@ } elsif ($op eq 'bad') { if ($failed = defined $canon) { - print "'$dn' should not have parsed\n"; + print "'$dn' should not have parsed\n '$canon'\n"; } } elsif ( $op eq 'same' ) { |
From: Graham B. <gb...@us...> - 2002-01-31 14:04:18
|
Update of /cvsroot/perl-ldap/ldap/lib/Net/LDAP In directory usw-pr-cvs1:/tmp/cvs-serv28281/lib/Net/LDAP Modified Files: Filter.pm Log Message: Fix uninit warning Index: Filter.pm =================================================================== RCS file: /cvsroot/perl-ldap/ldap/lib/Net/LDAP/Filter.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- Filter.pm 2002/01/09 17:19:47 1.6 +++ Filter.pm 2002/01/31 14:04:15 1.7 @@ -257,7 +257,8 @@ return "($_[1]->{type}=$str)"; }; /^extensibleMatch/ and do { - my $str = "($_[1]->{type}"; + my $str = "("; + $str .= $_[1]->{type} if defined $_[1]->{type}; $str .= ":dn" if $_[1]->{dnAttributes}; $str .= ":$_[1]->{matchingRule}" if defined $_[1]->{matchingRule}; $str .= ":=" . _escape($_[1]->{matchValue}) . ")"; |
From: Graham B. <gb...@us...> - 2002-01-31 13:32:28
|
Update of /cvsroot/perl-ldap/ldap/lib/Net/LDAP In directory usw-pr-cvs1:/tmp/cvs-serv19358/lib/Net/LDAP Modified Files: LDIF.pm Log Message: Fix the \n output when the output is to a terminal or a pipe Index: LDIF.pm =================================================================== RCS file: /cvsroot/perl-ldap/ldap/lib/Net/LDAP/LDIF.pm,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- LDIF.pm 2001/10/29 16:48:12 1.13 +++ LDIF.pm 2002/01/31 13:32:25 1.14 @@ -9,7 +9,7 @@ require Net::LDAP::Entry; use vars qw($VERSION); -$VERSION = "0.09"; +$VERSION = "0.10"; my %mode = qw(w > r < a >>); @@ -60,6 +60,7 @@ file => "$file", opened_fh => $opened_fh, eof => 0, + write_count => ($mode eq 'a' and tell($fh) > 0) ? 1 : 0, }; bless $self, $pkg; @@ -356,7 +357,7 @@ # Skip entry if there is nothing to write next if $type eq 'modify' and !@changes; - print "\n" if tell($self->{'fh'}); + print "\n" if $self->{write_count}++; _write_dn($entry->dn,$self->{'encode'},$wrap); print "changetype: $type\n"; @@ -394,9 +395,9 @@ } else { - print "\n" if tell($self->{'fh'}); - _write_dn($entry->dn,$self->{'encode'},$wrap); - _write_attrs($entry,$wrap,$lower); + print "\n" if $self->{write_count}++; + _write_dn($entry->dn,$self->{'encode'},$wrap); + _write_attrs($entry,$wrap,$lower); } } |
From: Graham B. <gb...@us...> - 2002-01-28 19:52:28
|
Update of /cvsroot/perl-ldap/sasl In directory usw-pr-cvs1:/tmp/cvs-serv24316 Modified Files: MANIFEST Log Message: Add some tests Index: MANIFEST =================================================================== RCS file: /cvsroot/perl-ldap/sasl/MANIFEST,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- MANIFEST 2002/01/24 12:04:16 1.1.1.1 +++ MANIFEST 2002/01/28 19:52:25 1.2 @@ -1,3 +1,4 @@ +ChangeLog MANIFEST Makefile.PL api.txt @@ -12,3 +13,8 @@ lib/Authen/SASL/Perl/CRAM_MD5.pm lib/Authen/SASL/Perl/EXTERNAL.pm lib/Authen/SASL/Perl/PLAIN.pm +t/anon.t +t/callback.t +t/cram_md5.t +t/external.t +t/plain.t |
From: Graham B. <gb...@us...> - 2002-01-28 19:52:28
|
Update of /cvsroot/perl-ldap/sasl/lib/Authen In directory usw-pr-cvs1:/tmp/cvs-serv24316/lib/Authen Modified Files: SASL.pm Log Message: Add some tests Index: SASL.pm =================================================================== RCS file: /cvsroot/perl-ldap/sasl/lib/Authen/SASL.pm,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- SASL.pm 2002/01/24 12:04:16 1.1.1.1 +++ SASL.pm 2002/01/28 19:52:25 1.2 @@ -5,11 +5,16 @@ package Authen::SASL; use strict; -use vars qw($VERSION); +use vars qw($VERSION @Plugins); use Carp; $VERSION = "2.00"; +@Plugins = qw( + Authen::SASL::Cyrus + Authen::SASL::Perl +); + sub new { my $pkg = shift; my %opt = ((@_ % 2 ? 'mechanism' : ()), @_); @@ -53,8 +58,7 @@ sub client_new { # $self, $service, $host, $secflags my $self = shift; - foreach my $plugin (qw(Cyrus Perl)) { - my $pkg = __PACKAGE__ . "::$plugin"; + foreach my $pkg (@Plugins) { if (eval "require $pkg") { return ($self->{conn} = $pkg->client_new($self, @_)); } |
From: Graham B. <gb...@us...> - 2002-01-28 19:52:28
|
Update of /cvsroot/perl-ldap/sasl/t In directory usw-pr-cvs1:/tmp/cvs-serv24316/t Added Files: anon.t callback.t cram_md5.t external.t plain.t Log Message: Add some tests --- NEW FILE: anon.t --- use Authen::SASL; @Authen::SASL::Plugins = qw(Authen::SASL::Perl); print "1..5\n"; my $sasl = Authen::SASL->new( mechanism => 'ANONYMOUS', callback => { user => 'gbarr', pass => 'fred', authname => 'none' }, ) or print "not "; print "ok 1\n"; $sasl->mechanism eq 'ANONYMOUS' or print "not "; print "ok 2\n"; my $conn = $sasl->client_new("ldap","localhost"); $conn->mechanism eq 'ANONYMOUS' or print "not "; print "ok 3\n"; $conn->client_start eq 'none' or print "not "; print "ok 4\n"; $conn->client_step("xyz") eq 'none' or print "not "; print "ok 5\n"; --- NEW FILE: callback.t --- use Authen::SASL; @Authen::SASL::Plugins = qw(Authen::SASL::Perl); print "1..7\n"; my $sasl = Authen::SASL->new( mechanism => 'PLAIN', callback => { user => 'gbarr', pass => \&pass, authname => [ \&authname, 1 ], }, ) or print "not "; print "ok 1\n"; $sasl->mechanism eq 'PLAIN' or print "not "; print "ok 2\n"; my $conn = $sasl->client_new("ldap","localhost"); $conn->mechanism eq 'PLAIN' or print "not "; print "ok 3\n"; my $test = 4; $conn->client_start eq "gbarr\0none\0fred" or print "not "; print "ok 6\n"; print "not " if defined $conn->client_step("xyz") ; print "ok 7\n"; sub pass { print "#pass\n"; print "ok ",$test++,"\n"; 'fred'; } sub authname { print "#authname\n"; print "not " unless @_ == 2 and $_[1] == 1; print "ok ",$test++,"\n"; 'none'; } --- NEW FILE: cram_md5.t --- use Authen::SASL; @Authen::SASL::Plugins = qw(Authen::SASL::Perl); print "1..5\n"; my $sasl = Authen::SASL->new( mechanism => 'CRAM-MD5', callback => { user => 'gbarr', pass => 'fred', authname => 'none' }, ) or print "not "; print "ok 1\n"; $sasl->mechanism eq 'CRAM-MD5' or print "not "; print "ok 2\n"; my $conn = $sasl->client_new("ldap","localhost", "noplaintext noanonymous"); $conn->mechanism eq 'CRAM-MD5' or print "not "; print "ok 3\n"; $conn->client_start eq '' or print "not "; print "ok 4\n"; $conn->client_step("xyz") eq 'gbarr 36c931fe47f3fe9c7adbf810b3c7c4ad' or print "not "; print "ok 5\n"; --- NEW FILE: external.t --- use Authen::SASL; @Authen::SASL::Plugins = qw(Authen::SASL::Perl); print "1..5\n"; my $sasl = Authen::SASL->new( mechanism => 'EXTERNAL', callback => { user => 'gbarr', pass => 'fred', authname => 'none' }, ) or print "not "; print "ok 1\n"; $sasl->mechanism eq 'EXTERNAL' or print "not "; print "ok 2\n"; my $conn = $sasl->client_new("ldap","localhost", "noplaintext"); $conn->mechanism eq 'EXTERNAL' or print "not "; print "ok 3\n"; $conn->client_start eq '' or print "not "; print "ok 4\n"; $conn->client_step("xyz") eq 'gbarr' or print "not "; print "ok 5\n"; --- NEW FILE: plain.t --- use Authen::SASL; @Authen::SASL::Plugins = qw(Authen::SASL::Perl); print "1..5\n"; my $sasl = Authen::SASL->new( mechanism => 'PLAIN', callback => { user => 'gbarr', pass => 'fred', authname => 'none' }, ) or print "not "; print "ok 1\n"; $sasl->mechanism eq 'PLAIN' or print "not "; print "ok 2\n"; my $conn = $sasl->client_new("ldap","localhost"); $conn->mechanism eq 'PLAIN' or print "not "; print "ok 3\n"; $conn->client_start eq "gbarr\0none\0fred" or print "not "; print "ok 4\n"; print "not " if defined $conn->client_step("xyz") ; print "ok 5\n"; |
From: Graham B. <gb...@us...> - 2002-01-28 19:41:21
|
Update of /cvsroot/perl-ldap/sasl/t In directory usw-pr-cvs1:/tmp/cvs-serv19431/t Log Message: Directory /cvsroot/perl-ldap/sasl/t added to the repository |
From: Graham B. <gb...@us...> - 2002-01-24 15:21:46
|
Update of /cvsroot/perl-ldap/sasl/lib/Authen/SASL In directory usw-pr-cvs1:/tmp/cvs-serv21369/lib/Authen/SASL Modified Files: Perl.pm Log Message: Allow callback to be called on the connection object Index: Perl.pm =================================================================== RCS file: /cvsroot/perl-ldap/sasl/lib/Authen/SASL/Perl.pm,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- Perl.pm 2002/01/24 12:04:16 1.1.1.1 +++ Perl.pm 2002/01/24 15:21:43 1.2 @@ -56,6 +56,17 @@ 1; } +sub callback { + my $self = shift; + + return $self->{callback}{$_[0]} if @_ == 1; + + my %new = @_; + @{$self->{callback}}{keys %new} = values %new; + + $self->{callback}; +} + # Should be defined in the mechanism sub-class sub mechanism { undef } sub client_step { undef } |
From: Graham B. <gb...@us...> - 2002-01-24 12:04:19
|
Update of /cvsroot/perl-ldap/sasl In directory usw-pr-cvs1:/tmp/cvs-serv31551 Log Message: import Status: Vendor Tag: import Release Tags: sasl_import N sasl/compat_pl N sasl/Makefile.PL N sasl/MANIFEST N sasl/api.txt N sasl/example_pl N sasl/lib/Authen/SASL.pm N sasl/lib/Authen/SASL.pod N sasl/lib/Authen/SASL/Perl.pm N sasl/lib/Authen/SASL/EXTERNAL.pm N sasl/lib/Authen/SASL/CRAM_MD5.pm N sasl/lib/Authen/SASL/Perl/ANONYMOUS.pm N sasl/lib/Authen/SASL/Perl/CRAM_MD5.pm N sasl/lib/Authen/SASL/Perl/EXTERNAL.pm N sasl/lib/Authen/SASL/Perl/PLAIN.pm No conflicts created by this import ***** Bogus filespec: - Imported sources |
From: Graham B. <gb...@us...> - 2002-01-23 13:25:33
|
Update of /cvsroot/perl-ldap/ldap/lib/Net/LDAP In directory usw-pr-cvs1:/tmp/cvs-serv12242/lib/Net/LDAP Modified Files: Schema.pm Log Message: Tweak the regexp that parses the elements to beter match qdstrings that contain ' Index: Schema.pm =================================================================== RCS file: /cvsroot/perl-ldap/ldap/lib/Net/LDAP/Schema.pm,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- Schema.pm 2001/12/19 22:27:58 1.12 +++ Schema.pm 2002/01/23 13:25:30 1.13 @@ -7,7 +7,7 @@ use strict; use vars qw($VERSION); -$VERSION = "0.11"; +$VERSION = "0.12"; # # Get schema from the server (or read from LDIF) and parse it into @@ -493,7 +493,7 @@ | "([^"]*)" | - '([^']*)' + '((?:[^']+|'[^\s)])*)' )\s*/xcg; die "Cannot parse [$val] ",substr($val,pos($val)) unless @tokens and pos($val) == length($val); |
From: Graham B. <gb...@us...> - 2002-01-22 11:24:31
|
Update of /cvsroot/perl-ldap/asn/lib/Convert/ASN1 In directory usw-pr-cvs1:/tmp/cvs-serv12237/lib/Convert/ASN1 Modified Files: Debug.pm IO.pm _decode.pm _encode.pm parser.pm Log Message: Release 0.15 Index: Debug.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/Debug.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- Debug.pm 2001/09/22 00:16:49 1.6 +++ Debug.pm 2002/01/22 11:24:28 1.7 @@ -1,3 +1,6 @@ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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; Index: IO.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/IO.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- IO.pm 2001/04/19 19:51:53 1.7 +++ IO.pm 2002/01/22 11:24:28 1.8 @@ -1,3 +1,6 @@ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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; Index: _decode.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/_decode.pm,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- _decode.pm 2001/09/22 00:16:49 1.11 +++ _decode.pm 2002/01/22 11:24:28 1.12 @@ -1,3 +1,6 @@ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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; Index: _encode.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/_encode.pm,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- _encode.pm 2002/01/02 16:56:47 1.12 +++ _encode.pm 2002/01/22 11:24:28 1.13 @@ -1,3 +1,6 @@ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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; Index: parser.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1/parser.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- parser.pm 2001/09/22 00:16:49 1.6 +++ parser.pm 2002/01/22 11:24:28 1.7 @@ -3,6 +3,10 @@ # 20 "parser.y" +;# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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$ @@ -69,7 +73,7 @@ \@seq; } -# 70 "y.tab.pl" +# 74 "y.tab.pl" sub constWORD () { 1 } sub constCLASS () { 2 } @@ -192,7 +196,7 @@ sub constYYMAXTOKEN () { 18 } -# 258 "y.tab.pl" +# 262 "y.tab.pl" sub yyclearin { $yychar = -1; } sub yyerrok { $yyerrflag = 0; } @@ -231,7 +235,7 @@ else { return (1) if $yychar == 0; -# 309 "y.tab.pl" +# 313 "y.tab.pl" $yychar = -1; next yyloop; @@ -263,7 +267,7 @@ if ($yychar < 0) { if (($yychar = &yylex) < 0) { $yychar = 0; } -# 348 "y.tab.pl" +# 352 "y.tab.pl" } if (($yyn = $yysindex[$yystate]) && ($yyn += $yychar) >= 0 && @@ -303,13 +307,13 @@ goto $label if exists $yystate{$label}; last switch; State1: { -# 90 "parser.y" +# 94 "parser.y" { $yyval = { '' => $yyvs[$yyvsp-0] }; last switch; } } State3: { -# 95 "parser.y" +# 99 "parser.y" { $yyval = { $yyvs[$yyvsp-2], [$yyvs[$yyvsp-0]] }; @@ -317,7 +321,7 @@ last switch; } } State4: { -# 99 "parser.y" +# 103 "parser.y" { $yyval=$yyvs[$yyvsp-3]; @@ -326,7 +330,7 @@ last switch; } } State5: { -# 106 "parser.y" +# 110 "parser.y" { $yyvs[$yyvsp-1]->[cTAG] = $yyvs[$yyvsp-3]; @@ -335,7 +339,7 @@ last switch; } } State11: { -# 120 "parser.y" +# 124 "parser.y" { @{$yyval = []}[cTYPE,cCHILD] = ('COMPONENTS', $yyvs[$yyvsp-0]); @@ -343,7 +347,7 @@ last switch; } } State14: { -# 130 "parser.y" +# 134 "parser.y" { $yyvs[$yyvsp-0]->[cTAG] = $yyvs[$yyvsp-2]; @@ -353,7 +357,7 @@ last switch; } } State18: { -# 143 "parser.y" +# 147 "parser.y" { @{$yyval = []}[cTYPE,cCHILD] = ('SEQUENCE', $yyvs[$yyvsp-1]); @@ -361,7 +365,7 @@ last switch; } } State19: { -# 147 "parser.y" +# 151 "parser.y" { @{$yyval = []}[cTYPE,cCHILD] = ('SET', $yyvs[$yyvsp-1]); @@ -369,7 +373,7 @@ last switch; } } State20: { -# 151 "parser.y" +# 155 "parser.y" { @{$yyval = []}[cTYPE,cCHILD] = ('CHOICE', $yyvs[$yyvsp-1]); @@ -377,7 +381,7 @@ last switch; } } State21: { -# 157 "parser.y" +# 161 "parser.y" { @{$yyval = []}[cTYPE] = ('ENUM'); @@ -385,7 +389,7 @@ last switch; } } State27: { -# 170 "parser.y" +# 174 "parser.y" { @{$yyval = []}[cTYPE] = ($yyvs[$yyvsp-0]); @@ -393,19 +397,19 @@ last switch; } } State28: { -# 175 "parser.y" +# 179 "parser.y" { $yyval = $yyvs[$yyvsp-0]; last switch; } } State29: { -# 176 "parser.y" +# 180 "parser.y" { $yyval = $yyvs[$yyvsp-1]; last switch; } } State30: { -# 180 "parser.y" +# 184 "parser.y" { $yyval = [ $yyvs[$yyvsp-0] ]; @@ -413,7 +417,7 @@ last switch; } } State31: { -# 184 "parser.y" +# 188 "parser.y" { push @{$yyval=$yyvs[$yyvsp-2]}, $yyvs[$yyvsp-0]; @@ -421,7 +425,7 @@ last switch; } } State32: { -# 188 "parser.y" +# 192 "parser.y" { push @{$yyval=$yyvs[$yyvsp-2]}, $yyvs[$yyvsp-0]; @@ -429,7 +433,7 @@ last switch; } } State33: { -# 194 "parser.y" +# 198 "parser.y" { @{$yyval=$yyvs[$yyvsp-0]}[cVAR,cTAG] = ($yyvs[$yyvsp-3],$yyvs[$yyvsp-2]); @@ -438,19 +442,19 @@ last switch; } } State34: { -# 201 "parser.y" +# 205 "parser.y" { $yyval = $yyvs[$yyvsp-0]; last switch; } } State35: { -# 202 "parser.y" +# 206 "parser.y" { $yyval = $yyvs[$yyvsp-1]; last switch; } } State36: { -# 206 "parser.y" +# 210 "parser.y" { $yyval = [ $yyvs[$yyvsp-0] ]; @@ -458,7 +462,7 @@ last switch; } } State37: { -# 210 "parser.y" +# 214 "parser.y" { push @{$yyval=$yyvs[$yyvsp-2]}, $yyvs[$yyvsp-0]; @@ -466,7 +470,7 @@ last switch; } } State38: { -# 214 "parser.y" +# 218 "parser.y" { push @{$yyval=$yyvs[$yyvsp-2]}, $yyvs[$yyvsp-0]; @@ -474,7 +478,7 @@ last switch; } } State39: { -# 220 "parser.y" +# 224 "parser.y" { @{$yyval=$yyvs[$yyvsp-1]}[cOPT] = ($yyvs[$yyvsp-0]); @@ -482,7 +486,7 @@ last switch; } } State43: { -# 229 "parser.y" +# 233 "parser.y" { @{$yyval=$yyvs[$yyvsp-0]}[cVAR,cTAG] = ($yyvs[$yyvsp-3],$yyvs[$yyvsp-2]); @@ -492,7 +496,7 @@ last switch; } } State45: { -# 236 "parser.y" +# 240 "parser.y" { @{$yyval=$yyvs[$yyvsp-0]}[cTAG] = ($yyvs[$yyvsp-2]); @@ -501,72 +505,72 @@ last switch; } } State46: { -# 242 "parser.y" +# 246 "parser.y" { $yyval = undef; last switch; } } State47: { -# 243 "parser.y" +# 247 "parser.y" { $yyval = 1; last switch; } } State48: { -# 247 "parser.y" +# 251 "parser.y" { $yyval = undef; last switch; } } State50: { -# 251 "parser.y" +# 255 "parser.y" { $yyval = undef; last switch; } } State51: { -# 252 "parser.y" +# 256 "parser.y" { $yyval = 1; last switch; } } State52: { -# 253 "parser.y" +# 257 "parser.y" { $yyval = 0; last switch; } } State53: { -# 256 "parser.y" +# 260 "parser.y" { last switch; } } State54: { -# 257 "parser.y" +# 261 "parser.y" { last switch; } } State55: { -# 260 "parser.y" +# 264 "parser.y" { last switch; } } State56: { -# 263 "parser.y" +# 267 "parser.y" { last switch; } } State57: { -# 264 "parser.y" +# 268 "parser.y" { last switch; } } -# 611 "y.tab.pl" +# 615 "y.tab.pl" } # switch $yyssp -= $yym; @@ -585,7 +589,7 @@ if ($yychar < 0) { if (($yychar = &yylex) < 0) { $yychar = 0; } -# 637 "y.tab.pl" +# 641 "y.tab.pl" } return $yyvs[$yyvsp] if $yychar == 0; @@ -606,7 +610,7 @@ $yyvs[++$yyvsp] = $yyval; } # yyloop } # yyparse -# 268 "parser.y" +# 272 "parser.y" my %reserved = ( @@ -893,14 +897,14 @@ 1; -# 943 "y.tab.pl" +# 947 "y.tab.pl" -%yystate = ('State20','','State11','','State30','','State21','','State31', -'','State50','','State32','','State14','','State51','','State33','', -'State52','','State43','','State34','','State53','','State35','','State54', -'','State45','','State36','','State18','','State27','','State55','', -'State46','','State37','','State19','','State28','','State56','','State47', -'','State38','','State29','','State57','','State48','','State39','', -'State1','','State3','','State4','','State5',''); +%yystate = ('State20','','State21','','State43','','State27','','State28', +'','State45','','State29','','State46','','State47','','State48','', +'State1','','State3','','State4','','State5','','State11','','State14','', +'State30','','State31','','State32','','State33','','State18','','State34', +'','State50','','State19','','State35','','State51','','State36','', +'State52','','State37','','State53','','State38','','State54','','State39', +'','State55','','State56','','State57',''); 1; |
From: Graham B. <gb...@us...> - 2002-01-22 11:24:31
|
Update of /cvsroot/perl-ldap/asn/lib/Convert In directory usw-pr-cvs1:/tmp/cvs-serv12237/lib/Convert Modified Files: ASN1.pm ASN1.pod Log Message: Release 0.15 Index: ASN1.pm =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- ASN1.pm 2002/01/02 16:31:37 1.19 +++ ASN1.pm 2002/01/22 11:24:28 1.20 @@ -1,3 +1,6 @@ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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; @@ -10,7 +13,7 @@ BEGIN { @ISA = qw(Exporter); - $VERSION = '0.14_03'; + $VERSION = '0.15'; %EXPORT_TAGS = ( io => [qw(asn_recv asn_send asn_read asn_write asn_get asn_ready)], Index: ASN1.pod =================================================================== RCS file: /cvsroot/perl-ldap/asn/lib/Convert/ASN1.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- ASN1.pod 2001/09/07 19:04:48 1.4 +++ ASN1.pod 2002/01/22 11:24:28 1.5 @@ -435,7 +435,7 @@ =head1 COPYRIGHT -Copyright (c) 2000-2001 Graham Barr <gb...@po...>. All rights reserved. +Copyright (c) 2000-2002 Graham Barr <gb...@po...>. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. |
From: Graham B. <gb...@us...> - 2002-01-22 11:24:30
|
Update of /cvsroot/perl-ldap/asn In directory usw-pr-cvs1:/tmp/cvs-serv12237 Modified Files: ChangeLog README parser.y Log Message: Release 0.15 Index: ChangeLog =================================================================== RCS file: /cvsroot/perl-ldap/asn/ChangeLog,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- ChangeLog 2001/09/10 18:04:09 1.19 +++ ChangeLog 2002/01/22 11:24:28 1.20 @@ -1,3 +1,48 @@ +2002-01-21 20:00 Graham Barr + + * t/06bigint.t: + + Be safer in creating BigInt objects + +2002-01-02 16:56 Graham Barr + + * lib/Convert/ASN1/_encode.pm: + + Change the encode errors to include the hierarchical name of the + element in the ASN.1 which is causing the problem + +2002-01-02 16:31 Graham Barr + + * lib/Convert/ASN1.pm: + + Remove unwanted warn statement + +2001-09-25 00:05 Graham Barr + + * lib/Convert/ASN1.pm: + + Better error reporting for encoding + +2001-09-22 01:16 Graham Barr + + * parser.y, lib/Convert/ASN1.pm, lib/Convert/ASN1/Debug.pm, + lib/Convert/ASN1/_decode.pm, lib/Convert/ASN1/_encode.pm, + lib/Convert/ASN1/parser.pm, t/00prim.t: + + Add support for RELATIVE-OID + +2001-09-22 01:14 Graham Barr + + * t/: 00prim.t, 06bigint.t: + + Move some integer tests that really use bigint from 00prim.t into 06bigint.t + +2001-09-21 23:24 Graham Barr + + * lib/Convert/ASN1.pm, lib/Convert/ASN1/_decode.pm, t/03seqof.t: + + Support for nested SEQUENCE/SET OF's + 2001-09-10 19:03 Graham Barr * README, lib/Convert/ASN1.pm: Index: README =================================================================== RCS file: /cvsroot/perl-ldap/asn/README,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- README 2001/09/10 18:03:47 1.2 +++ README 2002/01/22 11:24:28 1.3 @@ -1,13 +1,13 @@ I consider Convert::ASN1 a replacement for my earlier Convert::BER module. While ASN1.pm is not as flexable as BER.pm, because PDUs must -be described up fronta, it is also more powerful. For example an LDAP +be described up front, it is also more powerful. For example an LDAP filter is a recursive structure, BER.pm cannot encode or decode this in a single pass, ASN1.pm can. 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-2001 Graham Barr. All rights reserved. +Copyright (c) 2000-2002 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. Index: parser.y =================================================================== RCS file: /cvsroot/perl-ldap/asn/parser.y,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- parser.y 2001/09/22 00:16:49 1.5 +++ parser.y 2002/01/22 11:24:28 1.6 @@ -18,6 +18,10 @@ %token POSTRBRACE 18 %{ +# Copyright (c) 2000-2002 Graham Barr <gb...@po...>. 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$ |
From: Graham B. <gb...@us...> - 2002-01-21 20:08:09
|
Update of /cvsroot/perl-ldap/asn/t In directory usw-pr-cvs1:/tmp/cvs-serv24089/t Modified Files: 06bigint.t Log Message: Be safer in creating BigInt objects Index: 06bigint.t =================================================================== RCS file: /cvsroot/perl-ldap/asn/t/06bigint.t,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- 06bigint.t 2001/09/22 00:14:11 1.4 +++ 06bigint.t 2002/01/21 20:00:11 1.5 @@ -70,8 +70,7 @@ ## Test most-significant bit bug in 0.09. -$num = -Math::BigInt->new("1333280603684579469575805266526464216433260889799"); +$num = Math::BigInt->new("1333280603684579469575805266526464216433260889799"); $result = pack("C*", 0x2, 0x15, 0x00, 0xe9, 0x8a, 0x5e, 0xb8, 0x3a, 0xfa, 0x3d, 0x4, 0x13, 0x7d, 0x19, 0xfc, 0x39, 0x36, 0xa3, 0x2b, 0xd2, 0x22, 0x06, 0xc7); @@ -80,8 +79,7 @@ btest 30, exists $ret->{integer}; ntest 31, $num, $ret->{integer}; -$num = -Math::BigInt->new(-1 * (1<<24) * (1<<24)); +$num = Math::BigInt->new(-1 * (1<<24)) * Math::BigInt->new(1<<24); $result = pack("C*", 0x2, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); stest 32, $result, $asn->encode(integer => $num); btest 33, $ret = $asn->decode($result); |
From: Graham B. <gb...@us...> - 2002-01-09 17:19:50
|
Update of /cvsroot/perl-ldap/ldap/t In directory usw-pr-cvs1:/tmp/cvs-serv31983/t Modified Files: 02filter.t Log Message: Fix filters to be RFC compliant Index: 02filter.t =================================================================== RCS file: /cvsroot/perl-ldap/ldap/t/02filter.t,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- 02filter.t 2001/05/18 21:06:47 1.3 +++ 02filter.t 2002/01/09 17:19:47 1.4 @@ -3,98 +3,27 @@ use Net::LDAP::Filter; use Net::LDAP::ASN qw(Filter); +use Convert::ASN1 qw(asn_dump); my $asn = $Filter; -@tests = - ( - [ '(objectclass=foo)', - 'a312040b6f626a656374636c6173730403666f6f' ], - [ '(objectclass=)', - 'a30f040b6f626a656374636c6173730400' ], - [ 'createTimestamp>=199701011200Z', - 'a520040f63726561746554696d657374616d70040d3139393730313031313230305a' ], - [ 'createTimestamp<=199801011210Z', - 'a620040f63726561746554696d657374616d70040d3139393830313031313231305a' ], - [ '(cn=a*)', 'a4090402636e3003800161' ], - [ '(cn=*a)', 'a4090402636e3003820161' ], - [ 'cn=*a*', 'a4090402636e3003810161' ], - [ '(cn=*)', '8702636e'], - [ '(cn~=foo)', 'a8090402636e0403666f6f'], -# ones taken from RFC2254 - [ '(cn=Babs Jensen)', - 'a3110402636e040b42616273204a656e73656e' ], - [ '(!(cn=Tim Howes))', - 'a211a30f0402636e040954696d20486f776573' ], - [ '!(cn=Tim Howes)', - 'a211a30f0402636e040954696d20486f776573' ], - [ '(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))', - 'a037a315040b6f626a656374436c6173730406506572736f6ea11ea30c0402736e04064a656e73656ea40e0402636e3008800642616273204a' ], - [ '(o=univ*of*mich*)', - 'a41504016f30108004756e697681026f6681046d696368' ], - [ '(cn:1.2.3.4.5:=Fred Flintstone)', - 'a9238109312e322e332e342e358202636e830f4672656420466c696e7473746f6e65840100'], - [ '(sn:dn:2.4.6.8.10:=Barney Rubble)', - 'a922810a322e342e362e382e31308202736e830d4261726e657920527562626c658401ff'], - [ '(o:dn:=Ace Industry)', - 'a91482016f830c41636520496e6475737472798401ff'], - [ '(:dn:2.4.6.8.10:=Dino)', - 'a917810a322e342e362e382e31308200830444696e6f8401ff'], -# now some other cases. - [ '(o=univ*of*mich*an)', - 'a41904016f30148004756e697681026f6681046d6963688202616e' ], - [ '(&(cn=fred)(!(objectclass=organization)))', - 'a02ba30a0402636e040466726564a21da31b040b6f626a656374636c617373040c6f7267616e697a6174696f6e' ], -# the following come in pairs. The first is a filter, the second is an -# optimised form of the same filter. - [ '(| (& (cn=test)) (| (cn=foo)))', - 'a11ba00ca30a0402636e040474657374a10ba3090402636e0403666f6f' ], - [ '(| (cn=foo) (cn=test))', - 'a117a3090402636e0403666f6fa30a0402636e040474657374' ], - [ '(& (| (cn=test) (cn=foo) (sn=bar)) (| (c=GB) (c=AU)))', - 'a038a122a30a0402636e040474657374a3090402636e0403666f6fa3090402736e0403626172a112a30704016304024742a30704016304024155' ], - [ '(| (& (c=GB) (cn=test)) (& (c=AU) (cn=test)) (& (c=GB) (cn=foo)) (& (c=AU) (cn=foo)) (& (c=GB) (sn=bar)) (& (c=AU) (sn=bar)))', - 'a18186a015a30704016304024742a30a0402636e040474657374a015a30704016304024155a30a0402636e040474657374a014a30704016304024742a3090402636e0403666f6fa014a30704016304024155a3090402636e0403666f6fa014a30704016304024742a3090402736e0403626172a014a30704016304024155a3090402736e0403626172' ], - [ '(& (| (cn=test) (cn=foo) (sn=bar)) (c=GB))', - 'a02da122a30a0402636e040474657374a3090402636e0403666f6fa3090402736e0403626172a30704016304024742' ], - [ '(| (& (sn=bar) (c=GB)) (& (cn=foo) (c=GB)) (& (cn=test) (c=GB)))', - 'a143a014a3090402736e0403626172a30704016304024742a014a3090402636e0403666f6fa30704016304024742a015a30a0402636e040474657374a30704016304024742' ], - [ '(& (& (cn=foo) (| (cn=bar) (cn=xyz))) (& (cn=foo2) (| (cn=1) (cn=2))))', - 'a047a023a3090402636e0403666f6fa116a3090402636e0403626172a3090402636e040378797aa020a30a0402636e0404666f6f32a112a3070402636e040131a3070402636e040132' ], - [ '(& (& (cn=foo) (! (cn=bar))) (| (cn=oof) (cn=foobie)))', - 'a035a018a3090402636e0403666f6fa20ba3090402636e0403626172a119a3090402636e04036f6f66a30c0402636e0406666f6f626965' ], - [ '(| (& (cn=foobie) (cn=foo) (! (cn=bar))) (& (cn=oof) (cn=foo) (! (cn=bar))))', - 'a14da026a30c0402636e0406666f6f626965a3090402636e0403666f6fa20ba3090402636e0403626172a023a3090402636e04036f6f66a3090402636e0403666f6fa20ba3090402636e0403626172' ], - [ '(| (cn=foo) (cn=bar) (! (& (cn=a) (cn=b) (cn=c))))', - 'a135a3090402636e0403666f6fa3090402636e0403626172a21da01ba3070402636e040161a3070402636e040162a3070402636e040163' ], - [ '(| (! (cn=a)) (! (cn=b)) (! (cn=c)) (cn=foo) (cn=bar))', - 'a137a209a3070402636e040161a209a3070402636e040162a209a3070402636e040163a3090402636e0403666f6fa3090402636e0403626172' ], - [ '(& (cn=foo) (cn=bar) (! (& (cn=a) (cn=b) (cn=c))))', - 'a035a3090402636e0403666f6fa3090402636e0403626172a21da01ba3070402636e040161a3070402636e040162a3070402636e040163' ], - [ '(| (& (! (cn=a)) (cn=bar) (cn=foo)) (& (! (cn=b)) (cn=bar) (cn=foo)) (& (! (cn=c)) (cn=bar) (cn=foo)))', - 'a169a021a209a3070402636e040161a3090402636e0403626172a3090402636e0403666f6fa021a209a3070402636e040162a3090402636e0403626172a3090402636e0403666f6fa021a209a3070402636e040163a3090402636e0403626172a3090402636e0403666f6f' ], - [ '(| (cn=foo\(bar\)) (cn=test))', - 'a11ca30e0402636e0408666f6f2862617229a30a0402636e040474657374' ], - [ '(cn=foo\\*)', - 'a30a0402636e0404666f6f2a' ], - [ '(cn=foo\\\\*)', - 'a40c0402636e30068004666f6f5c' ], - [ '(cn=\\\\*foo)', - 'a40e0402636e300880015c8203666f6f' ], - [ '(cn=\\\\*foo\\\\*)', - 'a40f0402636e300980015c8104666f6f5c' ], - [ '(ou:dn:caseIgnoreMatch:=people)', - 'a920810f6361736549676e6f72654d6174636882026f75830670656f706c658401ff' ], - [ '(sn:caseIgnoreMatch:=barr)', - 'a91e810f6361736549676e6f72654d617463688202736e830462617272840100' ], - ); +my @tests = do { local $/=""; <DATA> }; print "1..", 4*scalar(@tests), "\n"; my $testno = 0; -my $testref; -foreach $testref (@tests) { - my($filter, $binary) = @$testref; - $binary = pack("H*", $binary); +my $test; +foreach $test (@tests) { + my ($filter, $ber, $filter_out) = $test =~ /^ + (?:\#.*\n)* + (.*)\n + ((?:[\da-fA-F]+:.*\n)+) + (.*) + /x or die "Cannot parse test\n$test\n"; + + $filter_out ||= $filter; + + my $binary = pack("H*", join("", map { /\w+/g } $ber =~ /:((?: [\dA-Fa-f]{2}){1,16})/g)); + $testno ++; print "# ",$filter,"\n"; $filt = new Net::LDAP::Filter $filter or print "not "; @@ -107,7 +36,9 @@ require Data::Dumper; print Data::Dumper::Dumper($filt); print "got ", unpack("H*", $data), "\n"; + asn_dump(\*STDOUT, $data); print "wanted ", unpack("H*", $binary), "\n"; + asn_dump(\*STDOUT, $binary); print "not " } @@ -115,9 +46,378 @@ $testno ++; my $str = $filt->as_string; - $filter = "($filter)" unless $filter =~ /^\(/; - $filter =~ s/ \(/\(/g; - print "# ", $str,"\n"; - print "not " unless $str eq $filter; + print "# ", $str,"\nnot " unless $str eq $filter_out; print "ok $testno\n"; } + +__DATA__ +(objectclass=foo) +0000: A3 12 04 0B 6F 62 6A 65 63 74 63 6C 61 73 73 04 ....objectclass. +0010: 03 66 6F 6F __ __ __ __ __ __ __ __ __ __ __ __ .foo + +(objectclass=) +0000: A3 0F 04 0B 6F 62 6A 65 63 74 63 6C 61 73 73 04 ....objectclass. +0010: 00 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ . + +createTimestamp>=199701011200Z +0000: A5 20 04 0F 63 72 65 61 74 65 54 69 6D 65 73 74 . ..createTimest +0010: 61 6D 70 04 0D 31 39 39 37 30 31 30 31 31 32 30 amp..19970101120 +0020: 30 5A __ __ __ __ __ __ __ __ __ __ __ __ __ __ 0Z +(createTimestamp>=199701011200Z) + +createTimestamp<=199801011210Z +0000: A6 20 04 0F 63 72 65 61 74 65 54 69 6D 65 73 74 . ..createTimest +0010: 61 6D 70 04 0D 31 39 39 38 30 31 30 31 31 32 31 amp..19980101121 +0020: 30 5A __ __ __ __ __ __ __ __ __ __ __ __ __ __ 0Z +(createTimestamp<=199801011210Z) + +(cn=a*) +0000: A4 09 04 02 63 6E 30 03 80 01 61 __ __ __ __ __ ....cn0...a + +(cn=*a) +0000: A4 09 04 02 63 6E 30 03 82 01 61 __ __ __ __ __ ....cn0...a + +cn=*a* +0000: A4 09 04 02 63 6E 30 03 81 01 61 __ __ __ __ __ ....cn0...a +(cn=*a*) + +(cn=*) +0000: 87 02 63 6E __ __ __ __ __ __ __ __ __ __ __ __ ..cn + +(cn~=foo) +0000: A8 09 04 02 63 6E 04 03 66 6F 6F __ __ __ __ __ ....cn..foo + +(cn=Babs Jensen) +0000: A3 11 04 02 63 6E 04 0B 42 61 62 73 20 4A 65 6E ....cn..Babs Jen +0010: 73 65 6E __ __ __ __ __ __ __ __ __ __ __ __ __ sen + +(!(cn=Tim Howes)) +0000: A2 11 A3 0F 04 02 63 6E 04 09 54 69 6D 20 48 6F ......cn..Tim Ho +0010: 77 65 73 __ __ __ __ __ __ __ __ __ __ __ __ __ wes + +!(cn=Tim Howes) +0000: A2 11 A3 0F 04 02 63 6E 04 09 54 69 6D 20 48 6F ......cn..Tim Ho +0010: 77 65 73 __ __ __ __ __ __ __ __ __ __ __ __ __ wes +(!(cn=Tim Howes)) + +(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*))) +0000: A0 37 A3 15 04 0B 6F 62 6A 65 63 74 43 6C 61 73 .7....objectClas +0010: 73 04 06 50 65 72 73 6F 6E A1 1E A3 0C 04 02 73 s..Person......s +0020: 6E 04 06 4A 65 6E 73 65 6E A4 0E 04 02 63 6E 30 n..Jensen....cn0 +0030: 08 80 06 42 61 62 73 20 4A __ __ __ __ __ __ __ ...Babs J + +(o=univ*of*mich*) +0000: A4 15 04 01 6F 30 10 80 04 75 6E 69 76 81 02 6F ....o0...univ..o +0010: 66 81 04 6D 69 63 68 __ __ __ __ __ __ __ __ __ f..mich + +(cn:1.2.3.4.5:=Fred Flintstone) +0000: A9 20 81 09 31 2E 32 2E 33 2E 34 2E 35 82 02 63 .#..1.2.3.4.5..c +0010: 6E 83 0F 46 72 65 64 20 46 6C 69 6E 74 73 74 6F n..Fred Flintsto +0020: 6E 65 __ __ __ __ __ __ __ __ __ __ __ __ __ __ ne + +(sn:dn:2.4.6.8.10:=Barney Rubble) +0000: A9 22 81 0A 32 2E 34 2E 36 2E 38 2E 31 30 82 02 ."..2.4.6.8.10.. +0010: 73 6E 83 0D 42 61 72 6E 65 79 20 52 75 62 62 6C sn..Barney Rubbl +0020: 65 84 01 FF __ __ __ __ __ __ __ __ __ __ __ __ e... + +(o:dn:=Ace Industry) +0000: A9 14 82 01 6F 83 0C 41 63 65 20 49 6E 64 75 73 ....o..Ace Indus +0010: 74 72 79 84 01 FF __ __ __ __ __ __ __ __ __ __ try... + +(:dn:2.4.6.8.10:=Dino) +0000: A9 15 81 0A 32 2E 34 2E 36 2E 38 2E 31 30 83 04 ....2.4.6.8.10.. +0010: 44 69 6E 6F 84 01 FF __ __ __ __ __ __ __ __ __ Dino... + +(o=univ*of*mich*an) +0000: A4 19 04 01 6F 30 14 80 04 75 6E 69 76 81 02 6F ....o0...univ..o +0010: 66 81 04 6D 69 63 68 82 02 61 6E __ __ __ __ __ f..mich..an + +(&(cn=fred)(!(objectclass=organization))) +0000: A0 2B A3 0A 04 02 63 6E 04 04 66 72 65 64 A2 1D .+....cn..fred.. +0010: A3 1B 04 0B 6F 62 6A 65 63 74 63 6C 61 73 73 04 ....objectclass. +0020: 0C 6F 72 67 61 6E 69 7A 61 74 69 6F 6E __ __ __ .organization + +(| (& (cn=test)) (| (cn=foo))) +0000: A1 1B A0 0C A3 0A 04 02 63 6E 04 04 74 65 73 74 ........cn..test +0010: A1 0B A3 09 04 02 63 6E 04 03 66 6F 6F __ __ __ ......cn..foo +(|(&(cn=test))(|(cn=foo))) + +(| (cn=foo) (cn=test)) +0000: A1 17 A3 09 04 02 63 6E 04 03 66 6F 6F A3 0A 04 ......cn..foo... +0010: 02 63 6E 04 04 74 65 73 74 __ __ __ __ __ __ __ .cn..test +(|(cn=foo)(cn=test)) + +(& (| (cn=test) (cn=foo) (sn=bar)) (| (c=GB) (c=AU))) +0000: A0 38 A1 22 A3 0A 04 02 63 6E 04 04 74 65 73 74 .8."....cn..test +0010: A3 09 04 02 63 6E 04 03 66 6F 6F A3 09 04 02 73 ....cn..foo....s +0020: 6E 04 03 62 61 72 A1 12 A3 07 04 01 63 04 02 47 n..bar......c..G +0030: 42 A3 07 04 01 63 04 02 41 55 __ __ __ __ __ __ B....c..AU +(&(|(cn=test)(cn=foo)(sn=bar))(|(c=GB)(c=AU))) + +(| (& (c=GB) (cn=test)) (& (c=AU) (cn=test)) (& (c=GB) (cn=foo)) (& (c=AU) (cn=foo)) (& (c=GB) (sn=bar)) (& (c=AU) (sn=bar))) +0000: A1 81 86 A0 15 A3 07 04 01 63 04 02 47 42 A3 0A .........c..GB.. +0010: 04 02 63 6E 04 04 74 65 73 74 A0 15 A3 07 04 01 ..cn..test...... +0020: 63 04 02 41 55 A3 0A 04 02 63 6E 04 04 74 65 73 c..AU....cn..tes +0030: 74 A0 14 A3 07 04 01 63 04 02 47 42 A3 09 04 02 t......c..GB.... +0040: 63 6E 04 03 66 6F 6F A0 14 A3 07 04 01 63 04 02 cn..foo......c.. +0050: 41 55 A3 09 04 02 63 6E 04 03 66 6F 6F A0 14 A3 AU....cn..foo... +0060: 07 04 01 63 04 02 47 42 A3 09 04 02 73 6E 04 03 ...c..GB....sn.. +0070: 62 61 72 A0 14 A3 07 04 01 63 04 02 41 55 A3 09 bar......c..AU.. +0080: 04 02 73 6E 04 03 62 61 72 __ __ __ __ __ __ __ ..sn..bar +(|(&(c=GB)(cn=test))(&(c=AU)(cn=test))(&(c=GB)(cn=foo))(&(c=AU)(cn=foo))(&(c=GB)(sn=bar))(&(c=AU)(sn=bar))) + +(& (| (cn=test) (cn=foo) (sn=bar)) (c=GB)) +0000: A0 2D A1 22 A3 0A 04 02 63 6E 04 04 74 65 73 74 .-."....cn..test +0010: A3 09 04 02 63 6E 04 03 66 6F 6F A3 09 04 02 73 ....cn..foo....s +0020: 6E 04 03 62 61 72 A3 07 04 01 63 04 02 47 42 __ n..bar....c..GB +(&(|(cn=test)(cn=foo)(sn=bar))(c=GB)) + +(| (& (sn=bar) (c=GB)) (& (cn=foo) (c=GB)) (& (cn=test) (c=GB))) +0000: A1 43 A0 14 A3 09 04 02 73 6E 04 03 62 61 72 A3 .C......sn..bar. +0010: 07 04 01 63 04 02 47 42 A0 14 A3 09 04 02 63 6E ...c..GB......cn +0020: 04 03 66 6F 6F A3 07 04 01 63 04 02 47 42 A0 15 ..foo....c..GB.. +0030: A3 0A 04 02 63 6E 04 04 74 65 73 74 A3 07 04 01 ....cn..test.... +0040: 63 04 02 47 42 __ __ __ __ __ __ __ __ __ __ __ c..GB +(|(&(sn=bar)(c=GB))(&(cn=foo)(c=GB))(&(cn=test)(c=GB))) + +(& (& (cn=foo) (| (cn=bar) (cn=xyz))) (& (cn=foo2) (| (cn=1) (cn=2)))) +0000: A0 47 A0 23 A3 09 04 02 63 6E 04 03 66 6F 6F A1 .G.#....cn..foo. +0010: 16 A3 09 04 02 63 6E 04 03 62 61 72 A3 09 04 02 .....cn..bar.... +0020: 63 6E 04 03 78 79 7A A0 20 A3 0A 04 02 63 6E 04 cn..xyz. ....cn. +0030: 04 66 6F 6F 32 A1 12 A3 07 04 02 63 6E 04 01 31 .foo2......cn..1 +0040: A3 07 04 02 63 6E 04 01 32 __ __ __ __ __ __ __ ....cn..2 +(&(&(cn=foo)(|(cn=bar)(cn=xyz)))(&(cn=foo2)(|(cn=1)(cn=2)))) + +(& (& (cn=foo) (! (cn=bar))) (| (cn=oof) (cn=foobie))) +0000: A0 35 A0 18 A3 09 04 02 63 6E 04 03 66 6F 6F A2 .5......cn..foo. +0010: 0B A3 09 04 02 63 6E 04 03 62 61 72 A1 19 A3 09 .....cn..bar.... +0020: 04 02 63 6E 04 03 6F 6F 66 A3 0C 04 02 63 6E 04 ..cn..oof....cn. +0030: 06 66 6F 6F 62 69 65 __ __ __ __ __ __ __ __ __ .foobie +(&(&(cn=foo)(!(cn=bar)))(|(cn=oof)(cn=foobie))) + +(| (& (cn=foobie) (cn=foo) (! (cn=bar))) (& (cn=oof) (cn=foo) (! (cn=bar)))) +0000: A1 4D A0 26 A3 0C 04 02 63 6E 04 06 66 6F 6F 62 .M.&....cn..foob +0010: 69 65 A3 09 04 02 63 6E 04 03 66 6F 6F A2 0B A3 ie....cn..foo... +0020: 09 04 02 63 6E 04 03 62 61 72 A0 23 A3 09 04 02 ...cn..bar.#.... +0030: 63 6E 04 03 6F 6F 66 A3 09 04 02 63 6E 04 03 66 cn..oof....cn..f +0040: 6F 6F A2 0B A3 09 04 02 63 6E 04 03 62 61 72 __ oo......cn..bar +(|(&(cn=foobie)(cn=foo)(!(cn=bar)))(&(cn=oof)(cn=foo)(!(cn=bar)))) + +(| (cn=foo) (cn=bar) (! (& (cn=a) (cn=b) (cn=c)))) +0000: A1 35 A3 09 04 02 63 6E 04 03 66 6F 6F A3 09 04 .5....cn..foo... +0010: 02 63 6E 04 03 62 61 72 A2 1D A0 1B A3 07 04 02 .cn..bar........ +0020: 63 6E 04 01 61 A3 07 04 02 63 6E 04 01 62 A3 07 cn..a....cn..b.. +0030: 04 02 63 6E 04 01 63 __ __ __ __ __ __ __ __ __ ..cn..c +(|(cn=foo)(cn=bar)(!(&(cn=a)(cn=b)(cn=c)))) + +(| (! (cn=a)) (! (cn=b)) (! (cn=c)) (cn=foo) (cn=bar)) +0000: A1 37 A2 09 A3 07 04 02 63 6E 04 01 61 A2 09 A3 .7......cn..a... +0010: 07 04 02 63 6E 04 01 62 A2 09 A3 07 04 02 63 6E ...cn..b......cn +0020: 04 01 63 A3 09 04 02 63 6E 04 03 66 6F 6F A3 09 ..c....cn..foo.. +0030: 04 02 63 6E 04 03 62 61 72 __ __ __ __ __ __ __ ..cn..bar +(|(!(cn=a))(!(cn=b))(!(cn=c))(cn=foo)(cn=bar)) + +(& (cn=foo) (cn=bar) (! (& (cn=a) (cn=b) (cn=c)))) +0000: A0 35 A3 09 04 02 63 6E 04 03 66 6F 6F A3 09 04 .5....cn..foo... +0010: 02 63 6E 04 03 62 61 72 A2 1D A0 1B A3 07 04 02 .cn..bar........ +0020: 63 6E 04 01 61 A3 07 04 02 63 6E 04 01 62 A3 07 cn..a....cn..b.. +0030: 04 02 63 6E 04 01 63 __ __ __ __ __ __ __ __ __ ..cn..c +(&(cn=foo)(cn=bar)(!(&(cn=a)(cn=b)(cn=c)))) + +(| (& (! (cn=a)) (cn=bar) (cn=foo)) (& (! (cn=b)) (cn=bar) (cn=foo)) (& (! (cn=c)) (cn=bar) (cn=foo))) +0000: A1 69 A0 21 A2 09 A3 07 04 02 63 6E 04 01 61 A3 .i.!......cn..a. +0010: 09 04 02 63 6E 04 03 62 61 72 A3 09 04 02 63 6E ...cn..bar....cn +0020: 04 03 66 6F 6F A0 21 A2 09 A3 07 04 02 63 6E 04 ..foo.!......cn. +0030: 01 62 A3 09 04 02 63 6E 04 03 62 61 72 A3 09 04 .b....cn..bar... +0040: 02 63 6E 04 03 66 6F 6F A0 21 A2 09 A3 07 04 02 .cn..foo.!...... +0050: 63 6E 04 01 63 A3 09 04 02 63 6E 04 03 62 61 72 cn..c....cn..bar +0060: A3 09 04 02 63 6E 04 03 66 6F 6F __ __ __ __ __ ....cn..foo +(|(&(!(cn=a))(cn=bar)(cn=foo))(&(!(cn=b))(cn=bar)(cn=foo))(&(!(cn=c))(cn=bar)(cn=foo))) + +(| (cn=foo\(bar\)) (cn=test)) +0000: A1 1C A3 0E 04 02 63 6E 04 08 66 6F 6F 28 62 61 ......cn..foo(ba +0010: 72 29 A3 0A 04 02 63 6E 04 04 74 65 73 74 __ __ r)....cn..test +(|(cn=foo\28bar\29)(cn=test)) + +(cn=foo\*) +0000: A3 0A 04 02 63 6E 04 04 66 6F 6F 2A __ __ __ __ ....cn..foo* +(cn=foo\2a) + +(cn=foo\\*) +0000: A4 0C 04 02 63 6E 30 06 80 04 66 6F 6F 5C __ __ ....cn0...foo\ +(cn=foo\5c*) + +(cn=\\*foo) +0000: A4 0E 04 02 63 6E 30 08 80 01 5C 82 03 66 6F 6F ....cn0...\..foo +(cn=\5c*foo) + +(cn=\\*foo\\*) +0000: A4 0F 04 02 63 6E 30 09 80 01 5C 81 04 66 6F 6F ....cn0...\..foo +0010: 5C __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ \ +(cn=\5c*foo\5c*) + +(ou:dn:caseIgnoreMatch:=people) +0000: A9 20 81 0F 63 61 73 65 49 67 6E 6F 72 65 4D 61 . ..caseIgnoreMa +0010: 74 63 68 82 02 6F 75 83 06 70 65 6F 70 6C 65 84 tch..ou..people. +0020: 01 FF __ __ __ __ __ __ __ __ __ __ __ __ __ __ .. + +(sn:caseIgnoreMatch:=barr) +0000: A9 1B 81 0F 63 61 73 65 49 67 6E 6F 72 65 4D 61 ....caseIgnoreMa +0010: 74 63 68 82 02 73 6E 83 04 62 61 72 72 __ __ __ tch..sn..barr + +(attr=*) +0000: 87 04 61 74 74 72 __ __ __ __ __ __ __ __ __ __ ..attr + +(attr;x-tag=*) +0000: 87 0A 61 74 74 72 3B 78 2D 74 61 67 __ __ __ __ ..attr;x-tag + +(attr=) +0000: A3 08 04 04 61 74 74 72 04 00 __ __ __ __ __ __ ....attr.. + +(1.2.3.4.5=) +0000: A3 0D 04 09 31 2E 32 2E 33 2E 34 2E 35 04 00 __ ....1.2.3.4.5.. + +(1.2.3.4.5;x-tag=) +0000: A3 13 04 0F 31 2E 32 2E 33 2E 34 2E 35 3B 78 2D ....1.2.3.4.5;x- +0010: 74 61 67 04 00 __ __ __ __ __ __ __ __ __ __ __ tag.. + +(attr=value) +0000: A3 0D 04 04 61 74 74 72 04 05 76 61 6C 75 65 __ ....attr..value + +(space= ) +0000: A3 0A 04 05 73 70 61 63 65 04 01 20 __ __ __ __ ....space.. + +(null=\00) +0000: A3 09 04 04 6E 75 6C 6C 04 01 00 __ __ __ __ __ ....null... + +(bell=\07) +0000: A3 09 04 04 62 65 6C 6C 04 01 07 __ __ __ __ __ ....bell... + +(bell=) +0000: A3 09 04 04 62 65 6C 6C 04 01 07 __ __ __ __ __ ....bell... +(bell=\07) + +(attr;x-star=\2a) +0000: A3 10 04 0B 61 74 74 72 3B 78 2D 73 74 61 72 04 ....attr;x-star. +0010: 01 2A __ __ __ __ __ __ __ __ __ __ __ __ __ __ .* +(attr;x-star=\2a) + +(attr;x-escape=\5C) +0000: A3 12 04 0D 61 74 74 72 3B 78 2D 65 73 63 61 70 ....attr;x-escap +0010: 65 04 01 5C __ __ __ __ __ __ __ __ __ __ __ __ e..\ +(attr;x-escape=\5c) + +(attr=initial*) +0000: A4 11 04 04 61 74 74 72 30 09 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C __ __ __ __ __ __ __ __ __ __ __ __ __ ial + +(attr=*any*) +0000: A4 0D 04 04 61 74 74 72 30 05 81 03 61 6E 79 __ ....attr0...any + +(attr=*final) +0000: A4 0F 04 04 61 74 74 72 30 07 82 05 66 69 6E 61 ....attr0...fina +0010: 6C __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ l + +(attr=initial*final) +0000: A4 18 04 04 61 74 74 72 30 10 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C 82 05 66 69 6E 61 6C __ __ __ __ __ __ ial..final + +(attr=initial*any*any*final) +0000: A4 22 04 04 61 74 74 72 30 1A 80 07 69 6E 69 74 ."..attr0...init +0010: 69 61 6C 81 03 61 6E 79 81 03 61 6E 79 82 05 66 ial..any..any..f +0020: 69 6E 61 6C __ __ __ __ __ __ __ __ __ __ __ __ inal + +(attr=initial*any*) +0000: A4 16 04 04 61 74 74 72 30 0E 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C 81 03 61 6E 79 __ __ __ __ __ __ __ __ ial..any + +(attr=*any*final) +0000: A4 14 04 04 61 74 74 72 30 0C 81 03 61 6E 79 82 ....attr0...any. +0010: 05 66 69 6E 61 6C __ __ __ __ __ __ __ __ __ __ .final + +(attr=*any*any*) +0000: A4 12 04 04 61 74 74 72 30 0A 81 03 61 6E 79 81 ....attr0...any. +0010: 03 61 6E 79 __ __ __ __ __ __ __ __ __ __ __ __ .any + +(attr=**) +0000: A4 0A 04 04 61 74 74 72 30 02 81 00 __ __ __ __ ....attr0... + +(attr=initial**) +0000: A4 13 04 04 61 74 74 72 30 0B 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C 81 00 __ __ __ __ __ __ __ __ __ __ __ ial.. + +(attr=**final) +0000: A4 11 04 04 61 74 74 72 30 09 81 00 82 05 66 69 ....attr0.....fi +0010: 6E 61 6C __ __ __ __ __ __ __ __ __ __ __ __ __ nal + +(attr=initial**final) +0000: A4 1A 04 04 61 74 74 72 30 12 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C 81 00 82 05 66 69 6E 61 6C __ __ __ __ ial....final + +(attr=initial***final) +0000: A4 1C 04 04 61 74 74 72 30 14 80 07 69 6E 69 74 ....attr0...init +0010: 69 61 6C 81 00 81 00 82 05 66 69 6E 61 6C __ __ ial......final + +(attr~=) +0000: A8 08 04 04 61 74 74 72 04 00 __ __ __ __ __ __ ....attr.. + +(attr~=fubar) +0000: A8 0D 04 04 61 74 74 72 04 05 66 75 62 61 72 __ ....attr..fubar + +(attr>=fubar) +0000: A5 0D 04 04 61 74 74 72 04 05 66 75 62 61 72 __ ....attr..fubar + +(attr<=fubar) +0000: A6 0D 04 04 61 74 74 72 04 05 66 75 62 61 72 __ ....attr..fubar + +(attr:1.2.3:=fubar) +0000: A9 14 81 05 31 2E 32 2E 33 82 04 61 74 74 72 83 ....1.2.3..attr. +0010: 05 66 75 62 61 72 __ __ __ __ __ __ __ __ __ __ .fubar + +(attr:dn:=fubar) +0000: A9 10 82 04 61 74 74 72 83 05 66 75 62 61 72 84 ....attr..fubar. +0010: 01 FF __ __ __ __ __ __ __ __ __ __ __ __ __ __ .. + +(attr:DN:=fubar) +0000: A9 11 81 02 44 4E 82 04 61 74 74 72 83 05 66 75 ....DN..attr..fu +0010: 62 61 72 __ __ __ __ __ __ __ __ __ __ __ __ __ bar + +(attr:dn:1.2.3:=fubar) +0000: A9 17 81 05 31 2E 32 2E 33 82 04 61 74 74 72 83 ....1.2.3..attr. +0010: 05 66 75 62 61 72 84 01 FF __ __ __ __ __ __ __ .fubar... + +(:1.2.3:=fubar) +0000: A9 0E 81 05 31 2E 32 2E 33 83 05 66 75 62 61 72 ....1.2.3..fubar + +(:caseExactMatch:=fubar) +0000: A9 17 81 0E 63 61 73 65 45 78 61 63 74 4D 61 74 ....caseExactMat +0010: 63 68 83 05 66 75 62 61 72 __ __ __ __ __ __ __ ch..fubar + +(:dn:1.2.3:=fubar) +0000: A9 11 81 05 31 2E 32 2E 33 83 05 66 75 62 61 72 ....1.2.3..fubar +0010: 84 01 FF __ __ __ __ __ __ __ __ __ __ __ __ __ ... + +(:dn:caseIgnoreMatch:=fubar) +0000: A9 1B 81 0F 63 61 73 65 49 67 6E 6F 72 65 4D 61 ....caseIgnoreMa +0010: 74 63 68 83 05 66 75 62 61 72 84 01 FF __ __ __ tch..fubar... + +(!(objectClass=*)) +0000: A2 0D 87 0B 6F 62 6A 65 63 74 43 6C 61 73 73 __ ....objectClass + +(!(|(&(!(objectClass=*))))) +0000: A2 13 A1 11 A0 0F A2 0D 87 0B 6F 62 6A 65 63 74 ..........object +0010: 43 6C 61 73 73 __ __ __ __ __ __ __ __ __ __ __ Class + +(&(objectClass=*)) +0000: A0 0D 87 0B 6F 62 6A 65 63 74 43 6C 61 73 73 __ ....objectClass + +(&(objectClass=*)(name~=)) +0000: A0 17 87 0B 6F 62 6A 65 63 74 43 6C 61 73 73 A8 ....objectClass. +0010: 08 04 04 6E 61 6D 65 04 00 __ __ __ __ __ __ __ ...name.. + +(|(objectClass=*)) +0000: A1 0D 87 0B 6F 62 6A 65 63 74 43 6C 61 73 73 __ ....objectClass + +(|(objectClass=*)(name~=)) +0000: A1 17 87 0B 6F 62 6A 65 63 74 43 6C 61 73 73 A8 ....objectClass. +0010: 08 04 04 6E 61 6D 65 04 00 __ __ __ __ __ __ __ ...name.. |