Blame examples/ldap

Packit ef9df4
$desc = <<'ESQ';
Packit ef9df4
        LDAPMessage ::= SEQUENCE {
Packit ef9df4
                messageID       MessageID,
Packit ef9df4
                protocolOp      CHOICE {
Packit ef9df4
                        bindRequest     BindRequest,
Packit ef9df4
                        bindResponse    BindResponse,
Packit ef9df4
                        unbindRequest   UnbindRequest,
Packit ef9df4
                        searchRequest   SearchRequest,
Packit ef9df4
                        searchResEntry  SearchResultEntry,
Packit ef9df4
                        searchResDone   SearchResultDone,
Packit ef9df4
                        searchResRef    SearchResultReference,
Packit ef9df4
                        modifyRequest   ModifyRequest,
Packit ef9df4
                        modifyResponse  ModifyResponse,
Packit ef9df4
                        addRequest      AddRequest,
Packit ef9df4
                        addResponse     AddResponse,
Packit ef9df4
                        delRequest      DelRequest,
Packit ef9df4
                        delResponse     DelResponse,
Packit ef9df4
                        modDNRequest    ModifyDNRequest,
Packit ef9df4
                        modDNResponse   ModifyDNResponse,
Packit ef9df4
                        compareRequest  CompareRequest,
Packit ef9df4
                        compareResponse CompareResponse,
Packit ef9df4
                        abandonRequest  AbandonRequest,
Packit ef9df4
                        extendedReq     ExtendedRequest,
Packit ef9df4
                        extendedResp    ExtendedResponse }
Packit ef9df4
                 controls       [0] Controls OPTIONAL }
Packit ef9df4
Packit ef9df4
        MessageID ::= INTEGER -- (0 .. maxInt)
Packit ef9df4
Packit ef9df4
        -- maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
Packit ef9df4
Packit ef9df4
        LDAPString ::= OCTET STRING
Packit ef9df4
Packit ef9df4
        LDAPOID ::= OCTET STRING
Packit ef9df4
Packit ef9df4
        LDAPDN ::= LDAPString
Packit ef9df4
Packit ef9df4
        RelativeLDAPDN ::= LDAPString
Packit ef9df4
Packit ef9df4
        AttributeType ::= LDAPString
Packit ef9df4
Packit ef9df4
        AttributeDescription ::= LDAPString
Packit ef9df4
Packit ef9df4
        AttributeDescriptionList ::= SEQUENCE OF
Packit ef9df4
                AttributeDescription
Packit ef9df4
Packit ef9df4
        AttributeValue ::= OCTET STRING
Packit ef9df4
Packit ef9df4
        AttributeValueAssertion ::= SEQUENCE {
Packit ef9df4
                attributeDesc   AttributeDescription,
Packit ef9df4
                assertionValue  AssertionValue }
Packit ef9df4
Packit ef9df4
        AssertionValue ::= OCTET STRING
Packit ef9df4
Packit ef9df4
        Attribute ::= SEQUENCE {
Packit ef9df4
                type    AttributeDescription,
Packit ef9df4
                vals    SET OF AttributeValue }
Packit ef9df4
Packit ef9df4
        MatchingRuleId ::= LDAPString
