git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Debug: indent ACL and expreassion tracing by evaluation depth
[exim.git]
/
src
/
src
/
transports
/
smtp_socks.c
diff --git
a/src/src/transports/smtp_socks.c
b/src/src/transports/smtp_socks.c
index a7d4e106f6918981ab0385d4ad32c809f274a413..5558430686e5b3bdefaecf36ea64c50e23392dd4 100644
(file)
--- a/
src/src/transports/smtp_socks.c
+++ b/
src/src/transports/smtp_socks.c
@@
-10,7
+10,7
@@
#include "../exim.h"
#include "smtp.h"
#include "../exim.h"
#include "smtp.h"
-#if
ndef DISABLE_SOCKS
/* entire file */
+#if
def SUPPORT_SOCKS
/* entire file */
#ifndef nelem
# define nelem(arr) (sizeof(arr)/sizeof(*arr))
#ifndef nelem
# define nelem(arr) (sizeof(arr)/sizeof(*arr))
@@
-112,7
+112,7
@@
switch(method)
case AUTH_NONE:
return OK;
case AUTH_NAME:
case AUTH_NONE:
return OK;
case AUTH_NAME:
- HDEBUG(D_transport|D_acl|D_v) debug_printf(" socks auth NAME '%s' '%s'\n",
+ HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" socks auth NAME '%s' '%s'\n",
sob->auth_name, sob->auth_pwd);
i = Ustrlen(sob->auth_name);
j = Ustrlen(sob->auth_pwd);
sob->auth_name, sob->auth_pwd);
i = Ustrlen(sob->auth_name);
j = Ustrlen(sob->auth_pwd);
@@
-122,7
+122,7
@@
switch(method)
HDEBUG(D_transport|D_acl|D_v)
{
int i;
HDEBUG(D_transport|D_acl|D_v)
{
int i;
- debug_printf(" SOCKS>>");
+ debug_printf
_indent
(" SOCKS>>");
for (i = 0; i<len; i++) debug_printf(" %02x", s[i]);
debug_printf("\n");
}
for (i = 0; i<len; i++) debug_printf(" %02x", s[i]);
debug_printf("\n");
}
@@
-132,10
+132,10
@@
switch(method)
)
return FAIL;
HDEBUG(D_transport|D_acl|D_v)
)
return FAIL;
HDEBUG(D_transport|D_acl|D_v)
- debug_printf(" SOCKS<< %02x %02x\n", s[0], s[1]);
+ debug_printf
_indent
(" SOCKS<< %02x %02x\n", s[0], s[1]);
if (s[0] == AUTH_NAME_VER && s[1] == 0)
{
if (s[0] == AUTH_NAME_VER && s[1] == 0)
{
- HDEBUG(D_transport|D_acl|D_v) debug_printf(" socks auth OK\n");
+ HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" socks auth OK\n");
return OK;
}
return OK;
}
@@
-278,7
+278,7
@@
for(;;)
if ((idx = socks_get_proxy(proxies, nproxies)) < 0)
{
if ((idx = socks_get_proxy(proxies, nproxies)) < 0)
{
- HDEBUG(D_transport|D_acl|D_v) debug_printf(" no proxies left\n");
+ HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" no proxies left\n");
errno = EBUSY;
return -1;
}
errno = EBUSY;
return -1;
}
@@
-290,7
+290,11
@@
for(;;)
if ((fd = smtp_sock_connect(&proxy, proxy_af, sob->port,
interface, tb, sob->timeout)) >= 0)
if ((fd = smtp_sock_connect(&proxy, proxy_af, sob->port,
interface, tb, sob->timeout)) >= 0)
+ {
+ proxy_local_address = string_copy(proxy.address);
+ proxy_local_port = sob->port;
break;
break;
+ }
log_write(0, LOG_MAIN, "%s: %s", __FUNCTION__, strerror(errno));
sob->is_failed = TRUE;
log_write(0, LOG_MAIN, "%s: %s", __FUNCTION__, strerror(errno));
sob->is_failed = TRUE;
@@
-300,7
+304,7
@@
for(;;)
/* Send method-selection */
state = US"method select";
/* Send method-selection */
state = US"method select";
-HDEBUG(D_transport|D_acl|D_v) debug_printf(" SOCKS>> 05 01 %02x\n", sob->auth_type);
+HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" SOCKS>> 05 01 %02x\n", sob->auth_type);
buf[0] = 5; buf[1] = 1; buf[2] = sob->auth_type;
if (send(fd, buf, 3, 0) < 0)
goto snd_err;
buf[0] = 5; buf[1] = 1; buf[2] = sob->auth_type;
if (send(fd, buf, 3, 0) < 0)
goto snd_err;
@@
-312,7
+316,7
@@
if ( !fd_ready(fd, tmo-time(NULL))
)
goto rcv_err;
HDEBUG(D_transport|D_acl|D_v)
)
goto rcv_err;
HDEBUG(D_transport|D_acl|D_v)
- debug_printf(" SOCKS<< %02x %02x\n", buf[0], buf[1]);
+ debug_printf
_indent
(" SOCKS<< %02x %02x\n", buf[0], buf[1]);
if ( buf[0] != 5
|| socks_auth(fd, buf[1], sob, tmo) != OK
)
if ( buf[0] != 5
|| socks_auth(fd, buf[1], sob, tmo) != OK
)
@@
-347,7
+351,7
@@
state = US"connect";
HDEBUG(D_transport|D_acl|D_v)
{
int i;
HDEBUG(D_transport|D_acl|D_v)
{
int i;
- debug_printf(" SOCKS>>");
+ debug_printf
_indent
(" SOCKS>>");
for (i = 0; i<size; i++) debug_printf(" %02x", buf[i]);
debug_printf("\n");
}
for (i = 0; i<size; i++) debug_printf(" %02x", buf[i]);
debug_printf("\n");
}
@@
-364,7
+368,7
@@
if ( !fd_ready(fd, tmo-time(NULL))
HDEBUG(D_transport|D_acl|D_v)
{
int i;
HDEBUG(D_transport|D_acl|D_v)
{
int i;
- debug_printf(" SOCKS>>");
+ debug_printf
_indent
(" SOCKS>>");
for (i = 0; i<size; i++) debug_printf(" %02x", buf[i]);
debug_printf("\n");
}
for (i = 0; i<size; i++) debug_printf(" %02x", buf[i]);
debug_printf("\n");
}
@@
-373,16
+377,18
@@
if ( buf[0] != 5
)
goto proxy_err;
)
goto proxy_err;
-/*XXX log proxy outbound addr/port? */
+proxy_external_address = string_copy(
+ host_ntoa(buf[3] == 4 ? AF_INET6 : AF_INET, buf+4, NULL, NULL));
+proxy_external_port = ntohs(*((uint16_t *)(buf + (buf[3] == 4 ? 20 : 8))));
+proxy_session = TRUE;
+
HDEBUG(D_transport|D_acl|D_v)
HDEBUG(D_transport|D_acl|D_v)
- debug_printf(" proxy farside local: [%s]:%d\n",
- host_ntoa(buf[3] == 4 ? AF_INET6 : AF_INET, buf+4, NULL, NULL),
- ntohs(*((uint16_t *)(buf + (buf[3] == 4 ? 20 : 8)))));
+ debug_printf_indent(" proxy farside: [%s]:%d\n", proxy_external_address, proxy_external_port);
return fd;
snd_err:
return fd;
snd_err:
- HDEBUG(D_transport|D_acl|D_v) debug_printf(" proxy snd_err %s: %s\n", state, strerror(errno));
+ HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" proxy snd_err %s: %s\n", state, strerror(errno));
return -1;
proxy_err:
return -1;
proxy_err:
@@
-390,12
+396,12
@@
proxy_err:
struct socks_err * se =
buf[1] > nelem(socks_errs) ? NULL : socks_errs + buf[1];
HDEBUG(D_transport|D_acl|D_v)
struct socks_err * se =
buf[1] > nelem(socks_errs) ? NULL : socks_errs + buf[1];
HDEBUG(D_transport|D_acl|D_v)
- debug_printf(" proxy %s: %s\n", state, se ? se->reason : US"unknown error code received");
+ debug_printf
_indent
(" proxy %s: %s\n", state, se ? se->reason : US"unknown error code received");
errno = se ? se->errcode : EPROTO;
}
rcv_err:
errno = se ? se->errcode : EPROTO;
}
rcv_err:
- HDEBUG(D_transport|D_acl|D_v) debug_printf(" proxy rcv_err %s: %s\n", state, strerror(errno));
+ HDEBUG(D_transport|D_acl|D_v) debug_printf
_indent
(" proxy rcv_err %s: %s\n", state, strerror(errno));
if (!errno) errno = EPROTO;
else if (errno == ENOENT) errno = ECONNABORTED;
return -1;
if (!errno) errno = EPROTO;
else if (errno == ENOENT) errno = ECONNABORTED;
return -1;