net-ssh-kerberos 0.2.1 → 0.2.2
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/.document +5 -0
 - data/.gitignore +8 -0
 - data/Rakefile +29 -26
 - data/VERSION.yml +2 -2
 - data/example/Capfile +3 -0
 - data/example/gss.rb +91 -0
 - data/example/sspi.rb +73 -0
 - data/lib/net/ssh/kerberos/drivers/gss.rb +40 -11
 - data/net-ssh-kerberos.gemspec +77 -0
 - metadata +9 -3
 
    
        data/.document
    ADDED
    
    
    
        data/.gitignore
    ADDED
    
    
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -43,33 +43,36 @@ rescue LoadError 
     | 
|
| 
       43 
43 
     | 
    
         
             
            end
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
            # These are new tasks
         
     | 
| 
       46 
     | 
    
         
            -
            begin
         
     | 
| 
       47 
     | 
    
         
            -
              require 'rake/contrib/sshpublisher'
         
     | 
| 
       48 
     | 
    
         
            -
              namespace :rubyforge do
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                desc "Release gem and RDoc documentation to RubyForge"
         
     | 
| 
       51 
     | 
    
         
            -
                task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                namespace :release do
         
     | 
| 
       54 
     | 
    
         
            -
                  desc "Publish RDoc to RubyForge."
         
     | 
| 
       55 
     | 
    
         
            -
                  task :docs => [:rdoc] do
         
     | 
| 
       56 
     | 
    
         
            -
                    config = YAML.load(
         
     | 
| 
       57 
     | 
    
         
            -
                        File.read(File.expand_path('~/.rubyforge/user-config.yml'))
         
     | 
| 
       58 
     | 
    
         
            -
                    )
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                    host = "#{config['username']}@rubyforge.org"
         
     | 
| 
       61 
     | 
    
         
            -
                    remote_dir = "/var/www/gforge-projects/net-ssh-krb/"
         
     | 
| 
       62 
     | 
    
         
            -
                    local_dir = 'doc'
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                    Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
         
     | 
| 
       65 
     | 
    
         
            -
                  end
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       69 
     | 
    
         
            -
              puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
         
     | 
| 
      
 46 
     | 
    
         
            +
            #begin
         
     | 
| 
      
 47 
     | 
    
         
            +
            #  require 'rake/contrib/sshpublisher'
         
     | 
| 
      
 48 
     | 
    
         
            +
            #  namespace :rubyforge do
         
     | 
| 
      
 49 
     | 
    
         
            +
            #
         
     | 
| 
      
 50 
     | 
    
         
            +
            #    desc "Release gem and RDoc documentation to RubyForge"
         
     | 
| 
      
 51 
     | 
    
         
            +
            #    task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
         
     | 
| 
      
 52 
     | 
    
         
            +
            #
         
     | 
| 
      
 53 
     | 
    
         
            +
            #    namespace :release do
         
     | 
| 
      
 54 
     | 
    
         
            +
            #      desc "Publish RDoc to RubyForge."
         
     | 
| 
      
 55 
     | 
    
         
            +
            #      task :docs => [:rdoc] do
         
     | 
| 
      
 56 
     | 
    
         
            +
            #        config = YAML.load(
         
     | 
| 
      
 57 
     | 
    
         
            +
            #            File.read(File.expand_path('~/.rubyforge/user-config.yml'))
         
     | 
| 
      
 58 
     | 
    
         
            +
            #        )
         
     | 
| 
      
 59 
     | 
    
         
            +
            #
         
     | 
| 
      
 60 
     | 
    
         
            +
            #        host = "#{config['username']}@rubyforge.org"
         
     | 
| 
      
 61 
     | 
    
         
            +
            #        remote_dir = "/var/www/gforge-projects/net-ssh-krb/"
         
     | 
| 
      
 62 
     | 
    
         
            +
            #        local_dir = 'doc'
         
     | 
| 
      
 63 
     | 
    
         
            +
            #
         
     | 
| 
      
 64 
     | 
    
         
            +
            #        Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
         
     | 
