]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/chanserv_protect.c
fix bug in G stats
[irc/quakenet/newserv.git] / chanserv / chanserv_protect.c
index 6d5bd9292bacd6361db24c5eb3f97de68c3b59d2..fb1131758d7f5e9264e0d36ab489ebe481313c4e 100644 (file)
@@ -2,10 +2,11 @@
  * Nick protection system for the chanserv
  */
 
+#include <stdio.h>
 #include "chanserv.h"
 #include "../core/schedule.h"
 #include "../localuser/localuser.h"
-
+#include "../lib/irc_string.h"
 
 #define PROTECTTIME    60 /* How long you have to renick if you encroach.. */
 
@@ -21,8 +22,7 @@ void _init() {
   registerhook(HOOK_NICK_NEWNICK, csp_freenick);
   registerhook(HOOK_NICK_ACCOUNT, csp_freenick);
   
-  chanservaddcommand("claimnick", QCMD_HELPER, 0, csp_doclaimnick, 
-                    "Reclaims your nickname if it has been stolen.","");
+  chanservaddcommand("claimnick", QCMD_STAFF, 0, csp_doclaimnick, "Reclaims your nickname if it has been stolen.","");
 }
 
 void _fini() {
@@ -52,6 +52,7 @@ void _fini() {
 void csp_handlenick(int hooknum, void *arg) {
   nick *np=arg;
   reguser *rup;
+  char userhostbuf[USERLEN+HOSTLEN+2];
 
   /* Check that it's a protected nick */
   if (!(rup=findreguserbynick(np->nick)) || !UIsProtect(rup))
@@ -71,6 +72,12 @@ void csp_handlenick(int hooknum, void *arg) {
     rup->stealcount=0;
     return;
   }
+  
+  if (rup->lastuserhost) {
+    sprintf(userhostbuf,"%s@%s",np->ident,np->host->name->content);
+    if (!ircd_strcmp(userhostbuf, rup->lastuserhost->content))
+      return;
+  }
 
   if (IsOper(np) || homeserver(np->numeric)==mylongnum)
     return;