Blame examples/ldap-search
|
Packit |
ef9df4 |
# This is an example of a search PDU from the LDAP protocol
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
use Convert::ASN1;
|
|
Packit |
ef9df4 |
use Data::Dumper;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
my %scope = qw(base 0 one 1 single 1 sub 2 subtree 2);
|
|
Packit |
ef9df4 |
my %deref = qw(never 0 search 1 find 2 always 3);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
my $search_pdu = Convert::ASN1->new;
|
|
Packit |
ef9df4 |
$search_pdu->prepare(q(
|
|
Packit |
ef9df4 |
SEQUENCE {
|
|
Packit |
ef9df4 |
mesgid INTEGER,
|
|
Packit |
ef9df4 |
[APPLICATION 3] SEQUENCE {
|
|
Packit |
ef9df4 |
base STRING,
|
|
Packit |
ef9df4 |
scope ENUM,
|
|
Packit |
ef9df4 |
deref ENUM,
|
|
Packit |
ef9df4 |
sizeLimit INTEGER,
|
|
Packit |
ef9df4 |
timeLimit INTEGER,
|
|
Packit |
ef9df4 |
typesOnly BOOLEAN,
|
|
Packit |
ef9df4 |
filter STRING, -- for test, should be ANY and the var should hold
|
|
Packit |
ef9df4 |
-- a pre-encoded filter
|
|
Packit |
ef9df4 |
attrs SEQUENCE OF STRING
|
|
Packit |
ef9df4 |
}
|
|
Packit |
ef9df4 |
control [0] SEQUENCE OF SEQUENCE { -- this should be optional but we cannot do that inline
|
|
Packit |
ef9df4 |
type STRING,
|
|
Packit |
ef9df4 |
critical BOOLEAN,
|
|
Packit |
ef9df4 |
value STRING OPTIONAL
|
|
Packit |
ef9df4 |
}
|
|
Packit |
ef9df4 |
}
|
|
Packit |
ef9df4 |
)) or die $search_pdu->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$buf = $search_pdu->encode(
|
|
Packit |
ef9df4 |
mesgid => 3,
|
|
Packit |
ef9df4 |
base => "cn=base",
|
|
Packit |
ef9df4 |
scope => $scope{one},
|
|
Packit |
ef9df4 |
deref => $deref{find},
|
|
Packit |
ef9df4 |
sizeLimit => 0,
|
|
Packit |
ef9df4 |
timeLimit => 0,
|
|
Packit |
ef9df4 |
typesOnly => 0,
|
|
Packit |
ef9df4 |
filter => "A filter",
|
|
Packit |
ef9df4 |
attrs => [qw(cn postalAddress)],
|
|
Packit |
ef9df4 |
control => [
|
|
Packit |
ef9df4 |
{
|
|
Packit |
ef9df4 |
type => "1.2.3.4",
|
|
Packit |
ef9df4 |
critical => 1
|
|
Packit |
ef9df4 |
},
|
|
Packit |
ef9df4 |
{
|
|
Packit |
ef9df4 |
type => "9.8.7.6",
|
|
Packit |
ef9df4 |
critical => 0,
|
|
Packit |
ef9df4 |
value => "abc"
|
|
Packit |
ef9df4 |
}
|
|
Packit |
ef9df4 |
]
|
|
Packit |
ef9df4 |
);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$Data::Dumper::Indent = 1;
|
|
Packit |
ef9df4 |
print Dumper( $search_pdu->decode($buf));
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$h = unpack("H*",$buf);
|
|
Packit |
ef9df4 |
$h =~ s/(..)/$1 /g;
|
|
Packit |
ef9df4 |
$h =~ s/(.{47}\s)/$1\n/g;
|
|
Packit |
ef9df4 |
print $h,"\n";
|