diff options
author | 2018-11-27 12:10:29 +0000 | |
---|---|---|
committer | 2018-11-27 12:10:29 +0000 | |
commit | 22fc3e590b66eb507df1c386bfd47b9e0fc3db59 (patch) | |
tree | 9b3842d5b16fa27cb263868794d27f311d402998 | |
parent | Sync with ldap(1) (diff) | |
download | wireguard-openbsd-22fc3e590b66eb507df1c386bfd47b9e0fc3db59.tar.xz wireguard-openbsd-22fc3e590b66eb507df1c386bfd47b9e0fc3db59.zip |
Sync with ldap(1)
-rw-r--r-- | usr.sbin/snmpd/ber.c | 24 | ||||
-rw-r--r-- | usr.sbin/snmpd/ber.h | 11 |
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 **, |