aboutsummaryrefslogtreecommitdiffstats
path: root/src/netreport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/netreport.c')
-rw-r--r--src/netreport.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/netreport.c b/src/netreport.c
new file mode 100644
index 00000000..56088ec1
--- /dev/null
+++ b/src/netreport.c
@@ -0,0 +1,45 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+/* this will be running setgid root, so be careful! */
+
+void usage(void) {
+ fprintf(stderr, "usage: netreport [-r]\n");
+ exit(1);
+}
+
+#define ADD 1
+#define DEL 0
+int main(int argc, char ** argv) {
+ int action = ADD;
+ /* more than long enough for "/var/run/netreport/<pid>\0" */
+ char netreport_name[64];
+ int netreport_file;
+
+ if (argc > 2) usage();
+
+ if ((argc > 1) && !strcmp(argv[1], "-r")) {
+ action = DEL;
+ }
+
+ sprintf(netreport_name, "/var/run/netreport/%d", getppid());
+ if (action == ADD) {
+ netreport_file = creat(netreport_name, 0);
+ if (netreport_file < 0) {
+ if (errno != EEXIST) {
+ perror("Could not create netreport file");
+ exit (1);
+ }
+ } else {
+ close(netreport_file);
+ }
+ } else {
+ /* ignore errors; not much we can do, won't hurt anything */
+ unlink(netreport_name);
+ }
+
+ exit(0);
+}