Commit | Line | Data |
---|---|---|
99248ed2 MW |
1 | ### -*-sh-*- |
2 | ### | |
3 | ### Functions for backup clients. | |
4 | ### | |
5 | ### (c) 2011 Mark Wooding | |
6 | ### | |
7 | ||
8 | ###----- Licensing notice --------------------------------------------------- | |
9 | ### | |
13678d88 MW |
10 | ### This file is part of the distorted.org.uk backup suite. |
11 | ### | |
12 | ### distorted-backup is free software; you can redistribute it and/or modify | |
99248ed2 MW |
13 | ### it under the terms of the GNU General Public License as published by |
14 | ### the Free Software Foundation; either version 2 of the License, or | |
15 | ### (at your option) any later version. | |
16 | ### | |
13678d88 | 17 | ### distorted-backup is distributed in the hope that it will be useful, |
99248ed2 MW |
18 | ### but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | ### GNU General Public License for more details. | |
21 | ### | |
22 | ### You should have received a copy of the GNU General Public License | |
13678d88 | 23 | ### along with distorted-backup; if not, write to the Free Software Foundation, |
99248ed2 MW |
24 | ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
25 | ||
26 | set -e | |
27 | ||
28 | ###-------------------------------------------------------------------------- | |
29 | ### Utilities. | |
30 | ||
31 | QUIS=${0##*/} | |
32 | fail () { echo >&2 "$QUIS: $*"; exit 1; } | |
33 | ||
34 | preflight () { | |
35 | for i in TMPDIR HOST RMT LEVEL LASTDATE ASSET TARGET; do | |
36 | eval "p=\${BKP_$i+t}" | |
37 | case "$p" in t) ;; *) fail "environment not correctly configured" ;; esac | |
38 | done | |
39 | } | |
40 | ||
41 | run () { | |
42 | echo "$*" | |
43 | "$@" | |
44 | } | |
45 | ||
46 | bkpadmin () { | |
47 | ## bkpadmin COMMAND ARGUMENT ... | |
48 | ssh $BKP_HOST userv root bkpadmin "$@" | |
49 | } | |
50 | ||
51 | datefmt () { | |
52 | fmt=$1 date=$2 | |
53 | ## Convert the DATE (in ISO8601-ish format, with an optional numeric | |
54 | ## timezone offset) according to the strftime(3) format FMT. | |
55 | ||
56 | ## We have Perl available, so you'd think this would be fairly easy. Alas, | |
57 | ## not. The obvious thing to do would be use the Date::Format module, but | |
58 | ## that's unusably broken. Consider: | |
59 | ## | |
60 | ## $t0 = 1319934600; $t1 = $t0 + 3600; # obviously different | |
61 | ## for my $i ($t0, $t1) # print identically | |
62 | ## { print time2str "%a %b %e %H:%M:%S %Y %z\n", $i; } | |
63 | ## | |
64 | ## The Date::Parse module seems to work correctly, but isn't installed by | |
65 | ## default on some of our target platforms. So we end up doing a lot of | |
66 | ## the work by hand. | |
67 | ||
68 | perl -e ' | |
69 | use POSIX; | |
70 | ||
71 | my ($fmt, $date) = @ARGV; | |
72 | ||
73 | ## Parse the input date. | |
74 | my ($yr, $mo, $dy, $hr, $mi, $s, $tz) = $date =~ | |
75 | /^\s*(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)(?:\s+)?([-+]\d+)?\s*$/ | |
76 | or die "bad input date `$date'\''"; | |
77 | ||
78 | ## Convert the input date into a time_t. This is annoyingly fiddly. If | |
79 | ## an explicit timezone offset is supplied, do the conversion as UTC, and | |
80 | ## then apply the timezone correction. This means that we must hack | |
81 | ## about with the awful BCD timezone offset. | |
82 | my $t; | |
83 | if (!defined $tz) { | |
84 | $t = mktime $s, $mi, $hr, $dy, $mo - 1, $yr - 1900, undef, undef, -1; | |
85 | } else { | |
86 | use integer; | |
87 | my ($tzsign, $tzabs) = $tz < 0 ? (-1, -$tz) : (+1, $tz); | |
88 | my $tzoff = $tzsign*(60*($tzabs/100) + ($tzabs%100)); | |
89 | local $ENV{TZ} = "UTC0"; tzset; | |
90 | $t = mktime $s, $mi, $hr, $dy, $mo - 1, $yr - 1900, undef, undef, 0; | |
91 | $t -= 60*$tzoff; | |
92 | } | |
93 | ||
94 | ## Now format this as requested. | |
95 | tzset; my @tm = localtime $t; | |
96 | print strftime $fmt, @tm; | |
97 | print "\n"; | |
98 | ' "$fmt" "$date" | |
99 | } | |
100 | ||
101 | ###----- That's all, folks -------------------------------------------------- |