* 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"
+#include "../lib/version.h"
+MODULE_VERSION(QVERSION)
#define PROTECTTIME 60 /* How long you have to renick if you encroach.. */
void csp_handlenick(int hooknum, void *arg);
+void csp_handlerename(int hooknum, void *arg);
void csp_freenick(int hooknum, void *arg);
void csp_timerfunc (void *arg);
int csp_doclaimnick(void *source, int cargc, char **cargv);
void _init() {
registerhook(HOOK_NICK_NEWNICK, csp_handlenick);
- registerhook(HOOK_NICK_RENAME, csp_handlenick);
+ registerhook(HOOK_NICK_RENAME, csp_handlerename);
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() {
int i;
deregisterhook(HOOK_NICK_NEWNICK, csp_handlenick);
- deregisterhook(HOOK_NICK_RENAME, csp_handlenick);
+ deregisterhook(HOOK_NICK_RENAME, csp_handlerename);
deregisterhook(HOOK_NICK_NEWNICK, csp_freenick);
deregisterhook(HOOK_NICK_ACCOUNT, csp_freenick);
}
}
+void csp_handlerename(int hooknum, void *arg) {
+ void **harg = (void **)arg;
+ csp_handlenick(hooknum, harg[0]);
+}
+
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))
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;