bugfix in function to revoke an assignment.
[srvx.git] / src / mod-hostserv.c
index da02cbb6c431afd111b882124a78e2ea5fc33d17..d97ed83fceaaa304e84aa6f7e8257b32d753cadc 100644 (file)
@@ -58,7 +58,6 @@ static const struct message_entry msgtab[] = {
     { "HSMSG_MANAGED_FAKEHOST", "  $b%s.%s$b   assignments: %d" },
     { "HSMSG_MANAGE_HOWTO", "Use $bview xxx.yyy$b to view more information about a fakehost group." },
     { "HSMSG_UNKNOWN_FAKEHOST", "Fakehost $b%s.%s$b is unknown or you have no access to manage it." },
-    { "HSMSG_UNKNOWN_FAKEHOST_TOPLEVEL", "Fakehost $b%s$b is unknown or you have no access to manage it." },
     { "HSMSG_TOPLEVEL_FAKEHOSTS", "Fakehosts in group $b*.%s$b:" },
     { "HSMSG_TOPLEVEL_FAKEHOST", "  $b%s.%s$b   assignments: %d   managers: %d" },
     { "HSMSG_TOPLEVEL_INVALID", "The name of the group you entered is invalid ($b%s$b)" },
@@ -452,8 +451,6 @@ static void hs_del_assignment(struct hs_assignment *assignment, int remove_from_
             } else
                 prev_assignment = cassignment;
         }
-        if(assignment->user->managements == NULL && assignment->user->assignments == NULL)
-            hs_del_user(assignment->user);
         
         if(assignment->active) {
             struct handle_info *hi;
@@ -462,6 +459,9 @@ static void hs_del_assignment(struct hs_assignment *assignment, int remove_from_
             hi->fakehost = NULL;
             apply_fakehost(hi, NULL);
         }
+        
+        if(assignment->user->managements == NULL && assignment->user->assignments == NULL)
+            hs_del_user(assignment->user);
     }
     free(assignment);
 }
@@ -1121,7 +1121,7 @@ static MODCMD_FUNC(cmd_revoke) {
     for(assignment = hs_user->assignments; assignment; assignment = assignment->unext) {
         if(!irccasecmp(slfh_name, assignment->secondlevel->fakehost)) {
             if(!irccasecmp(tlfh_name, assignment->secondlevel->toplevel->fakehost)) {
-                if(check_management_access(hi, assignment->secondlevel->toplevel, assignment->secondlevel)) {
+                if(check_management_access(hiuser, assignment->secondlevel->toplevel, assignment->secondlevel)) {
                     hs_del_assignment(assignment, 1);
                     reply("HSMSG_FAKEHOST_REVOKE_SUCCESS", slfh_name, tlfh_name);
                     return 1;