		CHANGES
		Last Modified: $Date$

2002/11/09

   I-D õwww.fml.org I-D 쥯򸫤褦ˤ

2002/11/07

   FML::MTAControl::Postfix 
	postconf -d -> postconf (postfix version dependent ?)
	
   FML::Process::Switch 
   FML::Process::Addr 
   INSTALL.sh configure configure.in 
   fml/bin/fmladdr.in 
	implement fmladdr command, which shows all users and aliases.

2002/10/31

   add configura option: --with/without-mime-component-filter   
	configure.in 
	fml/etc/site_default_config.cf.in 
		configure --with/without-mime-component-filter

2002/10/29

   FML::Process::Utils 
	fix escape of Log(...) in eval q{}
	
   FML::Command::Admin::newml 
	prinf "a b c" -> a, b, c
	
   Mail::Message::ToHTML 
	umask escaping like splx():
	mask = umask();
	umask( ...) ; # set up umask here
	do something ...
	uamsk($mask);
	
   FML::Process::Utils 
	ensure umask escape in _mkpath_*()
	
   FML::Command::Admin::newml 
	handle both public and private directories in initialization phase.
	create variables:
	$newml_command_init_public_dirs $newml_command_init_private_dirs
	
	changed newml codes to use them.

2002/10/28

   FML::Header::Subject 
	you can use \U$ml_name\$ in subject tag configuration:)
	
   FML::Process::ThreadTrack 
	fix db_update cannot get last_id from _speculate_last_id() use seqfile
	
   File::Sequence 
	use chomp at get_id()'s return value

2002/10/27

   FML::Filter::MimeComponent3 
	bug fix interface between FML::Filter and MimeComponent3

2002/10/26

   FML::Filter::MimeComponent3 
	fix initianlization bug
	
   FML::Filter 
	use MimeComponent3 as a test

2002/10/23

   Mail::ThreadTrack::DB 
	typofix filepath value at sub db_mkdb()
	
2002/10/22

   FML::Process::Kernel 
	handle fmlthread $argv same as makefml one

2002/10/21

   MIME component ե륿ľ

   FML::Filter 
	re-enable mime component filter based on
	Filter::MimeComponent2

   FML::Filter::MimeComponent2 
	
	fix rule appling algorithm:
	 for rule (rules) {
	    for mp (message) {
	       check mp by $rule
	   }
	 }
	
	enable to read filter rules from the specified file (-c file).
	
	show more debug info.
	
	clean up debug info. debug info changes with debug level

	implement "cutoff" action

	clarify reason in log message
	
	enhance filter rule to use the reverse condition.
	e.g. (whole_type, !type, action).

2002/10/12

   Mail::Message::ToHTML 
	rename index.html to index_all.html
	add sub create_top_index()

2002/10/06

   Mail::Message::ToHTML 
	add index reverse code at _update_id_monthly_index()

2002/10/04

   variables
	define $html_archive_index_order_type
	
   FML::Command::HTMLify 
   FML::Process::Distribute 
   Mail::Message::ToHTML 
	enabled to handle order in index.html by
	$html_archive_index_order_type.
	
	Mail::Message::ToHTML
	o htmlify_{file,dir}() is changted to normal methods for passing
	arguments.
	
   FML::Filter 
	add prototype for $use_article_non_mime_filter
	
   FML::Header::Subject 
	workaround to re-encode subject after subject tag handling

2002/09/30

   ե륿󥰤κƹ

	FNF-ify
	
	rename: _load_function() -> _apply_function()
	
	module name renamed:
	o ContentCheck -> MimeComponent
	o HeaderCheck  -> Header
	o BodyCheck    -> TextPlain

2002/09/29

   ե륿󥰤κƹ

   ѿ
	reconstruct filter system.  create a new file "article.cf",
	and gather article_*_filter definitions in it.

   FML::Process::Distribute 
	sync w:::FML::Filter reconstruction. rename function name
	
   FML::Filter 
	following new variable $article_filter_functions,
	call the following function sequentially.
	o article_header_filter
	o article_non_mime_filter
	o article_mime_component_filter
	o article_text_plain_filter

2002/09/29

   FML::Process::ConfViewer 
	"fmlconf $ml $varname" shows "$varname = $value".
	unless $varname specified, dump all variables.

   FML::Config::Convert 
	hold file mode. set $dst mode same as $src mode
	
   FML::Confirm 
   FML::Header::MessageID 
   File::CacheDir 
   Mail::ThreadTrack 
   Mail::Delivery::Queue 
   Mail::Message::ToHTML 
   Mail::ThreadTrack::DB 
	we should not use hard-coded file::dir mode
	
   FML::Article 
	care subdir case more

2002/09/28

   variables
	enable off/on for user use

2002/09/24

   variables
	$article_body_filter_rules add permit as the last resort
	$article_header_filter_rules append permit rule
	
   FML::Filter::BodyCheck 
   FML::Filter::HeaderCheck 
	define permit rule

2002/09/23

   FML::Filter::BodyCheck 
	should not import STR2EUC from Mail::Message::Encode
	bug fixed to use Mail::Message::Encode->convert()

2002/09/14

   FML::Filter::BodyCheck 
	add use Mail::Message::Encode at reject_japanese_command_syntax()
	because rejected by filter due to Undefined subroutine
	&FML::Filter::BodyCheck::STR2EUC called
	
   variables	
	define $default_umask and $timezone

2002/09/11

   FML::Log
	not use /dev/stderr

2002/09/09

   INSTALL.sh 
	not use "id -p" (PR by fml-devel:241)

2002/08/29

   INSTALL.sh 
	add a cheap diag: check the existence of $owner and $group

   FML::Command::Admin::newml 
	validate $ml_home_prefix before main

2002/08/28

   FML/Process/Kernel 
	proper handling of "$program /var/spool/ml/elena" case

2002/08/26

   IO::Adapter::File 
	ensure rollback in calling get_value_*()
	
   FML::Error::Analyze 
	error_continuity::in summation, bad if $v >= 2
	
   FML::Credential 
	is_same_address() validate input data more
	
   FML::Process::Kernel 
	bug fix my ml_name (+ ml_domain) detection code:
	
	[back ground detail] "fmlconf -n elena@fml.org" works but
	"fmlconf -n elena" not works since we ignore the latter case.
	Regaredless of poorman's strategy but we pick up the first non
	/^-/ string as a $ml_name and set $ml_domain to the default
	domain. 

2002/08/21

   IO::Adapter 
	enhance add() to add($address, [$argv])
	
   IO::Adapter::File 
	enhance add()
	implement get_next_value()
	define get_value_as_str($key), get_value_as_array_ref($key)

   IO::Adapter::AtomicFile 
	more unique temp filename
	
2002/08/20

   FML::Process::Distribute 
	modify error message
	
   FML::Command::SendFile 
	message key change
	command.get.invalid.args -> command.get_invalid_args
	
   IO::Adapter::File 
	remove fml 4 specific ignore rules such as m=.. option
	delete(KEY) not (REGEXP)

2002/08/19

   FML::Process::Error 
	rename::$use_error_analyzer -> $use_error_analyzer_program
	use default $log_format_type now
	
   FML::Process::Command 
	enable process if $use_command_mail_program is defined.
	
   FML::Process::Distribute 
	enable process if $use_distribute_program is defined.
	
   variables
	define $use_command_mail_program ("yes" by default).
	rename $use_error_analyzer to $use_error_analyzer_program

   message key reconstructuring

2002/08/18

   FML::Command::SendFile 
	more debug info.
	
	send_user_xxx_message()
	set $command_args->{ _filename_to_send } before calling send_file().
	
   FML::Command::User::confirm 
	send back welcome file in subscribe case

2002/08/16

   FML::Error::Analyze 
	error_continuity::sum up time sequence with not point but mountain
	with some width.
	rename::simple_count_by_day -> error_continuity

   Mail::Message::Encode 
	add is_iso2022jp_string()
	
   FML::Command::Admin::log 
   FML::Filter::BodyCheck 
   FML::Process::Kernel 
	switch FML::Language to Mail::Message::Encode

   FML::Language::ISO2022JP 
   FML::Language::Japanese::{String,Utils}
	Removed

2002/08/15

   new variables	
	$error_analyzer_function
	$error_analyzer_simple_count_limit
	
   FML::Error 
	count up address with status=5*
	move analyzer function() to FML::Error::Analyze
	rename: *_timeout -> *_event_timeout
	
   FML::Process::Kernel 
	check if $maintainer differs $ml_address
	rename: *_timeout -> *_event_timeout

2002/08/14

   FML::Process::Kernel 
	use $config->get_as_array_ref( 'header_loop_check_rules' ) to get list.
	rename: refuse_further_processing() -> stop_this_process()
	define do_nothing($reason), same as stop_this_process()

   FML::Process::Alias Command ConfViewer Configure Distribute
		DocViewer Error HTMLify Kernel Spool ThreadTrack 
   FML::Process::CGI::Kernel 
	apply fix_perl_include_path(); after load_config_files() runs to add
	ml local library path to @INC.
	This is used for ml specific extention e.g. command extension.
	
   FML::Process::Kernel 
	enable ml local message template handling
	
   variables
	define $ml_local_* for ml specific customize
	+ ml_local_dir           =       $ml_home_dir::local
	+ ml_local_lib_dir       =       $ml_local_dir::lib
	+ ml_local_share_dir     =       $ml_local_dir::share
	+ ml_local_message_template_dir  = $ml_local_share_dir::message
	
	change definition for $message_template_dir:
	$fml_share_dir::message::$template_file_charset -> 
		$fml_share_dir::message

2002/08/13

   fml.org  4.0  fml-devel ١ذܹԳ

   etc/include*
	__ml_home_prefix__::__ml_name__ -> __ml_name__@__ml_domain__
	
   etc/config.cf*
	comment out $ml_name, $ml_domain
	
   FML::MTAControl::Postfix 
	bug fix $fh-close() under defined($fh) is confirmed
	use "postconf -d" to expand variables

   Mail::Message::Encode 
   remove FML::Encode and Mail::Message::Decode 
	merge FML::Encode Mail::Message::Decode into Mail::Message::Encode

   FML::Header::Subject 
	switched to use of Mail::Message::Encode

2002/08/11

   FML::Encode 
	ץȥפäƤߤ롣
	XXX Υ⥸塼 fml 4.0 ǤȤ

2002/08/09

   libexec/error
	顼ɥ쥹μưǽ̤괰

   FML::Process::Error 
	change lock granuality
	
   FML::Error 
	validate syntax for target address to remove
	check if the target address is a ML member before deluser() runs
	
2002/08/08

   FML::Error 
	enable real deluser()
	
   FML::Credential 
   FML::Command::{Auth,UserControl}
   FML::Command::Admin::chaddr
   FML::Command::User::{chaddr,off,on,subscribe,unsubscribe}
   FML::Process::{Command,Error,Kernel} 
	change arguments of credential functions to clarify the target address:
	e.g. is_member($curproc, $args) -> is_member(addr)
	
	modified functions:
	o is_member()
	o is_privileged_member()
	o is_recipient()
	o match_system_accounts()

