ruby-managesieve 0.3.0 → 0.4.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.
Files changed (3) hide show
  1. data/bin/sievectl +23 -21
  2. data/lib/managesieve.rb +30 -5
  3. metadata +38 -31
data/bin/sievectl CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
3
  #--
4
- # Copyright (c) 2004-2006 Andre Nathan <andre@digirati.com.br>
4
+ # Copyright (c) 2004-2009 Andre Nathan <andre@digirati.com.br>
5
5
  #
6
6
  # Permission to use, copy, modify, and distribute this software for any
7
7
  # purpose with or without fee is hereby granted, provided that the above
@@ -38,10 +38,13 @@
38
38
  # user: john
39
39
  # password: secret
40
40
  # auth: PLAIN
41
+ # tls: false
41
42
  #
42
43
  # The +port+ and +euser+ parameters can be ommited, and will respectively
43
44
  # default to 2000 and the value of the +user+ parameter. If the +auth+
44
- # parameter is ommited, it will default to +ANONYMOUS+.
45
+ # parameter is ommited, it will default to +ANONYMOUS+. If the +tls+ parameter
46
+ # is ommited, a TLS connection will be used if the server supports it.
47
+ # Otherwise, a plain text connection will be used.
45
48
  #
46
49
  # == Usage and examples
47
50
  #
@@ -75,7 +78,7 @@
75
78
  # sievectl myaccount del scriptname
76
79
  #
77
80
  #--
78
- # $Id: sievectl,v 1.27 2006/08/30 18:06:21 andre Exp $
81
+ # $Id: sievectl,v 1.30 2009/01/13 21:29:52 andre Exp $
79
82
  #++
80
83
  #
81
84
 
@@ -87,13 +90,9 @@ require 'managesieve'
87
90
 
88
91
  $has_termios = true
89
92
  begin
90
- require_gem 'termios'
93
+ require 'termios'
91
94
  rescue LoadError
92
- begin
93
- require 'termios'
94
- rescue LoadError
95
- $has_termios = false
96
- end
95
+ $has_termios = false
97
96
  end
98
97
 
99
98
  require 'yaml'
@@ -129,14 +128,14 @@ class ConfigFile < File # :nodoc:
129
128
  begin
130
129
  conf = nil
131
130
  super(name) do |file|
132
- conf = YAML::load(file)
131
+ conf = YAML.load(file)
133
132
  end
134
133
  conf.each_key do |acct|
135
- conf[acct].each_key { |k| conf[acct][k] = conf[acct][k].to_s }
134
+ conf[acct].each_key { |k| conf[acct][k] = conf[acct][k] }
136
135
  end
137
136
  conf
138
137
  rescue Errno::ENOENT
139
- ConfigFile::create_template(name)
138
+ ConfigFile.create_template(name)
140
139
  exit 0
141
140
  end
142
141
  end
@@ -146,7 +145,7 @@ class ConfigFile < File # :nodoc:
146
145
  STDERR.puts <<-__EOF__
147
146
  * Could not find configuration file #{name}.
148
147
  * A template file will be created. Please edit the values to fit your
149
- * local configuration and run `#{File::basename $0}' again.
148
+ * local configuration and run `#{File.basename($0)}' again.
150
149
  __EOF__
151
150
 
152
151
  begin
@@ -159,6 +158,7 @@ accountname:
159
158
  euser: effectiveusername
160
159
  password: password
161
160
  auth: authmethod
161
+ tls: true
162
162
  __EOF__
163
163
  rescue => e
164
164
  raise TemplateError, e
@@ -228,7 +228,7 @@ class SieveCtl
228
228
  end
229
229
 
230
230
  def usage(quit=true, out=STDERR) # :nodoc: #
231
- prog = File.basename $0
231
+ prog = File.basename($0)
232
232
  out.puts <<-__EOF__
233
233
  Usage: #{prog} <account> <action> [script name]
234
234
  Action is one of:
