1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#! /usr/bin/ruby
require 'optparse'
require 'rubygems'
require 'ole/storage'
def oletool
opts = {:verbose => false, :action => :tree}
op = OptionParser.new do |op|
op.banner = "Usage: oletool [options] [files]"
op.separator ''
op.on('-t', '--tree', 'Dump ole trees for files (default)') { opts[:action] = :tree }
op.on('-r', '--repack', 'Repack the ole files in canonical form') { opts[:action] = :repack }
op.on('-m', '--mimetype', 'Print the guessed mime types') { opts[:action] = :mimetype }
op.on('-y', '--metadata', 'Dump the internal meta data as YAML') { opts[:action] = :metadata }
op.separator ''
op.on('-v', '--[no-]verbose', 'Run verbosely') { |v| opts[:verbose] = v }
op.on_tail('-h', '--help', 'Show this message') { puts op; exit }
end
files = op.parse ARGV
if files.empty?
puts 'Must specify 1 or more msg files.'
puts op
exit 1
end
Ole::Log.level = opts[:verbose] ? Logger::WARN : Logger::FATAL
files.each do |file|
case opts[:action]
when :tree
Ole::Storage.open(file) { |ole| puts ole.root.to_tree }
when :repack
Ole::Storage.open file, 'rb+', &:repack
when :metadata
Ole::Storage.open(file) { |ole| y ole.meta_data.to_h }
when :mimetype
puts Ole::Storage.open(file) { |ole| ole.meta_data.mime_type }
end
end
end
oletool
|