Skip to content

Commit 378a198

Browse files
authored
Merge pull request #347 from yodaldevoid/ScottCUSA/add_userauth_banner
Add Session.userauth_banner
2 parents 90b2988 + 4341536 commit 378a198

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/session.rs

+21
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,27 @@ impl Session {
662662
}
663663
}
664664

665+
/// Retrieve banner message from server, if available.
666+
///
667+
/// When no such message is sent by server or if no authentication attempt has
668+
/// been made, this function returns LIBSSH2_ERROR_MISSING_AUTH_BANNER.
669+
///
670+
/// The return value is the userauth banner or None or an Error
671+
pub fn userauth_banner(&self) -> Result<Option<&str>, Error> {
672+
let mut userauth_banner = null_mut();
673+
let inner = self.inner();
674+
match unsafe { raw::libssh2_userauth_banner(inner.raw, &mut userauth_banner)} {
675+
0 => {
676+
unsafe {
677+
Ok(::opt_bytes(self, userauth_banner).and_then(|s| str::from_utf8(s).ok()))
678+
}
679+
},
680+
rc => {
681+
Err(Error::from_errno(ErrorCode::Session(rc)))
682+
}
683+
}
684+
}
685+
665686
/// Set preferred key exchange method
666687
///
667688
/// The preferences provided are a comma delimited list of preferred methods

tests/all/session.rs

+13
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ fn smoke_handshake() {
5858
sess.host_key_hash(HashType::Md5).unwrap();
5959
}
6060

61+
#[test]
62+
fn smoke_userauth_banner() {
63+
let user = env::var("USER").unwrap();
64+
let socket = ::socket();
65+
let mut sess = Session::new().unwrap();
66+
sess.set_tcp_stream(socket);
67+
sess.handshake().unwrap();
68+
sess.host_key().unwrap();
69+
sess.auth_methods(&user).unwrap();
70+
let banner = sess.userauth_banner().unwrap().unwrap();
71+
assert_eq!(banner, "Authorized access only!");
72+
}
73+
6174
#[test]
6275
fn keyboard_interactive() {
6376
let user = env::var("USER").unwrap();

tests/run_integration_tests.sh

+3
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ cp $SSHDIR/id_rsa.pub $SSHDIR/authorized_keys
3232

3333
ssh-keygen -f $SSHDIR/ssh_host_rsa_key -N '' -t rsa
3434

35+
echo -n "Authorized access only!" > $SSHDIR/banner
36+
3537
cat > $SSHDIR/sshd_config <<-EOT
3638
AuthorizedKeysFile=$SSHDIR/authorized_keys
3739
HostKey=$SSHDIR/ssh_host_rsa_key
3840
PidFile=$SSHDIR/sshd.pid
41+
Banner $SSHDIR/banner
3942
Subsystem sftp internal-sftp
4043
UsePAM yes
4144
X11Forwarding yes

0 commit comments

Comments
 (0)