| 
      
 65 
     | 
    
         
            +
            #      end
         
     | 
| 
      
 66 
     | 
    
         
            +
            #    end
         
     | 
| 
      
 67 
     | 
    
         
            +
            #  end
         
     | 
| 
      
 68 
     | 
    
         
            +
            #rescue LoadError
         
     | 
| 
      
 69 
     | 
    
         
            +
            #  puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
         
     | 
| 
      
 70 
     | 
    
         
            +
            #end
         
     | 
| 
      
 71 
     | 
    
         
            +
            #
         
     | 
| 
      
 72 
     | 
    
         
            +
            Jeweler::RubyforgeTasks.new do |rubyforge|
         
     | 
| 
      
 73 
     | 
    
         
            +
              rubyforge.doc_task = "rdoc"
         
     | 
| 
       70 
74 
     | 
    
         
             
            end
         
     | 
| 
       71 
75 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
76 
     | 
    
         
             
            task :default => :test
         
     | 
| 
       74 
77 
     | 
    
         | 
| 
       75 
78 
     | 
    
         
             
            require 'rake/rdoctask'
         
     | 
| 
         @@ -84,7 +87,7 @@ Rake::RDocTask.new do |rdoc| 
     | 
|
| 
       84 
87 
     | 
    
         
             
                '--main' << 'README.rdoc' <<
         
     | 
| 
       85 
88 
     | 
    
         
             
                '--charset' << 'utf-8'
         
     | 
| 
       86 
89 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
              rdoc.rdoc_dir = ' 
     | 
| 
      
 90 
     | 
    
         
            +
              rdoc.rdoc_dir = 'rdoc'
         
     | 
| 
       88 
91 
     | 
    
         
             
              rdoc.title = "Net::SSH::Kerberos #{version}"
         
     | 
| 
       89 
92 
     | 
    
         
             
              rdoc.rdoc_files.include('README*')
         
     | 
| 
       90 
93 
     | 
    
         
             
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
    
        data/VERSION.yml
    CHANGED
    
    
    
        data/example/Capfile
    ADDED
    
    
    
        data/example/gss.rb
    ADDED
    
    | 
         @@ -0,0 +1,91 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 3 
     | 
    
         
            +
            gem 'net-ssh'
         
     | 
| 
      
 4 
     | 
    
         
            +
            $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'net/ssh'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'net/ssh/errors'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'net/ssh/kerberos'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            unless Net::SSH::Kerberos::Drivers.available.include? 'GSS'
         
     | 
| 
      
 10 
     | 
    
         
            +
              $stderr.puts "No drivers supporting GSSAPI could be loaded."
         
     | 
| 
      
 11 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            include Net::SSH::Kerberos::Drivers::GSS
         
     | 
| 
      
 15 
     | 
    
         
            +
            include Net::SSH::Kerberos::Constants
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            result = API.gss_acquire_cred nil, 60, nil, GSS_C_INITIATE, nil, nil, 0
         
     | 
| 
      
 18 
     | 
    
         
            +
            if result.ok?
         
     | 
| 
      
 19 
     | 
    
         
            +
              creds = API._args_[4]
         
     | 
| 
      
 20 
     | 
    
         
            +
              $stderr.puts "gss_acquire_cred: (#{result}) => #{creds.to_i}"
         
     | 
| 
      
 21 
     | 
    
         
            +
              begin
         
     | 
| 
      
 22 
     | 
    
         
            +
                result = API.gss_inquire_cred creds, nil, 0, 0, nil
         
     | 
| 
      
 23 
     | 
    
         
            +
                if result.ok?
         
     | 
| 
      
 24 
     | 
    
         
            +
                  name, oids = API._args_[1], API._args_[4]
         
     | 
| 
      
 25 
     | 
    
         
            +
                  $stderr.puts "gss_inquire_cred: (#{result}) #{oids.inspect}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 27 
     | 
    
         
            +
                    result = API.gss_display_name name, buffer=API::GssBuffer.malloc, nil
         
     | 
| 
      
 28 
     | 
    
         
            +
                    if result.ok?
         
     | 
