fluent-plugin-windows-eventlog 0.4.2 → 0.4.3
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/fluent-plugin-winevtlog.gemspec +2 -2
- data/lib/fluent/plugin/in_windows_eventlog2.rb +18 -3
- data/test/plugin/test_in_windows_eventlog2.rb +47 -0
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 300dbf6a1600969a0b6a5401dad54494bea12c9a32435b995f26b391926b460a
         | 
| 4 | 
            +
              data.tar.gz: 69a35513989955c04f7aea4f3a44b6ca203783f968b6469c264b44487204e34c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 89bdf9b1e43f88a8784968f88ab29956eec7036381078d95453e91fee2c754f2796de7a06c0a229c77f632ec6a95f6bd49409f1974f69f2a10cb6b5975125648
         | 
| 7 | 
            +
              data.tar.gz: 8454063733dc798315f054819c444d9bf6e739ccb0150e07284f9e8c1c3c962b218d471fee85e924b9d92f3442d2c70d14bba5acdbbc3eb86667b4f609ebf6bf
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,7 @@ | |
| 1 | 
            +
            # Release v0.4.3 - 2019/10/31
         | 
| 2 | 
            +
            * in_windows_eventlog2: Handle privileges record on #parse_desc
         | 
| 3 | 
            +
            * in_windows_eventlog2: Raise error when handling invalid bookmark xml
         | 
| 4 | 
            +
             | 
| 1 5 | 
             
            # Release v0.4.2 - 2019/10/16
         | 
| 2 6 | 
             
            * in_windows_eventlog2: Handle invalid data error from `Winevt::EventLog::Query::Error`
         | 
| 3 7 |  | 
| @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 6 | 
             
              spec.name          = "fluent-plugin-windows-eventlog"
         | 
| 7 | 
            -
              spec.version       = "0.4. | 
| 7 | 
            +
              spec.version       = "0.4.3"
         | 
| 8 8 | 
             
              spec.authors       = ["okahashi117", "Hiroshi Hatake", "Masahiro Nakagawa"]
         | 
| 9 9 | 
             
              spec.email         = ["naruki_okahashi@jbat.co.jp", "cosmo0920.oucc@gmail.com", "repeatedly@gmail.com"]
         | 
| 10 10 | 
             
              spec.summary       = %q{Fluentd Input plugin to read windows event log.}
         | 
| @@ -22,7 +22,7 @@ Gem::Specification.new do |spec| | |
| 22 22 | 
             
              spec.add_development_dependency "test-unit", "~> 3.2.0"
         | 
| 23 23 | 
             
              spec.add_runtime_dependency "fluentd", [">= 0.14.12", "< 2"]
         | 
| 24 24 | 
             
              spec.add_runtime_dependency "win32-eventlog"
         | 
| 25 | 
            -
              spec.add_runtime_dependency "winevt_c", ">= 0.6. | 
| 25 | 
            +
              spec.add_runtime_dependency "winevt_c", ">= 0.6.1"
         | 
| 26 26 | 
             
              spec.add_runtime_dependency "nokogiri", "~> 1.10"
         | 
| 27 27 | 
             
              spec.add_runtime_dependency "fluent-plugin-parser-winevt_xml", ">= 0.1.2"
         | 
| 28 28 | 
             
            end
         | 
| @@ -89,9 +89,17 @@ module Fluent::Plugin | |
| 89 89 | 
             
                  @chs.each do |ch|
         | 
| 90 90 | 
             
                    bookmarkXml = @bookmarks_storage.get(ch) || ""
         | 
| 91 91 | 
             
                    subscribe = Winevt::EventLog::Subscribe.new
         | 
| 92 | 
            -
                    bookmark =  | 
| 92 | 
            +
                    bookmark = unless bookmarkXml.empty?
         | 
| 93 | 
            +
                                 Winevt::EventLog::Bookmark.new(bookmarkXml)
         | 
| 94 | 
            +
                               else
         | 
| 95 | 
            +
                                 nil
         | 
| 96 | 
            +
                               end
         | 
| 93 97 | 
             
                    subscribe.tail = @tailing
         | 
| 94 | 
            -
                     | 
| 98 | 
            +
                    begin
         | 
| 99 | 
            +
                      subscribe.subscribe(ch, "*", bookmark)
         | 
