]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/authlib.c
Add opername support to newserv, also add displaying of oper names in noperserv warni...
[irc/quakenet/newserv.git] / chanserv / authlib.c
index f257fef1543a94e7c98aa78919c564df9af29b6b..273a62b7ef0dd3b142e15ecdf10ba3d26d90aac3 100644 (file)
@@ -9,17 +9,32 @@
 #include <sys/types.h>
 #include <regex.h>
 
-regex_t preg;
+regex_t remail, raccount;
+static int regexinit;
 
-int csa_initregex() {
-  if (regcomp(&preg, VALID_EMAIL, REG_EXTENDED | REG_NOSUB | REG_ICASE))
-    return(1);
-  else
-    return(0);
+int csa_initregex(void) {
+  if (regexinit)
+    return 1;
+
+  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;
 }
 
 /*
@@ -68,7 +83,7 @@ int csa_checkeboy(nick *sender, char *eboy)
     return (1);
   }
 
-  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);
@@ -77,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
  */