clamby 1.5.1 → 1.6.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8580f01b4d5f65af4ee327b290e6e17f074fafb351a95a07d079c4eebad54ae1
4
- data.tar.gz: 8b0bc003922e5490d24464954cb01a40084aaf3b7344243c9110a3d1811e57db
3
+ metadata.gz: e9bf0bfa99f769f41a964838dca46fcb5d6b4c2a2e1653ff43c3a40fde25480f
4
+ data.tar.gz: 95615a8f2c69aa42a593f909a426266253026c7bc3d24a74dfabb13dd931c526
5
5
  SHA512:
6
- metadata.gz: 6f7b78e3b031158253bd4cc7809d87a0570710ed7239f3fd837bcab4235baf5bcc182a29fa22669523d037658f2387601973eb36bc6981bc760aeeb03fd392d1
7
- data.tar.gz: 56c12c45b4ecc6c9c6162243a8483226213f908d5df10655f409cb106b78881c3f0abfd781f7175757dbc2f50c9abb714952c5085ef420d021f77fe285a29ab3
6
+ metadata.gz: d4af568ba3f78fb465a18625ff9e9fca343de65b95b155b57cd3b7156d19db876457837331896c3c9c6767326a93f6dcf01f73c5518180df9ff95b7af8868b5e
7
+ data.tar.gz: 3c2b5004c4b5dbb2fc627a2d20a79307361b5385b3b53dc0500fe1683430db9619d90a18e0aa414d28ce103bbbe9265409462c0d3845f0e6667a76ff788743a6
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .DS_Store/
19
+ .byebug_history
@@ -1,13 +1,14 @@
1
1
  language: ruby
2
2
  before_install:
3
- - gem install bundler -v '>= 1.5.3'
3
+ - gem install bundler -v '1.17.3'
4
4
  - gem install rake
5
5
  - gem install rspec
6
6
  rvm:
7
- - 2.0.0
8
- - 2.1.1
9
7
  - 2.3.4
10
8
  - 2.4.1
9
+ - 2.5.3
10
+ - 2.6.3
11
+ - 2.6.5
11
12
  install:
12
13
  - sudo apt-get install clamav
13
14
  - sudo freshclam