| 100 | 
            +
                    rescue Winevt::EventLog::Query::Error => e
         | 
| 101 | 
            +
                      raise Fluent::ConfigError, "Invalid Bookmark XML is loaded. #{e}"
         | 
| 102 | 
            +
                    end
         | 
| 95 103 | 
             
                    subscribe.render_as_xml = @render_as_xml
         | 
| 96 104 | 
             
                    subscribe.rate_limit = @rate_limit
         | 
| 97 105 | 
             
                    timer_execute("in_windows_eventlog_#{escape_channel(ch)}".to_sym, @read_interval) do
         | 
| @@ -192,6 +200,7 @@ module Fluent::Plugin | |
| 192 200 |  | 
| 193 201 | 
             
                  elems = desc.split(GROUP_DELIMITER)
         | 
| 194 202 | 
             
                  record['DescriptionTitle'] = elems.shift
         | 
| 203 | 
            +
                  previous_key = nil
         | 
| 195 204 | 
             
                  elems.each { |elem|
         | 
| 196 205 | 
             
                    parent_key = nil
         | 
| 197 206 | 
             
                    elem.split(RECORD_DELIMITER).each { |r|
         | 
| @@ -206,13 +215,19 @@ module Fluent::Plugin | |
| 206 215 | 
             
                      else
         | 
| 207 216 | 
             
                        # parsed value sometimes contain unexpected "\t". So remove it.
         | 
| 208 217 | 
             
                        value.strip!
         | 
| 209 | 
            -
                         | 
| 218 | 
            +
                        # merge empty key values into the previous non-empty key record.
         | 
| 219 | 
            +
                        if key.empty?
         | 
| 220 | 
            +
                          record[previous_key] = [record[previous_key], value].flatten
         | 
| 221 | 
            +
                        elsif parent_key.nil?
         | 
| 210 222 | 
             
                          record[to_key(key)] = value
         | 
| 211 223 | 
             
                        else
         | 
| 212 224 | 
             
                          k = "#{parent_key}.#{to_key(key)}"
         | 
| 213 225 | 
             
                          record[k] = value
         | 
| 214 226 | 
             
                        end
         | 
| 215 227 | 
             
                      end
         | 
| 228 | 
            +
                      # XXX: This is for empty privileges record key.
         | 
| 229 | 
            +
                      # We should investigate whether an another case exists or not.
         | 
| 230 | 
            +
                      previous_key = to_key(key) unless key.empty?
         | 
| 216 231 | 
             
                    }
         | 
| 217 232 | 
             
                  }
         | 
| 218 233 | 
             
                end
         | 
| @@ -48,6 +48,38 @@ DESC | |
| 48 48 | 
             
                assert_equal(expected, h)
         | 
| 49 49 | 
             
              end
         | 
| 50 50 |  | 
| 51 | 
            +
              def test_parse_privileges_description
         | 
| 52 | 
            +
                d = create_driver
         | 
| 53 | 
            +
                desc = ["Special privileges assigned to new logon.\r\n\r\nSubject:\r\n\tSecurity ID:\t\tS-X-Y-ZZ\r\n\t",
         | 
| 54 | 
            +
                        "AccountName:\t\tSYSTEM\r\n\tAccount Domain:\t\tNT AUTHORITY\r\n\tLogon ID:\t\t0x3E7\r\n\r\n",
         | 
| 55 | 
            +
                        "Privileges:\t\tSeAssignPrimaryTokenPrivilege\r\n\t\t\tSeTcbPrivilege\r\n\t\t\t",
         | 
| 56 | 
            +
                        "SeSecurityPrivilege\r\n\t\t\tSeTakeOwnershipPrivilege\r\n\t\t\tSeLoadDriverPrivilege\r\n\t\t\t",
         | 
| 57 | 
            +
                        "SeBackupPrivilege\r\n\t\t\tSeRestorePrivilege\r\n\t\t\tSeDebugPrivilege\r\n\t\t\t",
         | 
| 58 | 
            +
                        "SeAuditPrivilege\r\n\t\t\tSeSystemEnvironmentPrivilege\r\n\t\t\tSeImpersonatePrivilege\r\n\t\t\t",
         | 
| 59 | 
            +
                        "SeDelegateSessionUserImpersonatePrivilege"].join("")
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                h = {"Description" => desc}
         | 
