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

Comparing:
ircd-hybrid-8/modules/m_svsmode.c (file contents), Revision 1221 by michael, Sun Sep 18 10:44:31 2011 UTC vs.
ircd-hybrid/trunk/modules/m_svsmode.c (file contents), Revision 1809 by michael, Wed Apr 10 16:51:34 2013 UTC

# Line 26 | Line 26
26   */
27  
28   #include "stdinc.h"
29 – #include "handlers.h"
29   #include "client.h"
30   #include "ircd.h"
31   #include "numeric.h"
33 – #include "s_conf.h"
32   #include "s_serv.h"
33   #include "send.h"
34   #include "channel_mode.h"
37 – #include "msg.h"
35   #include "parse.h"
36   #include "modules.h"
37   #include "irc_string.h"
38   #include "s_user.h"
39 <
40 < static void ms_svsmode(struct Client *, struct Client *, int, char *[]);
44 <
45 < struct Message svsmode_msgtab = {
46 <  "SVSMODE", 0, 0, 3, MAXPARA, MFLG_SLOW | MFLG_UNREG, 0,
47 <  {m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore, m_ignore}
48 < };
49 <
50 < const char *_version = "$Revision$";
51 <
52 < void
53 < _modinit(void)
54 < {
55 <  mod_add_cmd(&svsmode_msgtab);
56 < }
57 <
58 < void
59 < _moddeinit(void)
60 < {
61 <  mod_del_cmd(&svsmode_msgtab);
62 < }
39 > #include "conf.h"
40 > #include "hook.h"
41  
42  
43   /*! \brief SVSMODE command handler (called by services)
# Line 74 | Line 52 | _moddeinit(void)
52   * \note Valid arguments for this command are:
53   *      - parv[0] = sender prefix
54   *      - parv[1] = nickname
55 < *      - parv[2] = TS (or mode, depending on svs version)
56 < *      - parv[3] = mode (or services id if old svs version)
57 < *      - parv[4] = optional arguement (services id)
55 > *      - parv[2] = TS
56 > *      - parv[3] = mode
57 > *      - parv[4] = optional argument (services id)
58   */
59   static void
60   ms_svsmode(struct Client *client_p, struct Client *source_p,
61             int parc, char *parv[])
62   {
63    struct Client *target_p = NULL;
64 +  const char *m = NULL, *extarg = NULL;
65    int what = MODE_ADD;
66 <  unsigned int flag = 0, setflags = 0;
88 <  char *m = NULL, *modes = NULL, *extarg = NULL;
66 >  unsigned int flag = 0, setmodes = 0;
67    time_t ts = 0;
68  
69    if (!HasFlag(source_p, FLAGS_SERVICE))
70      return;
71  
94 –  if ((parc >= 4) && ((*parv[3] == '+') || (*parv[3] == '-')))
95 –  {
96 –    ts     = atol(parv[2]);
97 –    modes  = parv[3];
98 –    extarg = (parc > 4) ? parv[4] : NULL;
99 –  }
100 –  else
101 –  {
102 –    modes  = parv[2];
103 –    extarg = (parc > 3) ? parv[3] : NULL;
104 –  }
105 –
72    if ((target_p = find_person(client_p, parv[1])) == NULL)
73      return;
74  
75 <  if (ts && (ts != target_p->tsinfo))
75 >  if ((ts = atol(parv[2])) && (ts != target_p->tsinfo))
76      return;
77  
78 <  setflags = target_p->umodes;
78 >  if (parc > 4 && !EmptyString(parv[4]))
79 >    extarg = parv[4];
80 >
81 >  setmodes = target_p->umodes;
82  
83 <  for (m = modes; *m; ++m)
83 >  for (m = parv[3]; *m; ++m)
84    {
85      switch (*m)
86      {
# Line 123 | Line 92 | ms_svsmode(struct Client *client_p, stru
92          break;
93  
94        case 'd':
95 <        if (extarg && IsDigit(*extarg))
96 <          target_p->servicestamp = strtoul(extarg, NULL, 0);
95 >        if (extarg)
96 >          strlcpy(target_p->svid, extarg, sizeof(target_p->svid));
97          break;
98  
99        case 'o':
# Line 137 | Line 106 | ms_svsmode(struct Client *client_p, stru
106            {
107              dlink_node *dm = NULL;
108  
109 <            detach_conf(target_p, OPER_TYPE);
109 >            detach_conf(target_p, CONF_OPER);
110              ClrOFlag(target_p);
111              DelUMode(target_p, ConfigFileEntry.oper_only_umodes);
112  
# Line 177 | Line 146 | ms_svsmode(struct Client *client_p, stru
146  
147    if (extarg)
148    {
149 <    sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
149 >    sendto_server(client_p, CAP_TS6, NOCAPS,
150                    ":%s SVSMODE %s %lu %s %s", ID(source_p),
151 <                  ID(target_p), (unsigned long)target_p->tsinfo, modes, extarg);
152 <    sendto_server(client_p, NULL, NOCAPS, CAP_TS6,
151 >                  ID(target_p), (unsigned long)target_p->tsinfo, parv[3], extarg);
152 >    sendto_server(client_p, NOCAPS, CAP_TS6,
153                    ":%s SVSMODE %s %lu %s %s", source_p->name,
154 <                  target_p->name, (unsigned long)target_p->tsinfo, modes, extarg);
154 >                  target_p->name, (unsigned long)target_p->tsinfo, parv[3], extarg);
155    }
156    else
157    {
158 <    sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
158 >    sendto_server(client_p, CAP_TS6, NOCAPS,
159                    ":%s SVSMODE %s %lu %s", ID(source_p),
160 <                  ID(target_p), (unsigned long)target_p->tsinfo, modes);
161 <    sendto_server(client_p, NULL, NOCAPS, CAP_TS6,
160 >                  ID(target_p), (unsigned long)target_p->tsinfo, parv[3]);
161 >    sendto_server(client_p, NOCAPS, CAP_TS6,
162                    ":%s SVSMODE %s %lu %s", source_p->name,
163 <                  target_p->name, (unsigned long)target_p->tsinfo, modes);
163 >                  target_p->name, (unsigned long)target_p->tsinfo, parv[3]);
164    }
165  
166 <  if (MyConnect(target_p) && (setflags != target_p->umodes))
166 >  if (MyConnect(target_p) && (setmodes != target_p->umodes))
167    {
168      char modebuf[IRCD_BUFSIZE];
169  
170 <    send_umode(target_p, target_p, setflags, 0xffffffff, modebuf);
170 >    send_umode(target_p, target_p, setmodes, 0xffffffff, modebuf);
171    }
172   }
173 +
174 + static struct Message svsmode_msgtab = {
175 +  "SVSMODE", 0, 0, 4, MAXPARA, MFLG_SLOW, 0,
176 +  {m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore, m_ignore}
177 + };
178 +
179 + static void
180 + module_init(void)
181 + {
182 +  mod_add_cmd(&svsmode_msgtab);
183 + }
184 +
185 + static void
186 + module_exit(void)
187 + {
188 +  mod_del_cmd(&svsmode_msgtab);
189 + }
190 +
191 + struct module module_entry = {
192 +  .node    = { NULL, NULL, NULL },
193 +  .name    = NULL,
194 +  .version = "$Revision$",
195 +  .handle  = NULL,
196 +  .modinit = module_init,
197 +  .modexit = module_exit,
198 +  .flags   = 0
199 + };

Comparing:
ircd-hybrid-8/modules/m_svsmode.c (property svn:eol-style), Revision 1221 by michael, Sun Sep 18 10:44:31 2011 UTC vs.
ircd-hybrid/trunk/modules/m_svsmode.c (property svn:eol-style), Revision 1809 by michael, Wed Apr 10 16:51:34 2013 UTC

# Line 0 | Line 1
1 + native

Diff Legend

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