mirror of
https://github.com/3proxy/3proxy.git
synced 2026-06-30 18:40:11 +08:00
Fix: invalid error in ssl server handshake can lead to broken service state
This commit is contained in:
parent
8f13582329
commit
e41ab58b2c
@ -18,6 +18,19 @@ DWORD WINAPI threadfunc(LPVOID p) {
|
|||||||
void * threadfunc (void *p) {
|
void * threadfunc (void *p) {
|
||||||
#endif
|
#endif
|
||||||
int i = -1;
|
int i = -1;
|
||||||
|
#ifndef STDMAIN
|
||||||
|
if(makefilters(param->srv, param) > CONTINUE){
|
||||||
|
#ifndef NOUDPMAIN
|
||||||
|
if(param->srv->service == S_UDPPM) _3proxy_sem_unlock(udpinit);
|
||||||
|
#endif
|
||||||
|
freeparam(param);
|
||||||
|
#ifdef _WIN32
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if(param->srv->cbsock != INVALID_SOCKET){
|
if(param->srv->cbsock != INVALID_SOCKET){
|
||||||
SASIZETYPE size = sizeof(param->sinsr);
|
SASIZETYPE size = sizeof(param->sinsr);
|
||||||
struct pollfd fds;
|
struct pollfd fds;
|
||||||
@ -1054,17 +1067,6 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
if(defparam.hostname)newparam->hostname=(unsigned char *)strdup((char *)defparam.hostname);
|
if(defparam.hostname)newparam->hostname=(unsigned char *)strdup((char *)defparam.hostname);
|
||||||
clearstat(newparam);
|
clearstat(newparam);
|
||||||
if(!isudp) newparam->clisock = new_sock;
|
if(!isudp) newparam->clisock = new_sock;
|
||||||
#ifndef STDMAIN
|
|
||||||
if(makefilters(&srv, newparam) > CONTINUE){
|
|
||||||
freeparam(newparam);
|
|
||||||
#ifndef NOUDPMAIN
|
|
||||||
if(isudp) {
|
|
||||||
_3proxy_sem_unlock(udpinit);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
newparam->prev = newparam->next = NULL;
|
newparam->prev = newparam->next = NULL;
|
||||||
error = 0;
|
error = 0;
|
||||||
_3proxy_mutex_lock(&srv.counter_mutex);
|
_3proxy_mutex_lock(&srv.counter_mutex);
|
||||||
@ -1099,6 +1101,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
if(newparam->prev) newparam->prev->next = newparam->next;
|
if(newparam->prev) newparam->prev->next = newparam->next;
|
||||||
else srv.child = newparam->next;
|
else srv.child = newparam->next;
|
||||||
if(newparam->next) newparam->next->prev = newparam->prev;
|
if(newparam->next) newparam->next->prev = newparam->prev;
|
||||||
|
if(newparam->clisock != INVALID_SOCKET){
|
||||||
|
srv.so._shutdown(srv.so.state, newparam->clisock, SHUT_RDWR);
|
||||||
|
srv.so._closesocket(srv.so.state, newparam->clisock);
|
||||||
|
newparam->clisock = INVALID_SOCKET;
|
||||||
|
}
|
||||||
newparam->srv = NULL;
|
newparam->srv = NULL;
|
||||||
#ifndef NOUDPMAIN
|
#ifndef NOUDPMAIN
|
||||||
if(isudp){
|
if(isudp){
|
||||||
@ -1289,6 +1296,7 @@ void freeparam(struct clientparam * param) {
|
|||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
if(param->srv->service == S_UDPPM) hashdelete(&udp_table, param);
|
if(param->srv->service == S_UDPPM) hashdelete(&udp_table, param);
|
||||||
#endif
|
#endif
|
||||||
|
if(param->prev || param->next || param->srv->child == param){
|
||||||
if(param->prev){
|
if(param->prev){
|
||||||
param->prev->next = param->next;
|
param->prev->next = param->next;
|
||||||
}
|
}
|
||||||
@ -1298,6 +1306,7 @@ void freeparam(struct clientparam * param) {
|
|||||||
param->next->prev = param->prev;
|
param->next->prev = param->prev;
|
||||||
}
|
}
|
||||||
(param->srv->childcount)--;
|
(param->srv->childcount)--;
|
||||||
|
}
|
||||||
_3proxy_mutex_unlock(¶m->srv->counter_mutex);
|
_3proxy_mutex_unlock(¶m->srv->counter_mutex);
|
||||||
}
|
}
|
||||||
if(param->clibuf) free(param->clibuf);
|
if(param->clibuf) free(param->clibuf);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user