--- Begin Message ---
Package: iptraf
Version: 3.0.0-8.1
Severity: minor
Tags: upstream patch
Dear Maintainer,
the help of iptraf (-h) should be visible without becoming root:
~ iptraf -h
IPTraf Version 3.0.0
Copyright (c) Gerard Paul Java 1997-2004l
This program can be run only by the system administrator
It should however present its help message even for non-root users
-- System Information:
Debian Release: 7.0
APT prefers proposed-updates
APT policy: (500, 'proposed-updates'), (500, 'stable'), (300, 'unstable'),
(100, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.9.4 (SMP w/2 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages iptraf depends on:
ii libc6 2.13-38
ii libncurses5 5.9-10
ii libtinfo5 5.9-10
iptraf recommends no packages.
iptraf suggests no packages.
-- no debconf information
diff -u iptraf-3.0.0/src/iptraf.c iptraf-3.0.0/src/iptraf.c
--- iptraf-3.0.0/src/iptraf.c
+++ iptraf-3.0.0/src/iptraf.c
@@ -479,6 +479,19 @@
close(fd);
}
+void check_root()
+{
+#ifndef ALLOWUSERS
+ if (getuid() != 0) {
+ fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
+ fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
+ fprintf(stderr,
+ "This program can be run only by the system administrator\n\n");
+ exit(1);
+ }
+#endif
+}
+
/*
* Main routine
*/
@@ -492,15 +505,6 @@
int facilitytime = 0;
int current_log_interval;
-#ifndef ALLOWUSERS
- if (getuid() != 0) {
- fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
- fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
- fprintf(stderr,
- "This program can be run only by the system administrator\n\n");
- exit(1);
- }
-#endif
setlocale(LC_ALL, "");
@@ -521,7 +525,8 @@
commandhelp();
exit(0);
} else if (opt == 'f') {
- removetags();
+ check_root();
+ removetags();
remove_sockets();
} else if (opt == 't') {
facilitytime = atoi(optarg);
@@ -573,6 +578,7 @@
}
} while ((opt != '?') && (opt != -1));
}
+ check_root();
is_first_instance = first_instance();
if ((getenv("TERM") == NULL) && (!daemonized)) {
diff -u iptraf-3.0.0/debian/changelog iptraf-3.0.0/debian/changelog
--- iptraf-3.0.0/debian/changelog
+++ iptraf-3.0.0/debian/changelog
@@ -1,3 +1,10 @@
+iptraf (3.0.0-8.2) UNRELEASED; urgency=low
+
+ * Non-maintainer upload.
+ * patched to query help as non-root.
+
+ -- Michael Eyrich <[email protected]> Fri, 31 May 2013 10:16:07 +0200
+
iptraf (3.0.0-8.1) unstable; urgency=low
* Non-maintainer upload.
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/patch-help.diff
+++ iptraf-3.0.0/patch-help.diff
@@ -0,0 +1,56 @@
+--- src/iptraf.c~ 2013-05-29 11:33:11.000000000 +0200
++++ src/iptraf.c 2013-05-31 10:06:19.891603025 +0200
+@@ -479,6 +479,19 @@
+ close(fd);
+ }
+
++void check_root()
++{
++#ifndef ALLOWUSERS
++ if (getuid() != 0) {
++ fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
++ fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
++ fprintf(stderr,
++ "This program can be run only by the system administrator\n\n");
++ exit(1);
++ }
++#endif
++}
++
+ /*
+ * Main routine
+ */
+@@ -492,15 +505,6 @@
+ int facilitytime = 0;
+ int current_log_interval;
+
+-#ifndef ALLOWUSERS
+- if (getuid() != 0) {
+- fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
+- fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
+- fprintf(stderr,
+- "This program can be run only by the system administrator\n\n");
+- exit(1);
+- }
+-#endif
+
+ setlocale(LC_ALL, "");
+
+@@ -521,7 +525,8 @@
+ commandhelp();
+ exit(0);
+ } else if (opt == 'f') {
+- removetags();
++ check_root();
++ removetags();
+ remove_sockets();
+ } else if (opt == 't') {
+ facilitytime = atoi(optarg);
+@@ -573,6 +578,7 @@
+ }
+ } while ((opt != '?') && (opt != -1));
+ }
++ check_root();
+ is_first_instance = first_instance();
+
+ if ((getenv("TERM") == NULL) && (!daemonized)) {
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/.pc/.version
+++ iptraf-3.0.0/.pc/.version
@@ -0,0 +1 @@
+2
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/.pc/.quilt_patches
+++ iptraf-3.0.0/.pc/.quilt_patches
@@ -0,0 +1 @@
+patches
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/.pc/.quilt_series
+++ iptraf-3.0.0/.pc/.quilt_series
@@ -0,0 +1 @@
+series
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/.pc/applied-patches
+++ iptraf-3.0.0/.pc/applied-patches
@@ -0,0 +1 @@
+fix-help-as-non-root.patch
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/.pc/fix-help-as-non-root.patch/src/iptraf.c
+++ iptraf-3.0.0/.pc/fix-help-as-non-root.patch/src/iptraf.c
@@ -0,0 +1,694 @@
+/*
+===========================================================================
+IPTraf
+An IP Network Statistics Utility
+Written by Gerard Paul Java <[email protected]>
+Copyright (c) Gerard Paul Java 1997-2004
+
+Version 3.0.0
+Main Module
+
+---------------------------------------------------------------------------
+This software is open-source; you may redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU General Public License in the included COPYING file for
+details.
+---------------------------------------------------------------------------
+*/
+
+#define MAIN_MODULE
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <curses.h>
+#include <panel.h>
+#include <signal.h>
+#include <string.h>
+#include <locale.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <errno.h>
+#include <menurt.h>
+#include <winops.h>
+#include <msgboxes.h>
+#include "dirs.h"
+#include "deskman.h"
+#include "fltdefs.h"
+#include "fltselect.h"
+#include "fltmgr.h"
+#include "fltedit.h"
+#include "ifstats.h"
+#include "serv.h"
+#include "options.h"
+#include "promisc.h"
+#include "externs.h"
+#include "instances.h"
+#include "tcptable.h"
+#include "log.h"
+#include "attrs.h"
+#include "rvnamed.h"
+#include "logvars.h"
+#include "getpath.h"
+
+#define WITHALL 1
+#define WITHOUTALL 0
+
+const char *ALLSPEC = "all";
+
+/*
+ * Important globals used throughout the
+ * program.
+ */
+int exitloop = 0;
+int daemonized = 0;
+int facility_running = 0;
+int is_first_instance;
+char active_facility_lockfile[64];
+char active_facility_countfile[64];
+int accept_unsupported_interfaces = 0;
+char graphing_filter[80];
+
+extern void about();
+
+void press_enter_to_continue(void)
+{
+ fprintf(stderr, "Press Enter to continue.\n");
+ getchar();
+}
+
+void clearfiles(char *prefix, char *directory)
+{
+ DIR *dir;
+ struct dirent *dir_entry;
+ char target_name[80];
+
+ dir = opendir(directory);
+
+ if (dir == NULL) {
+ fprintf(stderr, "\nUnable to read directory %s\n%s\n",
+ directory, strerror(errno));
+ press_enter_to_continue();
+ return;
+ }
+
+ do {
+ dir_entry = readdir(dir);
+ if (dir_entry != NULL) {
+ if (strncmp(dir_entry->d_name, prefix, strlen(prefix)) == 0) {
+ snprintf(target_name, 80, "%s/%s", directory,
+ dir_entry->d_name);
+ unlink(target_name);
+ }
+ }
+ } while (dir_entry != NULL);
+
+ closedir(dir);
+}
+
+void removetags(void)
+{
+ clearfiles("iptraf", LOCKDIR);
+}
+
+void remove_sockets(void)
+{
+ clearfiles(SOCKET_PREFIX, WORKDIR);
+}
+
+/*
+ * Handlers for the TERM signal and HUP signals. There's nothing we can do
+ * for the KILL.
+ */
+
+void term_signal_handler(int signo)
+{
+ erase();
+ refresh();
+ endwin();
+
+ if (signo != SIGHUP)
+ fprintf(stderr, "IPTraf process %u exiting on signal %d\n\n",
+ getpid(), signo);
+
+ if (active_facility_lockfile[0] != '\0') {
+ unlink(active_facility_lockfile);
+ adjust_instance_count(PROCCOUNTFILE, -1);
+ if (active_facility_countfile[0] != '\0')
+ adjust_instance_count(active_facility_countfile, -1);
+ }
+
+ if (is_first_instance)
+ unlink(IPTIDFILE);
+
+ exit(1);
+}
+
+/*
+ * Handler for the SIGSEGV, Segmentation Fault. Tries to clear the screen
+ * and issue a better message than "Segmentation fault". May not always
+ * clean up properly.
+ */
+
+void segvhandler()
+{
+ erase();
+ refresh();
+ endwin();
+ fprintf(stderr, "Fatal: memory allocation error\n\n");
+ fprintf(stderr,
+ "If you suspect a bug, please report the exact circumstances under which this\n");
+ fprintf(stderr,
+ "error was generated. If possible, include gdb or strace data which may point\n");
+ fprintf(stderr,
+ "out where the error occured. Bug reports may be sent in to [email protected].\n\n");
+ fprintf(stderr,
+ "An attempt will be made to clear all lock files, but if stale lock files\n");
+ fprintf(stderr,
+ "remain, exit all other instances of IPTraf and restart with the -f\n");
+ fprintf(stderr, "command-line parameter.\n\n");
+ fprintf(stderr, "IPTraf process %u aborting on signal 11.\n\n",
+ getpid());
+
+ if (active_facility_lockfile[0] != '\0')
+ unlink(active_facility_lockfile);
+
+ if (is_first_instance)
+ unlink(IPTIDFILE);
+
+ if (active_facility_lockfile[0] != '\0') {
+ unlink(active_facility_lockfile);
+ adjust_instance_count(PROCCOUNTFILE, -1);
+ if (active_facility_countfile[0] != '\0')
+ adjust_instance_count(active_facility_countfile, -1);
+ }
+
+ exit(2);
+}
+
+/*
+ * USR2 handler. Used to normally exit a daemonized facility.
+ */
+
+void term_usr2_handler()
+{
+ exitloop = 1;
+}
+
+void init_break_menu(struct MENU *break_menu)
+{
+ tx_initmenu(break_menu, 6, 20, (LINES - 6) / 2, COLS / 2,
+ BOXATTR, STDATTR, HIGHATTR, BARSTDATTR, BARHIGHATTR,
+ DESCATTR);
+ tx_additem(break_menu, " By packet ^s^ize",
+ "Displays packet counts by packet size range");
+ tx_additem(break_menu, " By TCP/UDP ^p^ort",
+ "Displays packet and byte counts by service port");
+ tx_additem(break_menu, NULL, NULL);
+ tx_additem(break_menu, " E^x^it menu", "Return to main menu");
+}
+
+/*
+ * Get the ball rolling: The program interface routine.
+ */
+
+void program_interface(struct OPTIONS *options,
+ int opt, char *optarg, int facilitytime)
+{
+ struct MENU menu;
+ struct MENU break_menu;
+
+ int endloop = 0;
+ int row = 1;
+ int break_row = 1;
+ int aborted;
+ int break_aborted;
+
+ struct filterstate ofilter;
+ struct ffnode *fltfiles;
+
+ char ifname[10];
+ char *ifptr = NULL;
+ struct porttab *ports;
+
+ draw_desktop();
+
+ attrset(STATUSBARATTR);
+ mvprintw(0, 1, "IPTraf");
+
+ /*
+ * Load saved filter or graphing filter if specified
+ */
+ if (graphing_logfile[0] != '\0') {
+ loadfilterlist(&fltfiles);
+ memset(&ofilter, 0, sizeof(struct filterstate));
+ loadfilter(pickfilterbyname(fltfiles, graphing_filter),
+ &(ofilter.fl), FLT_RESOLVE);
+ } else {
+ loadfilters(&ofilter);
+ indicate("");
+ }
+
+ loadaddports(&ports);
+
+ if (opt == 0) {
+ attrset(STATUSBARATTR);
+ mvprintw(LINES - 1, 1, PLATFORM);
+ about();
+
+ tx_initmenu(&menu, 13, 35, (LINES - 14) / 2, (COLS - 35) / 2,
+ BOXATTR, STDATTR, HIGHATTR, BARSTDATTR, BARHIGHATTR,
+ DESCATTR);
+
+ tx_additem(&menu, " IP traffic ^m^onitor",
+ "Displays current IP traffic information");
+ tx_additem(&menu, " General interface ^s^tatistics",
+ "Displays some statistics for attached interfaces");
+ tx_additem(&menu, " ^D^etailed interface statistics",
+ "Displays more statistics for a selected interface");
+ tx_additem(&menu, " Statistical ^b^reakdowns...",
+ "Facilities for traffic counts by packet size or TCP/UDP port");
+ tx_additem(&menu, " ^L^AN station monitor",
+ "Displays statistics on detected LAN stations");
+ tx_additem(&menu, NULL, NULL);
+ tx_additem(&menu, " ^F^ilters...",
+ "Allows you to select traffic display and logging criteria");
+ tx_additem(&menu, NULL, NULL);
+ tx_additem(&menu, " C^o^nfigure...",
+ "Set various program options");
+ tx_additem(&menu, NULL, NULL);
+ tx_additem(&menu, " E^x^it", "Exits program");
+
+ endloop = 0;
+
+ do {
+ tx_showmenu(&menu);
+ tx_operatemenu(&menu, &row, &aborted);
+
+ switch (row) {
+ case 1:
+ selectiface(ifname, WITHALL, &aborted);
+ if (!aborted) {
+ if (strcmp(ifname, "") != 0)
+ ifptr = ifname;
+ else
+ ifptr = NULL;
+
+ ipmon(options, &ofilter, 0, ifptr);
+ }
+ break;
+ case 2:
+ ifstats(options, &ofilter, 0);
+ break;
+ case 3:
+ selectiface(ifname, WITHOUTALL, &aborted);
+ if (!aborted)
+ detstats(ifname, options, 0, &ofilter);
+ break;
+ case 4:
+ break_row = 1;
+ init_break_menu(&break_menu);
+ tx_showmenu(&break_menu);
+ tx_operatemenu(&break_menu, &break_row, &break_aborted);
+
+ switch (break_row) {
+ case 1:
+ selectiface(ifname, WITHOUTALL, &aborted);
+ if (!aborted)
+ packet_size_breakdown(options, ifname, 0,
+ &ofilter);
+ break;
+ case 2:
+ selectiface(ifname, WITHOUTALL, &aborted);
+ if (!aborted)
+ servmon(ifname, ports, options, 0, &ofilter);
+ break;
+ case 4:
+ break;
+ }
+ tx_destroymenu(&break_menu);
+ break;
+ case 5:
+ selectiface(ifname, WITHALL, &aborted);
+ if (!aborted) {
+ if (strcmp(ifname, "") != 0)
+ ifptr = ifname;
+ else
+ ifptr = NULL;
+ hostmon(options, 0, ifptr, &ofilter);
+ }
+ break;
+ case 7:
+ config_filters(&ofilter);
+ savefilters(&ofilter);
+ break;
+ case 9:
+ setoptions(options, &ports);
+ saveoptions(options);
+ break;
+ case 11:
+ endloop = 1;
+ break;
+ }
+ } while (!endloop);
+
+ tx_destroymenu(&menu);
+ } else {
+ switch (opt) {
+ case 'i':
+ if ((strcmp(optarg, ALLSPEC) == 0)
+ || (strcmp(optarg, "") == 0))
+ ifptr = NULL;
+ else
+ ifptr = optarg;
+
+ ipmon(options, &ofilter, facilitytime, ifptr);
+ break;
+ case 'g':
+ ifstats(options, &ofilter, facilitytime);
+ break;
+ case 'd':
+ detstats(optarg, options, facilitytime, &ofilter);
+ break;
+ case 's':
+ servmon(optarg, ports, options, facilitytime, &ofilter);
+ break;
+ case 'z':
+ packet_size_breakdown(options, optarg, facilitytime, &ofilter);
+ break;
+ case 'l':
+ if ((strcmp(optarg, ALLSPEC) == 0)
+ || (strcmp(optarg, "") == 0))
+ ifptr = NULL;
+ else
+ ifptr = optarg;
+
+ hostmon(options, facilitytime, ifptr, &ofilter);
+ break;
+ }
+ }
+
+ destroyporttab(ports);
+ erase();
+ update_panels();
+ doupdate();
+}
+
+
+/*
+ * Command-line help facility.
+ */
+
+void commandhelp()
+{
+ printf("\nSyntax:\n");
+ printf
+ (" iptraf [ -f ] [ -u ] [ { -i iface | -g | -d iface | -s iface | -z iface |\n");
+ printf
+ (" -l iface } [ -t timeout ] [ -B ] [ -L logfile ] [-I interval] ] \n\n");
+ printf
+ ("Issue the iptraf command with no parameters for menu-driven operation.\n");
+ printf("These options can also be supplied to the command:\n\n");
+ printf
+ ("-i iface - start the IP traffic monitor (use \"-i all\" for all interfaces)\n");
+ printf("-g - start the general interface statistics\n");
+ printf
+ ("-d iface - start the detailed statistics facility on an interface\n");
+ printf
+ ("-s iface - start the TCP and UDP monitor on an interface\n");
+ printf("-z iface - shows the packet size counts on an interface\n");
+ printf
+ ("-l iface - start the LAN station monitor (\"-l all\" for all LAN interfaces)\n");
+ printf
+ ("-B - run in background (use only with one of the above parameters)\n");
+ printf
+ ("-t timeout - when used with one of the above parameters, tells\n");
+ printf
+ (" the facility to run only for the specified number of\n");
+ printf(" minutes (timeout)\n");
+ printf
+ ("-L logfile - specifies an alternate log file for any direct invocation\n");
+ printf
+ (" of a facility from the command line. The log is placed in\n");
+ printf(" %s if path is not specified.\n", LOGDIR);
+ printf
+ ("-I interval - specifies the log interval for all facilities except the IP\n");
+ printf(" traffic monitor. Value is in minutes.\n");
+ printf
+ ("-f - clear all locks and counters. Use with great caution.\n");
+ printf
+ (" Normally used to recover from an abnormal termination.\n\n");
+ printf
+ ("-u - allow use of unsupported interfaces as ethernet devices.\n");
+ printf("IPTraf %s Copyright (c) Gerard Paul Java 1997-2004\n",
+ VERSION);
+}
+
+int first_instance()
+{
+ int fd;
+
+ fd = open(IPTIDFILE, O_RDONLY);
+
+ if (fd < 0)
+ return !0;
+ else {
+ close(fd);
+ return 0;
+ }
+}
+
+void mark_first_instance()
+{
+ int fd;
+
+ fd = open(IPTIDFILE, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR);
+ if (fd < 0) {
+ fprintf(stderr, "\nWarning: unable to tag this process\r\n");
+ press_enter_to_continue();
+ return;
+ }
+ close(fd);
+}
+
+/*
+ * Main routine
+ */
+
+int main(int argc, char **argv)
+{
+ struct OPTIONS options;
+ int opt = 0;
+ int command = 0;
+ char keyparm[12];
+ int facilitytime = 0;
+ int current_log_interval;
+
+#ifndef ALLOWUSERS
+ if (getuid() != 0) {
+ fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
+ fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
+ fprintf(stderr,
+ "This program can be run only by the system administrator\n\n");
+ exit(1);
+ }
+#endif
+
+ setlocale(LC_ALL, "");
+
+ strcpy(current_logfile, "");
+ strcpy(graphing_logfile, "");
+ strcpy(graphing_filter, "");
+
+ /*
+ * Parse command line
+ */
+
+ if (argc > 1) {
+ do {
+ opterr = 0;
+ opt = getopt(argc, argv, "i:gd:s:z:l:hfqt:BL:uI:G:F:");
+
+ if (opt == 'h') {
+ commandhelp();
+ exit(0);
+ } else if (opt == 'f') {
+ removetags();
+ remove_sockets();
+ } else if (opt == 't') {
+ facilitytime = atoi(optarg);
+ if (facilitytime == 0) {
+ fprintf(stderr, "\nInvalid time value\n\n");
+ exit(1);
+ }
+ } else if (opt == 'B') {
+ daemonized = 1;
+ setenv("TERM", "linux", 1);
+ } else if (opt == 'L') {
+ if (strchr(optarg, '/') != NULL)
+ strncpy(current_logfile, optarg, 80);
+ else
+ strncpy(current_logfile, get_path(T_LOGDIR, optarg),
+ 80);
+ } else if (opt == 'q') {
+ /* -q parameter now ignored, maintained for compatibility */
+ } else if (opt == 'u') {
+ accept_unsupported_interfaces = 1;
+ } else if (opt == 'I') {
+ current_log_interval = atoi(optarg);
+ if (current_log_interval == 0)
+ fprintf(stderr, "Invalid log interval value\n");
+
+ exit(1);
+ } else if (opt == 'G') {
+ if (strchr(optarg, '/') != NULL)
+ strncpy(graphing_logfile, optarg, 80);
+ else
+ strncpy(graphing_logfile, get_path(T_LOGDIR, optarg),
+ 80);
+
+ daemonized = 1;
+ } else if (opt == 'F') {
+ strncpy(graphing_filter, optarg, 80);
+ } else if (opt == '?') {
+ fprintf(stderr,
+ "\nInvalid option or missing parameter, use iptraf -h for help\n\n");
+ exit(1);
+ } else if (opt != -1) {
+ if (optarg != 0) {
+ bzero(keyparm, 12);
+ strncpy(keyparm, optarg, 11);
+ } else
+ strcpy(keyparm, "");
+
+ command = opt;
+ }
+ } while ((opt != '?') && (opt != -1));
+ }
+ is_first_instance = first_instance();
+
+ if ((getenv("TERM") == NULL) && (!daemonized)) {
+ fprintf(stderr, "Your TERM variable is not set.\n");
+ fprintf(stderr, "Please set it to an appropriate value.\n");
+ exit(1);
+ }
+
+ if (graphing_logfile[0] != '\0' && graphing_filter[0] == '\0') {
+ fprintf(stderr, "Specify an IP filter name with -F\n");
+ exit(1);
+ }
+
+ loadoptions(&options);
+
+ /*
+ * If a facility is directly invoked from the command line, check for
+ * a daemonization request
+ */
+
+ if ((daemonized) && (command != 0)) {
+ switch (fork()) {
+ case 0: /* child */
+ setsid();
+ freopen("/dev/null", "w", stdout); /* redirect std output */
+ freopen("/dev/null", "r", stdin); /* redirect std input */
+ freopen("/dev/null", "w", stderr); /* redirect std error */
+ signal(SIGUSR2, (void *) term_usr2_handler);
+
+ if (graphing_logfile[0] != '\0')
+ options.logging = 0; /* if raw logging is specified */
+ else /* then standard logging is disabled */
+ options.logging = 1;
+ break;
+ case -1: /* error */
+ fprintf(stderr,
+ "\nFork error, IPTraf cannot run in background\n\n");
+ exit(1);
+ default: /* parent */
+ exit(0);
+ }
+ }
+#ifdef SIMDAEMON
+ daemonized = 1;
+ freopen("/dev/null", "w", stdout); /* redirect std output */
+ freopen("/dev/null", "r", stdin);
+ freopen("/dev/null", "w", stderr);
+#endif
+
+ /* Check whether LOCKDIR exists (/var/run is on a tmpfs in Ubuntu) */
+ if(access(LOCKDIR,F_OK) != 0) {
+ if(mkdir(LOCKDIR, 0700) == -1) {
+ fprintf(stderr, "Cannot create %s: %s", LOCKDIR, strerror(errno));
+ exit(1);
+ }
+ if(chown(LOCKDIR, 0, 0) == -1) {
+ fprintf(stderr, "Cannot change owner of %s: %s", LOCKDIR, strerror(errno));
+ exit(1);
+ }
+ }
+
+ initscr();
+
+ if ((LINES < 24) || (COLS < 80)) {
+ endwin();
+ fprintf(stderr,
+ "\nThis program requires a screen size of at least 80 columns by 24 lines\n");
+ fprintf(stderr, "Please resize your window\n\n");
+ exit(1);
+ }
+
+ mark_first_instance();
+
+ signal(SIGTERM, (void *) term_signal_handler);
+ signal(SIGHUP, (void *) term_signal_handler);
+ signal(SIGSEGV, (void *) segvhandler);
+ signal(SIGTSTP, SIG_IGN);
+ signal(SIGINT, SIG_IGN);
+ signal(SIGUSR1, SIG_IGN);
+
+ start_color();
+ standardcolors(options.color);
+ noecho();
+ nonl();
+ cbreak();
+
+#ifndef DEBUG
+ curs_set(0);
+#endif
+
+ /*
+ * Set logfilename variable to NULL if -L was specified without an
+ * appropriate facility on the command line.
+ */
+
+ if (command == 0)
+ strcpy(current_logfile, "");
+
+ /*
+ * If by this time the logfile is still acceptable, obtain the
+ * logspan from the command line if so specified.
+ */
+
+ if (current_logfile[0] != '\0') {
+ options.logging = 1;
+ if (current_log_interval != 0) {
+ options.logspan = current_log_interval;
+ }
+ }
+
+ program_interface(&options, command, keyparm, facilitytime);
+
+ endwin();
+
+ if (is_first_instance)
+ unlink(IPTIDFILE);
+
+ return (0);
+}
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/patches/series
+++ iptraf-3.0.0/patches/series
@@ -0,0 +1 @@
+fix-help-as-non-root.patch
only in patch2:
unchanged:
--- iptraf-3.0.0.orig/patches/fix-help-as-non-root.patch
+++ iptraf-3.0.0/patches/fix-help-as-non-root.patch
@@ -0,0 +1,58 @@
+Index: iptraf-3.0.0/src/iptraf.c
+===================================================================
+--- iptraf-3.0.0.orig/src/iptraf.c 2013-05-29 11:33:11.000000000 +0200
++++ iptraf-3.0.0/src/iptraf.c 2013-05-31 10:18:56.281437921 +0200
+@@ -479,6 +479,19 @@ void mark_first_instance()
+ close(fd);
+ }
+
++void check_root()
++{
++#ifndef ALLOWUSERS
++ if (getuid() != 0) {
++ fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
++ fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
++ fprintf(stderr,
++ "This program can be run only by the system administrator\n\n");
++ exit(1);
++ }
++#endif
++}
++
+ /*
+ * Main routine
+ */
+@@ -492,15 +505,6 @@ int main(int argc, char **argv)
+ int facilitytime = 0;
+ int current_log_interval;
+
+-#ifndef ALLOWUSERS
+- if (getuid() != 0) {
+- fprintf(stderr, "\nIPTraf Version %s\n", VERSION);
+- fprintf(stderr, "Copyright (c) Gerard Paul Java 1997-2004l\n\n");
+- fprintf(stderr,
+- "This program can be run only by the system administrator\n\n");
+- exit(1);
+- }
+-#endif
+
+ setlocale(LC_ALL, "");
+
+@@ -521,7 +525,8 @@ int main(int argc, char **argv)
+ commandhelp();
+ exit(0);
+ } else if (opt == 'f') {
+- removetags();
++ check_root();
++ removetags();
+ remove_sockets();
+ } else if (opt == 't') {
+ facilitytime = atoi(optarg);
+@@ -573,6 +578,7 @@ int main(int argc, char **argv)
+ }
+ } while ((opt != '?') && (opt != -1));
+ }
++ check_root();
+ is_first_instance = first_instance();
+
+ if ((getenv("TERM") == NULL) && (!daemonized)) {
--- End Message ---