]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3749: IDENT lookup using wrong ports to identify the user
authorAmos Jeffries <squid3@treenet.co.nz>
Fri, 1 Feb 2013 09:34:31 +0000 (02:34 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Fri, 1 Feb 2013 09:34:31 +0000 (02:34 -0700)
src/ident/Ident.cc

index 9c996c6b73fbd94800d63a2c2a6b2dff97858205..87634f20567c5791ed6624b3ed70e2cc15dcfbe2 100644 (file)
@@ -59,6 +59,7 @@ typedef struct _IdentClient {
 typedef struct _IdentStateData {
     hash_link hash;            /* must be first */
     Comm::ConnectionPointer conn;
+    MemBuf queryMsg;  ///< the lookup message sent to IDENT server
     IdentClient *clients;
     char buf[IDENT_BUFSIZE];
 } IdentStateData;
@@ -147,14 +148,9 @@ Ident::ConnectDone(const Comm::ConnectionPointer &conn, comm_err_t status, int x
 
     comm_add_close_handler(conn->fd, Ident::Close, state);
 
-    MemBuf mb;
-    mb.init();
-    mb.Printf("%d, %d\r\n",
-              conn->remote.GetPort(),
-              conn->local.GetPort());
     AsyncCall::Pointer writeCall = commCbCall(5,4, "Ident::WriteFeedback",
                                    CommIoCbPtrFun(Ident::WriteFeedback, state));
-    Comm::Write(conn, &mb, writeCall);
+    Comm::Write(conn, &queryMsg, writeCall);
     AsyncCall::Pointer readCall = commCbCall(5,4, "Ident::ReadReply",
                                   CommIoCbPtrFun(Ident::ReadReply, state));
     comm_read(conn, state->buf, IDENT_BUFSIZE, readCall);
@@ -264,6 +260,10 @@ Ident::Start(const Comm::ConnectionPointer &conn, IDCB * callback, void *data)
     state->conn->local.SetPort(0);
     state->conn->remote.SetPort(IDENT_PORT);
 
+    // build our query from the original connection details
+    state->queryMsg.init();
+    state->queryMsg.printf("%d, %d\r\n", conn->remote.GetPort(), conn->local.GetPort());
+
     ClientAdd(state, callback, data);
     hash_join(ident_hash, &state->hash);