* "hostserv" {
* "nick" "HostServ";
* "modes" "+iok";
- "toplevel_access" "600";
+ * "toplevel_access" "600";
+ * "fallback_other_assignment" "1"; //fall back to another assignment when active assignment gets removed
+ * "manager_can_del_toplevel" "0"; //managers of a toplevel group may delete the whole group
+ * "manager_can_del_secondlevel" "0"; //managers of a secondlevel group may delete the whole group
* };
* };
*
#include "modcmd.h"
#include "saxdb.h"
#include "timeq.h"
-#include "gline.h"
#define KEY_TOPLEVEL "TopLevel"
#define KEY_SECONDLEVEL "SecondLevel"
{ "HSMSG_MANAGER_NOT", "$b%s$b is not a manager of %s.%s" },
{ "HSMSG_MANAGER_DELETED", "$b%s$b is no longer a manager of %s.%s" },
{ "HSMSG_FAKEHOST_ASSIGN_SUCCESS", "Group $b%s.%s$b was assigned successfully." },
+ { "HSMSG_FAKEHOST_ASSIGNED", "Group $b%s.%s$b is already assigned to the user." },
{ "HSMSG_FAKEHOST_UNASSIGN_SUCCESS", "Group $b%s.%s$b was unassigned successfully." },
{ NULL, NULL }
assert((!assignment || (assignment->user == user)));
if(user->assignments) {
- for(assgn = assignment->user->assignments; assgn; assgn = assgn->unext)
+ for(assgn = user->assignments; assgn; assgn = assgn->unext)
assgn->active = 0;
}
if(!irccasecmp(slfh_name, "*")) {
if(!check_management_access(hi, NULL, NULL)) {
reply("HSMSG_ACCESS_DENIED");
- return NULL;
+ return 0;
}
for(tlfh = toplevels; tlfh; tlfh = tlfh->next) {
if(!irccasecmp(tlfh->fakehost, tlfh_name)) break;
struct handle_info *hi;
struct hs_user *hs_user;
struct hs_assignment *assignment;
- struct hs_assignment *assgn;
struct hs_toplevel *tlfh;
struct hs_secondlevel *slfh;
char *fakehost;
reply("HSMSG_ACCESS_DENIED");
return 0;
}
+ if(hs_get_assignment(slfh, hs_user)) {
+ reply("HSMSG_FAKEHOST_ASSIGNED", slfh_name, tlfh_name);
+ return 0;
+ }
hs_add_assignment(slfh, hs_user);
reply("HSMSG_FAKEHOST_ASSIGN_SUCCESS", slfh_name, tlfh_name);
return 1;