[PREVIOUS CHAPTER]
[NEXT CHAPTER]
10 Library Functions
I explain useful (I believe) library functions in this chapter.
Anyway here we go though choice depends on me. The choice must be
random and does not cover the whole ;-D.
10.1 daemon (libutils.pl)
Let the current execution program be a daemon.
&use('utils');
&daemon;
Example:
&use('utils');
&daemon;
work under daemon mode
&daemon detaches the current TTY and close STDIN,STDOUT,STDERR.
Example:
$FML_EXIT_HOOK .= q#
&use('utils');
&daemon;
exec("$LIBDIR/bin/cron.pl $DIR -a");
#;
You may be required to set $NOT_USE_TIOCNOTTY? This function works well
on 4.x BSD, but I don't know how it works on other OS's.
10.2 Sendmail (libsmtp.pl)
SYNOPSIS
&Sendmail($to, $subject, $body, @to);
$to recipient
$subject subject of mail to send
$body body of mail to send
@to recipients except $to
10.3 SendFile (libsmtp.pl)
SYNOPSIS
&SendFile($to, $subject, $file, $zcat, @to);
$to recipient
$subject subject of mail to send
$file a file to send
$zcat conversion flag (not used)
@to recipients except $to
10.4 NeonSendFile (libsmtp.pl)
handling plural recipients and plural files to send.
SYNOPSIS
&NeonSendFile(*to, *subject, *files);
@to recipients (array)
$subject subject of mail to send
@files array of files to send
10.5 Addr2FQDN (fml.pl)
SYNOPSIS:
&Addr2FQDN($addr);
If given $addr has no '@', we convert it to
$addr@$FQDN
If $addr contains '@', return $addr.
10.6 AddressMatch (fml.pl)
SYNOPSIS:
&AddressMatching($addr1, $addr2)
compare $addr1 and $addr2, return 1 if they are the same.
return 0 if different.
10.7 MailListMemberP (fml.pl)
SYNOPSIS:
&MailListMemberP($addr)
search $addr in lists of member (member files are listed in
@MEMBER_LIST) and return the file name in which $addr if $addr is
found. return $NULL if fails.
10.8 MailListActiveP (fml.pl)
SYNOPSIS:
&MailListActiveP($addr)
search $addr in lists of active member (active member files are listed
in @ACTIVE_LIST) and return the file name in which $addr if $addr is
found.
10.9 Append2 (fml.pl)
SYNOPSIS:
&Append2($string, $file)
appends $string to $file
10.10 AutoRegist (libutils.pl)
SYNOPSIS:
&AutoRegist(*Envelope);
&AutoRegist(*Envelope, $string);
Auto Registration routine. The argument is *Envelope or *Envelope and
$string. If $string is given, the routine checks $string as an input.
If not, $Envelope{'Body'} which is mail body.
10.11 ChangeMemberList (libfml.pl)
Apply &DoChangeMemberList(@_) recursively up to
$ADDR_CHECK_MAX(default 10) times. It checks the given address little
by little severely. For example we check the address
fukachan@sapporo.iij.ad.jp
up to 3 level, that is "iij.ad.jp" in default. If both
fukachan@iij.ad.jp and fukachan@sapporo.iij.ad.jp exist in member
file, we cannot determine this mail is from which person? Hence we
require changing the address check level dynamically. Secondary FML
checks up to 4 levels, that is "sapporo.iij.ad.jp" and matches in
exacet and return TRUE.
Example: a list have two similar addresses with different levels.
fukachan@iij.ad.jp
fukachan@sapporo.iij.ad.jp
10.12 ChangePasswd (libcrypt.pl)
SYNOPSIS:
&ChangePasswd($PASSWD_FILE, $addr, $new)
Change the password for the address $addr. The new password is $new
and the password file is $PASSWD_FILE. $new is a plain password.
10.13 CheckMember (fml.pl)
obsolete. left for compatibility.
SYNOPSIS:
&CheckMember($addr, $list);
Check whether $addr appears in $list or not. 1 if found, 0 if fails.
10.14 CmpPasswd (libcrypt.pl)
SYNOPSIS:
&CmpPasswd($encrypt, $plain-passwd)
compare encrypted password $encrypt and input plain password
$plain-passwd.
10.15 CmpPasswdInFile (libcrypt.pl)
SYNOPSIS:
&CmpPasswdInFile($PASSWD_FILE, $addr, $pass)
check whether $addr with password $pass is valid in $PASWD_FILE.
If valid, $addr is authenticated.
10.16 Conv2mailbox (fml.pl)
SYNOPSIS:
&Conv2mailbox($from, *e)
Cut out only user@domain part from given string $from.
10.17 DecodeMimeStrings (libMIME.pl)
SYNOPSIS:
$s = &DecodeMimeStrings($s);
Decode MIME string to Japanese and return it.
10.18 Flock (fml.pl)
SYNOPSIS:
&Flock();
flock(2) to $FP_SPOOL_DIR.
After $Timeout{'flock'} (default 3600) under locked, we trap signal
SIGALRM and runs &Tick. In default fml.pl exits after timeout.
10.19 Funlock (fml.pl)
unlock the lock on $FP_SPOOL_DIR. see flock(2)
10.20 GetID (libfml.pl)
SYNOPSIS:
&GetID;
Return value in $SEQUENCE_FILE where the value is the last article
sequence.
10.21 GetTime (fml.pl)
SYNOPSIS:
&GetTime;
runs localtime(); and sets several global variables such as:
$Now = sprintf("%02d/%02d/%02d %02d:%02d:%02d",
$year % 100, $mon + 1, $mday, $hour, $min, $sec);
$MailDate = sprintf("%s, %d %s %d %02d:%02d:%02d %s",
$WDay[$wday], $mday, $Month[$mon],
1900 + $year, $hour, $min, $sec, $TZone);
$CurrentTime = sprintf("%04d%02d%02d%02d%02d",
1900 + $year, $mon + 1, $mday, $hour, $min);
10.22 Lock (fml.pl)
SYNOPSIS:
&Lock;
&Flock;
else
require liblock.pl;
&V7Lock;
if $USE_FLOCK
&Flock;
else
# link(2) based lock algorithm (liblock.pl)
require liblock.pl;
&V7Lock;
10.23 Log (fml.pl)
SYNOPSIS:
&Log($s);
Append $s string to $LOGFILE with date.
10.24 LogWEnv (fml.pl)
SYNOPSIS:
&LogWEnv($s, *e);
&LogWEnv($s, *e); is the same as
&Log($s)
$e{'message'} .= "$s\n";
Both Logs $LOGFILE and the messages &Notify uses.
10.25 Lookup (fml.pl)
SYNOPSIS:
&Lookup($addr, $list);
Check whether $addr appears in $list or not. 1 if found, 0 if fails.
10.26 MailListActiveP (fml.pl)
SYNOPSIS:
&MailListActiveP($address);
ML member list contains $address? It return the file which contains it
or NULL if fails.
Caution: $address is a member, so it is used in authenticaion. Whereas
this does not imply $address is a recipient in fml.
10.27 MailListMemberP (fml.pl)
SYNOPSIS:
&MailListMemberP($address);
$address is a recipient? This returns the file which contains it or
NULL if fails.
10.28 Mesg (fml.pl)
SYNOPSIS:
&Mesg(*Envelope, $s);
&Notify sends a content $Envelope{'message'} to a user (From:
address). &Mesg() appends $s to $Envelope{'message'}.
$Envelope{'message'} .= "$s\n";
10.29 NewSyslog (libnewsyslog.pl)
newsyslog(8) like function.
10.30 Notify (fml.pl)
SYNOPSIS:
&Notify;
Send an error, warning status report of commands mail reply. The
content is $Envelope{'message'}. The recipient is
$Envelope{'message:h:to'}, if not defined $Envelope{'Addr2Reply:'}.
The plural recipients is available by setting
$Envelope{'message:h:@to'}. The return mail subject is
$Envelope{'message:h:subject'}, if not defined, "fml status report
$ML_FN".
Subject: $Envelope{'message:h:subject'}
In the last of mail body, &Notify appends the buffer generated by a
function $PROC_GEN_INFO (default 'GenInfo') .
Also &Notify the buffer $Envelope{'error'} to ML maintainers.
In this mail, &Notify uses a good bye phrase and a face mark:D. You
define it by
$GOOD_BYE_PHRASE (good bye phrase)
$FACE_MARK (face mark)
$GOOD_BYE_PHRASE = "\tBe seeing you! ";
10.31 RunHooks (fml.pl)
SYNOPSIS:
&RunHooks;
If $FML_EXIT_HOOK is defined, runs it.
eval $FML_EXIT_HOOK
10.32 ExecNewProcess (fml.pl)
If $FML_EXIT_PROG is defined, runs it
exec $FML_EXIT_PROG;
10.33 SecureP (fml.pl)
SYNOPSIS:
&SecureP($request);
Check whether $request is safe or unsafe. Please use %SECURE_REGEXP
for an exceptional security check.
10.34 SendBackInOrder (libfop.pl)
SYNOPSIS:
&SendBackInOrder($returnfile, $total, $subj, $sleeptime, @to)
$subj Subject:
$returnfile file to send
$total the number of split files
$subj subject
$sleeptime send once each $sleeptime
@to recipients
10.35 SocketInit (libsmtp.pl)
SYNOPSIS:
&SocketInit;
Initialize socket functions.
10.36 TurnOverW0 (libnewsyslog.pl)
SYNOPSIS:
&NewSyslog'TurnOverW0($LOG_MESSAGE_ID);#';
Runs newsyslog. Example: runs newsyslog over $LOG_MESSAGE_ID.
10.37 Unlock (fml.pl)
Unlcok.
10.38 Warn (fml.pl)
SYNOPSIS:
&Warn($subject, $body);
&Warn is the same as
&Sendmail($MAINTAINER, $subject, $body);
Mails to $MAINTAINER.
10.39 WholeMail (fml.pl)
SYNOPSIS:
&WholeMail;
Return the whole mail with 3 SPACE CHARACTERS indent. The indent
prevents strange MTA or MUA converting the mail body. No conversion
is important for debug. I want to receive raw mail for debug!
If $MIME_CONVERT_WHOLEMAIL is set, we try MIME decoding of Japanese of
the mail body.
10.40 eval (fml.pl)
SYNOPSIS:
&eval($eval_string)
Evaluate $eval_string.
10.41 ipc (libutils.pl)
SYNOPSIS:
&ipc(*ipc, *r);
=
Interface of InterProcess Communication based on Berkeley Socket mechanism.
$ipc{'host'} host
$ipc{'serve'} port
$ipc{'tcp'} TCP/IP
$ipc{'pat'} struct sockaddr
@ipc input strings (array)
$r return value
10.42 system (libutils.pl)
SYNOPSIS:
&system($s, $out, $in, $read, $write)
Executes $s. OUT FILE is $out, IN is $in. OUT FILE HANDLE is $write,
IN is $read.
If $s matches
/[\$\&\*\(\)\{\}\[\]\'\\\"\;\\\\\|\?\<\>\~\`]/
&system does not run for security.
[PREVIOUS CHAPTER]
[NEXT CHAPTER]