static void write_hsofferdb(database_handle_t *db);
static void db_h_ho(database_handle_t *db, const char *type);
+static void remove_group_offered_hosts(mygroup_t *mg);
+
command_t hs_offer = { "OFFER", N_("Sets vhosts available for users to take."), PRIV_USER_VHOST, 2, hs_cmd_offer, { .path = "hostserv/offer" } };
command_t hs_unoffer = { "UNOFFER", N_("Removes a vhost from the list that users can take."), PRIV_USER_VHOST, 2, hs_cmd_unoffer, { .path = "hostserv/unoffer" } };
command_t hs_offerlist = { "OFFERLIST", N_("Lists all available vhosts."), AC_NONE, 1, hs_cmd_offerlist, { .path = "hostserv/offerlist" } };
hook_add_db_write(write_hsofferdb);
db_register_type_handler("HO", db_h_ho);
+ hook_add_event("group_drop");
+ hook_add_group_drop(remove_group_offered_hosts);
+
service_named_bind_command("hostserv", &hs_offer);
service_named_bind_command("hostserv", &hs_unoffer);
service_named_bind_command("hostserv", &hs_offerlist);
hook_del_db_write(write_hsofferdb);
db_unregister_type_handler("HO");
+ hook_del_group_drop(remove_group_offered_hosts);
+
service_named_unbind_command("hostserv", &hs_offer);
service_named_unbind_command("hostserv", &hs_unoffer);
service_named_unbind_command("hostserv", &hs_offerlist);
return NULL;
}
+static void remove_group_offered_hosts(mygroup_t *mg)
+{
+ return_if_fail(mg != NULL);
+
+ myentity_t *mt = entity(mg);
+ mowgli_node_t *n, *tn;
+ hsoffered_t *l;
+
+ MOWGLI_ITER_FOREACH_SAFE(n, tn, hs_offeredlist.head)
+ {
+ l = n->data;
+
+ if (l->group != NULL && l->group == mt)
+ {
+ slog(LG_VERBOSE, "remove_group_offered_hosts(): removing %s (group %s)", l->vhost, l->group->name);
+
+ mowgli_node_delete(n, &hs_offeredlist);
+
+ strshare_unref(l->creator);
+ free(l->vhost);
+ free(l);
+ }
+ }
+}
+
/* OFFER <host> */
static void hs_cmd_offer(sourceinfo_t *si, int parc, char *parv[])
{
mowgli_node_add(l, &l->node, &hs_offeredlist);
- command_success_nodata(si, _("You have offered vhost \2%s\2."), host);
- logcommand(si, CMDLOG_ADMIN, "OFFER: \2%s\2", host);
+ if (mt != NULL)
+ {
+ command_success_nodata(si, _("You have offered vhost \2%s\2 to group \2%s\2."), host, group);
+ logcommand(si, CMDLOG_ADMIN, "OFFER: \2%s\2 to \2%s\2", host, group);
+ }
+ else
+ {
+ command_success_nodata(si, _("You have offered vhost \2%s\2."), host);
+ logcommand(si, CMDLOG_ADMIN, "OFFER: \2%s\2", host);
+ }
return;
}