after_sql.pl 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use utf8;
  6. use Encode;
  7. no warnings 'utf8';
  8. use open ':encoding(utf-8)';
  9. use FindBin '$Bin';
  10. use lib "/opt/Eye/scripts";
  11. use eyelib::config;
  12. use eyelib::main;
  13. use eyelib::database;
  14. use strict;
  15. use warnings;
  16. use Data::Dumper;
  17. STDOUT->autoflush(1);
  18. my $upgrade_from = '2.7.9';
  19. my $this_release = '2.8.0';
  20. $dbh=init_db();
  21. init_option($dbh);
  22. my $force = 0;
  23. if ($ARGV[0] and $ARGV[0] eq 'force') { $force = 1; }
  24. if (!$config_ref{version}) {
  25. print "Current version unknown! Skip upgrade!\n";
  26. exit 100;
  27. }
  28. if (!$force and $this_release eq $config_ref{version}) { print "Already updated!\n"; exit; }
  29. if (!$force and $upgrade_from ne $config_ref{version}) { print "Illegal version. Needed $upgrade_from!\n"; exit; }
  30. print 'Apply patch for version: '.$config_ref{version}.' upgrade to: '.$this_release."\n";
  31. my @authlist_ref = get_records_sql($dbh,"SELECT * FROM User_auth WHERE dns_name>''" );
  32. my $total = scalar @authlist_ref;
  33. print "Stage 1: Fix dns name fields\n";
  34. my $i = 0;
  35. foreach my $row (@authlist_ref) {
  36. $i++;
  37. my $percent = int(($i / $total) * 100);
  38. print "\r::Progress: [$percent%] ";
  39. my $dns_name = trim($row->{dns_name});
  40. next unless $dns_name;
  41. my $original_name = $dns_name;
  42. $dns_name =~ s/\.$//g;
  43. $dns_name =~ s/_/-/g;
  44. $dns_name =~ s/ /-/g;
  45. $dns_name =~ s/-$//g;
  46. $dns_name = trim($dns_name);
  47. my $new;
  48. # --- Если имя заканчивается на домен, убираем его
  49. if ($dns_name =~ /\.\Q$domain_name\E$/i) {
  50. $dns_name =~ s/\.\Q$domain_name\E$//i;
  51. $dns_name = trim($dns_name);
  52. $new->{dns_name} = $dns_name if $dns_name;
  53. }
  54. # --- Если домен не указан в конце (возможно, уже очищен), обрабатываем точки
  55. if ($dns_name !~ /\.\Q$domain_name\E$/i) {
  56. $dns_name =~ s/\.\.$//g;
  57. my $dot_count = ($dns_name =~ tr/.//);
  58. if ($dot_count > 1) {
  59. $dns_name .= "." unless $dns_name =~ /\.$/;
  60. } else {
  61. $dns_name =~ s/\.$//g;
  62. }
  63. $new->{dns_name} = $dns_name if $dns_name;
  64. }
  65. # --- Обновляем, только если имя изменилось
  66. if (exists $new->{dns_name} && $new->{dns_name} ne $original_name) {
  67. do_sql($dbh, 'UPDATE User_auth SET dns_name = ? WHERE id = ?', $new->{dns_name}, $row->{id});
  68. }
  69. }
  70. print "Stage 2: Fix systemd units\n";
  71. do_exec("2-8-0/update-services.sh");
  72. print "Done!\n";
  73. exit;