diff options
author | martijn <martijn@openbsd.org> | 2018-11-27 12:09:38 +0000 |
---|---|---|
committer | martijn <martijn@openbsd.org> | 2018-11-27 12:09:38 +0000 |
commit | f70c1d8d536a2cfbb84eca1a857a595ca10285a0 (patch) | |
tree | 07817fbb4d923906304d297fc4905354ddab790d /usr.sbin/ldapd | |
parent | Sync aldap and ber with ldap(1). (diff) | |
download | wireguard-openbsd-f70c1d8d536a2cfbb84eca1a857a595ca10285a0.tar.xz wireguard-openbsd-f70c1d8d536a2cfbb84eca1a857a595ca10285a0.zip |
Sync with ldap(1)
Diffstat (limited to 'usr.sbin/ldapd')
-rw-r--r-- | usr.sbin/ldapd/ber.c | 24 | ||||
-rw-r--r-- | usr.sbin/ldapd/ber.h | 11 |
2 files changed, 33 insertions, 2 deletions
diff --git a/usr.sbin/ldapd/ber.c b/usr.sbin/ldapd/ber.c index a914ce80ff1..86a5aeb3de8 100644 --- a/usr.sbin/ldapd/ber.c +++ b/usr.sbin/ldapd/ber.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ber.c,v 1.30 2018/11/20 07:20:21 martijn Exp $ */ +/* $OpenBSD: ber.c,v 1.31 2018/11/27 12:09:38 martijn Exp $ */ /* * Copyright (c) 2007, 2012 Reyk Floeter <reyk@openbsd.org> @@ -282,11 +282,22 @@ ber_add_nstring(struct ber_element *prev, const char *string0, size_t len) return elm; } +struct ber_element * +ber_add_ostring(struct ber_element *prev, struct ber_octetstring *s) +{ + return ber_add_nstring(prev, s->ostr_val, s->ostr_len); +} + int ber_get_string(struct ber_element *elm, char **s) { if (elm->be_encoding != BER_TYPE_OCTETSTRING) return -1; + /* Some components use getstring on binary data containing \0 */ +#if 0 + if (memchr(elm->be_val, '\0', elm->be_len) != NULL) + return -1; +#endif *s = elm->be_val; return 0; @@ -303,6 +314,17 @@ ber_get_nstring(struct ber_element *elm, void **p, size_t *len) return 0; } +int +ber_get_ostring(struct ber_element *elm, struct ber_octetstring *s) +{ + if (elm->be_encoding != BER_TYPE_OCTETSTRING) + return -1; + + s->ostr_val = elm->be_val; + s->ostr_len = elm->be_len; + return 0; +} + struct ber_element * ber_add_bitstring(struct ber_element *prev, const void *v0, size_t len) { diff --git a/usr.sbin/ldapd/ber.h b/usr.sbin/ldapd/ber.h index 9004373b084..179466f5222 100644 --- a/usr.sbin/ldapd/ber.h +++ b/usr.sbin/ldapd/ber.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ber.h,v 1.8 2018/08/12 22:04:09 rob Exp $ */ +/* $OpenBSD: ber.h,v 1.9 2018/11/27 12:09:38 martijn Exp $ */ /* * Copyright (c) 2007, 2012 Reyk Floeter <reyk@openbsd.org> @@ -20,6 +20,11 @@ #ifndef _BER_H #define _BER_H +struct ber_octetstring { + size_t ostr_len; + const void *ostr_val; +}; + struct ber_element { struct ber_element *be_next; unsigned int be_type; @@ -104,9 +109,13 @@ int ber_get_boolean(struct ber_element *, int *); struct ber_element *ber_add_string(struct ber_element *, const char *); struct ber_element *ber_add_nstring(struct ber_element *, const char *, size_t); +struct ber_element *ber_add_ostring(struct ber_element *, + struct ber_octetstring *); int ber_get_string(struct ber_element *, char **); int ber_get_nstring(struct ber_element *, void **, size_t *); +int ber_get_ostring(struct ber_element *, + struct ber_octetstring *); struct ber_element *ber_add_bitstring(struct ber_element *, const void *, size_t); int ber_get_bitstring(struct ber_element *, void **, |