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