[BACK]Return to aldap.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / ldap

Annotation of src/usr.bin/ldap/aldap.h, Revision 1.4

1.4     ! rob         1: /*     $OpenBSD: aldap.h,v 1.3 2019/01/17 06:18:27 tedu Exp $ */
1.1       reyk        2:
                      3: /*
                      4:  * Copyright (c) 2008 Alexander Schrijver <aschrijver@openbsd.org>
                      5:  * Copyright (c) 2006, 2007 Marc Balmer <mbalmer@openbsd.org>
                      6:  *
                      7:  * Permission to use, copy, modify, and distribute this software for any
                      8:  * purpose with or without fee is hereby granted, provided that the above
                      9:  * copyright notice and this permission notice appear in all copies.
                     10:  *
                     11:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     12:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     13:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     14:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     15:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     16:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     17:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     18:  */
                     19:
1.4     ! rob        20: #include <ber.h>
1.1       reyk       21: #include <stdio.h>
                     22: #include <tls.h>
                     23:
                     24: #define LDAP_URL               "ldap://"
                     25: #define LDAPS_URL              "ldaps://"
                     26: #define LDAPTLS_URL            "ldap+tls://"
                     27: #define LDAPI_URL              "ldapi://"
                     28:
                     29: #define LDAP_PORT              389
                     30: #define LDAPS_PORT             636
                     31: #define LDAP_PAGED_OID         "1.2.840.113556.1.4.319"
                     32: #define LDAP_STARTTLS_OID      "1.3.6.1.4.1.1466.20037"
                     33:
                     34: struct aldap {
                     35: #define ALDAP_ERR_SUCCESS              0
                     36: #define ALDAP_ERR_PARSER_ERROR         1
                     37: #define ALDAP_ERR_INVALID_FILTER       2
                     38: #define ALDAP_ERR_OPERATION_FAILED     3
                     39: #define ALDAP_ERR_TLS_ERROR            4
                     40:        u_int8_t        err;
                     41:        int             msgid;
                     42:        struct ber      ber;
                     43:
                     44:        int             fd;
                     45:        struct tls      *tls;
                     46:
                     47:        struct evbuffer *buf;
                     48: };
                     49:
                     50: struct aldap_page_control {
                     51:        int size;
                     52:        char *cookie;
                     53:        unsigned int cookie_len;
                     54: };
                     55:
                     56: struct aldap_message {
                     57:        int msgid;
                     58:        int message_type;
                     59:
                     60:        struct ber_element      *msg;
                     61:
                     62:        struct ber_element      *header;
                     63:        struct ber_element      *protocol_op;
                     64:
                     65:        struct ber_element      *dn;
                     66:
                     67:        union {
                     68:                struct {
                     69:                        long long                rescode;
                     70:                        struct ber_element      *diagmsg;
                     71:                }                        res;
                     72:                struct {
                     73:                        struct ber_element      *iter;
                     74:                        struct ber_element      *attrs;
                     75:                }                        search;
                     76:        } body;
                     77:        struct ber_element      *references;
                     78:        struct aldap_page_control *page;
                     79: };
                     80:
                     81: enum aldap_protocol {
                     82:        LDAP,
                     83:        LDAPS,
                     84:        LDAPTLS,
                     85:        LDAPI
                     86: };
                     87:
1.2       martijn    88: struct aldap_stringset {
                     89:        size_t                   len;
                     90:        struct ber_octetstring  *str;
                     91: };
                     92:
