sfpagent 0.4.14 → 0.4.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/sfpagent/agent.rb +23 -8
- data/lib/sfpagent/sfplanner.rb +3 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe5120a666d50dfc4b5e1e27aa69c844a869d6b1
|
4
|
+
data.tar.gz: 931daacdf7163d66f11a790f2b980785263a7a2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1093d7a3097c88a038ad3dad0f11301e5080dd495246199bdd479a4f0c044fabf80db13de8ab244822e65dcc74930978cd2a072f093789f6b3daabbace5ff1d
|
7
|
+
data.tar.gz: 23b3509b55f952fbcc08db3cd7ee33fa5d3783ccf7ac08483553e0b3af948345ee443aff4e62f195d64ac32b8e6d200bbaec6b4befe733cbbfdcd6227ae9d4eb
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.15
|
data/lib/sfpagent/agent.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
-
|
557
|
-
|
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
|
-
|
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.
|
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
|
|
data/lib/sfpagent/sfplanner.rb
CHANGED
@@ -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.
|
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-
|
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.
|
104
|
+
rubygems_version: 2.1.10
|
105
105
|
signing_key:
|
106
106
|
specification_version: 4
|
107
107
|
summary: SFP Agent
|