mirror of
https://github.com/3proxy/3proxy.git
synced 2026-07-24 04:20:12 +08:00
Minor bugfixes
Some checks are pending
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Waiting to run
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-latest) (push) Waiting to run
C/C++ CI MacOS / ${{ matrix.target }} (macos-15) (push) Waiting to run
C/C++ CI Windows / ${{ matrix.target }} (windows-2022) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (macos-15) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-latest) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (windows-2022) (push) Waiting to run
C/C++ CI cmake / ubuntu-latest (wolfSSL) (push) Waiting to run
Some checks are pending
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Waiting to run
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-latest) (push) Waiting to run
C/C++ CI MacOS / ${{ matrix.target }} (macos-15) (push) Waiting to run
C/C++ CI Windows / ${{ matrix.target }} (windows-2022) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (macos-15) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-latest) (push) Waiting to run
C/C++ CI cmake / ${{ matrix.target }} (windows-2022) (push) Waiting to run
C/C++ CI cmake / ubuntu-latest (wolfSSL) (push) Waiting to run
This commit is contained in:
parent
01f85cf755
commit
c60af54c98
@ -122,8 +122,8 @@ void * dnsprchild(struct clientparam* param) {
|
|||||||
len+=(type==1?16:28);
|
len+=(type==1?16:28);
|
||||||
}
|
}
|
||||||
else if(type == 0x0c) {
|
else if(type == 0x0c) {
|
||||||
unsigned a, b, c, d;
|
unsigned a = 0, b = 0, c = 0, d = 0;
|
||||||
sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
|
if(sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d) != 4) a = b = c = d = 0;
|
||||||
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
||||||
if(*SAFAMILY(¶m->sincl) == AF_INET && ip == *(uint32_t *)SAADDR(¶m->sincl)){
|
if(*SAFAMILY(¶m->sincl) == AF_INET && ip == *(uint32_t *)SAADDR(¶m->sincl)){
|
||||||
buf[2] = 0x85;
|
buf[2] = 0x85;
|
||||||
|
|||||||
@ -157,7 +157,7 @@ void * imappchild(struct clientparam* param) {
|
|||||||
i = sockgetlinebuf(param, SERVER, srvbuf, sizeof(srvbuf) - 1, '\n', conf.timeouts[STRING_L]);
|
i = sockgetlinebuf(param, SERVER, srvbuf, sizeof(srvbuf) - 1, '\n', conf.timeouts[STRING_L]);
|
||||||
if( i < 4 ) {RETURN(695);}
|
if( i < 4 ) {RETURN(695);}
|
||||||
srvbuf[i] = 0;
|
srvbuf[i] = 0;
|
||||||
if(strncasecmp((char *)srvbuf, "* OK", 4)||strstr((char *)srvbuf, "IMAP4rev1 Proxy Ready")){RETURN(696);}
|
if(strncasecmp((char *)srvbuf, "* OK", 4)){RETURN(696);}
|
||||||
if((se = (unsigned char *)strstr((char *)srvbuf, "[CAPABILITY "))){
|
if((se = (unsigned char *)strstr((char *)srvbuf, "[CAPABILITY "))){
|
||||||
if(hascap(se, "AUTH=PLAIN")) caps |= CAP_PLAIN;
|
if(hascap(se, "AUTH=PLAIN")) caps |= CAP_PLAIN;
|
||||||
if(hascap(se, "AUTH=LOGIN")) caps |= CAP_LOGIN;
|
if(hascap(se, "AUTH=LOGIN")) caps |= CAP_LOGIN;
|
||||||
|
|||||||
19
src/proxy.c
19
src/proxy.c
@ -956,7 +956,13 @@ for(;;){
|
|||||||
}
|
}
|
||||||
smallbuf[i] = 0;
|
smallbuf[i] = 0;
|
||||||
contentlength64 = 0;
|
contentlength64 = 0;
|
||||||
sscanf((char *)smallbuf, "%"SCNx64"", &contentlength64);
|
if(sscanf((char *)smallbuf, "%"SCNx64"", &contentlength64) != 1) RETURN(537);
|
||||||
|
/* chunk-size line may be longer than smallbuf: drain and relay the
|
||||||
|
remainder up to LF so client/backend framing stays in sync */
|
||||||
|
while(i > 0 && smallbuf[i-1] != '\n'){
|
||||||
|
if((i = sockgetlinebuf(param, CLIENT, smallbuf, 30, '\n', conf.timeouts[STRING_S])) <= 0) RETURN(537);
|
||||||
|
if (socksend(param, param->remsock, smallbuf, i, conf.timeouts[STRING_S]) != i) RETURN(536);
|
||||||
|
}
|
||||||
if(contentlength64 == 0) chunkedcli = 2;
|
if(contentlength64 == 0) chunkedcli = 2;
|
||||||
else {
|
else {
|
||||||
param->waitclient64 = contentlength64;
|
param->waitclient64 = contentlength64;
|
||||||
@ -1144,7 +1150,16 @@ for(;;){
|
|||||||
}
|
}
|
||||||
smallbuf[i] = 0;
|
smallbuf[i] = 0;
|
||||||
contentlength64 = 0;
|
contentlength64 = 0;
|
||||||
sscanf((char *)smallbuf, "%"SCNx64"", &contentlength64);
|
if(sscanf((char *)smallbuf, "%"SCNx64"", &contentlength64) != 1) {
|
||||||
|
keepalive = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* chunk-size line may be longer than smallbuf: drain and relay the
|
||||||
|
remainder up to LF so client/backend framing stays in sync */
|
||||||
|
while(i > 0 && smallbuf[i-1] != '\n'){
|
||||||
|
if((i = sockgetlinebuf(param, SERVER, smallbuf, 30, '\n', conf.timeouts[STRING_S])) <= 0) RETURN(534);
|
||||||
|
if (socksend(param, param->clisock, smallbuf, i, conf.timeouts[STRING_S]) != i) RETURN(535);
|
||||||
|
}
|
||||||
if(contentlength64 == 0) {
|
if(contentlength64 == 0) {
|
||||||
param->chunked = 2;
|
param->chunked = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -243,7 +243,7 @@ int parsehello(int type, unsigned char *hello, unsigned len, char *sni, int * sn
|
|||||||
unsigned xlen;
|
unsigned xlen;
|
||||||
xlen = size16(hello+offset+2);
|
xlen = size16(hello+offset+2);
|
||||||
if(xlen+4 > elen) return -10;
|
if(xlen+4 > elen) return -10;
|
||||||
if(type == 1 && hello[offset] == 0 && hello[offset+1] == 0){
|
if(type == 1 && xlen >= 5 && hello[offset] == 0 && hello[offset+1] == 0){
|
||||||
snllen=size16(hello+offset+4);
|
snllen=size16(hello+offset+4);
|
||||||
if(snllen>3){
|
if(snllen>3){
|
||||||
if(snllen+2 != xlen) return -12;
|
if(snllen+2 != xlen) return -12;
|
||||||
@ -265,7 +265,7 @@ int parsehello(int type, unsigned char *hello, unsigned len, char *sni, int * sn
|
|||||||
*lv = hello[offset+5];
|
*lv = hello[offset+5];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(hello[offset] == 0 && hello[offset+1] == 16){
|
else if(xlen >= 3 && hello[offset] == 0 && hello[offset+1] == 16){
|
||||||
alpnlen=hello[offset+6];
|
alpnlen=hello[offset+6];
|
||||||
if(alpnlen+7>elen) return -16;
|
if(alpnlen+7>elen) return -16;
|
||||||
if(alpnlen+1>PROTOLEN) return -17;
|
if(alpnlen+1>PROTOLEN) return -17;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user