Class: RubySMB::Gss::Provider::NTLM
- Includes:
- NTLM
- Defined in:
- lib/ruby_smb/gss/provider/ntlm.rb
Overview
A GSS provider that authenticates clients via the NT LAN Manager (NTLM) Security Support Provider (NTLMSSP) protocol.
Defined Under Namespace
Classes: Account, Authenticator
Constant Summary
Constants included from NTLM
NTLM::DEFAULT_CLIENT_FLAGS, NTLM::NEGOTIATE_FLAGS
Instance Attribute Summary collapse
-
#default_domain ⇒ Object
readonly
The default domain value to use for accounts which do not have one specified or use the special '.' value.
-
#dns_domain ⇒ Object
Returns the value of attribute dns_domain.
-
#dns_hostname ⇒ Object
Returns the value of attribute dns_hostname.
-
#netbios_domain ⇒ Object
Returns the value of attribute netbios_domain.
-
#netbios_hostname ⇒ Object
Returns the value of attribute netbios_hostname.
Attributes inherited from Base
Instance Method Summary collapse
-
#generate_server_challenge(&block) ⇒ String
Generate the 8-byte server challenge.
-
#get_account(username, domain: nil) ⇒ Account?
Lookup and return an account based on the username and optionally, the domain.
-
#initialize(allow_anonymous: false, default_domain: 'WORKGROUP') ⇒ NTLM
constructor
A new instance of NTLM.
- #new_authenticator(server_client) ⇒ Object
-
#put_account(username, password, domain: nil) ⇒ Object
Add an account to the database.
Constructor Details
#initialize(allow_anonymous: false, default_domain: 'WORKGROUP') ⇒ NTLM
Returns a new instance of NTLM.
251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 251 def initialize(allow_anonymous: false, default_domain: 'WORKGROUP') raise ArgumentError, 'Must specify a default domain' unless default_domain @allow_anonymous = allow_anonymous @default_domain = default_domain @accounts = [] @generate_server_challenge = -> { SecureRandom.bytes(8) } @dns_domain = @netbios_domain = 'LOCALDOMAIN' @dns_hostname = @netbios_hostname = 'LOCALHOST' end |
Instance Attribute Details
#default_domain ⇒ Object (readonly)
The default domain value to use for accounts which do not have one specified or use the special '.' value.
311 312 313 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 311 def default_domain @default_domain end |
#dns_domain ⇒ Object
Returns the value of attribute dns_domain.
313 314 315 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 313 def dns_domain @dns_domain end |
#dns_hostname ⇒ Object
Returns the value of attribute dns_hostname.
313 314 315 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 313 def dns_hostname @dns_hostname end |
#netbios_domain ⇒ Object
Returns the value of attribute netbios_domain.
313 314 315 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 313 def netbios_domain @netbios_domain end |
#netbios_hostname ⇒ Object
Returns the value of attribute netbios_hostname.
313 314 315 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 313 def netbios_hostname @netbios_hostname end |
Instance Method Details
#generate_server_challenge(&block) ⇒ String
Generate the 8-byte server challenge. If a block is specified, it's used as the challenge generation routine and should return an 8-byte value.
268 269 270 271 272 273 274 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 268 def generate_server_challenge(&block) if block.nil? @generate_server_challenge.call else @generate_server_challenge = block end end |
#get_account(username, domain: nil) ⇒ Account?
Lookup and return an account based on the username and optionally, the domain. If no domain is specified or or it is the special value '.', the default domain will be used. The username and domain values are case insensitive.
290 291 292 293 294 295 296 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 290 def get_account(username, domain: nil) # the username and password values should use the native encoding for the comparison in the #find operation username = username.downcase domain = @default_domain if domain.nil? || domain == '.'.encode(domain.encoding) domain = domain.downcase @accounts.find { |account| account.username.encode(username.encoding).downcase == username && account.domain.encode(domain.encoding).downcase == domain } end |
#new_authenticator(server_client) ⇒ Object
276 277 278 279 280 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 276 def new_authenticator(server_client) # build and return an instance that can process and track stateful information for a particular connection but # that's backed by this particular provider Authenticator.new(self, server_client) end |
#put_account(username, password, domain: nil) ⇒ Object
Add an account to the database.
304 305 306 307 |
# File 'lib/ruby_smb/gss/provider/ntlm.rb', line 304 def put_account(username, password, domain: nil) domain = @default_domain if domain.nil? || domain == '.'.encode(domain.encoding) @accounts << Account.new(username, password, domain) end |