aboutsummaryrefslogtreecommitdiff
path: root/src/netnuke.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2010-12-02 11:42:54 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2010-12-02 11:42:54 -0500
commitcac445be9a40d6febdaa7bd0f3c430ab0dc7f2f2 (patch)
treef1468dc5a9831edd0379732b340ad86090c5cd45 /src/netnuke.c
parent6785e4c29f76db8e9d410492bf88397757367567 (diff)
downloadNetNuke2-cac445be9a40d6febdaa7bd0f3c430ab0dc7f2f2.tar.gz
Now checks for non-root users and SUID operation.
Added block-size argument.
Diffstat (limited to 'src/netnuke.c')
-rw-r--r--src/netnuke.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/netnuke.c b/src/netnuke.c
index 76f7d23..3920d7e 100644
--- a/src/netnuke.c
+++ b/src/netnuke.c
@@ -29,7 +29,6 @@
#include <unistd.h>
#include <time.h>
#include <errno.h>
-#include <ftw.h>
#include <glob.h>
#include <pthread.h>
#include "netnuke.h"
@@ -37,6 +36,7 @@
pthread_mutex_t lock_global = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock_write = PTHREAD_MUTEX_INITIALIZER;
extern unsigned long total_written_bytes;
+unsigned int blksz_override = 0;
int safety_flag = 0;
int logging_flag = 0;
int verbose_flag = 0;
@@ -55,6 +55,7 @@ static struct option long_options[] =
{"timeout", required_argument, 0, 't'},
{"scheme", required_argument, 0, 's'},
{"device-type", required_argument, 0, 'd'},
+ {"block-size", required_argument, 0, 'b'},
{NULL, 0, 0, 0}
};
@@ -74,6 +75,7 @@ static char* long_options_help[] =
"Select bus:\n\
ide\n\
scsi",
+ "Block size in bytes",
NULL
};
@@ -128,18 +130,24 @@ void usage(const char* progname)
int main(int argc, char* argv[])
{
+ uid_t uid=getuid(), euid=geteuid();
+ if (uid < 0 || uid != euid)
+ {
+ COM(self, "Need root... exiting\n");
+ exit(1);
+ }
+
if((nnlogcleanup()) != 0)
{
fprintf(stderr, "Failed to cleanup %s: %s\n", NNLOGFILE, strerror(errno));
}
COM(self, "Program start\n");
- COM(self, "Safety is %s\n", verbose_flag ? "ON" : "OFF");
if(argc < 2) usage(basename(argv[0]));
int c;
int option_index = 0;
- while((c = getopt_long (argc, argv, "is:d:t:", long_options, &option_index)) > 0)
+ while((c = getopt_long (argc, argv, "ib:s:d:t:", long_options, &option_index)) > 0)
{
switch (c)
{
@@ -151,6 +159,17 @@ int main(int argc, char* argv[])
printf ("\n");
break;
}
+ case 'b':
+ {
+ blksz_override = atoi(optarg);
+ if(blksz_override < 512)
+ {
+ COM(self, "Block size must be a multiple of 512\n");
+ exit(1);
+ }
+ COM(self, "Forcing %d block size\n", blksz_override);
+ break;
+ }
case 's':
{
break;
@@ -191,6 +210,8 @@ int main(int argc, char* argv[])
putchar ('\n');
}
+ COM(self, "Safety is %s\n", safety_flag ? "ON" : "OFF");
+
nndevice_t** device;
device = (nndevice_t**)malloc(MAXTHREAD * sizeof(nndevice_t));
if(device == NULL)