2002/08/07

   libexec/error
	顼ɥ쥹μưǽ

   FML::Error::Cache 
   FML::Process::Error 
   FML::Error 
	enable automatic user removing (prototype)
	
   FML::Process::{Kernel,Utils}
	define $curproc->{ scheduler } not _scheduler
	define access method scheduler(). 
	please use it e.g. $curproc->scheduler().
	
   FML::Process::Kernel 
	lock() and unlock() accepts channel as the argument if needed.
	
	implemented
	o is_timeout( $channel )
	o get_timeout( $channel )
	o set_timeout( $channel, $time )
	
   FML::Process::Error 
   FML::ErrorAnalyze  (removed)
	create FML::Error:::with separate clesses for cache manipulation and
	analyzer.
	modified to FML::Error::Cache for cache writing.

   FML::Process::Scheduler 
	$scheduler_queue_dir -> $event_queue_dir
	
   Tie::JournaledFile 
	check the file existence
	
   Tie::JournaledDir 
	bug fix the default day type handling
	
2002/08/03

   ѿ
	define $scheduler_queue_dir

   FML::Process::Kernel Command Distribute Error
   FML::Process::Scheduler
	scheduler_init()

   Tie::JournaledFile
	enhance find: find(key, [mode]) where mode = scalar, array, array_ref
	implement get_all_values_as_hash_ref()
	bug fix FIRSTKEY() and NEXTKEY(), modified to use hash on memory
	
   Tie::JournaledDir
	bug fix keys() and each(), modified to use hash on memory.
	implement EXISTS(), DELETE(), CLEAR()
	implement get_all_values_as_hash_ref()
	
   FML::Header::MessageID
	modified to sync w:::Tie::JournaledDir usage
	
   FML::Article
   FML::Header
   FML::Process::Distribute Kernel
	use LogError() if appropriate

2002/07/31

   ե
	եեޥåȤΥǥեȤѹ 

   FML::Header
   FML::Header::MessageID
	disable some debug codes.
	switch DB from File::CacheDir to Tie::JournaledDir
	
   FML::Log
	use File::Basename;
	
   FML::Article
	s/Article/article/
	
   Mail::Delivery::SMTP
	recipients::total=\d+
	
   FML::Process::Distribute
   Mail::ThreadTrack::Analyze
	disable some debug messages

2002/07/30

   ѿ
	+error_analyzer_cache_type		=	File::CacheDir
	+error_analyzer_cache_mode		=	temporal
	+error_analyzer_cache_size		=	14

   libexec/error 񤭾夲褦
	   FML::Process::Error
	   FML::ErrorAnalyze
		move error analyzer core functions to FML::ErrorAnalyze

   FML::Process::Kernel
	libexec::error not need reply_message()

2002/07/29

   ѿ
	nuke database_* sql_*

   FML::Process::Error
	bug fix::resolve_ml_specific_variables() and load_config_files()
	add a few function prototypes

2002/07/28

   ѿ
	$newml_command_init_dirs
		rename::init_config_dir_list -> newml_command_init_dirs

		added $shared_db_dir $var_dir $db_dir $lock_dir
		$tmp_dir $spool_dir

	member_maps = $primary_member_map (nuke members-admin)

2002/07/26

   ǥ졼⡼ɤͽ
	moderator  maps 롣
		members-moderator
		recipients-moderator

	{add,del}moderator ޥɤ

   FML::Command::Admin::{add,del}admin
		members-admin
		recipients-admin
	ξ򥢥åץǡȤʤɡrecipients ϻȤʤ)

2002/07/25

   FML::Config
   File::Sequence Utils
   IO::Adapter::File
   IO::Adapter::AtomicFile
   IO::File::Atomic
	rename::IO::File::Atomic -> IO::Adapter::AtomicFile

   IO::Adapter βɷ³

   FML::Process::Command
	improve error messages

   FML::Process::Kernel
	improve log messages

   IO::Adapter::File
	bug fix so that getline() returns undef if not opened

2002/07/24

   IO::Adapter
	clean up
	remove AUTOLOAD()
	removed replace()

   IO::Adapter::DBI
	add missing open(), close()
	removed replace()
	implement getline()

   IO::Adapter::File
	removed replace()
	clean up comments

   IO::Adapter::SQL::toymodel
	removed since we discard sql model based framework

   FML::Credential
   FML::Command::UserControl
   FML::Command::Admin::chaddr
	change argv of FML::Credential::has_address_in_map():
	($map, $address) -> ($map, $config, $address)

2002/07/23

   IO::Adapter  SQL ɤ

   FML::Mailer
   FML::Command::Auth UserControl
   FML::Command::Admin::chaddr
   FML::Process::Distribute Utils
   Mail::Delivery::SMTP
	reconstruct SQL functions in IO::Adapter
	new IO::Adapter $map, $config;

   IO::Adapter
   IO::Adapter::DBI MySQL
	reconstruct MySQL functions
	o get_next_key() works now.
	o disable some functions once.

   FML::Config
	.ini sytle extension. for example

	[mysql:id]
	key = value

	So, we have the 2nd level hash value such as
	$config->{ key1 }->{ key2 } = $value
	and read::write it.

	bug fix {+,-}=  operation in the second level.


2002/07/22

   ѿ
	READ_ONLY($admin_member_maps)
	mysql ɲ

   FML::Config
	expand READ_ONLY($array) -> an array of READ_ONLY($array[$i])

   IO::Adapter
	accept READ_ONLY($map)
	prohibit add/delete/replace call for read only maps.

   FML::Credential
	add is_recipient() for sender is an ML recipient or not.

   off/on command prototype
	   FML::Command::User::confirm
	   FML::Command::Admin::on
	   FML::Command::Admin::off
	   FML::Command::User::on
	   FML::Command::User::off
		prototype on and off mode for recipient map

2002/07/20

   FML::Command::Admin::unsubscribe
	member_map    use config primary_member_map    to member_maps
	recipient_map use config primary_recipient_map to recipient_maps

2002/07/19

   FML::Process::Kernel
	repyl_message() handles makefml and *.cgi as special cases.

   FML::Process::CGI::Kernel
	cgi_execute_command() checks the command is allowed in
	commands_for_admin_cgi.
	XXX "commands_for_admin_cgi" is hard-coded.
	XXX we should enhance this for ml-admin::*.cgi et.al.

   FML::Restriction::Command
	enhance command syntax regexp

   FML::Command::Auth
	check user matching

   FML::Restriction::Command
	bug fix wrong command regexp

   FML::Process::Command
	remove not used variable
	check whether this command is allowed in this $level

2002/07/17

   Mail::Message::MH
	add debug
	define new()
	bug fix first:\d+
	handle a,b,c pattern

   FML::Command::SendFile
	use Mail::Message::MH

   FML::Command::UserControl
   FML::Command::Admin::log
   FML::Process::Kernel Utils
   FML::Process::CGI::Kernel
	define printing style format such as 'text', 'html', ...
	you can control it by the following access methods,
	get_print_style() and set_print_style(mode)

   FML::Command::Admin::dir file
	use FML::Restriction::

   FML::MTAControl::Procmail
	remove garbage definitions

   FML::MTAControl::Postfix
	search only hash:, dbm::types in postfix alias_maps

   FML::Credential
	optionally, we accept case insensitive comparison of user part
	of the mail address.

2002/07/15

   FML::Process::Utils
	define the following access methods:
	config()
	pcb()
	incoming_message_header()
	incoming_message_body()
	incoming_message()
	article_header()
	article_body()
	article_message()

   FML::Command::DataCheck
   FML::Filter::BodyCheck
   FML::Process::Command Distribute Error Kernel Utils
	modified to use access methods above.

   FML::Command
	use "$myname eq" not "$0 =~"

   FML::Config
	nuke debug::... if $0 =~ ::loader::

2002/07/14

   ĤΥޥɤη̤䥨顼᡼ϴԤؤ褦ˤ
	Ͽ/ˤĤƤΥ
	Сʳ/ޥɥ᡼ʤ

   FML::Process::Utils
	implement which_message_nl()

   FML::Command
   FML::Command::UserControl
   FML::Command::User::confirm
   FML::Process::Command Distribute Kernel
	copy message and send it to $maintainer too
	use reply_message*() with $msg_args to copy the message if needed where
	$msg_args = { always_cc => $maintainer } or
	$msg_args = { recipient => $maintinaer } pertinently.

   FML::Command::UserControl
	use message_nl( {add,del}_{ok,fail} ... ) as a reply

   FML::Process::Kernel
	disabled makefml NOT TO USE reply_message() now

2002/07/13

   ޥɥ󥿥åθľ
	CGI ⤳˹碌ƽ

	admin adduser
	admin useradd
	admin addadmin
	admin adminadd
	admin deluser
	admin userdel
	admin deladmin
	admin admindel

   FML::MTAControl
   FML::MTAControl::Procmail
   FML::Command::Admin::newml rmml
	newml  procmail Υƥץ졼Ȥ롣
	rmml  ˤϾä

   FML::Process::Kernel
	check defined($ml_name) in ml_* variable handlings

2002/07/12

   procmailrc ΥץĤäƤߤ䤦
	newml/rmml ޥɤ procmailrc Υƥץ졼Ȥ/
	褦ˤ

2002/07/11

   FML::MTAControl::Qmail
	remove ~fml::.qmail-* when the ML is removed.

2002/07/10

   CPAN modules
	import Unicode::Japanese 0.09

   CPAN documents
	catch up (2002::07::10)

2002/06/30-2002/07/30

   ɥȥ꡼˥ ڡ

2002/06/30

   FML::Command::HTMLify
	more check of input

   FML::Process::ThreadTrack
	fix ISA for ->speculate_max_id()

   FML::Process::ConfViewer Spool
	fix the condition to show help

   FML::Process::Error
	$self -> $curproc

2002/06/28

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	separate execution of the command and the menu pop up.
	Firstly execute run_cgi_main() and show tables after that.

	CGI ξ󹹿򤭤Ȥ뤿ˡCGI δؿƤӤδܹ
	¤

2002/06/27

  Сɥᥤ󥵥ݡȤνŪХۡ

   FML::MTAControl
   FML::Command::Admin::newml rmml
   FML::MTAControl::Postfix Qmail
	major overhaul
	o reconstruct architecture
	o bug fix virtual domain support
	o sync w:::FML::Process overhaul to bug fix virtual domain support

   FML::Process::Alias Command ConfViewer
		                            Configure Distribute
		                            DocViewer Error HTMLify
		                            Kernel Spool Switch
		                            ThreadTrack Utils
   FML::Process::CGI::Kernel
	major overhaul::delayed loading of *.cf files.  The loading is done
	within prepare() method now to handle virtual domains properly.

   FML::Command::HTMLify
	not need to validate ml existence

2002/06/25

   clean up CGI ...

   FML::CGI::Admin::List
	scroll size is set by the length of maps

   FML::Command::Admin::rmml
	fix virtual domain handling. sync w:::newml logic
	clean up (white spaces)
	clean up. nuke _get_domain_info (not used)

