ruby-cyrus-sasl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.autotest ADDED
@@ -0,0 +1,9 @@
1
+ Autotest.add_hook :initialize do |at|
2
+ at.add_mapping(/ext\/.*\/(.*)\.[ch]/) do |_, m|
3
+ ["test/test_#{m[1]}_extn.rb"]
4
+ end
5
+ end
6
+
7
+ Autotest.add_hook :run_command do |at|
8
+ system "rake compile"
9
+ end
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2011-12-16
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright 2011 Hauke Mehrtens <hauke@hauke-m.de>. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are
4
+ permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of
7
+ conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list
10
+ of conditions and the following disclaimer in the documentation and/or other materials
11
+ provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY HAUKE MEHRTENS ''AS IS'' AND ANY EXPRESS OR IMPLIED
14
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
15
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL HAUKE MEHRTENS OR
16
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
17
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
18
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
20
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
21
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
+
23
+ The views and conclusions contained in the software and documentation are those of the
24
+ authors and should not be interpreted as representing official policies, either expressed
25
+ or implied, of Hauke Mehrtens.
data/Manifest.txt ADDED
@@ -0,0 +1,22 @@
1
+ .autotest
2
+ History.txt
3
+ LICENSE
4
+ Manifest.txt
5
+ PostInstall.txt
6
+ README.rdoc
7
+ Rakefile
8
+ ext/rubysasl/extconf.rb
9
+ ext/rubysasl/rubysasl.c
10
+ lib/ruby-cyrus-sasl.rb
11
+ lib/ruby-cyrus-sasl/Callback.rb
12
+ lib/ruby-cyrus-sasl/Client.rb
13
+ lib/ruby-cyrus-sasl/ClientFacroty.rb
14
+ lib/ruby-cyrus-sasl/imap.rb
15
+ script/console
16
+ script/destroy
17
+ script/generate
18
+ tasks/extconf.rake
19
+ tasks/extconf/rubysasl.rake
20
+ test/test_helper.rb
21
+ test/test_ruby-cyrus-sasl.rb
22
+ test/test_rubysasl_extn.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on ruby-cyrus-sasl, see http://ruby-cyrus-sasl.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,48 @@
1
+ = ruby-cyrus-sasl
2
+
3
+ * http://github.com/#{github_username}/#{project_name}
4
+
5
+ == DESCRIPTION:
6
+
7
+ FIX (describe your package)
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * FIX (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ FIX (code sample of usage)
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * FIX (list of requirements)
20
+
21
+ == INSTALL:
22
+
23
+ * FIX (sudo gem install, anything else)
24
+
25
+ == LICENSE:
26
+
27
+ (The MIT License)
28
+
29
+ Copyright (c) 2011 FIXME full name
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining
32
+ a copy of this software and associated documentation files (the
33
+ 'Software'), to deal in the Software without restriction, including
34
+ without limitation the rights to use, copy, modify, merge, publish,
35
+ distribute, sublicense, and/or sell copies of the Software, and to
36
+ permit persons to whom the Software is furnished to do so, subject to
37
+ the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be
40
+ included in all copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/ruby-cyrus-sasl'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'ruby-cyrus-sasl' do
14
+ self.developer 'Hauke Mehrtens', 'hauke@hauke-m.de'
15
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ self.rubyforge_name = self.name # TODO this is default value
17
+ # self.extra_deps = [['activesupport','>= 2.0.2']]
18
+
19
+ end
20
+
21
+ require 'newgem/tasks'
22
+ Dir['tasks/**/*.rake'].each { |t| load t }
23
+
24
+ # TODO - want other tests/tasks run by default? Add them to the list
25
+ # remove_task :default
26
+ # task :default => [:spec, :features]
@@ -0,0 +1,8 @@
1
+ require 'mkmf'
2
+
3
+ dir_config("rubysasl")
4
+ raise Exception "can not find header \"sasl/sasl.h\"" unless find_header('sasl/sasl.h')
5
+ raise Exception "can not find lib \"sasl2\"" unless find_library('sasl2', "sasl_client_init")
6
+ raise Exception "can not find lib \"sasl2\"" unless have_library("sasl2")
7
+ raise Exception "can not find lib \"sasl2\"" unless have_func('sasl_client_step')
8
+ create_makefile("rubysasl")
@@ -0,0 +1,170 @@
1
+ #include <sasl/sasl.h>
2
+ #include <ruby.h>
3
+
4
+ static sasl_callback_t callbacks[] = {
5
+ {
6
+ SASL_CB_PASS, NULL, NULL
7
+ }, {
8
+ SASL_CB_USER, NULL, NULL /* we'll handle these ourselves */
9
+ }, {
10
+ SASL_CB_AUTHNAME, NULL, NULL /* we'll handle these ourselves */
11
+ }, {
12
+ SASL_CB_LIST_END, NULL, NULL
13
+ }
14
+ };
15
+
16
+ VALUE mSasl;
17
+ VALUE cClientFactory;
18
+ VALUE cClient;
19
+
20
+ static VALUE t_sasl_client_init(VALUE self)
21
+ {
22
+ int result;
23
+
24
+ result = sasl_client_init(callbacks);
25
+ if (result != SASL_OK) {
26
+ rb_raise(rb_eException, "initializing libsasl");
27
+ }
28
+ return self;
29
+ }
30
+
31
+ static VALUE t_sasl_client_new(VALUE self, VALUE service, VALUE serverFQDN, VALUE callback, VALUE localaddr, VALUE remoteaddr)
32
+ {
33
+ sasl_conn_t *c_conn;
34
+ VALUE conn;
35
+ int result;
36
+ VALUE argv[1];
37
+ char *c_service = (service != Qnil) ? RSTRING_PTR(service) : NULL;
38
+ char *c_serverFQDN = (serverFQDN != Qnil) ? RSTRING_PTR(serverFQDN) : NULL;
39
+ char *c_localaddr = (localaddr != Qnil) ? RSTRING_PTR(localaddr) : NULL;
40
+ char *c_remoteaddr = (remoteaddr != Qnil) ? RSTRING_PTR(remoteaddr) : NULL;
41
+
42
+ result = sasl_client_new(c_service, c_serverFQDN, c_localaddr, c_remoteaddr, NULL, 0, &c_conn);
43
+ if (result != SASL_OK) {
44
+ rb_raise(rb_eException, "allocating connection state");
45
+ return self;
46
+ }
47
+
48
+ //TODO: free this
49
+ conn = Data_Wrap_Struct(cClient, NULL, NULL, c_conn);
50
+ argv[0] = callback;
51
+ rb_obj_call_init(conn, 1, argv);
52
+ return conn;
53
+ }
54
+
55
+ static void call_callback(VALUE callbackFunc, sasl_interact_t *callback,const char *callback_name)
56
+ {
57
+ VALUE result;
58
+ VALUE challenge = (callback->challenge != NULL) ? rb_str_new2(callback->challenge) : Qnil;
59
+ VALUE prompt = (callback->prompt != NULL) ? rb_str_new2(callback->prompt) : Qnil;
60
+ VALUE defresult = (callback->defresult != NULL) ? rb_str_new2(callback->defresult) : Qnil;
61
+ ID passID = rb_intern(callback_name);
62
+
63
+ result = rb_funcall(callbackFunc, passID, 3, challenge, prompt, defresult);
64
+ callback->result = (result != Qnil) ? RSTRING_PTR(result) : NULL;
65
+ callback->len = (result != Qnil) ? RSTRING_LEN(result) : 0;
66
+ }
67
+
68
+ static void handle_callbacks(VALUE callbackFunc, sasl_interact_t *c_prompt_need)
69
+ {
70
+ sasl_interact_t *callback = c_prompt_need;
71
+
72
+ while (callback->id != SASL_CB_LIST_END)
73
+ {
74
+ switch (callback->id)
75
+ {
76
+ case SASL_CB_PASS:
77
+ call_callback(callbackFunc, callback, "password");
78
+ break;
79
+ case SASL_CB_AUTHNAME:
80
+ call_callback(callbackFunc, callback, "authid");
81
+ break;
82
+ case SASL_CB_USER:
83
+ call_callback(callbackFunc, callback, "userid");
84
+ break;
85
+ case SASL_CB_GETREALM:
86
+ call_callback(callbackFunc, callback, "realm");
87
+ break;
88
+ default:
89
+ printf("unkown callback 0x%lx", callback->id);
90
+ }
91
+ /* increment to next sasl_interact_t */
92
+ callback++;
93
+ }
94
+ }
95
+
96
+ static VALUE t_sasl_client_start(VALUE self, VALUE mechlist)
97
+ {
98
+ sasl_conn_t *c_conn;
99
+ const char *c_mechlist = (mechlist != Qnil) ? RSTRING_PTR(mechlist) : NULL;
100
+ sasl_interact_t *c_prompt_need = NULL;
101
+ const char *c_clientout;
102
+ unsigned c_clientoutlen = 0;
103
+ const char *c_mech;
104
+ int err;
105
+ VALUE result;
106
+
107
+ Data_Get_Struct(self, sasl_conn_t, c_conn);
108
+
109
+ do {
110
+ err = sasl_client_start(c_conn, c_mechlist, &c_prompt_need, &c_clientout, &c_clientoutlen, &c_mech);
111
+ if (err == SASL_INTERACT) {
112
+ VALUE callbackFunc = rb_iv_get(self, "@callback");
113
+ handle_callbacks(callbackFunc, c_prompt_need);
114
+ }
115
+ } while (err == SASL_INTERACT);
116
+
117
+ if (err != SASL_OK && err != SASL_CONTINUE) {
118
+ rb_raise(rb_eException, "starting SASL negotiation details: %s", sasl_errdetail(c_conn));
119
+ return Qnil;
120
+ }
121
+
122
+ rb_iv_set(self, "@mech", rb_str_new2(c_mech));
123
+ result = rb_str_new(c_clientout, c_clientoutlen);
124
+ return result;
125
+ }
126
+
127
+ static VALUE t_sasl_client_step(VALUE self, VALUE serverin)
128
+ {
129
+ sasl_conn_t *c_conn;
130
+ const char *c_serverin;
131
+ unsigned c_serverinlen;
132
+ sasl_interact_t *c_prompt_need = NULL;
133
+ const char *c_clientout;
134
+ unsigned c_clientoutlen;
135
+ int err;
136
+ VALUE result;
137
+
138
+ Data_Get_Struct(self, sasl_conn_t, c_conn);
139
+ c_serverin = (serverin != Qnil) ? RSTRING_PTR(serverin) : NULL;
140
+ c_serverinlen = (serverin != Qnil) ? RSTRING_LEN(serverin) : 0;
141
+
142
+ do {
143
+ err = sasl_client_step(c_conn, c_serverin, c_serverinlen, &c_prompt_need, &c_clientout, &c_clientoutlen);
144
+ if (err == SASL_INTERACT) {
145
+ VALUE callbackFunc = rb_iv_get(self, "@callback");
146
+ handle_callbacks(callbackFunc, c_prompt_need);
147
+ }
148
+ } while (err == SASL_INTERACT);
149
+
150
+ if (err != SASL_OK && err != SASL_CONTINUE) {
151
+ rb_raise(rb_eException, "starting SASL negotiation details: %s", sasl_errdetail(c_conn));
152
+ return Qnil;
153
+ }
154
+ if (err == SASL_OK)
155
+ rb_iv_set(self, "@complete", Qtrue);
156
+
157
+ result = rb_str_new(c_clientout, c_clientoutlen);
158
+ return result;
159
+ }
160
+
161
+ void Init_rubysasl() {
162
+ mSasl = rb_define_module("RubyCyrusSASL");
163
+ cClientFactory = rb_define_class_under(mSasl, "ClientFactory", rb_cObject);
164
+ cClient = rb_define_class_under(mSasl, "Client", rb_cObject);
165
+ rb_define_method(cClientFactory, "sasl_client_init", t_sasl_client_init, 0);
166
+ rb_define_method(cClientFactory, "sasl_client_new", t_sasl_client_new, 5);
167
+ rb_define_method(cClient, "sasl_client_start", t_sasl_client_start, 1);
168
+ rb_define_method(cClient, "sasl_client_step", t_sasl_client_step, 1);
169
+ }
170
+
@@ -0,0 +1,17 @@
1
+ module RubyCyrusSASL
2
+ module Callback
3
+
4
+ def password challenge, prompt, defresult
5
+ end
6
+
7
+ def authid challenge, prompt, defresult
8
+ end
9
+
10
+ def userid challenge, prompt, defresult
11
+ end
12
+
13
+ def realm challenge, prompt, defresult
14
+ end
15
+
16
+ end #module Callback
17
+ end #module RubyCyrusSASL
@@ -0,0 +1,30 @@
1
+ require 'rubysasl'
2
+
3
+ module RubyCyrusSASL
4
+ class Client
5
+
6
+ def initialize callback
7
+ @callback = callback
8
+ @complete = false
9
+ @mech = nil
10
+ end
11
+
12
+ def start mech_list
13
+ puts mech_list
14
+ sasl_client_start mech_list
15
+ end
16
+
17
+ def step challenge
18
+ sasl_client_step challenge
19
+ end
20
+
21
+ def mech
22
+ @mech
23
+ end
24
+
25
+ def complete?
26
+ @complete
27
+ end
28
+
29
+ end #class Client
30
+ end #module RubyCyrusSASL
@@ -0,0 +1,20 @@
1
+ $: << File.dirname(File.absolute_path(__FILE__))
2
+ require 'singleton'
3
+ require 'rubysasl.so'
4
+ require 'Client'
5
+ require 'Callback'
6
+
7
+ module RubyCyrusSASL
8
+ class ClientFactory
9
+ include Singleton
10
+
11
+ def initialize
12
+ sasl_client_init
13
+ end
14
+
15
+ def create service, serverFQDN, callback, iplocalport = nil, ipremoteport = nil
16
+ sasl_client_new service, serverFQDN, callback, iplocalport, ipremoteport
17
+ end
18
+
19
+ end #class ClientFactory
20
+ end #module RubyCyrusSASL
@@ -0,0 +1,53 @@
1
+ require 'net/imap'
2
+ require 'ruby-cyrus-sasl/ClientFacroty'
3
+
4
+ module Net
5
+ class IMAP
6
+
7
+ class SASLCallback
8
+ include RubyCyrusSASL::Callback
9
+
10
+ def initialize user, password, authname
11
+ @user = user
12
+ @password = password
13
+ @authname = authname
14
+ end
15
+
16
+ def password challenge, prompt, defresult
17
+ @password
18
+ end
19
+
20
+ def authid challenge, prompt, defresult
21
+ @authname
22
+ end
23
+
24
+ def userid challenge, prompt, defresult
25
+ @user
26
+ end
27
+ end
28
+
29
+ def authenticate_cyrus user, password, authname
30
+ callback = SASLCallback.new user, password, authname
31
+ server_mechs = (@greeting.data.code.data.scan /AUTH=([^ ]+)/).join ", "
32
+ cyrus_sasl = RubyCyrusSASL::ClientFactory.instance.create "imap", @host, callback
33
+ start_result = cyrus_sasl.start server_mechs
34
+ send_command("AUTHENTICATE", cyrus_sasl.mech) do |resp|
35
+ if resp.instance_of?(ContinuationRequest)
36
+ if start_result && start_result.length != 0
37
+ s = [start_result].pack("m").gsub(/\n/, "")
38
+ send_string_data(s)
39
+ put_string(CRLF)
40
+ start_result = nil
41
+ else
42
+ data = cyrus_sasl.step(resp.data.text.unpack("m")[0])
43
+ data = "OK Success (privacy protection)" if cyrus_sasl.complete? and data == ""
44
+ s = [data].pack("m").gsub(/\n/, "")
45
+ send_string_data(s)
46
+ put_string(CRLF)
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ end # class IMAP
53
+ end #module Net
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module RubyCyrusSasl
5
+ VERSION = '0.0.1'
6
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/ruby-cyrus-sasl.rb'}"
9
+ puts "Loading ruby-cyrus-sasl gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,43 @@
1
+ namespace :extconf do
2
+ extension = File.basename(__FILE__, '.rake')
3
+
4
+ ext = "ext/#{extension}"
5
+ ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
6
+ ext_files = FileList[
7
+ "#{ext}/*.c",
8
+ "#{ext}/*.h",
9
+ "#{ext}/*.rl",
10
+ "#{ext}/extconf.rb",
11
+ "#{ext}/Makefile",
12
+ # "lib"
13
+ ]
14
+
15
+
16
+ task :compile => extension do
17
+ if Dir.glob("**/#{extension}.{o,so,dll}").length == 0
18
+ STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
19
+ STDERR.puts "Gem actually failed to build. Your system is"
20
+ STDERR.puts "NOT configured properly to build #{GEM_NAME}."
21
+ STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
22
+ exit(1)
23
+ end
24
+ end
25
+
26
+ desc "Builds just the #{extension} extension"
27
+ task extension.to_sym => ["#{ext}/Makefile", ext_so ]
28
+
29
+ file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
30
+ Dir.chdir(ext) do ruby "extconf.rb" end
31
+ end
32
+
33
+ file ext_so => ext_files do
34
+ Dir.chdir(ext) do
35
+ sh(PLATFORM =~ /win32/ ? 'nmake' : 'make') do |ok, res|
36
+ if !ok
37
+ require "fileutils"
38
+ FileUtils.rm Dir.glob('*.{so,o,dll,bundle}')
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,13 @@
1
+ namespace :extconf do
2
+ desc "Compiles the Ruby extension"
3
+ task :compile
4
+ end
5
+
6
+ task :compile => "extconf:compile"
7
+
8
+ task :test => :compile
9
+
10
+ BIN = "*.{bundle,jar,so,obj,pdb,lib,def,exp}"
11
+ $hoe.clean_globs |= ["ext/**/#{BIN}", "lib/**/#{BIN}", 'ext/**/Makefile']
12
+ $hoe.spec.require_paths = Dir['{lib,ext/*}']
13
+ $hoe.spec.extensions = FileList["ext/**/extconf.rb"].to_a
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/ruby-cyrus-sasl'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestRubyCyrusSasl < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require "test/unit"
2
+
3
+ $:.unshift File.dirname(__FILE__) + "/../ext/rubysasl"
4
+ require "rubysasl.so"
5
+
6
+ class TestRubysaslExtn < Test::Unit::TestCase
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-cyrus-sasl
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Hauke Mehrtens
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-12-16 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: hoe
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 8
31
+ - 0
32
+ version: 2.8.0
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: FIX (describe your package)
36
+ email:
37
+ - hauke@hauke-m.de
38
+ executables: []
39
+
40
+ extensions:
41
+ - ext/rubysasl/extconf.rb
42
+ extra_rdoc_files:
43
+ - History.txt
44
+ - Manifest.txt
45
+ - PostInstall.txt
46
+ files:
47
+ - .autotest
48
+ - History.txt
49
+ - LICENSE
50
+ - Manifest.txt
51
+ - PostInstall.txt
52
+ - README.rdoc
53
+ - Rakefile
54
+ - ext/rubysasl/extconf.rb
55
+ - ext/rubysasl/rubysasl.c
56
+ - lib/ruby-cyrus-sasl.rb
57
+ - lib/ruby-cyrus-sasl/Callback.rb
58
+ - lib/ruby-cyrus-sasl/Client.rb
59
+ - lib/ruby-cyrus-sasl/ClientFacroty.rb
60
+ - lib/ruby-cyrus-sasl/imap.rb
61
+ - script/console
62
+ - script/destroy
63
+ - script/generate
64
+ - tasks/extconf.rake
65
+ - tasks/extconf/rubysasl.rake
66
+ - test/test_helper.rb
67
+ - test/test_ruby-cyrus-sasl.rb
68
+ - test/test_rubysasl_extn.rb
69
+ has_rdoc: true
70
+ homepage: http://github.com/#{github_username}/#{project_name}
71
+ licenses: []
72
+
73
+ post_install_message: PostInstall.txt
74
+ rdoc_options:
75
+ - --main
76
+ - README.rdoc
77
+ require_paths:
78
+ - lib
79
+ - ext/rubysasl
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ requirements: []
97
+
98
+ rubyforge_project: ruby-cyrus-sasl
99
+ rubygems_version: 1.3.7
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: FIX (describe your package)
103
+ test_files:
104
+ - test/test_rubysasl_extn.rb
105
+ - test/test_ruby-cyrus-sasl.rb
106
+ - test/test_helper.rb