changeset 83:54d85f7d5676 draft

- 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
author HIROSE Yuuji <yuuji@gentei.org>
date Wed, 11 Dec 2013 08:41:04 +0900
parents 0ca2c48f8387
children f67f5304baac
files after5.rb
diffstat 1 files changed, 49 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- 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 [yuuji<at>gentei.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

yatex.org