Sha256: eb5742dfc72f169efbb8a17a7078bbedd6a406e02b7ed3a490f82cef6c15e64b

Contents?: true

Size: 1.29 KB

Versions: 3

Compression:

Stored size: 1.29 KB

Contents

require 'krb5/mixin/packer'

class KRB5
  class Principal
    include KRB5::Mixin::Packer

    # @return [KRB5::Keytab]
    attr_accessor :keytab

    attr_accessor :realm, :components, :name_type

    # Place to store byte array for #to_bytes
    # @return [Sting, nil]
    attr_accessor :bytes

    def initialize(keytab)
      @keytab = keytab
      @components = []
    end

    def to_s
      components.join('/') + "@" + realm
    end

    # principal ::=
    #     count of components (16 bits) [includes realm in version 1]
    #     realm (data)
    #     component1 (data)
    #     component2 (data)
    #     ...
    #     name type (32 bits) [omitted in version 1]
    def to_bytes
      @bytes = []

      pack_count_of_components
      pack_data(realm)
      components.each do |component|
        pack_data(component)
      end
      pack_int32(name_type)

      @bytes.join
    end

    def pack_count_of_components
      if keytab.version == 1
        # Component length includes realm in v1 Keytabs
        pack_int16(components.length + 1)
      elsif keytab.version == 2
        pack_int16(components.length)
      end
    end

    def ==(other)
      %i[realm components name_type].each do |state|
        return false unless other.send(state) == self.send(state)
      end

      true
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
krb5-ruby-0.2.5 lib/krb5/principal.rb
krb5-ruby-0.2.4 lib/krb5/principal.rb
krb5-ruby-0.2.3 lib/krb5/principal.rb