Packit ef9df4
Packit ef9df4
        LDAPResult ::= SEQUENCE {
Packit ef9df4
                resultCode      ENUMERATED {
Packit ef9df4
                             success                      (0),
Packit ef9df4
                             operationsError              (1),
Packit ef9df4
                             protocolError                (2),
Packit ef9df4
                             timeLimitExceeded            (3),
Packit ef9df4
                             sizeLimitExceeded            (4),
Packit ef9df4
                             compareFalse                 (5),
Packit ef9df4
                             compareTrue                  (6),
Packit ef9df4
                             authMethodNotSupported       (7),
Packit ef9df4
                             strongAuthRequired           (8),
Packit ef9df4
                                        -- 9 reserved --
Packit ef9df4
                             referral                     (10),  -- new
Packit ef9df4
                             adminLimitExceeded           (11),  -- new
Packit ef9df4
                             unavailableCriticalExtension (12),  -- new
Packit ef9df4
                             confidentialityRequired      (13),  -- new
Packit ef9df4
                             saslBindInProgress           (14),  -- new
Packit ef9df4
                             noSuchAttribute              (16),
Packit ef9df4
                             undefinedAttributeType       (17),
Packit ef9df4
                             inappropriateMatching        (18),
Packit ef9df4
                             constraintViolation          (19),
Packit ef9df4
                             attributeOrValueExists       (20),
Packit ef9df4
                             invalidAttributeSyntax       (21),
Packit ef9df4
                                        -- 22-31 unused --
Packit ef9df4
                             noSuchObject                 (32),
Packit ef9df4
                             aliasProblem                 (33),
Packit ef9df4
                             invalidDNSyntax              (34),
Packit ef9df4
                             -- 35 reserved for undefined isLeaf --
Packit ef9df4
                             aliasDereferencingProblem    (36),
Packit ef9df4
                                        -- 37-47 unused --
Packit ef9df4
                             inappropriateAuthentication  (48),
Packit ef9df4
                             invalidCredentials           (49),
Packit ef9df4
                             insufficientAccessRights     (50),
Packit ef9df4
                             busy                         (51),
Packit ef9df4
                             unavailable                  (52),
Packit ef9df4
                             unwillingToPerform           (53),
Packit ef9df4
                             loopDetect                   (54),
Packit ef9df4
                                        -- 55-63 unused --
Packit ef9df4
                             namingViolation              (64),
Packit ef9df4
                             objectClassViolation         (65),
Packit ef9df4
                             notAllowedOnNonLeaf          (66),
Packit ef9df4
                             notAllowedOnRDN              (67),
Packit ef9df4
                             entryAlreadyExists           (68),
Packit ef9df4
                             objectClassModsProhibited    (69),
Packit ef9df4
                                        -- 70 reserved for CLDAP --
Packit ef9df4
                             affectsMultipleDSAs          (71), -- new
Packit ef9df4
                                        -- 72-79 unused --
Packit ef9df4
                             other                        (80)}
Packit ef9df4
                             -- 81-90 reserved for APIs --
Packit ef9df4
                matchedDN       LDAPDN,
Packit ef9df4
                errorMessage    LDAPString,
Packit ef9df4
                referral        [3] Referral OPTIONAL }
Packit ef9df4
Packit ef9df4
        Referral ::= SEQUENCE OF LDAPURL
Packit ef9df4
Packit ef9df4
        LDAPURL ::= LDAPString -- limited to characters permitted in URLs
Packit ef9df4
Packit ef9df4
        Controls ::= SEQUENCE OF Control
