Fix memory leak.
[doldaconnect.git] / daemon / net.c
index 389072a..2a8fdef 100644 (file)
@@ -253,12 +253,14 @@ void putsock(struct socket *sk)
            {
                sk->outbuf.d.f = buf->next;
                free(buf->data);
+               free(buf->addr);
                free(buf);
            }
            while((buf = sk->inbuf.d.f) != NULL)
            {
                sk->inbuf.d.f = buf->next;
                free(buf->data);
+               free(buf->addr);
                free(buf);
            }
            break;
@@ -1112,6 +1114,29 @@ int sockgetremotename(struct socket *sk, struct sockaddr **namebuf, socklen_t *l
     }
 }
 
+int sockgetremotename2(struct socket *sk, struct socket *sk2, struct sockaddr **namebuf, socklen_t *lenbuf)
+{
+    struct sockaddr *name1, *name2;
+    socklen_t len1, len2;
+    
+    if(sk->family != sk2->family)
+    {
+       flog(LOG_ERR, "using sockgetremotename2 with sockets of differing family: %i %i", sk->family, sk2->family);
+       return(-1);
+    }
+    if(sockgetremotename(sk, &name1, &len1))
+       return(-1);
+    if(sockgetremotename(sk2, &name2, &len2)) {
+       free(name1);
+       return(-1);
+    }
+    sethostaddr(name1, name2);
+    free(name2);
+    *namebuf = name1;
+    *lenbuf = len1;
+    return(0);
+}
+
 int addreq(struct sockaddr *x, struct sockaddr *y)
 {
     struct sockaddr_un *u1, *u2;