ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/ermyth/modules/chanserv/ftransfer.C
Revision: 1.2
Committed: Sat Jul 21 01:29:08 2007 UTC (19 years, 2 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.1: +2 -2 lines
Log Message:
- moved to new documentation system
- fixed small build error

File Contents

# User Rev Content
1 pippijn 1.1 /*
2     * Copyright © 2005 William Pitcock, et al.
3 pippijn 1.2 * Rights to this code are as documented in doc/pod/license.pod.
4 pippijn 1.1 *
5     * This file contains code for the CService FTRANSFER function.
6     *
7 pippijn 1.2 * $Id: ftransfer.C,v 1.1 2007-07-19 08:24:52 pippijn Exp $
8 pippijn 1.1 */
9    
10     #include "atheme.h"
11     #include <account/mychan.h>
12     #include <account/myuser.h>
13     #include <account/chanacs.h>
14    
15     static char const rcsid[] = "$Id";
16    
17     struct cs_ftransfer_listeners : callback::has_listeners
18     {
19     };
20    
21     cs_ftransfer_listeners listeners;
22    
23     DECLARE_MODULE_V1 ("chanserv/ftransfer", false, _modinit, _moddeinit, rcsid, "The Ermyth Team <http://ermyth.schmorp.de>");
24    
25     static void cs_cmd_ftransfer (sourceinfo_t *si, int parc, char *parv[]);
26    
27     command_t cs_ftransfer = { "FTRANSFER", N_("Forces foundership transfer of a channel."),
28     PRIV_CHAN_ADMIN, 2, cs_cmd_ftransfer
29     };
30    
31     cmdvec *cs_cmdtree;
32     helpvec *cs_helptree;
33    
34     void
35     _modinit (module_t *m)
36     {
37     MODULE_USE_SYMBOL_T (cs_cmdtree, cmdvec, "chanserv/main", "cs_cmdtree");
38     MODULE_USE_SYMBOL_T (cs_helptree, helpvec, "chanserv/main", "cs_helptree");
39    
40     cs_cmdtree << cs_ftransfer;
41     help_addentry (cs_helptree, "FTRANSFER", "help/cservice/ftransfer", NULL);
42     }
43    
44     void
45     _moddeinit ()
46     {
47     cs_cmdtree >> cs_ftransfer;
48     help_delentry (cs_helptree, "FTRANSFER");
49     }
50    
51     static void
52     cs_cmd_ftransfer (sourceinfo_t *si, int parc, char *parv[])
53     {
54     myuser_t *tmu;
55     mychan_t *mc;
56     char *name = parv[0];
57     char *newfndr = parv[1];
58    
59     if (!name || !newfndr)
60     {
61     command_fail (si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "FTRANSFER");
62     command_fail (si, fault_needmoreparams, _("Syntax: FTRANSFER <#channel> <newfounder>"));
63     return;
64     }
65    
66     if (!(tmu = myuser_find_ext (newfndr)))
67     {
68     command_fail (si, fault_nosuch_target, _("\2%s\2 is not registered."), newfndr);
69     return;
70     }
71    
72     if (!(mc = mychan_find (name)))
73     {
74     command_fail (si, fault_nosuch_target, _("\2%s\2 is not registered."), name);
75     return;
76     }
77    
78     if (tmu == mc->founder)
79     {
80     command_fail (si, fault_nochange, _("\2%s\2 is already the founder of \2%s\2."), tmu->name, name);
81     return;
82     }
83    
84     /* no maxchans check (intentional -- this is an oper command) */
85    
86     snoop ("FTRANSFER: %s transferred %s from %s to %s", get_oper_name (si), name, mc->founder->name, tmu->name);
87     wallops ("%s transferred foundership of %s from %s to %s", get_oper_name (si), name, mc->founder->name, tmu->name);
88     logcommand (si, CMDLOG_ADMIN | LG_REGISTER, "%s FTRANSFER from %s to %s", mc->name, mc->founder->name, tmu->name);
89     verbose (mc, "Foundership transfer from \2%s\2 to \2%s\2 forced by %s administration.", mc->founder->name, tmu->name, me.netname);
90     command_success_nodata (si, _("Foundership of \2%s\2 has been transferred from \2%s\2 to \2%s\2."), name, mc->founder->name, tmu->name);
91    
92     mc->founder = tmu;
93     mc->used = NOW;
94     chanacs_change_simple (mc, tmu, NULL, CA_FOUNDER_0, 0);
95    
96     /* delete transfer metadata -- prevents a user from stealing it back */
97     mc->del_metadata ("private:verify:founderchg:newfounder");
98     mc->del_metadata ("private:verify:founderchg:timestamp");
99     }
100    
101     /* vim:cinoptions=>s,e0,n0,f0,{0,}0,^0,=s,ps,t0,c3,+s,(2s,us,)20,*30,gs,hs
102     * vim:ts=8
103     * vim:sw=8
104     * vim:noexpandtab
105     */