# HG changeset patch # User Heiko Schlittermann # Date 1252444576 -7200 # Node ID 714d4a0ea0bc8d8a43466c666a90037115852105 # Parent 10c207a978e2b2f14c69f2a614c54c33c15ec5f0 code: now UTF-Subjects are correct encoded! diff -r 10c207a978e2 -r 714d4a0ea0bc config.pm --- a/config.pm Mon Sep 07 00:57:51 2009 +0200 +++ b/config.pm Tue Sep 08 23:16:16 2009 +0200 @@ -1,5 +1,11 @@ package config; -@mailto = qw(root@localhost); -#@notify_dirs = qw(/etc); + +use Sys::Hostname; +my $NODENAME = (split /\./, hostname)[0]; + +@mailto = qw(root@localhost); +$logfile = "/root/LOG.$NODENAME"; + +# @notify_dirs = qw(/etc); 1; diff -r 10c207a978e2 -r 714d4a0ea0bc log.pl --- a/log.pl Mon Sep 07 00:57:51 2009 +0200 +++ b/log.pl Tue Sep 08 23:16:16 2009 +0200 @@ -14,8 +14,8 @@ # last LOG entry directly and then fire up the editor with an # empty file (or just added notice why we do not show the old # messages) -# - After editing: convert the current messsage to from the current -# codeset UTF-8 +# - After editing: convert the current messsage from the current +# codeset to UTF-8 # - The same is for message on command line (but this is more easy, we # do not have to cope with the old message log @@ -32,6 +32,7 @@ use I18N::Langinfo qw(langinfo CODESET); use Text::Iconv; use Pod::Usage; +use Sys::Hostname; use Logbuch::HG; @@ -58,22 +59,27 @@ my $USER = "logbuch"; my $PW = "HIDDEN"; -my $EDITOR = $ENV{VISUAL} || $ENV{EDITOR} || "vim"; -my $MAGIC = "#--- all changes below are ignored ---#\n"; +my $EDITOR = $ENV{VISUAL} || $ENV{EDITOR} || "vim"; +my $MAGIC = "#--- all changes below are ignored ---#\n"; +my $NODENAME = (split /\./, hostname)[0]; my $opt_db = 1; my $opt_mail = 1; my $opt_message = ""; my $opt_apt = ""; my $opt_initdir = ""; -my $opt_file = "$ENV{HOME}/LOG"; +my $opt_file = defined $config::logfile # use it twice + ? $config::logfile + : "/root/LOG.$NODENAME"; + my $Dbh; sub identity(); -sub hostname(); sub mailto(); sub check_hg_bin(); +sub full_hostname(); +sub word_encoded($); MAIN: { @@ -172,6 +178,13 @@ $auto_message, "\n", $MAGIC, "\n"; + # LOG. wird in Zukunft genutzt und LOG nur ein Symlink + # dorthin + if ($opt_file =~ /(.*)\.$NODENAME$/ and !(-e $opt_file) and (-f $1)) { + rename($1 => $opt_file) or die "Can't rename $1 => $opt_file: !\n"; + symlink($opt_file, $1) or die "Can't symlink $1 => $opt_file: $!\n"; + } + if (!-e $opt_file) { open(X, $_ = ">>$opt_file") or die "Can't open $_: $!\n"; close X; @@ -222,7 +235,7 @@ my $sth = $Dbh->prepare(" INSERT INTO log (host, date, user, mailto, text) VALUES(?, now(), ?, ?, ?)"); - $sth->execute(hostname(), $user, $mailto, $text); + $sth->execute(full_hostname(), $user, $mailto, $text); print STDERR "Database entry inserted\n"; } @@ -232,8 +245,10 @@ my $subject = (split /\n/, $text)[0]; $subject =~ s/^\s*\S\s//; # cut the "itemizer" - $subject = encode_qp("Service [" . hostname() . "]: $subject\n"); - $subject =~ s/\n(.)/\n\t$1/g; + + # and now convert to quoted printable (UTF-8) + # =?utf-8?q?St=C3=BCmper_am_Werk=3A_Shellscripte_aus_der?= + $subject = word_encoded("Service [" . full_hostname() . "]: $subject"); $mailer->open( { @@ -275,7 +290,7 @@ return $user; } -sub hostname() { +sub full_hostname() { my $r = `hostname -f`; chomp($r); return $r; @@ -285,6 +300,17 @@ return join(", ", @config::mailto); } +sub word_encoded($) { + my $line = shift; + # to get "Q" word encoding, we've to fix the result a bit + # http://en.wikipedia.org/wiki/MIME + # FIXME: The line may be longer than expected! + $line = encode_qp($line); + $line =~ s/([_?])/sprintf "=%02X", ord($1)/ige; + $line =~ s/[ \t]/_/g; + return join "\t", map { "=?UTF-8?Q?$_?=\n" } split /=\n/, $line; +} + sub check_hg_bin() { if (not Logbuch::HG::hg_available()) {