remove manager entry from slfh's when a user gets added to the tlfh manager list
[srvx.git] / src / mod-hostserv.c
index 89bcdf47c39b2c8996c9afa23b52f62b367720cf..db4feb53f3dd01b545aacbcf80f240a78633f73e 100644 (file)
@@ -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;
         }