summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorrob rob@31f1291d-b8d6-0310-a050-a5561fc1590b <rob rob@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2006-06-22 17:04:21 +0000
committerrob rob@31f1291d-b8d6-0310-a050-a5561fc1590b <rob rob@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2006-06-22 17:04:21 +0000
commitcff6e7eb1a90816f09eb61ddda9697cfc30fb2c1 (patch)
tree50182cb4bd6ca731eebfde462985edfedb792719 /src/core
parent6690784bff9e62e9d1a742080294ca8008c4efe3 (diff)
BUILD : 1.7.14 (1069) BUGS : N/A NOTES : Added support for ircd modules to set extra modes based on services access (plexus needs this)
git-svn-id: svn://svn.anope.org/anope/trunk@1069 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@793 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ns_group.c15
-rw-r--r--src/core/ns_identify.c15
-rw-r--r--src/core/ns_register.c18
3 files changed, 40 insertions, 8 deletions
diff --git a/src/core/ns_group.c b/src/core/ns_group.c
index f652547a9..b50085c69 100644
--- a/src/core/ns_group.c
+++ b/src/core/ns_group.c
@@ -94,6 +94,8 @@ int do_group(User * u)
char *pass = strtok(NULL, " ");
int i;
char tsbuf[16];
+ char modes[512];
+ int len;
if (NSEmailReg && (findrequestnick(u->nick))) {
notice_lang(s_NickServ, u, NICK_REQUESTED);
@@ -229,10 +231,19 @@ int do_group(User * u)
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
if (ircd->modeonreg) {
+ len = strlen(ircd->modeonreg);
+ strncpy(modes,ircd->modeonreg,512);
+ if(ircd->rootmodeonid && (u->na->nc->flags & NI_SERVICES_ROOT)) {
+ strncat(modes,ircd->rootmodeonid,512-len);
+ } else if(ircd->adminmodeonid && (u->na->nc->flags & NI_SERVICES_ADMIN)) {
+ strncat(modes,ircd->adminmodeonid,512-len);
+ } else if(ircd->opermodeonid && (u->na->nc->flags & NI_SERVICES_OPER)) {
+ strncat(modes,ircd->opermodeonid,512-len);
+ }
if (ircd->tsonmode) {
- common_svsmode(u, ircd->modeonreg, tsbuf);
+ common_svsmode(u, modes, tsbuf);
} else {
- common_svsmode(u, ircd->modeonreg, NULL);
+ common_svsmode(u, modes, NULL);
}
}
diff --git a/src/core/ns_identify.c b/src/core/ns_identify.c
index 362cd4488..d69405484 100644
--- a/src/core/ns_identify.c
+++ b/src/core/ns_identify.c
@@ -79,6 +79,8 @@ int do_identify(User * u)
NickRequest *nr;
int res;
char tsbuf[16];
+ char modes[512];
+ int len;
if (!pass) {
syntax_error(s_NickServ, u, "IDENTIFY", NICK_IDENTIFY_SYNTAX);
@@ -121,10 +123,19 @@ int do_identify(User * u)
(unsigned long int) u->timestamp);
if (ircd->modeonreg) {
+ len = strlen(ircd->modeonreg);
+ strncpy(modes,ircd->modeonreg,512);
+ if(ircd->rootmodeonid && (u->na->nc->flags & NI_SERVICES_ROOT)) {
+ strncat(modes,ircd->rootmodeonid,512-len);
+ } else if(ircd->adminmodeonid && (u->na->nc->flags & NI_SERVICES_ADMIN)) {
+ strncat(modes,ircd->adminmodeonid,512-len);
+ } else if(ircd->opermodeonid && (u->na->nc->flags & NI_SERVICES_OPER)) {
+ strncat(modes,ircd->opermodeonid,512-len);
+ }
if (ircd->tsonmode) {
- common_svsmode(u, ircd->modeonreg, tsbuf);
+ common_svsmode(u, modes, tsbuf);
} else {
- common_svsmode(u, ircd->modeonreg, "");
+ common_svsmode(u, modes, "");
}
}
send_event(EVENT_NICK_IDENTIFY, 1, u->nick);
diff --git a/src/core/ns_register.c b/src/core/ns_register.c
index f2b3f1ad8..7f9cb0350 100644
--- a/src/core/ns_register.c
+++ b/src/core/ns_register.c
@@ -253,9 +253,9 @@ int do_confirm(User * u)
char *email = NULL;
int forced = 0;
User *utmp = NULL;
-#ifdef USE_ENCRYPTION
+ char modes[512];
int len;
-#endif
+
nr = findrequestnick(u->nick);
if (NSEmailReg) {
@@ -383,12 +383,22 @@ int do_confirm(User * u)
#endif
u->lastnickreg = time(NULL);
if (ircd->modeonreg) {
+ len = strlen(ircd->modeonreg);
+ strncpy(modes,ircd->modeonreg,512);
+ if(ircd->rootmodeonid && (u->na->nc->flags & NI_SERVICES_ROOT)) {
+ strncat(modes,ircd->rootmodeonid,512-len);
+ } else if(ircd->adminmodeonid && (u->na->nc->flags & NI_SERVICES_ADMIN)) {
+ strncat(modes,ircd->adminmodeonid,512-len);
+ } else if(ircd->opermodeonid && (u->na->nc->flags & NI_SERVICES_OPER)) {
+ strncat(modes,ircd->opermodeonid,512-len);
+ }
+
if (ircd->tsonmode) {
snprintf(tsbuf, sizeof(tsbuf), "%lu",
(unsigned long int) u->timestamp);
- common_svsmode(u, ircd->modeonreg, tsbuf);
+ common_svsmode(u, modes, tsbuf);
} else {
- common_svsmode(u, ircd->modeonreg, NULL);
+ common_svsmode(u, modes, NULL);
}
}