Index: [Article Count Order] [Thread]

Date:  Tue, 9 Jan 2007 10:29:54 +1000 (EST)
From:  User Ernie <ernie (at mark) puremail.eis.net.au>
Subject:  [coba-e:08519] Re: vacation.pl not working
To:  coba-e (at mark) bluequartz.org
Message-Id:  <200701090029.l090Tsro073546 (at mark) puremail.eis.net.au>
In-Reply-To:  <846a2d7c0701081604o77f7fc41m174e12e0bce2bf26 (at mark) mail.gmail.com>
X-Mail-Count: 08519

Thanks,
I traced it down ot a permissions problem, but I was not sure what part was
setting the file permission of the vacation message incorrectly

- Ernie.


[ Charset ISO-8859-1 unsupported, converting... ]
> The following script (below), is an old version, and does seem to work.
> 
> Anyone any idea?
> 
> =========================================================
> 
> 
> #!/usr/bin/perl -w -I/usr/sausalito/perl
> # $Id: vacation.pl,v 1.1.1.1 2005/10/06 00:34:55 pbaltz Exp $
> # Copyright 2000, 2001 Sun Microsystems, Inc., All rights reserved.
> 
> # usage: vacation.pl [message] [from-address]
> 
> 
> use strict;
> use lib qw( /usr/sausalito/perl );
> use Sauce::Config;
> use CCE;
> use I18n;
> use Jcode;
> use DB_File;
> use Fcntl qw(O_RDWR O_CREAT F_SETLKW F_UNLCK);
> use FileHandle;
> use I18nMail;
> 
> my ($message_file,$user_from) = @ARGV;
> 
> my $Sendmail = Sauce::Config::bin_sendmail;
> 
> my @pwent = getpwnam($user_from);
> my $Vaca_dir = $pwent[7];
> 
> my $i18n=new I18n;
> 
> # gather info from cce
> my $cce = new CCE;
> $cce->connectuds();
> 
> my $username = $user_from;
> 
> my ($oid) = $cce->find("User", { 'name' => $user_from });
> my ($ok, $user) = $cce->get($oid);
> 
> if( not $ok ) {
>         $cce->bye('FAIL', '[[base-email.cantGetUserInfo]]');
>         exit(255);
> }
> 
> if ($user->{site} ne '') {
>         my ($v_oid) = $cce->find('Vsite', { 'name' => $user->{site} });
>         my ($v_ok, $vsite) = $cce->get($v_oid);
> 
>         $user_from .= ' (at mark) ' . $vsite->{fqdn};
> }
> 
> # set locale for i18n
> my $locale = $user->{localePreference};
> if( not -d "/usr/share/locale/$locale" && not -d
> "/usr/local/share/locale/$locale" ) {
>         $locale = I18n::i18n_getSystemLocale($cce);
> }
> 
> my $fullname = $user->{fullName};
> $fullname ||= $user_from;
> 
> $cce->bye('SUCCESS');
> 
> $i18n->setLocale($locale);
> 
> # set up variables for below
> my ($sendto,$sender,$returnpath,$from,$replyto,$precedence);
> 
> while (<STDIN>)
> {
>     if    (/From:\s*(.+)/)        { $from = $1;       }
>     elsif (/Reply-To:\s*(.+)/)    { $replyto = $1;    }
>     elsif (/Sender:\s*(.+)/)      { $sender = $1;     }
>     elsif (/Return-path:\s*(.+)/) { $returnpath = $1; }
>     elsif (/Precedence:\s*(.+)/)  { $precedence = $1; }
> }
> 
> exit if (defined $precedence && $precedence =~ /bulk|junk/oi);
> 
> if    ($replyto)     { $sendto = $replyto;     }
> elsif ($from)        { $sendto = $from;        }
> elsif ($sender)      { $sendto = $sender;      }
> elsif ($returnpath)  { $sendto = $returnpath;  }
> else                 { exit;                   }
> 
> my %vacadb;
> 
> my $vacadb = tie(%vacadb,'DB_File',"$Vaca_dir/.$username.db",O_RDWR|O_CREAT,0666)
>     || die "Cannot open vacation database: $!\n";
> 
> $vacadb{$sendto} ||= 0;
> 
> if ($vacadb{$sendto} >= ($^T - 604800))
> {
>     # They've been given a reply recently
>     untie %vacadb;
>     exit;
> }
> else
> {
>     # lock the db just to be safe, this returns a filehandle that needs
>     # to be closed after vacadb is untied
>     my $fh = &lock($vacadb);
> 
>     $vacadb{$sendto} = $^T;
> 
>     &unlock($vacadb, $fh);  # this also undefines $vacadb
>     untie %vacadb;
>     $fh->close();
> }
> 
> my $mail = new I18nMail;
> $mail->setLang($locale);
> 
> my $subject=$i18n->get("[[base-email.vacationSubject]]");
> my $format=$i18n->getProperty("vacationSubject","base-email");
> my %data=(NAME=>$fullname,EMAIL=>"<$user_from>",MSG=>$subject);
> $format=~s/(NAME|EMAIL|MSG)/$data{$1}/g;
> 
> $mail->setSubject($format);
> $mail->setFrom("$fullname <$user_from>");
> $mail->addRawTo($sendto);
> 
> open (INMESSAGE, "$message_file") || die "Can't open message file $!\n";
> my $msg;
> {local $/=undef;$msg=<INMESSAGE>};
> close INMESSAGE;
> 
> $mail->setBody($msg);
> 
> open (OUT, "|$Sendmail -oi -t") || die "Can't open sendmail $!\n";
> print OUT $mail->toText();
> close OUT;
> 
> 
> # database locking sub-routine
> # returns a filehandle that will need to be closed after unlock is called
> sub lock {
>         my $db = shift;
>         my $fd = $db->fd;
>         my $fh = new FileHandle("+<&=$fd");
> 
>         my $return_buffer;
>         fcntl($fh, F_SETLKW, $return_buffer);
> 
>         return $fh;
> }
> 
> # database unlocking sub-routine
> sub unlock {
>         my $db = shift;
>         my $fh = shift;
> 
>         $db->sync;  # just in case
> 
>         # remove the lock on the filehandle
>         my $return_buffer;
>         fcntl($fh, F_UNLCK, $return_buffer);
> 
>         undef $db;
> }
>