summaryrefslogtreecommitdiff
path: root/sbin/itzks-transfer-cleaner
blob: 9e848fc2cc05df3bf6687f32e87de1425244f68e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash

test -e /etc/debian-edu/itzks.config && . /etc/debian-edu/itzks.config || exit -1

declare -i warn_time=`echo $TRANSFER_DEL_WARNING | awk {'print $2'}`
declare -i del_time=`echo $TRANSFER_DEL_PERFORM | awk {'print $2'}`
tolerate_time=$(expr $del_time - $warn_time)

function create_mail_warnings () {
	ls /tmp | grep "transfer_cleaner-" > /dev/null && {
		echo -e "  TASK: removing yesterday's warning-mails in /tmp silently"
		rm /tmp/transfer_cleaner-*.mail
	}
	echo "  TASK: creating today's warning mails in /tmp"
	find $TRANSFERDIRS/* -type f -mindepth 1 $TRANSFER_DEL_WARNING -print 2>/dev/null | \
	while read filename; do
		uid=$(stat -c %U "$filename")
		test -e "/tmp/transfer_cleaner-$uid.mail" || \
		cat > /tmp/transfer_cleaner-$uid.mail << EOT
Hallo `getent passwd $uid | cut -d":" -f5 | cut -d"," -f1`,

einige Ihrer/Deiner Dateien im Transfer-Bereich des Schulnetzes wurden
gelöscht.

Diese Mail enthält am Ende eine Liste von Dateien im Transfer-Bereich,
die innerhalb der letzten $warn_time Tage nicht mehr verändert wurden.

Wenn auf diese Dateien innerhalb der nächsten

  $tolerate_time Tage

nicht schreibend zugegriffen wird (einfaches Öffnen reicht nicht aus),
dann werden sie aus dem Transfer-Bereich des Schulnetzwerks
gelöscht.

Dateien, die in $tolerate_time Tagen gelöscht werden:
-----------------------------------------------------
EOT
		echo "  $(echo $filename | cut -d "/" -f 3-)" >> /tmp/transfer_cleaner-$uid.mail
	done
}

function send_mail_warnings() {
	is_true $TRANSFER_WARNINGS_DISABLED && return
	echo "  TASK: sending mail-warnings to"
	find /tmp/transfer_cleaner-*.mail 2>/dev/null | while read mailfile; do
		uid=$(echo $mailfile | cut -d"-" -f2 | cut -d"." -f1)
		echo "    $uid@$DOMAIN"
		cat "$mailfile" | mail -s "Transfer-Bereich im Schulnetz: Dateien, die bald gelöscht werden" $uid@$DOMAIN
	done
}

function remove_files () {
	# remove files
	echo "  TASK: removing expired files"
	find $TRANSFERDIRS/* -type f -mindepth 1 $TRANSFER_DEL_PERFORM 2>/dev/null |\
	while read filename; do
		# removal action in script is disabled for now for testing purposes
		echo -n "    "; echo rm -vf "$filename"
	done
}

function remove_directories () {
	#remove directories
	echo "  TASK: removing empty (expired) directories"
	find $TRANSFERDIRS/* -type d -mindepth 1 $TRANSFER_DEL_PERFORM 2>/dev/null | sort -r | \
	while read dirname; do
		rmdir --ignore-fail-on-non-empty -p -v "$dirname" &> /dev/null
	done
}

# main 

check_host "tjener"
check_root
cron_header

create_mail_warnings
send_mail_warnings
remove_files
remove_directories

finish_script 0