summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ldapd
diff options
context:
space:
mode:
authormartijn <martijn@openbsd.org>2018-11-27 12:09:38 +0000
committermartijn <martijn@openbsd.org>2018-11-27 12:09:38 +0000
commitf70c1d8d536a2cfbb84eca1a857a595ca10285a0 (patch)
tree07817fbb4d923906304d297fc4905354ddab790d /usr.sbin/ldapd
parentSync aldap and ber with ldap(1). (diff)
downloadwireguard-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.c24
-rw-r--r--usr.sbin/ldapd/ber.h11
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 **,