2002/06/24

   CGI θɤ

   FML::Process::Utils
	get_ml_list()::check $ml_home_prefix, bug fix default domain handling
	bug fix ml_home_prefix() args, more defined() checks

   FML::Config
   FML::Process::Kernel
   FML::Process::CGI::Kernel
	more defined() checks and sanity check if could

   FML::CGI::Admin::ML Menu User
   FML::Process::CGI::Kernel
	clean up menu, bug fix run_cgi_menu() args

2002/06/23

   СɥᥤΥݡ
	bug fix
	postfix  qmail  makefml newml ¹Ԥ
	Сɥᥤޤư
	 ǽΰϤäȤ MTA ꤬ɬפɤ

   FML::Command::Admin::newml
	insert "$ml_domain $ml_domain" to the file "virtual" at the
	first time since $ml_domain is one of $mydestination.
	install a template for qmail::control::virtualdomains

2002/06/22

   bug fix domain/virtual domain handling (specially in CGI)

   FML::Process::CGI::Kernel
	use $curproc->ml_XXX() as could as possible in new()
	clean up table configuration:
	define tables for function and <td> attributes

   FML::Log
	eval Log(warn ...) || print stderr it

   FML::Restriction::Base
	define navi_command as the same as command

   FML::Config
	defined() check more

   FML::Command::Admin::newml
	fix args of ml_home_xxx()

   FML::CGI::Admin::ML
	change get_ml_list() args

   FML::CGI::Admin::Menu
	classify the command in the navigation and main

   FML::Process::Utils
	define ml_name() method
	ml_domain() returns the current process's domain not default one.
	ml_home_prefix() and get_ml_list() behave more properly to reflect the
	current situation.
	fix ml_domain handling of rewrite_config_if_needed().

2002/06/21

   CGI bug fixes

   FML::Process::Utils
   FML::Process::CGI::Kernel
	move get_ml_list() and get_recipient_list()
	from Process::CGI::Kernel to Process::Utils.

   FML::CGI::Admin::Menu
   FML::Command::Admin::newml
	set up $ml_name dynamically

   FML::Command::UserControl
	ignore non-existed files, not croak()

   IO::Adapter::File
	close write handle and read handle after the write one.

   FML::Command::UserControl
	use IO::Adapter->get_next_key() not getline() for member list up

2002/06/01

   major variable naming overhaul

	relocating variable definitions in etc/src/

	align convention: for example,
		use_XXX
		XXX_rules
		XXX_dir
		XXX_cache_dir

	rename:
	$recipient_limit -> $smtp_recipient_limit
	$incoming_mail_dir -> $incoming_mail_cache_dir
	$outgoing_mail_dir -> $outgoing_mail_cache_dir
	$qmail_control_virtualdomains_file -> $qmail_virtualdomains_file

	s/header_filter/article_header_filter/
	s/header_rewrite/article_header_rewrite/
	s/body_filter/article_body_filter/

	s/subject_tag/article_subject_tag/

	verify_XXX_* -> check_XXX

	newly defined:
		$use_digest_header_rewrite

	removed:
		$smtp_log_dir
		$smtp_log_file

   overhaul
	variable naming convention
	defined check
	FNF-ify
	fix argument declarations

   FML::Command::Auth
	permit_admin_member_maps() return 0 if not match

   FML::Process::Kernel
	temp_file_path() ensures temp file name uniqueness by counting the
	number of times this function is called.

2002/05/31

   FML::Header
	add rewrite_date() for header rewrite Date::to X-Date:

2002/05/29

   FML::Command::Admin::chaddr
	bug fix::error_set() -> croak()

   FML::Process::Switch
	try to save the critical error message at $ml_home_prefix/ if could

2002/05/28

   rename/reconstruct variables
	clarify prefixes in caution.
	define or rename sysconf_dir et.al. to $domain_XXX_config_dir
	define $path_postmap

   FML::Command::Admin::newml
	mkdir @$init_config_dir_list
	run "postmap virtual"
	mainconf_dir -> domain_mail_config_dir

   FML::Credential
	$config->get_as_array_ref

   FML::Command::Auth
	implement permit_admin_member_maps()

2002/05/27

   new variable naming convention
	add caution

	define terms on "mail" and "message"
	change::_message_ -> _mail_

	define $postfix_virtual_map_file

	add $admin_member_maps to $member_maps

	change attribute names:
	o permit_members_only -> permit_member_maps
	o check_command -> check_admin_member_password

   FML::Mailer
   FML::Process::Distribute
   Mail::Delivery::{SMTP,Utils}
	pass smtp log file handle to Mail::Delivery

   FML::Process::Distribute
	permit_members_only -> permit_member_maps

   FML::Command::Admin::newml
   FML::MTAControl
   FML::MTAControl::{Postfix,Qmail}
	set up virtual map if needed

   FML::Process::Kernel
	only user "fml" should read lock files.
	define terms on "mail" and "message"::_message_ -> _mail_
	permit_members_only -> permit_member_maps

   FML::Process::Command
   FML::Command::Auth
	rearrange admin command authentication to sync w/ new variable names

   FML::Process::Utils
	implement is_default_domain()

2002/05/25

   FML::Command::Admin::newml
	fix $templ_files be ARRAY_REF

   FML::MTAControl::Qmail
	install .qmail-do:ma:-$ml for .qmail-do.ma.in-$ml

   FML::Command::Admin::newml
   FML::Process::Configure Utils
	at the first stage of makefml, care $config and rewrite it, if needed,
	when we handle virtual domain.
	implement $curproc->rewrite_config_if_needed() for it.

2002/05/24

   variables
	reconstruct $newml_command_*_template_files

   FML::Config::Convert
	implement convert_file(srcfile, dstfile, params)

   FML::Log
	print STDERR $msg if Log() fails

   FML::MTAControl
   FML::Command::Admin::newml
	use FML::MTAControl ACAP

2002/05/23

   FML::Header::Subject
	add mime decode for subject

   Mail::Message::Decode Encode
	FNF-ify, fix documents and @EXPORTS

2002/05/22

   FML::Mailer
	save smtp log at var/mail/outgoing/

2002/05/21

   variables
   	define $error_cache_dir
	define $newml_command_postfix_template_files
	define $newml_command_qmail_template_files
	define $incoming_message_dir
	define $outgoing_message_dir
		var/mail/{incoming,outgoing,queue}/

	define $use_outgoing_message_cache     =       yes
	define $outgoing_message_cache_size    =       128

   etc/aliases
	enable auto error analyzer by default

   FML::Process::Kernel
	implement $curproc->open_outgoing_message_channel()
	$mincoming_dir -> $incoming_message_dir

   FML::Process::Distribute
	use $curproc->open_outgoing_message_channel() not _smtplog to save
	SMTP transaction logs.

   FML::Command::Admin::newml
	$newml_command_template_files ->
	$newml_command_postfix_template_files

   Mail::Bounce::Postfix19991231
	validate input data

   FML::Process::Error
	implement a prototype to cache error data

2002/05/19

   add/enable a prototype of libexe::fml::error (mead)

   variables
	define $use_error_analyzer
	define $subscribe_command_auth_type
	define $listinfo_base_dir
	$command_prompot          -> $command_prompt
	$command_chaddr_type      -> $chaddr_command_auth_type
	$command_unsubscribe_type -> $unsubscribe_command_auth_type

   FML::Process::Error
	work if $use_error_analyzer is 'yes'
	add hooks
	finish() checks if this error message is effective or not.
	fix typo and missing definition

   FML::Process::Command
	fix building logic of $command_args and $options to make admin
	command work again.
	fix $admin_prefix trap
	rearrange structure
	FNF-ify
	clarify the current context is under confirmation or not.
	ignorance of commands are dependent on this context.
	nuke mode=special which is not used.
	send back statistics and original message

   FML::Command::DataCheck
	fix parse_command_arguments() arguments

   Mail::Message::MH
	fix wrong last:\d+ counting logic

2002/05/18

   FML::Process::Command
	reconstruct command check logic (1)

   Mail::Message
	implement message_text_as_array_ref()

   updated IM to im-141 + local patch (tats20020413.diff)

   FML::Filter::BodyCheck
	add reject_uuencode()

2002/05/17

   FML::Process::Kernel
	check whether $use_incoming_message_cache is yes
	use $mincoming_cache_size as cache modulus
	save incoming message at $ml_home_dir/var/mincoming/

   File::CacheDir
	update document on new() arguments
	bug fix eval{} should do eval { use()&&new() }

   new variables: (etc/)
	use_incoming_message_cache	=	yes
	incoming_message_cache_size	=	128

2002/05/16

   FML::Process::CGI::Kernel
	pick up address_selected not address

   Mail::Message::ToHTML
	not reset @AnyDBM_File::ISA.
	It is better for us to use the default @ISA

2002/05/13

   FML::Process::Utils
	implement
	config_cf_filepath($ml, $domain)
	is_config_cf_exist($ml, $domain)

   FML::Command::HTMLify
	validate if config.cf exists

2002/05/11

   FML::Filter::ContentCheck
	add Log deteled mimetype at only_plaintext() and typo fix
	fix wrong log message (but is it correct fix ?).
	FNF-ify

   FML::Language::Japanese::Utils
	_look_not_iso2022jp_string::add trivial check

   Mail::Message
	fix::parser() should handle header only message.
	no no no, not reset $data_ptr unless body
	nuke \s*$

2002/05/10

   FML::Filter::ContentCheck
	add function permit_mimetype() and reject_mimetype()
	add function permit_rules() and reject_rules()

2002/04/30

   FML::Command::Admin::check
	add prototype for diagnostics

2002/04/28

   FML::Process::Kernel
	check $curproc->is_refused() more before action at each step

   Mail::Message
	fix comment.
	add loop label.
	FNF.
	more checks by defined() and whether the content is not empty.
	new() not need $InComingMessage here
	remove module global variable $InComingMessage
	check invalid multipart format

2002/04/27

   FML::Process::Kernel
	kern.not_member -> error.not_member

   FML::Process::Kernel
	disable debug message

   Mail::Message
	check more data by defined()

   FML::Process::Kernel
	modified to not using FileHandle::pipe()
	add methods to prepare and clean up temporary files
	implement parse_exception()
	implement message_nl() to separete message converter into natural
	language and message handling parts

   FML::Process::CGI::Kernel Param
	convert exception syntax into the new style. See FNF
	convert message to natual language if could

2002/04/26

   FML::Process::Flow
	run clean_up_tmpfiles() finally

   FML::Process::Kernel
	fix typo
	define "permit_commands_for_stranger" (only define not implemented :)

   FML::Process::Command
   FML::Command::DataCheck
	permit_commands_for_stranger works

   variables
	add rule permit_commands_for_stranger for $command_restrictions

