模块 Net::IMAP::SASL::GS2Header

最初在 RFC5801 中为 GS2 机制家族定义,几种不同的机制以 GS2 头部开始

包含此模块的类必须实现 #authzid

常量

RFC5801_SASLNAME

匹配 RFC5801 §4 saslnamegs2_saslname_encode 的输出与此正则表达式匹配。

公共实例方法

gs2_authzid() 点击以切换源代码

#authzid 不为空时,RFC5801 §4 gs2-authzid 头部。

如果 #authzid 为空或 nil,则返回一个空字符串。

# File net-imap-0.5.4/lib/net/imap/sasl/gs2_header.rb, line 59
def gs2_authzid
  return "" if authzid.nil? || authzid == ""
  "a=#{gs2_saslname_encode(authzid)}"
end
gs2_cb_flag() 点击以切换源代码

RFC5801 §4 gs2-cb-flag

n

客户端不支持通道绑定。

y

客户端支持通道绑定,但认为服务器不支持。

p

客户端需要通道绑定。选定的通道绑定紧随“p=”之后。

默认始终返回“n”。支持通道绑定的机制必须覆盖此方法。

# File net-imap-0.5.4/lib/net/imap/sasl/gs2_header.rb, line 53
def gs2_cb_flag; "n" end
gs2_header() 点击以切换源代码

RFC5801 §4 gs2-header,它是 initial_client_response 的前缀。

注意:实际的 GS2 头部包含一个可选标志,指示 GSS 机制不是“标准”的,但由于所有使用 GS2 的 SASL 机制都是“标准”的,因此我们不包含该标志。非标准 GSSAPI 机制的类应以 “F,” 为前缀。

# File net-imap-0.5.4/lib/net/imap/sasl/gs2_header.rb, line 37
def gs2_header
  "#{gs2_cb_flag},#{gs2_authzid},"
end
gs2_saslname_encode(str) 点击以切换源代码

编码 str 以匹配 RFC5801_SASLNAME

# File net-imap-0.5.4/lib/net/imap/sasl/gs2_header.rb, line 67
def gs2_saslname_encode(str)
  str = str.encode("UTF-8")
  # Regexp#match raises "invalid byte sequence" for invalid UTF-8
  NO_NULL_CHARS.match str or
    raise ArgumentError, "invalid saslname: %p" % [str]
  str
    .gsub(?=, "=3D")
    .gsub(?,, "=2C")
end