@@ -240,7 +240,7 @@ You can also try `#{prog} help' for usage examples.
240
240
  end
241
241
 
242
242
  def help # :nodoc:
243
- prog = File::basename $0
243
+ prog = File.basename($0)
244
244
  usage(false, STDOUT)
245
245
  puts <<-__EOF__
246
246
 
@@ -282,7 +282,7 @@ account, action, name, file = ARGV
282
282
  usage if action.nil?
283
283
 
284
284
  begin
285
- conf = ConfigFile::open(ENV['HOME'] + '/.sievectlrc')
285
+ conf = ConfigFile.open(ENV['HOME'] + '/.sievectlrc')
286
286
  rescue TemplateError => e
287
287
  STDERR.puts "Cannot create template configuration file: #{e}"
288
288
  exit 1
@@ -319,14 +319,16 @@ end
319
319
  info['password'].chomp!
320
320
 
321
321
  begin
322
- sievectl = SieveCtl.new(
322
+ config = {
323
323
  :host => info['host'],
324
324
  :port => info['port'] || 2000,
325
- :user => info['user'],
326
- :euser => info['euser'] || info['user'],
327
- :password => info['password'],
325
+ :user => info['user'].to_s,
326
+ :euser => info['euser'].to_s || info['user'].to_s,
327
+ :password => info['password'].to_s,
328
328
  :auth => info['auth']
329
- )
329
+ }
330
+ config.merge!({:tls => info['tls']}) if info.has_key? 'tls'
331
+ sievectl = SieveCtl.new(config)
330
332
  rescue SieveNetworkError => e
331
333
  STDERR.puts "* #{e}"
332
334
  exit 1
data/lib/managesieve.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
3
  #--
4
- # Copyright (c) 2004-2006 Andre Nathan <andre@digirati.com.br>
4
+ # Copyright (c) 2004-2009 Andre Nathan <andre@digirati.com.br>
5
5
  #
6
6
  # Permission to use, copy, modify, and distribute this software for any
7
7
  # purpose with or without fee is hereby granted, provided that the above
@@ -25,13 +25,18 @@
25
25
  # See the ManageSieve class for documentation and examples.
26
26
  #
27
27
  #--
28
- # $Id: managesieve.rb,v 1.13 2006/08/30 14:23:58 andre Exp $
28
+ # $Id: managesieve.rb,v 1.14 2009/01/13 19:22:08 andre Exp $
29
29
  #++
30
30
  #
31
31
 
32
32
  require 'base64'
33
33
  require 'socket'
34
34
 
35
+ begin
36
+ require 'openssl'
37
+ rescue LoadError
38
+ end
39
+
35
40
  #
36
41
  # Define our own Base64.encode64 for compatibility with ruby <= 1.8.1, which
37
42
  # defines encode64() at the top level.
@@ -104,7 +109,7 @@ class SieveResponseError < Exception; end
104
109
  class ManageSieve
105
110
  SIEVE_PORT = 2000
106
111
 
107
- attr_reader :host, :port, :user, :euser, :capabilities, :login_mechs
112
+ attr_reader :host, :port, :user, :euser, :capabilities, :login_mechs, :tls
108
113
 
109
114
  # Create a new ManageSieve instance. The +info+ parameter is a hash with the
110
115
  # following keys:
@@ -115,6 +120,7 @@ class ManageSieve
115
120
  # [<i>:euser</i>] the name of the effective user (defaults to +:user+)
116
121
  # [<i>:password</i>] the password of the user
117
122
  # [<i>:auth_mech</i>] the authentication mechanism (defaults to +"ANONYMOUS"+)
123
+ # [<i>:tls</i>] use TLS (defaults to use it if the server supports it)
118
124
  #
119
125
  def initialize(info)
120
126
  @host = info[:host]
@@ -123,15 +129,25 @@ class ManageSieve
123
129
  @euser = info[:euser] || @user
124
130
  @password = info[:password]
125
131
  @auth_mech = info[:auth] || 'ANONYMOUS'
132
+ @tls = info.has_key?(:tls) ? !!info[:tls] : nil
126
133
 
127
134
  @capabilities = []
128
135
  @login_mechs = []
129
136
  @implementation = ''
130
137
  @supports_tls = false
131
- @socket = TCPSocket.new(@host, @port)
138
+ @socket = TCPSocket.new(@host, @port)
132
139
 
133
140
  data = get_response
134
141
  server_features(data)
142
+
143
+ if @tls and not supports_tls?
144
+ raise SieveNetworkError, 'Server does not support TLS'
145
+ @socket.close
146
+ elsif @tls != false
147
+ @tls = supports_tls?
148
+ starttls if @tls
149
+ end
150
+
135
151
  authenticate
136
152
  @password = nil
137
153
  end
@@ -261,7 +277,7 @@ class ManageSieve
261
277
  def send_command(cmd, args=nil, wait_response=true) # :nodoc:
262
278
  cmd += ' ' + args if args
263
279
  begin
264
- @socket.send(cmd + "\r\n", 0)
280
+ @socket.write(cmd + "\r\n")
265
281
  resp = get_response if wait_response
266
282
  rescue SieveResponseError => e
267
283
  raise SieveCommandError, "Command error: #{e}"
@@ -326,4 +342,13 @@ class ManageSieve
326
342
  return "{#{string.length}+}\r\n#{string}"
327
343
  end
328
344
 
345
+ private
346
+ def starttls
347
+ send_command('STARTTLS')
348
+ @socket = OpenSSL::SSL::SSLSocket.new(@socket)
349
+ @socket.sync_close = true
350
+ @socket.connect
351
+ data = get_response
352
+ server_features(data)
353
+ end
329
354
  end
metadata CHANGED
@@ -1,46 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
3
- specification_version: 1
4
2
  name: ruby-managesieve
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2006-08-30 00:00:00 -03:00
8
- summary: A Ruby library for the MANAGESIEVE protocol
9
- require_paths:
10
- - lib
11
- email: andre@digirati.com.br
12
- homepage: http://managesieve.rubyforge.org
13
- rubyforge_project: ruby-managesieve
14
- description: ruby-managesieve is a pure-ruby implementation of the MANAGESIEVE protocol, allowing remote management of Sieve scripts from ruby.
15
- autorequire: managesieve
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.4.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Andre Nathan
31
- files:
32
- - lib/managesieve.rb
33
- test_files: []
34
-
35
- rdoc_options: []
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
36
11
 
37
- extra_rdoc_files: []
12
+ date: 2009-01-13 00:00:00 -02:00
13
+ default_executable:
14
+ dependencies: []
38
15
 
16
+ description: ruby-managesieve is a pure-ruby implementation of the MANAGESIEVE protocol, allowing remote management of Sieve scripts from ruby.
17
+ email: andre@digirati.com.br
39
18
  executables:
40
19
  - sievectl
41
20
  extensions: []
42
21
 
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/managesieve.rb
26
+ has_rdoc: true
27
+ homepage: http://managesieve.rubyforge.org
28
+ post_install_message:
29
+ rdoc_options: []
30
+
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: "0"
38
+ version:
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
43
45
  requirements:
44
46
  - A network connection and a MANAGESIEVE server.
45
- dependencies: []
47
+ rubyforge_project: ruby-managesieve
48
+ rubygems_version: 1.3.0
49
+ signing_key:
50
+ specification_version: 2
51
+ summary: A Ruby library for the MANAGESIEVE protocol
52
+ test_files: []
46
53