]> jfr.im git - solanum.git/commitdiff
Fix memory leak of operator certfp fields.
authorJilles Tjoelker <redacted>
Mon, 24 Jan 2011 23:39:07 +0000 (00:39 +0100)
committerJilles Tjoelker <redacted>
Mon, 24 Jan 2011 23:39:07 +0000 (00:39 +0100)
src/newconf.c
src/s_newconf.c

index ee9c946ce91af173d62d2de5bfdba1cc32ab5652..8b1dfa6a2f71279eca1b844a4f6815e0880fd4aa 100644 (file)
@@ -597,7 +597,7 @@ conf_end_oper(struct TopConf *tc)
                }
 
                if(!EmptyString(yy_oper->certfp))
                }
 
                if(!EmptyString(yy_oper->certfp))
-                       yy_tmpoper->certfp = yy_oper->certfp;
+                       yy_tmpoper->certfp = rb_strdup(yy_oper->certfp);
 #endif
 
                /* all is ok, put it on oper_conf_list */
 #endif
 
                /* all is ok, put it on oper_conf_list */
@@ -621,6 +621,8 @@ conf_set_oper_flags(void *data)
 static void
 conf_set_oper_fingerprint(void *data)
 {
 static void
 conf_set_oper_fingerprint(void *data)
 {
+       if (yy_oper->certfp)
+               rb_free(yy_oper->certfp);
        yy_oper->certfp = rb_strdup((char *) data);
 }
 
        yy_oper->certfp = rb_strdup((char *) data);
 }
 
@@ -1322,6 +1324,8 @@ conf_set_connect_accept_password(void *data)
 static void
 conf_set_connect_fingerprint(void *data)
 {
 static void
 conf_set_connect_fingerprint(void *data)
 {
+       if (yy_server->certfp)
+               rb_free(yy_server->certfp);
        yy_server->certfp = rb_strdup((char *) data);
 
        /* force SSL to be enabled if fingerprint is enabled. */
        yy_server->certfp = rb_strdup((char *) data);
 
        /* force SSL to be enabled if fingerprint is enabled. */
index 36e94a59e502b85032aeb1f18a06e815567dc7f8..f7590b219be90660c627450d890f8757a4feabe3 100644 (file)
@@ -262,6 +262,7 @@ free_oper_conf(struct oper_conf *oper_p)
        rb_free(oper_p->username);
        rb_free(oper_p->host);
        rb_free(oper_p->name);
        rb_free(oper_p->username);
        rb_free(oper_p->host);
        rb_free(oper_p->name);
+       rb_free(oper_p->certfp);
 
        if(oper_p->passwd)
        {
 
        if(oper_p->passwd)
        {