X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmod-hostserv.c;h=db4feb53f3dd01b545aacbcf80f240a78633f73e;hb=bbe8f3f0bc1ae7c41fb2d1799f9e8fe46d0e5e04;hp=89bcdf47c39b2c8996c9afa23b52f62b367720cf;hpb=9aed69e50327af9ab976e26cad6cf73865350d07;p=srvx.git diff --git a/src/mod-hostserv.c b/src/mod-hostserv.c index 89bcdf4..db4feb5 100644 --- a/src/mod-hostserv.c +++ b/src/mod-hostserv.c @@ -967,8 +967,20 @@ static MODCMD_FUNC(cmd_addmanager) { } if(fhinfo.slfh) hs_add_manager_secondlevel(fhinfo.slfh, huser); - else + else { hs_add_manager_toplevel(fhinfo.tlfh, huser); + //remove from all slfh's + struct hs_manager *next_manager; + struct hs_secondlevel *slfh; + for(manager = huser->managements; manager; manager = next_manager) { + next_manager = manager->next; + if(manager->type == 2) { + slfh = manager->object; + if(slfh->toplevel == fhinfo.tlfh) + hs_del_manager(manager, 1); + } + } + } reply("HSMSG_MANAGER_ADDED", hi->handle, fhinfo.slfh_name, fhinfo.tlfh_name); return 1; } @@ -1004,7 +1016,7 @@ static MODCMD_FUNC(cmd_delmanager) { return 0; } if(fhinfo.slfh) { - for(manager = huser->managements; manager; manager = manager->next) { + for(manager = huser->managements; manager; manager = manager->unext) { if(manager->type == 2 && manager->object == fhinfo.slfh) break; } @@ -1013,7 +1025,7 @@ static MODCMD_FUNC(cmd_delmanager) { return 0; } } else { - for(manager = huser->managements; manager; manager = manager->next) { + for(manager = huser->managements; manager; manager = manager->unext) { if(manager->type == 1 && manager->object == fhinfo.tlfh) break; }