2002/04/25

   variables
	rename variable::available_commands_for_xxx -> commands_for_xxx

   FML::Command::Admin::htmlify
	check $use_html_archive value before action

   FML::MTAControl
	implement get_aliases_as_hash_ref()
	new() accepts { mta_type => ... } argument

   FML::Process::Switch
   FML::Process::Alias
	new utility::fmlalias e.g. shows not only fml but all alias entries

   Mail::Message
	check defined($InComingMessage) before $body_size estimation

2002/04/24

   FML::Header::Subject
	replace subject to Subject

   define $path_postconf

   File::Utils
	define append()

   FML::Command::Admin::{newml, rmml}
	use File::Utils and FML::MTAControl to share codes.

   FML::Command::Admin::newml
	check $ml_name duplication over all $alias_maps (postfix case)

   FML::Filter::ContentCheck
	bugfix object argument

2002/04/23

   FML::Process::Distribute Kernel
	fix errro message and enable the rejected message forwarding

   FML::Command::Admin::newml
	check alias duplication
	enable cgi

   FML::Restriction::Base
	define $ml_name_specified

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
   FML::CGI::Admin::ML
	define cgi_try_get_ml_name()
	enabled newml and rmml on CGI.

2002/04/22

   FML::Process::CGI::Kernel
	sort ml list

   FML::Command::HTMLify
	bug fix subdirs sorting algorithm

   Mail::Message::Spool
	check value of $args->{ use_subdir }

   FML::Article
	error if the article already exists

2002/04/21

   FML::Command::Admin::newml
	install .htaccess only for the first time

   Mail::Message::ToHTML
	you can specify $ENV{MAX}

   Mail::Message::ToHTML
	for () { fork() && call htmlify_file() }

   Mail::Message::ToHTML
	htmlify_dir() accepts options::$has_fork and $max (for debug)

   Mail::Message::ToHTML
	sort years in monthly.index
	bug fix the scan range for each subdir

   FML::Command::HTMLify
	sort -n subdirs list

2002/04/20

   FML::Filter::BodyCheck
	comment out "local($*) = 0;"

   FML::Filter::TrafficMonitor
	disable almost all codes imported from fml 4.0 once anyway

   configure
	add --with-warning

   FML::Command::HTMLify
   FML::Process::HTMLify
	bug fix subdir checking

	use FML::Command::HTMLify to share htmlify code between
	fmlhtmlify and "makefml htmlify".

   FML::Command::Admin::htmlify
	remove $options

   FML::Process::Configure
	log raw error message

2002/04/19

   FML::Process::Spool
	check argument and show help if invalid

   FML::Process::Switch
	stop $ml_home_dir search when we can get it.

   Mail::Message::ToHTML
	bug fix::check the source file existence more severely

2002/04/18

   Mail::Message::ToHTML
	check $args->{ file } more severely in _update_relation()

   FML::Process::Distribute
	eval htmlify_file() to avoid unknown error ;)

   FML::Process::Distribute
	eval filtering

2002/04/16

   FML::Process::Switch
	fmlspool --srcdir not --dstdir

   FML::Process::Spool
	fix conversion algorithm

2002/04/15

   FML::Process::Switch
	fmlspool --srcdir not --dstdir

   FML::Process::Spool
	fix conversion algorithm

   add a new utility "fmlspool"
	add a new utility::fmlspool to handle spool directory

   FML::Process::Utils
	implement ml_home_dir()

   FML::Process::Switch
	enable fmlspool

   FML::Article
	implement subdirpath().
	check $curproc->{'incoming_message'}->{ message } in new() data input.

   FML::Process::Kernel
	implement set_umask_as_public(), reset_umask() for umask control.

   FML::Process::Distribute
	umask and permission control for html archives

   Mail::Message::ToHTML
	BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File); }

   FML::Process::HTMLify
	consider spool:::may has subdir(s)

2002/04/14

   Mail::Message::ToHTML
	fix $subdir handling on month boundary
	validate $curid ($self->{ _current_id})
	validate or warn input into Jcode
	set $code for Jcode if needed

   CPAN	modules
	updated Jcode to 0.79

2002/04/13

   FML::Command::User::unsubscribe
	use FML::Confirm not via eval{ use ..}

   FML::Process::Command
	select the error message by the $xxx_restrictions error reason

   Mail::Message
	implement whole_message_as_string_ref()

   FML::Process::Command
	reply_message( OBJ(Mail::Message) ) when the message is rejected by
	$command_restrictions.

   FML::Process::Kernel
	o reply_message() can handle OBJ(Mail::Message).
	o save error reason at pcb area when the message is rejected by
	xxx_restrictions.

2002/04/12

   FML::Process::Distribute
	send back mesg "we deny requests from system accounts"

   FML::Process::Command
	check by permit_command() before command execution ;)
	send back mesg "we deny requests from system accounts"

   FML::CGI::Calender
	switched to the current style

2002/04/11

   FML::Config
	has_attribute() should look up %_fml_config_result

   FML::Process::Command
	accept commands, e.g. subscribe, allowed for not members

2002/04/10

   2002/03 ʬ꡼󥢥åפ

   FML::Filter 饹ˤե륿󥰤ͭˤ
	FML::Filter:: ΥХ

   FML::Process::Distribute Kernel
	enable filtering.
	implement access methods to control filtering.
	o $curproc->refuse_further_processing()
	o $curproc->is_refused()

2002/04/07

   variables
	define $primary_admin_member_password_map
	rename $admin_member_passwd_maps -> $admin_member_password_maps

   FML::Command::Admin::chaddr
	chaddr over all maps

   FML::Command::Admin::get
	clean up variable names to be easy for your eyes

   FML::Command::Admin::htmlify
	doc::remove makefml description
	add --dstdir=DIR
	FNF-ify

   FML::Command::Admin::list
	show all maps in $xxx_maps

   FML::Command::Admin::log
	fix::add comments
	use HTML::FromText class to espace metchars

   FML::Process::Calender
	clean up documents, comments
	use $curproc not $self if appropriate

   FML::Process::DocViewer
	remove AUTOLOAD()
	clean up

2002/04/06

   remove "recipients" file from default $recipient_maps

   Mail::Message::Spool
	define dirpath()

   FML::Article
	mkdir subdir if needed

2002/04/05

   spool (Υס)γز¤򥪥ץˤ
	ѿ $use_spool_subdir ߤ

2002/04/03

   clean up, audit campaign
	դ餪ݽޤ礦(̣)

2002/04/01

  ºݤ˹ۤĤĥƥȤƤߤ롣
	configure ϤäȤå٤
	ؤʤΤ롣e.g. makefml list

   more check and expansion by configure
	we should use values speculated by configure if could.
	default_ml_home_prefix = @mlspooldir@

   FML::Command::Admin::newml
	not install CVS

	expand default_domain by config.status

   FML::Command::UserControl
   FML::Command::Admin::list
	enable "admin list" command
	admin list $ml {members,actives,recipients}

   FML::Process::Switch
	warn() if $ml_name not specified

2002/03/31

   "makefml newml" set up ~fml/fml/listinfo/$domain/$ml/
	̤ͣκ WWW ڡѰդ( listinfo )
	FML::Command::Admin::newml

	variables
	+ remove $message_message_dir
	+ change $message_template_dir
	+ change $html_archive_dir
	+ add $listinfo_dir

   ز¤褦ˤ
	HTML ֤ǥ쥯ȥ
	סǥ쥯ȥ

   FML::Process::Kernel
	$message_message_dir -> $message_template_dir
   FML::Command::Admin::htmlify
   FML::Process::{Distribute,HTMLify}
   Mail::Message::ToHTML
   Mail::HTML::Lite
	rename class::Mail::HTML::Lite -> Mail::Message::ToHTML
	change .ht* database names

   FML::Article
   Mail::Message::Spool
   Mail::ThreadTrack
   Mail::ThreadTrack::DB Print.pm
   Mail::ThreadTrack::Print::HTML Text.pm
	use Mail::Message::Spool::filepath() for the article file path.
	use $self->filepath() which is  based on Mail::Message::Spool
	Mail::Message::Spool::spool arg changes::$spool_dir -> $base_dir

   Mail::HTML::Lite
	rename message_file*() -> html_file*()
	html file path is YYYYMM/msg$id.html by default

2002/03/30

   FML::Article
   FML::Command::SendFile
   FML::Process::Distribute
	FML::Article::filepath() determines the article file path.

   admin {delete,unlink} -> admin file $subcommand
	ޥ̾ͤǽ뤿
	admin ޥɤΥ󥿥åγĥϤ롣

2002/03/25

   enable admin {delete,unlink}

   FML::Restriction::Base
	define file

   FML::Command::DirUtils
	fix to use FML::Restriction::Base not CGI

2002/03/24

   FML::Restriction::Base
	define directory regexp as [-a-zA-Z0-9]+
	permit . in "user" part in e.g. "address"

   variables
	define $path_ls for admin {dir,ls}

   enhance dommands
	enable admin {ls,dir,delete,unlink}

2002/03/23

   FML::Command::Auth
	admin ޥɤΥѥǧڤͭˤ

   FML::Command
	implement rewrite_prompt(). It is used to hide password et. al.

   FML::Process::Command
	clean up
	use rewrite_prompt() by FML::Command to hide admin password.

   variables
	define $admin_member_passwd_maps.
	admin password
	admin pass

   new modules from CPAN
	import Crypt-UnixCrypt-1.0, perl-only implementation of the
	crypt(3).

2002/03/21

   ޥɤǧڤˤĤƲ

   FML::Credential
	reconstruct is*member() functions
	implement primitive is_privileged_member()

   FML::Process::Command
	clean up :::clarify the logic:
	o valid command syntax
	o command mode for a user, admin and stranger
	o add prototype of admin command auth

   variable:
	define $admin_command_restrictions

   FML::Command::Auth
	add prototype of admin command auth

2002/03/20

   CGI κƹ: clean up's

   loader
	prepare a hook to inform some hints via $main_cf

   FML::Process::Utils
	implement hints()

   FML::Command::Admin::newml
	setup admin::{thread,config,menu}.cgi based on libexec::loader
	and hints

   FML::Config::Convert
	replace __hints_for_fml_process__

   FML::Process::Switch
	enable config.cgi , remove makefml.cgi

   FML::CGI::ThreadTrack
	vertical align of menus

   FML::Process::CGI::Kernel
	change layout in table a little.
	define run_cgi_title() and run_cgi_help()
	add options bar to switch the language (dummy yet :-)

   FML::CGI::Admin::Menu
	remove run_cgi_help() once

2002/03/19

   CGI κƹ: FML::CGI  FML::Command ֤Υȥݥ󵡹
	ޥɰ¸εǽ FML::Command 饹ذǤ

   FML::Process::CGI::Param
	accpet empty value even if it not matches filter:)

   FML::Command::Admin::subscribe unsubscribe.pm
	implement cgi_menu() to show command specific menu in CGI screen

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	o prepend cgi_ or run_cgi to function name.
	o implement trampoline mechanism using FML::Command::class.
	o change::pop_menu -> scrolling_list

   FML::Command::UserControl
	define FML::Command::UserControl class to share user control codes.
	modified Admin::{subscribe,unsubscribe} commands to use it.

   new commands
	 admin ޥɤ˻Ȥ褦ˤʤޤ
	admin addadmin
	admin addpriv
	admin byeadmin
	admin byepriv
	admin log

   new variables
	$primary_admin_member_map
	$admin_member_maps

