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:
Andreas Schneider
2009-04-02 09:31:02 +00:00
parent ae4265d304
commit d60783eeb7

View File

@@ -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;
} }