-
Notifications
You must be signed in to change notification settings - Fork 21
/
ldap-search
61 lines (55 loc) · 1.36 KB
/
ldap-search
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# This is an example of a search PDU from the LDAP protocol
use Convert::ASN1;
use Data::Dumper;
my %scope = qw(base 0 one 1 single 1 sub 2 subtree 2);
my %deref = qw(never 0 search 1 find 2 always 3);
my $search_pdu = Convert::ASN1->new;
$search_pdu->prepare(q(
SEQUENCE {
mesgid INTEGER,
[APPLICATION 3] SEQUENCE {
base STRING,
scope ENUM,
deref ENUM,
sizeLimit INTEGER,
timeLimit INTEGER,
typesOnly BOOLEAN,
filter STRING, -- for test, should be ANY and the var should hold
-- a pre-encoded filter
attrs SEQUENCE OF STRING
}
control [0] SEQUENCE OF SEQUENCE { -- this should be optional but we cannot do that inline
type STRING,
critical BOOLEAN,
value STRING OPTIONAL
}
}
)) or die $search_pdu->error;
$buf = $search_pdu->encode(
mesgid => 3,
base => "cn=base",
scope => $scope{one},
deref => $deref{find},
sizeLimit => 0,
timeLimit => 0,
typesOnly => 0,
filter => "A filter",
attrs => [qw(cn postalAddress)],
control => [
{
type => "1.2.3.4",
critical => 1
},
{
type => "9.8.7.6",
critical => 0,
value => "abc"
}
]
);
$Data::Dumper::Indent = 1;
print Dumper( $search_pdu->decode($buf));
$h = unpack("H*",$buf);
$h =~ s/(..)/$1 /g;
$h =~ s/(.{47}\s)/$1\n/g;
print $h,"\n";