| 
      
 29 
     | 
    
         
            +
                      oid = API._args_[2]
         
     | 
| 
      
 30 
     | 
    
         
            +
                      $stderr.puts "gss_display_name: (#{result}) #{buffer} #{oid.inspect}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                      result = API.gss_release_buffer buffer
         
     | 
| 
      
 32 
     | 
    
         
            +
                      $stderr.puts "gss_release_buffer: (#{result})"
         
     | 
| 
      
 33 
     | 
    
         
            +
                    else
         
     | 
| 
      
 34 
     | 
    
         
            +
                      $stderr.puts "gss_display_name failed : (#{result})"
         
     | 
| 
      
 35 
     | 
    
         
            +
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 37 
     | 
    
         
            +
                    result = API.gss_release_oid_set oids
         
     | 
| 
      
 38 
     | 
    
         
            +
                    $stderr.puts "gss_release_oid_set: (#{result})"
         
     | 
| 
      
 39 
     | 
    
         
            +
                    result = API.gss_release_name name
         
     | 
| 
      
 40 
     | 
    
         
            +
                    $stderr.puts "gss_release_name: (#{result})"
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                else
         
     | 
| 
      
 43 
     | 
    
         
            +
                  $stderr.puts "gss_inquire_cred failed: (#{result})"
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                target_name = 'host@'+Socket.gethostbyname(`hostname || echo "localhost"`.strip)[0]
         
     | 
| 
      
 48 
     | 
    
         
            +
                buffer = API::GssBuffer.malloc
         
     | 
| 
      
 49 
     | 
    
         
            +
                buffer.value = target_name
         
     | 
| 
      
 50 
     | 
    
         
            +
                buffer.length = target_name.length
         
     | 
| 
      
 51 
     | 
    
         
            +
                API.gss_import_name buffer, GSS_C_NT_HOSTBASED_SERVICE, nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                if result.ok?
         
     | 
| 
      
 53 
     | 
    
         
            +
                  target = API._args_[2]
         
     | 
| 
      
 54 
     | 
    
         
            +
                  $stderr.puts "gss_import_name: (#{result}) #{target.to_i}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 56 
     | 
    
         
            +
                    result = API.gss_display_name target, buffer, nil
         
     | 
| 
      
 57 
     | 
    
         
            +
                    if result.ok?
         
     | 
| 
      
 58 
     | 
    
         
            +
                      oid = API._args_[2]
         
     | 
| 
      
 59 
     | 
    
         
            +
                      $stderr.puts "gss_display_name: (#{result}) #{buffer} #{oid.inspect}"
         
     | 
| 
      
 60 
     | 
    
         
            +
                      result = API.gss_release_buffer buffer
         
     | 
| 
      
 61 
     | 
    
         
            +
                      $stderr.puts "gss_release_buffer: (#{result})"
         
     | 
| 
      
 62 
     | 
    
         
            +
                    else
         
     | 
| 
      
 63 
     | 
    
         
            +
                      $stderr.puts "gss_display_name failed : (#{result})"
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                    result = API.gss_init_sec_context creds, GSS_C_NO_CONTEXT, target, GSS_C_KRB5,
         
     | 
| 
      
 66 
     | 
    
         
            +
                                                      GSS_C_DELEG_FLAG | GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG, 60,
         
     | 
| 
      
 67 
     | 
    
         
            +
                                                      GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, nil, buffer, 0, 0
         
     | 
| 
      
 68 
     | 
    
         
            +
                    if result.ok?
         
     | 
| 
      
 69 
     | 
    
         
            +
                      context, actual_mech = API._args_[1], API._args_[8]
         
     | 
| 
      
 70 
     | 
    
         
            +
                      $stderr.puts "gss_init_sec_context: (#{result}) token.length=#{buffer.length}, #{actual_mech.inspect}"
         
     | 
| 
      
 71 
     | 
    
         
            +
                      result = API.gss_release_buffer buffer
         
     | 
| 
      
 72 
     | 
    
         
            +
                      $stderr.puts "gss_release_buffer: (#{result})"
         
     | 
