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

Comparing ircd-hybrid/trunk/modules/core/m_nick.c (file contents):
Revision 2300 by michael, Wed Jun 19 12:10:37 2013 UTC vs.
Revision 2368 by michael, Thu Jul 4 22:42:24 2013 UTC

# Line 187 | Line 187 | set_initial_nick(struct Client *source_p
187   static void
188   change_local_nick(struct Client *source_p, const char *nick)
189   {
190 +  int samenick = 0;
191 +
192    assert(source_p->name[0] && !EmptyString(nick));
193    assert(MyConnect(source_p));
194  
# Line 198 | Line 200 | change_local_nick(struct Client *source_
200    if ((source_p->localClient->last_nick_change +
201         ConfigFileEntry.max_nick_time) < CurrentTime)
202      source_p->localClient->number_of_nick_changes = 0;
203 +
204 +  if (ConfigFileEntry.anti_nick_flood &&
205 +      !HasUMode(source_p, UMODE_OPER) &&
206 +      source_p->localClient->number_of_nick_changes >
207 +      ConfigFileEntry.max_nick_changes)
208 +  {
209 +    sendto_one(source_p, form_str(ERR_NICKTOOFAST), me.name,
210 +               source_p->name, source_p->name, nick,
211 +               ConfigFileEntry.max_nick_time);
212 +    return;
213 +  }
214 +
215    source_p->localClient->last_nick_change = CurrentTime;
216    source_p->localClient->number_of_nick_changes++;
217  
218 <  if ((ConfigFileEntry.anti_nick_flood &&
219 <      (source_p->localClient->number_of_nick_changes
220 <       <= ConfigFileEntry.max_nick_changes)) ||
207 <     !ConfigFileEntry.anti_nick_flood ||
208 <     (HasUMode(source_p, UMODE_OPER) && ConfigFileEntry.no_oper_flood))
218 >  samenick = !irccmp(source_p->name, nick);
219 >
220 >  if (!samenick)
221    {
222 <    int samenick = !irccmp(source_p->name, nick);
222 >    source_p->tsinfo = CurrentTime;
223 >    clear_ban_cache_client(source_p);
224 >    watch_check_hash(source_p, RPL_LOGOFF);
225  
226 <    if (!samenick)
226 >    if (HasUMode(source_p, UMODE_REGISTERED))
227      {
228 <      source_p->tsinfo = CurrentTime;
229 <      clear_ban_cache_client(source_p);
230 <      watch_check_hash(source_p, RPL_LOGOFF);
231 <
232 <      if (HasUMode(source_p, UMODE_REGISTERED))
219 <      {
220 <        unsigned int oldmodes = source_p->umodes;
221 <        char modebuf[IRCD_BUFSIZE] = { '\0' };
222 <
223 <        DelUMode(source_p, UMODE_REGISTERED);
224 <        send_umode(source_p, source_p, oldmodes, 0xffffffff, modebuf);
225 <      }
228 >      unsigned int oldmodes = source_p->umodes;
229 >      char modebuf[IRCD_BUFSIZE] = { '\0' };
230 >
231 >      DelUMode(source_p, UMODE_REGISTERED);
232 >      send_umode(source_p, source_p, oldmodes, 0xffffffff, modebuf);
233      }
234 +  }
235  
236 <    sendto_realops_flags(UMODE_NCHANGE, L_ALL, SEND_NOTICE,
237 <                         "Nick change: From %s to %s [%s@%s]",
238 <                         source_p->name, nick, source_p->username, source_p->host);
239 <    sendto_common_channels_local(source_p, 1, 0, ":%s!%s@%s NICK :%s",
240 <                                 source_p->name, source_p->username,
241 <                                 source_p->host, nick);
242 <    whowas_add_history(source_p, 1);
243 <
244 <    sendto_server(source_p, CAP_TS6, NOCAPS,
245 <                  ":%s NICK %s :%lu",
246 <                  ID(source_p), nick, (unsigned long)source_p->tsinfo);
247 <    sendto_server(source_p, NOCAPS, CAP_TS6,
248 <                  ":%s NICK %s :%lu",
249 <                  source_p->name, nick, (unsigned long)source_p->tsinfo);
250 <
251 <    hash_del_client(source_p);
252 <    strlcpy(source_p->name, nick, sizeof(source_p->name));
253 <    hash_add_client(source_p);
236 >  sendto_realops_flags(UMODE_NCHANGE, L_ALL, SEND_NOTICE,
237 >                       "Nick change: From %s to %s [%s@%s]",
238 >                       source_p->name, nick, source_p->username, source_p->host);
239 >  sendto_common_channels_local(source_p, 1, 0, ":%s!%s@%s NICK :%s",
240 >                               source_p->name, source_p->username,
241 >                               source_p->host, nick);
242 >  whowas_add_history(source_p, 1);
243 >
244 >  sendto_server(source_p, CAP_TS6, NOCAPS,
245 >                ":%s NICK %s :%lu",
246 >                ID(source_p), nick, (unsigned long)source_p->tsinfo);
247 >  sendto_server(source_p, NOCAPS, CAP_TS6,
248 >                ":%s NICK %s :%lu",
249 >                source_p->name, nick, (unsigned long)source_p->tsinfo);
250 >
251 >  hash_del_client(source_p);
252 >  strlcpy(source_p->name, nick, sizeof(source_p->name));
253 >  hash_add_client(source_p);
254  
255 <    if (!samenick)
256 <      watch_check_hash(source_p, RPL_LOGON);
255 >  if (!samenick)
256 >    watch_check_hash(source_p, RPL_LOGON);
257  
258 <    /* fd_desc is long enough */
259 <    fd_note(&source_p->localClient->fd, "Nick: %s", nick);
252 <  }
253 <  else
254 <    sendto_one(source_p, form_str(ERR_NICKTOOFAST), me.name,
255 <               source_p->name, source_p->name, nick,
256 <               ConfigFileEntry.max_nick_time);
258 >  /* fd_desc is long enough */
259 >  fd_note(&source_p->localClient->fd, "Nick: %s", nick);
260   }
261  
262   /*

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines