aboutsummaryrefslogtreecommitdiff
path: root/libssh/messages.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-09 14:22:29 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-09 14:22:29 +0000
commite5b7e8fdfc6e31121a992b6dd0912d2f46ffda70 (patch)
treee25ca86964de34a5be2e46537652a515fc590feb /libssh/messages.c
parent3fab89b22fb1c39865ab6b71ab79d663923e724f (diff)
downloadlibssh-e5b7e8fdfc6e31121a992b6dd0912d2f46ffda70.tar.gz
libssh-e5b7e8fdfc6e31121a992b6dd0912d2f46ffda70.tar.xz
libssh-e5b7e8fdfc6e31121a992b6dd0912d2f46ffda70.zip
Add error checks to ssh_message_auth_reply_default().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@443 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/messages.c')
-rw-r--r--libssh/messages.c99
1 files changed, 63 insertions, 36 deletions
diff --git a/libssh/messages.c b/libssh/messages.c
index 65d9550..4f0a4b4 100644
--- a/libssh/messages.c
+++ b/libssh/messages.c
@@ -117,9 +117,9 @@ static SSH_MESSAGE *handle_userauth_request(SSH_SESSION *session){
STRING *method = NULL;
SSH_MESSAGE *msg = NULL;
char *service_c = NULL;
- char *method_c = NULL
+ char *method_c = NULL;
- enter_function();
+ enter_function();
msg = message_new(session);
if (msg == NULL) {
@@ -173,7 +173,7 @@ static SSH_MESSAGE *handle_userauth_request(SSH_SESSION *session){
}
if (strcmp(method_c, "password") == 0) {
- STRING *pass == NULL;
+ STRING *pass = NULL;
u8 tmp;
msg->auth_request.method = SSH_AUTH_PASSWORD;
@@ -212,7 +212,7 @@ error:
}
char *ssh_message_auth_user(SSH_MESSAGE *msg) {
- if (msg == NULL || msg->auth_request == NULL) {
+ if (msg == NULL) {
return NULL;
}
@@ -220,7 +220,7 @@ char *ssh_message_auth_user(SSH_MESSAGE *msg) {
}
char *ssh_message_auth_password(SSH_MESSAGE *msg){
- if (msg == NULL || msg->auth_request == NULL) {
+ if (msg == NULL) {
return NULL;
}
@@ -237,38 +237,65 @@ int ssh_message_auth_set_methods(SSH_MESSAGE *msg, int methods) {
return 0;
}
-static int ssh_message_auth_reply_default(SSH_MESSAGE *msg,int partial){
- char methods_c[128]="";
- STRING *methods;
- SSH_SESSION *session=msg->session;
- int ret;
- enter_function();
- buffer_add_u8(session->out_buffer,SSH2_MSG_USERAUTH_FAILURE);
- if(session->auth_methods==0){
- session->auth_methods=SSH_AUTH_PUBLICKEY|SSH_AUTH_PASSWORD;
+static int ssh_message_auth_reply_default(SSH_MESSAGE *msg,int partial) {
+ SSH_SESSION *session = msg->session;
+ char methods_c[128] = {0};
+ STRING *methods = NULL;
+ int rc = SSH_ERROR;
+
+ enter_function();
+
+ if (buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_FAILURE) < 0) {
+ return rc;
+ }
+
+ if (session->auth_methods == 0) {
+ session->auth_methods = SSH_AUTH_PUBLICKEY | SSH_AUTH_PASSWORD;
+ }
+ if (session->auth_methods & SSH_AUTH_PUBLICKEY) {
+ strcat(methods_c, "publickey,");
+ }
+ if (session->auth_methods & SSH_AUTH_KEYBINT) {
+ strcat(methods_c, "keyboard-interactive,");
+ }
+ if (session->auth_methods & SSH_AUTH_PASSWORD) {
+ strcat(methods_c, "password,");
+ }
+ if (session->auth_methods & SSH_AUTH_HOSTBASED) {
+ strcat(methods_c, "hostbased,");
+ }
+
+ /* Strip the comma. */
+ methods_c[strlen(methods_c) - 1] = '\0'; // strip the comma. We are sure there is at
+
+ ssh_log(session, SSH_LOG_PACKET,
+ "Sending a auth failure. methods that can continue: %s", methods_c);
+
+ methods = string_from_char(methods_c);
+ if (methods == NULL) {
+ goto error;
+ }
+
+ if (buffer_add_ssh_string(msg->session->out_buffer, methods) < 0) {
+ goto error;
+ }
+
+ if (partial) {
+ if (buffer_add_u8(session->out_buffer, 1) < 0) {
+ goto error;
}
- if(session->auth_methods & SSH_AUTH_PUBLICKEY)
- strcat(methods_c,"publickey,");
- if(session->auth_methods & SSH_AUTH_KEYBINT)
- strcat(methods_c,"keyboard-interactive,");
- if(session->auth_methods & SSH_AUTH_PASSWORD)
- strcat(methods_c,"password,");
- if(session->auth_methods & SSH_AUTH_HOSTBASED)
- strcat(methods_c,"hostbased,");
- methods_c[strlen(methods_c)-1]=0; // strip the comma. We are sure there is at
- // least one word into the list
- ssh_log(session, SSH_LOG_PACKET,
- "Sending a auth failure. methods that can continue: %s", methods_c);
- methods=string_from_char(methods_c);
- buffer_add_ssh_string(msg->session->out_buffer,methods);
- free(methods);
- if(partial)
- buffer_add_u8(session->out_buffer,1);
- else
- buffer_add_u8(session->out_buffer,0); // no partial success
- ret = packet_send(msg->session);
- leave_function();
- return ret;
+ } else {
+ if (buffer_add_u8(session->out_buffer, 0) < 0) {
+ goto error;
+ }
+ }
+
+ rc = packet_send(msg->session);
+error:
+ string_free(methods);
+
+ leave_function();
+ return rc;
}
int ssh_message_auth_reply_success(SSH_MESSAGE *msg,int partial){