From 9b10813a2b2aa0edc5005aa9dc61c303a9ec6766 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Thu, 3 Jul 2014 19:06:12 +0000 Subject: [PATCH] res_ari: Fix some off-nominal paths just dropping the HTTP connection. * Removed some incorrect newlines on ast_http_error() messages in manager.c. * Removed an incorrect newline in res_ari_channels.c. Addendum to ASTERISK-23552 ........ Merged revisions 417932 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@417933 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/manager.c | 20 ++++++++++---------- res/ari/resource_channels.c | 2 +- res/res_ari.c | 20 +++++++++++++------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/main/manager.c b/main/manager.c index 5fcd347166a..31d970942b3 100644 --- a/main/manager.c +++ b/main/manager.c @@ -6873,7 +6873,7 @@ static int generic_http_callback(struct ast_tcptls_session_instance *ser, */ if (!(session = build_mansession(remote_address))) { ast_http_request_close_on_completion(ser); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)"); return 0; } ao2_lock(session); @@ -6899,7 +6899,7 @@ static int generic_http_callback(struct ast_tcptls_session_instance *ser, if (http_header == NULL || out == NULL) { ast_http_request_close_on_completion(ser); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (ast_str_create() out of memory)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (ast_str_create() out of memory)"); goto generic_callback_out; } @@ -6907,13 +6907,13 @@ static int generic_http_callback(struct ast_tcptls_session_instance *ser, s.fd = mkstemp(template); /* create a temporary file for command output */ unlink(template); if (s.fd <= -1) { - ast_http_error(ser, 500, "Server Error", "Internal Server Error (mkstemp failed)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (mkstemp failed)"); goto generic_callback_out; } s.f = fdopen(s.fd, "w+"); if (!s.f) { ast_log(LOG_WARNING, "HTTP Manager, fdopen failed: %s!\n", strerror(errno)); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (fdopen failed)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (fdopen failed)"); close(s.fd); goto generic_callback_out; } @@ -7109,7 +7109,7 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser, /* Digest found - parse */ if (ast_string_field_init(&d, 128)) { ast_http_request_close_on_completion(ser); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)"); return 0; } @@ -7138,7 +7138,7 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser, AST_RWLIST_UNLOCK(&users); ast_log(LOG_NOTICE, "%s failed to pass IP ACL as '%s'\n", ast_sockaddr_stringify_addr(&session->addr), d.username); ast_http_request_close_on_completion(ser); - ast_http_error(ser, 403, "Permission denied", "Permission denied\n"); + ast_http_error(ser, 403, "Permission denied", "Permission denied"); return 0; } @@ -7189,7 +7189,7 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser, */ if (!(session = build_mansession(remote_address))) { ast_http_request_close_on_completion(ser); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (out of memory)"); return 0; } ao2_lock(session); @@ -7257,13 +7257,13 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser, s.fd = mkstemp(template); /* create a temporary file for command output */ unlink(template); if (s.fd <= -1) { - ast_http_error(ser, 500, "Server Error", "Internal Server Error (mkstemp failed)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (mkstemp failed)"); goto auth_callback_out; } s.f = fdopen(s.fd, "w+"); if (!s.f) { ast_log(LOG_WARNING, "HTTP Manager, fdopen failed: %s!\n", strerror(errno)); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (fdopen failed)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (fdopen failed)"); close(s.fd); goto auth_callback_out; } @@ -7321,7 +7321,7 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser, out = ast_str_create(result_size * 2 + 512); if (http_header == NULL || out == NULL) { ast_http_request_close_on_completion(ser); - ast_http_error(ser, 500, "Server Error", "Internal Server Error (ast_str_create() out of memory)\n"); + ast_http_error(ser, 500, "Server Error", "Internal Server Error (ast_str_create() out of memory)"); close_mansession_file(&s); goto auth_callback_out; } diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c index 64734430306..6cc00ce418b 100644 --- a/res/ari/resource_channels.c +++ b/res/ari/resource_channels.c @@ -790,7 +790,7 @@ static void ari_channels_handle_originate_with_id(const char *args_endpoint, if ((assignedids.uniqueid && AST_MAX_PUBLIC_UNIQUEID < strlen(assignedids.uniqueid)) || (assignedids.uniqueid2 && AST_MAX_PUBLIC_UNIQUEID < strlen(assignedids.uniqueid2))) { ast_ari_response_error(response, 400, "Bad Request", - "Uniqueid length exceeds maximum of %d\n", AST_MAX_PUBLIC_UNIQUEID); + "Uniqueid length exceeds maximum of %d", AST_MAX_PUBLIC_UNIQUEID); return; } diff --git a/res/res_ari.c b/res/res_ari.c index 0d80babbb2f..2b6cb231bbf 100644 --- a/res/res_ari.c +++ b/res/res_ari.c @@ -860,22 +860,27 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser, RAII_VAR(struct ast_str *, response_body, ast_str_create(256), ast_free); RAII_VAR(struct ast_ari_conf_user *, user, NULL, ao2_cleanup); struct ast_ari_response response = {}; - int ret = 0; RAII_VAR(struct ast_variable *, post_vars, NULL, ast_variables_destroy); if (!response_body) { - return -1; + ast_http_request_close_on_completion(ser); + ast_http_error(ser, 500, "Server Error", "Out of memory"); + return 0; } response.headers = ast_str_create(40); if (!response.headers) { - return -1; + ast_http_request_close_on_completion(ser); + ast_http_error(ser, 500, "Server Error", "Out of memory"); + return 0; } conf = ast_ari_config_get(); if (!conf || !conf->general) { ast_free(response.headers); - return -1; + ast_http_request_close_on_completion(ser); + ast_http_error(ser, 500, "Server Error", "URI handler config missing"); + return 0; } process_cors_request(headers, &response); @@ -893,9 +898,10 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser, "Request body too large"); goto request_failed; case ENOMEM: + ast_http_request_close_on_completion(ser); ast_ari_response_error(&response, 500, "Internal Server Error", - "Error processing request"); + "Out of memory"); goto request_failed; case EIO: ast_ari_response_error(&response, 400, @@ -940,6 +946,7 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser, "WWW-Authenticate: Basic realm=\"%s\"\r\n", conf->general->auth_realm); } else if (!ast_fully_booted) { + ast_http_request_close_on_completion(ser); ast_ari_response_error(&response, 503, "Service Unavailable", "Asterisk not booted"); } else if (user->read_only && method != AST_HTTP_GET && method != AST_HTTP_OPTIONS) { ast_ari_response_error(&response, 403, "Forbidden", "Write access denied"); @@ -986,7 +993,6 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser, response.response_text = "Internal Server Error"; ast_str_set(&response_body, 0, "%s", ""); ast_str_set(&response.headers, 0, "%s", ""); - ret = -1; } } @@ -999,7 +1005,7 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser, response_body = NULL; ast_json_unref(response.message); - return ret; + return 0; } static struct ast_http_uri http_uri = {