2002/03/18

   CGI κƹϤ

	FML::CGI::*
	FML::Process::CGI::*
	reconstruct CGI around structure phase 1:
	o table not frame based menu support (similar style to www.netbsd.org)
	o prepare method for each location in the screen.
	   for example,
	   + run_cgi_main() to show main menu at the center in the screen.
	   + run_cgi_navigator() to show navigation bar at the left.
	o longjmp() by eval::croak when we encounter insecure conditions.

   FML::CGI::Admin::Menu
   FML::Process::CGI::Kernel
	cosmetics
	FNF
	define cgi_execute_command() and try_get_address() into
	FML::Process::CGI::Kernel and remove them from FML::CGI::Admin::Menu

   FML::Process::Utils
	define ml_domain() but same as default_domain() yet

   new variables (for CGI)
	$cgi_main_menu_color
	$cgi_navigation_bar_color

2002/03/17

   chaddr ޥɤư褦ˤʤä
		chaddr
		admin chaddr
		makefml chaddr
	ΣǤ

   FML::Command::User::chaddr
	works again!
	if either old or new addresses in chaddr arguments is an ML member,
	try to confirm this request irrespective of "From:" address.

   FML::Command::Admin::subscribe unsubscribe.pm
   FML::Command::User::chaddr confirm.pm
	change $command_args argument:
	$command_args->{ adddress } =>  $command_args->{ command_data }

   FML::Process::Kernel
	reply_message::append \n to message if \n$ is missing

	reconstruct message queue subsystem internal.
	we can handle output styles for message queue input properly.

	å塼󥰥ƥƹ
	ԥ١ǤΤޤȤᤢʤɤ
	XXX  chaddr ޥɤ񤱤ޤ

2002/03/16

   FML::Process::Kernel
	new message queue handling. sync with reply-message branch

	clean up logic to handle messages queue.
	for $recipient ( queue ) {
		apply the following rules for messages returned to
		specified $recipient.

		1. pick up text messages and put them into the first part.
		2. append non text messages
	}

2002/03/06

   variables
	define directory for cgi and HTML article archive
	define $newml_command_template_files
	define $available_commands_for_admin_cgi

   FML::Config
	implement get_as_array_ref()

   FML::Process::Switch
	makefml --force $command $ml ...

2002/02/24

   update /etc: define the following variables
	$fml_owner $fml_group $syscon_dir $mailconf_dir
	$mail_aliases_file

   FML::Process::Utils
	define fml_owner(), fml_group() and mail_aliases().

   FML::Config::Convert
	replace $fml_owner and $ml_home_dir.

   FML::Config
	set(key, value) and update() informs FML::Config to expand variables.

   FML::Command::Admin::newml
	install aliases when makefml newml runs.

2002/02/23

   FML::Command::SendFile
   FML::Command::Admin::get
	fix filename in mime header

   FML::Process::Command and etc/
	validate if the requested admin command is permited or not.
	define $available_commands_for_privileged_user
	rename $available_commands -> $available_commands_for_user

2002/02/20

   File::Sequence
	add function _search_max_id_from_top()

   clean up commands
	¿Υޥɤư褦ˤ(:-)

	update $available_commands_for_stranger and $available_commands
	fix path::$message_template_dir -> $ml_home_dir
	o $guide_file
	o $help_file
	o $objective_file
	o $summary_file

   FML::Process::Kernel
	add Reply-To::into our reply message

2002/02/19

   FML::Command
	remove require_lock() due to obsolete

2002/02/18

   clean up FML::Command::{User,Admin}::*
	remove FML::Command::Utils and ErroStatus
	we should not inherit anything as could as possible.

   enhance xxx_restrictions:
	enable "permit_anyone" can be used in {post,command}_restrictions.

2002/02/17

   FML::Config
	implement hook extension. For example,
	$config->is_hook_defined( 'START_HOOK' );
	$config->get_hook( 'START_HOOK' );

   FML::Process::Command ConfViewer Configure Distribute
		 DocViewer HTMLify ThreadTrack
	implement several hooks

   import HTML-Template-2.5 from CPAN

   change variables
	$confirm_keyword -> $confirm_command_prefix
	add $admin_command_prefix

   FML::Command::Admin::htmlify
	makefml htmlify elena --srcdir=.. --outdir=...

   Mail::Delivery::ESMTP
	fix argument

   admin ޥɤư褦ˤ
	ޤǧڤƤʤ :)

   FML::Command::User::confirm
	remove ErrorStatus, FML::Command::Utils;
	define new()
	call User::Command::XXX without lock since already locked now.

   FML::Config
	fix return value by FETCH() to be without \s*$

   FML::Command
	change use() and new().
	not use ErrorStatus.
	check $command_args->{ override_need_no_lock } to control lock.

   FML::Process::Distribute
	bug fix definitions on hooks

   FML::Process::Kernel
	fix file name in searching message template

2002/02/13

   define access method need_lock().
        each command module determins whether it needs lock or not.

	FML::Command  FML::Command::* ʲѹ
	ƥޥɤϳƼ need_lock() Ȥ᥽åɤ
	åɬפɤ FML::Command ˶٤
	XXX ĥθξ塢Ƥߤ

   FML::Command::SendFile
	remove import of ErrorStatus

   rename module::TinyScheduler -> Calender::Lite
	FML::Process::Switch
	FML::CGI::Scheduler -> FML::CGI::Calender
	FML::Process::Scheduler -> FML::Process::Calender

2002/02/11

   create FML::Restriction::Command class

   FML::Command::SendFile
   FML::Command::User::{guide,help,deny,objective}
	send back file file in $ml_home_dir if found.
	return the default message if not found.
	"guide", "help", "objective" commands use this logic.

	桼ѤΥޥɤ֤ѹ
		1. (4.0 ˤ) $DIR  help ե֤
		2. help ե뤬ʤʤ顢ǥեȤΥåȤ

		1.  4.0 ȤθߴΤǡ
		fml-devel Ǥ 2. ǥե( help եϺʤ )

2002/02/04

   FML::Process::ThreadTrack
	determine the max sequence id by considering last mofieid time
	among the sequence file and thread databases.

   Mail::ThreadTrack::DB
	implement db_last_modified()
	It return the last modified time of "date" DB in dateabase as
	unix time.

2002/02/03

   main.cf.in
	$ml_home_prefix -> $default_ml_home_prefix

   FML::Command::Admin::newml
   FML::Process::Utils
	ml_home_prefix() can recognize virtual domain.
	modified to use it.

	we should not use $curproc->{ main_cf } directrly in modules out of FML::Process::
	we implement the following methods in FML::Process::Utils and use them.
	o $curproc->executable_prefix()
	o $curproc->template_files_dir_for_newml()

2002/02/02

   FML::Process::Utils
	define access methods::default_domain(), ml_home_prefix()
	(prototype)

   FML::Process::Switch
   FML::Process::CGI::Kernel
	use FML::Process::Utils::__ml_home_prefix_from_main_cf() to
	get $ml_home_prefix.

   TinyScheduler
   Mail::ThreadTrack::DB
	use File::Spec

2002/02/01

   remove $ENV{debug} based toggle flag

2002/01/27

   FML::Command::Admin::newml
	"makefml newml" virtual domain support. For exmaple,

		% makefml newml elena@nuinui.net

	The ml_home_dir is speculated from $virtual_maps in main.cf.


   IO::Adapter clean up campaign ?:)

   Mail::Delivery::SMTP
   IO::Adapter
   IO::Adapter::{Array,DBI,File,MySQL}
	clarify IO::Adapter definition and clean up get_XXX() functions.
	remove get_member(), get_active() and get_recipient()
	define get_next_key() and get_next_value() and clarify thier definitions.
	add IMPLEMENTATION.jp

   FML::Credential
   IO::Adapter
   IO::Adapter::DBI
	clarify IO::Adapter::find() usage.
	find() returns "key value" by default and "key" if requested.
	add want option e.g. find(key, { want => $what } ).

   File::Sequence
	search_max_id() searches all keys if full_search option specified

   FML::Command::SendFile
	clarify function acl, arguments more

   FML::Command::User::get
	clarify function arguments more

2002/01/20

   /etc/fml/main.cf
	define $virtual_maps

   FML::Process::Utils
	implement get_virtual_maps()

   FML::Process::Kernel
	fix module loading of Mail::Delivery::Queue

   FML::Command
   FML::Command::SendFile
	fixed to call up error to FML::Process::Command layer

   FML::Process::Command
	more comments, log.
	fix message handling to use object to get command string returned by
	find_first_plaintext_message().

2002/01/16

   change Mail::Message naming convention.
	   FML::Article Parse
	   FML::Filter::BodyCheck HeaderCheck TrafficMonitor
	   FML::Process::Command Distribute Kernel
	   Mail::Bounce Message
	   Mail::Bounce::DSN Exim GOO Postfix19991231 SimpleMatch
	   Mail::Delivery::SMTP
	   Mail::HTML::Lite
	   Mail::ThreadTrack::Analyze HeaderRewrite

	public -> private:
	o head_message
	o last_message
	o next_message
	o prev_message

	prefix change:
	o rfc822_message_ -> whole_message_
	o get_first_plaintext_message() -> find_first_plaintext_message()
	o get_encoding_mechanism() -> encoding_mechanism()
	o get_data_type() -> data_type()
	o get_data_type_list() -> data_type_list()

	renamed:
	o get_offset() - >offset_pair()
	o header_in_body_part() -> message_fields()
	o data_in_body_part()   -> message_text()
	where we use RFC822 flabour naming convention.
	rfc822 says "message = fields + text" and rfc2047 says "message" as
	defined in RFC 822, with all header fields optional.

2002/01/14

   Mail::HTML::Lite
	define default value.
	delayed loading by eval q{ use .. }.
	validate defined( $db->{ _thread_list }->{ $id } ).

	_head_thread()::fix head_thread search algorithm.

	rename __search_default_next_thread_id() to
	__search_default_next_id_in_thread().

	__sort_yyyymm()::validate value is not null.

2002/01/13, 01/12, ...

   final clean up campaign in 2001
   	꡼˥󥰥ڡ 2001 final Ϥޤ³Ƥ뤾;-)

   Mail::Message
   FML::parse
	rfc822_message_FUNCTION()

	å( Mail::Message  chain )Ф
	᥽åɤˤ rfc822_message_ ƬˤĤ褦̾򤢤碌

   File::SimpleLock
   Mail::Delivery::Queue

        use Fcntl qw(:DEFAULT :flock), remove LOCK_XX() definitions.

2001/12/25

   Mail::HTML::Lite
	bug fix::_print_li_filename() check is too restricted

