ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/conf_resv.c
Revision: 2174
Committed: Mon Jun 3 19:45:38 2013 UTC (12 years, 2 months ago) by michael
Content type: text/x-csrc
Original Path: ircd-hybrid/trunk/src/resv.c
File size: 4658 byte(s)
Log Message:
- Remove unused temporary_resv list. Move channel_resv_list to conf.c 

File Contents

# User Rev Content
1 adx 30 /*
2     * ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
3     * resv.c: Functions to reserve(jupe) a nick/channel.
4     *
5     * Copyright (C) 2001-2002 Hybrid Development Team
6     *
7     * This program is free software; you can redistribute it and/or modify
8     * it under the terms of the GNU General Public License as published by
9     * the Free Software Foundation; either version 2 of the License, or
10     * (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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20     * USA
21     *
22 knight 31 * $Id$
23 adx 30 */
24    
25     #include "stdinc.h"
26 michael 1011 #include "list.h"
27 adx 30 #include "ircd.h"
28     #include "send.h"
29     #include "client.h"
30     #include "memory.h"
31     #include "numeric.h"
32     #include "resv.h"
33     #include "hash.h"
34     #include "irc_string.h"
35     #include "ircd_defs.h"
36 michael 1646 #include "s_misc.h"
37 michael 1309 #include "conf.h"
38 michael 1622 #include "conf_db.h"
39 michael 1858 #include "channel.h"
40     #include "hostmask.h"
41 adx 30
42    
43 michael 1858 /* create_resv()
44 adx 30 *
45 michael 1858 * inputs - name of nick to create resv for
46 adx 30 * - reason for resv
47 michael 1858 * - 1 if from ircd.conf, 0 if from elsewhere
48     * output - pointer to struct ResvNick
49 adx 30 * side effects -
50     */
51 michael 1632 struct MaskItem *
52 michael 1858 create_resv(const char *name, const char *reason, const dlink_list *list)
53 adx 30 {
54 michael 1860 dlink_node *ptr = NULL;
55 michael 1632 struct MaskItem *conf = NULL;
56 michael 1858 enum maskitem_type type;
57 adx 30
58     if (name == NULL || reason == NULL)
59     return NULL;
60    
61 michael 1858 if (IsChanPrefix(*name))
62     type = CONF_CRESV;
63     else
64     type = CONF_NRESV;
65    
66     if (find_exact_name_conf(type, NULL, name, NULL, NULL))
67 adx 30 return NULL;
68    
69 michael 1858 conf = conf_make(type);
70 michael 1646 conf->name = xstrdup(name);
71     conf->reason = xstrndup(reason, IRCD_MIN(strlen(reason), REASONLEN));
72 adx 30
73 michael 1858 if (list)
74     {
75 michael 1860 DLINK_FOREACH(ptr, list->head)
76 michael 1858 {
77 michael 1860 char nick[NICKLEN + 1];
78     char user[USERLEN + 1];
79     char host[HOSTLEN + 1];
80     struct split_nuh_item nuh;
81     struct exempt *exptr = NULL;
82     char *s = ptr->data;
83 michael 1858
84 michael 1860 if (strlen(s) == 2 && IsAlpha(*(s + 1) && IsAlpha(*(s + 2))))
85 michael 1858 {
86 michael 1872 #ifdef HAVE_LIBGEOIP
87 michael 1860 exptr = MyMalloc(sizeof(*exptr));
88     exptr->name = xstrdup(s);
89     exptr->coid = GeoIP_id_by_code(s);
90     dlinkAdd(exptr, &exptr->node, &conf->exempt_list);
91 michael 1872 #endif
92 michael 1860 }
93     else
94     {
95     nuh.nuhmask = s;
96 michael 1858 nuh.nickptr = nick;
97     nuh.userptr = user;
98     nuh.hostptr = host;
99    
100 michael 1859 nuh.nicksize = sizeof(nick);
101 michael 1858 nuh.usersize = sizeof(user);
102     nuh.hostsize = sizeof(host);
103    
104     split_nuh(&nuh);
105    
106     exptr = MyMalloc(sizeof(*exptr));
107 michael 1860 exptr->name = xstrdup(nick);
108 michael 1858 exptr->user = xstrdup(user);
109     exptr->host = xstrdup(host);
110     exptr->type = parse_netmask(host, &exptr->addr, &exptr->bits);
111     dlinkAdd(exptr, &exptr->node, &conf->exempt_list);
112     }
113     }
114     }
115    
116 adx 30 return conf;
117     }
118    
119 michael 1858 int
120     resv_find_exempt(const struct Client *who, const struct MaskItem *conf)
121 adx 30 {
122 michael 1858 const dlink_node *ptr = NULL;
123 adx 30
124 michael 1858 DLINK_FOREACH(ptr, conf->exempt_list.head)
125     {
126     const struct exempt *exptr = ptr->data;
127 adx 30
128 michael 1858 if (exptr->coid)
129     {
130     if (exptr->coid == who->localClient->country_id)
131     return 1;
132     }
133     else if (!match(exptr->name, who->name) && !match(exptr->user, who->username))
134     {
135     switch (exptr->type)
136     {
137     case HM_HOST:
138     if (!match(exptr->host, who->host) || !match(exptr->host, who->sockhost))
139     return 1;
140     break;
141     case HM_IPV4:
142     if (who->localClient->aftype == AF_INET)
143     if (match_ipv4(&who->localClient->ip, &exptr->addr, exptr->bits))
144     return 1;
145     break;
146     #ifdef IPV6
147     case HM_IPV6:
148     if (who->localClient->aftype == AF_INET6)
149     if (match_ipv6(&who->localClient->ip, &exptr->addr, exptr->bits))
150     return 1;
151     break;
152     #endif
153     default:
154     assert(0);
155     }
156     }
157     }
158 adx 30
159 michael 1858 return 0;
160 adx 30 }
161    
162     /* match_find_resv()
163     *
164     * inputs - pointer to name
165     * output - pointer to a struct ResvChannel
166     * side effects - Finds a reserved channel whose name matches 'name',
167     * if can't find one returns NULL.
168     */
169 michael 1632 struct MaskItem *
170 adx 30 match_find_resv(const char *name)
171     {
172     dlink_node *ptr = NULL;
173    
174     if (EmptyString(name))
175     return NULL;
176    
177 michael 2174 DLINK_FOREACH(ptr, cresv_items.head)
178 adx 30 {
179 michael 1632 struct MaskItem *conf = ptr->data;
180 adx 30
181 michael 1825 if (!match(conf->name, name))
182 michael 1632 return conf;
183 adx 30 }
184    
185     return NULL;
186     }

Properties

Name Value
svn:eol-style native
svn:keywords Id Revision