Merge remote-tracking branch 'refs/remotes/origin/devel'

This commit is contained in:
z3APA3A 2016-01-16 00:39:58 +03:00
commit 928f67aed1
6 changed files with 22 additions and 9 deletions

View File

@ -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
@ -570,7 +579,7 @@ Operation is one of:
FTP_LIST - FTP list request
.br
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
FTP - matches any FTP/FTP Data request
.br

View File

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

View File

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

View File

@ -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)) srv.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;

View File

@ -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(&param->req), "\0\0\0", 3)){
param->service = S_SOCKS45;
sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, 0, conf.timeouts[STRING_S]);

View File

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