diff --git a/Makefile.msvc b/Makefile.msvc index 7fedec3..41e771c 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -8,7 +8,7 @@ BUILDDIR = ../bin/ CC = cl -CFLAGS = /nologo /MT /W3 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "WITH_SSL" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) +CFLAGS = /nologo /MT /W3 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "WITH_SSL" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRIu64=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) COUT = /Fo LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386 diff --git a/Makefile.msvc64 b/Makefile.msvc64 index 1d0ed0e..d67443c 100644 --- a/Makefile.msvc64 +++ b/Makefile.msvc64 @@ -8,7 +8,7 @@ BUILDDIR = ../bin64/ CC = cl -CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_SSL" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) +CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_SSL" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRIu64=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) COUT = /Fo LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:x64 diff --git a/Makefile.msvcARM64 b/Makefile.msvcARM64 index 43c559f..2b51c6a 100644 --- a/Makefile.msvcARM64 +++ b/Makefile.msvcARM64 @@ -8,7 +8,7 @@ BUILDDIR = ../bin64/ CC = cl -CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "WITH_SSL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) +CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "WITH_SSL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRIu64=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE) COUT = /Fo LN = link LDFLAGS = /nologo /subsystem:console /incremental:no /machine:arm64 diff --git a/Makefile.msvcCE b/Makefile.msvcCE index bbff3fa..339e5e9 100644 --- a/Makefile.msvcCE +++ b/Makefile.msvcCE @@ -8,7 +8,7 @@ BUILDDIR = ../bin/ CC = cl -CFLAGS = /DARM /D "NOODBC" /nologo /MT /W3 /Wp64 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "_WINCE" /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c +CFLAGS = /DARM /D "NOODBC" /nologo /MT /W3 /Wp64 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "_WINCE" /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRIu64=\"I64\"" /Fp"proxy.pch" /FD /c COUT = /Fo LN = link LDFLAGS = /nologo /subsystem:console /incremental:no @@ -32,4 +32,4 @@ include Makefile.inc allplugins: for /D %%i in ($(PLUGINS)) do (copy Makefile plugins\%%i && copy Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..) - \ No newline at end of file + diff --git a/Makefile.watcom b/Makefile.watcom index 4eab735..df909a9 100644 --- a/Makefile.watcom +++ b/Makefile.watcom @@ -8,7 +8,7 @@ BUILDDIR = ../bin/ CC = cl -CFLAGS = /nologo /Ox /MT /D "NOIPV6" /D "NODEBUG" /D "NOODBC" /D "NORADIUS" /D"WATCOM" /D "MSVC" /D "WITH_STD_MALLOC" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /c $(VERSION) $(BUILDDATE) +CFLAGS = /nologo /Ox /MT /D "NOIPV6" /D "NODEBUG" /D "NOODBC" /D "NORADIUS" /D"WATCOM" /D "MSVC" /D "WITH_STD_MALLOC" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRIu64=\"I64\"" /c $(VERSION) $(BUILDDATE) COUT = /Fo LN = link LDFLAGS = /nologo /subsystem:console /incremental:no diff --git a/src/3proxy.c b/src/3proxy.c index 9082f50..da705ee 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -169,7 +169,7 @@ int timechanged (time_t oldtime, time_t newtime, ROTATION lt){ )return 1; break; default: - break; + break; } return 0; } @@ -204,12 +204,12 @@ void dumpcounters(struct trafcount *tlin, int counterd){ conf.time = time(0); if(cheader.updated && conf.countertype && timechanged(cheader.updated, conf.time, conf.countertype)){ FILE * cfp; - + cfp = fopen((char *)dologname(tmpbuf, (unsigned char *)conf.counterfile, NULL, conf.countertype, cheader.updated), "w"); if(cfp){ for(tl = tlin; cfp && tl; tl = tl->next){ if(tl->type >= conf.countertype) - fprintf(cfp, "%05d %020"PRINTF_INT64_MODIFIER"u%s%s\n", tl->number, tl->traf64, tl->comment?" #" : "", tl->comment? tl->comment : ""); + fprintf(cfp, "%05d %020"PRIu64"u%s%s\n", tl->number, tl->traf64, tl->comment?" #" : "", tl->comment? tl->comment : ""); } fclose(cfp); } @@ -218,10 +218,10 @@ void dumpcounters(struct trafcount *tlin, int counterd){ cheader.updated = conf.time; lseek(counterd, 0, SEEK_SET); - write(counterd, &cheader, sizeof(struct counter_header)); + write(counterd, &cheader, sizeof(struct counter_header)); for(tl=tlin; tl; tl = tl->next){ if(tl->number){ - lseek(counterd, + lseek(counterd, sizeof(struct counter_header) + (tl->number - 1) * sizeof(struct counter_record), SEEK_SET); crecord.traf64 = tl->traf64; @@ -245,7 +245,7 @@ void cyclestep(void){ minutecounter = time(0); for(;;){ usleep(SLEEPTIME*999); - + conf.time = time(0); if(conf.needreload) { doschedule(); @@ -266,7 +266,7 @@ void cyclestep(void){ } } } - + } if(timechanged(basetime, conf.time, DAILY)) { tm = localtime(&conf.time); @@ -336,7 +336,7 @@ void cyclestep(void){ usleep(SLEEPTIME*999); return; } - + } } @@ -392,11 +392,11 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int sprintf((char *)tmpbuf, "%s will be installed and started.\n" "By clicking Yes you confirm you read and accepted License Agreement.\n" - "You can use Administration/Services to control %s service.", + "You can use Administration/Services to control %s service.", conf.stringtable[1], conf.stringtable[2]); if(MessageBox(NULL, (LPCSTR)tmpbuf, (LPCSTR)conf.stringtable[2], MB_YESNO|MB_ICONASTERISK) != IDYES) return 1; - + *tmpbuf = '\"'; if (!(res = SearchPath(NULL, argv[0], ".exe", 256, (char *)tmpbuf+1, (LPTSTR*)&arg))) { perror("Failed to find executable filename"); @@ -427,7 +427,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int else { HKEY runsrv; - if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, + if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices", 0, KEY_ALL_ACCESS, @@ -468,7 +468,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int } else { HKEY runsrv; - if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, + if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices", 0, KEY_ALL_ACCESS, @@ -530,22 +530,22 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int if(!writable)fclose(fp); #ifdef _WIN32 - + #ifndef _WINCE if(service){ - SERVICE_TABLE_ENTRY ste[] = + SERVICE_TABLE_ENTRY ste[] = { - { (LPSTR)conf.stringtable[1], (LPSERVICE_MAIN_FUNCTION)ServiceMain}, - { NULL, NULL } - }; - if(!StartServiceCtrlDispatcher( ste ))cyclestep(); + { (LPSTR)conf.stringtable[1], (LPSERVICE_MAIN_FUNCTION)ServiceMain}, + { NULL, NULL } + }; + if(!StartServiceCtrlDispatcher( ste ))cyclestep(); } - else + else #endif { cyclestep(); } - + #else signal(SIGCONT, mysigpause); @@ -558,6 +558,12 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int CLEARRETURN: + freeconf(&conf); + myfree(conf.conffile); + freeauth(conf.authfuncs); + destroyhashtable(&dns_table); + destroyhashtable(&dns6_table); + fprintf(stderr, "hi\n"); return 0; } diff --git a/src/authradius.c b/src/authradius.c index 58872b9..3d86b77 100644 --- a/src/authradius.c +++ b/src/authradius.c @@ -391,7 +391,7 @@ int radsend(struct clientparam * param, int auth, int stop){ /* NAS-Identifier */ if(conf.stringtable){ *ptr++ = PW_NAS_IDENTIFIER; - len = strlen(conf.stringtable[SERVICES+param->service]); + len = strlen((char *)conf.stringtable[SERVICES+param->service]); *ptr++ = (2 + len); memcpy(ptr, conf.stringtable[SERVICES+param->service], len); ptr += len; @@ -416,7 +416,7 @@ int radsend(struct clientparam * param, int auth, int stop){ /* Called-Station-ID */ if(param->hostname){ *ptr++ = PW_CALLED_STATION_ID; - len = strlen(param->hostname); + len = strlen((char *)param->hostname); *ptr++ = (2 + len); memcpy(ptr, param->hostname, len); ptr += len; @@ -456,7 +456,7 @@ int radsend(struct clientparam * param, int auth, int stop){ /* Username */ if(param->username){ - len = strlen(param->username); + len = strlen((char *)param->username); if(len>128)len=128; *ptr++ = PW_USER_NAME; *ptr++ = len + 2; @@ -499,12 +499,12 @@ int radsend(struct clientparam * param, int auth, int stop){ } if(auth && param->password){ - len = strlen(param->password); + len = strlen((char *)param->password); if(len > 128) len = 128; *ptr++ = PW_PASSWORD; ptr++; memcpy(ptr, param->password, len); - rad_pwencode(ptr, + rad_pwencode((char *)ptr, &len, radiussecret, (char *)packet.vector); @@ -582,7 +582,7 @@ int radsend(struct clientparam * param, int auth, int stop){ continue; } - if (calc_replydigest((char *)&rpacket, packet.vector, radiussecret, + if (calc_replydigest((char *)&rpacket, (char *)packet.vector, radiussecret, data_len) ){ continue; } diff --git a/src/auto.c b/src/auto.c index 9ace9b5..54d4d0a 100644 --- a/src/auto.c +++ b/src/auto.c @@ -20,7 +20,7 @@ void * autochild(struct clientparam* param) { len = sockfillbuffcli(param, 1, CONNECTION_S); if (len != 1){ param->res = 801; - dolog(param, ""); + dolog(param, (unsigned char *)""); } if(*param->clibuf == 4 || *param->clibuf == 5) return sockschild(param); return proxychild(param); diff --git a/src/common.c b/src/common.c index 8cd7110..96ced00 100644 --- a/src/common.c +++ b/src/common.c @@ -114,7 +114,6 @@ struct extparam conf = { #else {AF_INET},{AF_INET}, #endif - NULL, NULL, doconnect, lognone, diff --git a/src/conf.c b/src/conf.c index 8409772..8b86369 100644 --- a/src/conf.c +++ b/src/conf.c @@ -324,7 +324,7 @@ static int h_log(int argc, unsigned char ** argv){ } #endif #ifndef NORADIUS - else if(!strcmp(argv[1],"radius")){ + else if(!strcmp((char *)argv[1],"radius")){ conf.logfunc = logradius; } #endif @@ -400,7 +400,7 @@ static int h_include(int argc, unsigned char **argv){ static int h_archiver(int argc, unsigned char **argv){ int j; - conf.archiver = myalloc(argc * sizeof(char *)); + conf.archiver = myalloc(argc * sizeof(unsigned char *)); if(conf.archiver) { conf.archiverc = argc; for(j = 0; j < conf.archiverc; j++) conf.archiver[j] = (unsigned char *)mystrdup((char *)argv[j]); @@ -532,9 +532,21 @@ static int h_users(int argc, unsigned char **argv){ pwl->password = (unsigned char *) mystrdup((char *)arg + 1); pwl->pwtype = UN; } - if(!pwl->password) return 3; + if(!pwl->password){ + if(pwl->user){ + myfree(pwl->user); + } + myfree(pwl); + return 3; + } + } + if(!pwl->user){ + if(pwl->password){ + myfree(pwl->password); + } + myfree(pwl); + return 21; } - if(!pwl->user) return 21; pthread_mutex_lock(&pwl_mutex); pwl->next = conf.pwl; conf.pwl = pwl; @@ -715,7 +727,10 @@ static int h_monitor(int argc, unsigned char **argv){ } else { fm->path = mystrdup((char *)argv[1]); - if(!fm->path) return 21; + if(!fm->path){ + myfree(fm); + return 21; + } fm->next = conf.fmon; conf.fmon = fm; } @@ -743,6 +758,7 @@ static int h_parent(int argc, unsigned char **argv){ chains->weight = (unsigned)atoi((char *)argv[1]); if(chains->weight == 0 || chains->weight >1000) { fprintf(stderr, "Chaining error: bad chain weight %u line %d\n", chains->weight, linenum); + myfree(chains); return(3); } if(!strcmp((char *)argv[2], "tcp"))chains->type = R_TCP; @@ -762,9 +778,10 @@ static int h_parent(int argc, unsigned char **argv){ else if(!strcmp((char *)argv[2], "smtp"))chains->type = R_SMTP; else { fprintf(stderr, "Chaining error: bad chain type (%s)\n", argv[2]); + myfree(chains); return(4); } - cidr = strchr(argv[3], '/'); + cidr = strchr((char *)argv[3], '/'); if(cidr) *cidr = 0; if(!getip46(46, argv[3], (struct sockaddr *)&chains->addr)) return (5); chains->exthost = (unsigned char *)mystrdup((char *)argv[3]); @@ -827,7 +844,7 @@ int scanipl(unsigned char *arg, struct iplist *dst){ memcpy(&dst->ip_from, SAADDR(&sa), SAADDRLEN(&sa)); dst->family = *SAFAMILY(&sa); if(dash){ - if(afdetect(dash+1) == -1) return 1; + if(afdetect((unsigned char *)dash+1) == -1) return 1; if(!getip46(46, (unsigned char *)dash+1, (struct sockaddr *)&sa)) return 2; memcpy(&dst->ip_to, SAADDR(&sa), SAADDRLEN(&sa)); if(*SAFAMILY(&sa) != dst->family || memcmp(&dst->ip_to, &dst->ip_from, SAADDRLEN(&sa)) < 0) return 3; @@ -881,11 +898,15 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } if(!userl) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } memset(userl, 0, sizeof(struct userlist)); userl->user=(unsigned char*)mystrdup((char *)arg); - if(!userl->user) return NULL; + if(!userl->user){ + freeacl(acl); + return NULL; + } } while((arg = (unsigned char *)strtok((char *)NULL, ","))); } if(argc > 1 && strcmp("*", (char *)argv[1])) { @@ -900,11 +921,13 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } if(!ipl) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } memset(ipl, 0, sizeof(struct iplist)); if (scanipl(arg, ipl)) { fprintf(stderr, "Invalid IP, IP range or CIDR, line %d\n", linenum); + freeacl(acl); return(NULL); } } while((arg = (unsigned char *)strtok((char *)NULL, ","))); @@ -928,6 +951,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } if(!hostnamel){ fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } memset(hostnamel, 0, sizeof(struct hostname)); @@ -946,6 +970,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ hostnamel->name = (unsigned char *) mystrdup( (char *)pattern); if(!hostnamel->name) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } } @@ -960,6 +985,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } if(!ipl) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } *ipl = tmpip; @@ -978,12 +1004,14 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } if(!portl) { fprintf(stderr, "No memory for ACL entry, line %d\n", linenum); + freeacl(acl); return(NULL); } memset(portl, 0, sizeof(struct portlist)); res = sscanf((char *)arg, "%hu-%hu", &portl->startport, &portl->endport); if(res < 1) { fprintf(stderr, "Invalid port or port range, line %d\n", linenum); + freeacl(acl); return(NULL); } if (res == 1) portl->endport = portl->startport; @@ -1051,6 +1079,7 @@ struct ace * make_ace (int argc, unsigned char ** argv){ } else { fprintf(stderr, "Unknown operation type: %s line %d\n", arg, linenum); + freeacl(acl); return(NULL); } } while((arg = (unsigned char *)strtok((char *)NULL, ","))); @@ -1315,6 +1344,8 @@ static int h_ace(int argc, unsigned char **argv){ tl->cleared = crecord.cleared; tl->updated = crecord.updated; if(tl->cleared < 0 || tl->cleared >= MAX_COUNTER_TIME || tl->updated < 0 || tl->updated >= MAX_COUNTER_TIME){ + myfree(tl); + freeacl(acl); fprintf(stderr, "Invalid, incompatible or corrupted counter file.\n"); return(6); } @@ -1374,16 +1405,16 @@ static int h_radius(int argc, unsigned char **argv){ } */ memset(radiuslist, 0, sizeof(radiuslist)); - if(strlen(argv[1]) > 63) argv[1][63] = 0; - strcpy(radiussecret, argv[1]); + if(strlen((char *)argv[1]) > 63) argv[1][63] = 0; + strcpy(radiussecret, (char *)argv[1]); for( nradservers=0; nradservers < MAXRADIUS && nradservers < argc -2; nradservers++){ char *s = 0; - if((s=strchr(argv[nradservers + 2], '/'))){ + if((s=strchr((char *)argv[nradservers + 2], '/'))){ *s = 0; s++; } if( !getip46(46, argv[nradservers + 2], (struct sockaddr *)&radiuslist[nradservers].authaddr)) return 1; - if( s && !getip46(46, s+1, (struct sockaddr *)&radiuslist[nradservers].localaddr)) return 2; + if( s && !getip46(46, (unsigned char *)s+1, (struct sockaddr *)&radiuslist[nradservers].localaddr)) return 2; if(!*SAPORT(&radiuslist[nradservers].authaddr))*SAPORT(&radiuslist[nradservers].authaddr) = htons(1812); port = ntohs(*SAPORT(&radiuslist[nradservers].authaddr)); radiuslist[nradservers].logaddr = radiuslist[nradservers].authaddr; @@ -1731,6 +1762,7 @@ int readconfig(FILE * fp){ int res = 0; if( !(buf = myalloc(bufsize)) || ! (argv = myalloc((NPARAMS + 1) * sizeof(unsigned char *))) ) { + if(buf) myfree(buf); fprintf(stderr, "No memory for configuration"); return(10); } @@ -1740,6 +1772,8 @@ int readconfig(FILE * fp){ inbuf = (int)(strlen((char *)buf) + 1); argc = parsestr (buf, argv, NPARAMS-1, &buf, &inbuf, &bufsize); if(argc < 1) { + myfree(buf); + myfree(argv); fprintf(stderr, "Parse error line %d\n", linenum); return(11); } @@ -1751,6 +1785,8 @@ int readconfig(FILE * fp){ if(!writable){ writable = freopen(curconf, "r+", fp); if(!writable){ + myfree(buf); + myfree(argv); fprintf(stderr, "Unable to reopen config for writing: %s\n", curconf); return 1; } @@ -1764,6 +1800,8 @@ int readconfig(FILE * fp){ res = (*cm->handler)(argc, argv); if(res > 0){ fprintf(stderr, "Command: '%s' failed with code %d, line %d\n", argv[0], res, linenum); + myfree(buf); + myfree(argv); return(linenum); } if(!res) break; @@ -1771,6 +1809,8 @@ int readconfig(FILE * fp){ } if(res != 1)continue; fprintf(stderr, "Unknown command: '%s' line %d\n", argv[0], linenum); + myfree(buf); + myfree(argv); return(linenum); } myfree(buf); @@ -1795,12 +1835,16 @@ void freeconf(struct extparam *confp){ struct connlim * cl; struct trafcount * tc; struct passwords *pw; + struct auth *authfuncs; struct ace *acl; struct filemon *fm; int counterd, archiverc; unsigned char *logname, *logtarget; unsigned char **archiver; unsigned char * logformat; + char * counterfile; + FILE *stdlog; + char* demanddialprog; int i; @@ -1835,12 +1879,10 @@ void freeconf(struct extparam *confp){ pthread_mutex_unlock(&pwl_mutex); -/* logtarget = confp->logtarget; confp->logtarget = NULL; logname = confp->logname; confp->logname = NULL; -*/ confp->logfunc = lognone; logformat = confp->logformat; confp->logformat = NULL; @@ -1869,6 +1911,14 @@ void freeconf(struct extparam *confp){ numservers = 0; acl = confp->acl; confp->acl = NULL; + authfuncs = confp->authfuncs; + confp->authfuncs = NULL; + counterfile = confp->counterfile; + confp->counterfile = NULL; + stdlog = confp->stdlog; + confp->stdlog = NULL; + demanddialprog = confp->demanddialprog; + confp->demanddialprog = NULL; usleep(SLEEPTIME); @@ -1882,7 +1932,7 @@ void freeconf(struct extparam *confp){ freeacl(tc->ace); } - + freeauth(authfuncs); freeacl(acl); freepwl(pw); for(; bl; bl = (struct bandlim *) itfree(bl, bl->next)) freeacl(bl->ace); @@ -1895,14 +1945,12 @@ void freeconf(struct extparam *confp){ for(; fm; fm = (struct filemon *)itfree(fm, fm->next)){ if(fm->path) myfree(fm->path); } -/* if(logtarget) { myfree(logtarget); } if(logname) { myfree(logname); } -*/ if(logformat) { myfree(logformat); } @@ -1911,6 +1959,15 @@ void freeconf(struct extparam *confp){ myfree(archiver); } havelog = 0; + if(counterfile){ + myfree(counterfile); + } + if(stdlog){ + fclose(stdlog); + } + if(demanddialprog){ + myfree(demanddialprog); + } } int reload (void){ diff --git a/src/datatypes.c b/src/datatypes.c index 0d991c6..2fb167d 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -9,7 +9,7 @@ static void pr_unsigned64(struct node *node, CBFUNC cbf, void*cb){ char buf[32]; - if(node->value)(*cbf)(cb, buf, sprintf(buf, "%"PRINTF_INT64_MODIFIER"u", *(uint64_t *)node->value)); + if(node->value)(*cbf)(cb, buf, sprintf(buf, "%"PRIu64"u", *(uint64_t *)node->value)); } static void pr_integer(struct node *node, CBFUNC cbf, void*cb){ diff --git a/src/log.c b/src/log.c index abeea86..02e66b1 100644 --- a/src/log.c +++ b/src/log.c @@ -246,15 +246,15 @@ int dobuf2(struct clientparam * param, unsigned char * buf, const unsigned char i += (int)strlen((char *)buf+i); break; case 'L': - sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->cycles); + sprintf((char *)buf+i, "%"PRIu64"u", param->cycles); i += (int)strlen((char *)buf+i); break; case 'I': - sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statssrv64); + sprintf((char *)buf+i, "%"PRIu64"u", param->statssrv64); i += (int)strlen((char *)buf+i); break; case 'O': - sprintf((char *)buf+i, "%"PRINTF_INT64_MODIFIER"u", param->statscli64); + sprintf((char *)buf+i, "%"PRIu64"u", param->statscli64); i += (int)strlen((char *)buf+i); break; case 'h': diff --git a/src/plugins/LdapPlugin/ldapauth.c b/src/plugins/LdapPlugin/ldapauth.c index 1572b4d..dbff3ad 100644 --- a/src/plugins/LdapPlugin/ldapauth.c +++ b/src/plugins/LdapPlugin/ldapauth.c @@ -72,7 +72,7 @@ int savecounters(void) sprintf(tmpbuf,pat_file,ldap_dircount,tcd->ace->users->user); f=fopen(tmpbuf,"w+b"); fseek(f,0,SEEK_SET); - fprintf(f,"%"PRINTF_INT64_MODIFIER"u %lu %lu\n",tcd->traf64, + fprintf(f,"%"PRIu64"u %lu %lu\n",tcd->traf64, (unsigned long)tcd->cleared,(unsigned long)tcd->updated); fclose(f); @@ -387,7 +387,7 @@ int h_trafgroup(int argc, unsigned char ** argv) fseek(f,0,SEEK_SET); fgets(buf, 256, f); - sscanf(buf,"%"PRINTF_INT64_MODIFIER"u %lu %lu\n",&rcounter.traf64, + sscanf(buf,"%"PRIu64"u %lu %lu\n",&rcounter.traf64, &rcounter.cleared, &rcounter.updated); diff --git a/src/plugins/TrafficPlugin/TrafficPlugin.c b/src/plugins/TrafficPlugin/TrafficPlugin.c index 5cf23aa..16cfbcb 100644 --- a/src/plugins/TrafficPlugin/TrafficPlugin.c +++ b/src/plugins/TrafficPlugin/TrafficPlugin.c @@ -240,7 +240,7 @@ 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"d, cli=%"PRIu64"d; After: srv=%"PRIu64"d, cli=%"PRIu64"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); #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); #endif diff --git a/src/proxy.c b/src/proxy.c index 881ef1e..f7bb56c 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -393,7 +393,7 @@ for(;;){ while( (i = sockgetlinebuf(param, CLIENT, buf, BUFSIZE - 1, '\n', conf.timeouts[STRING_S])) > 2){ if(i> 15 && (!strncasecmp((char *)(buf), "content-length", 14))){ buf[i]=0; - sscanf((char *)buf + 15, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); + sscanf((char *)buf + 15, "%"PRIu64"u", &contentlength64); } } while( contentlength64 > 0 && (i = sockgetlinebuf(param, CLIENT, buf, (BUFSIZE < contentlength64)? BUFSIZE - 1:(int)contentlength64, '\n', conf.timeouts[STRING_S])) > 0){ @@ -503,7 +503,7 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; - sscanf((char *)sb, "%"PRINTF_INT64_MODIFIER"u",&contentlength64); + sscanf((char *)sb, "%"PRIu64"u",&contentlength64); if(param->maxtrafout64 && (param->maxtrafout64 < param->statscli64 || contentlength64 > param->maxtrafout64 - param->statscli64)){ RETURN(10); } @@ -581,7 +581,7 @@ for(;;){ contentlength64 = param->cliinbuf; param->nolongdatfilter = 1; } - sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRINTF_INT64_MODIFIER"u\r\n", contentlength64); + sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRIu64"u\r\n", contentlength64); } #endif @@ -955,7 +955,7 @@ for(;;){ if(!sb)continue; ++sb; while(isspace(*sb))sb++; - sscanf((char *)sb, "%"PRINTF_INT64_MODIFIER"u", &contentlength64); + sscanf((char *)sb, "%"PRIu64"u", &contentlength64); hascontent = 1; if(param->unsafefilter && param->ndatfilterssrv > 0) { hascontent = 2; @@ -1033,7 +1033,7 @@ for(;;){ } if(action != PASS) RETURN(517); contentlength64 = param->srvinbuf; - sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRINTF_INT64_MODIFIER"u\r\n", contentlength64); + sprintf((char*)buf+strlen((char *)buf), "Content-Length: %"PRIu64"u\r\n", contentlength64); hascontent = 1; } } @@ -1080,7 +1080,7 @@ for(;;){ } smallbuf[i] = 0; contentlength64 = 0; - sscanf((char *)smallbuf, "%"PRINTF_INT64_MODIFIER"x", &contentlength64); + sscanf((char *)smallbuf, "%"PRIu64"x", &contentlength64); if(contentlength64 == 0) { param->chunked = 2; } diff --git a/src/proxy.h b/src/proxy.h index f9be0b4..03a1517 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -203,6 +203,7 @@ int afdetect(unsigned char *name); unsigned long myresolver(int, unsigned char *, unsigned char *); unsigned long fakeresolver (int, unsigned char *, unsigned char*); int inithashtable(struct hashtable *hashtable, unsigned nhashsize); +void destroyhashtable(struct hashtable *ht); void freeparam(struct clientparam * param); void clearstat(struct clientparam * param); void dumpcounters(struct trafcount *tl, int counterd); diff --git a/src/proxymain.c b/src/proxymain.c index 146b4eb..0d804c2 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -505,7 +505,10 @@ int MODULEMAINFUNC (int argc, char** argv){ "" #endif ); - + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(cbl_string)myfree(cbl_string); + if(fp) fclose(fp); return (1); } #endif @@ -538,6 +541,10 @@ int MODULEMAINFUNC (int argc, char** argv){ "" #endif ); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(cbl_string)myfree(cbl_string); + if(fp) fclose(fp); return (1); } srv.target = (unsigned char *)mystrdup(argv[i+1]); @@ -558,6 +565,10 @@ int MODULEMAINFUNC (int argc, char** argv){ } defparam.clisock = 0; if(! (newparam = myalloc (sizeof(defparam)))){ + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(cbl_string)myfree(cbl_string); + if(fp) fclose(fp); return 2; }; *newparam = defparam; @@ -601,6 +612,9 @@ int MODULEMAINFUNC (int argc, char** argv){ } if( sock == INVALID_SOCKET) { perror("socket()"); + srvfree(&srv); + if(cbl_string)myfree(cbl_string); + if(fp) fclose(fp); return -2; } setopts(sock, srv.lissockopts); @@ -618,7 +632,10 @@ int MODULEMAINFUNC (int argc, char** argv){ #endif #if defined SO_BINDTODEVICE if(srv.ibindtodevice && so._setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, srv.ibindtodevice, strlen(srv.ibindtodevice) + 1)) { - dolog(&defparam, "failed to bind device"); + dolog(&defparam, (unsigned char *)"failed to bind device"); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(fp) fclose(fp); return -12; } #elif defined IP_BOUND_IF @@ -627,11 +644,17 @@ int MODULEMAINFUNC (int argc, char** argv){ idx = if_nametoindex(srv.ibindtodevice); if(!idx || (*SAFAMILY(&srv.intsa) == AF_INET && setsockopt(sock, IPPROTO_IP, IP_BOUND_IF, &idx, sizeof(idx)))) { dolog(&defparam, (unsigned char *)"failed to bind device"); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(fp) fclose(fp); return -12; } #ifndef NOIPV6 if((*SAFAMILY(&srv.intsa) == AF_INET6 && so._setsockopt(sock, IPPROTO_IPV6, IPV6_BOUND_IF, &idx, sizeof(idx)))) { dolog(&defparam, (unsigned char *)"failed to bind device"); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(fp) fclose(fp); return -12; } #endif @@ -645,6 +668,9 @@ int MODULEMAINFUNC (int argc, char** argv){ sleeptime = (sleeptime<<1); if(!sleeptime) { so._closesocket(sock); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(fp) fclose(fp); return -3; } } @@ -652,6 +678,9 @@ int MODULEMAINFUNC (int argc, char** argv){ if(so._listen (sock, srv.backlog?srv.backlog : 1+(srv.maxchild>>3))==-1) { sprintf((char *)buf, "listen(): %s", strerror(errno)); if(!srv.silent)dolog(&defparam, buf); + srvfree(&srv); + if(cbc_string)myfree(cbc_string); + if(fp) fclose(fp); return -4; } } @@ -667,6 +696,9 @@ int MODULEMAINFUNC (int argc, char** argv){ parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa); if((srv.cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) { dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket"); + srvfree(&srv); + myfree(cbl_string); + if(fp) fclose(fp); return -6; } opt = 1; @@ -680,10 +712,16 @@ int MODULEMAINFUNC (int argc, char** argv){ if(so._bind(srv.cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) { dolog(&defparam, (unsigned char *)"Failed to bind connect back socket"); + srvfree(&srv); + myfree(cbl_string); + if(fp) fclose(fp); return -7; } if(so._listen(srv.cbsock, 1 + (srv.maxchild>>4))==-1) { dolog(&defparam, (unsigned char *)"Failed to listen connect back socket"); + srvfree(&srv); + myfree(cbl_string); + if(fp) fclose(fp); return -8; } } diff --git a/src/structures.h b/src/structures.h index 82c910a..450d497 100644 --- a/src/structures.h +++ b/src/structures.h @@ -15,8 +15,9 @@ #include #include #include -#ifndef PRINTF_INT64_MODIFIER -#define PRINTF_INT64_MODIFIER "ll" +#include +#ifndef PRIu64 +#define PRIu64 "ll" #endif #ifdef __cplusplus extern "C" { @@ -596,7 +597,6 @@ struct extparam { struct sockaddr_in extsa; #endif struct passwords *pwl; - struct auth * authenticate; AUTHFUNC authfunc; LOGFUNC logfunc; BANDLIMFUNC bandlimfunc; @@ -719,7 +719,7 @@ struct sockfuncs { int (*_getsockname)(SOCKET s, struct sockaddr * name, socklen_t * namelen); int (*_getsockopt)(SOCKET s, int level, int optname, void * optval, socklen_t * optlen); int (*_setsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen); - int (*_poll)(struct pollfd *fds, unsigned int nfds, int timeout); + int (*_poll)(struct pollfd *fds, long unsigned int nfds, int timeout); size_t (*_send)(SOCKET s, const void *msg, size_t len, int flags); size_t (*_sendto)(SOCKET s, const void *msg, size_t len, int flags, const struct sockaddr *to, SASIZETYPE tolen); size_t (*_recv)(SOCKET s, void *buf, size_t len, int flags); diff --git a/src/webadmin.c b/src/webadmin.c index 0aefc38..4f5a567 100644 --- a/src/webadmin.c +++ b/src/webadmin.c @@ -510,9 +510,9 @@ void * adminchild(struct clientparam* param) { } else { inbuf += sprintf(buf+inbuf, - "%"PRINTF_INT64_MODIFIER"u" + "%"PRIu64"u" "MB%s" - "%"PRINTF_INT64_MODIFIER"u.%"PRINTF_INT64_MODIFIER"u" + "%"PRIu64"u.%"PRIu64"u" "%s", cp->traflim64 / (1024 * 1024), rotations[cp->type],