add support for -u2 in socks

This commit is contained in:
z3APA3A 2016-01-15 15:29:57 +03:00
parent 08be6b9f98
commit 75c63d2de6
6 changed files with 22 additions and 9 deletions

View File

@ -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
@ -570,7 +579,7 @@ Operation is one of:
FTP_LIST - FTP list request FTP_LIST - FTP list request
.br .br
FTP_DATA - FTP data connection. Note: FTP_DATA requires access to dynamic FTP_DATA - FTP data connection. Note: FTP_DATA requires access to dynamic
non-ptivileged (1024-65535) ports on remote side. non-ptivileged (1024-65535) ports on remote side.
.br .br
FTP - matches any FTP/FTP Data request FTP - matches any FTP/FTP Data request
.br .br

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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(&param->req), "\0\0\0", 3)){ if(!memcmp(SAADDR(&param->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]);

View File

@ -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;