Browse Source

new: When you change the ip or mac, a new record is created and the old record is deleted
bugfix: set changed at delete auth record
bugfix: stat-sync processes any changes auth records

rajven 5 năm trước cách đây
mục cha
commit
29d937ee6a
3 tập tin đã thay đổi với 46 bổ sung15 xóa
  1. 7 1
      html/admin/users/editauth.php
  2. 38 13
      html/inc/common.php
  3. 1 1
      scripts/stat-sync.pl

+ 7 - 1
html/admin/users/editauth.php

@@ -79,7 +79,13 @@ if (isset($_POST["editauth"]) and !$old_auth_info['deleted']) {
             }
         $changes = get_diff_rec($db_link,"User_auth","id='$id'", $new, 0);
         if (!empty($changes)) { LOG_WARNING($db_link,"Изменен адрес доступа! Список изменений: $changes"); }
-        update_record($db_link, "User_auth", "id='$id'", $new);
+        if (is_auth_bind_changed($db_link,$id,$ip,$mac)) {
+            $new_id = copy_auth($db_link,$id,$new);
+            header("Location: /admin/users/editauth.php?id=".$new_id,TRUE, 302);
+            exit;
+            } else {
+            update_record($db_link, "User_auth", "id='$id'", $new);
+            }
     } else {
 	$msg_error = "$msg_ip_error xxx.xxx.xxx.xxx";
         $_SESSION[$page_url]['msg'] = $msg_error;

+ 38 - 13
html/inc/common.php

@@ -2753,6 +2753,29 @@ function get_record_sql($db, $sql)
     return $result;
 }
 
+function is_auth_bind_changed ($db, $id, $ip,$mac) {
+$old_sql = "SELECT ip,mac FROM User_auth WHERE id=$id";
+$old_record = get_record_sql($db, $old_sql);
+if (empty($old_record["ip"]) or empty($old_record["mac"])) { return 0; }
+if ($old_record["ip"] !== $ip or $old_record["mac"] !== $mac) {
+        LOG_VERBOSE($db, "Changed ip or mac for auth record!");
+        return 1;
+        }
+return 0;
+}
+
+function copy_auth($db, $id, $new_auth) {
+$old_record = get_record_sql($db, "SELECT * FROM User_auth WHERE id=$id");
+delete_record($db,"User_auth","id=".$id);
+$new_auth["user_id"] = $old_record["user_id"];
+$new_auth["changed"] = 1;
+$changed_time = GetNowTimeString();
+$new_auth["changed_time"]=$changed_time;
+$new_id = insert_record($db,"User_auth",$new_auth);
+LOG_VERBOSE($db, "Old record with id: $id deleted. Created new auth record for new ip+mac id: $new_id!");
+return $new_id;
+}
+
 function update_record($db, $table, $filter, $newvalue)
 {
     if (isRO($db)) {
@@ -2781,6 +2804,20 @@ function update_record($db, $table, $filter, $newvalue)
     $changed_log = '';
     $run_sql = '';
     $network_changed = 0;
+
+    $acl_fields = [
+    'ip' => '1',
+    'ip_int' => '1',
+    'enabled'=>'1',
+    'dhcp'=>'1',
+    'filter_group_id'=>'1',
+    'deleted'=>'1',
+    'dhcp_acl'=>'1',
+    'queue_id'=>'1',
+    'mac'=>'1',
+    'blocked'=>'1',
+    ];
+
     foreach ($newvalue as $key => $value) {
         if (! isset($value)) {
             $value = '';
@@ -2790,18 +2827,6 @@ function update_record($db, $table, $filter, $newvalue)
             continue;
         }
         if ($table==="User_auth") {
-    	    $acl_fields = [
-    	    'ip' => '1',
-    	    'ip_int' => '1',
-    	    'enabled'=>'1',
-    	    'dhcp'=>'1',
-    	    'filter_group_id'=>'1',
-    	    'deleted'=>'1',
-    	    'dhcp_acl'=>'1',
-    	    'queue_id'=>'1',
-    	    'mac'=>'1',
-    	    'blocked'=>'1',
-    	    ];
     	    if (!empty($acl_fields["$key"])) { $network_changed = 1; }
     	    }
         $changed_log = $changed_log . " $key => $value (old: $old[$key]),";
@@ -2854,7 +2879,7 @@ function delete_record($db, $table, $filter)
     //never delete user ip record
     if ($table === 'User_auth') {
         $changed_time = GetNowTimeString();
-        $new_sql = "UPDATE $table SET deleted=1, `changed_time`='".$changed_time."' WHERE $filter";
+        $new_sql = "UPDATE $table SET deleted=1, changed=1, `changed_time`='".$changed_time."' WHERE $filter";
         LOG_DEBUG($db, "Run sql: $new_sql");
         mysqli_query($db, $new_sql);
         } else {

+ 1 - 1
scripts/stat-sync.pl

@@ -85,7 +85,7 @@ if (!$pid) {
         if ( !defined $hdb ) { die "Cannot connect to mySQL server: $DBI::errstr\n"; }
         $urgent_sync=get_option($hdb,50);
         if ($urgent_sync) {
-            my @changed = get_records_sql($hdb,"SELECT * from User_auth WHERE deleted=0 and changed=1 and (user_id<>".$default_user_id." and user_id<>".$hotspot_user_id.")");
+            my @changed = get_records_sql($hdb,"SELECT * from User_auth WHERE changed=1 and (user_id<>".$default_user_id." and user_id<>".$hotspot_user_id.")");
 	    if (@changed and scalar @changed>0) {
                 log_info("Found changed records: ".Dumper(\@changed));
     	        my %result=do_exec_ref($HOME_DIR."/sync_mikrotik.pl");