@@ -1,3 +1,16 @@
1
+ # v1.6.5
2
+ - [bennacer860](https://github.com/kobaltz/clamby/commits?author=bennacer860) - Added config data dir option
3
+
4
+
5
+ # v1.6.2
6
+ - [emilong](https://github.com/kobaltz/clamby/commits?author=emilong) - Handle nil exit status of clamav executable.
7
+
8
+ # v1.6.1
9
+ - [broder](https://github.com/kobaltz/clamby/commits?author=broder) - Fixed issue with detecting clamdscan version when using custom config file
10
+
11
+ # v1.6.0
12
+ - When checking version, use the executable configuration.
13
+
1
14
  # v1.5.1
2
15
  - [ahukkanen](https://github.com/kobaltz/clamby/commits?author=ahukkanen) - Configurable execution paths
3
16
 
data/README.md CHANGED
@@ -17,14 +17,14 @@ Just add `gem 'clamby'` to your `Gemfile` and run `bundle install`.
17
17
 
18
18
  You can use two methods to scan a file for a virus:
19
19
 
20
- If you use `safe?` to scan a file, it will return true if no viruses were found, false if a virus was found, and nil if there was a problem finding the file or if there was a problem using `clamscan`
20
+ If you use `safe?` to scan a file, it will return `true` if no viruses were found, `false` if a virus was found, and `nil` if there was a problem finding the file or if there was a problem using `clamscan`
21
21
 
22
- `safe?(path_to_file)`
22
+ `Clamby.safe?(path_to_file)`
23
23
 
24
- If you use `virus?` to scan a file, it will return true if a virus was found, false if no virus was found, and nil if there was a problem finding the file or if there was a problem using `clamscan`
24
+ If you use `virus?` to scan a file, it will return `true` if a virus was found, `false` if no virus was found, and `nil` if there was a problem finding the file or if there was a problem using `clamscan`
25
25
 
26
26
 
27
- `virus?(path_to_file)`
27
+ `Clamby.virus?(path_to_file)`
28
28
 
29
29
  In your model with the uploader, you can add the scanner to a before method to scan the file. When a file is scanned, a successful scan will return `true`. An unsuccessful scan will return `false`. A scan may be unsuccessful for a number of reasons; `clamscan` could not be found, `clamscan` returned a virus, or the file which you were trying to scan could not be found.
30
30
 
@@ -64,6 +64,25 @@ It's good to note that Clamby will not by default delete files which had a virus
64
64
  end
65
65
  ```
66
66
 
67
+ ## with ActiveStorage
68
+
69
+ With ActiveStorage, you don't have access to the file through normal methods, so you'll have to access the file through the `attachment_changes`.
70
+
71
+ ```ruby
72
+ class User < ApplicationRecord
73
+ has_one_attached :avatar
74
+ before_save :scan_for_viruses
75
+
76
+ private
77
+
78
+ def scan_for_viruses
79
+ return unless self.attachment_changes['avatar']
80
+
81
+ path = self.attachment_changes['avatar'].attachable.tempfile.path
82
+ Clamby.safe?(path)
83
+ end
84
+ end
85
+ ```
67
86
 
68
87
  # Configuration
69
88
 
@@ -80,7 +99,7 @@ Configuration is rather limited right now. You can exclude the check if `clamsca
80
99
  :error_file_virus => false,
81
100
  :fdpass => false,
82
101
  :stream => false,
83
- :output => 'medium', # one of 'off', 'low', 'medium', 'high'
102
+ :output_level => 'medium', # one of 'off', 'low', 'medium', 'high'
84
103
  :executable_path_clamscan => 'clamscan',
85
104
  :executable_path_clamdscan => 'clamdscan',
86
105
  :executable_path_freshclam => 'freshclam',
@@ -161,6 +180,11 @@ This opens the root crontab file in a text editor. Add the following line
161
180
 
162
181
  `57 08 * * * sudo freshclam`
163
182
 
183
+ # Contributors
184
+
185
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
186
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
187
+
164
188
  # LICENSE
165
189
 
166
190
  Copyright (c) 2016 kobaltz
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.5"
21
+ spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "byebug"
24
25
  end
@@ -15,6 +15,7 @@ module Clamby
15
15
  :fdpass => false,
16
16
  :stream => false,
17
17
  :output_level => 'medium',
18
+ :datadir => nil,
18
19
  :executable_path_clamscan => 'clamscan',
19
20
  :executable_path_clamdscan => 'clamdscan',
20
21
  :executable_path_freshclam => 'freshclam',
@@ -21,20 +21,23 @@ module Clamby
21
21
  if Clamby.config[:daemonize]
22
22
  args << '--fdpass' if Clamby.config[:fdpass]
23
23
  args << '--stream' if Clamby.config[:stream]
24
- args << "--config-file=#{Clamby.config[:config_file]}" if Clamby.config[:config_file]
25
24
  end
26
25
 
26
+ args << "-d #{Clamby.config[:datadir]}" if Clamby.config[:datadir]
27
+
27
28
  new.run scan_executable, *args
28
29
 
29
- case $CHILD_STATUS.exitstatus
30
+ # $CHILD_STATUS maybe nil if the execution itself (not the client process)
31
+ # fails
32
+ case $CHILD_STATUS && $CHILD_STATUS.exitstatus
30
33
  when 0
31
34
  return false
32
- when 2
35
+ when nil, 2
33
36
  # clamdscan returns 2 whenever error other than a detection happens
34
37
  if Clamby.config[:error_clamscan_client_error] && Clamby.config[:daemonize]
35
38
  raise Clamby::ClamscanClientError.new("Clamscan client error")
36
39
  end
37
-
40
+
38
41
  # returns true to maintain legacy behavior
39
42
  return true
40
43
  else
@@ -46,12 +49,14 @@ module Clamby
46
49
 
47
50
  # Update the virus definitions.
48
51
  def self.freshclam
49
- new.run 'freshclam'
52
+ args = []
53
+ args << "--datadir=#{Clamby.config[:datadir]}" if Clamby.config[:datadir]
54
+ new.run 'freshclam', *args
50
55
  end
51
56
 
52
57
  # Show the ClamAV version. Also acts as a quick check if ClamAV functions.
53
58
  def self.clamscan_version
54
- new.run 'clamscan', '--version'
59
+ new.run scan_executable, '--version'
55
60
  end
56
61
 
57
62
  # Run the given commands via a system call.
@@ -67,13 +72,14 @@ module Clamby
67
72
  self.command = args | default_args
68
73
  self.command = command.sort.unshift(executable_full)
69
74
 
70
- system(*self.command, system_options)
75
+ system(self.command.join(' '), system_options)
71
76
  end
72
77
 
73
78
  private
74
79
 
75
80
  def default_args
76
81
  args = []
82
+ args << "--config-file=#{Clamby.config[:config_file]}" if Clamby.config[:daemonize] && Clamby.config[:config_file]
77
83
  args << '--quiet' if Clamby.config[:output_level] == 'low'
78
84
  args << '--verbose' if Clamby.config[:output_level] == 'high'
79
85
  args
@@ -1,3 +1,3 @@
1
1
  module Clamby
2
- VERSION = "1.5.1"
2
+ VERSION = "1.6.6"
3
3
  end
@@ -34,7 +34,7 @@ describe Clamby::Command do
34
34
 
35
35
  describe 'passing file descriptor' do
36
36
  it 'does not include fdpass in the command by default' do
37
- Clamby.configure(fdpass: false)
37
+ Clamby.configure
38
38
  expect(runner).to receive(:run).with('clamscan', good_path, '--no-summary')
39
39
  allow(described_class).to receive(:new).and_return(runner)
40
40
 
@@ -60,7 +60,7 @@ describe Clamby::Command do
60
60
 
61
61
  describe 'streaming files to clamd' do
62
62
  it 'does not include stream in the command by default' do
63
- Clamby.configure(stream: false)
63
+ Clamby.configure
64
64
  expect(runner).to receive(:run).with('clamscan', good_path, '--no-summary')
65
65
  allow(described_class).to receive(:new).and_return(runner)
66
66
 
@@ -86,32 +86,24 @@ describe Clamby::Command do
86
86
 
87
87
  describe 'specifying config-file' do
88
88
  it 'does not include the parameter in the clamscan command by default' do
89
- Clamby.configure(daemonize: false, stream: false, fdpass: false)
90
- expect(runner).to receive(:run).with('clamscan', good_path, '--no-summary')
91
- allow(described_class).to receive(:new).and_return(runner)
89
+ Clamby.configure
92
90
 
93
- described_class.scan(good_path)
91
+ expect(described_class.new.send(:default_args)).not_to include(a_string_matching(/--config-file/))
94
92
  end
95
93
  it 'does not include the parameter in the clamdscan command by default' do
96
- Clamby.configure(daemonize: true, stream: false, fdpass: false)
97
- expect(runner).to receive(:run).with('clamdscan', good_path, '--no-summary')
98
- allow(described_class).to receive(:new).and_return(runner)
94
+ Clamby.configure(daemonize: true)
99
95
 
100
- described_class.scan(good_path)
96
+ expect(described_class.new.send(:default_args)).not_to include(a_string_matching(/--config-file/))
101
97
  end
102
98
  it 'omits the parameter when invoking clamscan if it is set' do
103
- Clamby.configure(daemonize: false, stream: false, fdpass: false, config_file: 'clamd.conf')
104
- expect(runner).to receive(:run).with('clamscan', good_path, '--no-summary')
105
- allow(described_class).to receive(:new).and_return(runner)
99
+ Clamby.configure(daemonize: false, config_file: 'clamd.conf')
106
100
 
107
- described_class.scan(good_path)
101
+ expect(described_class.new.send(:default_args)).not_to include('--config-file=clamd.conf')
108
102
  end
109
103
  it 'passes the parameter when invoking clamdscan if it is set' do
110
- Clamby.configure(daemonize: true, stream: false, fdpass: false, config_file: 'clamd.conf')
111
- expect(runner).to receive(:run).with('clamdscan', good_path, '--no-summary', '--config-file=clamd.conf')
112
- allow(described_class).to receive(:new).and_return(runner)
104
+ Clamby.configure(daemonize: true, config_file: 'clamd.conf')
113
105
 
114
- described_class.scan(good_path)
106
+ expect(described_class.new.send(:default_args)).to include('--config-file=clamd.conf')
115
107
  end
116
108
  end
117
109
 
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clamby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - kobaltz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-02 00:00:00.000000000 Z
11
+ date: 2020-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.5'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Clamby allows users to scan files uploaded with Paperclip or Carrierwave.
56
70
  If a file has a virus, then you can delete this file and discard it without causing
57
71
  harm to other users.
@@ -86,7 +100,7 @@ homepage: ''
86
100
  licenses:
87
101
  - MIT
88
102
  metadata: {}
89
- post_install_message:
103
+ post_install_message:
90
104
  rdoc_options: []
91
105
  require_paths:
92
106
  - lib
@@ -101,9 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
115
  - !ruby/object:Gem::Version
102
116
  version: '0'
103
117
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.7.7
106
- signing_key:
118
+ rubygems_version: 3.0.8
119
+ signing_key:
107
120
  specification_version: 4
108
121
  summary: Scan file uploads with ClamAV
109
122
  test_files: