sfpagent 0.4.14 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92378212d9d54d84e43fb733aae5cc827dde5a70
4
- data.tar.gz: 2dcb686aeef8f2560972305f3117f2af9a7db486
3
+ metadata.gz: fe5120a666d50dfc4b5e1e27aa69c844a869d6b1
4
+ data.tar.gz: 931daacdf7163d66f11a790f2b980785263a7a2f
5
5
  SHA512:
6
- metadata.gz: 6581a22dea149f20bc3cd273559a43f0177321843cfc97ebaef3818ef142f11dc649ef7a8329316413a98c7d159bce7319ab5114097d2fe98f04f3fe77e61637
7
- data.tar.gz: c885f49400902ca291253f1a10e0b1d7773a965195b67ed39387658aa683f2a22260ff48be93b2f5183559e5acf38899ed99afd19cca29d31c64422ac7bdbef1
6
+ metadata.gz: b1093d7a3097c88a038ad3dad0f11301e5080dd495246199bdd479a4f0c044fabf80db13de8ab244822e65dcc74930978cd2a072f093789f6b3daabbace5ff1d
7
+ data.tar.gz: 23b3509b55f952fbcc08db3cd7ee33fa5d3783ccf7ac08483553e0b3af948345ee443aff4e62f195d64ac32b8e6d200bbaec6b4befe733cbbfdcd6227ae9d4eb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.14
1
+ 0.4.15
@@ -8,6 +8,7 @@ require 'net/http'
8
8
  require 'logger'
9
9
  require 'json'
10
10
  require 'digest/md5'
11
+ require 'shellwords'
11
12
 
12
13
  module Sfp
13
14
  module Agent
@@ -513,8 +514,8 @@ module Sfp
513
514
 
514
515
  def self.uninstall_module(name)
515
516
  return false if @@config[:modules_dir] == ''
516
-
517
- module_dir = "#{@@config[:modules_dir]}/#{name}"
517
+ module_dir = Shellwords.escape(File.expand_path("#{@@config[:modules_dir]}/#{name}"))
518
+ return false if not subpath(module_dir, @@config[:modules_dir])
518
519
  if File.directory?(module_dir)
519
520
  result = !!system("rm -rf #{module_dir}")
520
521
  else
@@ -542,8 +543,9 @@ module Sfp
542
543
  end
543
544
 
544
545
  # delete old files
545
- module_dir = "#{@@config[:modules_dir]}/#{name}"
546
- system("rm -rf #{module_dir}") if File.exist? module_dir
546
+ module_dir = Shellwords.escape("#{@@config[:modules_dir]}/#{name}")
547
+ return false if not subpath(module_dir, @@config[:modules_dir])
548
+ system("rm -rf #{module_dir}") if File.exist?(module_dir)
547
549
 
548
550
  # save the archive
549
551
  Dir.mkdir("#{module_dir}", 0700)
@@ -553,10 +555,14 @@ module Sfp
553
555
  system("cd #{module_dir}; tar xvf data.tgz")
554
556
  Dir.entries(module_dir).each { |name|
555
557
  next if name == '.' or name == '..'
556
- if File.directory? "#{module_dir}/#{name}"
557
- system("cd #{module_dir}/#{name}; mv * ..; mv .* .. 2>/dev/null; cd ..; rm -rf #{name}")
558
+ name = Shellwords.escape(name)
559
+ target = "#{module_dir}/#{name}"
560
+ return false if not subpath(target, @@config[:modules_dir])
561
+ if File.directory? target
562
+ system("cd #{target} && mv * .. && mv .* .. 2>/dev/null ; cd .. && rm -rf #{name}")
558
563
  end
559
- system("cd #{module_dir}; rm data.tgz")
564
+ datafile = "#{module_dir}/data.tgz"
565
+ File.delete(datafile) if File.exist?(datafile)
560
566
  }
561
567
 
562
568
  load_modules(@@config) if reload
@@ -661,7 +667,7 @@ module Sfp
661
667
  f.truncate(f.pos)
662
668
  end
663
669
  rescue Exception => e
664
- Sfp::Agent.logger.error e.to_s
670
+ Sfp::Agent.warn 'cannot update /etc/hosts'
665
671
  end
666
672
  end
667
673
 
@@ -677,6 +683,15 @@ module Sfp
677
683
  @@agents_database = JSON[File.read(AgentsDataFile)]
678
684
  end
679
685
 
686
+ # return true if path1 is subpath of path2, otherwise false
687
+ def self.subpath(path1, path2)
688
+ path1 = File.expand_path(path1)
689
+ path2 = File.expand_path(path2)
690
+ (path1[0,path2.length] == path2)
691
+ end
692
+
693
+
694
+
680
695
  class Maintenance
681
696
  IntervalTime = 600 # 10 minutes
682
697
 
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'shellwords'
4
+
3
5
  class Planner
4
6
  def initialize(p={})
5
7
  # TODO
@@ -63,7 +65,7 @@ class Planner
63
65
  f.write(dot)
64
66
  f.flush
65
67
  }
66
- !!system("dot -Tpng -o #{image_file} #{dot_file}")
68
+ !!system("dot -Tpng -o #{Shellwords.escape(image_file)} #{Shellwords.escape(dot_file)}")
67
69
  ensure
68
70
  File.delete(dot_file) if File.exist?(dot_file)
69
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfpagent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.14
4
+ version: 0.4.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Herry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-29 00:00:00.000000000 Z
11
+ date: 2014-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sfp
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  version: '0'
102
102
  requirements: []
103
103
  rubyforge_project: sfpagent
104
- rubygems_version: 2.0.14
104
+ rubygems_version: 2.1.10
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: SFP Agent