Przeglądaj źródła

Remove ICQPR because OSCAR is outdated

z3APA3A 7 lat temu
rodzic
commit
24127196ce
8 zmienionych plików z 17 dodań i 587 usunięć
  1. 3 12
      src/Makefile.inc
  2. 0 3
      src/auth.c
  3. 6 24
      src/conf.c
  4. 0 529
      src/icqpr.c
  5. 6 10
      src/plugins.c
  6. 0 2
      src/proxy.h
  7. 2 3
      src/stringtable.c
  8. 0 4
      src/structures.h

+ 3 - 12
src/Makefile.inc

@@ -2,7 +2,7 @@
 # 3 proxy common Makefile
 #
 
-all:	$(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)icqpr$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) allplugins
+all:	$(BUILDDIR)3proxy$(EXESUFFICS) $(BUILDDIR)mycrypt$(EXESUFFICS) $(BUILDDIR)pop3p$(EXESUFFICS) $(BUILDDIR)smtpp$(EXESUFFICS) $(BUILDDIR)ftppr$(EXESUFFICS) $(BUILDDIR)tcppm$(EXESUFFICS) $(BUILDDIR)udppm$(EXESUFFICS) $(BUILDDIR)socks$(EXESUFFICS) $(BUILDDIR)proxy$(EXESUFFICS) allplugins
 
 
 sockmap$(OBJSUFFICS): sockmap.c proxy.h structures.h
@@ -44,9 +44,6 @@ ftppr$(OBJSUFFICS): ftppr.c proxy.h structures.h proxymain.c
 tcppm$(OBJSUFFICS): tcppm.c proxy.h structures.h proxymain.c
 	$(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)PORTMAP tcppm.c
 
-icqpr$(OBJSUFFICS): icqpr.c proxy.h structures.h proxymain.c
-	$(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)PORTMAP icqpr.c
-
 socks$(OBJSUFFICS): socks.c proxy.h structures.h proxymain.c
 	$(CC) $(CFLAGS) $(DEFINEOPTION)WITHMAIN $(DEFINEOPTION)NOPORTMAP socks.c
 
@@ -74,9 +71,6 @@ $(BUILDDIR)socks$(EXESUFFICS): sockmap$(OBJSUFFICS) socks$(OBJSUFFICS) sockgetch
 $(BUILDDIR)tcppm$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) tcppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS)
 	$(LN) $(LNOUT)$(BUILDDIR)tcppm$(EXESUFFICS) $(LDFLAGS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) tcppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS)
 
-$(BUILDDIR)icqpr$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) icqpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS)
-	$(LN) $(LNOUT)$(BUILDDIR)icqpr$(EXESUFFICS) $(LDFLAGS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) icqpr$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS)
-
 $(BUILDDIR)udppm$(EXESUFFICS): sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) udppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS)
 	$(LN) $(LNOUT)$(BUILDDIR)udppm$(EXESUFFICS) $(LDFLAGS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) udppm$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) $(LIBS)
 
@@ -100,9 +94,6 @@ srvftppr$(OBJSUFFICS): ftppr.c proxy.h structures.h
 srvtcppm$(OBJSUFFICS): tcppm.c proxy.h structures.h
 	$(CC) $(COUT)srvtcppm$(OBJSUFFICS) $(CFLAGS) tcppm.c
 
-srvicqpr$(OBJSUFFICS): icqpr.c proxy.h structures.h
-	$(CC) $(COUT)srvicqpr$(OBJSUFFICS) $(CFLAGS) icqpr.c
-
 srvsocks$(OBJSUFFICS): socks.c proxy.h structures.h
 	$(CC) $(COUT)srvsocks$(OBJSUFFICS) $(CFLAGS) socks.c
 
@@ -152,8 +143,8 @@ ntlm$(OBJSUFFICS):  ntlm.c
 stringtable$(OBJSUFFICS):  stringtable.c
 	$(CC) $(COUT)stringtable$(OBJSUFFICS) $(CFLAGS) stringtable.c
 
