1 /*
2 * Copyright (c) 2005 William Pitcock <nenolod -at- nenolod.net>
3 * Rights to this code are as documented in doc/LICENSE.
4 *
5 * Allows syncing the vhost for all nicks in a group.
6 *
7 */
8
9 #include "atheme.h"
10 #include "hostserv.h"
11
12 DECLARE_MODULE_V1
13 (
14 "hostserv/group", false, _modinit, _moddeinit,
15 PACKAGE_STRING,
16 VENDOR_STRING
17 );
18
19 static void hs_cmd_group(sourceinfo_t *si, int parc, char *parv[]);
20
21 command_t hs_group = { "GROUP", N_("Syncs the vhost for all nicks in a group."), AC_AUTHENTICATED, 1, hs_cmd_group, { .path = "hostserv/group" } };
22
_modinit(module_t * m)23 void _modinit(module_t *m)
24 {
25 service_named_bind_command("hostserv", &hs_group);
26 }
27
_moddeinit(module_unload_intent_t intent)28 void _moddeinit(module_unload_intent_t intent)
29 {
30 service_named_unbind_command("hostserv", &hs_group);
31 }
32
hs_cmd_group(sourceinfo_t * si,int parc,char * parv[])33 static void hs_cmd_group(sourceinfo_t *si, int parc, char *parv[])
34 {
35 mynick_t *mn;
36 metadata_t *md;
37 char buf[BUFSIZE];
38
39 /* This is only because we need a nick to copy from. */
40 if (si->su == NULL)
41 {
42 command_fail(si, fault_noprivs, _("\2%s\2 can only be executed via IRC."), "GROUP");
43 return;
44 }
45
46 mn = mynick_find(si->su->nick);
47 if (mn == NULL)
48 {
49 command_fail(si, fault_nosuch_target, _("Nick \2%s\2 is not registered."), si->su->nick);
50 return;
51 }
52 if (mn->owner != si->smu)
53 {
54 command_fail(si, fault_noprivs, _("Nick \2%s\2 is not registered to your account."), mn->nick);
55 return;
56 }
57 snprintf(buf, BUFSIZE, "%s:%s", "private:usercloak", mn->nick);
58 md = metadata_find(si->smu, buf);
59 if (md == NULL)
60 md = metadata_find(si->smu, "private:usercloak");
61 if (md == NULL)
62 {
63 command_success_nodata(si, _("Please contact an Operator to get a vhost assigned to this nick."));
64 return;
65 }
66 mowgli_strlcpy(buf, md->value, sizeof buf);
67 hs_sethost_all(si->smu, buf, get_source_name(si));
68 do_sethost_all(si->smu, buf);
69 command_success_nodata(si, _("All vhosts in the group \2%s\2 have been set to \2%s\2."), entity(si->smu)->name, buf);
70 }
71
72 /* vim:cinoptions=>s,e0,n0,f0,{0,}0,^0,=s,ps,t0,c3,+s,(2s,us,)20,*30,gs,hs
73 * vim:ts=8
74 * vim:sw=8
75 * vim:noexpandtab
76 */
77