Packit ef9df4
Packit ef9df4
        Control ::= SEQUENCE {
Packit ef9df4
                controlType             LDAPOID,
Packit ef9df4
                criticality             BOOLEAN , -- DEFAULT FALSE,
Packit ef9df4
                controlValue            OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
        BindRequest ::= [APPLICATION 0] SEQUENCE {
Packit ef9df4
                version                 INTEGER, -- (1 .. 127),
Packit ef9df4
                name                    LDAPDN,
Packit ef9df4
                authentication          AuthenticationChoice }
Packit ef9df4
Packit ef9df4
        AuthenticationChoice ::= CHOICE {
Packit ef9df4
                simple                  [0] OCTET STRING,
Packit ef9df4
                                         -- 1 and 2 reserved
Packit ef9df4
                sasl                    [3] SaslCredentials }
Packit ef9df4
Packit ef9df4
        SaslCredentials ::= SEQUENCE {
Packit ef9df4
                mechanism               LDAPString,
Packit ef9df4
                credentials             OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
        BindResponse ::= [APPLICATION 1] SEQUENCE {
Packit ef9df4
             COMPONENTS OF LDAPResult,
Packit ef9df4
             serverSaslCreds    [7] OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
        UnbindRequest ::= [APPLICATION 2] NULL
Packit ef9df4
Packit ef9df4
        SearchRequest ::= [APPLICATION 3] SEQUENCE {
Packit ef9df4
                baseObject      LDAPDN,
Packit ef9df4
                scope           ENUMERATED {
Packit ef9df4
                        baseObject              (0),
Packit ef9df4
                        singleLevel             (1),
Packit ef9df4
                        wholeSubtree            (2) }
Packit ef9df4
                derefAliases    ENUMERATED {
Packit ef9df4
                        neverDerefAliases       (0),
Packit ef9df4
                        derefInSearching        (1),
Packit ef9df4
                        derefFindingBaseObj     (2),
Packit ef9df4
                        derefAlways             (3) }
Packit ef9df4
                sizeLimit       INTEGER , -- (0 .. maxInt),
Packit ef9df4
                timeLimit       INTEGER , -- (0 .. maxInt),
Packit ef9df4
                typesOnly       BOOLEAN,
Packit ef9df4
                filter          Filter,
Packit ef9df4
                attributes      AttributeDescriptionList }
Packit ef9df4
Packit ef9df4
        Filter ::= CHOICE {
Packit ef9df4
                and             [0] SET OF Filter,
Packit ef9df4
                or              [1] SET OF Filter,
Packit ef9df4
                not             [2] Filter,
Packit ef9df4
                equalityMatch   [3] AttributeValueAssertion,
Packit ef9df4
                substrings      [4] SubstringFilter,
Packit ef9df4
                greaterOrEqual  [5] AttributeValueAssertion,
Packit ef9df4
                lessOrEqual     [6] AttributeValueAssertion,
Packit ef9df4
                present         [7] AttributeDescription,
Packit ef9df4
                approxMatch     [8] AttributeValueAssertion,
Packit ef9df4
                extensibleMatch [9] MatchingRuleAssertion }
Packit ef9df4
Packit ef9df4
        SubstringFilter ::= SEQUENCE {
Packit ef9df4
                type            AttributeDescription,
Packit ef9df4
                -- at least one must be present
Packit ef9df4
                substrings      SEQUENCE OF CHOICE {
Packit ef9df4
                        initial [0] LDAPString,
Packit ef9df4
                        any     [1] LDAPString,
Packit ef9df4
                        final   [2] LDAPString } }
Packit ef9df4
Packit ef9df4
        MatchingRuleAssertion ::= SEQUENCE {
Packit ef9df4
                matchingRule    [1] MatchingRuleId OPTIONAL,
Packit ef9df4
                type            [2] AttributeDescription OPTIONAL,
Packit ef9df4
                matchValue      [3] AssertionValue,
Packit ef9df4
                dnAttributes    [4] BOOLEAN } -- DEFAULT FALSE }
Packit ef9df4
Packit ef9df4
        SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
Packit ef9df4
                objectName      LDAPDN,
Packit ef9df4
                attributes      PartialAttributeList }
Packit ef9df4
Packit ef9df4
        PartialAttributeList ::= SEQUENCE OF SEQUENCE {
Packit ef9df4
                type    AttributeDescription,
Packit ef9df4
                vals    SET OF AttributeValue }
Packit ef9df4
Packit ef9df4
        SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL
Packit ef9df4
Packit ef9df4
        SearchResultDone ::= [APPLICATION 5] LDAPResult
Packit ef9df4
Packit ef9df4
        ModifyRequest ::= [APPLICATION 6] SEQUENCE {
Packit ef9df4
                object          LDAPDN,
Packit ef9df4
                modification    SEQUENCE OF SEQUENCE {
Packit ef9df4
                        operation       ENUMERATED {
Packit ef9df4
                                                add     (0),
Packit ef9df4
                                                delete  (1),
Packit ef9df4
                                                replace (2) }
Packit ef9df4
                        modification    AttributeTypeAndValues } }
Packit ef9df4
Packit ef9df4
        AttributeTypeAndValues ::= SEQUENCE {
Packit ef9df4
                type    AttributeDescription,
Packit ef9df4
                vals    SET OF AttributeValue }
Packit ef9df4
Packit ef9df4
        ModifyResponse ::= [APPLICATION 7] LDAPResult
Packit ef9df4
Packit ef9df4
        AddRequest ::= [APPLICATION 8] SEQUENCE {
Packit ef9df4
                entry           LDAPDN,
Packit ef9df4
                attributes      AttributeList }
Packit ef9df4
Packit ef9df4
        AttributeList ::= SEQUENCE OF SEQUENCE {
Packit ef9df4
                type    AttributeDescription,
Packit ef9df4
                vals    SET OF AttributeValue }
Packit ef9df4
Packit ef9df4
        AddResponse ::= [APPLICATION 9] LDAPResult
Packit ef9df4
Packit ef9df4
        DelRequest ::= [APPLICATION 10] LDAPDN
Packit ef9df4
Packit ef9df4
        DelResponse ::= [APPLICATION 11] LDAPResult
Packit ef9df4
Packit ef9df4
        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
Packit ef9df4
                entry           LDAPDN,
Packit ef9df4
                newrdn          RelativeLDAPDN,
Packit ef9df4
                deleteoldrdn    BOOLEAN,
Packit ef9df4
                newSuperior     [0] LDAPDN OPTIONAL }
Packit ef9df4
Packit ef9df4
        ModifyDNResponse ::= [APPLICATION 13] LDAPResult
Packit ef9df4
Packit ef9df4
        CompareRequest ::= [APPLICATION 14] SEQUENCE {
Packit ef9df4
                entry           LDAPDN,
Packit ef9df4
                ava             AttributeValueAssertion }
Packit ef9df4
Packit ef9df4
        CompareResponse ::= [APPLICATION 15] LDAPResult
Packit ef9df4
Packit ef9df4
        AbandonRequest ::= [APPLICATION 16] MessageID
Packit ef9df4
Packit ef9df4
        ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
