diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/ns_group.c | 15 | ||||
-rw-r--r-- | src/core/ns_identify.c | 15 | ||||
-rw-r--r-- | src/core/ns_register.c | 18 |
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); } } |