mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 18:45:40 +08:00
add support for -u2 in socks
This commit is contained in:
parent
08be6b9f98
commit
75c63d2de6
@ -119,12 +119,21 @@ view without ability to reset).
|
|||||||
.br
|
.br
|
||||||
(for udppm) - singlepacket, expect only one packet from both client and server
|
(for udppm) - singlepacket, expect only one packet from both client and server
|
||||||
.br
|
.br
|
||||||
|
.B -u
|
||||||
|
Never ask for username/password
|
||||||
|
.br
|
||||||
|
.B -u2
|
||||||
|
(socks) require username/password in authentication methods
|
||||||
|
.br
|
||||||
.B -a
|
.B -a
|
||||||
(for proxy) - anonymous proxy (no information about client reported)
|
(for proxy) - anonymous proxy (no information about client reported)
|
||||||
.br
|
.br
|
||||||
.B -a1
|
.B -a1
|
||||||
(for proxy) - anonymous proxy (random client information reported)
|
(for proxy) - anonymous proxy (random client information reported)
|
||||||
.br
|
.br
|
||||||
|
.B -a2
|
||||||
|
(for proxy) - generate Via: and X-Forwared-For: instead of Forwarded:
|
||||||
|
.br
|
||||||
.B -6
|
.B -6
|
||||||
Only resolve IPv6 addresses
|
Only resolve IPv6 addresses
|
||||||
.br
|
.br
|
||||||
|
@ -262,7 +262,7 @@ int parseusername(char *username, struct clientparam *param, int extpasswd){
|
|||||||
char *sb = NULL, *se = NULL, *sp = NULL;
|
char *sb = NULL, *se = NULL, *sp = NULL;
|
||||||
|
|
||||||
if(!username || !*username) return 1;
|
if(!username || !*username) return 1;
|
||||||
if(!param->srv->nouser && (sb = strchr(username, ':')) && (se = strchr(sb + 1, ':')) && (!extpasswd || (sp = strchr(se + 1, ':')))){
|
if(param->srv->needuser && (sb = strchr(username, ':')) && (se = strchr(sb + 1, ':')) && (!extpasswd || (sp = strchr(se + 1, ':')))){
|
||||||
*sb = 0;
|
*sb = 0;
|
||||||
*se = 0;
|
*se = 0;
|
||||||
if(sp) *sp = 0;
|
if(sp) *sp = 0;
|
||||||
|
@ -1072,7 +1072,7 @@ CLEANRET:
|
|||||||
else if(param->res >=30 && param->res < 80) {
|
else if(param->res >=30 && param->res < 80) {
|
||||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[5], (int)strlen(proxy_stringtable[5]), conf.timeouts[STRING_S]);
|
socksend(param->clisock, (unsigned char *)proxy_stringtable[5], (int)strlen(proxy_stringtable[5]), conf.timeouts[STRING_S]);
|
||||||
}
|
}
|
||||||
else if(param->res == 1 || (param->srv->nouser && param->res < 10)) {
|
else if(param->res == 1 || (!param->srv->needuser && param->res < 10)) {
|
||||||
socksend(param->clisock, (unsigned char *)proxy_stringtable[11], (int)strlen(proxy_stringtable[11]), conf.timeouts[STRING_S]);
|
socksend(param->clisock, (unsigned char *)proxy_stringtable[11], (int)strlen(proxy_stringtable[11]), conf.timeouts[STRING_S]);
|
||||||
}
|
}
|
||||||
else if(param->res < 10) {
|
else if(param->res < 10) {
|
||||||
|
@ -119,6 +119,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
" -d go to background (daemon)\n"
|
" -d go to background (daemon)\n"
|
||||||
#else
|
#else
|
||||||
" -u never ask for username\n"
|
" -u never ask for username\n"
|
||||||
|
" -u2 always ask for username\n"
|
||||||
#endif
|
#endif
|
||||||
" -fFORMAT logging format (see documentation)\n"
|
" -fFORMAT logging format (see documentation)\n"
|
||||||
" -l log to stderr\n"
|
" -l log to stderr\n"
|
||||||
@ -195,7 +196,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
conf.services = conf.services->prev = &srv;
|
conf.services = conf.services->prev = &srv;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
srv.nouser = 1;
|
srv.needuser = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i=1; i<argc; i++) {
|
for (i=1; i<argc; i++) {
|
||||||
@ -287,7 +288,8 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
iscbl = 1;
|
iscbl = 1;
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
srv.nouser = 1;
|
srv.needuser = 0;
|
||||||
|
if(*(argv[i] + 2)) needuser = atoi(argv[i] + 2);
|
||||||
break;
|
break;
|
||||||
case 'T':
|
case 'T':
|
||||||
srv.transparent = 1;
|
srv.transparent = 1;
|
||||||
@ -672,6 +674,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){
|
|||||||
srv->logdumpsrv = conf.logdumpsrv;
|
srv->logdumpsrv = conf.logdumpsrv;
|
||||||
srv->logdumpcli = conf.logdumpcli;
|
srv->logdumpcli = conf.logdumpcli;
|
||||||
srv->cbsock = INVALID_SOCKET;
|
srv->cbsock = INVALID_SOCKET;
|
||||||
|
srv->needuser = 1;
|
||||||
memset(param, 0, sizeof(struct clientparam));
|
memset(param, 0, sizeof(struct clientparam));
|
||||||
param->srv = srv;
|
param->srv = srv;
|
||||||
param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET;
|
param->remsock = param->clisock = param->ctrlsock = param->ctrlsocksrv = INVALID_SOCKET;
|
||||||
|
@ -48,13 +48,14 @@ void * sockschild(struct clientparam* param) {
|
|||||||
if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} /* nmethods */
|
if ((i = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);} /* nmethods */
|
||||||
for (; i; i--) {
|
for (; i; i--) {
|
||||||
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
||||||
if (res == 2 && !param->srv->nouser) {
|
if (res == 2 && param->srv->needuser) {
|
||||||
havepass = res;
|
havepass = res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf[0] = 5;
|
buf[0] = 5;
|
||||||
buf[1] = havepass;
|
buf[1] = (param->srv->needuser > 1 && !havepass)? 255 : havepass;
|
||||||
if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(401);}
|
if(socksend(param->clisock, buf, 2, conf.timeouts[STRING_S])!=2){RETURN(401);}
|
||||||
|
if (param->srv->needuser > 1 && !havepass) RETURN(4);
|
||||||
if (havepass) {
|
if (havepass) {
|
||||||
if (((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_L], 0))) != 1) {
|
if (((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_L], 0))) != 1) {
|
||||||
RETURN(412);
|
RETURN(412);
|
||||||
@ -150,7 +151,7 @@ void * sockschild(struct clientparam* param) {
|
|||||||
else {
|
else {
|
||||||
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
||||||
buf[127] = 0;
|
buf[127] = 0;
|
||||||
if(!param->srv->nouser && *buf && !param->username)param->username = (unsigned char *)mystrdup((char *)buf);
|
if(param->srv->needuser && *buf && !param->username)param->username = (unsigned char *)mystrdup((char *)buf);
|
||||||
if(!memcmp(SAADDR(¶m->req), "\0\0\0", 3)){
|
if(!memcmp(SAADDR(¶m->req), "\0\0\0", 3)){
|
||||||
param->service = S_SOCKS45;
|
param->service = S_SOCKS45;
|
||||||
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
||||||
|
@ -366,7 +366,7 @@ struct srvparam {
|
|||||||
int version;
|
int version;
|
||||||
int singlepacket;
|
int singlepacket;
|
||||||
int usentlm;
|
int usentlm;
|
||||||
int nouser;
|
int needuser;
|
||||||
int silent;
|
int silent;
|
||||||
int transparent;
|
int transparent;
|
||||||
int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
|
int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
|
||||||
|
Loading…
Reference in New Issue
Block a user