mirror of
https://github.com/3proxy/3proxy.git
synced 2025-05-18 02:12:44 +08:00
FIX: SSLPlugin with http proxy
This commit is contained in:
parent
468124f55c
commit
d20e76bbc9
@ -261,7 +261,9 @@ int dossl(struct clientparam* param, SSL_CONN* ServerConnp, SSL_CONN* ClientConn
|
|||||||
ssl_conn_free(ServerConn);
|
ssl_conn_free(ServerConn);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientConn = ssl_handshake_to_client(param->clisock, FakeCert, &errSSL);
|
ClientConn = ssl_handshake_to_client(param->clisock, FakeCert, &errSSL);
|
||||||
|
|
||||||
if ( ClientConn == NULL ) {
|
if ( ClientConn == NULL ) {
|
||||||
param->res = 8012;
|
param->res = 8012;
|
||||||
param->srv->logfunc(param, (unsigned char *)"Handshake to client failed");
|
param->srv->logfunc(param, (unsigned char *)"Handshake to client failed");
|
||||||
@ -313,7 +315,7 @@ static FILTER_ACTION ssl_filter_predata(void *fo, struct clientparam * param){
|
|||||||
return REJECT;
|
return REJECT;
|
||||||
}
|
}
|
||||||
param->redirectfunc = proxyfunc;
|
param->redirectfunc = proxyfunc;
|
||||||
return PASS;
|
return CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
30
src/proxy.c
30
src/proxy.c
@ -526,6 +526,20 @@ for(;;){
|
|||||||
reqsize = (int)strlen((char *)req);
|
reqsize = (int)strlen((char *)req);
|
||||||
reqbufsize = reqsize + 1;
|
reqbufsize = reqsize + 1;
|
||||||
|
|
||||||
|
|
||||||
|
if(param->srv->needuser > 1 && !param->username) {RETURN(4);}
|
||||||
|
if((res = (*param->srv->authfunc)(param))) {
|
||||||
|
if (res <= 10 || haveconnection || param->transparent) RETURN(res);
|
||||||
|
so._closesocket(param->remsock);
|
||||||
|
param->remsock = INVALID_SOCKET;
|
||||||
|
param->redirected = 0;
|
||||||
|
param->redirtype = 0;
|
||||||
|
memset(¶m->sinsl, 0, sizeof(param->sinsl));
|
||||||
|
memset(¶m->sinsr, 0, sizeof(param->sinsr));
|
||||||
|
if((res = (*param->srv->authfunc)(param))) RETURN(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef WITHMAIN
|
#ifndef WITHMAIN
|
||||||
|
|
||||||
action = handlereqfilters(param, &req, &reqbufsize, 0, &reqsize);
|
action = handlereqfilters(param, &req, &reqbufsize, 0, &reqsize);
|
||||||
@ -540,6 +554,10 @@ for(;;){
|
|||||||
if(action != PASS) RETURN(517);
|
if(action != PASS) RETURN(517);
|
||||||
param->nolongdatfilter = 0;
|
param->nolongdatfilter = 0;
|
||||||
|
|
||||||
|
if(isconnect && param->redirtype != R_HTTP) {
|
||||||
|
socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
||||||
|
}
|
||||||
|
|
||||||
if (param->npredatfilters){
|
if (param->npredatfilters){
|
||||||
action = handlepredatflt(param);
|
action = handlepredatflt(param);
|
||||||
if(action == HANDLED){
|
if(action == HANDLED){
|
||||||
@ -568,17 +586,6 @@ for(;;){
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(param->srv->needuser > 1 && !param->username) {RETURN(4);}
|
|
||||||
if((res = (*param->srv->authfunc)(param))) {
|
|
||||||
if (res <= 10 || haveconnection || param->transparent) RETURN(res);
|
|
||||||
so._closesocket(param->remsock);
|
|
||||||
param->remsock = INVALID_SOCKET;
|
|
||||||
param->redirected = 0;
|
|
||||||
param->redirtype = 0;
|
|
||||||
memset(¶m->sinsl, 0, sizeof(param->sinsl));
|
|
||||||
memset(¶m->sinsr, 0, sizeof(param->sinsr));
|
|
||||||
if((res = (*param->srv->authfunc)(param))) RETURN(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ftp && param->redirtype != R_HTTP){
|
if(ftp && param->redirtype != R_HTTP){
|
||||||
SOCKET s;
|
SOCKET s;
|
||||||
@ -826,7 +833,6 @@ for(;;){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(isconnect && param->redirtype != R_HTTP) {
|
if(isconnect && param->redirtype != R_HTTP) {
|
||||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[8], (int)strlen(proxy_stringtable[8]), conf.timeouts[STRING_S]);
|
|
||||||
if(param->redirectfunc) {
|
if(param->redirectfunc) {
|
||||||
if(req)myfree(req);
|
if(req)myfree(req);
|
||||||
if(buf)myfree(buf);
|
if(buf)myfree(buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user