after_sql.pl 2.5 KB

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