Implement server port support and update copyright year and style.
[cascardo/rnetproxy.git] / usermap.c
1 /*
2 ** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
3 ** Copyright (C) 2009 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
4 **  
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
9 **  
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ** GNU General Public License for more details.
14 **  
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 **  
19 */
20
21 #include <string.h>
22 #include <depot.h>
23 #include "usermap.h"
24
25 int
26 usermap_perm (char *user)
27 {
28   DEPOT* allow_dp = NULL;
29   DEPOT* deny_dp = NULL;
30   char* allow = NULL;
31   char* deny = NULL;
32   int allow_users = 0;
33   allow_dp = dpopen ("/var/lib/popproxy/allow.db", DP_OREADER, 0);
34   deny_dp = dpopen ("/var/lib/popproxy/deny.db", DP_OREADER, 0);
35   if (allow_dp)
36     {
37       allow = dpget (allow_dp, user, -1, 0, -1, NULL);
38       allow_users = dprnum (allow_dp);
39       dpclose (allow_dp);
40     }
41   if (deny_dp)
42     {
43       deny = dpget (deny_dp, user, -1, 0, -1, NULL);
44       dpclose (deny_dp);
45     }
46   if (allow && deny)
47     {
48       free (allow);
49       free (deny);
50       return ACCESS_DENY;
51     }
52   if (allow)
53     {
54       free (allow);
55       return ACCESS_ALLOW;
56     }
57   if (deny)
58     {
59       free (deny);
60       return ACCESS_DENY;
61     }
62   if (allow_users == 0)
63     return ACCESS_ALLOW;
64   return ACCESS_DENY;
65 }