lib/boxafe/encfs.rb in boxafe-0.1.4 vs lib/boxafe/encfs.rb in boxafe-0.1.5

- old
+ new

@@ -6,27 +6,45 @@ def initialize options = {} @options = options end def command - # TODO: use shellwords for binary, test escaping - [ encfs_config, @options[:encfs], Shellwords.escape(@options[:root]), Shellwords.escape(@options[:mount]), extpass, '--', volname ].compact.join ' ' + [ + encfs_config, + Shellwords.escape(@options[:encfs]), + Shellwords.escape(absolute_root_dir), + Shellwords.escape(absolute_mount_dir), + extpass, + '--', + volname + ].compact.join ' ' end private + def absolute_root_dir + # TODO: remove Dir.pwd once fakefs is fixed (multiple occurrences in this file) + File.expand_path @options[:root], Dir.pwd + end + + def absolute_mount_dir + File.expand_path @options[:mount], Dir.pwd + end + def volname %/-ovolname=#{Shellwords.escape @options[:volume]}/ end def extpass - if @options[:keychain] + if @options[:password_file] + %|--extpass="head -n 1 #{Shellwords.escape @options[:password_file]}"| + elsif @options[:keychain] %*--extpass="security 2>&1 >/dev/null find-generic-password -gl '#{@options[:keychain]}' |grep password|cut -d \\\\\\" -f 2"* else nil end end def encfs_config - @options[:encfs_config] ? %/ENCFS6_CONFIG=#{Shellwords.escape File.expand_path(@options[:encfs_config])}/ : nil + @options[:encfs_config] ? %/ENCFS6_CONFIG=#{Shellwords.escape File.expand_path(@options[:encfs_config], Dir.pwd)}/ : nil end end