1 |
chrissn |
1.1 |
diff -urN e-smith-backup-2.6.0.old/root/etc/e-smith/events/actions/workstation-backup-dar e-smith-backup-2.6.0/root/etc/e-smith/events/actions/workstation-backup-dar |
2 |
|
|
--- e-smith-backup-2.6.0.old/root/etc/e-smith/events/actions/workstation-backup-dar 2021-01-30 20:13:44.698955067 +0000 |
3 |
|
|
+++ e-smith-backup-2.6.0/root/etc/e-smith/events/actions/workstation-backup-dar 2021-01-30 20:18:00.982571819 +0000 |
4 |
|
|
@@ -31,6 +31,7 @@ |
5 |
|
|
use File::Glob qw(bsd_glob); |
6 |
|
|
use esmith::ConfigDB; |
7 |
|
|
use esmith::Backup; |
8 |
|
|
+use esmith::BlockDevices; |
9 |
|
|
|
10 |
|
|
sub ldie; |
11 |
|
|
sub start_dar_killer; |
12 |
|
|
@@ -312,77 +313,61 @@ |
13 |
|
|
return $code; |
14 |
|
|
} |
15 |
|
|
|
16 |
|
|
- |
17 |
|
|
+# Copied from /etc/e-smith/web/functions/backup |
18 |
|
|
+# TODO: Move to a shared module |
19 |
|
|
sub checkMount |
20 |
|
|
{ |
21 |
|
|
# check if $mountdir is mounted |
22 |
|
|
my $mountdir = shift; |
23 |
|
|
$|=1; # Auto-flush |
24 |
|
|
- |
25 |
|
|
- # copy STDOUT to another filehandle |
26 |
|
|
- open (my $STDOLD, '>&', STDOUT); |
27 |
|
|
- |
28 |
|
|
- open(STDOUT, ">/dev/null"); |
29 |
|
|
- if ( open(MOUNTDIR, "|-", "/bin/findmnt", $mountdir)){;} |
30 |
|
|
|
31 |
|
|
- # restore STDOUT |
32 |
|
|
- open (STDOUT, '>&', $STDOLD); |
33 |
|
|
- |
34 |
|
|
- return (!close(MOUNTDIR)); |
35 |
|
|
+ my @res = qx( findmnt $mountdir ); |
36 |
|
|
+ return ( !@res ); |
37 |
|
|
} |
38 |
|
|
|
39 |
|
|
|
40 |
|
|
-# dmount is copied from /etc/e-smith/web/functions/backup |
41 |
|
|
-# it could become a common function later |
42 |
|
|
+# Copied from /etc/e-smith/web/functions/backup |
43 |
|
|
+# TODO: Move to a shared module |
44 |
|
|
sub dmount |
45 |
|
|
{ |
46 |
|
|
# mount dar unit according to dar-workstation configuration |
47 |
|
|
# return nothing if mount successfull |
48 |
|
|
|
49 |
|
|
my ($host,$share,$mountdir,$login,$password,$VFSType) = @_; |
50 |
|
|
- |
51 |
|
|
+ |
52 |
|
|
if ($VFSType eq 'cifs') |
53 |
|
|
{ |
54 |
|
|
- return ( qx(/bin/mount -t cifs "//$host/$share" $mountdir -o credentials=/etc/dar/CIFScredentials,nounix 2>&1) ); |
55 |
|
|
+ return ( qx(/bin/mount -t cifs "//$host/$share" $mountdir -o credentials=/etc/dar/CIFScredentials,nounix 2>&1) ); |
56 |
|
|
} |
57 |
|
|
elsif ($VFSType eq 'nfs') |
58 |
|
|
{ |
59 |
|
|
- return ( qx(/bin/mount -t nfs -o nolock "$host:/$share" $mountdir 2>&1) ); |
60 |
|
|
+ return ( qx(/bin/mount -t nfs -o nolock "$host:/$share" $mountdir 2>&1) ); |
61 |
|
|
} |
62 |
|
|
elsif ($VFSType eq 'usb') |
63 |
|
|
{ |
64 |
|
|
my $device = ""; |
65 |
|
|
- my $blkdev = ""; |
66 |
|
|
my $vollbl = ""; |
67 |
|
|
- foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) |
68 |
|
|
- { |
69 |
|
|
- $udi =~ m/^(\S+)/; |
70 |
|
|
- my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted); |
71 |
|
|
|
72 |
|
|
- if ($is_mounted eq "false\n") |
73 |
|
|
- { |
74 |
|
|
- $blkdev = qx(hal-get-property --udi $1 --key block.device); |
75 |
|
|
- if ($blkdev =~ m/^(\S+)/) {$blkdev = $1;} |
76 |
|
|
- } |
77 |
|
|
- if ($is_mounted eq "false\n") |
78 |
|
|
- { |
79 |
|
|
- $vollbl = qx(hal-get-property --udi $1 --key volume.label); |
80 |
|
|
- $vollbl =~ m/^(\S+)/; |
81 |
|
|
- if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';} |
82 |
|
|
- } |
83 |
|
|
+ my $devices = esmith::BlockDevices->new ('allowmount' => 'disabled'); |
84 |
|
|
+ my ($valid, $invalid) = $devices->checkBackupDrives(0, 1); |
85 |
|
|
|
86 |
|
|
- chomp $vollbl; |
87 |
|
|
- chomp $blkdev; |
88 |
|
|
- $vollbl = "media/$vollbl"; |
89 |
|
|
- if ($vollbl eq $share) {$device = $blkdev;} |
90 |
|
|
+ if ( ${$valid}[0] ) { |
91 |
|
|
+ foreach ( @{$valid} ) { |
92 |
|
|
+ warn $_; |
93 |
|
|
+ $vollbl = $devices->label($_); |
94 |
|
|
+ if ( $share eq "media/$vollbl" ) { |
95 |
|
|
+ $device = "/dev/$_"; |
96 |
|
|
+ } |
97 |
|
|
+ } |
98 |
|
|
} |
99 |
|
|
- return ( qx(/bin/mount $device "/$share" 2>&1) ); |
100 |
|
|
+ $devices->destroy; |
101 |
|
|
+ return ( qx (mount $device /$share 2>&1) ); |
102 |
|
|
} |
103 |
|
|
else |
104 |
|
|
{ |
105 |
|
|
- return ("Mount of type $VFSType not supported.\n"); |
106 |
|
|
+ return ("Error while mounting $host/$share : $VFSType not supported.\n"); |
107 |
|
|
} |
108 |
|
|
-} |
109 |
|
|
+} |
110 |
|
|
|
111 |
|
|
|
112 |
|
|
sub removeTree |
113 |
|
|
diff -urN e-smith-backup-2.6.0.old/root/etc/e-smith/web/functions/backup e-smith-backup-2.6.0/root/etc/e-smith/web/functions/backup |
114 |
|
|
--- e-smith-backup-2.6.0.old/root/etc/e-smith/web/functions/backup 2021-01-30 20:13:44.674956230 +0000 |
115 |
|
|
+++ e-smith-backup-2.6.0/root/etc/e-smith/web/functions/backup 2021-01-30 20:17:32.531942610 +0000 |
116 |
|
|
@@ -27,6 +27,7 @@ |
117 |
|
|
use esmith::ConfigDB; |
118 |
|
|
use esmith::Backup; |
119 |
|
|
use esmith::BackupHistoryDB; |
120 |
|
|
+use esmith::BlockDevices; |
121 |
|
|
use esmith::AccountsDB; |
122 |
|
|
use esmith::cgi; |
123 |
|
|
use esmith::util; |
124 |
|
|
@@ -697,9 +698,9 @@ |
125 |
|
|
if (defined $status && $status eq "on") |
126 |
|
|
{ |
127 |
|
|
|
128 |
|
|
- #-------------------------------------------------- |
129 |
|
|
- # Untaint parameters and check for validity |
130 |
|
|
- #-------------------------------------------------- |
131 |
|
|
+ #-------------------------------------------------- |
132 |
|
|
+ # Untaint parameters and check for validity |
133 |
|
|
+ #-------------------------------------------------- |
134 |
|
|
|
135 |
|
|
my $backupHour = $q->param ('backupHour'); |
136 |
|
|
if ($backupHour =~ /^(.*)$/) { |
137 |
|
|
@@ -1237,23 +1238,20 @@ |
138 |
|
|
$q, undef, $fm->localise('CONFIGURE_WORKSTN_BACKUP')); |
139 |
|
|
|
140 |
|
|
if ( $VFSType eq 'usb' ) { |
141 |
|
|
- foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) { |
142 |
|
|
- $udi =~ m/^(\S+)/; |
143 |
|
|
+ my $devices = esmith::BlockDevices->new ('allowmount' => 'disabled'); |
144 |
|
|
+ my ($valid, $invalid) = $devices->checkBackupDrives(0, 1); |
145 |
|
|
|
146 |
|
|
- my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted); |
147 |
|
|
- |
148 |
|
|
- if ($is_mounted eq "false\n") { |
149 |
|
|
- my $vollbl = qx(hal-get-property --udi $1 --key volume.label); |
150 |
|
|
- $vollbl =~ m/^(\S+)/; |
151 |
|
|
- if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';} |
152 |
|
|
- chomp $vollbl; |
153 |
|
|
- push @usbdisks, $vollbl; |
154 |
|
|
+ if ( ${$valid}[0] ) { |
155 |
|
|
+ foreach ( @{$valid} ) { |
156 |
|
|
+ push @usbdisks, $devices->label($_); |
157 |
|
|
} |
158 |
|
|
} |
159 |
|
|
- unless ($usbdisks[0]){ |
160 |
|
|
+ else |
161 |
|
|
+ { |
162 |
|
|
push @usbdisks, $fm->localise('ERR_NO_USB_DISK'); |
163 |
|
|
$error='nousb'; |
164 |
|
|
} |
165 |
|
|
+ $devices->destroy; |
166 |
|
|
} |
167 |
|
|
if ( $VFSType eq 'mnt' ) |
168 |
|
|
{ |
169 |
|
|
@@ -1509,9 +1507,9 @@ |
170 |
|
|
return; |
171 |
|
|
} |
172 |
|
|
|
173 |
|
|
- #-------------------------------------------------- |
174 |
|
|
- # Untaint parameters and check for validity |
175 |
|
|
- #-------------------------------------------------- |
176 |
|
|
+ #-------------------------------------------------- |
177 |
|
|
+ # Untaint parameters and check for validity |
178 |
|
|
+ #-------------------------------------------------- |
179 |
|
|
|
180 |
|
|
my $VFSType = $q->param ('VFSType'); |
181 |
|
|
if ( $VFSType eq 'nousb') |
182 |
|
|
@@ -3007,7 +3005,7 @@ |
183 |
|
|
my $dumpsize = 0; |
184 |
|
|
|
185 |
|
|
open(DF, "-|") |
186 |
|
|
- or exec '/bin/df', '-P', '-t', 'ext3', '-t', 'ext4'; |
187 |
|
|
+ or exec '/bin/df', '-P', '-t', 'ext3', '-t', 'ext4', '-t', 'xfs'; |
188 |
|
|
|
189 |
|
|
while (<DF>) |
190 |
|
|
{ |
191 |
|
|
@@ -3034,7 +3032,7 @@ |
192 |
|
|
my $halffree = 0; |
193 |
|
|
|
194 |
|
|
open(DF, "-|") |
195 |
|
|
- or exec '/bin/df', '-P', '-t', 'ext3', '-t', 'ext4', '/tmp'; |
196 |
|
|
+ or exec '/bin/df', '-P', '-t', 'ext3', '-t', 'ext4', '-t', 'xfs', '/tmp'; |
197 |
|
|
|
198 |
|
|
while (<DF>) |
199 |
|
|
{ |
200 |
|
|
@@ -3106,30 +3104,21 @@ |
201 |
|
|
elsif ($VFSType eq 'usb') |
202 |
|
|
{ |
203 |
|
|
my $device = ""; |
204 |
|
|
- my $blkdev = ""; |
205 |
|
|
my $vollbl = ""; |
206 |
|
|
- foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) { |
207 |
|
|
- $udi =~ m/^(\S+)/; |
208 |
|
|
- my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted); |
209 |
|
|
- |
210 |
|
|
- if ($is_mounted eq "false\n") { |
211 |
|
|
- $blkdev = qx(hal-get-property --udi $1 --key block.device); |
212 |
|
|
- if ($blkdev =~ m/^(\S+)/) {$blkdev = $1;} |
213 |
|
|
- } |
214 |
|
|
- if ($is_mounted eq "false\n") { |
215 |
|
|
- $vollbl = qx(hal-get-property --udi $1 --key volume.label); |
216 |
|
|
- $vollbl =~ m/^(\S+)/; |
217 |
|
|
- if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';} |
218 |
|
|
- } |
219 |
|
|
- |
220 |
|
|
- chomp $vollbl; |
221 |
|
|
- chomp $blkdev; |
222 |
|
|
- $vollbl = "media/$vollbl"; |
223 |
|
|
- if ($vollbl eq $share) { |
224 |
|
|
- $device = $blkdev; |
225 |
|
|
- } |
226 |
|
|
+ |
227 |
|
|
+ my $devices = esmith::BlockDevices->new ('allowmount' => 'disabled'); |
228 |
|
|
+ my ($valid, $invalid) = $devices->checkBackupDrives(0, 1); |
229 |
|
|
+ |
230 |
|
|
+ if ( ${$valid}[0] ) { |
231 |
|
|
+ foreach ( @{$valid} ) { |
232 |
|
|
+ $vollbl = $devices->label($_); |
233 |
|
|
+ if ( $share eq "media/$vollbl" ) { |
234 |
|
|
+ $device = "/dev/$_"; |
235 |
|
|
+ } |
236 |
|
|
+ } |
237 |
|
|
} |
238 |
|
|
- return ( qx(/bin/mount $device "/$share" 2>&1) ); |
239 |
|
|
+ $devices->destroy; |
240 |
|
|
+ return ( qx (mount $device /$share 2>&1) ); |
241 |
|
|
} |
242 |
|
|
else |
243 |
|
|
{ |
244 |
|
|
@@ -3142,17 +3131,9 @@ |
245 |
|
|
# check if $mountdir is mounted |
246 |
|
|
my $mountdir = shift; |
247 |
|
|
$|=1; # Auto-flush |
248 |
|
|
- |
249 |
|
|
- # copy STDOUT to another filehandle |
250 |
|
|
- open (my $STDOLD, '>&', STDOUT); |
251 |
|
|
- |
252 |
|
|
- open(STDOUT, ">/dev/null"); |
253 |
|
|
- if ( open(MOUNTDIR, "|-", "/bin/findmnt", $mountdir)){;} |
254 |
|
|
- |
255 |
|
|
- # restore STDOUT |
256 |
|
|
- open (STDOUT, '>&', $STDOLD); |
257 |
|
|
- |
258 |
|
|
- return (!close(MOUNTDIR)); |
259 |
|
|
+ |
260 |
|
|
+ my @res = qx( findmnt $mountdir ); |
261 |
|
|
+ return ( !@res ); |
262 |
|
|
} |
263 |
|
|
|
264 |
|
|
sub bmount |
265 |
|
|
diff -urN e-smith-backup-2.6.0.old/root/usr/share/perl5/vendor_perl/esmith/BlockDevices.pm e-smith-backup-2.6.0/root/usr/share/perl5/vendor_perl/esmith/BlockDevices.pm |
266 |
|
|
--- e-smith-backup-2.6.0.old/root/usr/share/perl5/vendor_perl/esmith/BlockDevices.pm 2021-01-30 20:13:44.702954873 +0000 |
267 |
|
|
+++ e-smith-backup-2.6.0/root/usr/share/perl5/vendor_perl/esmith/BlockDevices.pm 2021-01-30 20:16:39.613490616 +0000 |
268 |
|
|
@@ -200,7 +200,7 @@ |
269 |
|
|
# Return two arrays, valid drives, invalid drives |
270 |
|
|
sub checkBackupDrives |
271 |
|
|
{ |
272 |
|
|
- my ($self,$bsize) = @_; |
273 |
|
|
+ my ($self,$bsize,$removable) = @_; |
274 |
|
|
my @valid = (); |
275 |
|
|
my @invalid = (); |
276 |
|
|
$self->scanBlocks; # scan all block devices |
277 |
|
|
@@ -209,6 +209,7 @@ |
278 |
|
|
my $checks = 'UU RO FS'; # These checks are always valid |
279 |
|
|
$checks .= ' MO' if ($allowmount eq 'enabled'); |
280 |
|
|
$checks .= ' SZ' if ($bsize); # Only run the size check when a valid size is given |
281 |
|
|
+ $checks .= ' RM' if ($removable); # Only run the removable check if asked |
282 |
|
|
|
283 |
|
|
foreach my $drive (keys %{$hashref}) |
284 |
|
|
{ |
285 |
|
|
@@ -239,6 +240,10 @@ |
286 |
|
|
{ |
287 |
|
|
$hashref->{$drive}{REASON} .='MO ' if $self->mountpoint ($drive); last; |
288 |
|
|
} |
289 |
|
|
+ if (/^RM/si) # Non-removable |
290 |
|
|
+ { |
291 |
|
|
+ $hashref->{$drive}{REASON} .='RM ' unless $self->removable ($drive); last; |
292 |
|
|
+ } |
293 |
|
|
if (/^SZ/si) # filesystem size, this includes mounting to check free space |
294 |
|
|
{ |
295 |
|
|
$hashref->{$drive}{REASON} .='SZ ' if $self->checkBackupDriveSize ($drive, $bsize); |
296 |
|
|
@@ -360,13 +365,20 @@ |
297 |
|
|
return ($hashref->{$kname}{MODEL}); |
298 |
|
|
} |
299 |
|
|
|
300 |
|
|
+sub removable |
301 |
|
|
+{ |
302 |
|
|
+ my ($self,$kname) = @_; |
303 |
|
|
+ my $hashref = $self->{_blox}; |
304 |
|
|
+ return ($hashref->{$kname}{RM}) ? 1 : $EMPTY; |
305 |
|
|
+} |
306 |
|
|
+ |
307 |
|
|
# Given the KNAME return the label |
308 |
|
|
# returns 'no label' if none found |
309 |
|
|
sub label |
310 |
|
|
{ |
311 |
|
|
my ($self,$kname) = @_; |
312 |
|
|
my $hashref = $self->{_blox}; |
313 |
|
|
- return ($hashref->{$kname}{LABEL}) || gettext('no label'); |
314 |
|
|
+ return ($hashref->{$kname}{LABEL}) || gettext('nolabel'); |
315 |
|
|
} |
316 |
|
|
|
317 |
|
|
sub size |