-$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS)
-	$(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE)  3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvicqpr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS)
+$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) mycrypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS)
+	$(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE)  3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) myalloc$(OBJSUFFICS) common$(OBJSUFFICS) mycrypt$(OBJSUFFICS) md5$(OBJSUFFICS) md4$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) smbdes$(OBJSUFFICS) ntlm$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) $(COMPATLIBS) $(LIBS)
 
 clean:
 	@$(REMOVECOMMAND) *$(OBJSUFFICS) $(COMPFILES)

+ 0 - 3
src/auth.c

@@ -278,9 +278,6 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
 					case R_ADMIN:
 						param->redirectfunc = adminchild;
 						break;
-					case R_ICQ:
-						param->redirectfunc = icqprchild;
-						break;
 					case R_SMTP:
 						param->redirectfunc = smtppchild;
 						break;

+ 6 - 24
src/conf.c

@@ -231,22 +231,6 @@ static int h_proxy(int argc, unsigned char ** argv){
 		childdef.service = S_TCPPM;
 		childdef.helpmessage = "";
 	}
-	else if(!strcmp((char *)argv[0], "icqpr")) {
-		childdef.pf = icqprchild;
-		childdef.port = 0;
-		childdef.isudp = 0;
-		childdef.service = S_ICQPR;
-		childdef.helpmessage = "";
-	}
-/*
-	else if(!strcmp((char *)argv[0], "msnpr")) {
-		childdef.pf = msnprchild;
-		childdef.port = 0;
-		childdef.isudp = 0;
-		childdef.service = S_MSNPR;
-		childdef.helpmessage = "";
-	}
-*/
 	else if(!strcmp((char *)argv[0], "udppm")) {
 		childdef.pf = udppmchild;
 		childdef.port = 0;
@@ -1552,15 +1536,13 @@ struct commands commandhandlers[]={
 	{commandhandlers+53, "weight", h_nolog, 2, 2},
 	{commandhandlers+54, "authcache", h_authcache, 2, 3},
 	{commandhandlers+55, "smtpp", h_proxy, 1, 0},
-	{commandhandlers+56, "icqpr", h_proxy, 4, 0},
-	{commandhandlers+57, "msnpr", h_proxy, 4, 0},
-	{commandhandlers+58, "delimchar",h_delimchar, 2, 2},
-	{commandhandlers+59, "authnserver", h_authnserver, 2, 2},
-	{commandhandlers+60, "stacksize", h_stacksize, 2, 2},
-	{commandhandlers+61, "force", h_force, 1, 1},
-	{commandhandlers+62, "noforce", h_noforce, 1, 1},
+	{commandhandlers+56, "delimchar",h_delimchar, 2, 2},
+	{commandhandlers+57, "authnserver", h_authnserver, 2, 2},
+	{commandhandlers+58, "stacksize", h_stacksize, 2, 2},
+	{commandhandlers+59, "force", h_force, 1, 1},
+	{commandhandlers+60, "noforce", h_noforce, 1, 1},
 #ifndef NORADIUS
-	{commandhandlers+63, "radius", h_radius, 3, 0},
+	{commandhandlers+61, "radius", h_radius, 3, 0},
 #endif
 	{specificcommands, 	 "", h_noop, 1, 0}
 };

+ 0 - 529
src/icqpr.c

@@ -1,529 +0,0 @@
-/*
-   3APA3A simpliest proxy server
-   (c) 2002-2016 by Vladimir Dubrovin <3proxy@3proxy.ru>
-
-   please read License Agreement
-
-*/
-
-#include "proxy.h"
-
-#ifndef PORTMAP
-#define PORTMAP
-#endif
-#define RETURN(xxx) { param->res = xxx; goto CLEANRET; }
-
-static void hexdump(unsigned char *data, int len){
-	for(; len; data++, len--){
-		printf("%02x", (unsigned)*data);
-	}
-	printf("\n");
-}
-
-struct flap_header {
-	unsigned char id;
-	unsigned char chan;
-	unsigned short seq;
-	unsigned short size;
-	char data[1];
-};
-
-struct snack_header {
-	unsigned family;
-	unsigned short flags;
-	unsigned id;
-	char data[1];
-};
-
-struct tlv_header {
-	unsigned short type;
-	unsigned short size;
-	char data[1];
-};
-
-
-typedef enum {
-	ONBEGIN = 0,
-	ONCHAN,
-	ONSEQ1,
-	ONSEQ2,
-	ONSIZE1,
-	ONSIZE2,
-	ONDATA
-} ICQSTATE;
-
-struct icqstate {
-	ICQSTATE state;
-	int leftinstate;
-	unsigned short seq;
-	unsigned short srvseq;
-	unsigned short gotseq;
-	unsigned short resyncseq;
-	char channel;
-};
-
-
-
-
-
-typedef enum {
-	ICQUNKNOWN,
-	ICQCLEAR,
-	ICQMD5,
-	ICQCOOKIE
-} LOGINTYPE;
-
-
-struct icq_cookie {
-	struct icq_cookie *next;
-	char *id;
-	int size;
-	char * cookie;
-	char * connectstring;
-};
-
-static struct icq_cookie *icq_cookies = NULL;
-pthread_mutex_t icq_cookie_mutex;
-int icq_cookie_mutex_init = 0;
-
-
-static void icq_clear(void *fo){
-};
-
-static void addbuffer(int increment, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int * length_p){
-	int bufsize = *length_p + increment + 40;
-	unsigned char *newbuf;
-	int len = 0;
-
-	
-	if(bufsize > *bufsize_p){
-		newbuf = myalloc(bufsize);
-		if(!newbuf) return;
-		memcpy(newbuf, *buf_p, *length_p);
-		myfree(*buf_p);
-		*buf_p = newbuf;
-		*bufsize_p = bufsize;
-	}
-	if(increment) len = sockrecvfrom(param->remsock, (struct sockaddr *)&param->sinsr, *buf_p + *length_p, increment, conf.timeouts[STRING_S]*1000);
-	if(len > 0) {
-		*length_p += len;
-		param->nreads++;
-		param->statssrv64 += len;
-	}
-	return;
-}
-
-
-
-static int searchcookie(struct clientparam *param, struct flap_header * flap, int len, int * dif, struct tlv_header *tlv, int extra){
- struct icq_cookie *ic;
- char smallbuf[64];
- struct tlv_header *bostlv = NULL;
- struct sockaddr_in sa;
- SASIZETYPE size = sizeof(sa);
- int movelen = 0;
-
-	if(!icq_cookie_mutex_init){
-		pthread_mutex_init(&icq_cookie_mutex, NULL);
-		icq_cookie_mutex_init = 1;
-	}
-	pthread_mutex_lock(&icq_cookie_mutex);
-	for(ic = icq_cookies; ic; ic = ic->next)if(!strcmp((char *)param->username, ic->id))break;
-	if(!ic){
-		ic = myalloc(sizeof(struct icq_cookie));
-		memset(ic, 0, sizeof(struct icq_cookie));
-		ic->id = mystrdup((char *)param->username);
-		ic->next = icq_cookies;
-		icq_cookies = ic;
-	}
-	for(; ntohs(tlv->size) < 65500 && len >= (ntohs(tlv->size) + 4); len -= (ntohs(tlv->size) + 4), tlv = (struct tlv_header *)(tlv->data + ntohs(tlv->size))){
-		if(ntohs(tlv->type) == 0x0006){
-			if(ic->cookie)myfree(ic->cookie);
-			ic->cookie = myalloc(ntohs(tlv->size));
-			memcpy(ic->cookie, tlv->data, ntohs(tlv->size));
-			ic->size = tlv->size;
-		}
-		else if(ntohs(tlv->type) == 0x0005){
-			if(ic->connectstring)myfree(ic->connectstring);
-			ic->connectstring = myalloc(ntohs(tlv->size)+1);
-			memcpy(ic->connectstring, tlv->data, ntohs(tlv->size));
-			ic->connectstring[ntohs(tlv->size)] = 0;
-			bostlv = tlv;
-			movelen = extra + (len - 4) - ntohs(bostlv->size);
-		}
-
-	}
-	if(!ic->connectstring || !ic->cookie){
-		if(ic->cookie)myfree(ic->cookie);
-		if(ic->connectstring)myfree(ic->connectstring);
-		ic->cookie = NULL;
-		ic->connectstring = NULL;
-		ic->size = 0;
-		bostlv = NULL;
-	}
-	pthread_mutex_unlock(&icq_cookie_mutex);
-	if(bostlv){
-		if(so._getsockname(param->clisock, (struct sockaddr *)&sa, &size)==-1) return 1;
-		len = myinet_ntop(*SAFAMILY(&sa),SAADDR(&sa), smallbuf, 64);
-		if(strchr(ic->connectstring, ':'))sprintf(smallbuf+len, ":%hu", ntohs(sa.sin_port));
-		len = (int)strlen(smallbuf);
-		*dif = len - (int)ntohs(bostlv->size);
-		if(*dif != 0 && movelen > 0){
-			memmove(bostlv->data + len, bostlv->data + ntohs(bostlv->size), movelen);
-		}
-		memcpy(bostlv->data, smallbuf, len);
-		bostlv->size = htons(len);
-		len = ((int)ntohs(flap->size)) + *dif;
-		flap->size = htons(len);
-	}
-	return 0;
-}
-
-
-static FILTER_ACTION icq_srv(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int ioffset, int * length_p){
-	unsigned char * start = *buf_p + ioffset;
-	int len = *length_p - ioffset;
-	struct icqstate *state = (struct icqstate *)fc;
-	int size;
-	int offset;
-
-	while (len > 0){
-		switch(state->state){
-		case ONBEGIN:
-
-			if((*start) == 0x2A) {
-				if(len < 6){
-					offset = (int)(start - *buf_p);
-					addbuffer(6-len, param, buf_p, bufsize_p, length_p);
-					start = *buf_p + offset;
-					len = (int)(*buf_p + *length_p - start);
-
-				}
-				state->state = ONCHAN;
-			}
-			else {
-				if(!state->leftinstate)param->srv->logfunc(param, (unsigned char *)"Warning: need resync");
-				state->leftinstate++;
-				if(state->leftinstate > 65535){
-					param->srv->logfunc(param, (unsigned char *)"Out of Sync");
-					return REJECT;
-				}
-			}
-			start++;
-			len--;
-			break;
-		case ONCHAN:
-			if (*start >= 10){
-				param->srv->logfunc(param, (unsigned char *)"Warning: Wrong channel");
-				state->state = ONBEGIN;
-			}
-			else {
-				state->state = ONSEQ1;
-				state->channel = *start;
-				start++;
-				len--;
-			}
-			break;
-		case ONSEQ1:
-			state->gotseq =  (((unsigned)*start) << 8);
-			state->state = ONSEQ2; 
-			*(start) = (state->seq>>8);
-			start++;
-			len--;
-			break;
-		case ONSEQ2:
-			state->gotseq += *start;
-			if(state->gotseq != state->srvseq){
-				unsigned char smallbuf[64];
-				if(((state->gotseq < state->srvseq) || ((state->gotseq - state->srvseq) > 10 )) && (!state->resyncseq || state->gotseq != state->resyncseq)){
-					sprintf((char *)smallbuf, "Warning: Wrong sequence, expected: %04hx got: %04hx", state->srvseq, state->gotseq);
-					param->srv->logfunc(param, smallbuf);
-					state->state = ONBEGIN;
-					state->resyncseq = state->gotseq;
-					break;
-				}
-				sprintf((char *)smallbuf, "Warning: %d flaps are lost on resync", state->gotseq - state->srvseq );
-				param->srv->logfunc(param, smallbuf);
-				state->srvseq = state->gotseq;
-				*(start-1) = (state->seq>>8);
-			}
-			*start = (state->seq & 0x00FF);
-			state->srvseq = state->srvseq + 1;
-			state->seq = state->seq + 1;
-			state->state = ONSIZE1; 
-			start++;
-			len--;
-			break;
-		case ONSIZE1:
-			state->leftinstate = (((unsigned)(*start))<<8);
-			state->state = ONSIZE2;
-			start++;
-			len--;
-			break;
-		case ONSIZE2:
-			state->leftinstate += *start;
-			state->state = (state->leftinstate)?ONDATA:ONBEGIN;
-			start++;
-			len--;
-			if(state->leftinstate > 30 && state->channel == 2) {
-
-				if(len < state->leftinstate) {
-					offset = (int)(start - *buf_p);
-					addbuffer(state->leftinstate - len, param, buf_p, bufsize_p, length_p);
-					start = *buf_p + offset;
-					len = (int)(*length_p - offset);
-
-				}
-				size = 0;
-				if ((start[4] & 0x80)) {
-					size = htons(*(unsigned short *)(start+10)) + 2;
-					if(size > 8) size = 0;
-				}
-				if (start[0] == 0 && start[1] == 1 &&
-				    ((start[2] == 0 && start[3] == 5) || (start[2] == 1 && start[3] == 2))){
-					int dif = 0;
-
-					offset = (int)(start - *buf_p);
-					addbuffer(0, param, buf_p, bufsize_p, length_p);
-					start = *buf_p + offset;
-					searchcookie(param, (struct flap_header *) (start-6), state->leftinstate-(size+10), &dif, (struct tlv_header *) (start + size + 10), len - state->leftinstate);
-					*length_p += dif;
-					start += (state->leftinstate + dif);
-					len -= state->leftinstate;
-					state->leftinstate = 0;
-					state->state = ONBEGIN;
-				}
-			}
-			break;
-		
-		case ONDATA:
-			size = (state->leftinstate > len)? len : state->leftinstate;
-			
-			start += size;
-			len -= size;
-			state->leftinstate -= size;
-			if(!state->leftinstate) {
-				state->state = ONBEGIN;
-			}
-			break;
-		}
-	}
-	
-	return CONTINUE;
-}
-
-static struct filter icqfilter = {
-	NULL,
-	"icqfilter",
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	*icq_srv,
-	*icq_clear,
-	NULL
-};
-
-
-static int readflap(struct clientparam * param, int direction, unsigned char *buf, int buflen){
- int i, len;
-
- struct flap_header *flap = (struct flap_header *)buf;
-
- i = sockgetlinebuf(param, direction, buf, 6, EOF, conf.timeouts[STRING_L]);
- if(i!=6) return 1;
- if(flap->id != 0x2a) return 2;
- len = ntohs(flap->size);
- if(len > buflen-6) return 3;
- i = sockgetlinebuf(param, direction, (unsigned char *)flap->data, len, EOF, conf.timeouts[STRING_S]);
- if(len != i) return 4;
- return 0;
-
-}
-
-#define flap ((struct flap_header *)buf)
-#define snack ((struct snack_header *)(buf+6))
-void * icqprchild(struct clientparam* param) {
- int res;
- unsigned char tmpsend[1024];
- unsigned char *buf;
- int i,j,len,len1;
- int offset = 0;
- int buflen = 16384;
- LOGINTYPE logintype = ICQUNKNOWN;
- int greet = 0;
- struct icq_cookie *ic;
- struct tlv_header *tlv;
- struct icqstate mystate =  {
-	ONBEGIN, 
-	0, 0, 0, 
-	0
- };
- struct filterp icqfilterp = {
-	&icqfilter,
-	(void *)&mystate
- };
- struct filterp  **newfilters;
- char handshake[] = {'\052',  '\001', '\000', '\000', '\000', '\004', '\000', '\000', '\000', '\001'};
-
- 
-
- memcpy(tmpsend, handshake, 10);
- if(socksend(param->clisock, tmpsend, 10, conf.timeouts[STRING_S])!=10) {RETURN (1101);}
- buf = myalloc(65600);
-
- if((res = readflap(param, CLIENT, buf, 1000))) {RETURN (1180 + res);}
- if(ntohs(flap->size) == 4 || ntohs(flap->size) == 12){
-	tmpsend[2] = buf[2];
-	tmpsend[3] = buf[3];
-	greet = 1;
-	if(readflap(param, CLIENT, buf, 65550)) {RETURN (110);}
- }
- if(flap->chan != 1 && (flap->chan != 2 || snack->family != htonl(0x00170006))){
-	RETURN(1104);
- }
-
- len = ntohs(flap->size);
- if(flap->chan == 1){
-	tlv = (struct tlv_header *)(flap->data + 4);
-	len -= 4;
- }
- else {
-	tlv = (struct tlv_header *)(flap->data + 10);
-	len -= 10;
- } 
-
- for(; len >= (ntohs(tlv->size) + 4); len -= (ntohs(tlv->size) + 4), tlv = (struct tlv_header *)(tlv->data + ntohs(tlv->size))){
-	switch(ntohs(tlv->type)){
-	case 0x0001:
-		if(flap->chan == 2 && !logintype)logintype = ICQMD5;
-		if(!param->username){
-			param->username = myalloc(ntohs(tlv->size) + 1);
-			for(i=0, j=0; i < ntohs(tlv->size); i++){
-				if(!isspace(tlv->data[i]))param->username[j++]=tolower(tlv->data[i]);
-			}
-			param->username[j] = 0;
-		}
-		break;
-	case 0x0002:
-		logintype = ICQCLEAR;
-		break;
-	case 0x0006:
-		logintype = ICQCOOKIE;
-
-		for(ic = icq_cookies; ic; ic=ic->next){
-			if(ic->size && ic->size == tlv->size && !memcmp(ic->cookie, tlv->data, ntohs(tlv->size))){
-				parsehostname((char *)ic->connectstring, param, ntohs(param->srv->targetport));
-				if(!param->username && ic->id) param->username = (unsigned char *)mystrdup(ic->id);
-				break;
-			}
-		}
-		if(!ic) RETURN(1132);
-		break;
-	}
- }
- if(!logintype) RETURN(1133);
- if(logintype != ICQCOOKIE) {
-	parsehostname((char *)param->srv->target, param, ntohs(param->srv->targetport));
- }
- param->operation = CONNECT;
- res = (*param->srv->authfunc)(param);
- if(res) {RETURN(res);}
-
- if(greet){
-	if(socksend(param->remsock, tmpsend, 10, conf.timeouts[STRING_S])!=10) {RETURN (1105);}
-	param->statscli64 += 10;
- }
- if(readflap(param, SERVER, tmpsend, 1024)) {RETURN (1111);}
- param->statssrv64 += (ntohs(((struct flap_header *)tmpsend)->size) + 6);
- mystate.srvseq = ntohs(((struct flap_header *)tmpsend)->seq) + 1;
- mystate.seq = 1;
- len = ntohs(flap->size) + 6;
- if((res=handledatfltcli(param,  &buf, &buflen, offset, &len))!=PASS) RETURN(res);
- if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=(ntohs(flap->size)+6)) {RETURN (1106);}
- offset = 0;
- param->statscli64 += len;
-
- if(logintype == ICQMD5) {
-	if(readflap(param, SERVER, buf, 65550)) {RETURN (1112);}
-	mystate.srvseq = ntohs(flap->seq) + 1;
-	flap->seq = htons(mystate.seq);
-	mystate.seq++;
-	len = ntohs(flap->size) + 6;
-	if((res=handledatfltsrv(param,  &buf, &buflen, offset, &len))!=PASS) RETURN(res);
-	if(socksend(param->clisock, buf+offset, len, conf.timeouts[STRING_S])!=len) {RETURN (1113);}
-	offset = 0;
-
-	if(readflap(param, CLIENT, buf, 65550)) {RETURN (1114);}
-	len = ntohs(flap->size) + 6;
-	if((res=handledatfltcli(param,  &buf, &buflen, offset, &len))!=PASS) RETURN(res);
-	if(socksend(param->remsock, buf+offset, len, conf.timeouts[STRING_S])!=len) {RETURN (1115);}
-	param->statscli64 += len;
-	offset = 0;
- }
- if(logintype != ICQCOOKIE) {
-	if(readflap(param, SERVER, buf, 65550)) {RETURN (1116);}
-	mystate.srvseq = ntohs(flap->seq) + 1;
-	flap->seq = htons(mystate.seq);
-	mystate.seq++;
-	len = ntohs(flap->size);
-
-	if(!param->username) {RETURN (1117);}
-	if(flap->chan == 1 || flap->chan == 4){
-		if(flap->data[0] == 0 && flap->data[1] == 0 && flap->data[2] == 0 && flap->data[3] == 1){
-			tlv = (struct tlv_header *)(flap->data + 4);
-			len -= 4;
-		}
-		else 
-			tlv = (struct tlv_header *)(flap->data);
-	}
-	else {
-		tlv = (struct tlv_header *)(flap->data + 10);
-		len -= 10;
-	} 
-
-	len1 = ntohs(flap->size);
-	if(searchcookie(param, flap, len, &len1, tlv, 0)){RETURN (1118);}
-
-	len = ntohs(flap->size) + 6;
-	if((res=handledatfltsrv(param,  &buf, &buflen, offset, &len))!=PASS) RETURN(res);
-	if(socksend(param->clisock, buf+offset, len, conf.timeouts[STRING_S])!=len) {RETURN (1117);}
-	offset = 0;
- }
-
- param->ndatfilterssrv++;
- newfilters = myalloc(param->ndatfilterssrv * sizeof(struct filterp *));
- if(param->ndatfilterssrv > 1){
-	memcpy(newfilters, param->datfilterssrv, (param->ndatfilterssrv - 1) * sizeof(struct filterp *));
-	myfree(param->datfilterssrv);
- }
- param->datfilterssrv = newfilters;
- newfilters[param->ndatfilterssrv - 1] = &icqfilterp;
-
- param->res = sockmap(param, conf.timeouts[CONNECTION_L]);
-
- param->ndatfilterssrv--;
-
-CLEANRET:
- 
- 
- (*param->srv->logfunc)(param, NULL);
- freeparam(param);
- if(buf) myfree(buf);
- return (NULL);
-}
-
-#ifdef WITHMAIN
-struct proxydef childdef = {
-	icqprchild,
-	0,
-	0,
-	S_ICQPR,
-	""
-};
-#include "proxymain.c"
-#endif

