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";