From d83863a0ddf9a030a99fa1fda324261eb2467fdd Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 10 Nov 2008 20:24:25 +0000
Subject: [PATCH] ITS#5770

---
 CHANGES                          | 2 ++
 clients/tools/common.c           | 8 ++++----
 servers/slapd/overlays/ppolicy.c | 4 ++--
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/CHANGES b/CHANGES
index 8dcc2d1676..588c0fe049 100644
--- a/CHANGES
+++ b/CHANGES
@@ -28,12 +28,14 @@ OpenLDAP 2.4.13 Engineering
 	Added slapo-constraint "set" type (ITS#5702)
 	Fixed slapo-constraint filter parsing error (ITS#5751)
 	Added slapo-dynlist URI restriction ability (ITS#5761)
+	Fixed slapo-ppolicy unaligned BerElement (ITS#5770)
 	Fixed slapo-rwm objectClass preservation (ITS#5760)
 	Fixed slapo-rwm rewriting undefined filter (ITS#5731)
 	Fixed slapo-rwm reusing freed filter (ITS#5732)
 	Added slapo-translucent try local bind when remote fails (ITS#5656)
 	Added slapo-translucent support for PasswordModify exop (ITS#5656)
 	Fixed tools simple bind without SASL (ITS#5753)
+	Fixed tools unaligned BerElement (ITS#5770)
 	Build Environment
 		Added ldapurl command
 		Added slapd GSSAPI refactoring (ITS#5369)
diff --git a/clients/tools/common.c b/clients/tools/common.c
index 4f38ede9fd..58d5e6bf49 100644
--- a/clients/tools/common.c
+++ b/clients/tools/common.c
@@ -1583,8 +1583,8 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
 #endif
 
 	if ( preread ) {
-		char berbuf[LBER_ELEMENT_SIZEOF];
-		BerElement *ber = (BerElement *)berbuf;
+		BerElementBuffer berbuf;
+		BerElement *ber = (BerElement *)&berbuf;
 		char **attrs = NULL;
 
 		if( preread_attrs ) {
@@ -1613,8 +1613,8 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
 	}
 
 	if ( postread ) {
-		char berbuf[LBER_ELEMENT_SIZEOF];
-		BerElement *ber = (BerElement *)berbuf;
+		BerElementBuffer berbuf;
+		BerElement *ber = (BerElement *)&berbuf;
 		char **attrs = NULL;
 
 		if( postread_attrs ) {
diff --git a/servers/slapd/overlays/ppolicy.c b/servers/slapd/overlays/ppolicy.c
index 17f90fa17b..54607e2e81 100644
--- a/servers/slapd/overlays/ppolicy.c
+++ b/servers/slapd/overlays/ppolicy.c
@@ -364,8 +364,8 @@ static const char ppolicy_ctrl_oid[] = LDAP_CONTROL_PASSWORDPOLICYRESPONSE;
 static LDAPControl *
 create_passcontrol( Operation *op, int exptime, int grace, LDAPPasswordPolicyError err )
 {
-	char berbuf[LBER_ELEMENT_SIZEOF], bb2[LBER_ELEMENT_SIZEOF];
-	BerElement *ber = (BerElement *)berbuf, *b2 = (BerElement *)bb2;
+	BerElementBuffer berbuf, bb2;
+	BerElement *ber = (BerElement *) &berbuf, *b2 = (BerElement *) &bb2;
 	LDAPControl c = { 0 }, *cp;
 	struct berval bv;
 
-- 
GitLab