| 
      
 73 
     | 
    
         
            +
                      result = API.gss_delete_sec_context context, nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                      $stderr.puts "gss_delete_sec_context: (#{result})"
         
     | 
| 
      
 75 
     | 
    
         
            +
                    else
         
     | 
| 
      
 76 
     | 
    
         
            +
                      $stderr.puts "gss_init_sec_context failed : (#{result})"
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 79 
     | 
    
         
            +
                    result = API.gss_release_name target
         
     | 
| 
      
 80 
     | 
    
         
            +
                    $stderr.puts "gss_release_name: (#{result})"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
                else
         
     | 
| 
      
 83 
     | 
    
         
            +
                  $stderr.puts "gss_import_name failed: (#{result})"
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 86 
     | 
    
         
            +
                result = API.gss_release_cred creds
         
     | 
| 
      
 87 
     | 
    
         
            +
                $stderr.puts "gss_release_cred: (#{result})"
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
            else
         
     | 
| 
      
 90 
     | 
    
         
            +
              $stderr.puts "gss_acquire_cred failed: (#{result})"
         
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
    
        data/example/sspi.rb
    ADDED
    
    | 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #$DEBUG = 1
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 5 
     | 
    
         
            +
            gem 'net-ssh'
         
     | 
| 
      
 6 
     | 
    
         
            +
            $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'net/ssh'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'net/ssh/errors'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'net/ssh/kerberos'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            unless Net::SSH::Kerberos::Drivers.available.include? 'SSPI'
         
     | 
| 
      
 12 
     | 
    
         
            +
              $stderr.puts "No drivers supporting SSPI could be loaded."
         
     | 
| 
      
 13 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            include Net::SSH::Kerberos::Drivers::SSPI
         
     | 
| 
      
 17 
     | 
    
         
            +
            include Net::SSH::Kerberos::Constants
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            result = API.querySecurityPackageInfo "Kerberos", nil
         
     | 
| 
      
 20 
     | 
    
         
            +
            if result.ok?
         
     | 
| 
      
 21 
     | 
    
         
            +
              pkg_info = API._args_[1]
         
     | 
| 
      
 22 
     | 
    
         
            +
              $stderr.puts "querySecurityPackageInfo: (#{result}) #{pkg_info.comment} (max_token=#{pkg_info.max_token})"
         
     | 
| 
      
 23 
     | 
    
         
            +
              @max_token = pkg_info.max_token
         
     | 
| 
      
 24 
     | 
    
         
            +
              result = API.freeContextBuffer pkg_info
         
     | 
| 
      
 25 
     | 
    
         
            +
              $stderr.puts "freeContextBuffer: (#{result})"
         
     | 
| 
      
 26 
     | 
    
         
            +
            else
         
     | 
| 
      
 27 
     | 
    
         
            +
              $stderr.puts "querySecurityPackageInfo: (#{result})"
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            result = API.acquireCredentialsHandle nil, "Kerberos", SECPKG_CRED_OUTBOUND, nil, nil, nil, nil,
         
     | 
| 
      
 31 
     | 
    
         
            +
                                                  creds=API::SecHandle.malloc, ts=API::TimeStamp.malloc
         
     | 
| 
      
 32 
     | 
    
         
            +
            if result.ok?
         
     | 
| 
      
 33 
     | 
    
         
            +
              $stderr.puts "acquireCredentialsHandle: (#{result})"
         
     | 
| 
      
 34 
     | 
    
         
            +
              begin
         
     | 
| 
      
 35 
     | 
    
         
            +
                result = API.queryCredentialsAttributes creds, SECPKG_ATTR_NAMES, nil
         
     | 
| 
      
 36 
     | 
    
         
            +
                if result.ok?
         
     | 
| 
      
 37 
     | 
    
         
            +
                  names = API._args_[2]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  $stderr.puts "queryCredentialsAttributes: (#{result}) #{names.to_s}"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  result = API.freeContextBuffer names
         
     | 
