# HG changeset patch # User HIROSE Yuuji # Date 1386718864 -32400 # Node ID 54d85f7d5676cb78369692f0396764e83ada33e9 # Parent 0ca2c48f83876c1e7d9d9237ccb68659ccd09d76 - The parameter pswdlen surely works - Subject tag `NONE' introduced - New group parameter xmlname controls 'X-ML-Name: ' header - Remove ML spool dir when group destruction diff -r 0ca2c48f8387 -r 54d85f7d5676 after5.rb --- a/after5.rb Tue Mar 05 15:32:24 2013 +0900 +++ b/after5.rb Wed Dec 11 08:41:04 2013 +0900 @@ -4,7 +4,7 @@ # Associative Scheduling Table - after5 # (C)2003, 2004, 2006, 2008, 2012, 2013 by HIROSE Yuuji [yuujigentei.org] # $Id: after5.rb,v 1.20 2012/12/03 15:54:20 yuuji Exp $ -# Last modified Tue Mar 5 15:31:29 2013 on firestorm +# Last modified Wed Dec 11 08:38:14 2013 on firestorm # See http://www.gentei.org/~yuuji/software/after5/ # このスクリプトはEUCで保存してください。 $hgid = <<_HGID_.split[1..-2].join(" ") @@ -259,6 +259,8 @@ end private :newpasswd def setnewpasswd(user, length=8) + length = length.to_i + length = 4 if length < 4 newp = newpasswd(length) setpasswd(user, newp) newp @@ -375,7 +377,7 @@ end } @visitedgroup.pop - members + members.uniq end def mkgroupmap() map = {} @@ -1128,7 +1130,8 @@ ['(GroupID:#)', "(%i:%c)"], ['(GroupID:#####)', "(%i:%5c)"], ['(GroupName:#)', "(%n:%c)"], - ['(GroupName:#####)', "(%n:%5c)"]] + ['(GroupName:#####)', "(%n:%5c)"], + ['NONE', "NONE"]] ##@job = "today" @wnames = %w[sun mon tue wed thu fri sat] @job = "login" @@ -1308,6 +1311,8 @@ "Only administrator of this group(`%s') can add you."], 'limitsender' => ['アカウント保持者のみ送信可能', 'Allow only account holders to post to ML'], + 'xmlname' => ['X-ML-Nameヘッダの値("%s" 以外にしたい場合設定する)', + 'Value of X-ML-Name header ("%s" for default)'], 'personal' => ['個人で', 'personal'], 'registas' => ['グループ予定として登録?', 'Register as group?'], 'headsched' => ['下の枠内に予定を記入: 1行以内で短めに。 @@ -1532,7 +1537,7 @@ if pm.checkpasswd(user, passwd) throw :auth, true elsif passwd == @opt['forgot'] - newp = pm.setnewpasswd(user, @opt['pswdlen']) + newp = pm.setnewpasswd(user, @opt['pswdlen'].to_i) sendMail(email, "#{@mybase} password", "(#{ENV['REMOTE_ADDR']} からのアクセスによる送信)\n" + @opt['url'] + "\n" + @@ -2711,7 +2716,7 @@ when /^(\S+): /i # if new header comes if /^subject:/i =~ hold[0] # check previous header in hold space sj = hold.join.toeuc.sub("Subject: ", "").gsub(tag, "").strip - sj.gsub!(removeregexp, "") + removeregexp and sj.gsub!(removeregexp, "") sj = sj.sub(/^(re: *)+/i, "Re: ").gsub("\n", "") hold = ["Subject: "+NKF.nkf('-jM', tag+" "+sj).strip+"\n"] elsif /^from/i =~ hold[0] && fromhack.is_a?(String) @@ -2781,20 +2786,26 @@ end bracket = @sc.getgroupattr(name, 'subjtag') || @opt['mailbracket'] fromhack = @sc.getgroupattr(name, 'fromhack') + xmlname = @sc.getgroupattr(name, 'xmlname') || name mldir = "ml/"+name to = @sc.getgroupattr(name, 'mladdress') || defaultmladdress(name) returnpath = to.sub("@", @mailadmsuffix+"-@") adminaddr = to.sub("@", @mailadmsuffix+"@") subj = @params['subject'] || "Message from "+@myname - sjtag = bracket.gsub("%n", nickname(name)). - gsub("%i", name). - gsub(/%(\d*)c/){("%0"+$1+"d") % [mlseq(mldir)]} - tagpt = Regexp.quote(bracket). # compute bracket pattern - gsub("%n", Regexp.quote(nickname(name))). - gsub("%i", Regexp.quote(name)). - gsub(/%(\d*)c/, '\d+') - tagre = Regexp.new(tagpt) - subj = sjtag.strip+" "+subj.gsub(Regexp.new(tagpt), "") + if bracket == "NONE" + sjtag = "" + tagre = nil + else + sjtag = bracket.gsub("%n", nickname(name)). + gsub("%i", name). + gsub(/%(\d*)c/){("%0"+$1+"d") % [mlseq(mldir)]} + tagpt = Regexp.quote(bracket). # compute bracket pattern + gsub("%n", Regexp.quote(nickname(name))). + gsub("%i", Regexp.quote(name)). + gsub(/%(\d*)c/, '\d+') + tagre = Regexp.new(tagpt) + subj = sjtag.strip+" "+subj.gsub(Regexp.new(tagpt), "") + end if viamail then body = tagify_subj(STDIN.readlines, sjtag, tagre, fromhack ? to : nil).join @@ -2805,7 +2816,7 @@ "Reply-to" => to, "X-ML-Driver" => ($hgid || @myname), "X-ML-Driver-URI" => $myurl, - "X-ML-Name" => name, + "X-ML-Name" => xmlname, "X-ML-URI" => sprintf("%s?-groupman+%s", @opt['url'], name), "Return-path" => returnpath} Dir.chdir @mydir @@ -3358,6 +3369,11 @@ @opt['size'], 80) } : "") + \ @H.elementln('p') { + sprintf(msg('xmlname'), group) + \ + @H.text("xmlname", @sc.getgroupattr(group, 'xmlname'), + @opt['size'], 80) + } + \ + @H.elementln('p') { n = -1 curtag = @sc.getgroupattr(group, 'subjtag') values = @subjtags.collect {|x| @@ -3434,7 +3450,7 @@ @O.print @H.p("No such group #{group}") return nil end - group = gr + group = safecopy(gr) unless @sc.isadmin(user, group) @O.print @H.p("You are not administrator of #{group}.") return nil @@ -3447,7 +3463,12 @@ @O.print @H.elementln("h1"){ msg('group')+" #{group} "+msg('deletion') } - resmsg = @sc.destroygroup(group) ? msg("done") : msg("failure") + if @sc.destroygroup(group) + system(sprintf("rm -r ml/%s", group)) + resmsg = msg("done") + else + resmsg = Omsg("failure") + end @O.print @H.p(resmsg) putLog("Delete group '#{group}' #{resmsg}\n") @@ -3610,6 +3631,17 @@ } somethingdone = true end + # X-ML-Name: Header value + xmlname = @params['xmlname'] + xmlname = nil if xmlname == "" + curxmlname = @sc.getgroupattr(group, 'xmlname') + if xmlname != curxmlname && /^[-A-Z_a-z\/0-9+@(),.<>]+$/ =~ xmlname + @sc.putgroupattr(group, 'xmlname', xmlname) + @O.print @H.elementln("p") { + putLog(sprintf("X-ML-Name: Set to %s", xmlname)) + } + somethingdone = true + end unless somethingdone # @O.print @H.p(msg('nothingtodo')) end