diff options
author | 2012-10-29 18:06:46 +0100 | |
---|---|---|
committer | 2012-10-29 18:06:46 +0100 | |
commit | 5e6aac56306cac284222d99c71b9dd55a6b5ace6 (patch) | |
tree | b4b5b7fe6de922be1b90db5731b35dd40ff3d199 /smtpd/aldap.h | |
parent | Merge branch 'master' into map_ldap (diff) | |
download | OpenSMTPD-5e6aac56306cac284222d99c71b9dd55a6b5ace6.tar.xz OpenSMTPD-5e6aac56306cac284222d99c71b9dd55a6b5ace6.zip |
Fix after merge
Diffstat (limited to 'smtpd/aldap.h')
-rw-r--r-- | smtpd/aldap.h | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/smtpd/aldap.h b/smtpd/aldap.h new file mode 100644 index 00000000..8abf0b1d --- /dev/null +++ b/smtpd/aldap.h @@ -0,0 +1,220 @@ +/* $Id: aldap.h,v 1.1 2012/08/30 18:25:44 gilles Exp $ */ +/* $OpenBSD: aldap.h,v 1.1 2012/08/30 18:25:44 gilles Exp $ */ + +/* + * Copyright (c) 2008 Alexander Schrijver <aschrijver@openbsd.org> + * Copyright (c) 2006, 2007 Marc Balmer <mbalmer@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include "ber.h" + +#define LDAP_URL "ldap://" +#define LDAP_PORT 389 +#define LDAP_PAGED_OID "1.2.840.113556.1.4.319" + +struct aldap { +#define ALDAP_ERR_SUCCESS 0 +#define ALDAP_ERR_PARSER_ERROR 1 +#define ALDAP_ERR_INVALID_FILTER 2 +#define ALDAP_ERR_OPERATION_FAILED 3 + u_int8_t err; + int msgid; + struct ber ber; +}; + +struct aldap_page_control { + int size; + char *cookie; + unsigned int cookie_len; +}; + +struct aldap_message { + int msgid; + int message_type; + + struct ber_element *msg; + + struct ber_element *header; + struct ber_element *protocol_op; + + struct ber_element *dn; + + union { + struct { + long long rescode; + struct ber_element *diagmsg; + } res; + struct { + struct ber_element *iter; + struct ber_element *attrs; + } search; + } body; + struct ber_element *references; + struct aldap_page_control *page; +}; + +enum aldap_protocol { + LDAP, + LDAPS +}; + +struct aldap_url { + int protocol; + char *host; + in_port_t port; + char *dn; +#define MAXATTR 1024 + char *attributes[MAXATTR]; + int scope; + char *filter; + char *buffer; +}; + +enum protocol_op { + LDAP_REQ_BIND = 0, + LDAP_RES_BIND = 1, + LDAP_REQ_UNBIND_30 = 2, + LDAP_REQ_SEARCH = 3, + LDAP_RES_SEARCH_ENTRY = 4, + LDAP_RES_SEARCH_RESULT = 5, + LDAP_REQ_MODIFY = 6, + LDAP_RES_MODIFY = 7, + LDAP_REQ_ADD = 8, + LDAP_RES_ADD = 9, + LDAP_REQ_DELETE_30 = 10, + LDAP_RES_DELETE = 11, + LDAP_REQ_MODRDN = 12, + LDAP_RES_MODRDN = 13, + LDAP_REQ_COMPARE = 14, + LDAP_RES_COMPARE = 15, + LDAP_REQ_ABANDON_30 = 16, + + LDAP_RES_SEARCH_REFERENCE = 19, +}; + +enum deref_aliases { + LDAP_DEREF_NEVER = 0, + LDAP_DEREF_SEARCHING = 1, + LDAP_DEREF_FINDING = 2, + LDAP_DEREF_ALWAYS = 3, +}; + +enum authentication_choice { + LDAP_AUTH_SIMPLE = 0, +}; + +enum scope { + LDAP_SCOPE_BASE = 0, + LDAP_SCOPE_ONELEVEL = 1, + LDAP_SCOPE_SUBTREE = 2, +}; + +enum result_code { + LDAP_SUCCESS = 0, + LDAP_OPERATIONS_ERROR = 1, + LDAP_PROTOCOL_ERROR = 2, + LDAP_TIMELIMIT_EXCEEDED = 3, + LDAP_SIZELIMIT_EXCEEDED = 4, + LDAP_COMPARE_FALSE = 5, + LDAP_COMPARE_TRUE = 6, + LDAP_STRONG_AUTH_NOT_SUPPORTED = 7, + LDAP_STRONG_AUTH_REQUIRED = 8, + + LDAP_REFERRAL = 10, + LDAP_ADMINLIMIT_EXCEEDED = 11, + LDAP_UNAVAILABLE_CRITICAL_EXTENSION = 12, + LDAP_CONFIDENTIALITY_REQUIRED = 13, + LDAP_SASL_BIND_IN_PROGRESS = 14, + LDAP_NO_SUCH_ATTRIBUTE = 16, + LDAP_UNDEFINED_TYPE = 17, + LDAP_INAPPROPRIATE_MATCHING = 18, + LDAP_CONSTRAINT_VIOLATION = 19, + LDAP_TYPE_OR_VALUE_EXISTS = 20, + LDAP_INVALID_SYNTAX = 21, + + LDAP_NO_SUCH_OBJECT = 32, + LDAP_ALIAS_PROBLEM = 33, + LDAP_INVALID_DN_SYNTAX = 34, + + LDAP_ALIAS_DEREF_PROBLEM = 36, + + LDAP_INAPPROPRIATE_AUTH = 48, + LDAP_INVALID_CREDENTIALS = 49, + LDAP_INSUFFICIENT_ACCESS = 50, + LDAP_BUSY = 51, + LDAP_UNAVAILABLE = 52, + LDAP_UNWILLING_TO_PERFORM = 53, + LDAP_LOOP_DETECT = 54, + + LDAP_NAMING_VIOLATION = 64, + LDAP_OBJECT_CLASS_VIOLATION = 65, + LDAP_NOT_ALLOWED_ON_NONLEAF = 66, + LDAP_NOT_ALLOWED_ON_RDN = 67, + LDAP_ALREADY_EXISTS = 68, + LDAP_NO_OBJECT_CLASS_MODS = 69, + + LDAP_AFFECTS_MULTIPLE_DSAS = 71, + + LDAP_OTHER = 80, +}; + +enum ldap_filter { + LDAP_FILT_AND = 0, + LDAP_FILT_OR = 1, + LDAP_FILT_NOT = 2, + LDAP_FILT_EQ = 3, + LDAP_FILT_SUBS = 4, + LDAP_FILT_GE = 5, + LDAP_FILT_LE = 6, + LDAP_FILT_PRES = 7, + LDAP_FILT_APPR = 8, +}; + +enum ldap_subfilter { + LDAP_FILT_SUBS_INIT = 0, + LDAP_FILT_SUBS_ANY = 1, + LDAP_FILT_SUBS_FIN = 2, +}; + +struct aldap *aldap_init(int fd); +int aldap_close(struct aldap *); +struct aldap_message *aldap_parse(struct aldap *); +void aldap_freemsg(struct aldap_message *); + +int aldap_bind(struct aldap *, char *, char *); +int aldap_unbind(struct aldap *); +int aldap_search(struct aldap *, char *, enum scope, char *, char **, int, int, int, struct aldap_page_control *); +int aldap_get_errno(struct aldap *, const char **); + +int aldap_get_resultcode(struct aldap_message *); +char *aldap_get_dn(struct aldap_message *); +char *aldap_get_diagmsg(struct aldap_message *); +char **aldap_get_references(struct aldap_message *); +void aldap_free_references(char **values); +int aldap_parse_url(char *, struct aldap_url *); +void aldap_free_url(struct aldap_url *); +#if 0 +int aldap_search_url(struct aldap *, char *, int, int, int); +#endif + +int aldap_count_attrs(struct aldap_message *); +int aldap_match_attr(struct aldap_message *, char *, char ***); +int aldap_first_attr(struct aldap_message *, char **, char ***); +int aldap_next_attr(struct aldap_message *, char **, char ***); +int aldap_free_attr(char **); + +struct aldap_page_control *aldap_parse_page_control(struct ber_element *, size_t len); +void aldap_freepage(struct aldap_page_control *); |