/[smeserver]/rpms/e-smith-samba/sme7/e-smith-samba-1.14.0-shadowcopy.patch
ViewVC logotype

Contents of /rpms/e-smith-samba/sme7/e-smith-samba-1.14.0-shadowcopy.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download)
Sat Dec 15 16:01:25 2007 UTC (16 years, 10 months ago) by slords
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
Import on branch sme7 of package e-smith-samba-1.14.1-1.el4.sme.src.rpm

1 diff -Nur -x '*.orig' -x '*.rej' e-smith-samba-1.14.0/root/etc/e-smith/events/actions/shadow-copy-rotate mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/events/actions/shadow-copy-rotate
2 --- e-smith-samba-1.14.0/root/etc/e-smith/events/actions/shadow-copy-rotate 1969-12-31 17:00:00.000000000 -0700
3 +++ mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/events/actions/shadow-copy-rotate 2007-01-10 14:03:38.000000000 -0700
4 @@ -0,0 +1,106 @@
5 +#!/usr/bin/perl
6 +
7 +use strict;
8 +use warnings;
9 +use POSIX qw(strftime);
10 +use File::Path;
11 +use esmith::ConfigDB;
12 +use esmith::AccountsDB;
13 +
14 +# Routines taken from powershift of rlbackup
15 +sub stagger;
16 +sub powershift;
17 +sub shadowdir;
18 +
19 +my $cdb = esmith::ConfigDB->open_ro;
20 +my $adb = esmith::AccountsDB->open_ro();
21 +
22 +my $smb = $cdb->get('smb') or die "No smb db entry found\n";
23 +my $shadowdir = $smb->prop('ShadowDir') || '/home/e-smith/files/.shadow';
24 +my $shadowcopy = $smb->prop('ShadowCopy') || 'disabled';
25 +my $offset = ($smb->prop('ShadowCount') || 2) - 2;
26 +$offset = 0 if $offset < 0;
27 +
28 +exit unless -d $shadowdir;
29 +exit if $shadowcopy eq 'disabled';
30 +
31 +my $filesdir = '/home/e-smith/files';
32 +my $snapfmt = '@GMT-%Y.%m.%d-%H.%M.%S';
33 +
34 +# Create list of ibays and users to shadow
35 +my $ibays = join ',', map { $_->key } grep { ($_->prop('ShadowCopy') || 'enabled') ne 'disabled' } $adb->ibays();
36 +my $users = join ',', map { $_->key } grep { ($_->prop('ShadowCopy') || 'enabled') ne 'disabled' } $adb->users();
37 +
38 +# Sync directories to shadow directory
39 +system("rsync -aHmR --partial --exclude '\@GMT-*' --link-dest ../1 " .
40 + "$filesdir/./ibays/{$ibays}/ $filesdir/./users/{$users}/home/ $shadowdir/0/") == 0 || die "Couldn't sync directories";
41 +
42 +# Shift directories using geometric roll-off (only if different)
43 +if ( -d "$shadowdir/1" ) {
44 + if (system("diff -qr $shadowdir/0 $shadowdir/1 > /dev/null") == 0) {
45 + rmtree "$shadowdir/0";
46 + } else {
47 + powershift(2) if -d shadowdir(-$offset);
48 + for (my $i=2; $i >= -$offset; $i--) {
49 + rename shadowdir($i), shadowdir($i+1)
50 + }
51 + }
52 +} else {
53 + rename "$shadowdir/0", "$shadowdir/1";
54 +}
55 +
56 +opendir(SHADOW, $shadowdir);
57 +my %snaps = map { my @stat = stat("$shadowdir/$_"); $_ => strftime($snapfmt, gmtime($stat[9])) }
58 + grep { -d "$shadowdir/$_" && ! /^\./ } readdir SHADOW;
59 +closedir(SHADOW);
60 +
61 +foreach my $ibay ($adb->ibays()) {
62 + my $ibaydir = 'ibays/' . $ibay->key . ( $ibay->prop('PublicAccess') eq 'none' ? '/files' : '' );
63 +
64 + opendir(IBAY, "$filesdir/$ibaydir") || next;
65 + unlink "$filesdir/$ibaydir/$_" foreach (grep /^\@GMT-/, readdir(IBAY));
66 + closedir(IBAY);
67 +
68 + next if ($ibay->prop('ShadowCopy') || 'enabled') eq 'disabled';
69 +
70 + foreach my $snap (keys %snaps) {
71 + symlink "$shadowdir/$snap/$ibaydir", "$filesdir/$ibaydir/$snaps{$snap}" if -d "$shadowdir/$snap/$ibaydir";
72 + }
73 +}
74 +
75 +foreach my $user ($adb->users()) {
76 + my $userdir = 'users/' . $user->key . '/home';
77 +
78 + opendir(USER, "$filesdir/$userdir") || next;
79 + unlink "$filesdir/$userdir/$_" foreach (grep /^\@GMT-/, readdir(USER));
80 + closedir(USER);
81 +
82 + next if ($user->prop('ShadowCopy') || 'enabled') eq 'disabled';
83 +
84 + foreach my $snap (keys %snaps) {
85 + symlink "$shadowdir/$snap/$userdir", "$filesdir/$userdir/$snaps{$snap}" if -d "$shadowdir/$snap/$userdir";
86 + }
87 +}
88 +
89 +sub shadowdir {
90 + my $i = shift;
91 + return "$shadowdir/".($i+$offset);
92 +}
93 +
94 +sub stagger {
95 + my $i = shift;
96 + return $i + ($i >> 1);
97 +}
98 +
99 +sub powershift {
100 + my $i = shift;
101 + if ( -d shadowdir(stagger($i)) ) {
102 + my $n = powershift($i << 1);
103 + $i = $n >> 1;
104 + rename shadowdir(stagger($i)), shadowdir($n) if -d shadowdir(stagger($i));
105 + rmtree shadowdir($i) if -d shadowdir($i);
106 + } else {
107 + rename shadowdir($i), shadowdir(stagger($i)) if -d shadowdir($i);
108 + }
109 + return $i;
110 +}
111 diff -Nur -x '*.orig' -x '*.rej' e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowCount mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowCount
112 --- e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowCount 1969-12-31 17:00:00.000000000 -0700
113 +++ mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowCount 2007-01-10 14:07:29.000000000 -0700
114 @@ -0,0 +1 @@
115 +10
116 diff -Nur -x '*.orig' -x '*.rej' e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowDir mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowDir
117 --- e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowDir 1969-12-31 17:00:00.000000000 -0700
118 +++ mezzanine_patched_e-smith-samba-1.14.0/root/etc/e-smith/db/configuration/defaults/smb/ShadowDir 2007-01-10 14:07:15.000000000 -0700
119 @@ -0,0 +1 @@
120 +/home/e-smith/files/.shadow

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed