lost hopelijk ook weer een annoyance op
This commit is contained in:
parent
0846e910ac
commit
894f0304d8
1 changed files with 82 additions and 0 deletions
82
multimime-pgp/multimime-pgp.rb
Executable file
82
multimime-pgp/multimime-pgp.rb
Executable file
|
|
@ -0,0 +1,82 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
# $Id$
|
||||||
|
# $URL$
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 Ward Wouts <ward@wouts.nl>
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
# copyright notice and this permission notice appear in all copies.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
#
|
||||||
|
|
||||||
|
message = Array.new
|
||||||
|
boundary = nil
|
||||||
|
boundaries = Array.new
|
||||||
|
pgpstart = nil
|
||||||
|
pgpend = nil
|
||||||
|
pgpblocks = Array.new
|
||||||
|
|
||||||
|
$stdin.each{|line|
|
||||||
|
message.push line
|
||||||
|
}
|
||||||
|
|
||||||
|
# Eerst uitzoeken wat de mime boundaries zijn
|
||||||
|
message.each{|line|
|
||||||
|
if line.match("Content-Type: multipart/mixed") && line.match(/boundary=\"(.*)\"/)
|
||||||
|
if !boundary.nil?
|
||||||
|
raise "More than one MIME boundary detected"
|
||||||
|
else
|
||||||
|
boundary=$1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
message.each_index{|x|
|
||||||
|
if message[x].match(/^--#{Regexp.escape(boundary)}/)
|
||||||
|
boundaries.push x
|
||||||
|
end
|
||||||
|
if message[x].match(/^-----BEGIN PGP MESSAGE-----$/)
|
||||||
|
if !pgpstart.nil?
|
||||||
|
raise "Multiple PGP starts found in a row"
|
||||||
|
end
|
||||||
|
pgpstart = x
|
||||||
|
end
|
||||||
|
if message[x].match(/^-----END PGP MESSAGE-----$/)
|
||||||
|
if pgpstart.nil?
|
||||||
|
raise "PGP end, but no start found"
|
||||||
|
end
|
||||||
|
pgpblocks.push pgpstart
|
||||||
|
pgpstart = nil
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
# magic om uit te rekenen in welke blokken het Content-Type gefixed moet worden
|
||||||
|
# er vanuit gaande dat dat steeds tussen een mime-boundry en een pgp start moet
|
||||||
|
pgpblocks.reverse_each{|p|
|
||||||
|
boundaries.reverse_each{|b|
|
||||||
|
if b > p
|
||||||
|
next
|
||||||
|
else
|
||||||
|
(b...p).each{|x|
|
||||||
|
if message[x].match(/^Content-Type: .*/)
|
||||||
|
message[x] = "Content-Type: application/pgp; format=text; x-action=encrypt"
|
||||||
|
end
|
||||||
|
}
|
||||||
|
break
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message.each{|line|
|
||||||
|
puts line
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue