1
0
Fork 0
rust-ssh2-config/src/parser/field.rs
Daniel Baumann 19551ac12c
Adding upstream version 0.5.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-06 06:52:03 +02:00

673 lines
25 KiB
Rust

//! # field
//!
//! Ssh config fields
use std::fmt;
use std::str::FromStr;
/// Configuration field.
/// This enum defines ALL THE SUPPORTED fields in ssh config,
/// as described at <http://man.openbsd.org/OpenBSD-current/man5/ssh_config.5>.
/// Only a few of them are implemented, as described in `HostParams` struct.
#[derive(Debug, Eq, PartialEq)]
pub enum Field {
Host,
BindAddress,
BindInterface,
CaSignatureAlgorithms,
CertificateFile,
Ciphers,
Compression,
ConnectionAttempts,
ConnectTimeout,
HostKeyAlgorithms,
HostName,
IdentityFile,
IgnoreUnknown,
KexAlgorithms,
Mac,
Port,
PubkeyAcceptedAlgorithms,
PubkeyAuthentication,
RemoteForward,
ServerAliveInterval,
TcpKeepAlive,
#[cfg(target_os = "macos")]
UseKeychain,
User,
// -- not implemented
AddKeysToAgent,
AddressFamily,
BatchMode,
CanonicalDomains,
CanonicalizeFallbackLock,
CanonicalizeHostname,
CanonicalizeMaxDots,
CanonicalizePermittedCNAMEs,
CheckHostIP,
ClearAllForwardings,
ControlMaster,
ControlPath,
ControlPersist,
DynamicForward,
EnableSSHKeysign,
EscapeChar,
ExitOnForwardFailure,
FingerprintHash,
ForkAfterAuthentication,
ForwardAgent,
ForwardX11,
ForwardX11Timeout,
ForwardX11Trusted,
GatewayPorts,
GlobalKnownHostsFile,
GSSAPIAuthentication,
GSSAPIDelegateCredentials,
HashKnownHosts,
HostbasedAcceptedAlgorithms,
HostbasedAuthentication,
HostbasedKeyTypes,
HostKeyAlias,
IdentitiesOnly,
IdentityAgent,
Include,
IPQoS,
KbdInteractiveAuthentication,
KbdInteractiveDevices,
KnownHostsCommand,
LocalCommand,
LocalForward,
LogLevel,
LogVerbose,
NoHostAuthenticationForLocalhost,
NumberOfPasswordPrompts,
PasswordAuthentication,
PermitLocalCommand,
PermitRemoteOpen,
PKCS11Provider,
PreferredAuthentications,
ProxyCommand,
ProxyJump,
ProxyUseFdpass,
PubkeyAcceptedKeyTypes,
RekeyLimit,
RequestTTY,
RevokedHostKeys,
SecruityKeyProvider,
SendEnv,
ServerAliveCountMax,
SessionType,
SetEnv,
StdinNull,
StreamLocalBindMask,
StrictHostKeyChecking,
SyslogFacility,
UpdateHostKeys,
UserKnownHostsFile,
VerifyHostKeyDNS,
VisualHostKey,
XAuthLocation,
}
impl FromStr for Field {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"host" => Ok(Self::Host),
"bindaddress" => Ok(Self::BindAddress),
"bindinterface" => Ok(Self::BindInterface),
"casignaturealgorithms" => Ok(Self::CaSignatureAlgorithms),
"certificatefile" => Ok(Self::CertificateFile),
"ciphers" => Ok(Self::Ciphers),
"compression" => Ok(Self::Compression),
"connectionattempts" => Ok(Self::ConnectionAttempts),
"connecttimeout" => Ok(Self::ConnectTimeout),
"hostkeyalgorithms" => Ok(Self::HostKeyAlgorithms),
"hostname" => Ok(Self::HostName),
"identityfile" => Ok(Self::IdentityFile),
"ignoreunknown" => Ok(Self::IgnoreUnknown),
"kexalgorithms" => Ok(Self::KexAlgorithms),
"macs" => Ok(Self::Mac),
"port" => Ok(Self::Port),
"pubkeyacceptedalgorithms" => Ok(Self::PubkeyAcceptedAlgorithms),
"pubkeyauthentication" => Ok(Self::PubkeyAuthentication),
"remoteforward" => Ok(Self::RemoteForward),
"serveraliveinterval" => Ok(Self::ServerAliveInterval),
"tcpkeepalive" => Ok(Self::TcpKeepAlive),
#[cfg(target_os = "macos")]
"usekeychain" => Ok(Self::UseKeychain),
"user" => Ok(Self::User),
// -- not implemented fields
"addkeystoagent" => Ok(Self::AddKeysToAgent),
"addressfamily" => Ok(Self::AddressFamily),
"batchmode" => Ok(Self::BatchMode),
"canonicaldomains" => Ok(Self::CanonicalDomains),
"canonicalizefallbacklock" => Ok(Self::CanonicalizeFallbackLock),
"canonicalizehostname" => Ok(Self::CanonicalizeHostname),
"canonicalizemaxdots" => Ok(Self::CanonicalizeMaxDots),
"canonicalizepermittedcnames" => Ok(Self::CanonicalizePermittedCNAMEs),
"checkhostip" => Ok(Self::CheckHostIP),
"clearallforwardings" => Ok(Self::ClearAllForwardings),
"controlmaster" => Ok(Self::ControlMaster),
"controlpath" => Ok(Self::ControlPath),
"controlpersist" => Ok(Self::ControlPersist),
"dynamicforward" => Ok(Self::DynamicForward),
"enablesshkeysign" => Ok(Self::EnableSSHKeysign),
"escapechar" => Ok(Self::EscapeChar),
"exitonforwardfailure" => Ok(Self::ExitOnForwardFailure),
"fingerprinthash" => Ok(Self::FingerprintHash),
"forkafterauthentication" => Ok(Self::ForkAfterAuthentication),
"forwardagent" => Ok(Self::ForwardAgent),
"forwardx11" => Ok(Self::ForwardX11),
"forwardx11timeout" => Ok(Self::ForwardX11Timeout),
"forwardx11trusted" => Ok(Self::ForwardX11Trusted),
"gatewayports" => Ok(Self::GatewayPorts),
"globalknownhostsfile" => Ok(Self::GlobalKnownHostsFile),
"gssapiauthentication" => Ok(Self::GSSAPIAuthentication),
"gssapidelegatecredentials" => Ok(Self::GSSAPIDelegateCredentials),
"hashknownhosts" => Ok(Self::HashKnownHosts),
"hostbasedacceptedalgorithms" => Ok(Self::HostbasedAcceptedAlgorithms),
"hostbasedauthentication" => Ok(Self::HostbasedAuthentication),
"hostkeyalias" => Ok(Self::HostKeyAlias),
"hostbasedkeytypes" => Ok(Self::HostbasedKeyTypes),
"identitiesonly" => Ok(Self::IdentitiesOnly),
"identityagent" => Ok(Self::IdentityAgent),
"include" => Ok(Self::Include),
"ipqos" => Ok(Self::IPQoS),
"kbdinteractiveauthentication" => Ok(Self::KbdInteractiveAuthentication),
"kbdinteractivedevices" => Ok(Self::KbdInteractiveDevices),
"knownhostscommand" => Ok(Self::KnownHostsCommand),
"localcommand" => Ok(Self::LocalCommand),
"localforward" => Ok(Self::LocalForward),
"loglevel" => Ok(Self::LogLevel),
"logverbose" => Ok(Self::LogVerbose),
"nohostauthenticationforlocalhost" => Ok(Self::NoHostAuthenticationForLocalhost),
"numberofpasswordprompts" => Ok(Self::NumberOfPasswordPrompts),
"passwordauthentication" => Ok(Self::PasswordAuthentication),
"permitlocalcommand" => Ok(Self::PermitLocalCommand),
"permitremoteopen" => Ok(Self::PermitRemoteOpen),
"pkcs11provider" => Ok(Self::PKCS11Provider),
"preferredauthentications" => Ok(Self::PreferredAuthentications),
"proxycommand" => Ok(Self::ProxyCommand),
"proxyjump" => Ok(Self::ProxyJump),
"proxyusefdpass" => Ok(Self::ProxyUseFdpass),
"pubkeyacceptedkeytypes" => Ok(Self::PubkeyAcceptedKeyTypes),
"rekeylimit" => Ok(Self::RekeyLimit),
"requesttty" => Ok(Self::RequestTTY),
"revokedhostkeys" => Ok(Self::RevokedHostKeys),
"secruitykeyprovider" => Ok(Self::SecruityKeyProvider),
"sendenv" => Ok(Self::SendEnv),
"serveralivecountmax" => Ok(Self::ServerAliveCountMax),
"sessiontype" => Ok(Self::SessionType),
"setenv" => Ok(Self::SetEnv),
"stdinnull" => Ok(Self::StdinNull),
"streamlocalbindmask" => Ok(Self::StreamLocalBindMask),
"stricthostkeychecking" => Ok(Self::StrictHostKeyChecking),
"syslogfacility" => Ok(Self::SyslogFacility),
"updatehostkeys" => Ok(Self::UpdateHostKeys),
"userknownhostsfile" => Ok(Self::UserKnownHostsFile),
"verifyhostkeydns" => Ok(Self::VerifyHostKeyDNS),
"visualhostkey" => Ok(Self::VisualHostKey),
"xauthlocation" => Ok(Self::XAuthLocation),
// -- unknwon field
_ => Err(s.to_string()),
}
}
}
impl fmt::Display for Field {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
Self::Host => "host",
Self::BindAddress => "bindaddress",
Self::BindInterface => "bindinterface",
Self::CaSignatureAlgorithms => "casignaturealgorithms",
Self::CertificateFile => "certificatefile",
Self::Ciphers => "ciphers",
Self::Compression => "compression",
Self::ConnectionAttempts => "connectionattempts",
Self::ConnectTimeout => "connecttimeout",
Self::HostKeyAlgorithms => "hostkeyalgorithms",
Self::HostName => "hostname",
Self::IdentityFile => "identityfile",
Self::IgnoreUnknown => "ignoreunknown",
Self::KexAlgorithms => "kexalgorithms",
Self::Mac => "macs",
Self::Port => "port",
Self::PubkeyAcceptedAlgorithms => "pubkeyacceptedalgorithms",
Self::PubkeyAuthentication => "pubkeyauthentication",
Self::RemoteForward => "remoteforward",
Self::ServerAliveInterval => "serveraliveinterval",
Self::TcpKeepAlive => "tcpkeepalive",
#[cfg(target_os = "macos")]
Self::UseKeychain => "usekeychain",
Self::User => "user",
// Continuation of the rest of the enum variants
Self::AddKeysToAgent => "addkeystoagent",
Self::AddressFamily => "addressfamily",
Self::BatchMode => "batchmode",
Self::CanonicalDomains => "canonicaldomains",
Self::CanonicalizeFallbackLock => "canonicalizefallbacklock",
Self::CanonicalizeHostname => "canonicalizehostname",
Self::CanonicalizeMaxDots => "canonicalizemaxdots",
Self::CanonicalizePermittedCNAMEs => "canonicalizepermittedcnames",
Self::CheckHostIP => "checkhostip",
Self::ClearAllForwardings => "clearallforwardings",
Self::ControlMaster => "controlmaster",
Self::ControlPath => "controlpath",
Self::ControlPersist => "controlpersist",
Self::DynamicForward => "dynamicforward",
Self::EnableSSHKeysign => "enablesshkeysign",
Self::EscapeChar => "escapechar",
Self::ExitOnForwardFailure => "exitonforwardfailure",
Self::FingerprintHash => "fingerprinthash",
Self::ForkAfterAuthentication => "forkafterauthentication",
Self::ForwardAgent => "forwardagent",
Self::ForwardX11 => "forwardx11",
Self::ForwardX11Timeout => "forwardx11timeout",
Self::ForwardX11Trusted => "forwardx11trusted",
Self::GatewayPorts => "gatewayports",
Self::GlobalKnownHostsFile => "globalknownhostsfile",
Self::GSSAPIAuthentication => "gssapiauthentication",
Self::GSSAPIDelegateCredentials => "gssapidelegatecredentials",
Self::HashKnownHosts => "hashknownhosts",
Self::HostbasedAcceptedAlgorithms => "hostbasedacceptedalgorithms",
Self::HostbasedAuthentication => "hostbasedauthentication",
Self::HostKeyAlias => "hostkeyalias",
Self::HostbasedKeyTypes => "hostbasedkeytypes",
Self::IdentitiesOnly => "identitiesonly",
Self::IdentityAgent => "identityagent",
Self::Include => "include",
Self::IPQoS => "ipqos",
Self::KbdInteractiveAuthentication => "kbdinteractiveauthentication",
Self::KbdInteractiveDevices => "kbdinteractivedevices",
Self::KnownHostsCommand => "knownhostscommand",
Self::LocalCommand => "localcommand",
Self::LocalForward => "localforward",
Self::LogLevel => "loglevel",
Self::LogVerbose => "logverbose",
Self::NoHostAuthenticationForLocalhost => "nohostauthenticationforlocalhost",
Self::NumberOfPasswordPrompts => "numberofpasswordprompts",
Self::PasswordAuthentication => "passwordauthentication",
Self::PermitLocalCommand => "permitlocalcommand",
Self::PermitRemoteOpen => "permitremoteopen",
Self::PKCS11Provider => "pkcs11provider",
Self::PreferredAuthentications => "preferredauthentications",
Self::ProxyCommand => "proxycommand",
Self::ProxyJump => "proxyjump",
Self::ProxyUseFdpass => "proxyusefdpass",
Self::PubkeyAcceptedKeyTypes => "pubkeyacceptedkeytypes",
Self::RekeyLimit => "rekeylimit",
Self::RequestTTY => "requesttty",
Self::RevokedHostKeys => "revokedhostkeys",
Self::SecruityKeyProvider => "secruitykeyprovider",
Self::SendEnv => "sendenv",
Self::ServerAliveCountMax => "serveralivecountmax",
Self::SessionType => "sessiontype",
Self::SetEnv => "setenv",
Self::StdinNull => "stdinnull",
Self::StreamLocalBindMask => "streamlocalbindmask",
Self::StrictHostKeyChecking => "stricthostkeychecking",
Self::SyslogFacility => "syslogfacility",
Self::UpdateHostKeys => "updatehostkeys",
Self::UserKnownHostsFile => "userknownhostsfile",
Self::VerifyHostKeyDNS => "verifyhostkeydns",
Self::VisualHostKey => "visualhostkey",
Self::XAuthLocation => "xauthlocation",
};
write!(f, "{}", s)
}
}
#[cfg(test)]
mod test {
use pretty_assertions::assert_eq;
use super::*;
#[test]
fn should_parse_field_from_string() {
assert_eq!(Field::from_str("Host").ok().unwrap(), Field::Host);
assert_eq!(
Field::from_str("BindAddress").ok().unwrap(),
Field::BindAddress
);
assert_eq!(
Field::from_str("BindInterface").ok().unwrap(),
Field::BindInterface
);
assert_eq!(
Field::from_str("CaSignatureAlgorithms").ok().unwrap(),
Field::CaSignatureAlgorithms
);
assert_eq!(
Field::from_str("CertificateFile").ok().unwrap(),
Field::CertificateFile
);
assert_eq!(Field::from_str("Ciphers").ok().unwrap(), Field::Ciphers);
assert_eq!(
Field::from_str("Compression").ok().unwrap(),
Field::Compression
);
assert_eq!(
Field::from_str("ConnectionAttempts").ok().unwrap(),
Field::ConnectionAttempts
);
assert_eq!(
Field::from_str("ConnectTimeout").ok().unwrap(),
Field::ConnectTimeout
);
assert_eq!(Field::from_str("HostName").ok().unwrap(), Field::HostName);
assert_eq!(
Field::from_str("IdentityFile").ok().unwrap(),
Field::IdentityFile
);
assert_eq!(
Field::from_str("IgnoreUnknown").ok().unwrap(),
Field::IgnoreUnknown
);
assert_eq!(Field::from_str("Macs").ok().unwrap(), Field::Mac);
assert_eq!(
Field::from_str("PubkeyAcceptedAlgorithms").ok().unwrap(),
Field::PubkeyAcceptedAlgorithms
);
assert_eq!(
Field::from_str("PubkeyAuthentication").ok().unwrap(),
Field::PubkeyAuthentication
);
assert_eq!(
Field::from_str("RemoteForward").ok().unwrap(),
Field::RemoteForward
);
assert_eq!(
Field::from_str("TcpKeepAlive").ok().unwrap(),
Field::TcpKeepAlive
);
#[cfg(target_os = "macos")]
assert_eq!(
Field::from_str("UseKeychain").ok().unwrap(),
Field::UseKeychain
);
assert_eq!(Field::from_str("User").ok().unwrap(), Field::User);
assert_eq!(
Field::from_str("AddKeysToAgent").ok().unwrap(),
Field::AddKeysToAgent
);
assert_eq!(
Field::from_str("AddressFamily").ok().unwrap(),
Field::AddressFamily
);
assert_eq!(Field::from_str("BatchMode").ok().unwrap(), Field::BatchMode);
assert_eq!(
Field::from_str("CanonicalDomains").ok().unwrap(),
Field::CanonicalDomains
);
assert_eq!(
Field::from_str("CanonicalizeFallbackLock").ok().unwrap(),
Field::CanonicalizeFallbackLock
);
assert_eq!(
Field::from_str("CanonicalizeHostname").ok().unwrap(),
Field::CanonicalizeHostname
);
assert_eq!(
Field::from_str("CanonicalizeMaxDots").ok().unwrap(),
Field::CanonicalizeMaxDots
);
assert_eq!(
Field::from_str("CanonicalizePermittedCNAMEs").ok().unwrap(),
Field::CanonicalizePermittedCNAMEs
);
assert_eq!(
Field::from_str("CheckHostIP").ok().unwrap(),
Field::CheckHostIP
);
assert_eq!(
Field::from_str("ClearAllForwardings").ok().unwrap(),
Field::ClearAllForwardings
);
assert_eq!(
Field::from_str("ControlMaster").ok().unwrap(),
Field::ControlMaster
);
assert_eq!(
Field::from_str("ControlPath").ok().unwrap(),
Field::ControlPath
);
assert_eq!(
Field::from_str("ControlPersist").ok().unwrap(),
Field::ControlPersist
);
assert_eq!(
Field::from_str("DynamicForward").ok().unwrap(),
Field::DynamicForward
);
assert_eq!(
Field::from_str("EnableSSHKeysign").ok().unwrap(),
Field::EnableSSHKeysign
);
assert_eq!(
Field::from_str("EscapeChar").ok().unwrap(),
Field::EscapeChar
);
assert_eq!(
Field::from_str("ExitOnForwardFailure").ok().unwrap(),
Field::ExitOnForwardFailure
);
assert_eq!(
Field::from_str("FingerprintHash").ok().unwrap(),
Field::FingerprintHash
);
assert_eq!(
Field::from_str("ForkAfterAuthentication").ok().unwrap(),
Field::ForkAfterAuthentication
);
assert_eq!(
Field::from_str("ForwardAgent").ok().unwrap(),
Field::ForwardAgent
);
assert_eq!(
Field::from_str("ForwardX11").ok().unwrap(),
Field::ForwardX11
);
assert_eq!(
Field::from_str("ForwardX11Timeout").ok().unwrap(),
Field::ForwardX11Timeout
);
assert_eq!(
Field::from_str("ForwardX11Trusted").ok().unwrap(),
Field::ForwardX11Trusted,
);
assert_eq!(
Field::from_str("GatewayPorts").ok().unwrap(),
Field::GatewayPorts
);
assert_eq!(
Field::from_str("GlobalKnownHostsFile").ok().unwrap(),
Field::GlobalKnownHostsFile
);
assert_eq!(
Field::from_str("GSSAPIAuthentication").ok().unwrap(),
Field::GSSAPIAuthentication
);
assert_eq!(
Field::from_str("GSSAPIDelegateCredentials").ok().unwrap(),
Field::GSSAPIDelegateCredentials
);
assert_eq!(
Field::from_str("HashKnownHosts").ok().unwrap(),
Field::HashKnownHosts
);
assert_eq!(
Field::from_str("HostbasedAcceptedAlgorithms").ok().unwrap(),
Field::HostbasedAcceptedAlgorithms
);
assert_eq!(
Field::from_str("HostbasedAuthentication").ok().unwrap(),
Field::HostbasedAuthentication
);
assert_eq!(
Field::from_str("HostKeyAlgorithms").ok().unwrap(),
Field::HostKeyAlgorithms
);
assert_eq!(
Field::from_str("HostKeyAlias").ok().unwrap(),
Field::HostKeyAlias
);
assert_eq!(
Field::from_str("HostbasedKeyTypes").ok().unwrap(),
Field::HostbasedKeyTypes
);
assert_eq!(
Field::from_str("IdentitiesOnly").ok().unwrap(),
Field::IdentitiesOnly
);
assert_eq!(
Field::from_str("IdentityAgent").ok().unwrap(),
Field::IdentityAgent
);
assert_eq!(Field::from_str("Include").ok().unwrap(), Field::Include);
assert_eq!(Field::from_str("IPQoS").ok().unwrap(), Field::IPQoS);
assert_eq!(
Field::from_str("KbdInteractiveAuthentication")
.ok()
.unwrap(),
Field::KbdInteractiveAuthentication
);
assert_eq!(
Field::from_str("KbdInteractiveDevices").ok().unwrap(),
Field::KbdInteractiveDevices
);
assert_eq!(
Field::from_str("KnownHostsCommand").ok().unwrap(),
Field::KnownHostsCommand
);
assert_eq!(
Field::from_str("LocalCommand").ok().unwrap(),
Field::LocalCommand
);
assert_eq!(
Field::from_str("LocalForward").ok().unwrap(),
Field::LocalForward
);
assert_eq!(Field::from_str("LogLevel").ok().unwrap(), Field::LogLevel);
assert_eq!(
Field::from_str("LogVerbose").ok().unwrap(),
Field::LogVerbose
);
assert_eq!(
Field::from_str("NoHostAuthenticationForLocalhost")
.ok()
.unwrap(),
Field::NoHostAuthenticationForLocalhost
);
assert_eq!(
Field::from_str("NumberOfPasswordPrompts").ok().unwrap(),
Field::NumberOfPasswordPrompts
);
assert_eq!(
Field::from_str("PasswordAuthentication").ok().unwrap(),
Field::PasswordAuthentication
);
assert_eq!(
Field::from_str("PermitLocalCommand").ok().unwrap(),
Field::PermitLocalCommand
);
assert_eq!(
Field::from_str("PermitRemoteOpen").ok().unwrap(),
Field::PermitRemoteOpen
);
assert_eq!(
Field::from_str("PKCS11Provider").ok().unwrap(),
Field::PKCS11Provider
);
assert_eq!(Field::from_str("Port").ok().unwrap(), Field::Port);
assert_eq!(
Field::from_str("PreferredAuthentications").ok().unwrap(),
Field::PreferredAuthentications
);
assert_eq!(
Field::from_str("ProxyCommand").ok().unwrap(),
Field::ProxyCommand
);
assert_eq!(Field::from_str("ProxyJump").ok().unwrap(), Field::ProxyJump);
assert_eq!(
Field::from_str("ProxyUseFdpass").ok().unwrap(),
Field::ProxyUseFdpass
);
assert_eq!(
Field::from_str("PubkeyAcceptedKeyTypes").ok().unwrap(),
Field::PubkeyAcceptedKeyTypes
);
assert_eq!(
Field::from_str("RekeyLimit").ok().unwrap(),
Field::RekeyLimit
);
assert_eq!(
Field::from_str("RequestTTY").ok().unwrap(),
Field::RequestTTY
);
assert_eq!(
Field::from_str("RevokedHostKeys").ok().unwrap(),
Field::RevokedHostKeys
);
assert_eq!(
Field::from_str("SecruityKeyProvider").ok().unwrap(),
Field::SecruityKeyProvider
);
assert_eq!(Field::from_str("SendEnv").ok().unwrap(), Field::SendEnv);
assert_eq!(
Field::from_str("ServerAliveCountMax").ok().unwrap(),
Field::ServerAliveCountMax
);
assert_eq!(
Field::from_str("ServerAliveInterval").ok().unwrap(),
Field::ServerAliveInterval
);
assert_eq!(
Field::from_str("SessionType").ok().unwrap(),
Field::SessionType
);
assert_eq!(Field::from_str("SetEnv").ok().unwrap(), Field::SetEnv);
assert_eq!(Field::from_str("StdinNull").ok().unwrap(), Field::StdinNull);
assert_eq!(
Field::from_str("StreamLocalBindMask").ok().unwrap(),
Field::StreamLocalBindMask
);
assert_eq!(
Field::from_str("StrictHostKeyChecking").ok().unwrap(),
Field::StrictHostKeyChecking
);
assert_eq!(
Field::from_str("SyslogFacility").ok().unwrap(),
Field::SyslogFacility
);
assert_eq!(
Field::from_str("UpdateHostKeys").ok().unwrap(),
Field::UpdateHostKeys
);
assert_eq!(
Field::from_str("UserKnownHostsFile").ok().unwrap(),
Field::UserKnownHostsFile
);
assert_eq!(
Field::from_str("VerifyHostKeyDNS").ok().unwrap(),
Field::VerifyHostKeyDNS
);
assert_eq!(
Field::from_str("VisualHostKey").ok().unwrap(),
Field::VisualHostKey
);
assert_eq!(
Field::from_str("XAuthLocation").ok().unwrap(),
Field::XAuthLocation
);
}
#[test]
fn should_fail_parsing_field() {
assert!(Field::from_str("CristinaDavena").is_err());
}
}