[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Quick question about some patches
[Thread Prev] | [Thread Next]
- Subject: Re: Quick question about some patches
- From: Andreas Schneider <asn@xxxxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Mon, 02 May 2016 09:10:55 +0200
- To: libssh@xxxxxxxxxx
On Friday, April 08, 2016 11:12:36 AM Kenneth Reister wrote: > I and a colleague submitted some patches. I was able to find his in the > commit logs. One in the 0.7.3 branch and the other 2 in master. I could > not find mine at all (see > http://www.libssh.org/archive/libssh/2015-11/0000000.html) > > What can I do to make sure that my patch gets committed? > Do you have an estimate of when a release of the master branch will be > forthcoming? Hello! I've had it on my todo list but time didn't permit to work on libssh. Sorry! Your Signed-off: is missing. I've added it to the patch and then reformatted the function. Please check if the attached patch is fine with you! Best regards, -- andreas
From 6329a012301bb031a9b00ad5a14f49a0d3166d59 Mon Sep 17 00:00:00 2001
From: Ken Reister <reister.kenneth@xxxxxxxxxx>
Date: Wed, 14 Oct 2015 15:50:49 -0500
Subject: [PATCH 1/2] client: Receive the banner correctly
Comply with RFC 4253 compliance section 4.2.
Allow data other than "SSH-" to be sent across prior to the actual
version striong.
Signed-off-by: Ken Reister <reister.kenneth@xxxxxxxxxx>
Reviewed-by: Andreas Schneider <asn@xxxxxxxxxxxxxx>
---
src/client.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/client.c b/src/client.c
index 0cca110..c389d79 100644
--- a/src/client.c
+++ b/src/client.c
@@ -113,6 +113,8 @@ static int callback_receive_banner(const void *data, size_t len, void *user) {
}
if (buffer[i]=='\n') {
buffer[i] = '\0';
+ /* The server MAY send other lines of data... */
+ if (strncmp(buffer, "SSH-", 4) == 0) {
str = strdup(buffer);
if (str == NULL) {
return SSH_ERROR;
@@ -125,6 +127,11 @@ static int callback_receive_banner(const void *data, size_t len, void *user) {
session->ssh_connection_callback(session);
return ret;
+ } else {
+ SSH_LOG(SSH_LOG_DEBUG, "ssh_protocol_version_exchange: %s", buffer);
+ ret = i + 1;
+ break;
+ }
}
if(i>127){
/* Too big banner */
--
2.5.5
From a734bfae8d86f5387dfb1847773046263bed1c45 Mon Sep 17 00:00:00 2001
From: Andreas Schneider <asn@xxxxxxxxxxxxxx>
Date: Mon, 2 May 2016 09:06:51 +0200
Subject: [PATCH 2/2] client: Reformat callback_receive_banner()
The function is hard to read as the indentation is not correctly
applied.
Signed-off-by: Andreas Schneider <asn@xxxxxxxxxxxxxx>
---
src/client.c | 111 +++++++++++++++++++++++++++++++++--------------------------
1 file changed, 62 insertions(+), 49 deletions(-)
diff --git a/src/client.c b/src/client.c
index c389d79..918c8b9 100644
--- a/src/client.c
+++ b/src/client.c
@@ -90,59 +90,72 @@ static void socket_callback_connected(int code, int errno_code, void *user){
* @param user is a pointer to session
* @returns Number of bytes processed, or zero if the banner is not complete.
*/
-static int callback_receive_banner(const void *data, size_t len, void *user) {
- char *buffer = (char *)data;
- ssh_session session=(ssh_session) user;
- char *str = NULL;
- size_t i;
- int ret=0;
-
- if(session->session_state != SSH_SESSION_STATE_SOCKET_CONNECTED){
- ssh_set_error(session,SSH_FATAL,"Wrong state in callback_receive_banner : %d",session->session_state);
-
- return SSH_ERROR;
- }
- for(i=0;i<len;++i){
+static int callback_receive_banner(const void *data, size_t len, void *user)
+{
+ char *buffer = (char *)data;
+ ssh_session session=(ssh_session) user;
+ char *str = NULL;
+ size_t i;
+ int ret=0;
+
+ if (session->session_state != SSH_SESSION_STATE_SOCKET_CONNECTED) {
+ ssh_set_error(session,SSH_FATAL,
+ "Wrong state in callback_receive_banner : %d",
+ session->session_state);
+
+ return SSH_ERROR;
+ }
+ for (i = 0; i < len; ++i) {
#ifdef WITH_PCAP
- if(session->pcap_ctx && buffer[i] == '\n'){
- ssh_pcap_context_write(session->pcap_ctx,SSH_PCAP_DIR_IN,buffer,i+1,i+1);
- }
+ if (session->pcap_ctx && buffer[i] == '\n') {
+ ssh_pcap_context_write(session->pcap_ctx,
+ SSH_PCAP_DIR_IN,
+ buffer,i+1,
+ i+1);
+ }
#endif
- if(buffer[i]=='\r') {
- buffer[i]='\0';
- }
- if (buffer[i]=='\n') {
- buffer[i] = '\0';
- /* The server MAY send other lines of data... */
- if (strncmp(buffer, "SSH-", 4) == 0) {
- str = strdup(buffer);
- if (str == NULL) {
- return SSH_ERROR;
+ if (buffer[i] == '\r') {
+ buffer[i] = '\0';
}
- /* number of bytes read */
- ret = i + 1;
- session->serverbanner = str;
- session->session_state=SSH_SESSION_STATE_BANNER_RECEIVED;
- SSH_LOG(SSH_LOG_PACKET,"Received banner: %s",str);
- session->ssh_connection_callback(session);
-
- return ret;
- } else {
- SSH_LOG(SSH_LOG_DEBUG, "ssh_protocol_version_exchange: %s", buffer);
- ret = i + 1;
- break;
- }
- }
- if(i>127){
- /* Too big banner */
- session->session_state=SSH_SESSION_STATE_ERROR;
- ssh_set_error(session,SSH_FATAL,"Receiving banner: too large banner");
-
- return 0;
- }
- }
+ if (buffer[i] == '\n') {
+ buffer[i] = '\0';
+ int cmp;
+
+ /* The server MAY send other lines of data... */
+ cmp = strncmp(buffer, "SSH-", 4);
+ if (cmp == 0) {
+ str = strdup(buffer);
+ if (str == NULL) {
+ return SSH_ERROR;
+ }
+ /* number of bytes read */
+ ret = i + 1;
+ session->serverbanner = str;
+ session->session_state = SSH_SESSION_STATE_BANNER_RECEIVED;
+ SSH_LOG(SSH_LOG_PACKET, "Received banner: %s", str);
+ session->ssh_connection_callback(session);
+
+ return ret;
+ } else {
+ SSH_LOG(SSH_LOG_DEBUG,
+ "ssh_protocol_version_exchange: %s",
+ buffer);
+ ret = i + 1;
+ break;
+ }
+ }
+ if (i > 127) {
+ /* Too big banner */
+ session->session_state=SSH_SESSION_STATE_ERROR;
+ ssh_set_error(session,
+ SSH_FATAL,
+ "Receiving banner: too large banner");
+
+ return 0;
+ }
+ }
- return ret;
+ return ret;
}
/** @internal
--
2.5.5
| Re: Quick question about some patches | Kenneth Reister <reister.kenneth@xxxxxxxxxx> |