2001/12/22,23,24,25

   final clean up campaign in 2001
   	꡼˥󥰥ڡ 2001 եʥ:)
	FNF-ify
	ȤӥɥȤι
	κ \s*$
	ȤäƤʤΤǺ⥸塼
		FML::Messages
		FML::MIME
		FML::Language::Japanese::Subject

	FML::MIME  Mail::Message::Decode 
	Mail::Message::Encode ΣĤˤ狼줿

   renamed
	FML::Checksum -> Mail::Message::Checksum

2001/12/22

   FML::Process::Kernel
	remove FML::Messages

   TinyScheduler
	define get_mode() for symmetric definition.

2001/12/18

   HTML ǽˤ(ǥեȤ ON)

	use_html_archive = yes (ǥե)

	~fml/public_html/mlarchive/ͣ̾/

   FML::Process::Kernel
	define $fml_owner_home_dir by process $uid

   FML::Process::Distribute
	htlmify article

2001/12/16

   FML::Messages
   IO::Adapter::LDAP
   Mail::Message::Date
   Mail::Message::Language::Japanese::Subject
	nuke "require Exporter, which is not needed

   INSTALL.sh
	warn you should update loader if needed

   loader.in
	use $fmlconfdir not $sysconfdir
	use IO::File not FileHandle

2001/12/11

   FML::Command::Admin::newml
	ensure installed file mode to be 0644

   TinyScheduler
	speculate $user by $$ unless defined $user

   ./configure γĥ
		å򤤤Ĥ
		--with-fml-group=$GROUP
		--with-fmlconfdir=$prefix/etc/fml

2001/12/09

  󥹥ȡΥХȤ
	makefml ΰåΥХ
	fml/etc/ ʲιѹ
	makefml newml  config.cf ˣͣ̾ѹ򤹤

2001/12/08

   TinyScheduler
	more proper error messages

   FML::Process::Configure
	fix error handling, define finish() to avoid loading error

   FML::Process::DocViewer
	add path for perl executatbles e.g. ::usr::local::bin

2001/11/27

   FML::Log
   Tie::JournaledDir
	FML::Date -> Mail::Message::Date

   Mail::Message::Date
	remove MTI.. message

   update comments
	clean up
	FNF-ify

   Mail::ThreadTrack::Analyze
	run prepare_history_info($msg) if $self->{ _is_rewrite_header }

   configure
	@sysconfdir@ -> @sysconfdir@/fml
	modify message

   FML::Process::Switch
	modified not to use Standalone
	loader has Standalone by itself now.

   config.sh.in
   etc/main.cf.in
	@sysconfdir@ -> @sysconfdir@::fml

   FML::Process::Switch
   libexec/loader.in
	modified not to use Standalone
	loader has Standalone by itself now.

2001/11/26

   FML::Process::Kernel
	bug fix missing mkdir() argument

   FML::Process::Distribute
   Mail::ThreadTrack
   Mail::ThreadTrack::Analyze
	toggle header rewriting (subject) to add thread id. off by default

   config.cf
	define $use_thread_subject_tag to toggle header rewrite

2001/11/25

   more tainted safe
	(but needs more consideration, may be use of FML::Restriction class)
	TinyScheduler
	FML::Process::ConfViewer, FML::Process::Scheduler

   FML::Filter::BodyCheck
	validate get_first_plaintext_message() return value

   libexec/loader.in
	we should not use @INC derived from $0
	reset PATH in the early stage

   FML::Process::*
	implement help() method
	enable --help for all command line programs
	verify_request() checks @ARGV and show help() if needed

   FML::Process::Switch
	enable distribute and command
	check whether getopt() options are given or not.
	enable --help for all command line programs
	xxx.cgi SHOULD NOT ACCPET the same options as command line program xxx
	does.

   FML::Process::Kernel
	trap --help in new() to show and exit asap

   FML::Process::ConfViewer
	fmlconf and makefml are separete now

   FML::Process::CGI::Kernel
	change defualt target to _top

   FML::Process::CGI::Param
   FML::Restriction
	reconstructured safe parameter definitions

2001/11/21

   FML::Process::Switch
	fmlsch -h to show help

   FML::Process::Scheduler
   TinyScheduler
	clean up fmlsch
	FNF-ify
	handle options by getopt() in Process::Scheduler not TinySchedule
	make "fmlsch help" work
	fix entry duplication bug in parser
	print_specific_month() can handle (month, year) pair
	define set_mode()
	use env var BROWSER ("w3m" by default)

2001/11/20

   File::Sequence
	implement search_max_id() in hash key
	more debug

   Mail::ThreadTrack::DB
	db_hash( $type ) to return hash reference for $type

   Mail::ThreadTrack::HeaderRewrite
	validate variables

   FML::Process::ThreadTrack
	update database for latest not-yet-analyzed articles.

2001/11/19

   Mail::ThreadTrack
	implement set_fd(), get_fd()
	implemente set_order()

   FML::Process::ThreadTrack
   Mail::ThreadTrack::Print
	split functions for list and summary.
	"list" shows thread summary but "summary" shows thread summary +
	article summary.

	enhance fmlthread to provide CUI, oh this is useful !

   Mail::ThreadTrack::Print
	enable --reverse for summary, list command
	check reverse_order value ;-)

   Mail::ThreadTrack::Print::Message
	check value of header fields, which is undefined in some cases

   Mail::ThreadTrack::Print::Text
	implement show_articles_in_thread()

   FML::CGI::ThreadTrack
	summary listing on CGI is normal order by default

2001/11/18

   FML::Article
	implement speculate_max_id()

   FML::Process::ThreadTrack
	change max_id speculation strategy:
	1. check the max_id is given or not, use it if given
	2. try max_id() of FML::Article;
	3. speculate_max_id($spool_dir) in FML::Article

   fml/etc/paths.cf
	./configure  paths.cf 롣

2001/11/17

   FML::Process::HTMLify
   Mail::HTML::Lite
	disable debug code, enable it when $ENV{debug} is defined

   FML::CGI::Configure ThreadTrack.pm
   FML::Process::Switch
   Mail::ThreadTrack
   Mail::ThreadTrack::Print::HTML
	change default target to _top
	use $msg_base_url to show link to article

2001/11/16

   Mail::ThreadTrack
	new()::save $args as _saved_args in $self

   Mail::ThreadTrack::DB
	fix _status but in unpolite way. XXX fix it !

2001/11/13

   CGI ѹ¾

	Problem ץƥࡢ塼顢makefml CGI  (ץȥ)
	٤ư褦ˤ

   FML::Process::CGI::Kernel
	some cgi may need no ml_name

   FML::Process::CGI::Param
	fix address regexp, define $command, modify error return way

   FML::Process::CGI::Kernel
	move get_ml_list() to FML::Process::CGI::Kernel
	from FML::CGI::ThreadTrack

2001/11/12

   use autoconf
	¤롣櫓

		# useradd fml
		# ./configure; make install

	Ȥ󥹥ȡˤʤޤ

   loader
	loader generated from loader.in (autoconf)

   Standalone
	expand ${variable}

   FML::CGI::ThreadTrack
	fix typo, $myname resolved by $curproc->myname()

   FML::Process::Switch
	fix to introduce $config_dir (etc::fml) from main.cf
	default_config -> default_config_cf

   FML::CGI::ThreadTrack
   FML::Process::CGI::Kernel Param.pm
	move "function to get paramlist" to FML::Process::CGI::Param module
	implement safe_pramlist\d+_\S+() via AUTOLOAD()

2001/11/11

   Mail::ThreadTrack::Print::Sort
	change cost evaluation logic (numeric now)

   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML Message.pm
	clean up summary() mode for both text and html modes.
	print() method knows what should it do for text::html mode.

   Mail::ThreadTrack::HeaderRewrite
	defined $rh->{ _articles  }->{ $thread_id }

   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML Text.pm
	dynamic binding accoding to mode::text or html

   Mail::ThreadTrack
	change article_summary_lines to 5 by default

   FML::Process::CGI::Param
	define article_id, method -> action

   FML::Process::CGI::Kernel
	header( -charset => $charset)

   FML::CGI::ThreadTrack
	modified to fit FML::Process::CGI structure.
	enable 'close' operation
	reset button

   FML::Process::CGI::Kernel
	workaround::header( -target  => "ResultsWindow" ) anyway

   FML::Process::CGI::Param
	allow action =~ ::^[-a-z_]+$::

   FML::CGI::ThreadTrack
   Mail::ThreadTrack
   Mail::ThreadTrack::Print
   Mail::ThreadTrack::Print::HTML
	enable "show" and "change_status" to work

   FML::CGI::ThreadTrack
   FML::Process::{Distribute,Switch,ThreadTrack}
   Mail::ThreadTrack
   Mail::ThreadTrack::Print::HTML
	ThreadTrack switches acconding to myname ($0).
	threadview is view only and cannot change status.

2001/11/10

   loader
   FML::Process::Switch
	bug fix::format $reason

   FML::Process::CGI::Kernel
	remove makefml issue.
	modify run() which now executes:
		$curproc->html_start($args);
		$curproc->run_cgi($args);
		$curproc->html_end($args);

2001/11/08

   Mail::Message::Language::Japanese::Subject
	nuke new(), not used

   Mail::ThreadTrack
	restructure hierarchy
	clean up inheritence for further refactoring
	modify method names
	clean up
	nuke some "*cost*" indicator codes
	closed -> close for some cases

   Mail::ThreadTrack::Analyze
	avoid duplicated commit to articles DB { thread_id => [ id1 id2 ... ] }
   Mail::ThreadTrack::Print::Message
	ignore ^= line in message summary

   Mail::Message::Date
	validate $in $shift_m

   Mail::ThreadTrack
	list_up_thread_id()::remove db_*() operation

   Mail::ThreadTrack::Analyze
	speculate date from header's Date:

   loader
	least error infomation by default OR raw $@ if debug

   FML::Process::Switch
	least error infomation by default OR raw $@ if debug

   Mail::ThreadTrack::Print
	bug fix trap pattern of _valid_buf() and
	_delete_subject_tag_like_string()

   FML::Process::CGI
	use FML::Process::CGI::{Kernel,Param}

   FML::Command
	defined() check for $command_args

   FML::Process::Switch
	modify error message

2001/11/07

   FML::Process::Switch ThreadTrack.pm
   Mail::ThreadTrack
   Mail::ThreadTrack::Print

	enable fmlthread options:
	--article_id_max=\d+  to override ::var::spool::ml::$ml::seq
	--reverse             to reverse time order in showing "review"

   Mail::ThreadTrack::DB

	remove not used variables

   FML::Process::Switch ThreadTrack.pm
   Mail::ThreadTrack::Analyze

	fmlthread -f filterlist ...

   Mail::ThreadTrack::DB

	show ... when processing

   Mail::ThreadTrack::Print

	check -f article_file

   FML::Process::Utils

	command_line_argv_find()

   FML::Process::ThreadTrack

	fmlthread review ML RANGE srcdir=::some::where
	XXX srcdir=\S+ overwrites config->{ spool_dir } variable

   Mail::ThreadTrack

	define add_filter() method

   FML::Process::Switch ThreadTrack.pm

	we should use long line options since we support it :)
	o define --spool_dir for fmlthread. for example:
	% fmlthread db_clear fml-help
	% fmlthread --spool_dir=::some::where -f ::tmp::filter db_rebuild fml-help
	% fmlthread --spool_dir=::some::where review fml-help last:100



