summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormartinh <martinh@openbsd.org>2010-06-05 15:27:35 +0000
committermartinh <martinh@openbsd.org>2010-06-05 15:27:35 +0000
commite519884f848a62c5b6dd2acc2e62204fefb7f31d (patch)
tree2e7607c3037fd46adc78a77b95f0ec7f5e1fb884
parentusage line and error out if pkg foo. (diff)
downloadwireguard-openbsd-e519884f848a62c5b6dd2acc2e62204fefb7f31d.tar.xz
wireguard-openbsd-e519884f848a62c5b6dd2acc2e62204fefb7f31d.zip
Minimize changes against the ber.c in snmpd and ypldap. This also fixes an
erroneous protocol error return in ldap_extended(), which prevented StartTLS from working.
-rw-r--r--usr.sbin/ldapd/ber.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/usr.sbin/ldapd/ber.c b/usr.sbin/ldapd/ber.c
index 602bbe7074d..f6662c75eae 100644
--- a/usr.sbin/ldapd/ber.c
+++ b/usr.sbin/ldapd/ber.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ber.c,v 1.1 2010/05/31 17:36:31 martinh Exp $ */
+/* $OpenBSD: ber.c,v 1.2 2010/06/05 15:27:35 martinh Exp $ */
/*
* Copyright (c) 2007 Reyk Floeter <reyk@vantronix.net>
@@ -26,13 +26,13 @@
#include <stdlib.h>
#include <err.h> /* XXX for debug output */
#include <stdio.h> /* XXX for debug output */
-#include <string.h>
+#include <strings.h>
#include <unistd.h>
#include <stdarg.h>
-#include <stdint.h>
#include "ber.h"
+
#define BER_TYPE_CONSTRUCTED 0x20 /* otherwise primitive */
#define BER_TYPE_SINGLE_MAX 30
#define BER_TAG_MASK 0x1f
@@ -624,7 +624,7 @@ ber_scanf_elements(struct ber_element *ber, char *fmt, ...)
bzero(parent, sizeof(struct ber_element *) * _MAX_SEQ);
va_start(ap, fmt);
- while (*fmt != '\0' && ber != NULL) {
+ while (*fmt) {
switch (*fmt++) {
case 'B':
ptr = va_arg(ap, void **);
@@ -717,6 +717,8 @@ ber_scanf_elements(struct ber_element *ber, char *fmt, ...)
goto fail;
}
+ if (ber->be_next == NULL)
+ continue;
ber = ber->be_next;
}
va_end(ap);
@@ -735,7 +737,9 @@ ber_scanf_elements(struct ber_element *ber, char *fmt, ...)
* ber holds the socket
* root fully populated element tree
*
- * returns number of bytes written, or -1 on error and sets errno
+ * returns:
+ * >=0 number of bytes written
+ * -1 on failure and sets errno
*/
int
ber_write_elements(struct ber *ber, struct ber_element *root)