| 
      
 40 
     | 
    
         
            +
                  $stderr.puts "freeContextBuffer: (#{result})"
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  token = API::SecBuffer.malloc
         
     | 
| 
      
 43 
     | 
    
         
            +
                  token.type = SECBUFFER_TOKEN
         
     | 
| 
      
 44 
     | 
    
         
            +
                  token.data = "\0" * @max_token
         
     | 
| 
      
 45 
     | 
    
         
            +
                  token.length = @max_token
         
     | 
| 
      
 46 
     | 
    
         
            +
                  output = API::SecBufferDesc.malloc
         
     | 
| 
      
 47 
     | 
    
         
            +
                  output.version = 0
         
     | 
| 
      
 48 
     | 
    
         
            +
                  output.count = 1
         
     | 
| 
      
 49 
     | 
    
         
            +
                  output.buffers = token.to_ptr
         
     | 
| 
      
 50 
     | 
    
         
            +
                  result = API.initializeSecurityContext creds, nil, 'host/'+Socket.gethostbyname('localhost')[0], 
         
     | 
| 
      
 51 
     | 
    
         
            +
                                                         ISC_REQ_DELEGATE | ISC_REQ_MUTUAL_AUTH | ISC_REQ_INTEGRITY, 0, SECURITY_NATIVE_DREP,
         
     | 
| 
      
 52 
     | 
    
         
            +
                                                         nil, 0, ctx=API::SecHandle.malloc, output, 0, ts=API::TimeStamp.malloc
         
     | 
| 
      
 53 
     | 
    
         
            +
                  if result.ok?
         
     | 
| 
      
 54 
     | 
    
         
            +
                    $stderr.puts "initializeSecurityContext: (#{result}) ctx=#{! ctx.nil?} token.length=#{output.buffer(0).length}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    result = API.freeContextBuffer token.data
         
     | 
| 
      
 56 
     | 
    
         
            +
                    $stderr.puts "freeContextBuffer: (#{result})"
         
     | 
| 
      
 57 
     | 
    
         
            +
                    result = API.deleteSecurityContext ctx
         
     | 
| 
      
 58 
     | 
    
         
            +
                    $stderr.puts "deleteSecurityContext: (#{result})"
         
     | 
| 
      
 59 
     | 
    
         
            +
                  else
         
     | 
| 
      
 60 
     | 
    
         
            +
                    $stderr.puts "initializeSecurityContext: (#{result})"
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                else
         
     | 
| 
      
 63 
     | 
    
         
            +
                  $stderr.puts "queryCredentialsAttributes: (#{result})"
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 66 
     | 
    
         
            +
                result = API.freeCredentialsHandle creds
         
     | 
| 
      
 67 
     | 
    
         
            +
                $stderr.puts "freeCredentialsHandle : (#{result})"
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            else
         
     | 
| 
      
 70 
     | 
    
         
            +
              $stderr.puts "acquireCredentialsHandle: (#{result})"
         
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
         @@ -68,22 +68,51 @@ EOCODE 
     | 
|
| 
       68 
68 
     | 
    
         
             
                  end
         
     | 
| 
       69 
69 
     | 
    
         
             
            	    typealias 'gss_buffer_desc', 'GssBuffer'
         
     | 
| 
       70 
70 
     | 
    
         
             
            	    typealias 'gss_buffer_t', 'gss_buffer_desc *'
         
     | 
| 
       71 
     | 
    
         
            -
            	    GssOID 
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
            	    class GssOID
         
     | 
| 
      
 72 
     | 
    
         
            +
            				PACK = (RUBY_PLATFORM =~ /darwin/ ? 'I' : "I@#{DL.sizeof('P')}")+'P'
         
     | 
| 
      
 73 
     | 
    
         
            +
            				ELEMENTS_OFFSET = DL.sizeof(RUBY_PLATFORM =~ /darwin/ ? 'I' : 'P')
         
     | 
| 
      
 74 
     | 
    
         
            +
            				STRUCT_SIZE = ELEMENTS_OFFSET + DL.sizeof('P')
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            				def initialize(ptr)
         
     | 
