From 8dedada003d45af0c0b0c6a38c9170e5c4d2736e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Mon, 24 Jun 2013 19:40:06 +0200 Subject: [PATCH] - updated ident patch --- postfix-ident.patch | 120 +++++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 56 deletions(-) diff --git a/postfix-ident.patch b/postfix-ident.patch index 42193e7..25fbeaa 100644 --- a/postfix-ident.patch +++ b/postfix-ident.patch @@ -253,7 +253,7 @@ diff -urN -x '*~' postfix-2.2.5/src/smtpd/smtpd_ident.c postfix-2.2.5-ident/src/ VAR_REJECT_TMPF_ACT, DEF_REJECT_TMPF_ACT, &var_reject_tmpf_act, 1, 0, --- postfix-2.9.0/src/smtpd/smtpd_peer.c.orig 2012-02-04 19:34:17.294233547 +0100 +++ postfix-2.9.0/src/smtpd/smtpd_peer.c 2012-02-04 19:40:48.203777370 +0100 -@@ -98,6 +98,7 @@ +@@ -103,6 +103,7 @@ #include #include @@ -261,7 +261,7 @@ diff -urN -x '*~' postfix-2.2.5/src/smtpd/smtpd_ident.c postfix-2.2.5-ident/src/ #include #include #include /* strerror() */ -@@ -117,6 +118,7 @@ +@@ -123,6 +124,7 @@ /* Global library. */ @@ -269,71 +269,79 @@ diff -urN -x '*~' postfix-2.2.5/src/smtpd/smtpd_ident.c postfix-2.2.5-ident/src/ #include #include #include -@@ -125,6 +127,8 @@ - } - } +@@ -132,6 +134,8 @@ + + #include "smtpd.h" +extern NAMADR_LIST *smtpd_ident_lookup; + - /* smtpd_peer_init - initialize peer information */ - - void smtpd_peer_init(SMTPD_STATE *state) -@@ -132,6 +136,9 @@ - const char *myname = "smtpd_peer_init"; - SOCKADDR_SIZE sa_length; - struct sockaddr *sa; -+ struct sockaddr_in serv_sin; -+ char *ident_user = NULL; -+ SOCKADDR_SIZE sa_len; - INET_PROTO_INFO *proto_info = inet_proto_info(); - - sa = (struct sockaddr *) & (state->sockaddr); -@@ -171,6 +178,7 @@ - state->addr_family = AF_UNSPEC; - state->name_status = SMTPD_PEER_CODE_PERM; - state->reverse_name_status = SMTPD_PEER_CODE_PERM; -+ state->ident_user = mystrdup("NO-USER"); - state->port = mystrdup(CLIENT_PORT_UNKNOWN); - } + static INET_PROTO_INFO *proto_info; -@@ -342,6 +350,7 @@ - if (aierr) { - msg_warn("hostname %s does not resolve to address %s: %s", - state->name, state->addr, MAI_STRERROR(aierr)); -+ state->ident_user = mystrdup("NO-USER"); - REJECT_PEER_NAME(state, (TEMP_AI_ERROR(aierr) ? + /* +@@ -345,6 +352,7 @@ + if (aierr) { + msg_warn("hostname %s does not resolve to address %s: %s", + state->name, state->addr, MAI_STRERROR(aierr)); ++ state->ident_user = mystrdup("NO-USER"); + REJECT_PEER_NAME(state, (TEMP_AI_ERROR(aierr) ? SMTPD_PEER_CODE_TEMP : SMTPD_PEER_CODE_FORGED)); - } else { -@@ -363,6 +372,20 @@ - freeaddrinfo(res0); - } + } else { +@@ -352,6 +360,7 @@ + if (res == 0) { + msg_warn("hostname %s does not resolve to address %s", + state->name, state->addr); ++ state->ident_user = mystrdup("NO-USER"); + REJECT_PEER_NAME(state, SMTPD_PEER_CODE_FORGED); + break; + } +@@ -366,6 +375,22 @@ + freeaddrinfo(res0); } + } ++ if (namadr_list_match(smtpd_ident_lookup, state->name, state->addr)) { ++ struct sockaddr_in serv_sin; ++ char *ident_user = NULL; + -+ if (namadr_list_match(smtpd_ident_lookup, state->name, state->addr)) { -+ /* If getsockname fails, just forget it */ -+ sa_len = sizeof(serv_sin); -+ if (getsockname(vstream_fileno(state->client), (struct sockaddr *)&serv_sin, &sa_len) >= 0) { -+ ident_user = smtpd_ident((struct sockaddr_in *)sa, &serv_sin); -+ if (ident_user == NULL) -+ state->ident_user = mystrdup("NO-USER"); -+ else -+ state->ident_user = ident_user; -+ } else -+ msg_warn("getsockname failed while doing ident lookup: %s", strerror(errno)); ++ /* If getsockname fails, just forget it */ ++ sa_length = sizeof(serv_sin); ++ if (getsockname(vstream_fileno(state->client), (struct sockaddr *)&serv_sin, &sa_length) >= 0) { ++ ident_user = smtpd_ident((struct sockaddr_in *)sa, &serv_sin); ++ if (ident_user == NULL) ++ state->ident_user = mystrdup("NO-USER"); ++ else ++ state->ident_user = ident_user; + } else ++ msg_warn("getsockname failed while doing ident lookup: %s", strerror(errno)); ++ } else + state->ident_user = mystrdup("NO-USER"); - } + } - /* -@@ -383,6 +406,7 @@ - state->name_status = SMTPD_PEER_CODE_OK; - state->reverse_name_status = SMTPD_PEER_CODE_OK; - state->port = mystrdup("0"); /* XXX bogus. */ -+ state->ident_user = mystrdup("NO-USER"); - } + /* smtpd_peer_hostaddr_to_sockaddr - convert numeric string to binary */ +@@ -411,6 +433,7 @@ + state->addr_family = AF_UNSPEC; + state->name_status = SMTPD_PEER_CODE_OK; + state->reverse_name_status = SMTPD_PEER_CODE_OK; ++ state->ident_user = mystrdup("NO-USER"); + state->port = mystrdup("0"); /* XXX bogus. */ + } - /* -@@ -401,6 +425,8 @@ +@@ -426,6 +449,7 @@ + state->addr_family = AF_UNSPEC; + state->name_status = SMTPD_PEER_CODE_PERM; + state->reverse_name_status = SMTPD_PEER_CODE_PERM; ++ state->ident_user = mystrdup("NO-USER"); + state->port = mystrdup(CLIENT_PORT_UNKNOWN); + } + +@@ -554,6 +578,7 @@ + state->addr = 0; + state->namaddr = 0; + state->rfc_addr = 0; ++ state->ident_user = 0; + state->port = 0; + state->dest_addr = 0; + +@@ -604,6 +629,8 @@ myfree(state->namaddr); if (state->rfc_addr) myfree(state->rfc_addr); -- 2.44.0