From 3cc979658319e8ba263efeada33f02f81399eb32 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 5 Feb 2016 01:52:45 +0300 Subject: [PATCH] Support for 'extip' and 'smtp' parent types added --- src/auth.c | 11 ++++++----- src/common.c | 10 ++++++---- src/conf.c | 3 ++- src/proxymain.c | 4 ++-- src/structures.h | 3 ++- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/auth.c b/src/auth.c index 7e8263b..55bde6a 100644 --- a/src/auth.c +++ b/src/auth.c @@ -241,7 +241,10 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ r2 = (myrand(param, sizeof(struct clientparam))%1000); } if(!connected){ - if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){ + if(cur->type == R_EXTIP){ + memcpy(¶m->sinsl, &cur->addr, sizeof(cur->addr)); + } + else if(SAISNULL(&cur->addr) && !*SAPORT(&cur->addr)){ if(cur->extuser){ if(param->extusername) myfree(param->extusername); @@ -266,11 +269,9 @@ int handleredirect(struct clientparam * param, struct ace * acentry){ case R_ICQ: param->redirectfunc = icqprchild; break; -/* - case R_MSN: - param->redirectfunc = msnprchild; + case R_SMTP: + param->redirectfunc = smtppchild; break; -*/ default: param->redirectfunc = proxychild; } diff --git a/src/common.c b/src/common.c index 6cb3d50..509dd6a 100644 --- a/src/common.c +++ b/src/common.c @@ -674,12 +674,14 @@ int doconnect(struct clientparam * param){ } #endif + if(SAISNULL(¶m->sinsl)){ #ifndef NOIPV6 - if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); - else + if(*SAFAMILY(¶m->sinsr) == AF_INET6) memcpy(¶m->sinsl, ¶m->srv->extsa6, sizeof(param->srv->extsa6)); + else #endif - memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); - *SAPORT(¶m->sinsl) = 0; + memcpy(¶m->sinsl, ¶m->srv->extsa, sizeof(param->srv->extsa)); + *SAPORT(¶m->sinsl) = 0; + } if(so._bind(param->remsock, (struct sockaddr*)¶m->sinsl, SASIZE(¶m->sinsl))==-1) { return 12; } diff --git a/src/conf.c b/src/conf.c index b050723..ec73767 100644 --- a/src/conf.c +++ b/src/conf.c @@ -705,7 +705,8 @@ static int h_parent(int argc, unsigned char **argv){ else if(!strcmp((char *)argv[2], "ftp"))chains->type = R_FTP; else if(!strcmp((char *)argv[2], "admin"))chains->type = R_ADMIN; else if(!strcmp((char *)argv[2], "icq"))chains->type = R_ICQ; - else if(!strcmp((char *)argv[2], "msn"))chains->type = R_MSN; + else if(!strcmp((char *)argv[2], "extip"))chains->type = R_EXTIP; + else if(!strcmp((char *)argv[2], "smtp"))chains->type = R_SMTP; else { fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]); return(4); diff --git a/src/proxymain.c b/src/proxymain.c index 9bb367e..080bb88 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -751,9 +751,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){ memcpy(¶m->sincr, &srv->intsa, sizeof(param->sincr)); memcpy(¶m->sincl, &srv->intsa, sizeof(param->sincl)); #ifndef NOIPV6 - memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl)); + memcpy(¶m->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsr)); #else - memcpy(¶m->sinsr, &srv->extsa, sizeof(param->sinsl)); + memcpy(¶m->sinsr, &srv->extsa, sizeof(param->sinsr)); #endif } diff --git a/src/structures.h b/src/structures.h index c6219c2..b3f34c3 100644 --- a/src/structures.h +++ b/src/structures.h @@ -217,6 +217,7 @@ typedef enum { R_SOCKS5, R_HTTP, R_POP3, + R_SMTP, R_FTP, R_CONNECTP, R_SOCKS4P, @@ -225,7 +226,7 @@ typedef enum { R_SOCKS5B, R_ADMIN, R_ICQ, - R_MSN + R_EXTIP } REDIRTYPE; struct chain {