diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index 0253fadc2..095218940 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -2,7 +2,7 @@ # # ========================================================================== # -# ZoneMinder Update Script, $Date$, $Revision$ +# ZoneMinder Update Script # Copyright (C) 2001-2008 Philip Coombes # # This program is free software; you can redistribute it and/or @@ -31,29 +31,29 @@ zmupdate.pl -c,--check | -f,--freshen | -v,--version= [-u , --version= - Force upgrade to the current version from --u , --user= - Alternate DB user with privileges to alter DB --p , --pass= - Password of alternate DB user with privileges to alter DB --s, --super - Use system maintenance account on debian based systems instead of unprivileged account --d , --dir= - Directory containing update files if not in default build location --interactive - interact with the user --nointeractive - do not interact with the user + -c, --check - Check for updated versions of ZoneMinder. + If not interactive zmupdate.pl will stay running, checking every hour. + If interactive will try once, print out result and quit. + -f, --freshen - Freshen the configuration in the database. Equivalent of old zmconfig.pl -noi + --migrate-events - Update database structures as per USE_DEEP_STORAGE setting. + -v , --version= - Force upgrade to the current version from + -u , --user= - Alternate DB user with privileges to alter DB + -p , --pass= - Password of alternate DB user with privileges to alter DB + -s, --super - Use system maintenance account on debian based systems instead of unprivileged account + -d , --dir= - Directory containing update files if not in default build location + -interactive - interact with the user + -nointeractive - do not interact with the user =cut use strict; use bytes; use version; -use Crypt::Eksblowfish::Bcrypt; -use Data::Entropy::Algorithms qw(rand_bits); # ========================================================================== # @@ -122,9 +122,8 @@ GetOptions( ) or pod2usage(-exitstatus => -1); my $dbh = zmDbConnect(undef, { mysql_multi_statements=>1 } ); -if ( !$dbh ) { - die "Unable to connect to db\n"; -} +die "Unable to connect to db\n" if !$dbh; + $Config{ZM_DB_USER} = $dbUser; $Config{ZM_DB_PASS} = $dbPass; # we escape dbpass with single quotes so that $ in the password has no effect, but dbpass could have a ' in it. @@ -181,6 +180,7 @@ if ( $check && $Config{ZM_CHECK_FOR_UPDATES} ) { Info('Got version: '.$lastVersion); + my $lv_sql = 'UPDATE Config SET Value = ? WHERE Name = \'ZM_DYN_LAST_VERSION\''; my $lv_sth = $dbh->prepare_cached($lv_sql) or die("Can't prepare '$lv_sql': ".$dbh->errstr()); my $lv_res = $lv_sth->execute($lastVersion) or die("Can't execute: ".$lv_sth->errstr()); @@ -190,6 +190,11 @@ if ( $check && $Config{ZM_CHECK_FOR_UPDATES} ) { my $lc_sth = $dbh->prepare_cached($lc_sql) or die("Can't prepare '$lc_sql': ".$dbh->errstr()); my $lc_res = $lc_sth->execute($lastCheck) or die("Can't execute: ".$lc_sth->errstr()); $lc_sth->finish(); + if ($interactive) { +print("Hello"); + print("Latest version $lastVersion, our version " . ZM_VERSION."\n"); + exit(0); + } } else { Error('Error check failed: \''.$res->status_line().'\''); } @@ -1044,14 +1049,16 @@ sub patchDB { } # end sub patchDB sub migratePasswords { - print ("Migratings passwords, if any...\n"); + use Crypt::Eksblowfish::Bcrypt; + use Data::Entropy::Algorithms qw(rand_bits); + print("Migratings passwords, if any...\n"); my $sql = 'SELECT * FROM `Users`'; my $sth = $dbh->prepare_cached($sql) or die( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute() or die("Can't execute: ".$sth->errstr()); - while( my $user = $sth->fetchrow_hashref() ) { + while ( my $user = $sth->fetchrow_hashref() ) { my $scheme = substr($user->{Password}, 0, 1); if ($scheme eq '*') { - print ('-->'.$user->{Username}." password will be migrated\n"); + print('-->'.$user->{Username}." password will be migrated\n"); my $salt = Crypt::Eksblowfish::Bcrypt::en_base64(rand_bits(16*8)); my $settings = '$2a$10$'.$salt; my $pass_hash = Crypt::Eksblowfish::Bcrypt::bcrypt($user->{Password},$settings);