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/trunk/modules/m_accept.c (file contents), Revision 1832 by michael, Fri Apr 19 19:16:09 2013 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 31 | Line 31
31   #include "list.h"
32   #include "numeric.h"
33   #include "conf.h"
34 #include "s_serv.h"
34   #include "send.h"
35   #include "parse.h"
36   #include "modules.h"
# Line 46 | Line 45
45   static void
46   list_accepts(struct Client *source_p)
47   {
48 <  int len = 0;
50 <  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, RPL_ACCEPTLIST,
67 <                 me.name, source_p->name, nicks);
66 >      sendto_one_numeric(source_p, &me, RPL_ACCEPTLIST, nicks);
67        t = nicks;
68      }
69  
# Line 73 | Line 72 | list_accepts(struct Client *source_p)
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, RPL_ACCEPTLIST,
80 <               me.name, source_p->name, nicks);
78 >    sendto_one_numeric(source_p, &me, RPL_ACCEPTLIST, nicks);
79    }
80  
81 <  sendto_one(source_p, RPL_ENDOFACCEPT,
84 <             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 93 | 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    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   *
109 * \param client_p Pointer to allocated Client struct with physical connection
110 *                 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,
122 <         int parc, char *parv[])
115 > static int
116 > m_accept(struct Client *source_p, int parc, char *parv[])
117   {
124  char *mask = NULL;
125  char *p = NULL;
126  char nick[NICKLEN + 1];
127  char user[USERLEN + 1];
128  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 151 | 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, ERR_ACCEPTNOT,
157 <                   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, ERR_ACCEPTFULL,
162 <                   me.name, source_p->name);
170 <        return;
161 >        sendto_one_numeric(source_p, &me, ERR_ACCEPTFULL);
162 >        return 0;
163        }
164  
165        nuh.nuhmask  = mask;
# Line 181 | 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, ERR_ACCEPTEXIST,
187 <                   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 <  "ACCEPT", 0, 0, 0, MAXPARA, MFLG_SLOW, 0,
191 <  { m_unregistered, m_accept, m_ignore, m_ignore, m_accept, m_ignore }
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
# Line 210 | Line 209 | module_exit(void)
209    mod_del_cmd(&accept_msgtab);
210   }
211  
212 < struct module module_entry = {
213 <  .node    = { NULL, NULL, NULL },
215 <  .name    = NULL,
212 > struct module module_entry =
213 > {
214    .version = "$Revision$",
217  .handle  = NULL,
215    .modinit = module_init,
216    .modexit = module_exit,
220  .flags   = 0
217   };

Diff Legend

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