1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-07-10 07:03:12 +02:00
Files
unrealircd/src/modules/m_chgname.c
T
Bram Matthys 1bea78bd0e - Fixed a bug in m_part reported by Angrywould, cause unknown (yet).
- Currently it's not possible to compile with ZIP_LINKS _and_ SSL without changing zlib.h :(.
It really sucks... it's because zlib.h has a typedef for 'free_func' and this is also used
in openssl header files as a (useless) name... :((. I did some updates to allow future zlib
changes, dunnow if they will because it can break other zlib programs. It compiled fine at
windows, but not at Linux... you need to replace free_func to zlib_free_func in zlib.h in
order to get ZIP_LINKS + SSL to work... but like I said, that may break programs (ARGH!).
2003-02-04 21:23:47 +00:00

208 lines
4.8 KiB
C

/*
* Unreal Internet Relay Chat Daemon, src/modules/m_chgname.c
* (C) 2000-2001 Carsten V. Munk and the UnrealIRCd Team
* Moved to modules by Fish (Justin Hammond)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "channel.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <fcntl.h>
#include "h.h"
#include "proto.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
#endif
#ifdef _WIN32
#include "version.h"
#endif
DLLFUNC int m_chgname(aClient *cptr, aClient *sptr, int parc, char *parv[]);
/* Place includes here */
#define MSG_CHGNAME "CHGNAME"
#define TOK_CHGNAME "BK"
#ifndef DYNAMIC_LINKING
ModuleHeader m_chgname_Header
#else
#define m_chgname_Header Mod_Header
ModuleHeader Mod_Header
#endif
= {
"chgname", /* Name of module */
"$Id$", /* Version */
"command /chgname", /* Short description of module */
"3.2-b8-1",
NULL
};
/* The purpose of these ifdefs, are that we can "static" link the ircd if we
* want to
*/
/* This is called on module init, before Server Ready */
#ifdef DYNAMIC_LINKING
DLLFUNC int Mod_Init(ModuleInfo *modinfo)
#else
int m_chgname_Init(ModuleInfo *modinfo)
#endif
{
/*
* We call our add_Command crap here
*/
add_Command(MSG_CHGNAME, TOK_CHGNAME, m_chgname, 2);
add_Command(MSG_SVSNAME, TOK_CHGNAME, m_chgname, 2);
return MOD_SUCCESS;
}
/* Is first run when server is 100% ready */
#ifdef DYNAMIC_LINKING
DLLFUNC int Mod_Load(int module_load)
#else
int m_chgname_Load(int module_load)
#endif
{
return MOD_SUCCESS;
}
/* Called when module is unloaded */
#ifdef DYNAMIC_LINKING
DLLFUNC int Mod_Unload(int module_unload)
#else
int m_chgname_Unload(int module_unload)
#endif
{
if (del_Command(MSG_CHGNAME, TOK_CHGNAME, m_chgname) < 0)
{
sendto_realops("Failed to delete command chgname when unloading %s",
m_chgname_Header.name);
}
if (del_Command(MSG_SVSNAME, TOK_CHGNAME, m_chgname) < 0)
{
sendto_realops("Failed to delete command svsname when unloading %s",
m_chgname_Header.name);
}
return MOD_SUCCESS;
}
/*
* m_chgname - Tue May 23 13:06:35 BST 200 (almost a year after I made CHGIDENT) - Stskeeps
* :prefix CHGNAME <nick> <new realname>
* parv[0] - sender
* parv[1] - nickname
* parv[2] - realname
*
*/
DLLFUNC int m_chgname(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
aClient *acptr;
#ifdef DISABLE_USERMOD
if (MyClient(sptr))
{
sendto_one(sptr, ":%s NOTICE %s :*** The /chgname command is disabled on this server", me.name, sptr->name);
return 0;
}
#endif
if (MyClient(sptr))
if (!IsAnOper(sptr))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
return 0;
}
if (parc < 3)
{
sendto_one(sptr,
":%s NOTICE %s :*** /ChgName syntax is /ChgName <nick> <newident>",
me.name, sptr->name);
return 0;
}
if (strlen(parv[2]) < 1)
{
sendto_one(sptr,
":%s NOTICE %s :*** Write atleast something to change the ident to!",
me.name, sptr->name);
return 0;
}
if (strlen(parv[2]) > (REALLEN))
{
sendto_one(sptr,
":%s NOTICE %s :*** ChgName Error: Too long !!", me.name,
sptr->name);
return 0;
}
if ((acptr = find_person(parv[1], NULL)))
{
/* set the realname first to make n:line checking work */
ircsprintf(acptr->info, "%s", parv[2]);
/* only check for n:lines if the person who's name is being changed is not an oper */
if (!IsAnOper(acptr) && Find_ban(acptr->info, CONF_BAN_REALNAME)) {
int xx;
xx =
exit_client(cptr, sptr, &me,
"Your GECOS (real name) is banned from this server");
return xx;
}
if (!IsULine(sptr))
{
sendto_snomask(SNO_EYES,
"%s changed the GECOS of %s (%s@%s) to be %s",
sptr->name, acptr->name, acptr->user->username,
GetHost(acptr), parv[2]);
}
sendto_serv_butone_token(cptr, sptr->name,
MSG_CHGNAME, TOK_CHGNAME, "%s :%s", acptr->name, parv[2]);
return 0;
}
else
{
sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, sptr->name,
parv[1]);
return 0;
}
return 0;
}