summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormartijn <martijn@openbsd.org>2018-11-27 12:10:29 +0000
committermartijn <martijn@openbsd.org>2018-11-27 12:10:29 +0000
commit22fc3e590b66eb507df1c386bfd47b9e0fc3db59 (patch)
tree9b3842d5b16fa27cb263868794d27f311d402998
parentSync with ldap(1) (diff)
downloadwireguard-openbsd-22fc3e590b66eb507df1c386bfd47b9e0fc3db59.tar.xz
wireguard-openbsd-22fc3e590b66eb507df1c386bfd47b9e0fc3db59.zip
Sync with ldap(1)
-rw-r--r--usr.sbin/snmpd/ber.c24
-rw-r--r--usr.sbin/snmpd/ber.h11
2 files changed, 33 insertions, 2 deletions
diff --git a/usr.sbin/snmpd/ber.c b/usr.sbin/snmpd/ber.c
index 23166419be4..ccdd491df01 100644
--- a/usr.sbin/snmpd/ber.c
+++ b/usr.sbin/snmpd/ber.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ber.c,v 1.49 2018/11/20 07:20:21 martijn Exp $ */
+/* $OpenBSD: ber.c,v 1.50 2018/11/27 12:10:29 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/snmpd/ber.h b/usr.sbin/snmpd/ber.h
index 79f021c486d..a2cc0fc84d3 100644
--- a/usr.sbin/snmpd/ber.h
+++ b/usr.sbin/snmpd/ber.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ber.h,v 1.14 2018/08/12 22:04:09 rob Exp $ */
+/* $OpenBSD: ber.h,v 1.15 2018/11/27 12:10:29 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 **,