rubyntlm 0.6.4 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/net/ntlm/encode_util.rb +1 -1
- data/lib/net/ntlm/message.rb +14 -6
- data/lib/net/ntlm/version.rb +1 -1
- data/lib/net/ntlm.rb +12 -1
- data/spec/lib/net/ntlm/message/type3_spec.rb +22 -1
- data/spec/lib/net/ntlm_spec.rb +8 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 12b18439c86b30b978043850938e3ec611230d2e0783828d6db337dfe4ea97ad
         | 
| 4 | 
            +
              data.tar.gz: 872a21844c21c9f64815abd312156c3fcddb8ebedc5185ec128106b6714b8521
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 03df0639b70648b2db81684060ce732d46f21a392590f4995ddb4c97399036ffc8d9a47fd1460b64441a34bebdbabfbd1f3d625bf1246a9e178a0901770f0ee5
         | 
| 7 | 
            +
              data.tar.gz: e3ff9341eb1738c501fe90d9456a8203e5771af2c459bb53f0168e24cbdd549540a0369d9a83f2864dce4fac86595cca4c7207b88f11a1b843d9fdbf52b59b20
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,10 @@ | |
| 1 1 | 
             
            # Change Log
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 0.6.5 (2024-06-11)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Update available NegotiateFlags during authentication
         | 
| 6 | 
            +
            * Fix NTLMv2 hash when username contains non-ASCII characters by @cdelafuente-r7 in https://github.com/WinRb/rubyntlm/pull/56
         | 
| 7 | 
            +
             | 
| 3 8 | 
             
            ## 0.6.4 (2024-06-06)
         | 
| 4 9 |  | 
| 5 10 | 
             
            * Fix applying DES-CBC when using OpenSSL 3 by @paulvt in https://github.com/WinRb/rubyntlm/pull/51
         | 
    
        data/lib/net/ntlm/encode_util.rb
    CHANGED
    
    | @@ -39,7 +39,7 @@ module NTLM | |
| 39 39 | 
             
                  #   the function will convert the string bytes to UTF-16LE and note the encoding as UTF-8 so that byte
         | 
| 40 40 | 
             
                  #   concatination works seamlessly.
         | 
| 41 41 | 
             
                  def self.encode_utf16le(str)
         | 
