View | Details | Raw Unified | Return to bug 8268
Collapse All | Expand All

(-)a/Makefile.PL (+9 lines)
Lines 226-231 command-line, e.g., READMEs. Link Here
226
226
227
Directory for Apache and Zebra logs produced by Koha.
227
Directory for Apache and Zebra logs produced by Koha.
228
228
229
=item BACKUP_DIR
230
231
Directory for backup files produced by Koha.
232
229
=item PAZPAR2_CONF_DIR
233
=item PAZPAR2_CONF_DIR
230
234
231
Directory for PazPar2 configuration files.
235
Directory for PazPar2 configuration files.
Lines 293-298 my $target_map = { Link Here
293
  './services'                  => 'INTRANET_CGI_DIR',
297
  './services'                  => 'INTRANET_CGI_DIR',
294
  './skel'                      => 'NONE',
298
  './skel'                      => 'NONE',
295
  './skel/var/log/koha'         => { target => 'LOG_DIR', trimdir => -1 },
299
  './skel/var/log/koha'         => { target => 'LOG_DIR', trimdir => -1 },
300
  './skel/var/spool/koha'       => { target => 'BACKUP_DIR', trimdir => -1 },
296
  './skel/var/run/koha/zebradb' => { target => 'ZEBRA_RUN_DIR', trimdir => -1 },
301
  './skel/var/run/koha/zebradb' => { target => 'ZEBRA_RUN_DIR', trimdir => -1 },
297
  './skel/var/lock/koha/zebradb/authorities' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 },
302
  './skel/var/lock/koha/zebradb/authorities' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 },
298
  './skel/var/lib/koha/zebradb/authorities/key'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
303
  './skel/var/lib/koha/zebradb/authorities/key'  => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
