static void gs_cmd_register(struct sourceinfo *si, int parc, char *parv[]) { struct mygroup *mg; if (!parv[0]) { command_fail(si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "REGISTER"); command_fail(si, fault_needmoreparams, _("To register a group: REGISTER <!groupname>")); return; } if (*parv[0] != '!') { command_fail(si, fault_needmoreparams, STR_INVALID_PARAMS, "REGISTER"); command_fail(si, fault_needmoreparams, _("To register a group: REGISTER <!groupname>")); return; } if (si->smu->flags & MU_WAITAUTH) { command_fail(si, fault_notverified, STR_EMAIL_NOT_VERIFIED); return; } if (mygroup_find(parv[0])) { command_fail(si, fault_alreadyexists, _("The group \2%s\2 already exists."), parv[0]); return; } if (strlen(parv[0]) > GROUPLEN) { command_fail(si, fault_badparams, _("The group name \2%s\2 is invalid."), parv[0]); return; } if (myentity_count_group_flag(entity(si->smu), GA_FOUNDER) > gs_config->maxgroups && !has_priv(si, PRIV_REG_NOLIMIT)) { command_fail(si, fault_toomany, _("You have too many groups registered.")); return; } if (metadata_find(si->smu, "private:restrict:setter")) { command_fail(si, fault_noprivs, _("You have been restricted from registering groups by network staff.")); return; } mg = mygroup_add(parv[0]); groupacs_add(mg, entity(si->smu), GA_ALL | GA_FOUNDER); hook_call_group_register(mg); logcommand(si, CMDLOG_REGISTER, "REGISTER: \2%s\2", entity(mg)->name); command_success_nodata(si, _("The group \2%s\2 has been registered to \2%s\2."), entity(mg)->name, entity(si->smu)->name); }
static void gs_cmd_join(sourceinfo_t *si, int parc, char *parv[]) { mygroup_t *mg; groupacs_t *ga; metadata_t *md, *md2; unsigned int flags = 0; bool invited = false; groupinvite_t *gi; if (!parv[0]) { command_fail(si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "JOIN"); command_fail(si, fault_needmoreparams, _("Syntax: JOIN <!groupname>")); return; } if (!(mg = mygroup_find(parv[0]))) { command_fail(si, fault_alreadyexists, _("Group \2%s\2 does not exist."), parv[0]); return; } if ((gi = groupinvite_find(mg, entity(si->smu))) != NULL) { invited = true; } else { /* Legacy code - Search old invite and delete it */ if ((md2 = metadata_find(si->smu, "private:groupinvite"))) { if (!strcasecmp(md2->value, parv[0])) { invited = true; metadata_delete(si->smu, "private:groupinvite"); } } } if (groupacs_sourceinfo_has_flag(mg, si, 0)) { command_fail(si, fault_nochange, _("You are already a member of group \2%s\2."), parv[0]); return; } if (!(mg->flags & MG_OPEN) && !invited) { command_fail(si, fault_noprivs, _("Group \2%s\2 is not open to anyone joining."), parv[0]); return; } if (groupacs_sourceinfo_has_flag(mg, si, GA_BAN)) { command_fail(si, fault_noprivs, STR_NOT_AUTHORIZED); return; } if (MOWGLI_LIST_LENGTH(&mg->acs) > gs_config->maxgroupacs && (!(mg->flags & MG_ACSNOLIMIT)) && !invited) { command_fail(si, fault_toomany, _("Group \2%s\2 access list is full."), entity(mg)->name); return; } if ((md = metadata_find(mg, "joinflags"))) flags = atoi(md->value); else flags = gs_flags_parser(gs_config->join_flags, 0, flags); ga = groupacs_add(mg, entity(si->smu), flags); if (invited) groupinvite_delete(mg, entity(si->smu)); command_success_nodata(si, _("You are now a member of \2%s\2."), entity(mg)->name); }