ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/modules/m_webirc.c
Revision: 5864
Committed: Tue Apr 28 12:23:30 2015 UTC (10 years, 4 months ago) by michael
Content type: text/x-csrc
File size: 4354 byte(s)
Log Message:
- Removed useless zero initializers from the module_entry as suggested by Adam

File Contents

# User Rev Content
1 michael 1262 /*
2 michael 2820 * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd)
3 michael 1262 *
4 michael 5347 * Copyright (c) 2012-2015 ircd-hybrid development team
5 michael 1262 *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18 michael 4565 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19 michael 1262 * USA
20     */
21    
22 michael 2820 /*! \file m_webirc.c
23     * \brief Includes required functions for processing the WEBIRC command.
24     * \version $Id$
25     */
26    
27 michael 1262 #include "stdinc.h"
28     #include "list.h"
29     #include "client.h"
30     #include "ircd.h"
31     #include "send.h"
32     #include "irc_string.h"
33     #include "parse.h"
34     #include "modules.h"
35 michael 1309 #include "conf.h"
36 michael 1262 #include "hostmask.h"
37 michael 3347 #include "user.h"
38 michael 1262
39    
40 michael 3336 /*! \brief WEBIRC command handler
41     *
42     * \param source_p Pointer to allocated Client struct from which the message
43     * originally comes from. This can be a local or remote client.
44     * \param parc Integer holding the number of supplied arguments.
45     * \param parv Argument vector where parv[0] .. parv[parc-1] are non-NULL
46     * pointers.
47     * \note Valid arguments for this command are:
48     * - parv[0] = command
49     * - parv[1] = password
50     * - parv[2] = fake username (we ignore this)
51     * - parv[3] = fake hostname
52     * - parv[4] = fake ip
53 michael 1262 */
54 michael 2820 static int
55 michael 3156 mr_webirc(struct Client *source_p, int parc, char *parv[])
56 michael 1262 {
57 michael 1632 struct MaskItem *conf = NULL;
58 michael 1262 struct addrinfo hints, *res;
59    
60 michael 3156 assert(MyConnect(source_p));
61 michael 1262
62 michael 2700 if (!valid_hostname(parv[3]))
63 michael 1262 {
64 michael 4526 sendto_one_notice(source_p, &me, ":WEBIRC: Invalid hostname");
65 michael 2820 return 0;
66 michael 1262 }
67    
68 michael 1632 conf = find_address_conf(source_p->host,
69     IsGotId(source_p) ? source_p->username : "webirc",
70 michael 4588 &source_p->connection->ip,
71     source_p->connection->aftype, parv[1]);
72 michael 1632 if (conf == NULL || !IsConfClient(conf))
73 michael 2820 return 0;
74 michael 1262
75 michael 1715 if (!IsConfWebIRC(conf))
76 michael 1262 {
77 michael 4526 sendto_one_notice(source_p, &me, ":Not a WEBIRC auth {} block");
78 michael 2820 return 0;
79 michael 1262 }
80    
81 michael 1632 if (EmptyString(conf->passwd))
82 michael 1262 {
83 michael 4526 sendto_one_notice(source_p, &me, ":WEBIRC auth {} blocks must have a password");
84 michael 2820 return 0;
85 michael 1262 }
86    
87 michael 1632 if (!match_conf_password(parv[1], conf))
88 michael 1262 {
89 michael 4526 sendto_one_notice(source_p, &me, ":WEBIRC password incorrect");
90 michael 2820 return 0;
91 michael 1262 }
92    
93     memset(&hints, 0, sizeof(hints));
94    
95     hints.ai_family = AF_UNSPEC;
96     hints.ai_socktype = SOCK_STREAM;
97     hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
98    
99     if (getaddrinfo(parv[4], NULL, &hints, &res))
100     {
101 michael 4526 sendto_one_notice(source_p, &me, ":Invalid WEBIRC IP %s", parv[4]);
102 michael 2820 return 0;
103 michael 1262 }
104    
105 michael 3246 assert(res);
106 michael 1262
107 michael 4588 memcpy(&source_p->connection->ip, res->ai_addr, res->ai_addrlen);
108     source_p->connection->ip.ss_len = res->ai_addrlen;
109     source_p->connection->ip.ss.ss_family = res->ai_family;
110     source_p->connection->aftype = res->ai_family;
111 michael 1262 freeaddrinfo(res);
112    
113     strlcpy(source_p->sockhost, parv[4], sizeof(source_p->sockhost));
114 michael 2700 strlcpy(source_p->host, parv[3], sizeof(source_p->host));
115 michael 1262
116 michael 5805 /* Check dlines now, k-lines will be checked on registration */
117 michael 4588 if ((conf = find_dline_conf(&source_p->connection->ip,
118     source_p->connection->aftype)))
119 michael 1262 {
120 michael 1636 if (!(conf->type == CONF_EXEMPT))
121 michael 1262 {
122 michael 3171 exit_client(source_p, "D-lined");
123 michael 2820 return 0;
124 michael 1262 }
125     }
126    
127 michael 2511 AddUMode(source_p, UMODE_WEBIRC);
128 michael 4526 sendto_one_notice(source_p, &me, ":WEBIRC host/IP set to %s %s",
129 michael 3110 parv[3], parv[4]);
130 michael 2820 return 0;
131 michael 1262 }
132    
133 michael 2820 static struct Message webirc_msgtab =
134     {
135 michael 4545 "WEBIRC", NULL, 0, 0, 5, MAXPARA, MFLG_SLOW, 0,
136 michael 2712 { mr_webirc, m_registered, m_ignore, m_ignore, m_registered, m_ignore }
137 michael 1262 };
138    
139     static void
140     module_init(void)
141     {
142     mod_add_cmd(&webirc_msgtab);
143     }
144    
145     static void
146     module_exit(void)
147     {
148     mod_del_cmd(&webirc_msgtab);
149     }
150    
151 michael 2820 struct module module_entry =
152     {
153 michael 1262 .version = "$Revision$",
154     .modinit = module_init,
155     .modexit = module_exit,
156     };

Properties

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