]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 316917-316919 via svnmerge from
authorSean Bright <sean@malleable.com>
Thu, 5 May 2011 02:34:29 +0000 (02:34 +0000)
committerSean Bright <sean@malleable.com>
Thu, 5 May 2011 02:34:29 +0000 (02:34 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r316917 | seanbright | 2011-05-04 22:23:28 -0400 (Wed, 04 May 2011) | 5 lines

  Make sure that tcptls_session is properly initialized.

  (issue #18598)
  Reported by: ksn
........
  r316918 | seanbright | 2011-05-04 22:25:20 -0400 (Wed, 04 May 2011) | 5 lines

  Look at the correct buffer for our digest info instead of an empty one.

  (issue #18598)
  Reported by: ksn
........
  r316919 | seanbright | 2011-05-04 22:30:45 -0400 (Wed, 04 May 2011) | 10 lines

  Use the correct HTTP method when generating our digest, otherwise we always fail.

  When calculating the 'A2' portion of our digest for verification, we need the
  HTTP method that is currently in use.  Unfortunately our mapping function was
  incorrect, resulting in invalid hashes being generated and, in turn, failures
  in authentication.

  (closes issue #18598)
  Reported by: ksn
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@316920 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/http.c
main/manager.c
main/utils.c

index cc32b9422ab72925c0998cbcfa28a54fe3c6fbb9..63d91c2b2ad23006c81a7942384ad9ccaf46dc60 100644 (file)
@@ -134,7 +134,7 @@ static AST_RWLIST_HEAD_STATIC(uri_redirects, http_uri_redirect);
 
 static const struct ast_cfhttp_methods_text {
        enum ast_http_method method;
-       const char text[];
+       const char *text;
 } ast_http_methods_text[] = {
        { AST_HTTP_UNKNOWN,     "UNKNOWN" },
        { AST_HTTP_GET,         "GET" },
@@ -145,7 +145,15 @@ static const struct ast_cfhttp_methods_text {
 
 const char *ast_get_http_method(enum ast_http_method method)
 {
-       return ast_http_methods_text[method].text;
+       int x;
+
+       for (x = 0; x < ARRAY_LEN(ast_http_methods_text); x++) {
+               if (ast_http_methods_text[x].method == method) {
+                       return ast_http_methods_text[x].text;
+               }
+       }
+
+       return NULL;
 }
 
 const char *ast_http_ftype2mtype(const char *ftype)
index 9b8c9654da28144ae09444a4ec49c101b3874aa5..7ce8bba16e32dbf32d43c15422c91fdb4b5ba469 100644 (file)
@@ -5693,7 +5693,7 @@ static int auth_http_callback(struct ast_tcptls_session_instance *ser,
                                             struct ast_variable *headers)
 {
        struct mansession_session *session = NULL;
-       struct mansession s = { NULL, };
+       struct mansession s = { .session = NULL, .tcptls_session = ser };
        struct ast_variable *v, *params = get_params;
        char template[] = "/tmp/ast-http-XXXXXX";       /* template for temporary file */
        struct ast_str *http_header = NULL, *out = NULL;
index e67bdea10abb6e31bc15c32aefabbb755868ddf5..eda125127196d2103e4c6b0ee4b37e02d1e6ce9f 100644 (file)
@@ -1995,7 +1995,7 @@ int ast_utils_init(void)
  */
 int ast_parse_digest(const char *digest, struct ast_http_digest *d, int request, int pedantic) {
        int i;
-       char *c, key[512], val[512], tmp[512];
+       char *c, key[512], val[512];
        struct ast_str *str = ast_str_create(16);
 
        if (ast_strlen_zero(digest) || !d || !str) {
@@ -2007,7 +2007,7 @@ int ast_parse_digest(const char *digest, struct ast_http_digest *d, int request,
 
        c = ast_skip_blanks(ast_str_buffer(str));
 
-       if (strncasecmp(tmp, "Digest ", strlen("Digest "))) {
+       if (strncasecmp(c, "Digest ", strlen("Digest "))) {
                ast_log(LOG_WARNING, "Missing Digest.\n");
                ast_free(str);
                return -1;