2001/11/06

   å review Ⱥ⡼ȤǤǤ褦ˤȤä

	fmlthread db_clear fml-help
	fmlthread --spool_dir=/some/where -f /tmp/filter db_rebuild fml-help
	fmlthread --spool_dir=/some/where review fml-help last:100

2001/11/05

   fmlthread review
	review() mode to show summary for articles in each thread

   FML::Process::Utils
	implement command_line_options()

   fmlhtmlify [-I dir] src_dir dst_dir
		new utility for convenience
	Affected Files:
		INSTALL.sh
		fml/bin/fmlhtmlify
		FML::Process::Switch
		FML::Process::HTMLify

2001/11/04

   ץ ticket -> thread

   FML::Process::Switch
	eval FML::Process::Flow::ProcessStart($obj, $args);
	and trap error.
	If error traped and $obj has help() method, run $obj->help().
	also upcall the $@ by croak($@)

   FML::Process::
	save $args at $curproc->{ __parent_args }
	$curproc provides convenient functions FML::Process::Utils has.
	fml_version()
	myname()
	command_line_raw_argv()
	command_line_argv()
	article_id_max()

	my $myname  = $curproc->myname();
	my $argv    = $curproc->command_line_argv();

   FML::Process::ThreadTrack
	enable db_clear, db_mkdb, summary, help

   Mail::ThreadTrack
	implement exist() and close()
	implemente db_clear(), db_mkdb()

2001/11/03

   remove fmlticket, create fmlthread

   FML::Process::  Mail::ThreadTrack ١ؤ
	FML::Process::TicketSystem Ϻ
	FML::Process::ThreadTrack 줿

   Mail::ThreadTrack  CVS 롣
	ϥåɤפ뤿ΥġǤꡢ
	call tracking system γǰΤʤƤȤäƤ褤

   Mail::ThreadTrack
	change new() parameters
	nuke pcb
	$config->{ db_type } = 'AnyDBM_File'; by default
	$self->{ _index_db } = $db_base_dir::"index"
	moved set_status() into this module

   Mail::ThreadTrack::Analyze
	nuke pcb
	bug fix $article_id handling
	Log() to $self->log()
	assign()::clean up function names and arguments
	define {get,set}_thread_id() and modified to use them
	add commentes for FNF style
	clarify assign() and rewrite_header() roles
	define {set,get}_thread_status() and modified to use them
	message-id is <addr-spec> (RFC822), we use this format also in DB.
	correct handling of $config->{ thread_subject_tag_location }
	remove _address_clean_up(), which is not used now.
	remove set_status()

   Mail::ThreadTrack::HeaderRewrite
	prepare_history_info()

   Mail::ThreadTrack::DB
	make index database in db_base_dir not db_dir

   Mail::ThreadTrack::Print
	build-in decode_mime_string()
	tune up alignment in printing
	EUC-ify output
	define STR2EUC() for convenience

2001/10/29

   Mail::Message
	_get_mime_header() checks offset boundary
	return default pair if overrun.

   Mail::HTML::Lite
	nuke $ENV{DEBUG}, check input data more

	rename key:
	prev_thread -> prev_thread_id
	next_thread -> next_thread_id

	count up $self->{ _num_attachment } for child process
	attachment file name $id.$count.html
	parent passes the id to child (processing attachment)

	ignore type if type is ::^multipart::

	check $idp pattern

2001/10/28

   Mail::HTML::Lite
	change method to speculate thread link

	rename functions
	implement _create_temporary_filename()
	reorder $type check

	consider case of text::* with encoded content
	save content to file once and rewrite it by _rewrite_html_file()

	consider encoding style of quoted-printable, 7bit also

	_format_safe_header() and print it in raw mode to enable
	<SPAN> tag use.

	define _sprintf_safe_str() and  __sprintf_safe_str() for convenience

	define _separete_url() to help incomplete regexp of
	HTML::FromText::text2html()

2001/10/27

   Mail::HTML::Lite
	use _PRINT_DEBUG(), define _print_safe_{str,buf}() to be easy for eyes
	_print() -> _print_raw_str()

   Mail::Message
	oops, should be s::::::mi to trap encodinge

   FML::Filter::BodyCheck
   Mail::Message
   Mail::Bounce::DSN
   Mail::HTML::Lite
	change method: data() -> data_in_body_part()

2001/10/22

   FML::Ticket::System (clean up campaign)
	remove obsolete functions:_quote_space(), _dequote_space(), AUTOLOAD()
	remove not used _pcb_[sg]et_id()
	$self->_pcb_set_id($curproc, $id) -> $pcb->set('article', 'id', $id)

   Mail::HTML::Lite
	add (X-ML-Name X-Mail-Count X-Sequence) into @header_field (default
	header to show)

	defined() check before calling Jcode::XXX()

   FML::Command::Admin::htmlify
	accept command line option::srcdir=$srcdir

2001/10/21

   makefml htmlify $ml_name outdir=$out_dir

	ס HTML 륳ޥ
	 Mail::HTML::Lite Ѥ롣
	 fml 4  spool2html бΤȤ褦

   Mail::HTML::Lite
	Ȥ ID ǥå (TABLE)
	make monthly index always
		monthly_index.html
		month.YYYYMM.html

	prepare top level entrance functions:
		htmlify_file() for file
		htmlify_dir()  for directory

	clean up codes, documents

	implement _print_index_{begin,end}() and modified to use them

	sort location of function definition
	rename functin name:
	_print_attachment -> _print_inline_object
	_raw_text_print   -> _text_print_by_raw_mode

	oops, fix untie() operation to be ensured

	check target html is already processed or not

	bug fix _address_clean_up() syntax check

	check already processed or not
	you can know it by $self->is_ignore($id) method.

	move a lot of debug code to "if $debug > 3" in cache_message_info()

2001/10/20

   Mail::HTML::Lite
	᡼ HTML ⥸塼
	mhonarc Τ褦˶ŤäƤϤʤɬ׽ʬʺ¤εǽϻ
	( Lite ʤ)

	cache information in .ht_hml_* in html article directory
	rewrite links using these data among articles needed to rewrite.
	links contains prev::next by ID (article ID) and prev::next by Thread.

	bug fix target lists to update, modified to use the result by
	evaluation_relation()

	clean up debug code
	more debug information

	show <META> and <LINK> information in <HEAD> if could
	new() takes charset as argument
	change _decode_mime_string() to method
	modify ifdef in_chaset_to_code() to be more suitable

	we can make index.html and thread.html

	Mail::HTML::Lite::new() accepts
		{ db_type => "DB_TYPE", attachment => 0::1 }

	change html_begin argument::($wh, { message => $msg });
	we can specify title in <HEAD>
	several minior changes

	bug fix::_address_clean_up() should check return value, which is
	address or not more rigolously.

	bug fix::check parent::child (attachment) process or not

	more and more debug info

   Mail::Message

	bug fix::$InComingMessage should not local scope. modify it to
	SCALAR REF

	bug fix::data_in_body_part() returns whole data not the first
	512 bytes. if $size is specified as argument, return the first
	$size bytes.

	feature::get_data_type_list() returns ARRAY of xxx::yyy by
	default for other method use. If under $debug mdoe, it shows
	verbose output.

2001/10/19

   import HTML::FromText 1.005

   Mail::Bounce
	Mail::Message::get_data_type_list() is changed. To sync with it,
	use $msg->get_data_type_list( { debug => 1 } ) for debug.

2001/10/18

   Tie::JournaledDir
	change default unit to "day" not number (unix time).

2001/10/17

   variables
	add $confirm_keyword to $available_commands_for_stranger
	add $available_commands_for_stranger to $available_commands

   FML::Command
	modified FML::Command uses get_attribute() in FML::Command::Attribute

   FML::Command::Attribute
	renamed FML::Command::ACL -> FML::Command::Attribute.pm

   FML::Command::SendFile
	support MH style arg::first, last, cur, first:\d+ and last:\d+

   FML::Command::User::bye
	fix typo

   File::Sequence
	implemente get_id() method to return the latest article id
	update document

2001/10/15

   ե륿󥰤ͭˤ

     FML::Filter::BodyCheck
     FML::Filter::HeaderCheck.pm
	define @default_rules and use it if rules not specified
	rules() method to overwrite filtering rules

     variables
	define the following variables for filtering (FML::Filter)
		body_cksum_cache_dir
		body_filter_rules
		body_loop_check_rules
		header_filter_rules
		use_body_filter
		use_body_loop_check
		use_header_filter

2001/10/14

   FML::Process::Kernel
	bug fix::we should pay attention to implisit $_ use

   FML::Process::Configure
	sync style w:::Process::Command

   FML::Process::Command
	make argument vector from $command
	relocate _parse_command_options()
	implemt _get_command_name()
	clean up
	fix typo

   FML::Command::Admin::get
	prototype to use FML::Command::SendFile

   FML::Command
   FML::Command::*
   FML::Process::Configure
   FML::Process::Command
	$optargs -> $command_args

2001/10/13

   FML::Process::Command
	pass $comname in $optargs

   FML::Command::SendFile
	fix duplicatoin for $charset

   FML::Config
	avoid infinite loop

   FML::Command::SendFile is added
	This module provides basic file sending functions

   implement command: get help summary guide
	FML::Command::SendFile based command

2001/10/12

   FML::Command
	remove error_nl()

   FML::Command::Admin::resign
	->SUPER::process()

   FML::Command::Admin::subscribe
	clean up log message, LogError() -> croak()

   FML::Command::User::subscribe
	use reply_message_nl()

   FML::Command::User::unsubscribe
	confirm version

   FML::Config
	expand_variable_in_buffer can take optional $args

   FML::Credential
	bug fix variable name

   FML::Process::Kernel
	implement search template mechanism in reply_message_nl()
	$config->expand_variable_in_buffer() takes optional $args

   FML::Process::Command
	use reply_message_nl()
	remove exception mechanism by $obj->error_nl();

   etc/
	define $message_message_dir
	add chaddr to $available_commands

   å
	ƥץ졼Ȥ euc-jp Ȥ

   FML::Config
	expand_variable_in_buffer()
	expand $varname to $config->{ varname }

   FML::Process::Command

	add _pre_scan()
	even not member need to use $confirm_keyword.
	for example, 'guide', 'subscribe', 'confirm'

	add _can_accpet_command()
	1. simple command syntax check
	2. use of this command is allowed in FML::Config or not ?
	3. Even new comer need to use commands [ guide, subscirbe, confirm ].

   enable confirmation
	FML::Confirm module Ѥޤ
	ѿ $available_commands_for_stranger 롣
	FML::Confirm provides basic functions needed for confirmation
	+ FML::Command::User::subscribe
	+ FML::Command::User::confirm
	+ FML::Confirm

   FML::Command::Admin::subscribe
	check address is specified or not

   FML::Command::User::help
	clean up
	expand_variables_in_file() -> prepare_file_to_return()

   FML::Process::Kernel
	define prepare_file_to_return():
	expand $xxx variables in template (e.g. $help_file).
	1. in Japanese case, convert kanji code::iso-2022-jp -> euc
	2. expand variables::$ml_name -> elena
	3. back kanji code::euc -> iso-2022-jp
	4. return the new created template

