mirror of
				https://github.com/3proxy/3proxy.git
				synced 2025-11-04 07:42:39 +08:00 
			
		
		
		
	support external username / password up to 128 octets
This commit is contained in:
		
							parent
							
								
									f67c9a39f1
								
							
						
					
					
						commit
						dcec2cadaa
					
				@ -57,7 +57,7 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc
 | 
				
			|||||||
				":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(*SAPORT(addr)));
 | 
									":%hu HTTP/1.0\r\nProxy-Connection: keep-alive\r\n", ntohs(*SAPORT(addr)));
 | 
				
			||||||
			if(user){
 | 
								if(user){
 | 
				
			||||||
				len += sprintf((char *)buf + len, "Proxy-authorization: basic ");
 | 
									len += sprintf((char *)buf + len, "Proxy-authorization: basic ");
 | 
				
			||||||
				sprintf((char *)username, "%.128s:%.64s", user, pass?pass:(unsigned char *)"");
 | 
									sprintf((char *)username, "%.128s:%.128s", user, pass?pass:(unsigned char *)"");
 | 
				
			||||||
				en64(username, buf+len, (int)strlen((char *)username));
 | 
									en64(username, buf+len, (int)strlen((char *)username));
 | 
				
			||||||
				len = (int)strlen((char *)buf);
 | 
									len = (int)strlen((char *)buf);
 | 
				
			||||||
				len += sprintf((char *)buf + len, "\r\n");
 | 
									len += sprintf((char *)buf + len, "\r\n");
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								src/ftp.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/ftp.c
									
									
									
									
									
								
							@ -9,17 +9,17 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
 | 
					int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
 | 
				
			||||||
	char tbuf[1024];
 | 
						char tbuf[256];
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	char *buf;
 | 
						char *buf;
 | 
				
			||||||
	int len;
 | 
						int len;
 | 
				
			||||||
	int res;
 | 
						int res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	buf = nbuf?nbuf:tbuf;
 | 
						buf = nbuf?nbuf:tbuf;
 | 
				
			||||||
	len = nbuf?*innbuf:1024;
 | 
						len = nbuf?*innbuf:sizeof(tbuf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(innbuf)*innbuf = 0;
 | 
						if(innbuf)*innbuf = 0;
 | 
				
			||||||
	if(len < 48) return 707;
 | 
						if(len < 140) return 707;
 | 
				
			||||||
	while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
 | 
						while((i = sockgetlinebuf(param, SERVER, (unsigned char *)buf, len - 1, '\n', conf.timeouts[STRING_L])) > 0 && (i < 3 || !isnumber(*buf) || buf[3] == '-')){
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(i < 3) return 706;
 | 
						if(i < 3) return 706;
 | 
				
			||||||
@ -28,7 +28,7 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
 | 
				
			|||||||
		*innbuf = i;
 | 
							*innbuf = i;
 | 
				
			||||||
		return 702;
 | 
							return 702;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sprintf(buf, "USER %.32s\r\n", param->extusername?param->extusername:(unsigned char *)"anonymous");
 | 
						sprintf(buf, "USER %.128s\r\n", param->extusername?param->extusername:(unsigned char *)"anonymous");
 | 
				
			||||||
	if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
 | 
						if((int)socksend(param->remsock, (unsigned char *)buf, (int)strlen(buf), conf.timeouts[STRING_S]) != (int)strlen(buf)){
 | 
				
			||||||
		return 703;
 | 
							return 703;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -40,7 +40,7 @@ int ftplogin(struct clientparam *param, char *nbuf, int *innbuf) {
 | 
				
			|||||||
	buf[i] = 0;
 | 
						buf[i] = 0;
 | 
				
			||||||
	res = atoi(buf)/100;
 | 
						res = atoi(buf)/100;
 | 
				
			||||||
	if(res == 3){
 | 
						if(res == 3){
 | 
				
			||||||
		sprintf(buf, "PASS %.32s\r\n", 
 | 
							sprintf(buf, "PASS %.128s\r\n", 
 | 
				
			||||||
			param->extusername?
 | 
								param->extusername?
 | 
				
			||||||
				(param->extpassword?
 | 
									(param->extpassword?
 | 
				
			||||||
					param->extpassword:(unsigned char *)"")
 | 
										param->extpassword:(unsigned char *)"")
 | 
				
			||||||
 | 
				
			|||||||
@ -70,7 +70,7 @@ void * ftpprchild(struct clientparam* param) {
 | 
				
			|||||||
		param->res = res;
 | 
							param->res = res;
 | 
				
			||||||
		if(inbuf && inbuf != BUFSIZE && socksend(param->ctrlsock, buf, inbuf, conf.timeouts[STRING_S])!=inbuf) {RETURN (807);}
 | 
							if(inbuf && inbuf != BUFSIZE && socksend(param->ctrlsock, buf, inbuf, conf.timeouts[STRING_S])!=inbuf) {RETURN (807);}
 | 
				
			||||||
		if(!res) status = 3;
 | 
							if(!res) status = 3;
 | 
				
			||||||
		sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(*SAPORT(¶m->sinsr))==21)?0:':', ntohs(*SAPORT(¶m->sinsr)));
 | 
							sprintf((char *)buf, "%.128s@%.128s%c%hu", param->extusername, param->hostname, (ntohs(*SAPORT(¶m->sinsr))==21)?0:':', ntohs(*SAPORT(¶m->sinsr)));
 | 
				
			||||||
		req = mystrdup((char *)buf);
 | 
							req = mystrdup((char *)buf);
 | 
				
			||||||
#ifndef WITHMAIN
 | 
					#ifndef WITHMAIN
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@ void * pop3pchild(struct clientparam* param) {
 | 
				
			|||||||
CLEANRET:
 | 
					CLEANRET:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 if(param->hostname&¶m->extusername) {
 | 
					 if(param->hostname&¶m->extusername) {
 | 
				
			||||||
	sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, (*SAPORT(¶m->sinsr)==110)?0:':', ntohs(*SAPORT(¶m->sinsr)));
 | 
						sprintf((char *)buf, "%.128s@%.128s%c%hu", param->extusername, param->hostname, (*SAPORT(¶m->sinsr)==110)?0:':', ntohs(*SAPORT(¶m->sinsr)));
 | 
				
			||||||
	 (*param->srv->logfunc)(param, buf);
 | 
						 (*param->srv->logfunc)(param, buf);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 else (*param->srv->logfunc)(param, NULL);
 | 
					 else (*param->srv->logfunc)(param, NULL);
 | 
				
			||||||
 | 
				
			|||||||
@ -131,8 +131,8 @@ char * proxy_stringtable[] = {
 | 
				
			|||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BUFSIZE 8192
 | 
					 | 
				
			||||||
#define LINESIZE 4096
 | 
					#define LINESIZE 4096
 | 
				
			||||||
 | 
					#define BUFSIZE (LINESIZE*2)
 | 
				
			||||||
#define FTPBUFSIZE 1536
 | 
					#define FTPBUFSIZE 1536
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void logurl(struct clientparam * param, char * buf, char * req, int ftp){
 | 
					static void logurl(struct clientparam * param, char * buf, char * req, int ftp){
 | 
				
			||||||
@ -843,7 +843,7 @@ for(;;){
 | 
				
			|||||||
 if(keepalive <= 1) sprintf((char*)buf+strlen((char *)buf), "%s: %s\r\n", (param->redirtype == R_HTTP)?"Proxy-Connection":"Connection", keepalive? "keep-alive":"close");
 | 
					 if(keepalive <= 1) sprintf((char*)buf+strlen((char *)buf), "%s: %s\r\n", (param->redirtype == R_HTTP)?"Proxy-Connection":"Connection", keepalive? "keep-alive":"close");
 | 
				
			||||||
 if(param->extusername){
 | 
					 if(param->extusername){
 | 
				
			||||||
	sprintf((char*)buf + strlen((char *)buf), "%s: basic ", (redirect)?"Proxy-Authorization":"Authorization");
 | 
						sprintf((char*)buf + strlen((char *)buf), "%s: basic ", (redirect)?"Proxy-Authorization":"Authorization");
 | 
				
			||||||
	sprintf((char*)username, "%.128s:%.64s", param->extusername, param->extpassword?param->extpassword:(unsigned char*)"");
 | 
						sprintf((char*)username, "%.128s:%.128s", param->extusername, param->extpassword?param->extpassword:(unsigned char*)"");
 | 
				
			||||||
	en64(username, buf+strlen((char *)buf), (int)strlen((char *)username));
 | 
						en64(username, buf+strlen((char *)buf), (int)strlen((char *)username));
 | 
				
			||||||
	sprintf((char*)buf + strlen((char *)buf), "\r\n");
 | 
						sprintf((char*)buf + strlen((char *)buf), "\r\n");
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 | 
				
			|||||||
@ -291,7 +291,7 @@ void * smtppchild(struct clientparam* param) {
 | 
				
			|||||||
CLEANRET:
 | 
					CLEANRET:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 if(param->hostname&¶m->extusername) {
 | 
					 if(param->hostname&¶m->extusername) {
 | 
				
			||||||
	sprintf((char *)buf, "%.64s@%.128s%c%hu", param->extusername, param->hostname, *SAPORT(¶m->sinsr)==25?0:':',ntohs(*SAPORT(¶m->sinsr)));
 | 
						sprintf((char *)buf, "%.128s@%.128s%c%hu", param->extusername, param->hostname, *SAPORT(¶m->sinsr)==25?0:':',ntohs(*SAPORT(¶m->sinsr)));
 | 
				
			||||||
	 (*param->srv->logfunc)(param, buf);
 | 
						 (*param->srv->logfunc)(param, buf);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 else (*param->srv->logfunc)(param, NULL);
 | 
					 else (*param->srv->logfunc)(param, NULL);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user