#!/usr/bin/perl
#
# Morikawa Yasuhiro	2002.04.28
#
# Kyoma TAKAHASHI	1999.7.9
#			1999.10.02
# Thanks for Toyoda's help.

#
# imappwdbg - imap 用パスワードファイル生成スクリプト
#
# ・ 概要
#
#    一般ユーザの ~/Maildir/.password に記述されるパスワードを
#    /etc/cram-md5.pwd ファイルに列挙する.
#

    # 利用するコマンド
$chmodbin = '/bin/chmod';
$usershow = '/usr/local/bin/gate-user-show';

    # 利用するファイル
$imappwdb = '/etc/cram-md5.pwd';
$userpwfile = 'Maildir/.password';


    # cram-md5.pwd に書き込みできるように
    # パーミッションを変更
system "$chmodbin 600 $imappwdb";

open(DBFILE,"> $imappwdb");

    # cram-md5.pwd の始めにコメントを書き出す.
print DBFILE '# CRAM-MD5 authentication database',"\n";
print DBFILE '# Entries are in form <user><tab><password>',"\n";
print DBFILE '# Lines starting with "#" are comments',"\n";
print DBFILE "\n";

while (($user,$passwd,$uid,$gid,$quota,$comm,$gcos,$dir) = getpwent) {
    #
    # 一般ユーザの .password のみ参照する
    # 
    if ( $uid >= 1000 && $uid <= 29999 ) {
	open(PWFILE,"< $dir/$userpwfile");
	$pass = '';
	$pass = $_ while(<PWFILE>);
	chop($pass);
	close(PWFILE);
	if($pass ne '') {
	    #
	    # gate-user-show を利用して, 個人ユーザか
	    # グループユーザか判別する
	    #
	    unless (-x $usershow) {
		die "imappwdbg require $usershow\.\n"
		    ."Please install gate-toroku-system\.\n";
	    }
	    open (GATEUS,"$usershow $user |");
	    while (<GATEUS>) { 
		if (/type/) { ($typeq) = /type: (.*)/; } 
	    }
	    close (GATEUS);
	    #
	    # グループユーザの場合は無視
	    #
	    if ( $typeq eq 'person' ) {
		print DBFILE $user;
		print DBFILE "\t";
		print DBFILE $pass;
		print DBFILE "\n";
	    }
	}
    }
}

close(DBFILE);

    # cram-md5.pwd を書き込み不可にしておく
system "$chmodbin 400 $imappwdb";