| 62 | 
            +
                expected = {"DescriptionTitle"       => "Special privileges assigned to new logon.",
         | 
| 63 | 
            +
                            "subject.security_id"    => "S-X-Y-ZZ",
         | 
| 64 | 
            +
                            "subject.accountname"    => "SYSTEM",
         | 
| 65 | 
            +
                            "subject.account_domain" => "NT AUTHORITY",
         | 
| 66 | 
            +
                            "subject.logon_id"       => "0x3E7",
         | 
| 67 | 
            +
                            "privileges"             => ["SeAssignPrimaryTokenPrivilege",
         | 
| 68 | 
            +
                                                         "SeTcbPrivilege",
         | 
| 69 | 
            +
                                                         "SeSecurityPrivilege",
         | 
| 70 | 
            +
                                                         "SeTakeOwnershipPrivilege",
         | 
| 71 | 
            +
                                                         "SeLoadDriverPrivilege",
         | 
| 72 | 
            +
                                                         "SeBackupPrivilege",
         | 
| 73 | 
            +
                                                         "SeRestorePrivilege",
         | 
| 74 | 
            +
                                                         "SeDebugPrivilege",
         | 
| 75 | 
            +
                                                         "SeAuditPrivilege",
         | 
| 76 | 
            +
                                                         "SeSystemEnvironmentPrivilege",
         | 
| 77 | 
            +
                                                         "SeImpersonatePrivilege",
         | 
| 78 | 
            +
                                                         "SeDelegateSessionUserImpersonatePrivilege"]}
         | 
| 79 | 
            +
                d.instance.parse_desc(h)
         | 
| 80 | 
            +
                assert_equal(expected, h)
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 51 83 | 
             
              def test_write
         | 
| 52 84 | 
             
                d = create_driver
         | 
| 53 85 |  | 
| @@ -180,6 +212,21 @@ DESC | |
| 180 212 |  | 
| 181 213 | 
             
                  assert File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
         | 
| 182 214 | 
             
                end
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                def test_start_with_invalid_bookmark
         | 
| 217 | 
            +
                  invalid_storage_contents = <<-EOS
         | 
| 218 | 
            +
            <BookmarkList>\r\n  <Bookmark Channel='Application' RecordId='20063' IsCurrent='true'/>\r\n
         | 
| 219 | 
            +
            EOS
         | 
| 220 | 
            +
                  d = create_driver(CONFIG2)
         | 
| 221 | 
            +
                  storage = d.instance.instance_variable_get(:@bookmarks_storage)
         | 
| 222 | 
            +
                  storage.put('application', invalid_storage_contents)
         | 
| 223 | 
            +
                  assert File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  d2 = create_driver(CONFIG2)
         | 
| 226 | 
            +
                  assert_raise(Fluent::ConfigError) do
         | 
| 227 | 
            +
                    d2.instance.start
         | 
| 228 | 
            +
                  end
         | 
| 229 | 
            +
                end
         | 
| 183 230 | 
             
              end
         | 
| 184 231 |  | 
| 185 232 | 
             
              def test_write_with_none_parser
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-windows-eventlog
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.4. | 
| 4 | 
            +
              version: 0.4.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - okahashi117
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2019-10- | 
| 13 | 
            +
            date: 2019-10-31 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         | 
| @@ -94,14 +94,14 @@ dependencies: | |
| 94 94 | 
             
                requirements:
         | 
| 95 95 | 
             
                - - ">="
         | 
| 96 96 | 
             
                  - !ruby/object:Gem::Version
         | 
| 97 | 
            -
                    version: 0.6. | 
| 97 | 
            +
                    version: 0.6.1
         | 
| 98 98 | 
             
              type: :runtime
         | 
| 99 99 | 
             
              prerelease: false
         | 
| 100 100 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 101 101 | 
             
                requirements:
         | 
| 102 102 | 
             
                - - ">="
         | 
| 103 103 | 
             
                  - !ruby/object:Gem::Version
         | 
| 104 | 
            -
                    version: 0.6. | 
| 104 | 
            +
                    version: 0.6.1
         | 
| 105 105 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 106 106 | 
             
              name: nokogiri
         | 
| 107 107 | 
             
              requirement: !ruby/object:Gem::Requirement
         |