| 
      
 77 
     | 
    
         
            +
            					@ptr = ptr
         
     | 
| 
      
 78 
     | 
    
         
            +
            				end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            				def self.create(bytes)
         
     | 
| 
      
 81 
     | 
    
         
            +
            					v = [bytes.length, bytes]
         
     | 
| 
      
 82 
     | 
    
         
            +
            					o = new v.pack(PACK).to_ptr
         
     | 
| 
      
 83 
     | 
    
         
            +
            					o.instance_variable_set :@unpack, v
         
     | 
| 
      
 84 
     | 
    
         
            +
            					o
         
     | 
| 
      
 85 
     | 
    
         
            +
            				end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            				def length; unpack[0] end
         
     | 
| 
      
 88 
     | 
    
         
            +
            				def elements; unpack[1] end
         
     | 
| 
      
 89 
     | 
    
         
            +
            				alias to_s elements
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            				def eql?(oid) !oid.nil? && length==oid.length && to_s==oid.to_s end
         
     | 
| 
       73 
92 
     | 
    
         
             
            	      def ==(oid) !oid.nil? && length==oid.length && to_s==oid.to_s end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
      
 93 
     | 
    
         
            +
            	      def inspect; 'OID: ' + (to_s.unpack("H2" * length).join(' ')) end
         
     | 
| 
      
 94 
     | 
    
         
            +
            				def ptr; @ptr end
         
     | 
| 
      
 95 
     | 
    
         
            +
            				alias to_ptr ptr
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            				def self.size; STRUCT_SIZE end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            			private
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            				def unpack
         
     | 
| 
      
 102 
     | 
    
         
            +
            					@unpack ||= (begin
         
     | 
| 
      
 103 
     | 
    
         
            +
            						v = @ptr.to_s(4).unpack('I')[0]
         
     | 
| 
      
 104 
     | 
    
         
            +
            						[ v, (@ptr + ELEMENTS_OFFSET).ptr.to_s(v) ]
         
     | 
| 
      
 105 
     | 
    
         
            +
            					end)
         
     | 
| 
      
 106 
     | 
    
         
            +
            				end
         
     | 
| 
       76 
107 
     | 
    
         
             
            	    end
         
     | 
| 
       77 
     | 
    
         
            -
                  def GssOID.create(bytes) new [bytes.length, bytes].pack("LP#{bytes.length}").to_ptr end
         
     | 
| 
       78 
108 
     | 
    
         
             
            	    typealias 'gss_OID', 'P', PTR_ENC, PTR_DEC(GssOID)
         
     | 
| 
       79 
109 
     | 
    
         
             
            	    typealias 'gss_OID_ref', 'p', PTR_REF_ENC, PTR_REF_DEC(GssOID)
         
     | 
| 
       80 
     | 
    
         
            -
            	    GssOIDSet = struct2 [ "size_t count", " 
     | 
| 
      
 110 
     | 
    
         
            +
            	    GssOIDSet = struct2 [ "size_t count", "void *elements" ] do
         
     | 
| 
       81 
111 
     | 
    
         
             
                    def oids
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                      @oids
         
     | 
| 
      
 112 
     | 
    
         
            +
            					return @oids unless @oids.nil?
         
     | 
| 
      
 113 
     | 
    
         
            +
            					@oids, m = [], GssOID.size
         
     | 
| 
      
 114 
     | 
    
         
            +
            					count.nonzero? and 0.upto(count-1) { |n| @oids[n] = GssOID.new(elements + n * m); @oids[n].ptr.size = m }
         
     | 
| 
      
 115 
     | 
    
         
            +
            					@oids
         
     | 
| 
       87 
116 
     | 
    
         
             
                    end
         
     | 
| 
       88 
117 
     | 
    
         
             
            	      def inspect; 'OIDSet: [' + oids.map {|o| o.inspect }.join(', ') + ']' end
         
     | 
| 
       89 
118 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Generated by jeweler
         
     | 
| 
      
 2 
     | 
    
         
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         
     | 
| 
      
 4 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.name = %q{net-ssh-kerberos}
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.2.2"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.authors = ["Joe Khoobyar"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2009-12-28}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.description = %q{Extends Net::SSH by adding Kerberos authentication capability for password-less logins on multiple platforms.
         
     | 
| 
      
 14 
     | 
    
         
            +
            }
         
     | 
