| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/perl
- #
- # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
- #
- use utf8;
- use Encode;
- no warnings 'utf8';
- use open ':encoding(utf-8)';
- use FindBin '$Bin';
- use lib "/opt/Eye/scripts";
- use eyelib::config;
- use eyelib::main;
- use eyelib::database;
- use eyelib::common;
- use strict;
- use warnings;
- use Data::Dumper;
- STDOUT->autoflush(1);
- my $upgrade_from = '2.7.9';
- my $this_release = '2.8.0';
- $dbh=init_db();
- init_option($dbh);
- my $force = 0;
- if ($ARGV[0] and $ARGV[0] eq 'force') { $force = 1; }
- if (!$config_ref{version}) {
- print "Current version unknown! Skip upgrade!\n";
- exit 100;
- }
- if (!$force and $this_release eq $config_ref{version}) { print "Already updated!\n"; exit; }
- if (!$force and $upgrade_from ne $config_ref{version}) { print "Illegal version. Needed $upgrade_from!\n"; exit; }
- print 'Apply patch for version: '.$config_ref{version}.' upgrade to: '.$this_release."\n";
- my @authlist_ref = get_records_sql($dbh,"SELECT * FROM User_auth WHERE dns_name>''" );
- my $total = scalar @authlist_ref;
- print "Stage 1: Fix dns name fields\n";
- my $i = 0;
- foreach my $row (@authlist_ref) {
- $i++;
- my $percent = int(($i / $total) * 100);
- print "\r::Progress: [$percent%] ";
- my $dns_name = trim($row->{dns_name});
- next unless $dns_name;
- my $original_name = $dns_name;
- $dns_name =~ s/\.$//g;
- $dns_name =~ s/_/-/g;
- $dns_name =~ s/ /-/g;
- $dns_name =~ s/-$//g;
- $dns_name = trim($dns_name);
- my $new;
- # --- Если имя заканчивается на домен, убираем его
- if ($dns_name =~ /\.\Q$domain_name\E$/i) {
- $dns_name =~ s/\.\Q$domain_name\E$//i;
- $dns_name = trim($dns_name);
- $new->{dns_name} = $dns_name if $dns_name;
- }
- # --- Если домен не указан в конце (возможно, уже очищен), обрабатываем точки
- if ($dns_name !~ /\.\Q$domain_name\E$/i) {
- $dns_name =~ s/\.\.$//g;
- my $dot_count = ($dns_name =~ tr/.//);
- if ($dot_count > 1) {
- $dns_name .= "." unless $dns_name =~ /\.$/;
- } else {
- $dns_name =~ s/\.$//g;
- }
- $new->{dns_name} = $dns_name if $dns_name;
- }
- # --- Обновляем, только если имя изменилось
- if (exists $new->{dns_name} && $new->{dns_name} ne $original_name) {
- do_sql($dbh, 'UPDATE User_auth SET dns_name = ? WHERE id = ?', $new->{dns_name}, $row->{id});
- }
- }
- print "Stage 2: Fix systemd units\n";
- do_exec("2-8-0/update-services.sh");
- print "Done!\n";
- exit;
|