]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/authlib.c
merge
[irc/quakenet/newserv.git] / chanserv / authlib.c
index 4f2c4184b008ceb456ab2cf0a712de0458fa73e3..5cf36b9036b700629e507064451d7e3e0d850adf 100644 (file)
@@ -9,22 +9,32 @@
 #include <sys/types.h>
 #include <regex.h>
 
-regex_t preg;
+regex_t remail, raccount;
 static int regexinit;
 
-int csa_initregex() {
+int csa_initregex(void) {
   if (regexinit)
     return 1;
 
-  if (!regcomp(&preg, VALID_EMAIL, REG_EXTENDED | REG_NOSUB | REG_ICASE))
+  if (regcomp(&remail, VALID_EMAIL, REG_EXTENDED | REG_NOSUB | REG_ICASE))
     return 0;
 
+  if (regcomp(&raccount, VALID_ACCOUNT_NAME, REG_EXTENDED | REG_NOSUB | REG_ICASE)) {
+    regfree(&remail);
+    return 0;
+  }
+
   regexinit = 1;
   return 1;
 }
 
-void csa_freeregex() {
-  regfree(&preg);
+void csa_freeregex(void) {
+  if(!regexinit)
+    return;
+
+  regfree(&remail);
+  regfree(&raccount);
+  regexinit = 0;
 }
 
 /*
@@ -67,14 +77,13 @@ int csa_checkeboy(nick *sender, char *eboy)
   if (!ircd_strncmp("user@mymailhost.xx", eboy, len) || !ircd_strncmp("info@quakenet.org", eboy, len)
       || !ircd_strncmp("user@mymail.xx", eboy, len) || !ircd_strncmp("user@mail.cc", eboy, len)
       || !ircd_strncmp("user@host.com", eboy, len) || !ircd_strncmp("Jackie@your.isp.com", eboy, len)
-      || !ircd_strncmp("QBot@QuakeNet.org", eboy, len)) {
+      || !ircd_strncmp("QBot@QuakeNet.org", eboy, len) || !ircd_strncmp("Q@CServe.quakenet.org", eboy, len)) {
     if (sender)
       chanservstdmessage(sender, QM_NOTYOUREMAIL, eboy);
     return (1);
   }
 
-  csa_initregex();
-  if (regexec(&preg, eboy, (size_t) 0, NULL, 0)) {
+  if (regexec(&remail, eboy, (size_t) 0, NULL, 0)) {
     if (sender)
       chanservstdmessage(sender, QM_INVALIDEMAIL, eboy);
     return (1);
@@ -83,6 +92,19 @@ int csa_checkeboy(nick *sender, char *eboy)
   return (0);
 }
 
+/*
+ * use regex matching to determine if it's a valid account name or not
+ */
+int csa_checkaccountname(nick *sender, char *accountname) {
+  if (regexec(&raccount, accountname, (size_t) 0, NULL, 0)) {
+    if (sender)
+      chanservstdmessage(sender, QM_INVALIDACCOUNTNAME);
+    return (1);
+  }
+  return (0);
+}
+
+
 /*
  * create a random pw. code stolen from fox's O
  */