# HG changeset patch # User HIROSE Yuuji # Date 1336403092 -32400 # Node ID 07ef43ac4f15d254c592f237e2bf95ad077675fe # Parent c4e517ccfd998cf631eb728e59a26c66f4a4a12b Some ruby-1.9 workarounds and enhancement to logging and messaging. diff -r c4e517ccfd99 -r 07ef43ac4f15 after5.rb --- a/after5.rb Mon May 07 01:19:32 2012 +0900 +++ b/after5.rb Tue May 08 00:04:52 2012 +0900 @@ -4,7 +4,7 @@ # Associative Scheduling Table - after5 # (C)2003, 2004, 2006, 2008, 2012 by HIROSE Yuuji [yuujigentei.org] # $Id: after5.rb,v 1.19 2012/04/01 11:52:25 yuuji Exp yuuji $ -# Last modified Mon May 7 01:18:59 2012 on firestorm +# Last modified Mon May 7 23:58:40 2012 on firestorm # See http://www.gentei.org/~yuuji/software/after5/ # このスクリプトはEUCで保存してください。 $hgid = <<_HGID_.split[1..-2].join(" ") @@ -255,7 +255,7 @@ }.join('') end def users() - @pdb.keys + @pdb.keys.collect{|u| u.toeuc} # toeuc is for 1.9 :( end private :newpasswd def setnewpasswd(user, length=8) @@ -513,7 +513,7 @@ p.untaint system "/bin/rm -rf \"#{p}\"" end - cleanup_files(list[0]) + cleanup_files(list) end end def account_exists(instance) @@ -614,6 +614,7 @@ # those paths which contains `../' # for the sake of security reason return false if %r,\.\./|^/, =~ path + path = path.untaint p = 0 i=0 while p=path.index("/", p) @@ -1233,6 +1234,19 @@ 'newgroup' => ['新規グループ作成', 'Create new group'], 'adminop' => ['管理
操作', "Administrative
operation"], 'sendall' => ['一斉送信', "write to members"], + 'sendall_err' => ["%s ファイルで mailprefix と maildomain を定義しとかないと送れまへん。 +例: mailprefix=yuuji-after5 + maildomain=gentei.org + +さらに、.qmail-$mailprefix-default も以下のように用意しておこね。 +| ./#{@myname} -list", +"You should define `mailprefix' and `maildomain' in %s file before +sending message to all. +(ex.) mailprefix=yuuji-after5 + maildomain=gentei.org + +And then prepare .qmail-$mailprefix-default file as below. +| ./#{@myname} -list"], 'sendall_head' => ['「%s」宛のメイル送信', "Send message to `%s'"], 'sendall_note' => ['メンバーへの連絡だけでなく、グループ非加入者がこれから加入する旨の通知などにも有用。', "Send this message to all of group."], @@ -1501,6 +1515,7 @@ open(@opt["logfile"], "a+") {|lp| lp.print Time.now.to_s + " " + msg } + msg end def sendnotify(whom, subj, body) @@ -1555,7 +1570,7 @@ end exit 0; end - putLog("Sent '#{subject}' to #{to}\n") + putLog("Sent '#{subject.toeuc}' to #{to}\n") return true rescue putLog("FAILED! - Sent '#{subject}' to #{to}\n") @@ -2515,6 +2530,7 @@ end # ML functions def tagify_subj(body, tag) + # This method should be generic for other headers than `Subject'? hold = [] ret = [] skip = false @@ -2533,8 +2549,8 @@ else if skip then sj = hold.join.toeuc.sub("Subject: ", "").gsub(tag, "").strip - sj = sj.sub(/^(re: *)+/i, "Re: ").gsub("\n", "").squeeze - ret << "Subject: "+NKF.nkf('-jM', tag+" "+sj)+"\n" + sj = sj.sub(/^(re: *)+/i, "Re: ").gsub("\n", "") + ret << "Subject: "+NKF.nkf('-jM', tag+" "+sj).strip+"\n" else ret += hold end @@ -2551,10 +2567,13 @@ viamail = ENV['LOCAL'] && ENV['DEFAULT'] # called via mail from = nil unless @opt['mailprefix'] && @opt['maildomain'] - STDERR.printf("Set mailprefix and maildomain in %s\n", @opt['conf']) - STDERR.print "(ex.) mailprefix=yuuji-after5\n" - STDERR.print " maildomain=gentei.org\n" - exit 0 + if viamail + STDERR.print msg('sendall_err') % [@opt['conf']] + exit 0 + else + @O.print @H.elementln("pre"){msg('sendall_err') % [@opt['conf']]} + return true + end end if viamail then prohibitviahttp() @@ -2605,6 +2624,11 @@ def listdraft(name) return nil unless checkauth return nil unless name + unless @opt['mailprefix'] && @opt['maildomain'] + @O.print @H.elementln("pre"){msg('sendall_err') % [@opt['conf']]} + return true + end + user=@params['user'] nickname = @sc.nickname(user) @O.print @H.elementln("h1") { @@ -3101,7 +3125,9 @@ @O.print @H.elementln("h1"){ msg('group')+" #{group} "+msg('deletion') } - @O.print @H.p(@sc.destroygroup(group) ? msg("done") : msg("failure")) + resmsg = @sc.destroygroup(group) ? msg("done") : msg("failure") + @O.print @H.p(resmsg) + putLog("Delete group '#{group}' #{resmsg}\n") @O.print footer() end @@ -3139,7 +3165,9 @@ @O.print @H.elementln("h1"){ msg('user')+" #{user} "+msg('deletion') } - @O.print @H.p(deleteuser(user) ? msg("done") : msg("failure")) + resmsg = deleteuser(user) ? msg("done") : msg("failure") + @O.print @H.p(resmsg) + putLog("Delete user '#{user}' #{resmsg}\n") @O.print @H.p(@H.a(@myname, msg('login'))) end @@ -3188,9 +3216,9 @@ somethingdone = true @sc.addgroup(group, [u], !joinp, kind[0]) @O.print @H.elementln("p"){ - sprintf "%s [%s](%s) %s %s", msg('user'), u, - msg(kind[1]), - joinp ? msg('addedtogroup'): msg('removedfromgp'), group + putLog(sprintf "%s [%s](%s) %s %s", msg('user'), u, + msg(kind[1]), + joinp ? msg('addedtogroup'): msg('removedfromgp'), group) } end end @@ -3208,9 +3236,12 @@ somethingdone = true @sc.addgroup(group, [g], !joinp) @O.print @H.elementln("p"){ - sprintf "%s [%s] %s %s", msg('group'), g, - joinp ? msg('addedtogroup'): msg('removedfromgp'), group - } + putLog(sprintf("%s [%s] %s %s", + msg('group'), g, + joinp ? + msg('addedtogroup') + : msg('removedfromgp'), group)) + } end end end # groups @@ -3221,9 +3252,7 @@ link2home end def newgroupsub() - if !checkauth - nil - end + return nil unless checkauth user = @params['user'] newgroup = @params['group'] newgname = @params['gname'] @@ -3238,7 +3267,8 @@ @O.print groupnamesString() return nil end - @sc.creategroup(newgroup, newgname, [user]) + @sc.creategroup(newgroup, newgname, [user]) && + putLog("New group '#{newgroup}'(#{newgname}) created\n") admgroup(newgroup) end @@ -3553,7 +3583,7 @@ @job = 'list' # + exit when "-newgroup" @job = 'newgroup' - when /^-(admgroup|listdraft)/ + when /^-(admgroup|listdraft)$/ ARGV.shift gr = safecopy(grepgroup(ARGV[0])) ##gr.untaint @@ -3568,7 +3598,7 @@ @job = 'delusersub "'+usr+'"' when "-delgroupsub" ARGV.shift - gr = grepgroup(ARGV[0]) + gr = safecopy(grepgroup(ARGV[0])) @job = 'delgroupsub "'+gr+'"' when /-(setpasswd|deluser|adduser)$/ ARGV.shift