1 |
unnilennium |
1.1 |
diff -up smeserver-learn-1.0/root/etc/e-smith/db/configuration/defaults/Learn/Verbose.VERBOSE smeserver-learn-1.0/root/etc/e-smith/db/configuration/defaults/Learn/Verbose |
2 |
|
|
--- smeserver-learn-1.0/root/etc/e-smith/db/configuration/defaults/Learn/Verbose.VERBOSE 2016-03-17 01:21:14.985000000 -0400 |
3 |
|
|
+++ smeserver-learn-1.0/root/etc/e-smith/db/configuration/defaults/Learn/Verbose 2016-03-17 01:21:36.424000000 -0400 |
4 |
|
|
@@ -0,0 +1 @@ |
5 |
|
|
+enabled |
6 |
|
|
diff -up smeserver-learn-1.0/root/usr/bin/Learn.pl.VERBOSE smeserver-learn-1.0/root/usr/bin/Learn.pl |
7 |
|
|
--- smeserver-learn-1.0/root/usr/bin/Learn.pl.VERBOSE 2016-03-17 01:20:18.570000000 -0400 |
8 |
|
|
+++ smeserver-learn-1.0/root/usr/bin/Learn.pl 2016-03-17 01:19:16.000000000 -0400 |
9 |
|
|
@@ -57,6 +57,15 @@ binmode(SADB); |
10 |
|
|
my $md5 = Digest::MD5->new->addfile(SADB)->b64digest; |
11 |
|
|
close(SADB); |
12 |
|
|
|
13 |
|
|
+#Verbose mode |
14 |
|
|
+my $verbose= $sadb->get_prop("Learn", "Verbose") || "enabled"; |
15 |
|
|
+my $outputfile=($verbose eq "disabled")? "/dev/null": '/tmp/LearnLog.txt'; |
16 |
|
|
+my $LOG; |
17 |
|
|
+open ( $LOG, '+>', $outputfile) unless ($verbose eq "enabled"); |
18 |
|
|
+# select new filehandle |
19 |
|
|
+select $LOG unless ($verbose eq "enabled"); |
20 |
|
|
+my $currentuser; |
21 |
|
|
+ |
22 |
|
|
# Running for every user |
23 |
|
|
foreach my $user (@users) { |
24 |
|
|
my $firstname = $user->prop('FirstName'); |
25 |
|
|
@@ -68,9 +77,10 @@ foreach my $user (@users) { |
26 |
|
|
next if ( defined @exclude and @found = grep { $_ eq $key } @exclude ); |
27 |
|
|
next unless ( ! defined @include or @found = grep { $_ eq $key } @include ); |
28 |
|
|
|
29 |
|
|
- printf("Checking for user (%s): %s %s\n", $key,$firstname, $lastname); |
30 |
|
|
+ $currentuser = sprintf("Checking for user (%s): %s %s\n", $key,$firstname, $lastname); |
31 |
|
|
+ print $currentuser unless ($verbose eq "active"); |
32 |
|
|
|
33 |
|
|
- my $MailDir = ($key eq "admin")? "/home/e-smith" . "/Maildir" : "/home/e-smith/files/users/" . $key . "/Maildir"; |
34 |
|
|
+ my $MailDir = ($key eq "admin")? "/home/e-smith" . "/Maildir" : "/home/e-smith/files/users/" . $key . "/Maildir"; |
35 |
|
|
|
36 |
|
|
my @modes = ("LearnAsSpam","LearnAsHam","LearnInWL"); |
37 |
|
|
foreach my $mode (@modes) { |
38 |
|
|
@@ -80,7 +90,7 @@ foreach my $user (@users) { |
39 |
|
|
# getting dir name to search according to actual mode |
40 |
|
|
my $dirname = $sadb->get_prop($mode, "dir"); |
41 |
|
|
if ( !(defined($dirname)) ) { |
42 |
|
|
- print "Errors in DB, dir subkey not present for key $mode\n"; |
43 |
|
|
+ Vact();print "Errors in DB, dir subkey not present for key $mode\n"; |
44 |
|
|
next; |
45 |
|
|
} |
46 |
|
|
# adding heading periode if missing as this is an IMAP folder |
47 |
|
|
@@ -97,7 +107,7 @@ foreach my $user (@users) { |
48 |
|
|
if (! @logdirs and ($sadb->get_prop($mode, "Uniq") eq "enabled")) { |
49 |
|
|
($login,$pass,$uid,$gid) = getpwnam($key) |
50 |
|
|
or die "$key not in passwd file"; |
51 |
|
|
- print "+->mkdir :". $MailDir . "/" . $dirname . "\n"; |
52 |
|
|
+ Vact();print "+->mkdir :". $MailDir . "/" . $dirname . "\n"; |
53 |
|
|
foreach $a ('','/cur','/tmp','/new'){ |
54 |
|
|
mkdir $MailDir . "/" . $dirname . "$a"; |
55 |
|
|
chown $uid,$gid,$MailDir . "/" . $dirname . "$a"; |
56 |
|
|
@@ -112,7 +122,7 @@ foreach my $user (@users) { |
57 |
|
|
$a=(substr($a, 0, 1) eq '.')? $a: ".$a"; |
58 |
|
|
my $Link= $MailDir . "/" . $a; |
59 |
|
|
if (! -e $Link) { |
60 |
|
|
- print "+->create link $Link on $junkdir\n"; |
61 |
|
|
+ Vact(); print "+->create link $Link on $junkdir\n"; |
62 |
|
|
symlink($junkdir, $Link) or die "Can't create symlink from $Link to $junkdir: $!"; |
63 |
|
|
}; |
64 |
|
|
} |
65 |
|
|
@@ -123,7 +133,7 @@ foreach my $user (@users) { |
66 |
|
|
if ($mode eq "LearnAsSpam" and $sadb->get_prop($mode, "DeleteAfterLearn") eq "enabled" and $DelayToMove >0) { |
67 |
|
|
my $SpamDir = $MailDir . "/" . $logdir . "/cur/"; |
68 |
|
|
return unless (-e $SpamDir and -d $SpamDir); |
69 |
|
|
- @files=(); |
70 |
|
|
+ @files=(); |
71 |
|
|
find(\&wanted, $junkdir ."/cur" ); |
72 |
|
|
find(\&wanted, $junkdir ."/new" ) if ($sadb->get_prop($mode, "LearnNew") eq "enabled" or $sadb->get_prop($mode, "LearnNew") eq "junkmail"); |
73 |
|
|
sub wanted { |
74 |
|
|
@@ -137,8 +147,8 @@ foreach my $user (@users) { |
75 |
|
|
my %filehash=@files; #puts the array into a hash for easy printing. Key=file, Value=date |
76 |
|
|
undef @files; |
77 |
|
|
foreach $filename (sort keys %filehash){ |
78 |
|
|
- print "--> moving $filename $filehash{$filename}\n"; |
79 |
|
|
- move $filename,"$MailDir/$dirname/cur" ; |
80 |
|
|
+ Vact(); print "--> moving $filename $filehash{$filename}\n"; |
81 |
|
|
+ move $filename,"$MailDir/$dirname/cur" ; |
82 |
|
|
} |
83 |
|
|
} |
84 |
|
|
|
85 |
|
|
@@ -152,11 +162,11 @@ foreach my $user (@users) { |
86 |
|
|
find( { wanted => sub { -f && $_ =~ m/($logdir\/cur|$logdir\/new|$logdir\/tmp)/ && $counter++;}, no_chdir => 1, follow_fast => 1 }, $SpamDir ); |
87 |
|
|
if ($mode eq "LearnAsSpam" and $counter>0) { |
88 |
|
|
my $result = `/usr/bin/sa-learn --spam $SpamDir`; |
89 |
|
|
- chomp($result); printf("+Learning Spam from %s: %s\n",$logdir,$result); |
90 |
|
|
+ chomp($result); Vact(); printf("+Learning Spam from %s: %s\n",$logdir,$result); |
91 |
|
|
} |
92 |
|
|
elsif ($mode eq "LearnAsHam" and $counter>0) { |
93 |
|
|
my $result = `/usr/bin/sa-learn --ham $SpamDir`; |
94 |
|
|
- chomp($result);printf("+Learning Ham from %s: %s\n",$logdir,$result); |
95 |
|
|
+ chomp($result); Vact(); printf("+Learning Ham from %s: %s\n",$logdir,$result); |
96 |
|
|
} |
97 |
|
|
|
98 |
|
|
@list= ($sadb->get_prop($mode, "LearnNew") eq "enabled") ? ('/cur/','/new/'):('/cur/'); |
99 |
|
|
@@ -176,7 +186,7 @@ foreach my $user (@users) { |
100 |
|
|
|
101 |
|
|
#taking action according to actual mode |
102 |
|
|
if ($mode eq "LearnInWL") { |
103 |
|
|
- printf("+Learning in WhiteList: %s\n",$filetolearnbash); |
104 |
|
|
+ Vact(); printf("+Learning in WhiteList: %s\n",$filetolearnbash); |
105 |
|
|
`/usr/bin/LearnInWL.pl $filetolearnbash`; |
106 |
|
|
} |
107 |
|
|
# if we are in LearnAsSpam mode and DeleteAfterLearn is enabled delete message, else tagging a move message |
108 |
|
|
@@ -234,3 +244,21 @@ if ($newmd5 ne $md5) { |
109 |
|
|
print "\n"; |
110 |
|
|
} |
111 |
|
|
|
112 |
|
|
+# restore STDOUT |
113 |
|
|
+select STDOUT; |
114 |
|
|
+# read log and print on STDOUT if mode active |
115 |
|
|
+if ($verbose eq "active"){ |
116 |
|
|
+ seek $LOG, 0, 0; |
117 |
|
|
+ while (<$LOG>) { |
118 |
|
|
+ print $_; |
119 |
|
|
+ } |
120 |
|
|
+} |
121 |
|
|
+close($LOG) unless ($verbose eq "enabled"); |
122 |
|
|
+unlink $outputfile; |
123 |
|
|
+ |
124 |
|
|
+# sub to print the user line if something happen on active verbose mode |
125 |
|
|
+sub Vact() { |
126 |
|
|
+return unless ($verbose eq "active"); |
127 |
|
|
+print $currentuser; |
128 |
|
|
+$currentuser=""; |
129 |
|
|
+} |