]>
Commit | Line | Data |
---|---|---|
0a580593 DM |
1 | package PMG::RuleDB::Quarantine; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | use Carp; | |
6 | use DBI; | |
7 | use Digest::SHA; | |
8 | ||
9 | use PVE::SafeSyslog; | |
10 | use PMG::RuleDB; | |
11 | use PMG::RuleDB::Object; | |
12 | ||
13 | use base qw(PMG::RuleDB::Object); | |
14 | ||
15 | sub otype { | |
16 | return 4006; | |
17 | } | |
18 | ||
19 | sub oclass { | |
20 | return 'action'; | |
21 | } | |
22 | ||
23 | sub otype_text { | |
24 | return 'Quarantine'; | |
25 | } | |
26 | ||
27 | sub oinfo { | |
28 | return 'Move to quarantine.'; | |
29 | } | |
30 | ||
31 | sub oicon { | |
32 | # fixme: | |
33 | return 'accept.gif'; | |
34 | } | |
35 | ||
36 | sub oisedit { | |
37 | return 0; | |
38 | } | |
39 | ||
40 | sub final { | |
41 | return 1; | |
42 | } | |
43 | ||
44 | sub priority { | |
45 | return 90; | |
46 | } | |
47 | ||
48 | sub new { | |
49 | my ($type, $ogroup) = @_; | |
50 | ||
51 | my $class = ref($type) || $type; | |
52 | ||
53 | my $self = $class->SUPER::new(otype(), $ogroup); | |
54 | ||
55 | return $self; | |
56 | } | |
57 | ||
58 | sub load_attr { | |
59 | my ($type, $ruledb, $id, $ogroup, $value) = @_; | |
60 | ||
61 | my $class = ref($type) || $type; | |
62 | ||
63 | my $obj = $class->new($ogroup); | |
64 | $obj->{id} = $id; | |
65 | ||
66 | $obj->{digest} = Digest::SHA::sha1_hex($id, $ogroup); | |
67 | ||
68 | return $obj; | |
69 | } | |
70 | ||
71 | sub save { | |
72 | my ($self, $ruledb) = @_; | |
73 | ||
74 | defined($self->{ogroup}) || return undef; | |
75 | ||
76 | if (defined ($self->{id})) { | |
77 | # update | |
78 | ||
79 | # nothing to update | |
80 | ||
81 | } else { | |
82 | # insert | |
83 | my $sth = $ruledb->{dbh}->prepare ( | |
84 | "INSERT INTO Object (Objectgroup_ID, ObjectType) VALUES (?, ?);"); | |
85 | ||
86 | $sth->execute($self->ogroup, $self->otype); | |
87 | ||
88 | $self->{id} = PMG::RuleDB::lastid($ruledb->{dbh}, 'object_id_seq'); | |
89 | } | |
90 | ||
91 | return $self->{id}; | |
92 | } | |
93 | ||
94 | sub execute { | |
95 | my ($self, $queue, $ruledb, $mod_group, $targets, | |
96 | $msginfo, $vars, $marks, $ldap) = @_; | |
97 | ||
98 | die "fixme"; | |
99 | ||
100 | my $subgroups = $mod_group->subgroups($targets, 1); | |
101 | ||
102 | foreach my $ta (@$subgroups) { | |
103 | my ($tg, $entity) = (@$ta[0], @$ta[1]); | |
104 | ||
105 | Proxmox::Utils::remove_marks ($entity); | |
106 | ||
107 | if ($queue->{vinfo}) { | |
108 | if (my $qid = $queue->quarantine_mail($ruledb, 'V', $entity, $tg, $msginfo, $vars, $ldap)) { | |
109 | ||
110 | foreach (@$tg) { | |
111 | syslog ('info', "$queue->{logid}: moved mail for <%s> to virus quarantine - $qid", $_); | |
112 | } | |
113 | ||
114 | $queue->set_status ($tg, 'delivered'); | |
115 | } | |
116 | ||
117 | } else { | |
118 | if (my $qid = $queue->quarantine_mail($ruledb, 'S', $entity, $tg, $msginfo, $vars, $ldap)) { | |
119 | ||
120 | foreach (@$tg) { | |
121 | syslog ('info', "$queue->{logid}: moved mail for <%s> to spam quarantine - $qid", $_); | |
122 | } | |
123 | ||
124 | $queue->set_status($tg, 'delivered'); | |
125 | } | |
126 | } | |
127 | } | |
128 | ||
129 | # warn if no subgroups | |
130 | } | |
131 | ||
132 | sub short_desc { | |
133 | my $self = shift; | |
134 | ||
135 | return oinfo(); | |
136 | } | |
137 | ||
138 | 1; |