mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 10:35: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
|
||||
(for udppm) - singlepacket, expect only one packet from both client and server
|
||||
.br
|
||||
.B -u
|
||||
Never ask for username/password
|
||||
.br
|
||||
.B -u2
|
||||
(socks) require username/password in authentication methods
|
||||
.br
|
||||
.B -a
|
||||
(for proxy) - anonymous proxy (no information about client reported)
|
||||
.br
|
||||
.B -a1
|
||||
(for proxy) - anonymous proxy (random client information reported)
|
||||
.br
|
||||
.B -a2
|
||||
(for proxy) - generate Via: and X-Forwared-For: instead of Forwarded:
|
||||
.br
|
||||
.B -6
|
||||
Only resolve IPv6 addresses
|
||||
.br
|
||||
|
@ -262,7 +262,7 @@ int parseusername(char *username, struct clientparam *param, int extpasswd){
|
||||
char *sb = NULL, *se = NULL, *sp = NULL;
|
||||
|
||||
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;
|
||||
*se = 0;
|
||||
if(sp) *sp = 0;
|
||||
|
@ -1072,7 +1072,7 @@ CLEANRET:
|
||||
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]);
|
||||
}
|
||||
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]);
|
||||
}
|
||||
else if(param->res < 10) {
|
||||
|
@ -119,6 +119,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
" -d go to background (daemon)\n"
|
||||
#else
|
||||
" -u never ask for username\n"
|
||||
" -u2 always ask for username\n"
|
||||
#endif
|
||||
" -fFORMAT logging format (see documentation)\n"
|
||||
" -l log to stderr\n"
|
||||
@ -195,7 +196,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
conf.services = conf.services->prev = &srv;
|
||||
}
|
||||
#else
|
||||
srv.nouser = 1;
|
||||
srv.needuser = 0;
|
||||
#endif
|
||||
|
||||
for (i=1; i<argc; i++) {
|
||||
@ -287,7 +288,8 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
iscbl = 1;
|
||||
break;
|
||||
case 'u':
|
||||
srv.nouser = 1;
|
||||
srv.needuser = 0;
|
||||
if(*(argv[i] + 2)) needuser = atoi(argv[i] + 2);
|
||||
break;
|
||||
case 'T':
|
||||
srv.transparent = 1;
|
||||
@ -672,6 +674,7 @@ void srvinit(struct srvparam * srv, struct clientparam *param){
|
||||
srv->logdumpsrv = conf.logdumpsrv;
|
||||
srv->logdumpcli = conf.logdumpcli;
|
||||
srv->cbsock = INVALID_SOCKET;
|
||||
srv->needuser = 1;
|
||||
memset(param, 0, sizeof(struct clientparam));
|
||||
param->srv = srv;
|
||||
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 */
|
||||
for (; i; i--) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
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 (param->srv->needuser > 1 && !havepass) RETURN(4);
|
||||
if (havepass) {
|
||||
if (((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_L], 0))) != 1) {
|
||||
RETURN(412);
|
||||
@ -150,7 +151,7 @@ void * sockschild(struct clientparam* param) {
|
||||
else {
|
||||
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
||||
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)){
|
||||
param->service = S_SOCKS45;
|
||||
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);
|
||||
|
@ -366,7 +366,7 @@ struct srvparam {
|
||||
int version;
|
||||
int singlepacket;
|
||||
int usentlm;
|
||||
int nouser;
|
||||
int needuser;
|
||||
int silent;
|
||||
int transparent;
|
||||
int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
|
||||
|
Loading…
Reference in New Issue
Block a user