ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/modules/m_accept.c
(Generate patch)

Comparing:
ircd-hybrid-7.2/modules/m_accept.c (file contents), Revision 1007 by michael, Tue Sep 1 15:25:26 2009 UTC vs.
ircd-hybrid/branches/8.2.x/modules/m_accept.c (file contents), Revision 8280 by michael, Tue Feb 20 19:30:33 2018 UTC

# Line 1 | Line 1
1   /*
2 < *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
2 > *  ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd)
3   *
4 < *  Copyright (C) 2002 by the past and present ircd coders, and others.
4 > *  Copyright (c) 2000-2018 ircd-hybrid development team
5   *
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
# Line 15 | Line 15
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 < *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
18 > *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19   *  USA
20   */
21  
# Line 25 | Line 25
25   */
26  
27   #include "stdinc.h"
28 #include "handlers.h"
28   #include "client.h"
29   #include "irc_string.h"
31 #include "sprintf_irc.h"
30   #include "ircd.h"
31   #include "list.h"
32   #include "numeric.h"
33 < #include "s_conf.h"
36 < #include "s_serv.h"
33 > #include "conf.h"
34   #include "send.h"
38 #include "msg.h"
35   #include "parse.h"
36   #include "modules.h"
37 <
42 < static void m_accept(struct Client *, struct Client *, int, char *[]);
43 <
44 < struct Message accept_msgtab = {
45 <  "ACCEPT", 0, 0, 0, 0, MFLG_SLOW, 0,
46 <  { m_unregistered, m_accept, m_ignore, m_ignore, m_accept, m_ignore }
47 < };
48 <
49 < #ifndef STATIC_MODULES
50 < void
51 < _modinit(void)
52 < {
53 <  mod_add_cmd(&accept_msgtab);
54 < }
55 <
56 < void
57 < _moddeinit(void)
58 < {
59 <  mod_del_cmd(&accept_msgtab);
60 < }
61 <
62 < const char *_version = "$Revision$";
63 < #endif
37 > #include "memory.h"
38  
39  
40   /*! \brief Creates and sends a list of nick!user\@host masks a Client
# Line 71 | Line 45 | const char *_version = "$Revision$";
45   static void
46   list_accepts(struct Client *source_p)
47   {
48 <  int len = 0;
75 <  char nicks[IRCD_BUFSIZE] = { '\0' };
48 >  char nicks[IRCD_BUFSIZE] = "";
49    char *t = nicks;
50 <  const dlink_node *ptr = NULL;
50 >  dlink_node *node;
51  
52 <  len = strlen(me.name) + strlen(source_p->name) + 12;
52 >  /* :me.name 281 source_p->name :n1!u1@h1 n2!u2@h2 ...\r\n */
53 >  /* 1       23456              78                     9 10 */
54 >  int len = strlen(me.name) + strlen(source_p->name) + 10;
55  
56 <  DLINK_FOREACH(ptr, source_p->localClient->acceptlist.head)
56 >  DLINK_FOREACH(node, source_p->connection->acceptlist.head)
57    {
58 <    const struct split_nuh_item *accept_p = ptr->data;
58 >    const struct split_nuh_item *accept_p = node->data;
59      size_t masklen = strlen(accept_p->nickptr) +
60                       strlen(accept_p->userptr) +
61 <                     strlen(accept_p->hostptr) + 2 /* !@ */ ;
61 >                     strlen(accept_p->hostptr) + 3;  /* +3 for ! + @ + space */
62  
63 <    if ((t - nicks) + masklen + len  > IRCD_BUFSIZE)
63 >    if ((t - nicks) + masklen + len > IRCD_BUFSIZE)
64      {
65        *(t - 1) = '\0';
66 <      sendto_one(source_p, form_str(RPL_ACCEPTLIST),
92 <                 me.name, source_p->name, nicks);
66 >      sendto_one_numeric(source_p, &me, RPL_ACCEPTLIST, nicks);
67        t = nicks;
68      }
69  
70 <    t += ircsprintf(t, "%s!%s@%s ",
71 <                    accept_p->nickptr,
72 <                    accept_p->userptr, accept_p->hostptr);
70 >    t += sprintf(t, "%s!%s@%s ",
71 >                 accept_p->nickptr,
72 >                 accept_p->userptr, accept_p->hostptr);
73    }
74  
75 <  if (nicks[0] != '\0')
75 >  if (nicks[0])
76    {
77      *(t - 1) = '\0';
78 <    sendto_one(source_p, form_str(RPL_ACCEPTLIST),
105 <               me.name, source_p->name, nicks);
78 >    sendto_one_numeric(source_p, &me, RPL_ACCEPTLIST, nicks);
79    }
80  
81 <  sendto_one(source_p, form_str(RPL_ENDOFACCEPT),
109 <             me.name, source_p->name);
81 >  sendto_one_numeric(source_p, &me, RPL_ENDOFACCEPT);
82   }
83  
84   /*! \brief Allocates and adds a split_nuh_item holding a nick!user\@host
# Line 118 | Line 90 | list_accepts(struct Client *source_p)
90   static void
91   add_accept(const struct split_nuh_item *nuh, struct Client *source_p)
92   {
93 <  struct split_nuh_item *accept_p = MyMalloc(sizeof(*accept_p));
93 >  struct split_nuh_item *const accept_p = xcalloc(sizeof(*accept_p));
94  
95 <  DupString(accept_p->nickptr, nuh->nickptr);
96 <  DupString(accept_p->userptr, nuh->userptr);
97 <  DupString(accept_p->hostptr, nuh->hostptr);
95 >  accept_p->nickptr = xstrdup(nuh->nickptr);
96 >  accept_p->userptr = xstrdup(nuh->userptr);
97 >  accept_p->hostptr = xstrdup(nuh->hostptr);
98  
99 <  dlinkAdd(accept_p, &accept_p->node, &source_p->localClient->acceptlist);
99 >  dlinkAdd(accept_p, &accept_p->node, &source_p->connection->acceptlist);
100  
101    list_accepts(source_p);
102   }
103  
104   /*! \brief ACCEPT command handler
105   *
134 * \param client_p Pointer to allocated Client struct with physical connection
135 *                 to this server, i.e. with an open socket connected.
106   * \param source_p Pointer to allocated Client struct from which the message
107   *                 originally comes from.  This can be a local or remote client.
108   * \param parc     Integer holding the number of supplied arguments.
109   * \param parv     Argument vector where parv[0] .. parv[parc-1] are non-NULL
110   *                 pointers.
111   * \note Valid arguments for this command are:
112 < *      - parv[0] = sender prefix
113 < *      - parv[1] = list of masks to be accepted or removed (optional)
112 > *      - parv[0] = command
113 > *      - parv[1] = comma-separated list of masks to be accepted or removed
114   */
115 < static void
116 < m_accept(struct Client *client_p, struct Client *source_p,
147 <         int parc, char *parv[])
115 > static int
116 > m_accept(struct Client *source_p, int parc, char *parv[])
117   {
149  char *mask = NULL;
150  char *p = NULL;
151  char nick[NICKLEN + 1];
152  char user[USERLEN + 1];
153  char host[HOSTLEN + 1];
118    struct split_nuh_item nuh;
119    struct split_nuh_item *accept_p = NULL;
120 +  char nick[NICKLEN + 1] = "";
121 +  char user[USERLEN + 1] = "";
122 +  char host[HOSTLEN + 1] = "";
123 +  char *p = NULL;
124 +  char *mask = collapse(parv[1]);
125  
126 <  if (EmptyString(parv[1]) || !irccmp(parv[1], "*"))
126 >  if (EmptyString(mask) || !strcmp(mask, "*"))
127    {
128      list_accepts(source_p);
129 <    return;
129 >    return 0;
130    }
131  
132 <  for (mask = strtoken(&p, parv[1], ","); mask != NULL;
133 <       mask = strtoken(&p,    NULL, ","))
132 >  for (mask = strtok_r(mask, ",", &p); mask;
133 >       mask = strtok_r(NULL, ",", &p))
134    {
135 <    if (*mask == '-' && *++mask != '\0')
135 >    if (*mask == '-' && *++mask)
136      {
137        nuh.nuhmask  = mask;
138        nuh.nickptr  = nick;
# Line 176 | Line 145 | m_accept(struct Client *client_p, struct
145  
146        split_nuh(&nuh);
147  
148 <      if ((accept_p = find_accept(nick, user, host, source_p, 0)) == NULL)
148 >      if ((accept_p = find_accept(nick, user, host, source_p, irccmp)) == NULL)
149        {
150 <        sendto_one(source_p, form_str(ERR_ACCEPTNOT),
182 <                   me.name, source_p->name, nick, user, host);
150 >        sendto_one_numeric(source_p, &me, ERR_ACCEPTNOT, nick, user, host);
151          continue;
152        }
153  
154        del_accept(accept_p, source_p);
155      }
156 <    else if (*mask != '\0')
156 >    else if (*mask)
157      {
158 <      if (dlink_list_length(&source_p->localClient->acceptlist) >=
159 <          ConfigFileEntry.max_accept)
158 >      if (dlink_list_length(&source_p->connection->acceptlist) >=
159 >          ConfigGeneral.max_accept)
160        {
161 <        sendto_one(source_p, form_str(ERR_ACCEPTFULL),
162 <                   me.name, source_p->name);
195 <        return;
161 >        sendto_one_numeric(source_p, &me, ERR_ACCEPTFULL);
162 >        return 0;
163        }
164  
165        nuh.nuhmask  = mask;
# Line 206 | Line 173 | m_accept(struct Client *client_p, struct
173  
174        split_nuh(&nuh);
175  
176 <      if ((accept_p = find_accept(nick, user, host, source_p, 0)) != NULL)
176 >      if ((accept_p = find_accept(nick, user, host, source_p, irccmp)))
177        {
178 <        sendto_one(source_p, form_str(ERR_ACCEPTEXIST),
212 <                   me.name, source_p->name, nick, user, host);
178 >        sendto_one_numeric(source_p, &me, ERR_ACCEPTEXIST, nick, user, host);
179          continue;
180        }
181  
182        add_accept(&nuh, source_p);
183      }
184    }
185 +
186 +  return 0;
187   }
188 +
189 + static struct Message accept_msgtab =
190 + {
191 +  .cmd = "ACCEPT",
192 +  .args_max = MAXPARA,
193 +  .handlers[UNREGISTERED_HANDLER] = m_unregistered,
194 +  .handlers[CLIENT_HANDLER] = m_accept,
195 +  .handlers[SERVER_HANDLER] = m_ignore,
196 +  .handlers[ENCAP_HANDLER] = m_ignore,
197 +  .handlers[OPER_HANDLER] = m_accept
198 + };
199 +
200 + static void
201 + module_init(void)
202 + {
203 +  mod_add_cmd(&accept_msgtab);
204 + }
205 +
206 + static void
207 + module_exit(void)
208 + {
209 +  mod_del_cmd(&accept_msgtab);
210 + }
211 +
212 + struct module module_entry =
213 + {
214 +  .version = "$Revision$",
215 +  .modinit = module_init,
216 +  .modexit = module_exit,
217 + };

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)