# HG changeset patch # User HIROSE Yuuji # Date 1340852194 -32400 # Node ID bdb7e40c2d4ff434cf5dd5fb5d9f1875bf2d2782 # Parent db1502243712482185de80054b6d03085b7de8a4 `limitsender' option to prohibit anonymous user to send to ML diff -r db1502243712 -r bdb7e40c2d4f after5.rb --- a/after5.rb Thu Jun 28 09:43:29 2012 +0900 +++ b/after5.rb Thu Jun 28 11:56:34 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 Thu Jun 28 09:42:37 2012 on firestorm +# Last modified Thu Jun 28 11:51:17 2012 on firestorm # See http://www.gentei.org/~yuuji/software/after5/ # このスクリプトはEUCで保存してください。 $hgid = <<_HGID_.split[1..-2].join(" ") @@ -301,6 +301,13 @@ } map end + def ismembersemail(email) + @usermap.keys.each {|u| + return u if u==email + return u if mailaddress(u).split(/,\s*|\s+/).grep(email)[0] + } + nil + end def putuserattr(user, attr, text) # if text==nil, remove it d = File.join(@usermapdir, user) @@ -1299,6 +1306,8 @@ 'Only administrators can add new members.'], 'invite-error' => ['%s への加入はグループ管理者のみが操作できます。', "Only administrator of this group(`%s') can add you."], + 'limitsender' => ['アカウント保持者のみ送信可能', + 'Allow only account holders to post to ML'], 'personal' => ['個人で', 'personal'], 'registas' => ['グループ予定として登録?', 'Register as group?'], 'headsched' => ['下の枠内に予定を記入: 1行以内で短めに。 @@ -2774,6 +2783,7 @@ 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). @@ -2803,9 +2813,25 @@ else [name] end.collect {|u| mailaddress(u, name).split(/,\s*|\s+/)}.flatten + ENV["QMAILINJECT"] = "r" # for ML mode, use verp + # + # On mail mode, check if sender can send message to list. + if viamail && @sc.getgroupattr(name, 'limitsender') + s = ENV['SENDER'] + if !catch(:senderok) { + throw :senderok, true if rcpts.grep(s)[0] + throw :senderok, true if @sc.ismembersemail(s) + } + # sender is not allowed to send to ML + sendMail(s, "You are not allowed to send to this ML", + ("Before posting to this list(%s),\n"+ + "subscribe to %s") % [to, @opt['url']], + adminaddr, nil, {"Return-path" => returnpath}) + exit 0 + end + end # p rcpts # p to - ENV["QMAILINJECT"] = "r" # for ML mode, use verp sendMail(to, subj, body, from, rcpts, header, ENV['SENDER'], @@ -3321,7 +3347,7 @@ }.join } } + \ - ["fromhack", "inviteonly"].collect do |param| + ["fromhack", "inviteonly", "limitsender"].collect do |param| @H.checkbox(param, "yes", msg(param), @sc.getgroupattr(group, param)) + "
\n" end.join + \ @@ -3542,7 +3568,7 @@ end # groups # Change parameter(s) # To be more generic... - ["fromhack", "inviteonly"].each {|param| + ["fromhack", "inviteonly", "limitsender"].each {|param| parsetp = (@params[param] && /^yes/i =~ @params[param]) cursetp = (@sc.getgroupattr(group, param)!=nil) if cursetp ^ parsetp