- changed required File::RsyncP version to 0.50.
[BackupPC.git] / cgi-bin / BackupPC_Admin
1 #!/bin/perl
2 #============================================================= -*-perl-*-w
3 #
4 # BackupPC_Admin: Apache/CGI interface for BackupPC.
5 #
6 # DESCRIPTION
7 #   BackupPC_Admin provides a flexible web interface for BackupPC.
8 #   It is a CGI script that runs under Apache.
9 #
10 #   It requires that Apache pass in $ENV{SCRIPT_NAME} and
11 #   $ENV{REMOTE_USER}. The latter requires .ht_access style
12 #   authentication. Replace the code below if you are using some other
13 #   type of authentication, and have a different way of getting the
14 #   user name.
15 #
16 #   Also, this script needs to run as the BackupPC user.  To accomplish
17 #   this the script is typically installed as setuid to the BackupPC user,
18 #   or it can run under mod_perl with httpd running as the BackupPC user.
19 #
20 # AUTHOR
21 #   Craig Barratt  <cbarratt@users.sourceforge.net>
22 #
23 # COPYRIGHT
24 #   Copyright (C) 2001-2003  Craig Barratt
25 #
26 #   This program is free software; you can redistribute it and/or modify
27 #   it under the terms of the GNU General Public License as published by
28 #   the Free Software Foundation; either version 2 of the License, or
29 #   (at your option) any later version.
30 #
31 #   This program is distributed in the hope that it will be useful,
32 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
33 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34 #   GNU General Public License for more details.
35 #
36 #   You should have received a copy of the GNU General Public License
37 #   along with this program; if not, write to the Free Software
38 #   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
39 #
40 #========================================================================
41 #
42 # Version 2.1.0_CVS, released 8 Feb 2004.
43 #
44 # See http://backuppc.sourceforge.net.
45 #
46 #========================================================================
47
48 use strict;
49 no  utf8;
50 use CGI;
51 use CGI::Carp qw(fatalsToBrowser);
52 use lib "/usr/local/BackupPC/lib";
53
54 use BackupPC::Lib;
55 use BackupPC::CGI::Lib qw(:all);
56
57 BackupPC::CGI::Lib::NewRequest;
58
59 my %ActionDispatch = (
60     "summary"                    => "Summary",
61     $Lang->{Start_Incr_Backup}   => "StartStopBackup",
62     $Lang->{Start_Full_Backup}   => "StartStopBackup",
63     $Lang->{Stop_Dequeue_Backup} => "StartStopBackup",
64     $Lang->{Stop_Dequeue_Archive} => "StartStopBackup",
65     "queue"                      => "Queue",
66     "view"                       => "View",
67     "LOGlist"                    => "LOGlist",
68     "emailSummary"               => "EmailSummary",
69     "browse"                     => "Browse",
70     "dirHistory"                 => "DirHistory",
71     $Lang->{Restore}             => "Restore",
72     "RestoreFile"                => "RestoreFile",
73     "hostInfo"                   => "HostInfo",
74     "generalInfo"                => "GeneralInfo",
75     "restoreInfo"                => "RestoreInfo",
76     "archiveInfo"                => "ArchiveInfo",
77     $Lang->{Start_Archive}       => "Archive",
78     "Archive"                    => "Archive",
79     "Reload"                     => "ReloadServer",
80     "startServer"                => "StartServer",
81     "Stop"                       => "StopServer",
82     "adminOpts"                  => "AdminOptions",
83 );
84
85 #
86 # Set default actions, then call sub handler
87 #
88 $In{action} ||= "hostInfo"    if ( defined($In{host}) );
89 ## rk default non admin users to pc summary for their hosts
90 $In{action}   = "summary" if ( !defined($ActionDispatch{$In{action}}) && !CheckPermission());
91 $In{action}   = "generalInfo" if ( !defined($ActionDispatch{$In{action}}) );
92 my $action    = $ActionDispatch{$In{action}};
93
94 #
95 # For some reason under mod_perl, the use lib above is unreliable,
96 # and sometimes the module below cannot be found.  Explicitly push
97 # the directory onto INC if it is missing.  This is an ugly hack;
98 # need to figure out what's really going on...
99 #
100 my $installDir = '/usr/local/BackupPC/lib';
101 push(@INC, $installDir) if ( !grep($_ eq $installDir, @INC) );
102
103 #
104 # Load the relevant action script and run it
105 #
106 require "BackupPC/CGI/$action.pm"
107             if ( !defined($BackupPC::CGI::{"${action}::"}) );
108 $BackupPC::CGI::{"${action}::"}{action}();