From 4be53ade84f4d8e758a2417884b19b370aa5ecf6 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 23 Sep 2009 17:21:23 +0000 Subject: Initial commit of log.c Fixed character buffer overflow when copying the media names from the structure. --- log.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ netnuke.c | 4 ++-- 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 log.c diff --git a/log.c b/log.c new file mode 100644 index 0000000..20b4a81 --- /dev/null +++ b/log.c @@ -0,0 +1,78 @@ +/** + * NetNuke - Erases all storage media detected by the system + * Copyright (C) 2009 Joseph Hunkeler + * + * This file is part of NetNuke. + * + * NetNuke is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * NetNuke is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NetNuke. If not, see . + **/ + +#include +#include +#include +#include +#include +#include + + +FILE* loutfile; +static clock_t ltime_start; +static clock_t ltime_current; +static int logline; + +int logopen(const char* logfile) +{ + logline = 0; + ltime_start = clock() * CLK_TCK; + loutfile = fopen(logfile, "wa+"); + + if(loutfile == NULL) + { + printf("Cannot not write to log file: %s\n", logfile); + return 1; + } + + fseek(loutfile, 0, SEEK_SET); + return 0; +} + +void logclose() +{ + fclose(loutfile); +} + +int lwrite(char *format, ...) +{ + ltime_current = clock() * CLK_TCK; + + char *str = (char*)malloc(sizeof(char) * 256); + char tmpstr[256]; + int n; + + va_list args; + va_start (args, format); + n = vsprintf (str, format, args); + va_end (args); + + float seconds = (ltime_current - ltime_start) / 1000; + + snprintf(tmpstr, 255, "[%d.%0.0f] %s", logline, seconds, str); + fprintf(loutfile, tmpstr); + logline++; + + /* I am aware of the implications of using fflush constantly. */ + fflush(loutfile); + free(str); + return 0; +} diff --git a/netnuke.c b/netnuke.c index 3f75f47..4c2aa41 100644 --- a/netnuke.c +++ b/netnuke.c @@ -143,8 +143,8 @@ int nuke(media_t device) uint64_t size = device.size; char media[BUFSIZ]; char mediashort[BUFSIZ]; - strncpy(media, device.name, strlen(device.name)); - strncpy(mediashort, device.nameshort, strlen(device.nameshort)); + memcpy(media, device.name, strlen(device.name)+1); + memcpy(mediashort, device.nameshort, strlen(device.nameshort)); /* test with 100MBs worth of data */ if(udef_testmode == true) -- cgit