Packit ef9df4
                requestName      [0] LDAPOID,
Packit ef9df4
                requestValue     [1] OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
        ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
Packit ef9df4
                COMPONENTS OF LDAPResult,
Packit ef9df4
                responseName     [10] LDAPOID OPTIONAL,
Packit ef9df4
                response         [11] OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
Packit ef9df4
       VirtualListViewRequest ::= SEQUENCE {
Packit ef9df4
               beforeCount    INTEGER , --(0 .. maxInt),
Packit ef9df4
               afterCount     INTEGER , --(0 .. maxInt),
Packit ef9df4
               CHOICE {
Packit ef9df4
                       byIndex [0] SEQUENCE {
Packit ef9df4
                       index           INTEGER , --(0 .. maxInt),
Packit ef9df4
                       contentCount    INTEGER } --(0 .. maxInt) }
Packit ef9df4
                       byValue [1] AssertionValue }
Packit ef9df4
                       -- byValue [1] greaterThanOrEqual assertionValue }
Packit ef9df4
             contextID     OCTET STRING OPTIONAL }
Packit ef9df4
Packit ef9df4
       VirtualListViewResponse ::= SEQUENCE {
Packit ef9df4
               targetPosition    INTEGER , --(0 .. maxInt),
Packit ef9df4
               contentCount     INTEGER , --(0 .. maxInt),
Packit ef9df4
               virtualListViewResult ENUMERATED {
Packit ef9df4
                       success (0),
Packit ef9df4
                       operatonsError (1),
Packit ef9df4
                       unwillingToPerform (53),
Packit ef9df4
                       insufficientAccessRights (50),
Packit ef9df4
                       busy (51),
Packit ef9df4
                       timeLimitExceeded (3),
Packit ef9df4
                       adminLimitExceeded (11),
Packit ef9df4
                       sortControlMissing (60),
Packit ef9df4
                       indexRangeError (61),
Packit ef9df4
                       other (80) }  }
Packit ef9df4
ESQ
Packit ef9df4
Packit ef9df4
use lib 'lib';
Packit ef9df4
use Convert::ASN1;
Packit ef9df4
use Convert::ASN1::Debug qw(asn_dump asn_hexdump);
Packit ef9df4
$asn = Convert::ASN1->new;
Packit ef9df4
$asn->prepare($desc) or die $asn->error;
Packit ef9df4
#$asn->dump;
Packit ef9df4
Packit ef9df4
$filter = $asn->find('Filter');
Packit ef9df4
Packit ef9df4
# A Filter
Packit ef9df4
# (&(!(desc=value))(|(xx=x*y*)(yy=*1*2)))
Packit ef9df4
Packit ef9df4
$buf = $filter->encode(
Packit ef9df4
{
Packit ef9df4
  and => [
Packit ef9df4
    {
Packit ef9df4
      not => {
Packit ef9df4
        equalityMatch => {
Packit ef9df4
          attributeDesc => 'desc',
Packit ef9df4
          assertionValue => 'value'
Packit ef9df4
        }
Packit ef9df4
      }
Packit ef9df4
    },
Packit ef9df4
    {
Packit ef9df4
      or => [
Packit ef9df4
        {
Packit ef9df4
          substrings => {
Packit ef9df4
            type => 'xx',
Packit ef9df4
            substrings => [
Packit ef9df4
              {
Packit ef9df4
                initial => 'x'
Packit ef9df4
              },
Packit ef9df4
              {
Packit ef9df4
                any => 'y'
Packit ef9df4
              }
Packit ef9df4
            ]
Packit ef9df4
          }
Packit ef9df4
        },
Packit ef9df4
        {
Packit ef9df4
          substrings => {
Packit ef9df4
            type => 'yy',
Packit ef9df4
            substrings => [
Packit ef9df4
              {
Packit ef9df4
                any => 1
Packit ef9df4
              },
Packit ef9df4
              {
Packit ef9df4
                final => 2
Packit ef9df4
              }
Packit ef9df4
            ]
Packit ef9df4
          }
Packit ef9df4
        }
Packit ef9df4
      ]
Packit ef9df4
    }
Packit ef9df4
  ]
Packit ef9df4
}
Packit ef9df4
) or die $filter->error;
Packit ef9df4
Packit ef9df4
asn_dump($buf);
Packit ef9df4
Packit ef9df4
$ret = $filter->decode($buf) or die $filter->error;
Packit ef9df4
use Data::Dumper;
Packit ef9df4
$Data::Dumper::Indent=1;
Packit ef9df4
$Data::Dumper::Quotekeys=0;
Packit ef9df4
print Dumper($ret);