| 42 | 
            -
                    str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding(' | 
| 42 | 
            +
                    str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding('ASCII-8BIT')
         | 
| 43 43 | 
             
                  end
         | 
| 44 44 | 
             
                end
         | 
| 45 45 | 
             
              end
         | 
    
        data/lib/net/ntlm/message.rb
    CHANGED
    
    | @@ -3,28 +3,36 @@ module NTLM | |
| 3 3 |  | 
| 4 4 | 
             
              SSP_SIGN = "NTLMSSP\0"
         | 
| 5 5 |  | 
| 6 | 
            +
              # See [2.2.2.5 NEGOTIATE](https://msdn.microsoft.com/en-us/library/cc236650.aspx)
         | 
| 6 7 | 
             
              FLAGS = {
         | 
| 7 8 | 
             
                  :UNICODE              => 0x00000001,
         | 
| 8 9 | 
             
                  :OEM                  => 0x00000002,
         | 
| 9 10 | 
             
                  :REQUEST_TARGET       => 0x00000004,
         | 
| 10 | 
            -
                  :MBZ9                 => 0x00000008,
         | 
| 11 11 | 
             
                  :SIGN                 => 0x00000010,
         | 
| 12 12 | 
             
                  :SEAL                 => 0x00000020,
         | 
| 13 13 | 
             
                  :NEG_DATAGRAM         => 0x00000040,
         | 
| 14 | 
            -
                  : | 
| 14 | 
            +
                  :NEG_LM_KEY           => 0x00000080,
         | 
| 15 15 | 
             
                  :NTLM                 => 0x00000200,
         | 
| 16 | 
            -
                  : | 
| 17 | 
            -
                  :MBZ7                 => 0x00000800,
         | 
| 16 | 
            +
                  :NEG_ANONYMOUS        => 0x00000800,
         | 
| 18 17 | 
             
                  :DOMAIN_SUPPLIED      => 0x00001000,
         | 
| 19 18 | 
             
                  :WORKSTATION_SUPPLIED => 0x00002000,
         | 
| 20 | 
            -
                  :LOCAL_CALL           => 0x00004000,
         | 
| 21 19 | 
             
                  :ALWAYS_SIGN          => 0x00008000,
         | 
| 22 20 | 
             
                  :TARGET_TYPE_DOMAIN   => 0x00010000,
         | 
| 21 | 
            +
                  :TARGET_TYPE_SERVER   => 0x00020000,
         | 
| 23 22 | 
             
                  :NTLM2_KEY            => 0x00080000,
         | 
| 23 | 
            +
                  :NEG_IDENTIFY         => 0x00100000,
         | 
| 24 | 
            +
                  :NON_NT_SESSION_KEY   => 0x00400000,
         | 
| 24 25 | 
             
                  :TARGET_INFO          => 0x00800000,
         | 
| 26 | 
            +
                  :NEG_VERSION          => 0x02000000,
         | 
| 25 27 | 
             
                  :KEY128               => 0x20000000,
         | 
| 26 28 | 
             
                  :KEY_EXCHANGE         => 0x40000000,
         | 
| 27 | 
            -
                  :KEY56                => 0x80000000
         | 
| 29 | 
            +
                  :KEY56                => 0x80000000,
         | 
| 30 | 
            +
                  # Undocumented flags:
         | 
| 31 | 
            +
                  :MBZ9                 => 0x00000008,
         | 
| 32 | 
            +
                  :NETWARE              => 0x00000100,
         | 
| 33 | 
            +
                  :NEG_NT_ONLY          => 0x00000400,
         | 
| 34 | 
            +
                  :MBZ7                 => 0x00000800, # alias for :NEG_ANONYMOUS
         | 
| 35 | 
            +
                  :LOCAL_CALL           => 0x00004000,
         | 
| 28 36 | 
             
              }.freeze
         | 
| 29 37 |  | 
| 30 38 | 
             
              FLAG_KEYS = FLAGS.keys.sort{|a, b| FLAGS[a] <=> FLAGS[b] }
         | 
    
        data/lib/net/ntlm/version.rb
    CHANGED
    
    
    
        data/lib/net/ntlm.rb
    CHANGED
    
    | @@ -166,7 +166,18 @@ module Net | |
| 166 166 | 
             
                    else
         | 
| 167 167 | 
             
                      ntlmhash = ntlm_hash(password, opt)
         | 
| 168 168 | 
             
                    end
         | 
| 169 | 
            -
             | 
| 169 | 
            +
             | 
| 170 | 
            +
                    if opt[:unicode]
         | 
| 171 | 
            +
                      # Uppercase operation on username containing non-ASCI characters
         | 
| 172 | 
            +
                      # after behing unicode encoded with `EncodeUtil.encode_utf16le`
         | 
| 173 | 
            +
                      # doesn't play well. Upcase should be done before encoding.
         | 
| 174 | 
            +
                      user_upcase = EncodeUtil.decode_utf16le(user).upcase
         | 
| 175 | 
            +
                      user_upcase = EncodeUtil.encode_utf16le(user_upcase)
         | 
| 176 | 
            +
                    else
         | 
| 177 | 
            +
                      user_upcase = user.upcase
         | 
| 178 | 
            +
                    end
         | 
| 179 | 
            +
                    userdomain = user_upcase + target
         | 
| 180 | 
            +
             | 
| 170 181 | 
             
                    unless opt[:unicode]
         | 
| 171 182 | 
             
                      userdomain = EncodeUtil.encode_utf16le(userdomain)
         | 
| 172 183 | 
             
                    end
         | 
| @@ -222,7 +222,28 @@ describe Net::NTLM::Message::Type3 do | |
| 222 222 |  | 
| 223 223 | 
             
              end
         | 
| 224 224 |  | 
| 225 | 
            -
              describe ' | 
| 225 | 
            +
              describe '#serialize' do
         | 
| 226 | 
            +
                context 'when the username contains non-ASCI characters' do
         | 
| 227 | 
            +
                  let(:t3) {
         | 
| 228 | 
            +
                    t2 = Net::NTLM::Message::Type2.new
         | 
| 229 | 
            +
                    t2.response(
         | 
| 230 | 
            +
                      {
         | 
| 231 | 
            +
                        :user => 'Hélène',
         | 
| 232 | 
            +
                        :password => '123456',
         | 
| 233 | 
            +
                        :domain => ''
         | 
| 234 | 
            +
                      },
         | 
| 235 | 
            +
                      {
         | 
| 236 | 
            +
                        :ntlmv2 => true,
         | 
| 237 | 
            +
                        :workstation => 'testlab.local'
         | 
| 238 | 
            +
                      }
         | 
| 239 | 
            +
                    )
         | 
| 240 | 
            +
                  }
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                  it 'serializes without error' do
         | 
| 243 | 
            +
                    expect { t3.serialize }.not_to raise_error
         | 
| 244 | 
            +
                  end
         | 
| 245 | 
            +
                end
         | 
| 246 | 
            +
             | 
| 226 247 | 
             
                subject(:message) { described_class.create(opts) }
         | 
| 227 248 | 
             
                context 'with the UNICODE flag set' do
         | 
| 228 249 | 
             
                  let(:opts) { {lm_response: "\x00".b, ntlm_response: '', domain: '', workstation: '', user: '', flag: Net::NTLM::DEFAULT_FLAGS[:TYPE3] | Net::NTLM::FLAGS[:UNICODE] } }
         | 
    
        data/spec/lib/net/ntlm_spec.rb
    CHANGED
    
    | @@ -59,6 +59,14 @@ describe Net::NTLM do | |
| 59 59 | 
             
                end
         | 
| 60 60 | 
             
              end
         | 
| 61 61 |  | 
| 62 | 
            +
              context 'when the username contains non-ASCI characters' do
         | 
| 63 | 
            +
                let(:user) { 'юзер' }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                it 'should return the correct ntlmv2 hash' do
         | 
| 66 | 
            +
                  expect(Net::NTLM::ntlmv2_hash(user, passwd, domain, { unicode: true })).to eq(["a0f4b914a37faeaee884b6b04a20faf0"].pack("H*"))
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 62 70 | 
             
              it 'should generate an lm_response' do
         | 
| 63 71 | 
             
                expect(Net::NTLM::lm_response(
         | 
| 64 72 | 
             
                    {
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rubyntlm
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.6. | 
| 4 | 
            +
              version: 0.6.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Kohei Kajimoto
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2024-06- | 
| 12 | 
            +
            date: 2024-06-12 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: github_changelog_generator
         |