implemented atime handling, rules maintain a timestamp when they where last triggered
[rxpd] / src / rxpd_base.c
1 /*
2     rxpd_base.c - regex policy daemon
3
4   Copyright (C)
5     2007,               Christian Thaeter <ct@pipapo.org>
6
7   This program is free software; you can redistribute it and/or
8   modify it under the terms of the GNU General Public License as
9   published by the Free Software Foundation; either version 2 of the
10   License, or (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program; if not, write to the Free Software
19   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 #include "rxpd.h"
23
24 static struct rxpd_base global_base;
25
26 struct rxpd_base*
27 rxpd_init (struct event_base* eventbase)
28 {
29   if (global_base.basedir)
30     return NULL;
31
32   global_base.basedir = NULL;
33
34   global_base.verbosity = LOG_WARNING;
35   global_base.daemonize = 0;
36   global_base.regflags = 0;
37   global_base.policy = NULL;
38
39   if (!eventbase)
40     rxpd_die ("no eventbase provided");
41
42   global_base.eventbase = eventbase;
43
44   psplay_init_root (&global_base.files, rxpd_file_cmp, rxpd_file_delete);
45   llist_init (&global_base.sockets);
46
47   rxpd_log (&global_base, LOG_DEBUG, PACKAGE_NAME" initialized\n");
48   return &global_base;
49 }
50
51
52 void
53 rxpd_destroy (void)
54 {
55   if (global_base.basedir)
56     {
57       free (global_base.basedir);
58       psplay_destroy_root (&global_base.files);
59       LLIST_WHILE_HEAD (&global_base.sockets, n)
60         {
61           struct rxpd_socket* socket = (struct rxpd_socket*)n;
62           rxpd_socket_delete (socket);
63         }
64     }
65 }
66
67 void
68 rxpd_log (struct rxpd_base* self, int level, const char* fmt, ...)
69 {
70   va_list ap;
71   va_start (ap, fmt);
72   if (level <= (self?self->verbosity:LOG_DEBUG))
73     {
74       if (!self || self->daemonize)
75         vsyslog (level, fmt, ap);
76       vfprintf (stderr, fmt, ap);
77     }
78   va_end (ap);
79 }
80
81 void
82 rxpd_die (const char* fmt, ...)
83 {
84   va_list ap;
85   va_start(ap, fmt);
86   vsyslog (LOG_EMERG, fmt, ap);
87   vfprintf (stderr, fmt, ap);
88   va_end (ap);
89   abort ();
90 }
91
92 void*
93 rxpd_malloc (size_t size)
94 {
95   void* r;
96   r = malloc (size);
97   if (!r)
98     rxpd_die ("Out of Memeory\n");
99   return r;
100 }
101
102 char*
103 rxpd_strdup (const char* str)
104 {
105   char* r;
106   r = strdup (str);
107   if (!r)
108     rxpd_die ("Out of Memeory\n");
109   return r;
110 }
111