From fb56b7d307a7bce1f2109c73864bad7c71716f3b Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Tue, 18 Oct 2022 17:58:52 +0300 Subject: [PATCH] "auto" command added --- src/Makefile.inc | 7 +++++-- src/auto.c | 28 ++++++++++++++++++++++++++++ src/conf.c | 12 +++++++++++- src/proxy.h | 1 + src/structures.h | 3 ++- 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 src/auto.c diff --git a/src/Makefile.inc b/src/Makefile.inc index a0b1e52..335a444 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -91,6 +91,9 @@ srvftppr$(OBJSUFFICS): ftppr.c proxy.h structures.h srvtcppm$(OBJSUFFICS): tcppm.c proxy.h structures.h $(CC) $(COUT)srvtcppm$(OBJSUFFICS) $(CFLAGS) tcppm.c +srvauto$(OBJSUFFICS): auto.c proxy.h structures.h + $(CC) $(COUT)srvauto$(OBJSUFFICS) $(CFLAGS) auto.c + srvsocks$(OBJSUFFICS): socks.c proxy.h structures.h $(CC) $(COUT)srvsocks$(OBJSUFFICS) $(CFLAGS) socks.c @@ -143,6 +146,6 @@ 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) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) log$(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) $(VERSIONDEP) - $(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) common$(OBJSUFFICS) log$(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) srvauto$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) log$(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) $(VERSIONDEP) + $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) authradius$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvauto$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) log$(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) diff --git a/src/auto.c b/src/auto.c new file mode 100644 index 0000000..9ace9b5 --- /dev/null +++ b/src/auto.c @@ -0,0 +1,28 @@ +/* + 3APA3A simpliest proxy server + (c) 2002-2021 by Vladimir Dubrovin <3proxy@3proxy.org> + + please read License Agreement + +*/ + +#include "proxy.h" + + +void * autochild(struct clientparam* param) { + int len; + + if(!param->clibuf){ + if(!(param->clibuf = myalloc(SRVBUFSIZE))) return 0; + param->clibufsize = SRVBUFSIZE; + param->clioffset = param->cliinbuf = 0; + } + len = sockfillbuffcli(param, 1, CONNECTION_S); + if (len != 1){ + param->res = 801; + dolog(param, ""); + } + if(*param->clibuf == 4 || *param->clibuf == 5) return sockschild(param); + return proxychild(param); +} + diff --git a/src/conf.c b/src/conf.c index b29d835..4cbe211 100644 --- a/src/conf.c +++ b/src/conf.c @@ -224,6 +224,13 @@ static int h_proxy(int argc, unsigned char ** argv){ } #endif } + else if(!strcmp((char *)argv[0], "auto")) { + childdef.pf = autochild; + childdef.port = 8080; + childdef.isudp = 0; + childdef.service = S_AUTO; + childdef.helpmessage = ""; + } else if(!strcmp((char *)argv[0], "tcppm")) { childdef.pf = tcppmchild; childdef.port = 0; @@ -1601,8 +1608,9 @@ struct commands commandhandlers[]={ {commandhandlers+61, "force", h_force, 1, 1}, {commandhandlers+62, "noforce", h_noforce, 1, 1}, {commandhandlers+63, "parentretries", h_parentretries, 2, 2}, + {commandhandlers+64, "auto", h_proxy, 1, 0}, #ifndef NORADIUS - {commandhandlers+64, "radius", h_radius, 3, 0}, + {commandhandlers+65, "radius", h_radius, 3, 0}, #endif {specificcommands, "", h_noop, 1, 0} }; @@ -1899,6 +1907,7 @@ int reload (void){ FILE *fp; int error = -2; + pthread_mutex_lock(&config_mutex); conf.paused++; freeconf(&conf); conf.paused++; @@ -1912,5 +1921,6 @@ int reload (void){ } if(!writable)fclose(fp); } + pthread_mutex_unlock(&config_mutex); return error; } diff --git a/src/proxy.h b/src/proxy.h index 12d0bd3..f9be0b4 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -293,6 +293,7 @@ void * smtppchild(struct clientparam * param); void * proxychild(struct clientparam * param); void * sockschild(struct clientparam * param); void * tcppmchild(struct clientparam * param); +void * autochild(struct clientparam * param); void * udppmchild(struct clientparam * param); void * adminchild(struct clientparam * param); void * ftpprchild(struct clientparam * param); diff --git a/src/structures.h b/src/structures.h index 01c3bff..5adb361 100644 --- a/src/structures.h +++ b/src/structures.h @@ -183,7 +183,8 @@ typedef enum { S_SMTPP, S_REVLI, S_REVCO, - S_ZOMBIE + S_ZOMBIE, + S_AUTO }PROXYSERVICE; struct clientparam;