Lines 548-553 my %test_suite_override_dirs = ( Link Here
548
    KOHA_CONF_DIR  => ['etc'],
553
    KOHA_CONF_DIR  => ['etc'],
549
    ZEBRA_CONF_DIR => ['etc', 'zebradb'],
554
    ZEBRA_CONF_DIR => ['etc', 'zebradb'],
550
    LOG_DIR        => ['var', 'log'],
555
    LOG_DIR        => ['var', 'log'],
556
    BACKUP_DIR     => ['var', 'spool'],
551
    SCRIPT_DIR     => ['bin'],
557
    SCRIPT_DIR     => ['bin'],
552
    ZEBRA_LOCK_DIR => ['var', 'lock', 'zebradb'],
558
    ZEBRA_LOCK_DIR => ['var', 'lock', 'zebradb'],
553
    ZEBRA_DATA_DIR => ['var', 'lib', 'zebradb'],
559
    ZEBRA_DATA_DIR => ['var', 'lib', 'zebradb'],
Lines 1227-1232 sub get_target_directories { Link Here
1227
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1233
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1228
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1234
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1229
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1235
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1236
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1230
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1237
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1231
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1238
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1232
    } elsif ($mode eq 'dev') {
1239
    } elsif ($mode eq 'dev') {
Lines 1256-1261 sub get_target_directories { Link Here
1256
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1263
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1257
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1264
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
1258
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1265
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'log');
1266
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'spool');
1259
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1267
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
1260
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1268
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
1261
    } else {
1269
    } else {
Lines 1277-1282 sub get_target_directories { Link Here
1277
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1285
        $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
1278
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1286
        $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
1279
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1287
        $dirmap{'LOG_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
1288
        $dirmap{'BACKUP_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'spool', $package);
1280
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1289
        $dirmap{'ZEBRA_DATA_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
1281
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1290
        $dirmap{'ZEBRA_RUN_DIR'} =  File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
1282
    }
1291
    }
(-)a/debian/scripts/koha-dump (-2 / +4 lines)
Lines 44-50 mysqlhost="$( xmlstarlet sel -t -v 'yazgfs/config/hostname' $kohaconfig )" Link Here
44
mysqldb="$( xmlstarlet sel -t -v 'yazgfs/config/database' $kohaconfig )"
44
mysqldb="$( xmlstarlet sel -t -v 'yazgfs/config/database' $kohaconfig )"
45
mysqluser="$( xmlstarlet sel -t -v 'yazgfs/config/user' $kohaconfig )"
45
mysqluser="$( xmlstarlet sel -t -v 'yazgfs/config/user' $kohaconfig )"
46
mysqlpass="$( xmlstarlet sel -t -v 'yazgfs/config/pass' $kohaconfig )"
46
mysqlpass="$( xmlstarlet sel -t -v 'yazgfs/config/pass' $kohaconfig )"
47
dbdump="/var/spool/koha/$name/$name-$date.sql.gz"
47
backupdir="$( xmlstarlet sel -t -v 'yazgfs/config/backupdir' $kohaconfig )"
48
[ -z "$backupdir" ] && backupdir="/var/spool/koha/$name"
49
dbdump="$backupdir/$name-$date.sql.gz"
48
echo "* DB to $dbdump"
50
echo "* DB to $dbdump"
49
mysqldump --databases --host="$mysqlhost" \
51
mysqldump --databases --host="$mysqlhost" \
50
    --user="$mysqluser" --password="$mysqlpass" "$mysqldb" | 
52
    --user="$mysqluser" --password="$mysqlpass" "$mysqldb" | 
Lines 54-60 chmod g+r "$dbdump" Link Here
54
56
55
57
56
# Dump configs, logs, etc.
58
# Dump configs, logs, etc.
57
metadump="/var/spool/koha/$name/$name-$date.tar.gz"
59
metadump="$backupdir/$name-$date.tar.gz"
58
echo "* configs, logs to $metadump"
60
echo "* configs, logs to $metadump"
59
tar -C / -czf "$metadump" \
61
tar -C / -czf "$metadump" \
60
    "etc/koha/sites/$name" \
62
    "etc/koha/sites/$name" \
(-)a/debian/scripts/koha-run-backups (-4 / +9 lines)
Lines 17-23 Link Here
17
# Daily cron job for koha.
17
# Daily cron job for koha.
18
# - dump all sites, except one called 'demo'
18
# - dump all sites, except one called 'demo'
19
19
20
dirname="/var/spool/koha"
20
dirname=""
21
days="2"
21
days="2"
22
22
23
show_help() {
23
show_help() {
Lines 58-67 done Link Here
58
for name in $(koha-list --enabled | grep -Fxv demo)
58
for name in $(koha-list --enabled | grep -Fxv demo)
59
do
59
do
60
    koha-dump "$name" > /dev/null
60
    koha-dump "$name" > /dev/null
61
    if [ -z "$dirname"]; then
62
        backupdir="$( xmlstarlet sel -t -v 'yazgfs/config/backupdir' /etc/koha/sites/$name/koha-conf.xml )";
63
    else
64
        backupdir="$dirname/$name";
65
    fi
61
66
62
    # Remove old dump files.
67
    # Remove old dump files.
63
    # FIXME: This could probably be replaced by one line of perl.
68
    # FIXME: This could probably be replaced by one line of perl.
64
    ls "$dirname/$name/" | 
69
    ls "$backupdir/" | 
65
    sed "s:^$name-\([0-9-]*\)\.\(sql\|tar\)\.gz$:\1:" |
70
    sed "s:^$name-\([0-9-]*\)\.\(sql\|tar\)\.gz$:\1:" |
66
    sort -u |
71
    sort -u |
67
    tac |
72
    tac |
Lines 69-76 do Link Here
69
    tac |
74
    tac |
70
    while read date
75
    while read date
71
    do
76
    do
72
        tardump="$dirname/$name/$name-$date.tar.gz"
77
        tardump="$backupdir/$name-$date.tar.gz"
73
        sqldump="$dirname/$name/$name-$date.sql.gz"
78
        sqldump="$backupdir/$name-$date.sql.gz"
74
        if [ -e "$tardump" ] && [ -e "$sqldump" ]
79
        if [ -e "$tardump" ] && [ -e "$sqldump" ]
75
        then
80
        then
76
            rm "$tardump"
81
            rm "$tardump"
(-)a/debian/templates/koha-conf-site.xml.in (+6 lines)
Lines 263-268 Link Here
263
 <intrahtdocs>/usr/share/koha/intranet/htdocs/intranet-tmpl</intrahtdocs>
263
 <intrahtdocs>/usr/share/koha/intranet/htdocs/intranet-tmpl</intrahtdocs>
264
 <includes>/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/includes/</includes>
264
 <includes>/usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/includes/</includes>
265
 <logdir>/var/log/koha/__KOHASITE__</logdir>
265
 <logdir>/var/log/koha/__KOHASITE__</logdir>
266
 <backupdir>/var/lib/koha/__KOHASITE__</backupdir>
267
 <!-- Enable the two following to allow superlibrarians to download
268
      database and configuration dumps (respectively) from the Export
269
      tool -->
270
 <backup_db_via_tools>0</backup_db_via_tools>
271
 <backup_conf_via_tools>0</backup_conf_via_tools>
266
 <!-- <pazpar2url>http://__PAZPAR2_HOST__:__PAZPAR2_PORT__/search.pz2</pazpar2url> -->
272
 <!-- <pazpar2url>http://__PAZPAR2_HOST__:__PAZPAR2_PORT__/search.pz2</pazpar2url> -->
267
 <install_log>/usr/share/koha/misc/koha-install-log</install_log>
273
 <install_log>/usr/share/koha/misc/koha-install-log</install_log>
268
 <useldapserver>0</useldapserver><!-- see C4::Auth_with_ldap for extra configs you must add if you want to turn this on -->
274
 <useldapserver>0</useldapserver><!-- see C4::Auth_with_ldap for extra configs you must add if you want to turn this on -->
(-)a/etc/koha-conf.xml (+6 lines)
Lines 282-287 __PAZPAR2_TOGGLE_XML_POST__ Link Here
282
 <intrahtdocs>__INTRANET_TMPL_DIR__</intrahtdocs>
282
 <intrahtdocs>__INTRANET_TMPL_DIR__</intrahtdocs>
283
 <includes>__INTRANET_TMPL_DIR__/prog/en/includes/</includes>
283
 <includes>__INTRANET_TMPL_DIR__/prog/en/includes/</includes>
284
 <logdir>__LOG_DIR__</logdir>
284
 <logdir>__LOG_DIR__</logdir>
285
 <backupdir>__BACKUP_DIR__</backupdir>
286
 <!-- Enable the two following to allow superlibrarians to download
287
      database and configuration dumps (respectively) from the Export
288
      tool -->
289
 <backup_db_via_tools>0</backup_db_via_tools>
290
 <backup_conf_via_tools>0</backup_conf_via_tools>
285
 <pazpar2url>http://__PAZPAR2_HOST__:__PAZPAR2_PORT__/search.pz2</pazpar2url>
291
 <pazpar2url>http://__PAZPAR2_HOST__:__PAZPAR2_PORT__/search.pz2</pazpar2url>
286
 <install_log>__MISC_DIR__/koha-install-log</install_log>
292
 <install_log>__MISC_DIR__/koha-install-log</install_log>
287
 <useldapserver>0</useldapserver><!-- see C4::Auth_with_ldap for extra configs you must add if you want to turn this on -->
293
 <useldapserver>0</useldapserver><!-- see C4::Auth_with_ldap for extra configs you must add if you want to turn this on -->
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt (+58 lines)
Lines 29-34 $(document).ready(function() { Link Here
29
<ul>
29
<ul>
30
<li><a href="#bibs">Export bibliographic records</a></li>
30
<li><a href="#bibs">Export bibliographic records</a></li>
31
<li><a href="#auths">Export authority records</a></li>
31
<li><a href="#auths">Export authority records</a></li>
32
[% IF ( allow_db_export ) %]
33
<li><a href="#db">Export database</a></li>
34
[% END %]
35
[% IF ( allow_conf_export ) %]
36
<li><a href="#conf">Export configuration</a></li>
37
[% END %]
32
</ul>
38
</ul>
33
<div id="bibs">
39
<div id="bibs">
34
<p>
40
<p>
Lines 207-212 Calendar.setup( Link Here
207
</form>
213
</form>
208
</div>
214
</div>
209
215
216
[% IF ( allow_db_export ) %]
217
<div id="db">
218
<form method="post" action="/cgi-bin/koha/tools/export.pl">
219
    <p><b>Note : This export file will be very large, and is generated nightly.</b></p>
220
    <fieldset class="rows">
221
    <legend> Choose a file </legend>
222
    [% IF ( dbfiles && (dbfiles.size > 0) ) %]
223
        <ul>
224
        [% FOREACH dbfile IN dbfiles %]
225
            <li><input type="radio" name="filename" value="[% dbfile %]">[% dbfile %]</input></li>
226
        [% END %]
227
        </ul>
228
    [% ELSE %]
229
        <p>Unfortunately, no backups are available.</p>
230
    [% END %]
231
    </fieldset>
232
233
    [% IF ( dbfiles && (dbfiles.size > 0) ) %]
234
        <input type="hidden" name="op" value="export" />
235
        <input type="hidden" name="record_type" value="db" />
236
        <fieldset class="action"><input type="submit" value="Download database" class="button" /></fieldset>
237
    [% END %]
238
</form>
239
</div>
240
[% END %]
241
242
[% IF ( allow_conf_export ) %]
243
<div id="conf">
244
<form method="post" action="/cgi-bin/koha/tools/export.pl">
245
    <p><b>Note : This export file will be very large, and is generated nightly.</b></p>
246
    <fieldset class="rows">
247
    <legend> Choose a file </legend>
248
    [% IF ( conffiles && (conffiles.size > 0) ) %]
249
        <ul>
250
        [% FOREACH conffile IN conffiles %]
251
            <li><input type="radio" name="filename" value="[% conffile %]">[% conffile %]</input></li>
252
        [% END %]
253
        </ul>
254
    [% ELSE %]
255
        <p>Unfortunately, no backups are available.</p>
256
    [% END %]
257
    </fieldset>
258
259
    [% IF ( conffiles && (conffiles.size > 0) ) %]
260
        <input type="hidden" name="op" value="export" />
261
        <input type="hidden" name="record_type" value="conf" />
262
        <fieldset class="action"><input type="submit" value="Download configuration" class="button" /></fieldset>
263
    [% END %]
264
</form>
265
</div>
266
[% END %]
267
210
</div>
268
</div>
211
269
212
</div>
270
</div>
(-)a/misc/cronjobs/backup.sh (-11 / +7 lines)
Lines 1-23 Link Here
1
#!/bin/sh
1
#!/bin/sh
2
# Script to create daily backups of the Koha database.
2
# Script to create daily backups of the Koha database.
3
# Based on a script by John Pennington
3
# Based on a script by John Pennington
4
BACKUPDIR=`xmlstarlet sel -t -v 'yazgfs/config/backupdir' $KOHA_CONF`
4
KOHA_DATE=`date '+%y%m%d'`
5
KOHA_DATE=`date '+%y%m%d'`
5
KOHA_DUMP=/tmp/koha-$KOHA_DATE.dump
6
KOHA_BACKUP=$BACKUPDIR/koha-$KOHA_DATE.sql.gz
6
KOHA_BACKUP=/tmp/koha-$KOHA_DATE.dump.gz
7
7
8
mysqldump --single-transaction -u koha -ppassword koha > $KOHA_DUMP &&
8
mysqldump --single-transaction -u koha -ppassword koha | gzip -9 > $KOHA_BACKUP
9
gzip -f $KOHA_DUMP &&
10
# Creates the dump file and compresses it;
11
# -u is the Koha user, -p is the password for that user.
12
# The -f switch on gzip forces it to overwrite the file if one exists.
13
9
14
mv $KOHA_BACKUP /home/kohaadmin &&
10
#mv $KOHA_BACKUP /home/kohaadmin &&
15
chown kohaadmin.users /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
11
#chown kohaadmin.users /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
16
chmod 600 /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
12
#chmod 600 /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
17
# Makes the compressed dump file property of the kohaadmin user.
13
# Makes the compressed dump file property of the kohaadmin user.
18
# Make sure that you replace kohaadmin with a real user.
14
# Make sure that you replace kohaadmin with a real user.
19
15
20
echo "$KOHA_BACKUP was successfully created." | mail kohaadmin -s $KOHA_BACKUP ||
16
[ -f $KOHA_BACKUP] && echo "$KOHA_BACKUP was successfully created." | mail kohaadmin -s $KOHA_BACKUP ||
21
echo "$KOHA_BACKUP was NOT successfully created." | mail kohaadmin -s $KOHA_BACKUP
17
echo "$KOHA_BACKUP was NOT successfully created." | mail kohaadmin -s $KOHA_BACKUP
22
# Notifies kohaadmin of (un)successful backup creation
18
# Notifies kohaadmin of (un)successful backup creation
23
# EOF
19
# EOF
(-)a/tools/export.pl (-4 / +86 lines)
Lines 26-31 use C4::AuthoritiesMarc; # GetAuthority Link Here
26
use CGI;
26
use CGI;
27
use C4::Koha;    # GetItemTypes
27
use C4::Koha;    # GetItemTypes
28
use C4::Branch;  # GetBranches
28
use C4::Branch;  # GetBranches
29
use Data::Dumper;
29
30
30
my $query = new CGI;
31
my $query = new CGI;
31
my $op=$query->param("op") || '';
32
my $op=$query->param("op") || '';
Lines 33-39 my $filename=$query->param("filename"); Link Here
33
my $dbh=C4::Context->dbh;
34
my $dbh=C4::Context->dbh;
34
my $marcflavour = C4::Context->preference("marcflavour");
35
my $marcflavour = C4::Context->preference("marcflavour");
35
36
36
my ($template, $loggedinuser, $cookie)
37
my ($template, $loggedinuser, $cookie, $flags)
37
    = get_template_and_user
38
    = get_template_and_user
38
    (
39
    (
39
        {
40
        {
Lines 57-66 my ($template, $loggedinuser, $cookie) Link Here
57
    	$branch = C4::Context->userenv->{'branch'};
58
    	$branch = C4::Context->userenv->{'branch'};
58
	}
59
	}
59
60
61
my $backupdir = C4::Context->config('backupdir');
62
60
if ($op eq "export") {
63
if ($op eq "export") {
64
    my $charset  = 'utf-8';
65
    my $mimetype = 'application/octet-stream';
61
    binmode STDOUT, ':encoding(UTF-8)';
66
    binmode STDOUT, ':encoding(UTF-8)';
62
	print $query->header(   -type => 'application/octet-stream', 
67
    if ( $filename =~ m/\.gz$/ ) {
63
                            -charset => 'utf-8',
68
        $mimetype = 'application/x-gzip';
69
        $charset = '';
70
        binmode STDOUT;
71
    } elsif ( $filename =~ m/\.bz2$/ ) {
72
        $mimetype = 'application/x-bzip2';
73
        binmode STDOUT;
74
        $charset = '';
75
    }
76
    print $query->header(   -type => $mimetype, 
77
                            -charset => $charset,
64
                            -attachment=>$filename);
78
                            -attachment=>$filename);
65
     
79
     
66
    my $record_type        = $query->param("record_type");
80
    my $record_type        = $query->param("record_type");
Lines 159-164 if ($op eq "export") { Link Here
159
            push @sql_params, $authtype;
173
            push @sql_params, $authtype;
160
        }
174
        }
161
    }
175
    }
176
    elsif ( $record_type eq 'db' ) {
177
        my $successful_export;
178
        if ( $flags->{superlibrarian} && C4::Context->config('backup_db_via_tools') ) {
179
            $successful_export = download_backup( { directory => "$backupdir", extension => 'sql', filename => "$filename" } )
180
        }
181
        unless ( $successful_export ) {
182
            warn "A suspicious attempt was made to download the db at '$filename' by someone at " . $query->remote_host() . "\n";
183
        }
184
        exit;
185
    }
186
    elsif ( $record_type eq 'conf' ) {
187
        my $successful_export;
188
        if ( $flags->{superlibrarian} && C4::Context->config('backup_conf_via_tools') ) {
189
            $successful_export = download_backup( { directory => "$backupdir", extension => 'tar', filename => "$filename" } )
190
        }
191
        unless ( $successful_export ) {
192
            warn "A suspicious attempt was made to download the configuration at '$filename' by someone at " . $query->remote_host() . "\n";
193
        }
194
        exit;
195
    }
196
    else {
197
        # Someone is trying to mess us up
198
        exit;
199
    }
162
200
163
    my $sth = $dbh->prepare($sql_query);
201
    my $sth = $dbh->prepare($sql_query);
164
    $sth->execute(@sql_params);
202
    $sth->execute(@sql_params);
Lines 255-260 else { Link Here
255
        push @authtypesloop, \%row;
293
        push @authtypesloop, \%row;
256
    }
294
    }
257
295
296
    if ( $flags->{superlibrarian} && C4::Context->config('backup_db_via_tools') && $backupdir && -d $backupdir ) {
297
        $template->{VARS}->{'allow_db_export'} = 1;
298
        $template->{VARS}->{'dbfiles'} = getbackupfilelist( { directory => "$backupdir", extension => 'sql' } );
299
    }
300
301
    if ( $flags->{superlibrarian} && C4::Context->config('backup_conf_via_tools') && $backupdir && -d $backupdir ) {
302
        $template->{VARS}->{'allow_conf_export'} = 1;
303
        $template->{VARS}->{'conffiles'} = getbackupfilelist( { directory => "$backupdir", extension => 'tar' } );
304
    }
305
258
    $template->param(
306
    $template->param(
259
        branchloop               => \@branchloop,
307
        branchloop               => \@branchloop,
260
        itemtypeloop             => \@itemtypesloop,
308
        itemtypeloop             => \@itemtypesloop,
Lines 264-266 else { Link Here
264
312
265
    output_html_with_http_headers $query, $cookie, $template->output;
313
    output_html_with_http_headers $query, $cookie, $template->output;
266
}
314
}
267
- 
315
316
sub getbackupfilelist {
317
    my $args = shift;
318
    my $directory = $args->{directory};
319
    my $extension = $args->{extension};
320
    my @files;
321
322
    if ( opendir(my $dir, $directory) ) {
323
        while (my $file = readdir($dir)) {
324
            next unless ( $file =~ m/\.$extension(\.(gz|bz2|xz))?/ );
325
            push @files, $file if ( -f "$backupdir/$file" && -r "$backupdir/$file" );
326
        }
327
        closedir($dir);
328
    }
329
    return \@files;
330
}
331
332
sub download_backup {
333
    my $args = shift;
334
    my $directory = $args->{directory};
335
    my $extension = $args->{extension};
336
    my $filename  = $args->{filename};
337
338
    return unless ( $directory && -d $directory );
339
    return unless ( $filename =~ m/$extension(\.(gz|bz2|xz))?$/ && not $filename =~ m#(^\.\.|/)# );
340
    $filename = "$directory/$filename";
341
    return unless ( -f $filename && -r $filename );
342
    return unless ( open(my $dump, '<', $filename) );
343
    binmode $dump;
344
    while (read($dump, my $data, 64 * 1024)) {
345
        print $data;
346
    }
347
    close ($dump);
348
    return 1;
349
}

Return to bug 8268