NetSendToAll(buffer);
}
+void handle_loadmodule(char **parameters, int pcnt, userrec *user)
+{
+ if (LoadModule(parameters[0]))
+ {
+ WriteOpers("*** NEW MODULE: %s",parameters[0]);
+ WriteServ(user->fd,"975 %s %s :Module successfully loaded.",user->nick, parameters[0]);
+ }
+ else
+ {
+ WriteServ(user->fd,"974 %s %s :Failed to load module: %s",user->nick, parameters[0],ModuleError());
+ }
+}
+
+void handle_unloadmodule(char **parameters, int pcnt, userrec *user)
+{
+ if (UnloadModule(parameters[0]))
+ {
+ WriteOpers("*** MODULE UNLOADED: %s",parameters[0]);
+ WriteServ(user->fd,"973 %s %s :Module successfully unloaded.",user->nick, parameters[0]);
+ }
+ else
+ {
+ WriteServ(user->fd,"972 %s %s :Failed to unload module: %s",user->nick, parameters[0],ModuleError());
+ }
+}
void handle_die(char **parameters, int pcnt, userrec *user)
{
char Password[MAXBUF];
char OperType[MAXBUF];
char TypeName[MAXBUF];
- char Hostname[MAXBUF];
+ char HostName[MAXBUF];
+ char TheHost[MAXBUF];
int i,j;
bool found = false;
bool fail2 = false;
char global[MAXBUF];
+ snprintf(TheHost,MAXBUF,"%s@%s",user->ident,user->host);
+
for (int i = 0; i < ConfValueEnum("oper",&config_f); i++)
{
ConfValue("oper","name",i,LoginName,&config_f);
ConfValue("oper","password",i,Password,&config_f);
ConfValue("oper","type",i,OperType,&config_f);
- if ((!strcmp(LoginName,parameters[0])) && (!strcmp(Password,parameters[1])))
+ ConfValue("oper","host",i,HostName,&config_f);
+ if ((!strcmp(LoginName,parameters[0])) && (!strcmp(Password,parameters[1])) && (match(TheHost,HostName)))
{
fail2 = true;
for (j =0; j < ConfValueEnum("type",&config_f); j++)
/* found this oper's opertype */
snprintf(global,MAXBUF,"| %s %s",user->nick,TypeName);
NetSendToAll(global);
- ConfValue("type","host",j,Hostname,&config_f);
- ChangeDisplayedHost(user,Hostname);
+ ConfValue("type","host",j,HostName,&config_f);
+ ChangeDisplayedHost(user,HostName);
strlcpy(user->oper,TypeName,NICKMAX);
found = true;
fail2 = false;
snprintf(global,MAXBUF,"M %s +o",user->nick);
NetSendToAll(global);
FOREACH_MOD OnOper(user);
+ log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType);
}
}
else
if (!fail2)
{
WriteServ(user->fd,"491 %s :Invalid oper credentials",user->nick);
- WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
+ WriteOpers("*** WARNING! qFailed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
+ log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: user, host or password did not match.",user->nick,user->ident,user->host);
}
else
{
WriteServ(user->fd,"491 %s :Your oper block does not have a valid opertype associated with it",user->nick);
WriteOpers("*** CONFIGURATION ERROR! Oper block mismatch for OperType %s",OperType);
+ log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host);
}
}
return;