Annotation of src/usr.bin/ldap/ber.h, Revision 1.1
1.1 ! reyk 1: /* $OpenBSD: ber.h,v 1.3 2018/02/08 18:02:06 jca Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 2007 Reyk Floeter <reyk@vantronix.net>
! 5: * Copyright (c) 2006, 2007 Claudio Jeker <claudio@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:
! 20: struct ber_element {
! 21: struct ber_element *be_next;
! 22: unsigned long be_type;
! 23: unsigned long be_encoding;
! 24: size_t be_len;
! 25: int be_free;
! 26: u_int8_t be_class;
! 27: union {
! 28: struct ber_element *bv_sub;
! 29: void *bv_val;
! 30: long long bv_numeric;
! 31: } be_union;
! 32: #define be_sub be_union.bv_sub
! 33: #define be_val be_union.bv_val
! 34: #define be_numeric be_union.bv_numeric
! 35: };
! 36:
! 37: struct ber {
! 38: u_char *br_wbuf;
! 39: u_char *br_wptr;
! 40: u_char *br_wend;
! 41: u_char *br_rbuf;
! 42: u_char *br_rptr;
! 43: u_char *br_rend;
! 44:
! 45: unsigned long (*br_application)(struct ber_element *);
! 46: };
! 47:
! 48: /* well-known ber_element types */
! 49: #define BER_TYPE_DEFAULT ((unsigned long)-1)
! 50: #define BER_TYPE_EOC 0
! 51: #define BER_TYPE_BOOLEAN 1
! 52: #define BER_TYPE_INTEGER 2
! 53: #define BER_TYPE_BITSTRING 3
! 54: #define BER_TYPE_OCTETSTRING 4
! 55: #define BER_TYPE_NULL 5
! 56: #define BER_TYPE_OBJECT 6
! 57: #define BER_TYPE_ENUMERATED 10
! 58: #define BER_TYPE_SEQUENCE 16
! 59: #define BER_TYPE_SET 17
! 60:
! 61: /* ber classes */
! 62: #define BER_CLASS_UNIVERSAL 0x0
! 63: #define BER_CLASS_UNIV BER_CLASS_UNIVERSAL
! 64: #define BER_CLASS_APPLICATION 0x1
! 65: #define BER_CLASS_APP BER_CLASS_APPLICATION
! 66: #define BER_CLASS_CONTEXT 0x2
! 67: #define BER_CLASS_PRIVATE 0x3
! 68: #define BER_CLASS_MASK 0x3
! 69:
! 70: /* common definitions */
! 71: #define BER_MIN_OID_LEN 2 /* OBJECT */
! 72: #define BER_MAX_OID_LEN 32 /* OBJECT */
! 73:
! 74: struct ber_oid {
! 75: u_int32_t bo_id[BER_MAX_OID_LEN + 1];
! 76: size_t bo_n;
! 77: };
! 78:
! 79: __BEGIN_DECLS
! 80: struct ber_element *ber_get_element(unsigned long);
! 81: void ber_set_header(struct ber_element *, int,
! 82: unsigned long);
! 83: void ber_link_elements(struct ber_element *,
! 84: struct ber_element *);
! 85: struct ber_element *ber_unlink_elements(struct ber_element *);
! 86: void ber_replace_elements(struct ber_element *,
! 87: struct ber_element *);
! 88: struct ber_element *ber_add_sequence(struct ber_element *);
! 89: struct ber_element *ber_add_set(struct ber_element *);
! 90: struct ber_element *ber_add_integer(struct ber_element *, long long);
! 91: int ber_get_integer(struct ber_element *, long long *);
! 92: struct ber_element *ber_add_enumerated(struct ber_element *, long long);
! 93: int ber_get_enumerated(struct ber_element *, long long *);
! 94: struct ber_element *ber_add_boolean(struct ber_element *, int);
! 95: int ber_get_boolean(struct ber_element *, int *);
! 96: struct ber_element *ber_add_string(struct ber_element *, const char *);
! 97: struct ber_element *ber_add_nstring(struct ber_element *, const char *,
! 98: size_t);
! 99: int ber_get_string(struct ber_element *, char **);
! 100: int ber_get_nstring(struct ber_element *, void **,
! 101: size_t *);
! 102: struct ber_element *ber_add_bitstring(struct ber_element *, const void *,
! 103: size_t);
! 104: int ber_get_bitstring(struct ber_element *, void **,
! 105: size_t *);
! 106: struct ber_element *ber_add_null(struct ber_element *);
! 107: int ber_get_null(struct ber_element *);
! 108: struct ber_element *ber_add_eoc(struct ber_element *);
! 109: int ber_get_eoc(struct ber_element *);
! 110: struct ber_element *ber_add_oid(struct ber_element *, struct ber_oid *);
! 111: struct ber_element *ber_add_noid(struct ber_element *, struct ber_oid *, int);
! 112: struct ber_element *ber_add_oidstring(struct ber_element *, const char *);
! 113: int ber_get_oid(struct ber_element *, struct ber_oid *);
! 114: size_t ber_oid2ber(struct ber_oid *, u_int8_t *, size_t);
! 115: int ber_string2oid(const char *, struct ber_oid *);
! 116: struct ber_element *ber_printf_elements(struct ber_element *, char *, ...);
! 117: int ber_scanf_elements(struct ber_element *, char *, ...);
! 118: ssize_t ber_get_writebuf(struct ber *, void **);
! 119: int ber_write_elements(struct ber *, struct ber_element *);
! 120: void ber_set_readbuf(struct ber *, void *, size_t);
! 121: struct ber_element *ber_read_elements(struct ber *, struct ber_element *);
! 122: void ber_free_elements(struct ber_element *);
! 123: size_t ber_calc_len(struct ber_element *);
! 124: void ber_set_application(struct ber *,
! 125: unsigned long (*)(struct ber_element *));
! 126: void ber_free(struct ber *);
! 127: __END_DECLS