WIP: pth transistion, 3rd step, commands basically ported
[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 (void)
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   psplay_init_root (&global_base.files, rxpd_file_cmp, (psplay_delete_t)rxpd_file_delete);
40   llist_init (&global_base.sockets);
41
42   rxpd_log (&global_base, LOG_DEBUG, PACKAGE_NAME" initialized\n");
43   return &global_base;
44 }
45
46
47 void
48 rxpd_destroy (void)
49 {
50   if (global_base.basedir)
51     {
52       free (global_base.basedir);
53       psplay_destroy_root (&global_base.files);
54       LLIST_WHILE_HEAD (&global_base.sockets, n)
55         {
56           struct rxpd_socket* socket = (struct rxpd_socket*)n;
57           rxpd_socket_delete (socket);
58         }
59     }
60 }
61
62 void
63 rxpd_log (struct rxpd_base* self, int level, const char* fmt, ...)
64 {
65   va_list ap;
66   va_start (ap, fmt);
67   if (level <= (self?self->verbosity:LOG_DEBUG))
68     {
69       if (!self || self->daemonize)
70         vsyslog (level, fmt, ap);
71       vfprintf (stderr, fmt, ap);
72     }
73   va_end (ap);
74 }
75
76 void
77 rxpd_die (const char* fmt, ...)
78 {
79   va_list ap;
80   va_start(ap, fmt);
81   vsyslog (LOG_EMERG, fmt, ap);
82   vfprintf (stderr, fmt, ap);
83   va_end (ap);
84   abort ();
85 }
86
87 void*
88 rxpd_malloc (size_t size)
89 {
90   void* r;
91   r = malloc (size);
92   if (!r)
93     rxpd_die ("Out of Memeory\n");
94   return r;
95 }
96
97 char*
98 rxpd_strdup (const char* str)
99 {
100   char* r;
101   r = strdup (str);
102   if (!r)
103     rxpd_die ("Out of Memeory\n");
104   return r;
105 }
106