]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Fix ident for ssl connections.
authorJilles Tjoelker <redacted>
Wed, 27 Aug 2008 22:49:04 +0000 (00:49 +0200)
committerJilles Tjoelker <redacted>
Wed, 27 Aug 2008 22:49:04 +0000 (00:49 +0200)
include/client.h
src/listener.c
src/s_auth.c

index 6c856492841c380fb0a5359d3590b54f3ae424ba..33491442a7b5b2e9d1ddb8080363b7c2b5926f0b 100644 (file)
@@ -298,6 +298,8 @@ struct PreClient
 
        rb_dlink_list dnsbl_queries; /* list of struct BlacklistClient * */
        struct Blacklist *dnsbl_listed; /* first dnsbl where it's listed */
+
+       struct rb_sockaddr_storage lip; /* address of our side of the connection */
 };
 
 struct ListClient
index 0849ab63d265d3203e989d9f1971ff88490e92b0..e8dfb270d4149dd649e826f1fbb586aa06f5a9ae 100644 (file)
@@ -435,7 +435,7 @@ close_listeners()
  * any client list yet.
  */
 static void
-add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, void *ssl_ctl)
+add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, struct sockaddr *lai, void *ssl_ctl)
 {
        struct Client *new_client;
        s_assert(NULL != listener);
@@ -447,6 +447,7 @@ add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, voi
        new_client = make_client(NULL);
 
        memcpy(&new_client->localClient->ip, sai, sizeof(struct rb_sockaddr_storage));
+       memcpy(&new_client->preClient->lip, lai, sizeof(struct rb_sockaddr_storage));
 
        /* 
         * copy address to 'sockhost' as a string, copy it to host too
@@ -553,7 +554,7 @@ accept_ssld(rb_fde_t *F, struct sockaddr *addr, struct sockaddr *laddr, struct L
        rb_fde_t *xF[2];
        rb_socketpair(AF_UNIX, SOCK_STREAM, 0, &xF[0], &xF[1], "Incoming ssld Connection");
        ctl = start_ssld_accept(F, xF[1], rb_get_fd(xF[0])); /* this will close F for us */
-       add_connection(listener, xF[0], addr, ctl);
+       add_connection(listener, xF[0], addr, laddr, ctl);
 }
 
 static void
@@ -575,5 +576,5 @@ accept_callback(rb_fde_t *F, int status, struct sockaddr *addr, rb_socklen_t add
        if(listener->ssl)
                accept_ssld(F, addr, (struct sockaddr *)&lip, listener);
        else
-               add_connection(listener, F, addr, NULL);
+               add_connection(listener, F, addr, (struct sockaddr *)&lip, NULL);
 }
index 83407b37b3af0936e433d8085573f0967dc310d4..a6143bb1124cfb5b467a74ecc030aa5211319e3e 100644 (file)
@@ -297,7 +297,6 @@ static int
 start_auth_query(struct AuthRequest *auth)
 {
        struct rb_sockaddr_storage localaddr, destaddr;
-       socklen_t locallen = sizeof(struct rb_sockaddr_storage);
        rb_fde_t *F;
        int family;
        
@@ -333,14 +332,7 @@ start_auth_query(struct AuthRequest *auth)
         * since the ident request must originate from that same address--
         * and machines with multiple IP addresses are common now
         */
-       memset(&localaddr, 0, locallen);
-       if(getsockname(rb_get_fd(auth->client->localClient->F),
-                   (struct sockaddr *) &localaddr, &locallen) == -1)
-       {
-               /* can happen if connection was just closed */
-               rb_close(F);
-               return 0;
-       }
+       localaddr = auth->client->preClient->lip;
        
        /* XXX mangle_mapped_sockaddr((struct sockaddr *)&localaddr); */
 #ifdef RB_IPV6