+ 6 - 10
src/plugins.c

@@ -68,16 +68,12 @@ struct symbol symbols[] = {
 	{symbols+41, "admin", (void *) adminchild},
 	{symbols+42, "ftppr", (void *) ftpprchild},
 	{symbols+43, "smtpp", (void *) smtppchild},
-	{symbols+44, "icqpr", (void *) icqprchild},
-/*
-	{symbols+45, "msnpr", (void *) msnprchild},
-*/
-	{symbols+45, "authfuncs", (void *) &authfuncs},
-	{symbols+46, "commandhandlers", (void *) &commandhandlers},
-	{symbols+47, "decodeurl", (void *) decodeurl},
-	{symbols+48, "parsestr", (void *) parsestr},
-	{symbols+49, "make_ace", (void *) make_ace},
-	{symbols+50, "freeacl", (void *) freeacl},
+	{symbols+44, "authfuncs", (void *) &authfuncs},
+	{symbols+45, "commandhandlers", (void *) &commandhandlers},
+	{symbols+46, "decodeurl", (void *) decodeurl},
+	{symbols+47, "parsestr", (void *) parsestr},
+	{symbols+48, "make_ace", (void *) make_ace},
+	{symbols+49, "freeacl", (void *) freeacl},
 	{NULL, "", NULL}
 };
 

