summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2013-03-11 19:53:54 +0100
committerattilamolnar <attilamolnar@hush.com>2013-03-29 01:09:34 +0100
commitc2549b040243e0fcaac0ec2e6d461980cda7f5f4 (patch)
tree8d53bb2c3fd6aa6e5cceb124e55a9aaaa2fbc023
parent4e9cfa5b3abd4a71764dd29f53c646f03b60535d (diff)
m_ldapoper Fix memory leak
See 1813369adecc1efc9812e90c40c21dc32e4965c9 for details
-rw-r--r--src/modules/extra/m_ldapoper.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/modules/extra/m_ldapoper.cpp b/src/modules/extra/m_ldapoper.cpp
index e9e25630c..69131f7bc 100644
--- a/src/modules/extra/m_ldapoper.cpp
+++ b/src/modules/extra/m_ldapoper.cpp
@@ -35,6 +35,31 @@
/* $ModDesc: Adds the ability to authenticate opers via LDAP */
/* $LinkerFlags: -lldap */
+struct RAIILDAPString
+{
+ char *str;
+
+ RAIILDAPString(char *Str)
+ : str(Str)
+ {
+ }
+
+ ~RAIILDAPString()
+ {
+ ldap_memfree(str);
+ }
+
+ operator char*()
+ {
+ return str;
+ }
+
+ operator std::string()
+ {
+ return str;
+ }
+};
+
class ModuleLDAPAuth : public Module
{
std::string base;
@@ -165,7 +190,8 @@ public:
authpass = strdup(opassword.c_str());
cred.bv_val = authpass;
cred.bv_len = opassword.length();
- if ((res = ldap_sasl_bind_s(conn, ldap_get_dn(conn, entry), LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL)) == LDAP_SUCCESS)
+ RAIILDAPString DN(ldap_get_dn(conn, entry));
+ if ((res = ldap_sasl_bind_s(conn, DN, LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL)) == LDAP_SUCCESS)
{
free(authpass);
ldap_msgfree(msg);