1.1       reyk       93: struct aldap_url {
                     94:        int              protocol;
                     95:        char            *host;
                     96:        in_port_t        port;
                     97:        char            *dn;
                     98: #define MAXATTR 1024
                     99:        char            *attributes[MAXATTR];
                    100:        int              scope;
                    101:        char            *filter;
                    102:        char            *buffer;
                    103: };
                    104:
                    105: enum protocol_op {
                    106:        LDAP_REQ_BIND           = 0,
                    107:        LDAP_RES_BIND           = 1,
                    108:        LDAP_REQ_UNBIND_30      = 2,
                    109:        LDAP_REQ_SEARCH         = 3,
                    110:        LDAP_RES_SEARCH_ENTRY   = 4,
                    111:        LDAP_RES_SEARCH_RESULT  = 5,
                    112:        LDAP_REQ_MODIFY         = 6,
                    113:        LDAP_RES_MODIFY         = 7,
                    114:        LDAP_REQ_ADD            = 8,
                    115:        LDAP_RES_ADD            = 9,
                    116:        LDAP_REQ_DELETE_30      = 10,
                    117:        LDAP_RES_DELETE         = 11,
                    118:        LDAP_REQ_MODRDN         = 12,
                    119:        LDAP_RES_MODRDN         = 13,
                    120:        LDAP_REQ_COMPARE        = 14,
                    121:        LDAP_RES_COMPARE        = 15,
                    122:        LDAP_REQ_ABANDON_30     = 16,
                    123:
                    124:        LDAP_RES_SEARCH_REFERENCE = 19,
                    125:
                    126:        LDAP_REQ_EXTENDED       = 23,
                    127:        LDAP_RES_EXTENDED       = 24
                    128: };
                    129:
                    130: enum deref_aliases {
                    131:        LDAP_DEREF_NEVER        = 0,
                    132:        LDAP_DEREF_SEARCHING    = 1,
                    133:        LDAP_DEREF_FINDING      = 2,
                    134:        LDAP_DEREF_ALWAYS       = 3,
                    135: };
                    136:
                    137: enum authentication_choice {
                    138:        LDAP_AUTH_SIMPLE        = 0,
                    139: };
                    140:
                    141: enum scope {
                    142:        LDAP_SCOPE_BASE         = 0,
                    143:        LDAP_SCOPE_ONELEVEL     = 1,
                    144:        LDAP_SCOPE_SUBTREE      = 2,
                    145: };
                    146:
                    147: enum result_code {
                    148:        LDAP_SUCCESS                            = 0,
                    149:        LDAP_OPERATIONS_ERROR                   = 1,
                    150:        LDAP_PROTOCOL_ERROR                     = 2,
                    151:        LDAP_TIMELIMIT_EXCEEDED                 = 3,
                    152:        LDAP_SIZELIMIT_EXCEEDED                 = 4,
                    153:        LDAP_COMPARE_FALSE                      = 5,
                    154:        LDAP_COMPARE_TRUE                       = 6,
                    155:        LDAP_STRONG_AUTH_NOT_SUPPORTED          = 7,
                    156:        LDAP_STRONG_AUTH_REQUIRED               = 8,
                    157:
                    158:        LDAP_REFERRAL                           = 10,
                    159:        LDAP_ADMINLIMIT_EXCEEDED                = 11,
                    160:        LDAP_UNAVAILABLE_CRITICAL_EXTENSION     = 12,
                    161:        LDAP_CONFIDENTIALITY_REQUIRED           = 13,
                    162:        LDAP_SASL_BIND_IN_PROGRESS              = 14,
                    163:        LDAP_NO_SUCH_ATTRIBUTE                  = 16,
                    164:        LDAP_UNDEFINED_TYPE                     = 17,
                    165:        LDAP_INAPPROPRIATE_MATCHING             = 18,
                    166:        LDAP_CONSTRAINT_VIOLATION               = 19,
                    167:        LDAP_TYPE_OR_VALUE_EXISTS               = 20,
                    168:        LDAP_INVALID_SYNTAX                     = 21,
                    169:
                    170:        LDAP_NO_SUCH_OBJECT                     = 32,
                    171:        LDAP_ALIAS_PROBLEM                      = 33,
                    172:        LDAP_INVALID_DN_SYNTAX                  = 34,
                    173:
                    174:        LDAP_ALIAS_DEREF_PROBLEM                = 36,
                    175:
                    176:        LDAP_INAPPROPRIATE_AUTH                 = 48,
                    177:        LDAP_INVALID_CREDENTIALS                = 49,
                    178:        LDAP_INSUFFICIENT_ACCESS                = 50,
                    179:        LDAP_BUSY                               = 51,
                    180:        LDAP_UNAVAILABLE                        = 52,
                    181:        LDAP_UNWILLING_TO_PERFORM               = 53,
                    182:        LDAP_LOOP_DETECT                        = 54,
                    183:
                    184:        LDAP_NAMING_VIOLATION                   = 64,
                    185:        LDAP_OBJECT_CLASS_VIOLATION             = 65,
                    186:        LDAP_NOT_ALLOWED_ON_NONLEAF             = 66,
                    187:        LDAP_NOT_ALLOWED_ON_RDN                 = 67,
                    188:        LDAP_ALREADY_EXISTS                     = 68,
                    189:        LDAP_NO_OBJECT_CLASS_MODS               = 69,
                    190:
                    191:        LDAP_AFFECTS_MULTIPLE_DSAS              = 71,
                    192:
                    193:        LDAP_OTHER                              = 80,
                    194: };
                    195:
                    196: enum filter {
                    197:        LDAP_FILT_AND           = 0,
                    198:        LDAP_FILT_OR            = 1,
                    199:        LDAP_FILT_NOT           = 2,
                    200:        LDAP_FILT_EQ            = 3,
                    201:        LDAP_FILT_SUBS          = 4,
                    202:        LDAP_FILT_GE            = 5,
                    203:        LDAP_FILT_LE            = 6,
                    204:        LDAP_FILT_PRES          = 7,
                    205:        LDAP_FILT_APPR          = 8,
                    206: };
                    207:
                    208: enum subfilter {
                    209:        LDAP_FILT_SUBS_INIT     = 0,
                    210:        LDAP_FILT_SUBS_ANY      = 1,
                    211:        LDAP_FILT_SUBS_FIN      = 2,
                    212: };
                    213:
                    214: struct aldap           *aldap_init(int);
                    215: int                     aldap_tls(struct aldap *, struct tls_config *,
                    216:                            const char *);
                    217: int                     aldap_close(struct aldap *);
                    218: struct aldap_message   *aldap_parse(struct aldap *);
                    219: void                    aldap_freemsg(struct aldap_message *);
                    220:
                    221: int                     aldap_req_starttls(struct aldap *);
                    222:
                    223: int     aldap_bind(struct aldap *, char *, char *);
                    224: int     aldap_unbind(struct aldap *);
                    225: int     aldap_search(struct aldap *, char *, enum scope, char *, char **, int, int, int, struct aldap_page_control *);
                    226: int     aldap_get_errno(struct aldap *, const char **);
                    227:
                    228: int     aldap_get_resultcode(struct aldap_message *);
                    229: char   *aldap_get_dn(struct aldap_message *);
                    230: char   *aldap_get_diagmsg(struct aldap_message *);
1.2       martijn   231: struct aldap_stringset *aldap_get_references(struct aldap_message *);
1.1       reyk      232: void    aldap_free_references(char **values);
                    233: int     aldap_parse_url(const char *, struct aldap_url *);
                    234: void    aldap_free_url(struct aldap_url *);
                    235: int     aldap_search_url(struct aldap *, char *, int, int, int,
                    236:            struct aldap_page_control *);
                    237:
                    238: int     aldap_count_attrs(struct aldap_message *);
1.2       martijn   239: int     aldap_match_attr(struct aldap_message *, char *,
                    240:            struct aldap_stringset **);
                    241: int     aldap_first_attr(struct aldap_message *, char **, struct
                    242:            aldap_stringset **);
                    243: int     aldap_next_attr(struct aldap_message *, char **,
                    244:            struct aldap_stringset **);
                    245: int     aldap_free_attr(struct aldap_stringset *);
1.1       reyk      246:
                    247: struct aldap_page_control *aldap_parse_page_control(struct ber_element *, size_t len);
                    248: void    aldap_freepage(struct aldap_page_control *);