1
1

Improve and document ssh_get_banner().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@483 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Andreas Schneider 2009-04-16 07:49:44 +00:00
родитель 1f1e9dc15b
Коммит 160f6a08d0

Просмотреть файл

@ -33,34 +33,49 @@
if (opt->connect_status_function) \
opt->connect_status_function(opt->connect_status_arg, status); \
} while (0)
/* simply gets a banner from a socket */
char *ssh_get_banner(SSH_SESSION *session){
char buffer[128];
int i = 0;
char *ret;
/**
* @internal
*
* @brief Get a banner from a socket.
*
* The caller has to free memroy.
*
* @param session The session to get the banner from.
*
* @return A newly allocated string with the banner or NULL on error.
*/
char *ssh_get_banner(SSH_SESSION *session) {
char buffer[128] = {0};
char *str = NULL;
int i;
enter_function();
while (i < 127) {
if(ssh_socket_read(session->socket, &buffer[i], 1)!= SSH_OK){
ssh_set_error(session,SSH_FATAL,"Remote host closed connection");
for (i = 0; i < 127; i++) {
if (ssh_socket_read(session->socket, &buffer[i], 1) != SSH_OK) {
ssh_set_error(session, SSH_FATAL, "Remote host closed connection");
leave_function();
return NULL;
}
if (buffer[i] == '\r')
buffer[i] = 0;
if (buffer[i] == '\r') {
buffer[i] = '\0';
}
if (buffer[i] == '\n') {
buffer[i] = 0;
ret = strdup(buffer);
if (ret == NULL) {
buffer[i] = '\0';
str = strdup(buffer);
if (str == NULL) {
leave_function();
return NULL;
}
leave_function();
return ret;
return str;
}
i++;
}
ssh_set_error(session,SSH_FATAL,"Too large banner");
ssh_set_error(session, SSH_FATAL, "Too large banner");
leave_function();
return NULL;
}