+ 0 - 2
src/proxy.h

@@ -300,8 +300,6 @@ void * smtppchild(struct clientparam * param);
 void * proxychild(struct clientparam * param);
 void * sockschild(struct clientparam * param);
 void * tcppmchild(struct clientparam * param);
-void * icqprchild(struct clientparam * param);
-void * msnprchild(struct clientparam * param);
 void * udppmchild(struct clientparam * param);
 void * adminchild(struct clientparam * param);
 void * ftpprchild(struct clientparam * param);

+ 2 - 3
src/stringtable.c

@@ -28,9 +28,8 @@ unsigned char * strings[] = {
 /* 15 */	(unsigned char *)"DNSPR",
 /* 16 */	(unsigned char *)"FTPPR",
 /* 17 */	(unsigned char *)"SMTPP",
-/* 18 */	(unsigned char *)"ICQPR",
-/* 19 	(unsigned char *)"MSNPR", */
-/* 19 */	(unsigned char *)"ZOMBIE",
+/* 18 */	(unsigned char *)"ZOMBIE",
+/* 19 */	NULL,
 /* 20 */	NULL,
 /* 21 */	NULL,
 /* 22 */	NULL,

+ 0 - 4
src/structures.h

@@ -163,12 +163,8 @@ typedef enum {
 	S_DNSPR,
 	S_FTPPR,
 	S_SMTPP,
-	S_ICQPR,
 	S_REVLI,
 	S_REVCO,
-/*
-	S_MSNPR,
-*/
 	S_ZOMBIE
 }PROXYSERVICE;