junos-config 0.2.0 → 0.3.0
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.
- data/.gitignore +42 -0
 - data/Gemfile.lock +3 -3
 - data/VERSION +1 -1
 - data/junos-config.gemspec +7 -25
 - data/lib/junos-config.rb +4 -0
 - data/lib/junos-config/application.rb +63 -0
 - data/lib/junos-config/config.rb +40 -1
 - data/lib/junos-config/security/address.rb +18 -0
 - data/lib/junos-config/security/addressbook.rb +40 -0
 - data/lib/junos-config/security/addressset.rb +25 -0
 - data/lib/junos-config/security/policy.rb +20 -1
 - data/lib/junos-config/security/zone.rb +6 -2
 - metadata +25 -21
 
    
        data/.gitignore
    ADDED
    
    | 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # rcov generated
         
     | 
| 
      
 2 
     | 
    
         
            +
            coverage
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # rdoc generated
         
     | 
| 
      
 5 
     | 
    
         
            +
            rdoc
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # yard generated
         
     | 
| 
      
 8 
     | 
    
         
            +
            doc
         
     | 
| 
      
 9 
     | 
    
         
            +
            .yardoc
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            # bundler
         
     | 
| 
      
 12 
     | 
    
         
            +
            .bundle
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            # jeweler generated
         
     | 
| 
      
 15 
     | 
    
         
            +
            pkg
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore: 
         
     | 
| 
      
 18 
     | 
    
         
            +
            #
         
     | 
| 
      
 19 
     | 
    
         
            +
            # * Create a file at ~/.gitignore
         
     | 
| 
      
 20 
     | 
    
         
            +
            # * Include files you want ignored
         
     | 
| 
      
 21 
     | 
    
         
            +
            # * Run: git config --global core.excludesfile ~/.gitignore
         
     | 
| 
      
 22 
     | 
    
         
            +
            #
         
     | 
| 
      
 23 
     | 
    
         
            +
            # After doing this, these files will be ignored in all your git projects,
         
     | 
| 
      
 24 
     | 
    
         
            +
            # saving you from having to 'pollute' every project you touch with them
         
     | 
| 
      
 25 
     | 
    
         
            +
            #
         
     | 
| 
      
 26 
     | 
    
         
            +
            # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
         
     | 
| 
      
 27 
     | 
    
         
            +
            #
         
     | 
| 
      
 28 
     | 
    
         
            +
            # For MacOS:
         
     | 
| 
      
 29 
     | 
    
         
            +
            #
         
     | 
| 
      
 30 
     | 
    
         
            +
            #.DS_Store
         
     | 
| 
      
 31 
     | 
    
         
            +
            #
         
     | 
| 
      
 32 
     | 
    
         
            +
            # For TextMate
         
     | 
| 
      
 33 
     | 
    
         
            +
            #*.tmproj
         
     | 
| 
      
 34 
     | 
    
         
            +
            #tmtags
         
     | 
| 
      
 35 
     | 
    
         
            +
            #
         
     | 
| 
      
 36 
     | 
    
         
            +
            # For emacs:
         
     | 
| 
      
 37 
     | 
    
         
            +
            #*~
         
     | 
| 
      
 38 
     | 
    
         
            +
            #\#*
         
     | 
| 
      
 39 
     | 
    
         
            +
            #.\#*
         
     | 
| 
      
 40 
     | 
    
         
            +
            #
         
     | 
| 
      
 41 
     | 
    
         
            +
            # For vim:
         
     | 
