after_sql.pl 2.5 KB

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