Explorar o código

bugfix: the subnet selection field has been fixed with the deployment of networks greater than /24

Roman Dmitriev hai 2 meses
pai
achega
a66eafce24
Modificáronse 3 ficheiros con 21 adicións e 11 borrados
  1. 1 1
      html/admin/users/index.php
  2. 18 6
      html/inc/common.php
  3. 2 4
      scripts/eye-statd.pl

+ 1 - 1
html/admin/users/index.php

@@ -92,7 +92,7 @@ if ($msg_error) {
         <tr><td><input type=checkbox class="putField" name="e_queue_id" value='1'></td><td align=left><?php print WEB_cell_shaper."</td><td align=right>";print_queue_select($db_link, 'a_queue_id', 0); ?></td></tr>
         <tr><td><input type=checkbox class="putField" name="e_day_q" value='1'></td><td align=left><?php print WEB_cell_perday."</td><td align=right>"; ?><input type="text" name="a_day_q" value="0" size=5></td></tr>
         <tr><td><input type=checkbox class="putField" name="e_month_q" value='1'></td><td align=left><?php print WEB_cell_permonth."</td><td align=right>"; ?><input type="text" name="a_month_q" value="0" size=5></td></tr>
-        <tr><td><input type=checkbox class="putField" name="e_new_ou" value='1'></td><td align=left><?php print WEB_cell_ou."</td><td align=right>";print_ou_select($db_link, 'a_new_ou', $rou); ?></td></tr>
+        <tr><td><input type=checkbox class="putField" name="e_new_ou" value='1'></td><td align=left><?php print WEB_cell_ou."</td><td align=right>";print_ou_set($db_link, 'a_new_ou', 0); ?></td></tr>
         <tr><td><input type=checkbox class="putField" name="e_bind_mac" value='1'></td><td align=left><?php print WEB_user_bind_mac."</td><td align=right>";print_qa_select('a_bind_mac', 1);?></td></tr>
         <tr><td><input type=checkbox class="putField" name="e_bind_ip" value='1'></td><td align=left><?php print WEB_user_bind_ip."</td><td align=right>";print_qa_select('a_bind_ip', 1);?></td></tr>
         <tr><td><input type=checkbox class="putField" name="e_create_netdev" value='1'></td><td align=left><?php print WEB_user_create_netdev."</td><td align=right>";print_qa_select('a_create_netdev', 1);?></td></tr>

+ 18 - 6
html/inc/common.php

@@ -1080,23 +1080,35 @@ function print_subnet_select_office($db, $subnet_name, $subnet_value)
 function print_subnet_select_office_splitted($db, $subnet_name, $subnet_value)
 {
     echo "<select id=\"" . htmlspecialchars($subnet_name) . "\" name=\"" . htmlspecialchars($subnet_name) . "\">\n";
+    
     $t_subnet = get_records_sql($db, "SELECT id, subnet, ip_int_start, ip_int_stop FROM subnets WHERE office = 1 ORDER BY ip_int_start");
-    print_select_item(WEB_select_item_all_ips, 0, $subnet_value);
     
+    print_select_item(WEB_select_item_all_ips, 0, $subnet_value);
+
     foreach ($t_subnet as $row) {
         // Основная подсеть
         print_select_item(htmlspecialchars($row['subnet']), $row['subnet'], $subnet_value);
-        
-        // Разбивка на /24
+
         $cidr = cidrToRange($row['subnet']);
-        $f_start_ip = $row['ip_int_start'];
-        $f_stop_ip = $row['ip_int_stop'];
         
-        if (!empty($cidr[2][1]) && $cidr[2][1] < 24) {
+        // $cidr[2] — это маска (например, 20)
+        if (!empty($cidr[2]) && $cidr[2] < 24) {
+            $f_start_ip = $row['ip_int_start'];
+            $f_stop_ip = $row['ip_int_stop'];
+
+            // Выравниваем начало до границы /24
+            $f_start_ip = floor($f_start_ip / 256) * 256;
+
             while ($f_start_ip <= $f_stop_ip) {
+                $next_block_end = $f_start_ip + 255;
+                if ($next_block_end > $f_stop_ip) {
+                    break;
+                }
+
                 $ip_24 = long2ip($f_start_ip) . "/24";
                 $display = "&nbsp;&nbsp;-&nbsp;" . htmlspecialchars($ip_24);
                 print_select_item($display, $ip_24, $subnet_value);
+
                 $f_start_ip += 256;
             }
         }

+ 2 - 4
scripts/eye-statd.pl

@@ -192,7 +192,7 @@ sub refresh_config {
         $user_stats{$row->{ip}}{out}       = 0;
         $user_stats{$row->{ip}}{pkt_in}    = 0;
         $user_stats{$row->{ip}}{pkt_out}   = 0;
-        $user_stats{$row->{ip}}{last_found}= time();
+        $user_stats{$row->{ip}}{last_found}= 0;
     }
     log_verbose("Found " . $save_traf_count . " active ip-addresses with full save traffic log");
 
@@ -863,12 +863,10 @@ log_debug("The user statistics calculation started");
 
 # update database
 foreach my $user_ip (keys %user_stats) {
-    next if (!exists $user_stats{$user_ip});
+    next if (!exists $user_stats{$user_ip} || !$user_stats{$user_ip}{last_found});
     my $user_ip_aton=StrToIp($user_ip);
     my $auth_id = $user_stats{$user_ip}{auth_id};
 
-    if (!$user_stats{$user_ip}{last_found}) { $user_stats{$user_ip}{last_found} = time(); }
-
     #last flow for user
     my ($sec,$min,$hour,$day,$month,$year) = (localtime($user_stats{$user_ip}{last_found}))[0,1,2,3,4,5];
     #flow time string