]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/RuleDB/Notify.pm
Add default rulename of 'unknown' to Actions
[pmg-api.git] / PMG / RuleDB / Notify.pm
index ad166201059cc28f6a37b7badeb93d1630822885..860b5ce4e5f23041e704273de1294cb2c302014b 100644 (file)
@@ -6,6 +6,7 @@ use DBI;
 use MIME::Body;
 use MIME::Head;
 use MIME::Entity;
+use Encode qw(decode encode);
 
 use PVE::SafeSyslog;
 
@@ -80,7 +81,7 @@ sub load_attr {
 
     defined($value) || die "undefined object attribute: ERROR";
     
-    my ($subject, $body, $attach);
+    my ($raw_subject, $raw_body, $attach);
 
     my $sth = $ruledb->{dbh}->prepare(
        "SELECT * FROM Attribut WHERE Object_ID = ?");
@@ -88,18 +89,23 @@ sub load_attr {
     $sth->execute($id);
 
     while (my $ref = $sth->fetchrow_hashref()) {
-       $subject =  $ref->{value} if $ref->{name} eq 'subject';
-       $body = $ref->{value} if $ref->{name} eq 'body';
+       $raw_subject = $ref->{value} if $ref->{name} eq 'subject';
+       $raw_body = $ref->{value} if $ref->{name} eq 'body';
        $attach = $ref->{value} if $ref->{name} eq 'attach';
     }
        
     $sth->finish();
-   
-    my $obj = $class->new($value, $subject, $body, $attach, $ogroup);
+
+    # Note: db stores binary (ascii) data, so we need to convert to UTF-8 manually
+    my $obj = $class->new($value,
+                         decode('UTF-8', $raw_subject),
+                         decode('UTF-8', $raw_body),
+                         $attach, $ogroup);
     $obj->{id} = $id;
 
+    # Note: Digest::SHA does not work with wide UTF8 characters
     $obj->{digest} = Digest::SHA::sha1_hex(
-       $id, $obj->{to}, $obj->{subject}, $obj->{body}, $obj->{attach}, $ogroup);
+       $id, $obj->{to}, $raw_subject, $raw_body, $obj->{attach}, $ogroup);
 
     return $obj;
 }
@@ -114,6 +120,8 @@ sub save {
 
     $self->{attach} //= 'N';
 
+    # Note: db stores binary (ascii) data, so we need to convert from UTF-8 manually
+
     if (defined ($self->{id})) {
        # update
        
@@ -127,12 +135,12 @@ sub save {
            $ruledb->{dbh}->do(
                "UPDATE Attribut SET Value = ? " .
                "WHERE Name = ? and Object_ID = ?", 
-               undef, $self->{subject}, 'subject',  $self->{id});
+               undef, encode('UTF-8', $self->{subject}), 'subject',  $self->{id});
 
            $ruledb->{dbh}->do(
                "UPDATE Attribut SET Value = ? " .
                "WHERE Name = ? and Object_ID = ?", 
-               undef, $self->{body}, 'body',  $self->{id});
+               undef, encode('UTF-8', $self->{body}), 'body',  $self->{id});
 
            $ruledb->{dbh}->do(
                "UPDATE Attribut SET Value = ? " .
@@ -168,11 +176,11 @@ sub save {
            $ruledb->{dbh}->do("INSERT INTO Attribut " . 
                               "(Object_ID, Name, Value) " .
                               "VALUES (?, ?, ?)", undef,
-                              $self->{id}, 'subject', $self->{subject});
+                              $self->{id}, 'subject',  encode('UTF-8', $self->{subject}));
            $ruledb->{dbh}->do("INSERT INTO Attribut " . 
                               "(Object_ID, Name, Value) " .
                               "VALUES (?, ?, ?)", undef,
-                              $self->{id}, 'body', $self->{body});
+                              $self->{id}, 'body',  encode('UTF-8', $self->{body}));
            $ruledb->{dbh}->do("INSERT INTO Attribut " . 
                               "(Object_ID, Name, Value) " .
                               "VALUES (?, ?, ?)", undef,
@@ -199,6 +207,8 @@ sub execute {
 
     my $from = 'postmaster';
 
+    my $rulename = $vars->{RULE} // 'unknown';
+
     my $body = PMG::Utils::subst_values($self->{body}, $vars);
     my $subject = PMG::Utils::subst_values($self->{subject}, $vars);
     my $to = PMG::Utils::subst_values($self->{to}, $vars);
@@ -206,7 +216,7 @@ sub execute {
     if ($to =~ m/^\s*$/) {
        # this happens if a notification is triggered by bounce mails
        # which notifies the sender <> - we just log and then ignore it
-       syslog('info', "%s: notify <> (ignored)", $queue->{logid});
+       syslog('info', "%s: notify <> (rule: %s, ignored)", $queue->{logid}, $rulename);
        return;
     }
 
@@ -247,9 +257,9 @@ sub execute {
            $top, $from, \@targets, undef, $msginfo->{fqdn});
        foreach (@targets) {
            if ($qid) {
-               syslog('info', "%s: notify <%s> (%s)", $queue->{logid}, $_, $qid);
+               syslog('info', "%s: notify <%s> (rule: %s, %s)", $queue->{logid}, $_, $rulename, $qid);
            } else {
-               syslog ('err', "%s: notify <%s> failed", $queue->{logid}, $_);
+               syslog ('err', "%s: notify <%s> (rule: %s) failed", $queue->{logid}, $_, $rulename);
            }
        }
     }