\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/gssapi-1.3.0/lib/gssapi/

Viewing File: lib_gssapi_loader.rb

=begin
Copyright © 2010 Dan Wanek <dan.wanek@gmail.com>

Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
=end
module GSSAPI
  module LibGSSAPI

    class GssOID < FFI::Struct
      layout  :length, :OM_uint32,
        :elements, :pointer # pointer of :void

      def self.gss_c_no_oid
        self.new(GSSAPI::LibGSSAPI::GSS_C_NO_OID)
      end
    end


    def self.load_mit
      host_os = RbConfig::CONFIG['host_os']
      case host_os
      when /linux/
        gssapi_lib = 'libgssapi_krb5.so.2'
        ffi_lib gssapi_lib, FFI::Library::LIBC
      when /darwin/
        gssapi_lib = '/usr/lib/libgssapi_krb5.dylib'
        ffi_lib gssapi_lib, FFI::Library::LIBC
      when /mswin|mingw32|windows/
        # Pull the gssapi32 path from the environment if it exist, otherwise use the default in Program Files
        gssapi32_path = ENV['gssapi32'] ? ENV['gssapi32'] : 'C:\Program Files (x86)\MIT\Kerberos\bin\gssapi32.dll'
        ffi_lib gssapi32_path, FFI::Library::LIBC  # Required the MIT Kerberos libraries to be installed
        ffi_convention :stdcall
      when /solaris/
        ffi_lib 'libgss.so', 'mech_krb5.so', FFI::Library::LIBC
      else
        raise LoadError, "This host OS (#{host_os}) is not supported by ruby gssapi and the MIT libraries."
      end

      # -------------------- MIT Specifics --------------------
      attach_variable :__GSS_C_NT_HOSTBASED_SERVICE, :GSS_C_NT_HOSTBASED_SERVICE, :pointer # type gss_OID
      attach_variable :__GSS_C_NT_EXPORT_NAME, :GSS_C_NT_EXPORT_NAME, :pointer # type gss_OID
      LibGSSAPI.const_set("GSS_C_NT_HOSTBASED_SERVICE", __GSS_C_NT_HOSTBASED_SERVICE)
      LibGSSAPI.const_set("GSS_C_NT_EXPORT_NAME", __GSS_C_NT_EXPORT_NAME)
    end

    def self.load_heimdal
      host_os = RbConfig::CONFIG['host_os']
      case host_os
      when /linux/
        gssapi_lib = 'libgssapi.so.3'
      when /darwin/
        # use Heimdal Kerberos since Mac MIT Kerberos is OLD. Do a "require 'gssapi/heimdal'" first
        gssapi_lib = '/usr/heimdal/lib/libgssapi.dylib'
      else
        raise LoadError, "This host OS (#{host_os}) is not supported by ruby gssapi and the Heimdal libraries."
      end
      ffi_lib gssapi_lib, FFI::Library::LIBC

      # ------------------ Heimdal Specifics ------------------
      attach_variable :__gss_c_nt_hostbased_service_oid_desc, GssOID
      attach_variable :__gss_c_nt_export_name_oid_desc, GssOID
      LibGSSAPI.const_set("GSS_C_NT_HOSTBASED_SERVICE", FFI::Pointer.new(__gss_c_nt_hostbased_service_oid_desc.to_ptr))
      LibGSSAPI.const_set("GSS_C_NT_EXPORT_NAME", FFI::Pointer.new(__gss_c_nt_export_name_oid_desc.to_ptr))
    end

    # Heimdal supported the *_iov functions before MIT did so in some OS distributions if
    # you need IOV support and MIT does not provide it try the Heimdal libs and then
    # before doing a "require 'gssapi'" do a "require 'gssapi/heimdal'" and that will attempt
    # to load the Heimdal libs
    case GSSAPI_LIB_TYPE
    when :mit
      load_mit
    when :heimdal
      load_heimdal
    else
      raise LoadError, "Unexpected Lib type: #{GSSAPI_LIB_TYPE}"
    end

  end
end