| 
      
 15 
     | 
    
         
            +
              s.email = %q{joe@ankhcraft.com}
         
     | 
| 
      
 16 
     | 
    
         
            +
              s.extra_rdoc_files = [
         
     | 
| 
      
 17 
     | 
    
         
            +
                "LICENSE",
         
     | 
| 
      
 18 
     | 
    
         
            +
                 "README.rdoc"
         
     | 
| 
      
 19 
     | 
    
         
            +
              ]
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.files = [
         
     | 
| 
      
 21 
     | 
    
         
            +
                ".document",
         
     | 
| 
      
 22 
     | 
    
         
            +
                 ".gitignore",
         
     | 
| 
      
 23 
     | 
    
         
            +
                 "LICENSE",
         
     | 
| 
      
 24 
     | 
    
         
            +
                 "README.rdoc",
         
     | 
| 
      
 25 
     | 
    
         
            +
                 "Rakefile",
         
     | 
| 
      
 26 
     | 
    
         
            +
                 "VERSION.yml",
         
     | 
| 
      
 27 
     | 
    
         
            +
                 "example/Capfile",
         
     | 
| 
      
 28 
     | 
    
         
            +
                 "example/gss.rb",
         
     | 
| 
      
 29 
     | 
    
         
            +
                 "example/sspi.rb",
         
     | 
| 
      
 30 
     | 
    
         
            +
                 "lib/net/ssh/authentication/methods/gssapi_with_mic.rb",
         
     | 
| 
      
 31 
     | 
    
         
            +
                 "lib/net/ssh/kerberos.rb",
         
     | 
| 
      
 32 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/constants.rb",
         
     | 
| 
      
 33 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/context.rb",
         
     | 
| 
      
 34 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/drivers.rb",
         
     | 
| 
      
 35 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/drivers/gss.rb",
         
     | 
| 
      
 36 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/drivers/sspi.rb",
         
     | 
| 
      
 37 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/kex.rb",
         
     | 
| 
      
 38 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/kex/krb5_diffie_hellman_group1_sha1.rb",
         
     | 
| 
      
 39 
     | 
    
         
            +
                 "lib/net/ssh/kerberos/kex/krb5_diffie_hellman_group_exchange_sha1.rb",
         
     | 
| 
      
 40 
     | 
    
         
            +
                 "net-ssh-kerberos.gemspec",
         
     | 
| 
      
 41 
     | 
    
         
            +
                 "test/gss_context_test.rb",
         
     | 
| 
      
 42 
     | 
    
         
            +
                 "test/gss_test.rb",
         
     | 
| 
      
 43 
     | 
    
         
            +
                 "test/net_ssh_kerberos_test.rb",
         
     | 
| 
      
 44 
     | 
    
         
            +
                 "test/sspi_context_test.rb",
         
     | 
| 
      
 45 
     | 
    
         
            +
                 "test/sspi_test.rb",
         
     | 
| 
      
 46 
     | 
    
         
            +
                 "test/test_helper.rb"
         
     | 
| 
      
 47 
     | 
    
         
            +
              ]
         
     | 
| 
      
 48 
     | 
    
         
            +
              s.homepage = %q{http://github.com/joekhoobyar/net-ssh-kerberos}
         
     | 
| 
      
 49 
     | 
    
         
            +
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
      
 50 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 51 
     | 
    
         
            +
              s.required_ruby_version = Gem::Requirement.new("< 1.9")
         
     | 
| 
      
 52 
     | 
    
         
            +
              s.rubyforge_project = %q{net-ssh-krb}
         
     | 
| 
      
 53 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.5}
         
     | 
| 
      
 54 
     | 
    
         
            +
              s.summary = %q{Add Kerberos support to Net::SSH}
         
     | 
