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/trunk/modules/m_svsmode.c (file contents):
Revision 1632 by michael, Sun Nov 4 15:37:10 2012 UTC vs.
Revision 2022 by michael, Sun May 12 18:07:07 2013 UTC

# Line 52 | Line 52
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 argument (services id)
55 > *      - parv[2] = TS
56 > *      - parv[3] = mode
57 > *      - parv[4] = optional argument (services id, hostname)
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;
66 –  char *m = NULL, *modes = NULL, *extarg = NULL;
67    time_t ts = 0;
68  
69    if (!HasFlag(source_p, FLAGS_SERVICE))
70      return;
71  
72 –  if ((parc >= 4) && ((*parv[3] == '+') || (*parv[3] == '-')))
73 –  {
74 –    ts     = atol(parv[2]);
75 –    modes  = parv[3];
76 –    extarg = (parc > 4) ? parv[4] : NULL;
77 –  }
78 –  else
79 –  {
80 –    modes  = parv[2];
81 –    extarg = (parc > 3) ? parv[3] : NULL;
82 –  }
83 –
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 +  if (parc > 4 && !EmptyString(parv[4]))
79 +    extarg = parv[4];
80 +
81    setflags = target_p->umodes;
82  
83 <  for (m = modes; *m; ++m)
83 >  for (m = parv[3]; *m; ++m)
84    {
85      switch (*m)
86      {
# Line 101 | Line 92 | ms_svsmode(struct Client *client_p, stru
92          break;
93  
94        case 'd':
95 <        if (!EmptyString(extarg))
95 >        if (extarg)
96            strlcpy(target_p->svid, extarg, sizeof(target_p->svid));
97          break;
98  
99 +      case 'x':
100 +        if (what == MODE_ADD && extarg)
101 +          user_set_hostmask(target_p, extarg);
102 +        break;
103 +
104        case 'o':
105          if (what == MODE_DEL && HasUMode(target_p, UMODE_OPER))
106          {
# Line 148 | Line 144 | ms_svsmode(struct Client *client_p, stru
144          break;
145        default:
146          if ((flag = user_modes[(unsigned char)*m]))
147 <          execute_callback(umode_cb, client_p, target_p, what, flag);
147 >        {
148 >          if (what == MODE_ADD)
149 >            AddUMode(target_p, flag);
150 >          else
151 >            DelUMode(target_p, flag);
152 >        }
153 >
154          break;
155      }
156    }
# Line 157 | Line 159 | ms_svsmode(struct Client *client_p, stru
159    {
160      sendto_server(client_p, CAP_TS6, NOCAPS,
161                    ":%s SVSMODE %s %lu %s %s", ID(source_p),
162 <                  ID(target_p), (unsigned long)target_p->tsinfo, modes, extarg);
162 >                  ID(target_p), (unsigned long)target_p->tsinfo, parv[3], extarg);
163      sendto_server(client_p, NOCAPS, CAP_TS6,
164                    ":%s SVSMODE %s %lu %s %s", source_p->name,
165 <                  target_p->name, (unsigned long)target_p->tsinfo, modes, extarg);
165 >                  target_p->name, (unsigned long)target_p->tsinfo, parv[3], extarg);
166    }
167    else
168    {
169      sendto_server(client_p, CAP_TS6, NOCAPS,
170                    ":%s SVSMODE %s %lu %s", ID(source_p),
171 <                  ID(target_p), (unsigned long)target_p->tsinfo, modes);
171 >                  ID(target_p), (unsigned long)target_p->tsinfo, parv[3]);
172      sendto_server(client_p, NOCAPS, CAP_TS6,
173                    ":%s SVSMODE %s %lu %s", source_p->name,
174 <                  target_p->name, (unsigned long)target_p->tsinfo, modes);
174 >                  target_p->name, (unsigned long)target_p->tsinfo, parv[3]);
175    }
176  
177    if (MyConnect(target_p) && (setflags != target_p->umodes))
# Line 181 | Line 183 | ms_svsmode(struct Client *client_p, stru
183   }
184  
185   static struct Message svsmode_msgtab = {
186 <  "SVSMODE", 0, 0, 3, MAXPARA, MFLG_SLOW, 0,
186 >  "SVSMODE", 0, 0, 4, MAXPARA, MFLG_SLOW, 0,
187    {m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore, m_ignore}
188   };
189  

Comparing ircd-hybrid/trunk/modules/m_svsmode.c (property svn:eol-style):
Revision 1632 by michael, Sun Nov 4 15:37:10 2012 UTC vs.
Revision 2022 by michael, Sun May 12 18:07:07 2013 UTC

# Line 0 | Line 1
1 + native

Diff Legend

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