| 
      
 42 
     | 
    
         
            +
            #*.swp
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            GEM
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: http://rubygems.org/
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                diff-lcs (1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
                diff-lcs (1.1.3)
         
     | 
| 
       5 
5 
     | 
    
         
             
                git (1.2.5)
         
     | 
| 
       6 
6 
     | 
    
         
             
                jeweler (1.5.2)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  bundler (~> 1.0.0)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  git (>= 1.2.5)
         
     | 
| 
       9 
9 
     | 
    
         
             
                  rake
         
     | 
| 
       10 
     | 
    
         
            -
                rake (0. 
     | 
| 
       11 
     | 
    
         
            -
                rcov (0. 
     | 
| 
      
 10 
     | 
    
         
            +
                rake (0.9.2.2)
         
     | 
| 
      
 11 
     | 
    
         
            +
                rcov (1.0.0)
         
     | 
| 
       12 
12 
     | 
    
         
             
                rspec (2.3.0)
         
     | 
| 
       13 
13 
     | 
    
         
             
                  rspec-core (~> 2.3.0)
         
     | 
| 
       14 
14 
     | 
    
         
             
                  rspec-expectations (~> 2.3.0)
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.3.0
         
     | 
    
        data/junos-config.gemspec
    CHANGED
    
    | 
         @@ -5,40 +5,22 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{junos-config}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.3.0"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
     | 
    
         
            -
              s.authors = ["John Wulff"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{ 
     | 
| 
      
 11 
     | 
    
         
            +
              s.authors = ["John Wulff", "Aki Immonen"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2012-02-14}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = %q{Parser for Junos (Juniper network gear OS) config files.}
         
     | 
| 
       14 
     | 
    
         
            -
              s.email = %q{johnw@orcasnet.com}
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.email = %q{johnw@orcasnet.com aki@axasoft.fi}
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
       16 
16 
     | 
    
         
             
                "LICENSE.txt",
         
     | 
| 
       17 
17 
     | 
    
         
             
                "README.rdoc"
         
     | 
| 
       18 
18 
     | 
    
         
             
              ]
         
     | 
| 
       19 
     | 
    
         
            -
              s.files =  
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                ".rspec",
         
     | 
| 
       22 
     | 
    
         
            -
                "Gemfile",
         
     | 
| 
       23 
     | 
    
         
            -
                "Gemfile.lock",
         
     | 
| 
       24 
     | 
    
         
            -
                "LICENSE.txt",
         
     | 
| 
       25 
     | 
    
         
            -
                "README.rdoc",
         
     | 
| 
       26 
     | 
    
         
            -
                "Rakefile",
         
     | 
| 
       27 
     | 
    
         
            -
                "VERSION",
         
     | 
| 
       28 
     | 
    
         
            -
                "junos-config.gemspec",
         
     | 
| 
       29 
     | 
    
         
            -
                "lib/junos-config.rb",
         
     | 
| 
       30 
     | 
    
         
            -
                "lib/junos-config/config.rb",
         
     | 
| 
       31 
     | 
    
         
            -
                "lib/junos-config/interface.rb",
         
     | 
| 
       32 
     | 
    
         
            -
                "lib/junos-config/security/policy.rb",
         
     | 
| 
       33 
     | 
    
         
            -
                "lib/junos-config/security/zone.rb",
         
     | 
| 
       34 
     | 
    
         
            -
                "spec/junos-config_spec.rb",
         
     | 
| 
       35 
     | 
    
         
            -
                "spec/sample_configs/sample_1",
         
     | 
| 
       36 
     | 
    
         
            -
                "spec/spec_helper.rb"
         
     | 
| 
       37 
     | 
    
         
            -
              ]
         
     | 
| 
       38 
     | 
    
         
            -
              s.homepage = %q{http://github.com/jwulff/junos-config}
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.files = `git ls-files`.split
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.homepage = %q{http://github.com/axasoft/junos-config}
         
     | 
| 
       39 
21 
     | 
    
         
             
              s.licenses = ["MIT"]
         
     | 
| 
       40 
22 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       41 
     | 
    
         
            -
              s.rubygems_version = %q{1. 
     | 
| 
      
 23 
     | 
    
         
            +
              s.rubygems_version = %q{1.8.16}
         
     | 
| 
       42 
24 
     | 
    
         
             
              s.summary = %q{Parser for Junos config files.}
         
     | 
| 
       43 
25 
     | 
    
         
             
              s.test_files = [
         
     | 
| 
       44 
26 
     | 
    
         
             
                "spec/junos-config_spec.rb",
         
     | 
    
        data/lib/junos-config.rb
    CHANGED
    
    | 
         @@ -1,4 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'junos-config/security/policy'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'junos-config/security/zone'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'junos-config/security/addressbook'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'junos-config/security/addressset'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'junos-config/security/address'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'junos-config/application'
         
     | 
| 
       3 
7 
     | 
    
         
             
            require 'junos-config/interface'
         
     | 
| 
       4 
8 
     | 
    
         
             
            require 'junos-config/config'
         
     | 
| 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module JunosConfig
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Application
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_accessor :raw,
         
     | 
| 
      
 4 
     | 
    
         
            +
                              :config,
         
     | 
| 
      
 5 
     | 
    
         
            +
                              :name
         
     | 
| 
      
 6 
     | 
    
         
            +
                
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(config, raw)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @raw    = raw
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @name   = raw.match(/^\ {4}application (\S+)\ \{$/)[1]
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
                
         
     | 
| 
      
 13 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @name
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
                
         
     | 
| 
      
 17 
     | 
    
         
            +
                def list_of_objects
         
     | 
| 
      
 18 
     | 
    
         
            +
                  [self]
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
                
         
     | 
| 
      
 21 
     | 
    
         
            +
                def details
         
     | 
| 
      
 22 
     | 
    
         
            +
                  "#{name}: #{raw}"
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              class ApplicationSet
         
     | 
| 
      
 28 
     | 
    
         
            +
                attr_accessor :raw,
         
     | 
| 
      
 29 
     | 
    
         
            +
                              :config,
         
     | 
| 
      
 30 
     | 
    
         
            +
                              :name,
         
     | 
| 
      
 31 
     | 
    
         
            +
                              :applications
         
     | 
| 
      
 32 
     | 
    
         
            +
                
         
     | 
| 
      
 33 
     | 
    
         
            +
                def initialize(config, raw)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @raw    = raw
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @name   = raw.match(/^\ {4}application\-set (\S+)\ \{$/)[1]
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @applications = raw.scan(/^(\ {8}application (\S+);)$/).collect do |x|
         
     | 
| 
      
 38 
     | 
    
         
            +
                    config.application(x[1])
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                
         
     | 
| 
      
 42 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @name
         
     | 
| 
      
 44 
     | 
    
         
            +
                end    
         
     | 
| 
      
 45 
     | 
    
         
            +
                
         
     | 
| 
      
 46 
     | 
    
         
            +
                def list_of_objects
         
     | 
| 
      
 47 
     | 
    
         
            +
                  applications
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            class String
         
     | 
| 
      
 55 
     | 
    
         
            +
              
         
     | 
| 
      
 56 
     | 
    
         
            +
              def list_of_objects
         
     | 
| 
      
 57 
     | 
    
         
            +
                [self]
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
              
         
     | 
| 
      
 60 
     | 
    
         
            +
              def details
         
     | 
| 
      
 61 
     | 
    
         
            +
                to_s
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/junos-config/config.rb
    CHANGED
    
    | 
         @@ -1,18 +1,33 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module JunosConfig
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Config
         
     | 
| 
       3 
3 
     | 
    
         
             
                attr_reader :raw,
         
     | 
| 
      
 4 
     | 
    
         
            +
                            :last_changed,
         
     | 
| 
      
 5 
     | 
    
         
            +
                            :version,
         
     | 
| 
      
 6 
     | 
    
         
            +
                            :hostname,
         
     | 
| 
       4 
7 
     | 
    
         
             
                            :interfaces,
         
     | 
| 
       5 
8 
     | 
    
         
             
                            :security_zones,
         
     | 
| 
       6 
     | 
    
         
            -
                            :security_policies
         
     | 
| 
      
 9 
     | 
    
         
            +
                            :security_policies,
         
     | 
| 
      
 10 
     | 
    
         
            +
                            :applications,
         
     | 
| 
      
 11 
     | 
    
         
            +
                            :application_sets
         
     | 
| 
       7 
12 
     | 
    
         | 
| 
       8 
13 
     | 
    
         
             
                def initialize(raw)
         
     | 
| 
       9 
14 
     | 
    
         
             
                  @raw = raw
         
     | 
| 
      
 15 
     | 
    
         
            +
                
         
     | 
| 
      
 16 
     | 
    
         
            +
                  m = raw.match(/Last\ changed:\ (.*?)\nversion\ (\S+);/m)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @last_changed = m[1] if m
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @version = m[2] if m
         
     | 
| 
      
 19 
     | 
    
         
            +
                  
         
     | 
| 
       10 
20 
     | 
    
         
             
                  raw.scan(/^(\w+)\ \{$(.*?)^\}$/m).each do |section|
         
     | 
| 
       11 
21 
     | 
    
         
             
                    method = "parse_#{section[0]}"
         
     | 
| 
       12 
22 
     | 
    
         
             
                    send method, section[1] if respond_to?(method)
         
     | 
| 
       13 
23 
     | 
    
         
             
                  end
         
     | 
| 
       14 
24 
     | 
    
         
             
                end
         
     | 
| 
       15 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                def parse_groups(raw_section)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  m = raw_section.match(/host\-name\ (\S+)-\S;/m)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @hostname = m[1]
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
       16 
31 
     | 
    
         
             
                def parse_interfaces(raw_section)
         
     | 
| 
       17 
32 
     | 
    
         
             
                  @interfaces = raw_section.scan(/^(\ {4}\S+\ \{$.*?^\ {4}\})$/m).collect do |x|
         
     | 
| 
       18 
33 
     | 
    
         
             
                    Interface.new self, x[0]
         
     | 
| 
         @@ -32,5 +47,29 @@ module JunosConfig 
     | 
|
| 
       32 
47 
     | 
    
         
             
                  end
         
     | 
| 
       33 
48 
     | 
    
         
             
                  @security_policies.flatten!
         
     | 
| 
       34 
49 
     | 
    
         
             
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
                
         
     | 
| 
      
 51 
     | 
    
         
            +
                def parse_applications(raw_section)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @applications = raw_section.scan(/^(\ {4}application\ \S+ \{$.*?^\ {4}\})$/m).collect do |x|
         
     | 
| 
      
 53 
     | 
    
         
            +
                    Application.new self, x[0]
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  @application_lookup = {}
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @applications.each{|a| @application_lookup[a.name] =  a }
         
     | 
| 
      
 57 
     | 
    
         
            +
                  @application_sets = raw_section.scan(/^(\ {4}application\-set\ \S+ \{$.*?^\ {4}\})$/m).collect do |x|
         
     | 
| 
      
 58 
     | 
    
         
            +
                    ApplicationSet.new self, x[0]
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  @application_sets.each{|a| @application_lookup[a.name] =  a }
         
     | 
| 
      
 61 
     | 
    
         
            +
                  
         
     | 
| 
      
 62 
     | 
    
         
            +
                  @security_policies.each do |policy|
         
     | 
| 
      
 63 
     | 
    
         
            +
                    policy.application.collect! {|name| application(name) }
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
                
         
     | 
| 
      
 67 
     | 
    
         
            +
                def application(name)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  if name =~ /any|ESP|esp|junos\-/
         
     | 
| 
      
 69 
     | 
    
         
            +
                    # junos internal applications
         
     | 
| 
      
 70 
     | 
    
         
            +
                    return name
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  @application_lookup[name]
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
       35 
74 
     | 
    
         
             
              end
         
     | 
| 
       36 
75 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module JunosConfig
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Security
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Address
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_accessor :raw,
         
     | 
| 
      
 5 
     | 
    
         
            +
                                :config,
         
     | 
| 
      
 6 
     | 
    
         
            +
                                :name,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                :ip
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(config, raw)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @config = config
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @raw    = raw
         
     | 
| 
      
 12 
     | 
    
         
            +
                    m = raw.match(/^\ {16}address (\S+)\ (\S+);/)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @name = m[1]
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @ip = m[2]
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module JunosConfig
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Security
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AddressBook
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_accessor :raw,
         
     | 
| 
      
 5 
     | 
    
         
            +
                                :config,
         
     | 
| 
      
 6 
     | 
    
         
            +
                                :name,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                :addresses,
         
     | 
| 
      
 8 
     | 
    
         
            +
                                :address_sets
         
     | 
| 
      
 9 
     | 
    
         
            +
                
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def initialize(config, raw)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @config = config
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @raw    = raw        
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @addresses = raw.scan(/^(\ {16}address \S+ \S+;)$/).collect do |x|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      Security::Address.new self, x[0]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @address_sets = raw.scan(/^(\ {16}address-set \S+ \{$.*?^\ {16}\})$/m).collect do |x|
         
     | 
| 
      
 17 
     | 
    
         
            +
                      Security::AddressSet.new self, x[0]
         
     | 
| 
      
 18 
     | 
    
         
            +
                    end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @resolv = {}
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @addresses.each { |a| @resolv[a.name] = a }
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @address_sets.each do |as|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @resolv[as.name] = as
         
     | 
| 
      
 23 
     | 
    
         
            +
                      aset = as.lookup_addresses(self)
         
     | 
| 
      
 24 
     | 
    
         
            +
                      aset.each{ |a| @resolv[a.name] = a }
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  
         
     | 
| 
      
 28 
     | 
    
         
            +
                  def resolve(name)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @resolv[name]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def lookup(name)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    addrs = resolve(name)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    return unless addrs
         
     | 
| 
      
 35 
     | 
    
         
            +
                    return addrs.addresses if addrs.class == JunosConfig::Security::AddressSet
         
     | 
| 
      
 36 
     | 
    
         
            +
                    [addrs]
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module JunosConfig
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Security
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AddressSet
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_accessor :raw,
         
     | 
| 
      
 5 
     | 
    
         
            +
                                :config,
         
     | 
| 
      
 6 
     | 
    
         
            +
                                :name,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                :addresses
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(config, raw)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @config = config
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @raw    = raw
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @name   = raw.match(/^\ {16}address-set (\S+)\ \{$/)[1]
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @addresses = raw.scan(/^(\ {20}address (\S+);)$/).collect do |x|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      String.new x[1]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  def lookup_addresses( addressbook )
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @addresses.collect! do |addr|
         
     | 
| 
      
 20 
     | 
    
         
            +
                      addressbook.resolve(addr)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -5,7 +5,10 @@ module JunosConfig 
     | 
|
| 
       5 
5 
     | 
    
         
             
                                :config,
         
     | 
| 
       6 
6 
     | 
    
         
             
                                :name,
         
     | 
| 
       7 
7 
     | 
    
         
             
                                :from_zone,
         
     | 
| 
       8 
     | 
    
         
            -
                                :to_zone
         
     | 
| 
      
 8 
     | 
    
         
            +
                                :to_zone,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                :source_address,
         
     | 
| 
      
 10 
     | 
    
         
            +
                                :destination_address,
         
     | 
| 
      
 11 
     | 
    
         
            +
                                :application
         
     | 
| 
       9 
12 
     | 
    
         | 
| 
       10 
13 
     | 
    
         
             
                  def initialize(config, raw, from_zone, to_zone)
         
     | 
| 
       11 
14 
     | 
    
         
             
                    @config    = config
         
     | 
| 
         @@ -13,6 +16,22 @@ module JunosConfig 
     | 
|
| 
       13 
16 
     | 
    
         
             
                    @from_zone = from_zone
         
     | 
| 
       14 
17 
     | 
    
         
             
                    @to_zone   = to_zone
         
     | 
| 
       15 
18 
     | 
    
         
             
                    @name      = raw.match(/^\ {12}policy (\S+)\ \{$/)[1]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    
         
     | 
| 
      
 20 
     | 
    
         
            +
                    raw.scan(/^\ {20}source\-address\ ([^;]+);/).each do |src|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      s = src[0].split(" ")
         
     | 
| 
      
 22 
     | 
    
         
            +
                      s = s.slice(1,s.length-2) if s.length > 1
         
     | 
| 
      
 23 
     | 
    
         
            +
                      @source_address =  s
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    raw.scan(/^\ {20}destination\-address\ ([^;]+);/).each do |dst|
         
     | 
| 
      
 26 
     | 
    
         
            +
                      s = dst[0].split(" ")
         
     | 
| 
      
 27 
     | 
    
         
            +
                      s = s.slice(1,s.length-2) if s.length > 1
         
     | 
| 
      
 28 
     | 
    
         
            +
                      @destination_address = s
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                    raw.scan(/^\ {20}application\ ([^;]+);/).each do |app|
         
     | 
| 
      
 31 
     | 
    
         
            +
                      s = app[0].split(" ")
         
     | 
| 
      
 32 
     | 
    
         
            +
                      s = s.slice(1,s.length-2) if s.length > 1
         
     | 
| 
      
 33 
     | 
    
         
            +
                      @application = s
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
       16 
35 
     | 
    
         
             
                  end
         
     | 
| 
       17 
36 
     | 
    
         
             
                end
         
     | 
| 
       18 
37 
     | 
    
         
             
              end
         
     | 
| 
         @@ -3,12 +3,16 @@ module JunosConfig 
     | 
|
| 
       3 
3 
     | 
    
         
             
                class Zone
         
     | 
| 
       4 
4 
     | 
    
         
             
                  attr_accessor :raw,
         
     | 
| 
       5 
5 
     | 
    
         
             
                                :config,
         
     | 
| 
       6 
     | 
    
         
            -
                                :name
         
     | 
| 
      
 6 
     | 
    
         
            +
                                :name,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                :address_book
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
                  def initialize(config, raw)
         
     | 
| 
       9 
10 
     | 
    
         
             
                    @config = config
         
     | 
| 
       10 
11 
     | 
    
         
             
                    @raw    = raw
         
     | 
| 
       11 
     | 
    
         
            -
                    @name   = raw.match(/^\ {8}security\-zone\ (\S+) \{$/)[1]
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @name   = raw.match(/^\ {8}security\-zone\ (\S+) \{$/)[1]      
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @address_book = raw.scan(/^(\ {12}address\-book\ \{$.*?^\ {12}\})$/m).collect do |x|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      Security::AddressBook.new self, x[0]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
       12 
16 
     | 
    
         
             
                  end
         
     | 
| 
       13 
17 
     | 
    
         
             
                end
         
     | 
| 
       14 
18 
     | 
    
         
             
              end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,24 +1,26 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: junos-config
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 19
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
      
 8 
     | 
    
         
            +
              - 3
         
     | 
| 
       9 
9 
     | 
    
         
             
              - 0
         
     | 
| 
       10 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - John Wulff
         
     | 
| 
      
 14 
     | 
    
         
            +
            - Aki Immonen
         
     | 
| 
       14 
15 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       15 
16 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
17 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date:  
     | 
| 
       19 
     | 
    
         
            -
            default_executable: 
         
     | 
| 
      
 19 
     | 
    
         
            +
            date: 2012-02-14 00:00:00 Z
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 22 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       22 
24 
     | 
    
         
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
       23 
25 
     | 
    
         
             
                none: false
         
     | 
| 
       24 
26 
     | 
    
         
             
                requirements: 
         
     | 
| 
         @@ -30,11 +32,11 @@ dependencies: 
     | 
|
| 
       30 
32 
     | 
    
         
             
                    - 3
         
     | 
| 
       31 
33 
     | 
    
         
             
                    - 0
         
     | 
| 
       32 
34 
     | 
    
         
             
                    version: 2.3.0
         
     | 
| 
       33 
     | 
    
         
            -
              name: rspec
         
     | 
| 
       34 
     | 
    
         
            -
              version_requirements: *id001
         
     | 
| 
       35 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       36 
35 
     | 
    
         
             
              type: :development
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: *id001
         
     | 
| 
       37 
37 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 38 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 39 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       38 
40 
     | 
    
         
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
       39 
41 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
42 
     | 
    
         
             
                requirements: 
         
     | 
| 
         @@ -46,11 +48,11 @@ dependencies: 
     | 
|
| 
       46 
48 
     | 
    
         
             
                    - 0
         
     | 
| 
       47 
49 
     | 
    
         
             
                    - 0
         
     | 
| 
       48 
50 
     | 
    
         
             
                    version: 1.0.0
         
     | 
| 
       49 
     | 
    
         
            -
              name: bundler
         
     | 
| 
       50 
     | 
    
         
            -
              version_requirements: *id002
         
     | 
| 
       51 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       52 
51 
     | 
    
         
             
              type: :development
         
     | 
| 
      
 52 
     | 
    
         
            +
              version_requirements: *id002
         
     | 
| 
       53 
53 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 54 
     | 
    
         
            +
              name: jeweler
         
     | 
| 
      
 55 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       54 
56 
     | 
    
         
             
              requirement: &id003 !ruby/object:Gem::Requirement 
         
     | 
| 
       55 
57 
     | 
    
         
             
                none: false
         
     | 
| 
       56 
58 
     | 
    
         
             
                requirements: 
         
     | 
| 
         @@ -62,11 +64,11 @@ dependencies: 
     | 
|
| 
       62 
64 
     | 
    
         
             
                    - 5
         
     | 
| 
       63 
65 
     | 
    
         
             
                    - 2
         
     | 
| 
       64 
66 
     | 
    
         
             
                    version: 1.5.2
         
     | 
| 
       65 
     | 
    
         
            -
              name: jeweler
         
     | 
| 
       66 
     | 
    
         
            -
              version_requirements: *id003
         
     | 
| 
       67 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       68 
67 
     | 
    
         
             
              type: :development
         
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *id003
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: rcov
         
     | 
| 
      
 71 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
       70 
72 
     | 
    
         
             
              requirement: &id004 !ruby/object:Gem::Requirement 
         
     | 
| 
       71 
73 
     | 
    
         
             
                none: false
         
     | 
| 
       72 
74 
     | 
    
         
             
                requirements: 
         
     | 
| 
         @@ -76,12 +78,10 @@ dependencies: 
     | 
|
| 
       76 
78 
     | 
    
         
             
                    segments: 
         
     | 
| 
       77 
79 
     | 
    
         
             
                    - 0
         
     | 
| 
       78 
80 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       79 
     | 
    
         
            -
              name: rcov
         
     | 
| 
       80 
     | 
    
         
            -
              version_requirements: *id004
         
     | 
| 
       81 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       82 
81 
     | 
    
         
             
              type: :development
         
     | 
| 
      
 82 
     | 
    
         
            +
              version_requirements: *id004
         
     | 
| 
       83 
83 
     | 
    
         
             
            description: Parser for Junos (Juniper network gear OS) config files.
         
     | 
| 
       84 
     | 
    
         
            -
            email: johnw@orcasnet.com
         
     | 
| 
      
 84 
     | 
    
         
            +
            email: johnw@orcasnet.com aki@axasoft.fi
         
     | 
| 
       85 
85 
     | 
    
         
             
            executables: []
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
            extensions: []
         
     | 
| 
         @@ -91,6 +91,7 @@ extra_rdoc_files: 
     | 
|
| 
       91 
91 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       92 
92 
     | 
    
         
             
            files: 
         
     | 
| 
       93 
93 
     | 
    
         
             
            - .document
         
     | 
| 
      
 94 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
       94 
95 
     | 
    
         
             
            - .rspec
         
     | 
| 
       95 
96 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       96 
97 
     | 
    
         
             
            - Gemfile.lock
         
     | 
| 
         @@ -100,15 +101,18 @@ files: 
     | 
|
| 
       100 
101 
     | 
    
         
             
            - VERSION
         
     | 
| 
       101 
102 
     | 
    
         
             
            - junos-config.gemspec
         
     | 
| 
       102 
103 
     | 
    
         
             
            - lib/junos-config.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - lib/junos-config/application.rb
         
     | 
| 
       103 
105 
     | 
    
         
             
            - lib/junos-config/config.rb
         
     | 
| 
       104 
106 
     | 
    
         
             
            - lib/junos-config/interface.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            - lib/junos-config/security/address.rb
         
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/junos-config/security/addressbook.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/junos-config/security/addressset.rb
         
     | 
| 
       105 
110 
     | 
    
         
             
            - lib/junos-config/security/policy.rb
         
     | 
| 
       106 
111 
     | 
    
         
             
            - lib/junos-config/security/zone.rb
         
     | 
| 
       107 
112 
     | 
    
         
             
            - spec/junos-config_spec.rb
         
     | 
| 
       108 
113 
     | 
    
         
             
            - spec/sample_configs/sample_1
         
     | 
| 
       109 
114 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
            homepage: http://github.com/jwulff/junos-config
         
     | 
| 
      
 115 
     | 
    
         
            +
            homepage: http://github.com/axasoft/junos-config
         
     | 
| 
       112 
116 
     | 
    
         
             
            licenses: 
         
     | 
| 
       113 
117 
     | 
    
         
             
            - MIT
         
     | 
| 
       114 
118 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
         @@ -137,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       137 
141 
     | 
    
         
             
            requirements: []
         
     | 
| 
       138 
142 
     | 
    
         | 
| 
       139 
143 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       140 
     | 
    
         
            -
            rubygems_version: 1. 
     | 
| 
      
 144 
     | 
    
         
            +
            rubygems_version: 1.8.10
         
     | 
| 
       141 
145 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       142 
146 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       143 
147 
     | 
    
         
             
            summary: Parser for Junos config files.
         
     |