mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-11 18:50:28 +09:00
Improve ssh_send_banner() and add error checking of strdup.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@342 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
@@ -51,6 +51,10 @@ char *ssh_get_banner(SSH_SESSION *session){
|
|||||||
if (buffer[i] == '\n') {
|
if (buffer[i] == '\n') {
|
||||||
buffer[i] = 0;
|
buffer[i] = 0;
|
||||||
ret = strdup(buffer);
|
ret = strdup(buffer);
|
||||||
|
if (ret == NULL) {
|
||||||
|
leave_function();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
leave_function();
|
leave_function();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -91,25 +95,42 @@ static int ssh_analyze_banner(SSH_SESSION *session, int *ssh1, int *ssh2){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \internal
|
/** @internal
|
||||||
* \brief ssh_send_banner sends a SSH banner to the server
|
* @brief Sends a SSH banner to the server.
|
||||||
|
*
|
||||||
|
* @param session The SSH session to use.
|
||||||
|
*
|
||||||
|
* @param server Send client or server banner.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int ssh_send_banner(SSH_SESSION *session, int server) {
|
int ssh_send_banner(SSH_SESSION *session, int server) {
|
||||||
char *banner;
|
const char *banner;
|
||||||
char buffer[128];
|
char buffer[128] = {0};
|
||||||
|
|
||||||
enter_function();
|
enter_function();
|
||||||
banner = session->version == 1 ? CLIENTBANNER1 : CLIENTBANNER2;
|
banner = session->version == 1 ? CLIENTBANNER1 : CLIENTBANNER2;
|
||||||
if(session->options->banner)
|
|
||||||
|
if (session->options->banner) {
|
||||||
banner=session->options->banner;
|
banner=session->options->banner;
|
||||||
if(server)
|
}
|
||||||
|
|
||||||
|
if (server) {
|
||||||
session->serverbanner = strdup(banner);
|
session->serverbanner = strdup(banner);
|
||||||
else
|
if (session->serverbanner == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
session->clientbanner = strdup(banner);
|
session->clientbanner = strdup(banner);
|
||||||
|
if (session->clientbanner == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
snprintf(buffer, 128, "%s\r\n", banner);
|
snprintf(buffer, 128, "%s\r\n", banner);
|
||||||
ssh_socket_write(session->socket, buffer, strlen(buffer));
|
ssh_socket_write(session->socket, buffer, strlen(buffer));
|
||||||
ssh_socket_blocking_flush(session->socket);
|
ssh_socket_blocking_flush(session->socket);
|
||||||
leave_function();
|
leave_function();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user