Support for 'extip' and 'smtp' parent types added

This commit is contained in:
z3APA3A 2016-02-05 01:52:45 +03:00
parent 9db88313c7
commit 3cc9796583
5 changed files with 18 additions and 13 deletions

View File

@ -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(&param->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;
}

View File

@ -674,12 +674,14 @@ int doconnect(struct clientparam * param){
}
#endif
if(SAISNULL(&param->sinsl)){
#ifndef NOIPV6
if(*SAFAMILY(&param->sinsr) == AF_INET6) memcpy(&param->sinsl, &param->srv->extsa6, sizeof(param->srv->extsa6));
else
if(*SAFAMILY(&param->sinsr) == AF_INET6) memcpy(&param->sinsl, &param->srv->extsa6, sizeof(param->srv->extsa6));
else
#endif
memcpy(&param->sinsl, &param->srv->extsa, sizeof(param->srv->extsa));
*SAPORT(&param->sinsl) = 0;
memcpy(&param->sinsl, &param->srv->extsa, sizeof(param->srv->extsa));
*SAPORT(&param->sinsl) = 0;
}
if(so._bind(param->remsock, (struct sockaddr*)&param->sinsl, SASIZE(&param->sinsl))==-1) {
return 12;
}

View File

@ -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);

View File

@ -751,9 +751,9 @@ void srvinit2(struct srvparam * srv, struct clientparam *param){
memcpy(&param->sincr, &srv->intsa, sizeof(param->sincr));
memcpy(&param->sincl, &srv->intsa, sizeof(param->sincl));
#ifndef NOIPV6
memcpy(&param->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsl));
memcpy(&param->sinsr, (srv->family == 6 || srv->family == 64)? (void *)&srv->extsa6: (void *)&srv->extsa, sizeof(param->sinsr));
#else
memcpy(&param->sinsr, &srv->extsa, sizeof(param->sinsl));
memcpy(&param->sinsr, &srv->extsa, sizeof(param->sinsr));
#endif
}

View File

@ -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 {