| 
      
 55 
     | 
    
         
            +
              s.test_files = [
         
     | 
| 
      
 56 
     | 
    
         
            +
                "test/gss_context_test.rb",
         
     | 
| 
      
 57 
     | 
    
         
            +
                 "test/gss_test.rb",
         
     | 
| 
      
 58 
     | 
    
         
            +
                 "test/net_ssh_kerberos_test.rb",
         
     | 
| 
      
 59 
     | 
    
         
            +
                 "test/sspi_context_test.rb",
         
     | 
| 
      
 60 
     | 
    
         
            +
                 "test/sspi_test.rb",
         
     | 
| 
      
 61 
     | 
    
         
            +
                 "test/test_helper.rb"
         
     | 
| 
      
 62 
     | 
    
         
            +
              ]
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              if s.respond_to? :specification_version then
         
     | 
| 
      
 65 
     | 
    
         
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
      
 66 
     | 
    
         
            +
                s.specification_version = 3
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         
     | 
| 
      
 69 
     | 
    
         
            +
                  s.add_runtime_dependency(%q<net-ssh>, [">= 2.0"])
         
     | 
| 
      
 70 
     | 
    
         
            +
                else
         
     | 
| 
      
 71 
     | 
    
         
            +
                  s.add_dependency(%q<net-ssh>, [">= 2.0"])
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              else
         
     | 
| 
      
 74 
     | 
    
         
            +
                s.add_dependency(%q<net-ssh>, [">= 2.0"])
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: net-ssh-kerberos
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Joe Khoobyar
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2009- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2009-12-28 00:00:00 -05:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -34,10 +34,15 @@ extra_rdoc_files: 
     | 
|
| 
       34 
34 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       35 
35 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       36 
36 
     | 
    
         
             
            files: 
         
     | 
| 
      
 37 
     | 
    
         
            +
            - .document
         
     | 
| 
      
 38 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
       37 
39 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       38 
40 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       39 
41 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       40 
42 
     | 
    
         
             
            - VERSION.yml
         
     | 
| 
      
 43 
     | 
    
         
            +
            - example/Capfile
         
     | 
| 
      
 44 
     | 
    
         
            +
            - example/gss.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - example/sspi.rb
         
     | 
| 
       41 
46 
     | 
    
         
             
            - lib/net/ssh/authentication/methods/gssapi_with_mic.rb
         
     | 
| 
       42 
47 
     | 
    
         
             
            - lib/net/ssh/kerberos.rb
         
     | 
| 
       43 
48 
     | 
    
         
             
            - lib/net/ssh/kerberos/constants.rb
         
     | 
| 
         @@ -48,6 +53,7 @@ files: 
     | 
|
| 
       48 
53 
     | 
    
         
             
            - lib/net/ssh/kerberos/kex.rb
         
     | 
| 
       49 
54 
     | 
    
         
             
            - lib/net/ssh/kerberos/kex/krb5_diffie_hellman_group1_sha1.rb
         
     | 
| 
       50 
55 
     | 
    
         
             
            - lib/net/ssh/kerberos/kex/krb5_diffie_hellman_group_exchange_sha1.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - net-ssh-kerberos.gemspec
         
     | 
| 
       51 
57 
     | 
    
         
             
            - test/gss_context_test.rb
         
     | 
| 
       52 
58 
     | 
    
         
             
            - test/gss_test.rb
         
     | 
| 
       53 
59 
     | 
    
         
             
            - test/net_ssh_kerberos_test.rb
         
     | 
| 
         @@ -78,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       78 
84 
     | 
    
         
             
            requirements: []
         
     | 
| 
       79 
85 
     | 
    
         | 
| 
       80 
86 
     | 
    
         
             
            rubyforge_project: net-ssh-krb
         
     | 
| 
       81 
     | 
    
         
            -
            rubygems_version: 1.3. 
     | 
| 
      
 87 
     | 
    
         
            +
            rubygems_version: 1.3.5
         
     | 
| 
       82 
88 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       83 
89 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       84 
90 
     | 
    
         
             
            summary: Add Kerberos support to Net::SSH
         
     |