2001/10/11

   FML::Filter::Utils
	it provides utility functions
		is_secure_command_string()
		is_valid_mail_address()

   FML::Process::Command
	it checks input by FML::Filter::Utils::is_secure_command_string()

2001/10/10

   ޥ
	get mget help ʤɤư褦ˤʤä

   FML::Config
	check defined() more

   FML::Credential
	implement is_same_address() completely.
	is_member() accpepts $args->{ address }
	define set_compare_level(), get_compare_level()

   add variables
	command_prompot	= >>>
	help_file = $message_template_dir/help
	message_template_dir = $fml_share_dir/template/$template_file_charset
	template_file_charset = $default_charset

   Mail::Delivery::SMTP
	old IO::Socket has no connected() method. modified to use our
	own socket_is_connected() method or remove connected() check.

	Mail::Delivery::SMTP
	+ bug fix: ensure we handle IPv6 case more restrictly

	Mail::Delivery::Net::INET6
	+ bug fix: clear error counter
	+ check more defined($socket) or not, socket is connected
	+ more debug log

   FML::Process::Kernel
	define prototype for reply_message_nl() for natural language
	check more defined() or not
	more debug info
	define expand_variables_in_file()
	+ expand $xxx variables in template (e.g. $help_file).

   FML::Process::Command
	bug fix: $obj->$command where $command is a command name not line.
	modified to use reply_meessage_nl()

   FML::Command
	define error_nl(), but a dummy yet now
	+ get natural language information

2001/10/09

   libexec/Standalone.pm
	check $config->{ $x } is defined() or not

   Ticket System
	consider $ticket_subject_tag_location in regexp
	change ticket_id_syntax to "$ml_name/%d" by default
	define ticket_subject_tag_location as "appended"
	change default ticket syntax
		etc/default_config.cf.ja
		etc/defaults/tickets.cf.ja

	FML::Header::Subject
		change regexp_compile().
		quotemeta() firstly, and hack a few

   FML::Process::Command
	catch up the modification in FML::Process::Distribute.
	make command function work with replying request mail.
	disable lock()/unlock() since each command module lock/unlock
	by itself.

   FML::Process::Distribute
	modified finish() to use queue_flush()


2001/10/08

   ᡼ǤΥޥɤαǽˤ(ץȥ)
	add a lot of debug messages

	* Affcted modules:
		FML::Command
		FML::Process::Command
		FML::Process::Distribute
		FML::Process::Kernel
		FML::Process::Switch

	* newly added:
		FML::Command::User::help

	* test tools:
		regress/simulation/test-ctl.sh
		regress/testmails/text=plain.command

   FML::Command
   FML::Process::Kernel
	more debug info

   FML::Process::Distribute
	log ACL error

   FML::Process::Switch
	enable "loader --ctladdr" behaves as libexec/command
	more debug messages
	modify style e.g. eval q## -> eval q{} et. al.

   regress/simulation/test-ctl.sh
	added simple command mode emulator

   regress/simulation/perlcheck
	add -I ../../fml/libexec

   libexec/loader
	die() -> croak()
	define missing default value in initialization
	remove obsolete variable: $libexec_dir
	eval()-fiy more
	fix error message
	show $@ in error
	fix typo

   fix: more severe initialization check
	FML::Credential


2001/09/23

   Mail::Message
	implement get_encoding_mechanism() in Mail::Message.

	implement get_offset(): return offset information in the data.
	return value is	ARRAY.

	return encoding type for specified Mail::Message not whole mail.
	The return value is one of base64, quoted-printable or undef.

	Modified Files:
		fml/lib/Mail/Message.pm
		fml/doc/ja/tutorial/module/Mail::Message.sgml
		regress/message/dump.pl

   塼ȥꥢ
	module  ˴ؤ뿷ѡȤ
	module/ ǥ쥯ȥ
		Mail::Message
		IO::Adapter
	ΥץȥפѰդ롣
	Υǥ쥯ȥǤϳƥ⥸塼ξܺ٤ʻȤˤĤ
	ҤΡ

   FML::Filter
	fml 4.0.x εǽ򤭤ȼ롣
	 륹åϽ
	XXX ǡ͡ĤǤ촹ǽ

	Utils ؿŬʥ⥸塼ذư
	move clean_up_buffer() and compare_euc_string() to
	FML::Filter::BodyCheck and FML::Language::Japanese::Utils
	respectively to remove FML::Filter::Utils.

	MS GUID Ƚ̤롼

2001/09/22

   FML/Config.pm
	if ($ENV{'debug'}) { ... debug ...;}

   TinyScheduler.pm
   FML/Command/Admin/edit.pm
	modified to use File::Spec

2001/09/18

   errormail collection
	add netscape messaging server 3.54 sample
	thanks PR for Toshimi Aoki <toshi@kinotrope.co.jp>

2001/09/17

   IO::Adapter

     * IO::Adapter::{DBI,MySQL,RDBMS}.pm
	rename: $self->{ _driver } -> $self->{ _model_specific_driver }
	dynamically load DBD:mysql

	move replace(), getline() and get_nextvalue() to DBI.pm
	since these functions are MI (Map Independent).

	implement setpos(), getpos() and eof() in MySQL.pm
	since these functions is dependent on map type (MD).

	RDBMS.pm is not used now, so removed.

     * IO/Adapter.pm
	change replace()
	o fix typo: s/regexp/replace/
	o fix case insensitive search when $show_all is on
	o call md_find (md == map dependent, function) if defined
	o enabled to call md_XXX()
		define AUTOLOAD() to hook up md_XXX() functions
		XXX For example, md_XXX() should be implemented at
		XXX IO::Adapter::SQL::toymodel.pm

     * IO/Adapter/SQL/toymodel.pm
	rename: fetch_and_cache_address_list -> fetch_all
	implement md_find()


2001/09/13

   FML::Process::QueueManager
	send() can take queue id as the argument

   FML::Process::Kernel
	more friendly error message

	implement queue_flush($queue): This flush C<$queue>, that is,
	send mail specified by C<$queue>.  It uses
	FML::Process::QueueManager module.

   FML::Config.pm
	define FIRSTKEY and NEXTKEY for complete hash emulation

   FML::Command::Admin	桼ѥޥɷ
		commit prototype
		makefml uses this class

2001/08/26

   FML::Credential
	implement has_address_in_map() method and is_member() uses this.
	has_address_in_map() searches the address in the specified map.

   IO::Adapter 饹
	touch() ᥽åɤɲ
	XXX file װʳǤ̵̣ߡ

   FML::Command:: 饹κƹ

	FML::Command.pm		FML::Command 饹ʲؤ
	FML::Command::ACL	ACL
	FML::Command::Utils	ޤ
	FML::Command::User	桼ѥޥɷ
	FML::Command::Admin	桼ѥޥɷ

		newml edit ʤɤ Admin Τ

2001/08/24

  regress/
	add&enable FML::Config {+,-}= overload test tools

2001/08/23

   FML::Config γĥ
	postfix style Τʤĥ

	ѿ̾ += 
	ѿ̾ -= 
	ǡͤ­Ǥޤ

	:
		x  = a b c d
		x -= b
		
		x = a c d

		x  = a b c d
		x += e
		
		x = a b c d e
		ʤɤȤʤ롣

2001/08/22

   clean up
	File::Spec Ȥ褦ѹ


2001/08/21

   Tie::JournaledDir 饹
   Tie::JournaledFile  clean up

	Tie::JournaledDir 饹ϥåȤƤǥ쥯ȥȤ
	ʣĤΥե֤˻Ȥޤ
	줾Υե Tie::JournaledFile Ȥäƥޤ

	ˤ auto expiration 򤹤 Journaled å¸
	ޤ

	add Tie::JournaledDir which wraps Tie::JournaledFile and uses some
	directory as cache area.

	add/update test tools for Tie::Journaled{File,Dir} modules.

	clean up Tie::JournaledFile
	o remove header in the cache file
	o $self->{ 'key' }
	o $debug is on if $ENV{'debug'} is defined.
	o more carefull check of whether the value is defined or not.
	o quotemeta() for pre search key in find()
	o rename grep() to find()

2001/08/19

  ե륿ɤβ
	ԥ᡼뤫ݤȽꥳɤ򤭤줤ˤ

		Τ signature ѤȽꤹ륳¾
		Utils.pm ⤭줤ˤʤɤä


2001/08/06

  ե륿
	clean up

  fml/lib/
  fml/etc/
	ѿ̾ѹ򤹤롣s/header_check/header_loop_check/
	롼ץåǤ뤳Ȥѿ̾ΤǤϤäꤵ

  IO::Adapter

	IO::Adapter
		set @ISA = qw(IO::Adapter::ErrorStatus) to call error_set()
		check $@ before call configure()
		add more debug codes

	IO::Adapter::MySQL
		ᥤʬ 	IO::Adapter::SQL:: ʲذܤ
		IO::Adapter::MySQL ñʤեȥɤˤ

2001/08/02

   Mail::Message
	bug fix wrong handling of "\n" at the last of part

2001/07/31

   rename FML::NL to FML::Language

   Mail::Bounce class

	ʲΥѥϤǤ褦ˤʤäϤǤ
		Lotus Notes
		pakeo.ne.jp
		jp-r.ne.jp (ۤȤ?)

	Mail::Bounce::Language::Japanese
		ܸ¸ѡ

   Mail::Bounce::DSN

	call again $self->address_clean_up($addr, $addr)
	gives $addr itself as a hint of fixing broken address
	domain part of $addr may match someting e.g. nifty.ne.jp, webtv.ne.jp.

   Mail::Bounce.pm
   Mail::Bounce::FixBrokenAddress.pm

	use Mail::Bounce::FixBrokenAddress to clean up address

	Mail::Bounce::FixBrokenAddress class provides irrgular
	address handlings, so handles domain/MTA specific addresses.
	For example, nifty.ne.jp, webtv.ne.jp, ...

2001/07/30

   Mail::Bounce class

        pick up Reporting-MTA and Received-From-MTA in DSN

	clean up documentation
	add error examples

	modify Mail::Bounce::$module return "hints" to caller
	(Mail::Bounce class).

2001/07/19

   add errormail samples

	freeserve.ne.jp
	webtv.ne.jp

2001/07/15

   ѿ

	pid  _pid ѹ

   FML::Config

	enable read and write configuration file

	Ȥ¸Ĥ postfix ե
	ɤ߽񤭤ǽˤ褦

2001/07/15

   Υեߤ:)

$FML: CHANGES.txt,v 1.107 2002/10/28 15:53:45 fukachan Exp $
