diff --git a/src/common.c b/src/common.c index 3730ce2..bf3658d 100644 --- a/src/common.c +++ b/src/common.c @@ -123,6 +123,7 @@ struct extparam conf = { doconnect, /* AUTHFUNC authfunc; */ NULL, /* BANDLIMFUNC bandlimfunc; */ NULL, /* TRAFCOUNTFUNC trafcountfunc; */ + NULL, /* void (*prelog)(struct clientparam * param); */ NULL, NULL, /* unsigned char *logtarget, *logformat; */ NULL, /* struct filemon * fmon; */ NULL, /* struct filter * filters; */ diff --git a/src/log.c b/src/log.c index 7a573a6..02c4ccc 100644 --- a/src/log.c +++ b/src/log.c @@ -33,9 +33,6 @@ struct srvparam logsrv; struct LOGGER; -void(*prelog)(struct clientparam * param) = NULL; - - struct logevent { struct logevent *next; struct LOGGER *log; @@ -353,7 +350,7 @@ void dolog(struct clientparam * param, const unsigned char *s){ stdlog(s, strlen(s), &errlogger); return; } - if(prelog)prelog(param); + if(conf.prelog)conf.prelog(param); if(!param->nolog && param->srv->log) { struct logevent *evt; diff --git a/src/plugins.c b/src/plugins.c index 878b6e1..2927f28 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -77,7 +77,6 @@ struct symbol symbols[] = { {symbols+50, "checkpreACL", (void *) checkpreACL}, {symbols+51, "dolog", (void *) dolog}, {symbols+52, "logfuncs", (void *) &logfuncs}, - {symbols+53, "prelog", (void *) &prelog}, {NULL, "", NULL} }; diff --git a/src/plugins/SSLPlugin/ssl_plugin.c b/src/plugins/SSLPlugin/ssl_plugin.c index fbee4d5..363e95e 100644 --- a/src/plugins/SSLPlugin/ssl_plugin.c +++ b/src/plugins/SSLPlugin/ssl_plugin.c @@ -28,7 +28,7 @@ extern "C" { #endif PROXYFUNC tcppmfunc, proxyfunc, smtppfunc, ftpprfunc; -static void (*dolog)(struct clientparam * param, const unsigned char *s); +static void (*pdolog)(struct clientparam * param, const unsigned char *s); static struct pluginlink * pl; @@ -239,25 +239,25 @@ int dossl(struct clientparam* param, SSL_CONN* ServerConnp, SSL_CONN* ClientConn ServerConn = ssl_handshake_to_server(param->remsock, (char *)param->hostname, &ServerCert, &errSSL); if ( ServerConn == NULL || ServerCert == NULL ) { param->res = 8011; - dolog(param, (unsigned char *)"SSL handshake to server failed"); - if(ServerConn == NULL) dolog(param, (unsigned char *)"ServerConn is NULL"); - if(ServerCert == NULL) dolog(param, (unsigned char *)"ServerCert is NULL"); - if(errSSL)dolog(param, (unsigned char *)errSSL); + pdolog(param, (unsigned char *)"SSL handshake to server failed"); + if(ServerConn == NULL) pdolog(param, (unsigned char *)"ServerConn is NULL"); + if(ServerCert == NULL) pdolog(param, (unsigned char *)"ServerCert is NULL"); + if(errSSL)pdolog(param, (unsigned char *)errSSL); return 1; } FakeCert = ssl_copy_cert(ServerCert); if ( FakeCert == NULL ) { param->res = 8012; _ssl_cert_free(ServerCert); - dolog(param, (unsigned char *)"Failed to create certificate copy"); + pdolog(param, (unsigned char *)"Failed to create certificate copy"); ssl_conn_free(ServerConn); return 2; } ClientConn = ssl_handshake_to_client(param->clisock, FakeCert, &errSSL); if ( ClientConn == NULL ) { param->res = 8012; - dolog(param, (unsigned char *)"Handshake to client failed"); - if(errSSL)dolog(param, (unsigned char *)errSSL); + pdolog(param, (unsigned char *)"Handshake to client failed"); + if(errSSL)pdolog(param, (unsigned char *)errSSL); _ssl_cert_free(ServerCert); _ssl_cert_free(FakeCert); ssl_conn_free(ServerConn); @@ -383,7 +383,7 @@ PLUGINAPI int PLUGINCALL ssl_plugin (struct pluginlink * pluginlink, int argc, char** argv){ pl = pluginlink; - dolog=pluginlink->findbyname("dolog"); + pdolog=pluginlink->findbyname("dolog"); if(!ssl_loaded){ ssl_loaded = 1; diff --git a/src/plugins/TrafficPlugin/Makefile.inc b/src/plugins/TrafficPlugin/Makefile.inc index 4aed3db..9c4d1eb 100644 --- a/src/plugins/TrafficPlugin/Makefile.inc +++ b/src/plugins/TrafficPlugin/Makefile.inc @@ -4,4 +4,4 @@ TrafficPlugin$(OBJSUFFICS): TrafficPlugin.c $(CC) $(DCFLAGS) $(CFLAGS) TrafficPlugin.c $(BUILDDIR)TrafficPlugin$(DLSUFFICS): TrafficPlugin$(OBJSUFFICS) - $(LN) $(LNOUT)../../$(BUILDDIR)TrafficPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) TrafficPlugin$(OBJSUFFICS) + $(LN) $(LNOUT)../../$(BUILDDIR)TrafficPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) TrafficPlugin$(OBJSUFFICS) $(LIBS) diff --git a/src/plugins/TrafficPlugin/TrafficPlugin.c b/src/plugins/TrafficPlugin/TrafficPlugin.c index b721993..18fa8f1 100644 --- a/src/plugins/TrafficPlugin/TrafficPlugin.c +++ b/src/plugins/TrafficPlugin/TrafficPlugin.c @@ -28,8 +28,8 @@ int DBGLEVEL = 0; int already_loaded = 0; typedef int (* handler)(int argc, unsigned char ** argv); -struct extparam * conf; -struct commands * commandhandlers; +struct extparam * sconfp; +struct commands * scommandhandlers; struct pluginlink * pl; typedef enum { @@ -169,12 +169,9 @@ int h_trafcorrect(int argc, unsigned char ** argv) { return 1; } -static unsigned short myhtons(unsigned short port) { - return (port << 8) | (port >> 8); -} +void(*origprelog)(struct clientparam * param) = NULL; -LOGFUNC origlogfunc; -void mylogfunc(struct clientparam * param, const unsigned char * pz) { +void mylogfunc(struct clientparam * param) { PROXYSERVICE g_s = S_NOSERVICE; int port; int rule = 0; @@ -189,7 +186,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { port = starttrafcorrect->port; g_s = starttrafcorrect->p_service; if (starttrafcorrect->p_service == S_NOSERVICE) g_s = param->service; - if (starttrafcorrect->port <= 0) port = myhtons(*SAPORT(¶m->sinsr)); + if (starttrafcorrect->port <= 0) port = htons(*SAPORT(¶m->sinsr)); #ifndef NOPSTDINT statssrv_before = param->statssrv64; @@ -199,7 +196,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { statscli_before = param->statscli; #endif rule++; - if (((g_s == param->service) && (port == myhtons(*SAPORT(¶m->sinsr)))) || + if (((g_s == param->service) && (port == htons(*SAPORT(¶m->sinsr)))) || ( ((starttrafcorrect->type == UDP) && ((param->operation == UDPASSOC)|| (param->operation == DNSRESOLVE)|| @@ -240,9 +237,9 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { } if (DBGLEVEL == 1) { #ifndef NOPSTDINT - fprintf(stdout, "Port=%hd; Before: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; After: srv=%"PRINTF_INT64_MODIFIER"d, cli=%"PRINTF_INT64_MODIFIER"d; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(*SAPORT(¶m->sinsr)), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule); + fprintf(stdout, "Port=%hd; Before: srv=%"PRIu64", cli=%"PRIu64"; After: srv=%"PRIu64", cli=%"PRIu64"; nreads=%ld; nwrites=%ld; Rule=%d\n",htons(*SAPORT(¶m->sinsr)), statssrv_before, statscli_before, param->statssrv64, param->statscli64,param->nreads,param->nwrites,rule); #else - fprintf(stdout, "Port=%hd; Before: srv=%lu, cli=%lu; After: srv=%lu, cli=%lu; nreads=%ld; nwrites=%ld; Rule=%d\n",myhtons(param->sins.sin_port), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule); + fprintf(stdout, "Port=%hd; Before: srv=%lu, cli=%lu; After: srv=%lu, cli=%lu; nreads=%ld; nwrites=%ld; Rule=%d\n",htons(*SAPORT(¶m->sins)), statssrv_before, statscli_before, param->statssrv, param->statscli,param->nreads,param->nwrites,rule); #endif } ok = 1; @@ -252,7 +249,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) { if ((!ok) && (DBGLEVEL == 1)) { fprintf(stdout, "No rules specifed: service=%d, port=%d, operation=%d", param->service, *SAPORT(¶m->sinsr),param->operation); } - origlogfunc(param, pz); + if(origprelog)origprelog(param); } #ifdef _WIN32 @@ -277,8 +274,8 @@ BOOL WINAPI DllMain( HINSTANCE hModule, PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char** argv) { struct commands * starthandler; - conf = pluginlink->conf; - commandhandlers = pluginlink->commandhandlers; + sconfp = pluginlink->conf; + scommandhandlers = pluginlink->commandhandlers; pl = pluginlink; if (argc>1) { @@ -295,7 +292,7 @@ PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char** } already_loaded = 1; /* добавляем команду "trafcorrect" */ - starthandler = commandhandlers; + starthandler = scommandhandlers; for ( ; starthandler->next; starthandler = starthandler->next); trafcorrect_handler.next = NULL; trafcorrect_handler.minargs = 1; @@ -305,8 +302,8 @@ PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char** starthandler->next = &trafcorrect_handler; /* подменяем conf->logfunc, с целью контролировать траффик */ - origlogfunc = conf->logfunc; - conf->logfunc = mylogfunc; + origprelog = sconfp->prelog; + sconfp->prelog = mylogfunc; return 0; } diff --git a/src/structures.h b/src/structures.h index 04bfd45..8b89e48 100644 --- a/src/structures.h +++ b/src/structures.h @@ -626,6 +626,7 @@ struct extparam { AUTHFUNC authfunc; BANDLIMFUNC bandlimfunc; TRAFCOUNTFUNC trafcountfunc; + void (*prelog)(struct clientparam * param); unsigned char *logtarget, *logformat; struct filemon * fmon; struct filter * filters;