/************************************************************************ * IRC - Internet Relay Chat, modules/m_services.c * * Copyright (C) 2000-2003 TR-IRCD Development * * Copyright (C) 1990 Jarkko Oikarinen and * University of Oulu, Co Center * * See file AUTHORS in IRC package for additional names of * the programmers. * * 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 2, 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. */ /* * $Id: m_services.c,v 1.3 2003/06/14 13:55:51 tr-ircd Exp $ */ #include "struct.h" #include "common.h" #include "sys.h" #include "numeric.h" #include "msg.h" #include "channel.h" #include "h.h" #include "s_conf.h" static struct Message cs1_msgtab[] = { {MSG_CHANSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_chanserv, m_chanserv, m_ignore, m_ignore} }; static struct Message cs2_msgtab[] = { {MSG_CS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_chanserv, m_chanserv, m_ignore, m_ignore} }; static struct Message ns1_msgtab[] = { {MSG_NICKSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_nickserv, m_nickserv, m_ignore, m_ignore} }; static struct Message ns2_msgtab[] = { {MSG_NS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_nickserv, m_nickserv, m_ignore, m_ignore} }; static struct Message ms1_msgtab[] = { {MSG_MEMOSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_memoserv, m_memoserv, m_ignore, m_ignore} }; static struct Message ms2_msgtab[] = { {MSG_MS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_memoserv, m_memoserv, m_ignore, m_ignore} }; static struct Message os1_msgtab[] = { {MSG_OPERSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_operserv, m_operserv, m_ignore, m_ignore} }; static struct Message os2_msgtab[] = { {MSG_OS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_operserv, m_operserv, m_ignore, m_ignore} }; static struct Message ss1_msgtab[] = { {MSG_STATSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_statserv, m_statserv, m_ignore, m_ignore} }; static struct Message ss2_msgtab[] = { {MSG_SS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_statserv, m_statserv, m_ignore, m_ignore} }; static struct Message hs1_msgtab[] = { {MSG_HELPSERV, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_helpserv, m_helpserv, m_ignore, m_ignore} }; static struct Message hs2_msgtab[] = { {MSG_HS, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_helpserv, m_helpserv, m_ignore, m_ignore} }; static struct Message id_msgtab[] = { {MSG_IDENTIFY, 0, 1, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_identify, m_identify, m_ignore, m_ignore} }; static struct Message s_msgtab[] = { {MSG_SERVICES, 0, 2, M_SLOW | M_IDLE_RESET, 0L, m_unregistered, m_services, m_services, m_ignore, m_ignore} }; #ifndef STATIC_MODULES char *_version = "$Revision: 1.3 $"; void _modinit(void) { mod_add_cmd(cs1_msgtab); mod_add_cmd(cs2_msgtab); mod_add_cmd(ns1_msgtab); mod_add_cmd(ns2_msgtab); mod_add_cmd(ms1_msgtab); mod_add_cmd(ms2_msgtab); mod_add_cmd(os1_msgtab); mod_add_cmd(os2_msgtab); mod_add_cmd(ss1_msgtab); mod_add_cmd(ss2_msgtab); mod_add_cmd(hs1_msgtab); mod_add_cmd(hs2_msgtab); mod_add_cmd(id_msgtab); mod_add_cmd(s_msgtab); } void _moddeinit(void) { mod_del_cmd(cs1_msgtab); mod_del_cmd(cs2_msgtab); mod_del_cmd(ns1_msgtab); mod_del_cmd(ns2_msgtab); mod_del_cmd(ms1_msgtab); mod_del_cmd(ms2_msgtab); mod_del_cmd(os1_msgtab); mod_del_cmd(os2_msgtab); mod_del_cmd(ss1_msgtab); mod_del_cmd(ss2_msgtab); mod_del_cmd(hs1_msgtab); mod_del_cmd(hs2_msgtab); mod_del_cmd(id_msgtab); mod_del_cmd(s_msgtab); } #else void m_services_init(void) { mod_add_cmd(cs1_msgtab); mod_add_cmd(cs2_msgtab); mod_add_cmd(ns1_msgtab); mod_add_cmd(ns2_msgtab); mod_add_cmd(ms1_msgtab); mod_add_cmd(ms2_msgtab); mod_add_cmd(os1_msgtab); mod_add_cmd(os2_msgtab); mod_add_cmd(ss1_msgtab); mod_add_cmd(ss2_msgtab); mod_add_cmd(hs1_msgtab); mod_add_cmd(hs2_msgtab); mod_add_cmd(id_msgtab); mod_add_cmd(s_msgtab); } #endif int m_chanserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo(cptr, sptr, ServicesConf.chanserv, ServicesConf.services_name, parc, parv); } int m_nickserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo(cptr, sptr, ServicesConf.nickserv, ServicesConf.services_name, parc, parv); } int m_memoserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo(cptr, sptr, ServicesConf.memoserv, ServicesConf.services_name, parc, parv); } int m_operserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo(cptr, sptr, ServicesConf.operserv, ServicesConf.services_name, parc, parv); } int m_statserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo(cptr, sptr, ServicesConf.statserv, ServicesConf.services_name, parc, parv); } int m_helpserv(aClient *cptr, aClient *sptr, int parc, char *parv[]) { return m_pseudo_help(cptr, sptr, ServicesConf.helpserv, ServicesConf.services_name, parc, parv); } /* m_services | m_identify -- see df465+taz */ int m_services(aClient *cptr, aClient *sptr, int parc, char *parv[]) { if (parc < 2 || *parv[1] == '\0') { send_me_numeric(sptr, ERR_NOTEXTTOSEND); return -1; } if (irc_strncmp(parv[1], "help", 4) == 0) { send_me_notice(sptr, ":For ChanServ help use: /chanserv help"); send_me_notice(sptr, ":For NickServ help use: /nickserv help"); send_me_notice(sptr, ":For MemoServ help use: /memoserv help"); return 0; } if (parc > 2) { if (*parv[2] == '#') return m_chanserv(cptr, sptr, parc, parv); else return m_nickserv(cptr, sptr, parc, parv); } return 0; } int m_identify(aClient *cptr, aClient *sptr, int parc, char *parv[]) { aClient *acptr; if (parc < 2 || *parv[1] == '\0') { send_me_numeric(sptr, ERR_NOTEXTTOSEND); return -1; } if (*parv[1]) { if ((*parv[1] == '#') && ((char *) strchr(parv[1], ' '))) { if ((acptr = find_person(ServicesConf.chanserv))) sendto_one_person(acptr, sptr, TOK1_PRIVMSG, "%s@%s :IDENTIFY %s ", ServicesConf.chanserv, ServicesConf.services_name, parv[1]); else send_me_numeric(sptr, ERR_SERVICESDOWN, ServicesConf.chanserv); } else { if ((acptr = find_person(ServicesConf.nickserv))) sendto_one_person(acptr, sptr, TOK1_PRIVMSG, "%s@%s :IDENTIFY %s", ServicesConf.nickserv, ServicesConf.services_name, parv[1]); else send_me_numeric(sptr, ERR_SERVICESDOWN, ServicesConf.nickserv); } } return 0; }