--- rpms/e-smith-backup/sme8/e-smith-backup-2.2.0-nolowercase.patch 2010/02/15 10:18:55 1.1
+++ rpms/e-smith-backup/sme8/e-smith-backup-2.2.0-nolowercase.patch 2011/06/14 18:28:35 1.2
@@ -31,3278 +31,3 @@ diff -urN e-smith-backup-2.2.0/root/etc/
if ($vollbl eq $share) {
$device = $blkdev;
}
-diff -urN e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup.orig e-smith-backup-2.2.0.new/root/etc/e-smith/web/functions/backup.orig
---- e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup.orig 2010-02-15 20:54:05.000000000 +1100
-+++ e-smith-backup-2.2.0.new/root/etc/e-smith/web/functions/backup.orig 1970-01-01 10:00:00.000000000 +1000
-@@ -1,3271 +0,0 @@
--#!/usr/bin/perl -wT
--#----------------------------------------------------------------------
--# heading : Administration
--# description : Backup or restore
--# navigation : 4000 4200
--# Copyright (C) 2002 Mitel Networks Corporation
--#
--# This program is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
--# (at your option) any later version.
--#
--# This program is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--# GNU General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--#
--# Technical support for this program is available from Mitel Networks
--# Please visit our web site www.mitel.com/sme/ for details.
--#----------------------------------------------------------------------
--use strict;
--use esmith::FormMagick;
--use esmith::ConfigDB;
--use esmith::Backup;
--use esmith::BackupHistoryDB;
--use esmith::AccountsDB;
--use esmith::cgi;
--use esmith::util;
--use esmith::lockfile;
--use File::Find;
--
--$File::Find::dont_use_nlink = 1; # fix for Windows shares
--
--my $fm = esmith::FormMagick->new();
--
--# These statements _must_ come _after_ the FormMagick constructor. It sets
--# POST_MAX and DISABLE_UPLOADS to values that will cause this script to fail
--# on restores and verification of files.
--$CGI::POST_MAX = -1; # allow any size POST
--$CGI::DISABLE_UPLOADS = 0; # need to upload to restore from desktop
--
--$fm->parse_xml();
--
--my $conf = esmith::ConfigDB->open()
-- || die $fm->localise('CANNOT_OPEN').'configuration db';
--
--my $restore = esmith::ConfigDB->open('/etc/e-smith/restore')
-- || die $fm->localise('CANNOT_OPEN').'/etc/e-smith/restore';
--
--my $es_backup = new esmith::Backup or die "Couldn't create Backup object\n";
--
--my @directories = $es_backup->restore_list;
--@directories = grep { -e "/$_" } @directories;
--
--# Unbuffer standard output so that files and directories are listed as
--# they are restored
--$| = 1;
--
--# Store away current gid of 'www' group.
--my $www_gid = getgrnam("www");
--
--#------------------------------------------------------------
--# examine state parameter and display the appropriate form
--#------------------------------------------------------------
--
--my $q = $fm->{cgi};
--
--if (! grep (/^state$/, $q->param))
--{
-- showInitial ($q, '');
--}
--elsif ($q->param ('state') eq "perform")
--{
-- performAndShowResult ($q);
--}
--elsif ($q->param ('state') eq "tape-configure")
--{
-- updateTapeBackupConfig($q);
--}
--elsif ($q->param ('state') eq "tape-restore")
--{
-- performTapeRestore ($q);
--}
--elsif ($q->param ('state') eq "workstn-configure")
--{
-- WorkstnBackupConfig1($q);
--}
--elsif ($q->param ('state') eq "workstn-configure1")
--{
-- updateWorkstnBackupConfig($q);
--}
--elsif ($q->param ('state') eq "workstn-verify")
--{
-- performWorkstnVerify($q);
--}
--elsif ($q->param ('state') eq "workstn-restore")
--{
-- performWorkstnRestore ($q);
--}
--elsif ($q->param ('state') eq "workstn-sel-restore")
--{
-- performWorkstnSelRestore ($q);
--}
--elsif ($q->param ('state') eq "workstn-sel-restore2")
--{
-- performWorkstnSelRestore2 ($q);
--}
--else
--{
-- esmith::cgi::genStateError ($q, undef);
--}
--
--exit (0);
--
--#------------------------------------------------------------
--# subroutine to display initial form
--#------------------------------------------------------------
--
--sub showInitial
--{
-- my ($q, $msg) = @_;
--
-- my $rec = $restore->get('restore');
-- if($msg eq '')
-- {
-- if($rec)
-- {
-- $msg = $rec->prop('errmsg') || '';
-- $rec->delete_prop('errmsg');
-- }
-- }
--
-- if ($msg eq '')
-- {
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('BACKUP_TITLE'));
-- }
-- else
-- {
-- esmith::cgi::genHeaderNonCacheable
-- ($q, undef, $fm->localise('OPERATION_STATUS_REPORT'));
--
-- print $q->div ({-class => "sme-error"}, $msg);
-- print $q->hr;
-- }
-- print $q->div({-class => 'error'},
-- $q->h5('Warning: a reboot is required before proceeding!
-- Failure to reboot now may leave your system in an unknown
-- state!'))
-- if $conf->get_prop('bootstrap-console', 'Run') eq 'yes';
--
-- my ($tarsize, $dumpsize, undef, undef) = &CalculateSizes();
--
-- my $module = $conf->get('backup');
-- if ($module)
-- {
-- $module = $module->prop('Program');
-- }
--
-- # The default e-smith backup program is flexbackup.
--
-- unless (defined $module)
-- {
-- $module = "flexbackup";
-- }
-- elsif ($module eq '')
-- {
-- $module = "flexbackup";
-- }
--
-- # Hack to evaluate embedded vars
-- print eval 'return "'.$fm->localise('BACKUP_DESC_DAR').'\n";';
--
-- if ($tarsize =~ /Tb/ or $tarsize =~ /(\d+)Gb/ and $1 >= 2)
-- {
-- print $fm->localise("BACKUP_DESKTOP_TOO_BIG"), "\n";
-- }
--
-- print $q->h2($fm->localise("BACKUP_CONFIG_STATUS")),"\n";
--
-- my $backup_status = $conf->get('backup');
-- if ($backup_status)
-- {
-- $backup_status = $backup_status->prop('status');
-- }
--
-- if (defined $backup_status && $backup_status eq "enabled")
-- {
-- my $backupTime = $conf->get('backup')->prop('backupTime');
-- my $reminderTime = $conf->get('backup')->prop('reminderTime');
--
-- print $q->p ($fm->localise('TAPE_BACKUPS_ENABLED'),
-- $fm->localise('BACKUPS_RUN_AT'),$q->b($backupTime),
-- $fm->localise('REMINDER_MESSAGE_AT'),$q->b($reminderTime)),
-- "\n";
-- }
-- else
-- {
-- print $q->p($fm->localise('TAPE_BACKUPS_DISABLED')),"\n";
-- }
--
-- my $backupwk_status = $conf->get('backupwk');
-- if ($backupwk_status)
-- {
-- $backupwk_status = $backupwk_status->prop('status');
-- }
--
-- if (defined $backupwk_status && $backupwk_status eq "enabled")
-- {
-- my $backupwkTime = $conf->get('backupwk')->prop('BackupTime');
--
-- print $q->p ($fm->localise('WORKSTN_BACKUPS_ENABLED'),
-- $fm->localise('WKBACKUPS_RUN_AT'),$q->b($backupwkTime));
-- }
-- else
-- {
-- print $q->p($fm->localise('WORKSTN_BACKUPS_DISABLED'));
-- }
--
-- my %labels = (
-- "desktop-backup" => $fm->localise('DESKTOP_BACKUP'),
-- "tape-configure" => $fm->localise('TAPE_CONFIGURE'),
-- "tape-restore" => $fm->localise('TAPE_RESTORE'),
-- "workstn-configure" => $fm->localise('WORKSTN_CONFIGURE'),
-- "workstn-verify" => $fm->localise('WORKSTN_VERIFY'),
-- "workstn-restore" => $fm->localise('WORKSTN_RESTORE'),
-- "workstn-sel-restore" => $fm->localise('WORKSTN_SEL_RESTORE'),
-- );
--
-- my @labels = (
-- 'desktop-backup',
-- 'tape-configure',
-- 'tape-restore',
-- 'workstn-configure',
-- 'workstn-verify',
-- 'workstn-restore',
-- 'workstn-sel-restore',
-- );
--
-- my $default_action = 'desktop-backup';
--
-- my $restore_state;
-- if($rec)
-- {
-- $restore_state = $rec->prop('state');
-- }
--
-- unless (defined $restore_state)
-- {
-- # Undefined, set it to idle
-- if ($rec)
-- {
-- $rec->reset_props(type=>'status', state=>'idle', finish=>0,
-- start=>0);
-- }
-- else
-- {
-- $rec = $restore->new_record('restore',
-- {type=>'status', state=>'idle', finish=>0, start=>0});
-- }
-- $restore_state = 'idle';
-- }
-- elsif ($restore_state eq 'running')
-- {
-- my $start = $rec->prop('start');
-- $start = scalar localtime($start);
--
-- print $q->p ($fm->localise('RESTORE_IN_PROGRESS_BEGAN_AT')
-- . "$start.\n" );
--
-- %labels = (
-- "refresh" => $fm->localise('REFRESH_THIS_DISPLAY'),
-- "tape-configure" => $fm->localise('CONFIGURE_TAPE_BACKUP'),
-- "workstn-configure" => $fm->localise('CONFIGURE_WORKSTN_BACKUP'),
-- );
--
-- @labels = (
-- 'refresh',
-- 'tape-configure',
-- 'workstn-configure',
-- );
--
-- $default_action = 'refresh';
-- }
-- elsif ($restore_state eq 'complete')
-- {
-- my $start = $rec->prop('start');
-- $start = scalar localtime($start);
-- my $finish = $rec->prop('finish');
-- $finish = scalar localtime($finish);
--
-- print $q->p ($fm->localise('RESTORE_COMPLETED'),$q->br(),
-- $fm->localise('STARTED_AT'),$q->b($start),$q->br(),
-- $fm->localise('FINISHED_AT'),$q->b($finish)),"\n";
--
-- print $q->p (
-- $q->b ($fm->localise('YOU_MUST_REBOOT')
-- )
-- ),"\n";
--
-- $default_action = 'reboot';
-- }
-- else
-- {
-- # Unknown state. Reset it to idle
--
-- $rec->set_prop('state', 'idle');
-- $restore_state = 'idle';
-- }
--
-- print $q->startform(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- ),"\n";
--
-- print $q->start_table ({-class => "sme-noborders"}),"\n";
--
-- if ($default_action eq 'reboot')
-- {
-- print $q->start_table ({width => "100%", -class => "sme-noborders"}),"\n";
-- print esmith::cgi::genButtonRow(
-- $q,
-- $q->submit (-name => 'action', -value =>
-- $fm->localise('REBOOT'))
-- );
-- # Put in a hidden widget to store the reboot value.
-- print $q->hidden(
-- -name => 'function',
-- -value => 'reboot'
-- ),"\n";
-- print $q->end_table,"\n";
-- }
-- else
-- {
-- print $q->Tr(
-- $q->td({-class => "sme-noborders-label"},
-- $fm->localise("SELECT_AN_ACTION")),
-- $q->td({-class => "sme-noborders-content"},
-- $q->popup_menu (
-- -name => 'function',
-- -values => [ @labels ],
-- -default => $default_action,
-- -labels => \%labels
-- )
-- )
-- ),"\n";
--
-- }
--
-- print $q->end_table,"\n";
--
-- if ($default_action ne 'reboot')
-- {
-- print $q->start_table ({width => "100%", -class => "sme-noborders"}),
-- "\n";
--
-- print esmith::cgi::genButtonRow(
-- $q,
-- $q->submit (-name => 'action', -value =>
-- $fm->localise('PERFORM'))
-- );
--
-- print $q->end_table,"\n";
-- }
--
-- print $q->hidden (
-- -name => 'state',
-- -override => 1,
-- -default => 'perform'
-- ),"\n";
--
-- print $q->endform,"\n";
--
-- esmith::cgi::genFooter($fm);
--
-- return;
--}
--
--sub performAndShowResult
--{
-- my ($q) = @_;
--
-- my $function = $q->param ('function');
--
-- if ($function eq 'refresh')
-- {
-- showInitial ($q, '');
-- }
-- elsif ($function eq 'reboot')
-- {
-- performReboot();
-- }
-- elsif ($function eq 'desktop-backup')
-- {
-- desktopBackup();
-- }
-- elsif ($function eq 'tape-configure')
-- {
-- TapeBackupConfig ($q);
-- }
-- elsif ($function eq 'tape-restore')
-- {
-- tapeRestore();
-- }
-- elsif ($function eq 'workstn-configure')
-- {
-- WorkstnBackupConfig ($q);
-- }
-- elsif ($function eq 'workstn-verify')
-- {
-- workstnVerify();
-- }
-- elsif ($function eq 'workstn-restore')
-- {
-- workstnRestore();
-- }
-- elsif ($function eq 'workstn-sel-restore')
-- {
-- workstnSelRestore();
-- }
-- else
-- {
-- # Unknown function - refresh the screen anyway
-- showInitial ($q, 'unknown');
-- }
--
-- return;
--
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise("X_BACKUP_OR_RESTORE"));
-- print $q->p ( $function );
-- esmith::cgi::genFooter($fm);
--}
--
--sub desktopBackupRecordStatus
--{
-- my ($backup, $phase, $status) = @_;
-- my $now = time();
--
-- warn("Backup terminated: $phase failed - status: $status\n");
-- $backup->set_prop('EndEpochTime', "$now");
-- $backup->set_prop('Result', "$phase:$status");
--}
--
--sub desktopBackup ()
--{
-- # Generate a header that will trigger a download and send data as
-- # an octet stream.
--
-- my $backups = esmith::BackupHistoryDB->open;
-- my $now = time();
-- my $backup_rec = $backups->new_record($now, {
-- type => 'backup_record',
-- BackupType => 'desktop',
-- StartEpochTime => $now,
-- });
--
-- # Dump the current mysql tables so that they are part of the image.
-- # The events handle cases where mysqld is not enabled, and/or is
-- # not running.
--
-- my $status = system("/sbin/e-smith/signal-event", "pre-backup", "desktop");
-- if ($status)
-- {
-- desktopBackupRecordStatus($backup_rec, 'pre-backup', $status);
-- esmith::cgi::genHeaderNonCacheable(
-- $fm->{cgi},
-- undef, $fm->localise('OPERATION_STATUS_REPORT'));
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_PRE_BACKUP'));
-- return;
-- }
--
-- print "Expires: 0\n";
-- print "Content-type: application/octet-stream\n";
-- print "Content-disposition: attachment; filename=smeserver.tgz\n";
-- print "\n";
-- setpgrp;
-- my $ourpgrp = getpgrp;
-- local $SIG{PIPE} = sub
-- {
-- local $SIG{HUP} = 'IGNORE';
-- warn "Got sigpipe - sending HUP to $ourpgrp\n";
-- kill HUP => -$ourpgrp;
-- desktopBackupRecordStatus($backup_rec,
-- 'send2browser', 'Incomplete');
-- exit 1;
-- };
--
-- open(RD,
-- "/bin/tar --directory / --create @directories --file=-"
-- . " | /usr/bin/gzip |"
-- );
--
-- while ()
-- {
-- print;
-- }
--
-- close RD;
--
-- # Remove the dumped tables.
--
-- $status = system("/sbin/e-smith/signal-event", "post-backup", "desktop");
-- if ($status)
-- {
-- desktopBackupRecordStatus($backup_rec, 'post-backup', $status);
-- die ($fm->localise('ERR_POST_BACKUP'),"\n");
-- }
-- $now = time();
-- $backup_rec->set_prop('EndEpochTime', "$now");
-- $backup_rec->set_prop('Result', "0");
--}
--
--sub TapeBackupConfig
--{
-- my ($q) = @_;
-- my $enabledChk = "";
-- my $backupAMPM = 'AM';
-- my $backupMin;
-- my $backupHour;
-- my $reminderAMPM = 'AM';
-- my $reminderMin;
-- my $reminderHour;
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise('ENABLE_DISABLE_TAPE'));
--
-- print $q->p ($fm->localise('TAPE_CONFIG_DESC'));
--
-- # Obtain time for backup from the backup cron template
-- my $rec = $conf->get('backup');
-- my $backupTime = "2:00";
-- if ($rec)
-- {
-- $backupTime = $rec->prop('backupTime') || "2:00";
-- }
--
-- ($backupHour, $backupMin) = split (":", $backupTime, -1);
--
-- if ($backupHour > 11)
-- {
-- if ($backupHour > 12)
-- {
-- $backupHour -= 12;
-- }
-- $backupAMPM = 'PM';
-- }
--
-- # Obtain time for reminder notice from the backup cron template
-- my $reminderTime = "14:00";
-- if ($rec)
-- {
-- $reminderTime = $rec->prop('reminderTime') || "14:00";
-- }
--
-- ($reminderHour, $reminderMin) = split (":", $reminderTime, -1);
--
-- if ($reminderHour > 12)
-- {
-- $reminderHour -= 12;
-- $reminderAMPM = 'PM';
-- }
--
-- print $q->startform(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->start_table ({-class => "sme-noborders"});
--
-- my $backup_status;
-- if ($rec)
-- {
-- $backup_status = $rec->prop('status');
-- }
--
-- if (defined $backup_status && $backup_status eq "enabled")
-- {
-- $enabledChk = "checked";
-- }
--
-- print $q->Tr(
-- $q->td(
-- $fm->localise('ENABLE_TAPE_BACKUP')
-- . " "
-- )
-- );
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,$fm->localise('TAPE_BACKUP_TIME')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupHour',
-- -override => 1,
-- -default => $backupHour,
-- -size => 2)),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupMin',
-- -override => 1,
-- -default => $backupMin,
-- -size => 2)),
--
-- esmith::cgi::genCell ($q, "AM/PM:"),
--
-- esmith::cgi::genCell ($q, $q->popup_menu (-name => 'backupAMPM',
-- -values => ['AM', 'PM'],
-- -default => $backupAMPM)));
--
-- my %timelabels=('AM' => $fm->localise('AM'),'PM' => $fm->localise('PM'));
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q, $fm->localise('LOAD_TAPE_REMINDER_TIME')
-- ),
--
-- esmith::cgi::genCell(
-- $q,
-- $q->textfield(
-- -name => 'reminderHour',
-- -override => 1,
-- -default => $reminderHour,
-- -size => 2
-- )
-- ),
--
-- esmith::cgi::genCell(
-- $q,
-- $q->textfield(
-- -name => 'reminderMin',
-- -override => 1,
-- -default => $reminderMin,
-- -size => 2
-- )
-- ),
--
-- esmith::cgi::genCell($q, $fm->localise("AM/PM").":"),
--
-- esmith::cgi::genCell(
-- $q,
-- $q->popup_menu(
-- -name => 'reminderAMPM',
-- -values => ['AM', 'PM'],
-- -labels => \%timelabels,
-- -default => $reminderAMPM
-- )
-- )
-- );
--
-- print "\n";
-- print $q->start_table ({width => "100%", -class => "sme-noborders"});
-- print $q->Tr($q->th({-class => "sme-layout"},
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('UPDATE_CONF')
-- )
-- )
-- );
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'tape-configure'
-- );
--
-- print $q->endform;
-- print '';
--
-- esmith::cgi::genFooter($fm);
-- return;
--}
--
--sub updateTapeBackupConfig
--{
-- my ($q) = @_;
--
-- my $status = $q->param ('tapebackup');
-- my $ampm;
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('UPDATING_TAPE_CONF')
-- );
--
-- if (defined $status && $status eq "on")
-- {
--
-- #--------------------------------------------------
-- # Untaint parameters and check for validity
-- #--------------------------------------------------
--
-- my $backupHour = $q->param ('backupHour');
-- if ($backupHour =~ /^(.*)$/) {
-- $backupHour = $1;
-- } else {
-- $backupHour = "12";
-- }
-- if (($backupHour < 1) || ($backupHour > 12))
-- {
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_INVALID_HOUR').$backupHour.
-- $fm->localise('BETWEEN_1_AND_12')
-- );
--
-- return;
-- }
--
-- my $backupMin = $q->param ('backupMin');
-- if ($backupMin =~ /^(.*)$/) {
-- $backupMin = $1;
-- } else {
-- $backupMin = "0";
-- }
-- if (($backupMin < 0) || ($backupMin > 59))
-- {
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_INVALID_MINUTE').$backupMin.
-- $fm->localise('BETWEEN_0_AND_59')
-- );
--
-- return;
-- }
--
-- $backupMin = sprintf("%02d", $backupMin);
--
-- $ampm = $q->param ('backupAMPM');
-- if ($ampm =~ /^(.*)$/) {
-- $ampm = $1;
-- } else {
-- $ampm = "AM";
-- }
--
-- # convert to 24 hour time
--
-- $backupHour = $backupHour % 12;
-- if ($ampm eq "PM")
-- {
-- $backupHour = $backupHour + 12;
-- }
--
-- my $reminderHour = $q->param ('reminderHour');
-- if ($reminderHour =~ /^(.*)$/) {
-- $reminderHour = $1;
-- } else {
-- $reminderHour = "12";
-- }
-- if (($reminderHour < 1) || ($reminderHour > 12))
-- {
-- esmith::cgi::genResult(
-- $fm->{cgi},
-- $fm->localise('ERR_INVALID_REMINDER_HOUR').$reminderHour
-- .$fm->localise('BETWEEN_1_AND_12')
-- );
--
-- return;
-- }
--
-- my $reminderMin = $q->param ('reminderMin');
-- if ($reminderMin =~ /^(.*)$/) {
-- $reminderMin = $1;
-- } else {
-- $reminderMin = "0";
-- }
-- if (($reminderMin < 0) || ($reminderMin > 59))
-- {
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_INVALID_REMINDER_MINUTE').
-- $reminderMin.$fm->localise('BETWEEN_0_AND_59')
-- );
-- return;
-- }
--
-- $reminderMin = sprintf("%02d", $reminderMin);
--
-- $ampm = $q->param ('reminderAMPM');
-- if ($ampm =~ /^(.*)$/) {
-- $ampm = $1;
-- } else {
-- $ampm = "AM";
-- }
--
-- # convert to 24 hour time
--
-- $reminderHour = $reminderHour % 12;
-- if ($ampm eq "PM")
-- {
-- $reminderHour = $reminderHour + 12;
-- }
--
-- # variables passed validity checks, set configuration database values
-- my $old = $conf->get('UnsavedChanges')->value;
--
-- my $rec = $conf->get('backup');
-- unless (defined $rec)
-- {
-- $rec = $conf->new_record('backup', {type=>'service'});
-- }
--
-- $rec->set_prop('status', 'enabled');
--
-- my $module = $rec->prop('Program');
--
-- # The default e-smith backup program is flexbackup.
--
-- unless (defined $module)
-- {
-- $module = "flexbackup";
-- }
-- elsif ($module eq '')
-- {
-- $module = "flexbackup";
-- }
--
-- $rec->set_prop('Program', $module);
-- $rec->set_prop('backupTime', "$backupHour:$backupMin");
-- $rec->set_prop('reminderTime', "$reminderHour:$reminderMin");
--
-- $conf->get('UnsavedChanges')->set_value($old);
--
-- system("/sbin/e-smith/signal-event", "conf-backup") == 0
-- or die($fm->localise('ERR_CONF_BACKUP'),"\n");
--
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('SUCCESSFULLY_ENABLED_TAPE').$q->br().
-- $fm->localise('WITH_BACKUP_TIME')."$backupHour:$backupMin".
-- $q->br().$fm->localise('WITH_REMINDER_TIME').
-- "$reminderHour:$reminderMin");
-- }
-- else
-- {
-- # set service to disabled
-- my $old = $conf->get('UnsavedChanges')->value;
--
-- my $rec = $conf->get('backup');
-- unless ($rec)
-- {
-- $rec = $conf->new_record('backup', {type=>'service'});
-- }
--
-- $rec->set_prop('status', 'disabled');
-- $conf->get('UnsavedChanges')->set_value($old);
--
-- system("/sbin/e-smith/signal-event", "conf-backup") == 0
-- or die($fm->localise('ERR_CONF_BACKUP')."\n");
--
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('SUCCESSFULLY_DISABLED')
-- );
-- }
--
-- return;
--}
--
--sub tapeRestore ()
--{
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise('RESTORE_CONF_FROM_TAPE'));
--
-- print $fm->localise('RESTORE_CONF_FROM_TAPE_DESC');
--
-- print $q->start_multipart_form(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->start_table ({width => "100%", -class => "sme-noborders"});
--
-- print esmith::cgi::genButtonRow(
-- $q,
-- $q->submit (-name => 'action',
-- -value => $fm->localise('RESTORE_FROM_TAPE'))
-- );
-- print "\n";
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'tape-restore'
-- );
--
-- print $q->endform;
-- esmith::cgi::genFooter($fm);
--}
--
--sub performTapeRestore
--{
-- my ($q) = @_;
--
-- #----------------------------------------
-- # restore system from backup tape
-- #----------------------------------------
--
-- my $lock_file = "/var/lock/subsys/e-smith-restore";
-- my $file_handle = &esmith::lockfile::LockFileOrReturn($lock_file);
--
-- unless ($file_handle)
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef,
-- $fm->localise('UNABLE_TO_RESTORE_CONF')
-- );
--
-- print $q->p (
-- $q->b ($fm->localise('ANOTHER_RESTORE_IN_PROGRESS')
-- )
-- );
--
-- esmith::cgi::genFooter($fm);
-- return;
-- }
--
-- my $rec = $restore->get('restore');
-- $rec->set_prop('state', 'running');
-- $rec->set_prop('start', time);
--
-- my $sec = 10;
-- print "Refresh: $sec; URL=/server-manager/cgi-bin/backup\n";
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise()
-- );
--
-- print $q->p($fm->localise('NOW_RESTORING_FROM_TAPE')
-- );
--
-- print $q->p (
-- $q->b ($fm->localise('MUST_REBOOT_AFTER_RESTORE'))
-- );
--
-- print $q->p($fm->localise('PAGE_REFRESH_IN', {sec=>$sec}));
--
-- my $child;
--
-- if ($child = fork)
-- {
-- # Parent
--
-- $SIG{'CHLD'} = 'IGNORE';
-- &esmith::lockfile::UnlockFile($file_handle);
--
-- esmith::cgi::genFooter($fm);
-- return;
-- }
-- elsif (defined $child)
-- {
-- # Child
--
-- # Re-establish the lock. Wait till it is relinquished by the parent.
--
-- $file_handle = &esmith::lockfile::LockFileOrWait($lock_file);
--
-- # Close STDOUT so that the web server connection is closed.
--
-- close STDOUT;
--
-- # Now reopen STDOUT for the child. Redirect it to STDERR.
--
-- open(STDOUT, ">&STDERR");
--
-- unless(system("/sbin/e-smith/signal-event", "pre-restore") == 0)
-- {
-- $rec->set_prop('errmsg', $fm->localise('ERR_PRE_RESTORE'));
-- $rec->delete_prop('state');
-- die ($fm->localise('ERR_PRE_RESTORE'),"\n");
-- }
-- unless(system("/sbin/e-smith/signal-event", "restore-tape") == 0)
-- {
-- $rec->set_prop('errmsg', $fm->localise('ERR_RESTORING_FROM_TAPE'));
-- $rec->delete_prop('state');
-- die ($fm->localise('ERR_RESTORING_FROM_TAPE')."\n");
-- }
--
-- #----------------------------------------
-- # regenerate configuration files
-- #----------------------------------------
--
-- unless(system("/usr/sbin/groupmod", "-g", "$www_gid", "www") == 0)
-- {
-- $rec->set_prop('errmsg', $rec->prop('errmsg').'
'.
-- $fm->localise('ERR_RESTORING_GID'));
-- warn ($fm->localise('ERR_RESTORING_GID')."\n");
-- }
-- unless(system("/usr/sbin/usermod", "-g", "$www_gid", "www") == 0)
-- {
-- $rec->set_prop('errmsg', $rec->prop('errmsg').'
'.
-- $fm->localise('ERR_RESTORING_INITIAL_GRP'));
-- warn ($fm->localise('ERR_RESTORING_INITIAL_GRP')."\n");
-- }
-- unless(system("/sbin/e-smith/signal-event", "post-upgrade") == 0)
-- {
-- $rec->set_prop('errmsg', $rec->prop('errmsg').'
'.
-- $fm->localise('ERR_UPDATING_CONF_AFTER_TAPE_RESTORE'));
-- $rec->delete_prop('state');
-- die ($fm->localise('ERR_UPDATING_CONF_AFTER_TAPE_RESTORE'));
-- }
--
-- my $finish = time;
-- $rec->set_prop('state', 'complete');
-- $rec->set_prop('finish', $finish);
--
-- my $start = $rec->prop('start');
-- $start = scalar localtime($start);
-- $finish = scalar localtime($finish);
--
-- &esmith::lockfile::UnlockFile($file_handle);
--
-- exit;
-- }
-- else
-- {
-- # Error
--
-- $rec->delete_prop('state');
-- $rec->set_prop('errmsg', $fm->localise('COULD_NOT_FORK'));
-- die ($fm->localise("COULD_NOT_FORK")."$!\n");
-- }
--}
--
--sub WorkstnBackupConfig
--{
-- my ($q) = @_;
-- my $backupwk_status;
-- my $enabledIncOnlyTimeout = "";
-- my $backupwkLogin = 'backup';
-- my $backupwkPassword = 'backup';
-- my $backupwkStation = 'host';
-- my $backupwkFolder = 'share';
-- my $setsNumber;
-- my $filesinset;
-- my $backupwkTime;
-- my $backupwkTimeout;
-- my $backupwkIncOnlyTimeout;
-- my $compression;
-- my $VFSType;
-- my $dof;
-- my @dlabels = split(' ', $fm->localise('DOW'));
-- my @VFST = ('cifs', 'nfs', 'usb');
-- my %VFST = ('cifs', 'cifs', 'nfs', 'nfs', 'usb', 'local usb disk');
--
-- # Obtain backup informations from configuration
-- my $rec = $conf->get('backupwk');
-- if ($rec)
-- {
-- $backupwkTime = $rec->prop('BackupTime') || '2:00';
-- $backupwkLogin = $rec->prop('Login') || 'backup';
-- $backupwkPassword = $rec->prop('Password') || 'backup';
-- $backupwkStation = $rec->prop('SmbHost') || 'host';
-- $backupwkFolder = $rec->prop('SmbShare') || 'share';
-- $setsNumber = $rec->prop('SetsMax') || '1';
-- $filesinset = $rec->prop('DaysInSet') || '1';
-- $backupwkTimeout = $rec->prop('Timeout') || '12';
-- $backupwkIncOnlyTimeout = $rec->prop('IncOnlyTimeout') || 'yes';
-- $compression = $rec->prop('Compression') || '0';
-- $dof = (defined $rec->prop('FullDay')) ? $rec->prop('FullDay') : '7';
-- $VFSType = $rec->prop('VFSType') || 'cifs';
-- $backupwk_status = $rec->prop('status');
-- }
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise('CONFIGURE_WORKSTN_BACKUP'));
--
-- if ($rec) {
-- print $fm->localise('WORKSTN_BACKUP_DESC');
-- print $fm->localise('WORKSTN_BACKUP_ENABLED'),
-- $q->b(' '.$fm->localise(uc($backupwk_status))), '.
';
-- if ($VFSType eq 'usb') {
-- print $fm->localise('WORKSTN_BACKUP_USB'), '
';
-- }
-- else {
-- print $fm->localise('WORKSTN_BACKUP_HOST'), ' ', $backupwkStation;
-- print ' ', $fm->localise('WORKSTN_BACKUP_VFSTYPE'), ' ', $VFSType, '
';
-- }
-- print $fm->localise('WORKSTN_BACKUP_SHARE'), ' ', $backupwkFolder, '
';
-- if ($VFSType eq 'cifs') {
-- print $fm->localise('LOGIN'), ' ', $backupwkLogin, '
';
-- print $fm->localise('PASSWORD'), ' ********
';
-- }
-- print $fm->localise('WORKSTN_BACKUP_SETSNUM'), ' ', $setsNumber, '
';
-- print $fm->localise('WORKSTN_BACKUP_DAYSINSET'), ' ', $filesinset, '
';
-- print $fm->localise('WORKSTN_BACKUP_COMPRESSION'), ' ', $compression, '
';
-- print $fm->localise('WORKSTN_BACKUP_TOD'), ' ', $backupwkTime, '
';
-- print $fm->localise('WORKSTN_BACKUP_TIMEOUT'), ' ', $backupwkTimeout, ' ', $fm->localise('HOURS');
-- if ( $backupwkIncOnlyTimeout eq 'yes' ) {print $fm->localise('WORKSTN_BACKUP_INCONLY_TIMEOUT')}
-- print '
';
-- if ( $dof eq '7' ) {
-- print $fm->localise('WORKSTN_FULL_BACKUP_EVERYDAY', '
');
-- }
-- else {
-- print $fm->localise('WORKSTN_FULL_BACKUP_DAY'), ' ', $dlabels[$dof], '
';
-- }
-- }
-- else { print $fm->localise('WORKSTN_BACKUP_NOT_CONFIGURED'), '
' }
--
-- print $q->startform(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->start_table ({-class => "sme-noborders"});
--
-- print $q->Tr($q->td($q->h3 ($fm->localise('WORKSTATION_BACKUP_SETCONF'))));
--
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('SELECT_VFS_TYPE')
-- ),
--
-- esmith::cgi::genCell ($q, $q->popup_menu (-name => 'VFSType',
-- -values => [ @VFST ],
-- -labels => \%VFST,
-- -default => $VFSType)));
--
-- print "\n";
--
-- print $q->start_table ({width => "100%", -class => "sme-noborders"});
-- print $q->Tr($q->th({-class => "sme-layout"},
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('NEXT')
-- )
-- )
-- );
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-configure'
-- );
-- print '';
--
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
-- return;
--}
--
--sub WorkstnBackupConfig1
--{
-- my ($q) = @_;
-- my $enabledChk = "";
-- my $enabledIncOnlyTimeout = "";
-- my $backupwkAMPM = 'AM';
-- my $backupwkMin;
-- my $backupwkHour;
-- my $backupwkLogin = 'backup';
-- my $backupwkPassword = 'backup';
-- my $backupwkStation = 'host';
-- my $backupwkFolder = 'share';
-- my $setsNumber;
-- my $filesinset;
-- my $backupwkTimeout;
-- my $backupwkIncOnlyTimeout;
-- my $compression;
-- my $VFSType = $q->param ('VFSType');
-- my $dof;
-- my @usbdisks;
-- my %dlabels = ();
-- my @dlabels = split(' ', $fm->localise('DOW'));
-- my $i = 0;
-- foreach (@dlabels) {
-- $dlabels{$i} = $_;
-- $i++;
-- }
--
-- # Obtain backup informations from configuration
-- my $rec = $conf->get('backupwk');
-- my $backupwkTime = '2:00';
-- if ($rec)
-- {
-- $backupwkTime = $rec->prop('BackupTime') || '2:00';
-- $backupwkLogin = $rec->prop('Login') || 'backup';
-- $backupwkPassword = $rec->prop('Password') || 'backup';
-- $backupwkStation = $rec->prop('SmbHost') || 'host';
-- $backupwkFolder = $rec->prop('SmbShare') || 'share';
-- $setsNumber = $rec->prop('SetsMax') || '1';
-- $filesinset = $rec->prop('DaysInSet') || '1';
-- $backupwkTimeout = $rec->prop('Timeout') || '12';
-- $backupwkIncOnlyTimeout = $rec->prop('IncOnlyTimeout') || 'yes';
-- $compression = $rec->prop('Compression') || '0';
-- $dof = (defined $rec->prop('FullDay')) ? $rec->prop('FullDay') : '7';
-- }
--
-- ($backupwkHour, $backupwkMin) = split (':', $backupwkTime, -1);
--
-- if ($backupwkHour > 12)
-- {
-- $backupwkHour -= 12;
-- $backupwkAMPM = 'PM';
-- }
--
-- my $backupwk_status;
-- if ($rec)
-- {
-- $backupwk_status = $rec->prop('status');
-- }
--
-- if (defined $backupwk_status && $backupwk_status eq 'enabled')
-- {
-- $enabledChk = 'checked';
-- }
--
-- if (defined $backupwkIncOnlyTimeout && $backupwkIncOnlyTimeout eq 'yes')
-- {
-- $enabledIncOnlyTimeout = 'checked';
-- }
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise('CONFIGURE_WORKSTN_BACKUP'));
--
-- if ( $VFSType eq 'usb' ) {
-- foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) {
-- $udi =~ m/^(\S+)/;
-- my $vollbl = qx(hal-get-property --udi $1 --key volume.label);
-- $vollbl =~ m/^(\S+)/;
-- if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';}
-- push @usbdisks, lc($vollbl);
-- }
--
-- unless ($usbdisks[0]){
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_NO_USB_DISK'));
-- return
-- }
-- }
--
-- print $q->startform(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $fm->localise('CONFIGURE_WORKSTN_BACKUP_DESC');
--
-- print $q->start_table ({-class => "sme-noborders"});
--
-- print $q->Tr(
-- $q->td(
-- $fm->localise('ENABLE_WORKSTN_BACKUP')
-- . " "
-- )
-- );
--
-- print $q->Tr($q->td($q->h3 ($fm->localise('WORKSTATION_BACKUP_DEST'))));
--
-- if ( $VFSType eq 'usb' ) {
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('WORKSTN_NAME')
-- ),
--
-- esmith::cgi::genCell ($q, 'localhost'),
-- );
-- }
-- else {
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('WORKSTN_NAME')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkStation',
-- -override => 1,
-- -default => $backupwkStation,
-- -size => 20)),
-- );
-- }
--
-- if ( $VFSType eq 'usb' ) {
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('SHARED_FOLDER_NAME')
-- ),
--
-- esmith::cgi::genCell ($q, $q->popup_menu (-name => 'backupwkFolder',
-- -values => [ @usbdisks ],
-- -default => $backupwkFolder,)),
-- );
-- }
-- else {
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('SHARED_FOLDER_NAME')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkFolder',
-- -override => 1,
-- -default => $backupwkFolder,
-- -size => 20)),
-- );
-- }
--
-- if ( $VFSType eq 'cifs' ) {
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('WORKSTN_LOGIN')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkLogin',
-- -override => 1,
-- -default => $backupwkLogin,
-- -size => 12)),
-- );
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('PASSWORD')
-- ),
--
-- esmith::cgi::genCell ($q, $q->password_field (-name => 'backupwkPassword',
-- -override => 1,
-- -default => $backupwkPassword,
-- -size => 20)),
-- );
-- }
--
-- print '';
--
-- print $q->table ({border => 0, cellspacing => 1, cellpadding => 4});
--
-- print $q->Tr($q->td({-colspan=>4},$q->h3 ($fm->localise('WORKSTN_BACKUP_SETTINGS'))));
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('NUMBER_OF_SETS')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'setsNumber',
-- -override => 1,
-- -default => $setsNumber,
-- -size => 3)),
--
-- esmith::cgi::genCell ($q, $fm->localise('NUMBER_OF_FILES_IN_SET')),
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'filesinset',
-- -override => 1,
-- -default => $filesinset,
-- -size => 3))
-- );
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('WORKSTN_BACKUP_TIME')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkHour',
-- -override => 1,
-- -default => $backupwkHour,
-- -size => 2)),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkMin',
-- -override => 1,
-- -default => $backupwkMin,
-- -size => 2)),
--
-- esmith::cgi::genCell ($q, $q->popup_menu (-name => 'backupwkAMPM',
-- -values => ['AM', 'PM'],
-- -default => $backupwkAMPM)));
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('WORKSTN_TIMEOUT')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'backupwkTimeout',
-- -override => 1,
-- -default => $backupwkTimeout,
-- -size => 2)),
--
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('INC_ONLY_TIMEOUT')
-- ),
--
-- esmith::cgi::genCell (
-- $q,
-- " "
-- ),
-- );
--
-- print $q->Tr(
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('COMPRESSION_LEVEL')
-- ),
--
-- esmith::cgi::genCell ($q, $q->textfield (-name => 'compression',
-- -override => 1,
-- -default => $compression,
-- -size => 1)),
--
-- esmith::cgi::genCell(
-- $q,
-- $fm->localise('FULL_ONLY_ON')
-- ),
--
-- esmith::cgi::genCell (
-- $q,
-- $q->popup_menu (
-- -name => 'dof',
-- -values => [ '7', '0', '1', '2', '3', '4', '5', '6' ],
-- -labels => \%dlabels,
-- -default => $dof))
-- );
--
-- print "\n";
--
-- print $q->start_table ({width => "100%", -class => "sme-noborders"});
-- print $q->Tr($q->th({-class => "sme-layout"},
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('UPDATE_CONF')
-- )
-- )
-- );
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-configure1'
-- );
-- print $q->hidden(
-- -name => 'VFSType',
-- -override => 1,
-- -default => $VFSType
-- );
-- print '';
--
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
-- return;
--}
--
--sub updateWorkstnBackupConfig
--{
-- my ($q) = @_;
--
-- my $status = $q->param ('workstnbackup');
-- my $inconly = $q->param ('incOnlyTimeout');
-- my $dof = $q->param('dof');
-- my $ampm;
-- my $incOnlyTimeout;
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('UPDATING_WORKSTN_CONF')
-- );
--
-- #--------------------------------------------------
-- # Untaint parameters and check for validity
-- #--------------------------------------------------
--
-- my $VFSType = $q->param ('VFSType');
--
-- my $backupwkStation = $q->param ('backupwkStation');
-- if ( $VFSType eq 'usb') { $backupwkStation = 'localhost' }
-- if ($backupwkStation =~ /^(.*)$/) {
-- $backupwkStation = $1;
-- } else {
-- $backupwkStation = "";
-- }
-- if ( $backupwkStation eq "" )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_WORKSTN')
-- );
-- return;
-- }
--
-- my $backupwkFolder = $q->param ('backupwkFolder');
-- if ( $VFSType eq 'usb' ) {
-- $backupwkFolder = 'media/' . $backupwkFolder;
-- }
-- if ($backupwkFolder =~ /^(.*)$/) {
-- $backupwkFolder = $1;
-- $backupwkFolder =~ s/^\//; # remove leading /
-- } else {
-- $backupwkFolder = "";
-- }
-- if ( $backupwkFolder eq "" )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_FOLDER')
-- );
-- return;
-- }
--
-- my $backupwkLogin = $q->param ('backupwkLogin') || '';
-- if ($backupwkLogin =~ /^(.*)$/) {
-- $backupwkLogin = $1;
-- } else {
-- $backupwkLogin = "";
-- }
-- if ( ( $backupwkLogin eq "" ) && ( $VFSType eq 'cifs' ) )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_LOGIN')
-- );
-- return;
-- }
--
-- my $backupwkPassword = $q->param ('backupwkPassword') || '';
-- if ($backupwkPassword =~ /^(.*)$/) {
-- $backupwkPassword = $1;
-- } else {
-- $backupwkPassword = "";
-- }
-- if ( ( $backupwkPassword eq "" ) && ( $VFSType eq 'cifs' ) )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_PASSWORD')
-- );
-- return;
-- }
--
-- my $setsNumber = $q->param ('setsNumber');
-- unless ( $setsNumber > 0 )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_SETS_NUMBER')
-- );
-- return;
-- }
--
-- my $filesinset = $q->param ('filesinset');
-- unless ( $filesinset > 0 )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_FILES_IN_SET_NUMBER')
-- );
-- return;
-- }
--
-- my $timeout = $q->param ('backupwkTimeout');
-- if (( $timeout eq '') || ( $timeout == 0 )) {$timeout = 24 }
-- if (( $timeout < 1 ) || ( $timeout > 24 ))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_TIMEOUT')
-- );
-- return;
-- }
--
-- if (defined $inconly && $inconly eq 'on')
-- {
-- $incOnlyTimeout = 'yes';
-- }
-- else
-- {
-- $incOnlyTimeout = 'no';
-- }
--
-- my $compression = $q->param ('compression');
-- if (( $compression < 0 ) || ( $compression > 9 ))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_COMPRESSION')
-- );
-- return;
-- }
--
-- my $rec = $conf->get('backupwk');
-- unless (defined $rec)
-- {
-- $rec = $conf->new_record('backupwk', {type=>'service'});
-- }
--
-- $rec->set_prop('SmbHost', $backupwkStation);
-- $rec->set_prop('SmbShare', $backupwkFolder);
-- $rec->set_prop('Login', $backupwkLogin);
-- $rec->set_prop('Password', $backupwkPassword);
-- $rec->set_prop('SetsMax', $setsNumber);
-- $rec->set_prop('DaysInSet', $filesinset);
-- $rec->set_prop('Timeout', $timeout);
-- $rec->set_prop('IncOnlyTimeout', $incOnlyTimeout);
-- $rec->set_prop('Compression', $compression);
-- $rec->set_prop('FullDay', $dof);
-- $rec->set_prop('VFSType', $VFSType);
--
-- my $module = $rec->prop('Program');
--
-- # The default workstation backup program is dar.
--
-- unless (defined $module)
-- {
-- $module = 'dar';
-- }
-- elsif ($module eq '')
-- {
-- $module = 'dar';
-- }
--
-- $rec->set_prop('Program', $module);
--
-- if (defined $status && $status eq 'on')
-- {
--
-- my $backupwkHour = $q->param ('backupwkHour');
-- if ($backupwkHour =~ /^(.*)$/) {
-- $backupwkHour = $1;
-- } else {
-- $backupwkHour = '12';
-- }
-- if (($backupwkHour < 0) || ($backupwkHour > 12))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_HOUR').$backupwkHour.
-- $fm->localise('BETWEEN_0_AND_12')
-- );
--
-- return;
-- }
--
-- my $backupwkMin = $q->param ('backupwkMin');
-- if ($backupwkMin =~ /^(.*)$/) {
-- $backupwkMin = $1;
-- } else {
-- $backupwkMin = '0';
-- }
-- if (($backupwkMin < 0) || ($backupwkMin > 59))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_INVALID_MINUTE').$backupwkMin.
-- $fm->localise('BETWEEN_0_AND_59')
-- );
--
-- return;
-- }
--
-- $backupwkMin = sprintf("%02d", $backupwkMin);
--
-- $ampm = $q->param ('backupwkAMPM');
-- if ($ampm =~ /^(.*)$/) {
-- $ampm = $1;
-- } else {
-- $ampm = 'AM';
-- }
--
-- # convert to 24 hour time
--
-- $backupwkHour = $backupwkHour % 12;
-- if ($ampm eq 'PM')
-- {
-- $backupwkHour = $backupwkHour + 12;
-- }
--
--
-- # variables passed validity checks, set configuration database values
-- my $old = $conf->get('UnsavedChanges')->value;
--
-- $rec->set_prop('status', 'enabled');
--
-- $rec->set_prop('BackupTime', "$backupwkHour:$backupwkMin");
--
-- $conf->get('UnsavedChanges')->set_value($old);
--
-- system("/sbin/e-smith/signal-event", "conf-backup") == 0
-- or die($fm->localise('ERR_CONF_BACKUP'),"\n");
--
-- esmith::cgi::genResult(
-- $q, $fm->localise('SUCCESSFULLY_ENABLED_WORKSTN').$q->br().
-- $fm->localise('WITH_BACKUP_TIME')."$backupwkHour:$backupwkMin");
-- }
-- else
-- {
-- # set service to disabled
-- my $old = $conf->get('UnsavedChanges')->value;
--
-- $rec->set_prop('status', 'disabled');
-- $conf->get('UnsavedChanges')->set_value($old);
--
-- system("/sbin/e-smith/signal-event", "conf-backup") == 0
-- or die($fm->localise('ERR_CONF_BACKUP')."\n");
--
-- esmith::cgi::genResult(
-- $q, $fm->localise('SUCCESSFULLY_DISABLED_WORKSTN')
-- );
-- }
--
-- return;
--}
--
--sub workstnVerify ()
--{
--
-- my $rec = $conf->get('backupwk');
--
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('VERIFY_WORKSTN_BACKUP_FILE'));
--
-- unless ($rec)
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('CONFIGURATION_TO_BE_DONE'));
-- return;
-- }
--
-- my %backupfiles = ();
-- my $mntdir = $rec->prop('MountDir') || '/mnt/smb';
-- my $mntbkdir;
-- my $mounted;
-- my $key;
-- my $id = $rec->prop('Id') || $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my $smbhost = $rec->prop('SmbHost');
-- my $smbshare = $rec->prop('SmbShare');
-- my $VFSType = $rec->prop('VFSType') || 'cifs';
-- my $err;
--
-- my $setbackuplist = sub {
-- if ( $_ =~ /\.dar/ ) {
-- my $dir = $File::Find::dir;
-- my $backupref;
-- $dir =~ s/$mntbkdir\///;
-- $_ =~ s/\..*\.dar//;
-- $backupref = $_;
-- $_ =~ s/.*-//;
-- @{$backupfiles{$_}}[0] = $dir;
-- @{$backupfiles{$_}}[1] = $backupref;
-- }
-- };
--
-- # Mounting backup shared folder
--
-- unless (-d $mntdir)
-- {
-- mkdir -p $mntdir;
-- }
--
-- my $login = $rec->prop('Login') || 'backup';
-- my $password = $rec->prop('Password') || 'backup';
--
-- if ( $err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType) )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- $mntbkdir = $mntdir . '/' . $id;
-- unless ( -d $mntbkdir)
-- {
-- if ($mounted) {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_HOST_DIR'), $id
-- );
-- return;
-- }
--
-- # Finding existing backups
--
-- find { wanted => \&$setbackuplist, untaint => 1 }, $mntbkdir ;
--
-- my %blabels = ();
-- my @blabels;
-- my $backups = 0;
--
-- foreach $key (sort keys %backupfiles) {
-- my $labkey = $mntbkdir . '/' . $backupfiles{$key}[0] . '/' . $backupfiles{$key}[1];
-- $blabels{$labkey} = $backupfiles{$key}[1] . " (" . $backupfiles{$key}[0] . ")";
-- $backups = push @blabels, $labkey;
-- }
--
-- if ($mounted) {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--
-- # Stops here if no backups
--
-- if ( $backups == 0 ) {
-- esmith::cgi::genResult(
-- $q, $fm->localise('NO_BACKUPS_TO_RESTORE'));
-- return;
-- }
--
-- print $q->p ($fm->localise('VERIFY_WORKSTN_BACKUP_DESC') . ' ' . "$smbhost/$smbshare/$id");
-- print $q->p;
--
-- print $q->start_multipart_form(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
--
-- esmith::cgi::genWidgetRow(
-- $q,
-- $fm->localise('SELECT_BACKUP_FILE'),
-- $q->popup_menu (
-- -name => 'backupset',
-- -values => [ @blabels ],
-- -labels => \%blabels
-- )
-- )
-- );
--
-- print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
--
-- esmith::cgi::genWidgetRow(
-- $q,
-- $fm->localise('CHECK_TO_VERIFY_FULL_RESTORE'),
-- $q->checkbox (
-- -name => 'verifyall',
-- -checked=>0,
-- -label=>''
-- )
-- ),
-- $q->Tr(
-- esmith::cgi::genTextRow(
-- $q,
-- $fm->localise('CHECK_INTEGRITY_WARNING')
-- )
-- )
-- ),"\n";
--
-- print $q->table ({width => "100%", -class => "sme-noborders"},
-- esmith::cgi::genButtonRow(
-- $q,
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('VERIFY')
-- )
-- )
-- ),"\n";
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-verify'
-- );
--
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
--}
--
--sub performWorkstnVerify
--{
-- my ($q) = @_;
--
-- my $backupwkrec = $conf->get('backupwk');
-- my $smbhost = $backupwkrec->prop('SmbHost');
-- my $smbshare = $backupwkrec->prop('SmbShare');
-- my $login = $backupwkrec->prop('Login');
-- my $password = $backupwkrec->prop('Password');
-- my $mntdir = $backupwkrec->prop('MountDir') || '/mnt/smb';
-- my $mounted;
-- my $key;
-- my $id = $backupwkrec->prop('Id') ||
-- $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my $err;
-- my $VFSType = $backupwkrec->prop('VFSType') || 'cifs';
-- my $verifyref = $q->param ('backupset');
--
-- # Mounting backup shared folder
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- my $mntbkdir = $mntdir . "/$id";
-- unless (-d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult($q, $fm->localise('ERR_NO_HOST_DIR'), $id);
-- return;
-- }
--
-- my $fullverify = $q->param('verifyall');
--
-- if ( $fullverify eq "on" )
-- {
-- # Test all backups needed to full restore
--
-- my %backupsetfiles = ();
-- my @restorefiles;
-- my $set = $verifyref;
-- $set =~ s/\/[^\/]*$//;
-- my $backupsetlist = sub {
-- if ( $_ =~ /\.dar/ )
-- {
-- my $backupref = $File::Find::name;
-- $backupref =~ s/\.[0-9]+\.dar//;
-- $_ =~ s/\..*\.dar//;
-- $_ =~ s/.*-//;
-- $backupsetfiles{$_} = $backupref;
-- }
-- };
--
-- # find list of available backups and verify
-- # it contains all backups needed for full restore
--
-- find { wanted => \&$backupsetlist, untaint => 1 }, $set ;
--
-- my $key;
-- my $num = 0;
-- foreach $key (sort keys %backupsetfiles)
-- {
-- push @restorefiles, $backupsetfiles{$key};
-- if ( $num == 0 )
-- {
-- unless ( $backupsetfiles{$key} =~ /\/full-/ )
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('VERIFY_WORKSTN_BACKUP_FILE')
-- );
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_FULL_BACKUP')
-- );
-- return;
-- }
-- }
-- else
-- {
-- my $numf = sprintf("%03d", $num);
-- unless ( $backupsetfiles{$key} =~ /\/inc-$numf-/ )
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('VERIFY_WORKSTN_BACKUP_FILE')
-- );
--
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_INC_BACKUP') . " " . $numf
-- );
-- return;
-- }
--
-- }
-- $num++;
-- last if ( $backupsetfiles{$key} eq $verifyref );
-- }
--
-- # and test them
--
-- $| = 1;
--
-- if (open(RD, "-|"))
-- {
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('VERIFY_WORKSTN_BACKUP_FILE'));
--
-- print $q->p (
-- $q->b ($fm->localise('TESTING_NEEDED_BACKUPS_FOR_RESTORE') )
-- );
-- print '';
--
-- while ()
-- {
-- print "- $_
\n";
-- }
--
-- print '
';
-- my $message;
-- if (!close RD)
-- {
-- print $q->p ($q->b ( $fm->localise('RESTORE_VERIFY_FAILED') ));
-- }
-- else
-- {
-- print $q->p ($q->b ( $fm->localise('VERIFY_COMPLETE') ));
-- }
--
-- esmith::cgi::genFooter ($q);
-- }
-- else
-- {
-- select(STDOUT);
-- $| = 1;
--
-- my $file;
-- foreach $file (@restorefiles)
-- {
-- if ($file =~ /^(.*)$/)
-- {
-- $file = $1;
-- }
-- else
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- die('Unsecure data : ' . $file);
-- }
-- print $q->p($fm->localise('TESTED_BACKUP') . " " . $file);
-- system ("/usr/bin/dar", "-Q", "--test", "$file", "--noconf");
-- }
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--
-- exit(0);
-- }
-- return;
--
-- }
-- else
-- {
-- # verify selected backup only
-- # and display files saved in the backup
--
-- my $backupkey = $verifyref;
-- if ($backupkey =~ /^(.*)$/)
-- {
-- $backupkey = $1;
-- }
-- else
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- die('Unsecure data : ' . $backupkey);
-- }
--
-- if (open(RD, "-|"))
-- {
-- esmith::cgi::genHeaderNonCacheable ($q,
-- undef, $fm->localise('VERIFY_WORKSTN_BACKUP_FILE'));
-- print $q->p($fm->localise('FILES_IN_BACKUP'));
--
-- print '';
--
-- my $complete = 0;
-- while ()
-- {
-- $complete++ if /etc\/smbpasswd$/;
-- $complete++ if /etc\/samba\/smbpasswd$/; # >6.0 base
-- print "- $_
\n";
-- }
--
-- print '
';
-- my $status = close RD ?
-- ($complete ?
-- $fm->localise('VERIFY_COMPLETE') :
-- $fm->localise('BACKUP_FILE_INCOMPLETE'))
-- : ($fm->localise('ERROR_READING_FILE').' : '.$backupkey);
-- print $q->p ($q->b ($status));
--
-- esmith::cgi::genFooter ($q);
--
-- }
-- else
-- {
-- select(STDOUT);
-- $| = 1;
--
-- system ("/usr/bin/dar", "-Q", "--list", "$backupkey", "--noconf") == 0
-- or die ($fm->localise('ERR_EXTRACT')." : ".$!);
--
-- if ($mounted) {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- exit(0);
-- }
-- }
--
-- return;
--}
--
--sub workstnRestore ()
--{
--
-- my $rec = $conf->get('backupwk');
--
-- esmith::cgi::genHeaderNonCacheable(
-- $q, undef, $fm->localise('RESTORE_CONF_FROM_WORKSTN'));
--
-- unless ($rec)
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('CONFIGURATION_TO_BE_DONE'));
-- return;
-- }
--
-- my $mntdir = $rec->prop('MountDir') || '/mnt/smb';
-- my $mntbkdir;
-- my $mounted;
-- my %backupfiles = ();
-- my $key;
-- my $id = $rec->prop('Id') ||
-- $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my $VFSType = $rec->prop('VFSType') || 'cifs';
-- my $smbhost = $rec->prop('SmbHost');
-- my $smbshare = $rec->prop('SmbShare');
-- my $err;
--
-- my $setbackupflist = sub {
-- if ( $_ =~ /\.dar/ )
-- {
-- my $dir = $File::Find::dir;
-- my $backupref;
-- $dir =~ s/$mntbkdir\///;
-- $_ =~ s/\..*\.dar//;
-- $backupref = $_;
-- $_ =~ s/.*-//;
-- @{$backupfiles{$_}}[0] = $dir;
-- @{$backupfiles{$_}}[1] = $backupref;
-- }
-- };
--
-- # Mounting backup shared folder
-- unless (-d $mntdir)
-- {
-- mkdir -p $mntdir;
-- }
--
-- my $login = $rec->prop('Login') || 'backup';
-- my $password = $rec->prop('Password') || 'backup';
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genResult($q,
-- $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err);
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- $mntbkdir = $mntdir . "/$id";
-- unless ( -d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult($q, $fm->localise('ERR_NO_HOST_DIR'), $id);
-- return;
-- }
--
-- # Finding existing backups
--
-- find { wanted => \&$setbackupflist, untaint => 1 }, $mntbkdir ;
--
-- my %blabels = ();
-- my @blabels;
-- my $backups = 0;
--
-- foreach $key (sort keys %backupfiles)
-- {
-- my $labkey = $mntbkdir . '/' . $backupfiles{$key}[0] . '/' . $backupfiles{$key}[1];
-- $blabels{$labkey} = $backupfiles{$key}[1] . ' (' . $backupfiles{$key}[0] . ')';
-- $backups = push @blabels, $labkey;
-- }
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--
-- if ( $backups == 0 )
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('NO_BACKUPS_TO_RESTORE'));
-- return;
-- }
--
-- print $q->p ($fm->localise('RESTORE_CONF_FROM_WORKSTN_DESC') . ' ' . "$smbhost/$smbshare/$id");
-- print $q->p;
--
-- print $q->start_multipart_form(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->table ( {border => 0, cellspacing => 0, cellpadding => 4},
--
-- esmith::cgi::genWidgetRow(
-- $q,
-- $fm->localise('SELECT_BACKUP_FILE'),
-- $q->popup_menu (
-- -name => 'backuptorestore',
-- -values => [ @blabels ],
-- -labels => \%blabels
-- )
-- )
-- );
--
-- print $q->table ( {width => "100%", -class => "sme-noborders"},
-- esmith::cgi::genButtonRow(
-- $q,
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('RESTORE_FROM_WORKSTN')
-- )
-- )
-- );
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-restore'
-- );
--
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
--}
--
--sub performWorkstnRestore
--{
-- my ($q) = @_;
-- my $restoreref = $q->param ('backuptorestore');
-- my $set = $restoreref;
-- $set =~ s/\/[^\/]*$//;
-- my %backupsetfiles = ();
-- my @restorefiles;
--
-- my $backupsetlist = sub {
-- if ( $_ =~ /\.dar/ )
-- {
-- my $backupref = $File::Find::name;
-- $backupref =~ s/\.[0-9]+\.dar//;
-- $_ =~ s/\..*\.dar//;
-- $_ =~ s/.*-//;
-- $backupsetfiles{$_} = $backupref;
-- }
-- };
--
--
-- my $lock_file = "/var/lock/subsys/e-smith-restore";
-- my $file_handle = &esmith::lockfile::LockFileOrReturn($lock_file);
--
-- unless ($file_handle)
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('RESTORE_CANNOT_PROCEED')
-- );
--
-- print $q->p (
-- $q->b ($fm->localise('ANOTHER_RESTORE_IN_PROGRESS')
-- )
-- );
--
-- esmith::cgi::genFooter ($q);
-- return;
-- }
--
-- # mounting backup shared folder
--
-- my $backupwkrec = $conf->get('backupwk');
-- my $login = $backupwkrec->prop('Login');
-- my $password = $backupwkrec->prop('Password');
-- my $id = $backupwkrec->prop('Id')
-- || $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my $mntdir = $backupwkrec->prop('MountDir') || '/mnt/smb';
-- my $mounted;
-- my $VFSType = $backupwkrec->prop('VFSType') || 'cifs';
-- my $smbhost = $backupwkrec->prop('SmbHost');
-- my $smbshare = $backupwkrec->prop('SmbShare');
-- my $err;
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('RESTORE_CANNOT_PROCEED')
-- );
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- my $mntbkdir = $mntdir . "/$id";
-- unless ( -d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('RESTORE_CANNOT_PROCEED')
-- );
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_HOST_DIR') . $id
-- );
-- return;
-- }
--
-- # finding list of available backups
-- # and verifying all needed backup files are available
--
-- find { wanted => \&$backupsetlist, untaint => 1 }, $set ;
--
-- my $key;
-- my $num = 0;
-- foreach $key (sort keys %backupsetfiles)
-- {
-- push @restorefiles, $backupsetfiles{$key};
-- if ( $num == 0 )
-- {
-- unless ( $backupsetfiles{$key} =~ /\/full-/ )
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('RESTORE_CANNOT_PROCEED')
-- );
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_FULL_BACKUP')
-- );
-- return;
-- }
-- }
-- else
-- {
-- my $numf = sprintf("%03d", $num);
-- unless ( $backupsetfiles{$key} =~ /\/inc-$numf-/ )
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $q,
-- undef, $fm->localise('RESTORE_CANNOT_PROCEED')
-- );
--
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_INC_BACKUP') . $numf
-- );
-- return;
-- }
--
-- }
-- $num++;
-- last if ( $backupsetfiles{$key} eq $restoreref );
-- }
--
-- # backup is online, restoring now
--
-- my $rec = $restore->get('restore');
-- $rec->set_prop('state','running');
-- $rec->set_prop('start', time);
-- $conf->get('bootstrap-console')->set_prop('Run', 'yes');
--
-- unless (system("/sbin/e-smith/signal-event", "pre-restore") == 0)
-- {
-- esmith::cgi::genHeaderNonCacheable(
-- $fm->{cgi},
-- undef, $fm->localise('OPERATION_STATUS_REPORT'));
-- esmith::cgi::genResult(
-- $fm->{cgi}, $fm->localise('ERR_PRE_RESTORE'));
-- return;
-- }
--
-- $| = 1;
--
-- if (open(RD, "-|"))
-- {
--
-- #-----------------------------------------------------
-- # restore system from uploaded workstation backup file
-- #-----------------------------------------------------
--
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('RESTORE_IN_PROGRESS'));
--
-- print $q->p (
-- $q->b ($fm->localise('RESTORE_IN_PROGRESS_DESC')
-- )
-- );
--
-- print $q->p($fm->localise('FILES_HAVE_BEEN_RESTORED'));
--
-- print '';
-- my $complete = 0;
-- while ()
-- {
-- $complete++ if /etc\/smbpasswd$/;
-- $complete++ if /etc\/samba\/smbpassword$/;
-- print "- $_
\n";
-- }
--
-- print '
';
-- my $message;
-- if (!close RD)
-- {
-- $message = $fm->localise('RESTORE_FAILED_MSG');
-- }
-- else
-- {
-- #-----------------------------------------------------
-- # if restore completed, regenerate configuration files
-- #-----------------------------------------------------
-- if ($complete)
-- {
--
-- $message = $fm->localise('RESTORE_COMPLETE');
-- system("/usr/sbin/groupmod", "-g", "$www_gid", "www") == 0
-- or warn ($fm->localise('ERR_RESTORING_GID')."\n");
-- system("/usr/sbin/usermod", "-g", "$www_gid", "www") == 0
-- or warn ($fm->localise('ERR_RESTORING_INITIAL_GRP')."\n");
-- system("/sbin/e-smith/signal-event", "post-upgrade") == 0
-- or die ($fm->localise('ERROR_UPDATING_CONFIGURATION')."\n");
-- }
-- else
-- {
-- $message = $fm->localise('RESTORE_FAILED');
-- }
-- }
--
-- $rec->set_prop('state', 'complete');
-- $rec->set_prop('finish', time);
--
-- &esmith::lockfile::UnlockFile($file_handle);
--
-- print $q->p ($q->b ($message));
--
-- print $q->startform(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
-- print $q->p($q->b ($fm->localise('YOU_MUST_REBOOT'))),"\n";
-- print $q->start_table ({width => "100%", -class => "sme-noborders"}),"\n";
-- print esmith::cgi::genButtonRow(
-- $q,
-- $q->submit (-name => 'action', -value =>
-- $fm->localise('REBOOT'))
-- );
-- # Put in a hidden widget to store the reboot value.
-- print $q->hidden(
-- -name => 'function',
-- -value => 'reboot'
-- ),"\n";
-- print $q->hidden (
-- -name => 'state',
-- -override => 1,
-- -default => 'perform'
-- ),"\n";
-- print $q->end_table,"\n";
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
-- }
-- else
-- {
-- select(STDOUT);
-- $| = 1;
--
-- my $file;
-- foreach $file (@restorefiles)
-- {
-- if ($file =~ /^(.*)$/)
-- {
-- $file = $1;
-- }
-- else
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- die('Unsecure data : ' . $file);
-- }
-- system ("/usr/bin/dar", "-Q", "-x", "$file", "-v", "-N", "-R", "/", "-wa");
-- }
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--
-- exit(0);
-- }
-- return;
--}
--
--sub workstnSelRestore()
--{
-- my $rec = $conf->get('backupwk');
--
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('WORKSTN_SELECTIVE_RESTORE'));
--
-- unless ($rec)
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('CONFIGURATION_TO_BE_DONE'));
-- return;
-- }
--
-- my %backupfiles = ();
-- my $mntdir = $rec->prop('MountDir') || '/mnt/smb';
-- my $mntbkdir;
-- my $mounted;
-- my $key;
-- my $id = $rec->prop('Id') ||
-- $conf->get('SystemName')->value . '.' . $conf->get('DomainName')->value;
-- my %blabels = ();
-- my @blabels;
-- my $backups = 0;
-- my $filterexp;
-- my $VFSType = $rec->prop('VFSType') || 'cifs';
-- my $smbhost = $rec->prop('SmbHost');
-- my $smbshare = $rec->prop('SmbShare');
-- my $err;
--
-- my $setbackuplist = sub {
-- if ( $_ =~ /\.dar/ )
-- {
-- my $dir = $File::Find::dir;
-- my $backupref;
-- $dir =~ s/$mntbkdir\///;
-- $_ =~ s/\..*\.dar//;
-- $backupref = $_;
-- $_ =~ s/.*-//;
-- @{$backupfiles{$_}}[0] = $dir;
-- @{$backupfiles{$_}}[1] = $backupref;
-- }
-- };
--
-- # Mounting backups smb shared folder
--
-- unless (-d $mntdir)
-- {
-- mkdir -p $mntdir;
-- }
--
-- my $login = $rec->prop('Login') || 'backup';
-- my $password = $rec->prop('Password') || 'backup';
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- $mntbkdir = $mntdir . '/' . $id;
-- unless ( -d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_HOST_DIR'), $id
-- );
-- return;
-- }
--
-- my $catalog = "$mntbkdir/dar-catalog";
-- unless ( -e $catalog)
-- {
-- system("/usr/bin/dar_manager", "-C", "$catalog") == 0
-- or die($fm->localise('ERR_DAR_CATALOG'),"\n");
-- }
--
-- # find available backups for the server
--
-- find { wanted => \&$setbackuplist, untaint => 1 }, $mntbkdir ;
--
-- # find backups in current catalog
--
-- my $i = 0;
-- my @bknum;
-- my @setd;
-- my @bkname;
-- open(DAR_LIST, "/usr/bin/dar_manager -B $catalog -l |");
-- while ()
-- {
-- next unless ($_ =~ /set/);
-- chomp;
-- ($bknum[$i], $setd[$i], $bkname[$i]) = split(' ', $_, 3);
-- $i++;
-- }
-- close (DAR_LIST);
--
-- # delete from catalog old removed backups
--
-- my $j = $i;
-- while ($j)
-- {
-- unless (-e "$setd[$j-1]/$bkname[$j-1]\.1\.dar")
-- {
-- my $del = $bknum[$j-1];
-- if ($del =~ /^(.*)$/)
-- {
-- $del = $1;
-- }
-- system("/usr/bin/dar_manager", "-B", "$catalog", "-D", "$del") == 0
-- or die($fm->localise('ERR_DAR_CATALOG'),"\n");
-- }
-- $j--;
-- }
--
-- # add to catalog new backups
--
-- foreach $key (sort keys %backupfiles)
-- {
-- my $exists = 0;
-- my $rf;
-- foreach $rf (@bkname)
-- {
-- $exists = 1 if ($rf eq $backupfiles{$key}[1]);
-- last if $exists;
-- }
-- do
-- {
-- my $add = "$mntbkdir/$backupfiles{$key}[0]/$backupfiles{$key}[1]";
-- if ($add =~ /^(.*)$/)
-- {
-- $add = $1;
-- }
-- system("/usr/bin/dar_manager", "-B", "$catalog", "-A", "$add") == 0
-- or die($fm->localise('ERR_DAR_CATALOG'),"\n");
-- } unless $exists;
-- }
--
-- # update backups list from current catalog
--
-- open(DAR_LIST, "/usr/bin/dar_manager -B $catalog -l |") ;
--
-- $i = 0;
-- while ()
-- {
-- next unless m/set/;
-- chomp;
-- ($bknum[$i], $setd[$i], $bkname[$i]) = split(' ', $_, 3);
-- $i++;
-- }
-- close (DAR_LIST);
--
-- # set drop down list of backups
--
-- push @blabels, "0";
-- $blabels{"0"} = $fm->localise('ALL_BACKUPS');
-- $j = 0;
-- while ($j < $i)
-- {
-- push @blabels, $bknum[$j];
-- $blabels{$bknum[$j]} = $bkname[$j];
-- $j++
-- }
--
-- print $q->p ($fm->localise('WORKSTN_SEL_REST_DESC') . " $smbhost/$smbshare/$id");
--
-- print $q->h2 ($fm->localise('BACKUP_CHOICE'));
--
-- print $q->start_multipart_form(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
--
-- print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
--
-- esmith::cgi::genWidgetRow(
-- $q,
-- $q->b($fm->localise('SELECT_BACKUP_FILE')),
-- $q->popup_menu (
-- -name => 'backupset',
-- -values => [ @blabels ],
-- -labels => \%blabels)
-- ),
--
-- esmith::cgi::genNameValueRow(
-- $q,
-- $fm->localise('FILTER_EXPRESSION'),
-- 'filterexp',
-- $filterexp
-- )
-- );
--
--
-- print $q->table ({width => "100%", -class => "sme-noborders"},
-- esmith::cgi::genButtonRow(
-- $q,
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('PERFORM')
-- )
-- )
-- ),"\n";
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-sel-restore'
-- );
--
-- print $q->endform;
--
--
-- esmith::cgi::genFooter ($q);
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--}
--
--sub performWorkstnSelRestore
--{
-- my ($q) = @_;
--
-- my $rgfilter;
-- my $filterexp = $q->param ('filterexp');
-- if ($filterexp =~ /^(.*)$/)
-- {
-- $filterexp = $1;
-- $rgfilter = qr/$filterexp/;
-- }
-- else
-- {
-- $filterexp = "";
-- }
-- my $seldatebf;
--
-- esmith::cgi::genHeaderNonCacheable ($q,
-- undef, $fm->localise('WORKSTN_SELECTIVE_RESTORE'));
--
-- my $backupwkrec = $conf->get('backupwk');
-- my $smbhost = $backupwkrec->prop('SmbHost');
-- my $smbshare = $backupwkrec->prop('SmbShare');
-- my $login = $backupwkrec->prop('Login');
-- my $password = $backupwkrec->prop('Password');
-- my $mntdir = $backupwkrec->prop('MountDir') || '/mnt/smb';
-- my $mntbkdir;
-- my $mounted;
-- my $key;
-- my $id = $backupwkrec->prop('Id') ||
-- $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my @flabels;
-- my %flabels = ();
-- my $VFSType = $backupwkrec->prop('VFSType') || 'cifs';
-- my $err;
--
-- my $backupkey = $q->param ('backupset');
-- if ($backupkey =~ /^(.*)$/)
-- {
-- $backupkey = $1;
-- }
-- else
-- {
-- die('Unsecure data : ' . $backupkey);
-- }
--
-- # Mounting backup shared folder
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- $mntbkdir = $mntdir . "/$id";
-- unless (-d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_HOST_DIR'), $id
-- );
-- return;
-- }
--
-- # Read wanted file list from selected backup
--
-- if (open(RD, "-|"))
-- {
-- my $regex = qr/\[.*\] */;
-- while ()
-- {
-- $_ =~ s/$regex//;
-- if ($filterexp) {next unless m/$rgfilter/};
-- push @flabels, $_;
-- }
--
-- my $status = close RD ?
-- $fm->localise('READ_COMPLETE')
-- : ($fm->localise('ERROR_READING_FILE').' : '.$backupkey);
-- print $q->p ($status);
--
-- }
-- else
-- {
-- select(STDOUT);
-- $| = 1;
--
-- system ("/usr/bin/dar_manager", "-B", "$mntbkdir/dar-catalog", "-u", "$backupkey") == 0
-- or die ($fm->localise('ERR_EXTRACT')." : ".$!);
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- exit(0);
-- }
--
-- print $q->start_multipart_form(
-- -method => 'POST',
-- -action => $q->url (-absolute => 1)
-- );
--
-- print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
--
-- esmith::cgi::genWidgetRow(
-- $q,
-- $q->b($fm->localise('SELECT_FILES_TO_RESTORE')),
-- $q->scrolling_list (
-- -name => 'restorefiles',
-- -values => [ @flabels ],
-- -size => 15,
-- -multiple => 'true')
-- ),
--
-- esmith::cgi::genNameValueRow(
-- $q,
-- $fm->localise('SELECT_DATE_BEFORE'),
-- 'seldatebefore',
-- $seldatebf
-- )
-- );
--
-- print $q->table ({width => "100%", -class => "sme-noborders"},
-- esmith::cgi::genButtonRow(
-- $q,
-- $q->submit(
-- -name => 'action',
-- -value => $fm->localise('PERFORM')
-- )
-- )
-- ),"\n";
--
-- print $q->hidden(
-- -name => 'state',
-- -override => 1,
-- -default => 'workstn-sel-restore2'
-- );
--
-- print $q->hidden(
-- -name => 'when',
-- -override => 1,
-- -value => $seldatebf
-- );
--
-- print $q->endform;
--
-- esmith::cgi::genFooter ($q);
--
--}
--
--sub performWorkstnSelRestore2
--{
-- my ($q) = @_;
--
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('RESTORE_IN_PROGRESS'));
--
-- my @restorelist;
-- my $when = $q->param ('seldatebefore');
-- if ($when =~ /^(.*)$/)
-- {
-- $when = $1;
-- }
-- else
-- {
-- die('Unsecure data : ' . $when);
-- }
-- my $tymd =
-- qr/((19|20)\d\d\/(?=\d\d\/\d\d-))?((0?[1-9]|1[0-2])\/(?=\d\d-))?((31|[123]0|[012]?[1-9])-)?/;
-- my $thms =
-- qr/([01]?[0-9]|2[0-3]):([0-5][0-9])(:[0-5][0-9])?/;
--
-- unless (($when =~ m/^$tymd$thms$/) || ($when eq ""))
-- {
-- esmith::cgi::genResult(
-- $q, "$when : " . $fm->localise('ERR_INVALID_SELDATE')
-- );
-- return;
-- }
--
-- my $f;
-- foreach $f ($q->param ('restorefiles'))
-- {
-- if ($f =~ /^(.*)$/)
-- {
-- push @restorelist, "\"".$1."\"";
-- }
-- }
--
-- # mounting backup shared folder
--
-- my $backupwkrec = $conf->get('backupwk');
-- my $login = $backupwkrec->prop('Login');
-- my $password = $backupwkrec->prop('Password');
-- my $id = $backupwkrec->prop('Id') ||
-- $conf->get('SystemName')->value . "." . $conf->get('DomainName')->value;
-- my $mntdir = $backupwkrec->prop('MountDir') || '/mnt/smb';
-- my $mounted;
-- my $VFSType = $backupwkrec->prop('VFSType') || 'cifs';
-- my $smbhost = $backupwkrec->prop('SmbHost');
-- my $smbshare = $backupwkrec->prop('SmbShare');
-- my $err;
--
-- if ($err = dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType))
-- {
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_MOUNTING_SMBSHARE') . "\n" . $err
-- );
-- return;
-- }
-- else {$mounted = 1}
--
-- # Test if backup subdirectory for our server
--
-- my $mntbkdir = $mntdir . "/$id";
-- unless (-d $mntbkdir)
-- {
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
-- esmith::cgi::genResult(
-- $q, $fm->localise('ERR_NO_HOST_DIR'), $id
-- );
-- return;
-- }
--
-- # backup is online, restoring now
--
-- $| = 1;
-- my $restorerr;
--
-- if (open(RD, "-|"))
-- {
--
-- #-----------------------------------------------------
-- # restore system from uploaded workstation backup file
-- #-----------------------------------------------------
--
-- print $q->p($fm->localise('FILES_HAVE_BEEN_RESTORED'));
--
-- print '';
-- while ()
-- {
-- print "- $_
\n";
-- }
--
-- print '
';
-- my $message;
-- if (!close RD)
-- {
-- $message = $fm->localise('RESTORE_FAILED_MSG');
-- }
-- else
-- {
-- if ($restorerr)
-- {
-- $message = $fm->localise('RESTORE_FAILED');
-- }
-- else
-- {
-- $message = $fm->localise('RESTORE_COMPLETE');
-- }
-- }
--
-- print $q->p ($q->b ($message));
--
-- esmith::cgi::genFooter ($q);
-- }
-- else
-- {
-- select(STDOUT);
-- $| = 1;
--
-- if ($when)
-- {
-- $restorerr = system ("/usr/bin/dar_manager -B $mntbkdir/dar-catalog -w $when -e '-N -R / -w' -r @restorelist");
-- }
-- else
-- {
-- $restorerr = system ("/usr/bin/dar_manager -B $mntbkdir/dar-catalog -e '-N -R / -w' -r @restorelist");
-- }
--
-- if ($mounted)
-- {
-- system("/bin/umount", "$mntdir") == 0
-- or die($fm->localise('ERR_WHILE_UNMOUNTING'),"\n");
-- }
--
-- exit(0);
-- }
-- return;
--}
--
--sub performReboot ()
--{
-- esmith::cgi::genHeaderNonCacheable ($q, undef,
-- $fm->localise('SERVER_REBOOT'));
--
-- print $q->p (
-- $q->b ($fm->localise('SERVER_WILL_REBOOT'))
-- );
--
-- esmith::cgi::genFooter($fm);
--
-- esmith::util::backgroundCommand(
-- 5,
-- "/sbin/e-smith/signal-event",
-- "reboot"
-- );
--}
--
--sub CalculateSizes ()
--{
-- #------------------------------------------------------------
-- # figure out the size of the tar file.
-- #------------------------------------------------------------
--
-- my $tarsize = 0;
--
-- # It takes way too much time to do a du on /home/e-smith. So we'll
-- # estimate the current size.
-- # We do this by checking the quota used by each user on the system.
--
-- use Quota;
-- use esmith::AccountsDB;
-- my $accounts = esmith::AccountsDB->open;
--
-- # Get a $dev value appropriate for use in Quota::query call.
-- my $dev = Quota::getqcarg("/home/e-smith/files");
--
-- foreach my $user ($accounts->users())
-- {
-- my $name = $user->key;
-- my $uid = getpwnam($name);
-- unless ($uid)
-- {
-- warn ($fm->localise('NO_UID_FOR_NAME').$name."\n");
-- # We shouldn't ever get here. If we do, we can't get
-- # the quota value for this user, so we just skip to
-- # the next one.
-- next;
-- }
--
-- # Get current quota settings.
-- my ($blocks) = Quota::query($dev, $uid, 0);
-- $tarsize += $blocks;
-- }
--
-- # We add to this the size of root owned firectories, estimated using du.
-- # If this takes too long, then the admin only has his or
-- # herself to blame!
--
-- # Remove /home/e-smith from backup list, and make paths absolute
-- my @list = map { "/$_" } grep { !/home\/e-smith/ } @directories;
-- open(DU, "-|")
-- or exec '/usr/bin/du', '-s', @list;
--
-- while ()
-- {
-- my ($du) = split(/\s+/);
-- $tarsize += $du;
-- }
-- close DU;
--
-- $tarsize = &showSize($tarsize);
--
-- #------------------------------------------------------------
-- # figure out the size of the dump files
-- #------------------------------------------------------------
--
-- my $dumpsize = 0;
--
-- open(DF, "-|")
-- or exec '/bin/df', '-P', '-t', 'ext3';
--
-- while ()
-- {
-- next unless (/^\//);
--
-- (undef, undef, my $s, undef) = split(/\s+/, $_);
--
-- $dumpsize += $s;
-- }
--
-- # increase size by 10% to cope with dump overhead.
--
-- $dumpsize *= 1.1;
--
-- close DF;
--
-- $dumpsize = &showSize($dumpsize);
--
-- #------------------------------------------------------------
-- # how much free space is in /tmp
-- #------------------------------------------------------------
--
-- my $tmpfree = 0;
-- my $halffree = 0;
--
-- open(DF, "-|")
-- or exec '/bin/df', '-P', '-t', 'ext3', '/tmp';
--
-- while ()
-- {
-- next unless (/^\//);
--
-- (undef, undef, undef, my $s) = split(/\s+/, $_);
--
-- $tmpfree += $s;
-- }
--
-- close DF;
--
-- $halffree = $tmpfree / 2;
--
-- $tmpfree = &showSize($tmpfree);
-- $halffree = &showSize($halffree);
--
-- return ($tarsize, $dumpsize, $tmpfree, $halffree);
--}
--
--sub showSize
--{
-- # convert size to Mb or Gb or Tb :) Remember, df reports in kb.
--
-- my $size = shift;
--
-- my $Mb = 1024;
-- my $Gb = $Mb * $Mb;
-- my $Tb = $Mb * $Mb * $Mb;
--
-- if ($size >= $Tb)
-- {
-- $size /= $Tb;
-- $size = int($size) . "Tb";
-- }
-- elsif ($size >= $Gb)
-- {
-- $size /= $Gb;
-- $size = int($size) . "Gb";
-- }
-- elsif ($size >= $Mb)
-- {
-- $size /= $Mb;
-- $size = int($size) . "Mb";
-- }
-- else
-- {
-- $size .= "kb";
-- }
--
-- return $size;
--}
--
--sub dmount()
--{
-- # mount dar unit according to dar-workstation configuration
-- # return nothing if mount successfull
--
-- my ($host,$share,$mountdir,$login,$password,$VFSType) = @_;
--
-- if ($VFSType eq 'cifs')
-- {
-- return ( qx(/bin/mount -t cifs "$host:$share" $mountdir -o credentials=/etc/dar/CIFScredentials,nounix) );
-- }
-- elsif ($VFSType eq 'nfs')
-- {
-- return ( qx(/bin/mount -t nfs -o nolock "$host:/$share" $mountdir 2>&1) );
-- }
-- elsif ($VFSType eq 'usb')
-- {
-- $_[2] = "/" . $share;
-- my $device = "";
-- my $blkdev = "";
-- my $vollbl = "";
-- foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) {
-- $udi =~ m/^(\S+)/;
-- my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted);
--
-- if ($is_mounted eq "false\n") {
-- $blkdev = qx(hal-get-property --udi $1 --key block.device);
-- if ($blkdev =~ m/^(\S+)/) {$blkdev = $1;}
-- }
-- if ($is_mounted eq "false\n") {
-- $vollbl = qx(hal-get-property --udi $1 --key volume.label);
-- $vollbl =~ m/^(\S+)/;
-- if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';}
-- }
--
-- chomp $vollbl;
-- chomp $blkdev;
-- $vollbl = lc("media/$vollbl");
-- if ($vollbl eq $share) {
-- $device = $blkdev;
-- }
-- }
-- return ( qx(/bin/mount $device "/$share" 2>&1) );
-- }
-- else
-- {
-- return ("Error while mounting $host/$share : $VFSType not supported.\n");
-- }
--}
--
--__DATA__
--