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 1230 by michael, Thu Sep 22 19:41:19 2011 UTC vs.
ircd-hybrid/trunk/modules/m_svsmode.c (file contents), Revision 2137 by michael, Wed May 29 19:49:27 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 + #include "conf.h"
40 + #include "hook.h"
41  
42  
43   /*! \brief SVSMODE command handler (called by services)
# Line 55 | Line 54
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)
57 > *      - parv[4] = optional argument (services id)
58   */
59   static void
60   ms_svsmode(struct Client *client_p, struct Client *source_p,
# Line 63 | Line 62 | ms_svsmode(struct Client *client_p, stru
62   {
63    struct Client *target_p = NULL;
64    int what = MODE_ADD;
65 <  unsigned int flag = 0, setflags = 0;
65 >  unsigned int flag = 0, setmodes = 0;
66    char *m = NULL, *modes = NULL, *extarg = NULL;
67    time_t ts = 0;
68  
# Line 88 | Line 87 | ms_svsmode(struct Client *client_p, stru
87    if (ts && (ts != target_p->tsinfo))
88      return;
89  
90 <  setflags = target_p->umodes;
90 >  setmodes = target_p->umodes;
91  
92    for (m = modes; *m; ++m)
93    {
# Line 102 | Line 101 | ms_svsmode(struct Client *client_p, stru
101          break;
102  
103        case 'd':
104 <        if (extarg && IsDigit(*extarg))
105 <          target_p->servicestamp = strtoul(extarg, NULL, 0);
104 >        if (!EmptyString(extarg))
105 >          strlcpy(target_p->svid, extarg, sizeof(target_p->svid));
106 >        break;
107 >
108 >      case 'x':
109 >        if (!EmptyString(extarg) && valid_hostname(extarg))
110 >          user_set_hostmask(target_p, extarg, what);
111          break;
112  
113        case 'o':
# Line 116 | Line 120 | ms_svsmode(struct Client *client_p, stru
120            {
121              dlink_node *dm = NULL;
122  
123 <            detach_conf(target_p, OPER_TYPE);
123 >            detach_conf(target_p, CONF_OPER);
124              ClrOFlag(target_p);
125              DelUMode(target_p, ConfigFileEntry.oper_only_umodes);
126  
# Line 142 | Line 146 | ms_svsmode(struct Client *client_p, stru
146  
147          break;
148  
145 –      case ' ':
146 –      case '\n':
147 –      case '\r':
148 –      case '\t':
149 –        break;
149        default:
150          if ((flag = user_modes[(unsigned char)*m]))
151 <          execute_callback(umode_cb, client_p, target_p, what, flag);
151 >        {
152 >          if (what == MODE_ADD)
153 >            AddUMode(target_p, flag);
154 >          else
155 >            DelUMode(target_p, flag);
156 >        }
157 >
158          break;
159      }
160    }
161  
162    if (extarg)
163    {
164 <    sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
164 >    sendto_server(client_p, CAP_TS6, NOCAPS,
165                    ":%s SVSMODE %s %lu %s %s", ID(source_p),
166                    ID(target_p), (unsigned long)target_p->tsinfo, modes, extarg);
167 <    sendto_server(client_p, NULL, NOCAPS, CAP_TS6,
167 >    sendto_server(client_p, NOCAPS, CAP_TS6,
168                    ":%s SVSMODE %s %lu %s %s", source_p->name,
169                    target_p->name, (unsigned long)target_p->tsinfo, modes, extarg);
170    }
171    else
172    {
173 <    sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
173 >    sendto_server(client_p, CAP_TS6, NOCAPS,
174                    ":%s SVSMODE %s %lu %s", ID(source_p),
175                    ID(target_p), (unsigned long)target_p->tsinfo, modes);
176 <    sendto_server(client_p, NULL, NOCAPS, CAP_TS6,
176 >    sendto_server(client_p, NOCAPS, CAP_TS6,
177                    ":%s SVSMODE %s %lu %s", source_p->name,
178                    target_p->name, (unsigned long)target_p->tsinfo, modes);
179    }
180  
181 <  if (MyConnect(target_p) && (setflags != target_p->umodes))
181 >  if (MyConnect(target_p) && (setmodes != target_p->umodes))
182    {
183      char modebuf[IRCD_BUFSIZE];
184  
185 <    send_umode(target_p, target_p, setflags, 0xffffffff, modebuf);
185 >    send_umode(target_p, target_p, setmodes, 0xffffffff, modebuf);
186    }
187   }
188  
189   static struct Message svsmode_msgtab = {
190 <  "SVSMODE", 0, 0, 3, MAXPARA, MFLG_SLOW | MFLG_UNREG, 0,
190 >  "SVSMODE", 0, 0, 3, MAXPARA, MFLG_SLOW, 0,
191    {m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore, m_ignore}
192   };
193  

Comparing:
ircd-hybrid-8/modules/m_svsmode.c (property svn:eol-style), Revision 1230 by michael, Thu Sep 22 19:41:19 2011 UTC vs.
ircd-hybrid/trunk/modules/m_svsmode.c (property svn:eol-style), Revision 2137 by michael, Wed May 29 19:49:27 2013 UTC

# Line 0 | Line 1
1 + native

Diff Legend

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