Fix a file descriptor leak in off nominal path

While looking at the security vulnerability in ASTERISK-20967, Walter noticed
a file descriptor leak and some other issues in off nominal code paths. This
patch corrects them.

Note that this patch is not related to the vulnerability in ASTERISK-20967,
but the patch was placed on that issue.

(closes issue ASTERISK-20967)
Reported by: wdoekes
patches:
  issueA20967_file_leak_and_unused_wkspace.patch uploaded by wdoekes (License 5674)
........

Merged revisions 384118 from http://svn.asterisk.org/svn/asterisk/branches/1.8


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@384119 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Matthew Jordan
2013-03-27 18:51:11 +00:00
parent d014e51a18
commit 66024dbae0
+6 -4
View File
@@ -229,7 +229,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser,
goto out403;
}
/* Disallow any funny filenames at all */
/* Disallow any funny filenames at all (checking first character only??) */
if ((uri[0] < 33) || strchr("./|~@#$%^&*() \t", uri[0])) {
goto out403;
}
@@ -244,6 +244,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser,
if (!(mtype = ast_http_ftype2mtype(ftype))) {
snprintf(wkspace, sizeof(wkspace), "text/%s", S_OR(ftype, "plain"));
mtype = wkspace;
}
/* Cap maximum length */
@@ -261,12 +262,12 @@ static int static_callback(struct ast_tcptls_session_instance *ser,
goto out404;
}
fd = open(path, O_RDONLY);
if (fd < 0) {
if (strstr(path, "/private/") && !astman_is_authed(ast_http_manid_from_vars(headers))) {
goto out403;
}
if (strstr(path, "/private/") && !astman_is_authed(ast_http_manid_from_vars(headers))) {
fd = open(path, O_RDONLY);
if (fd < 0) {
goto out403;
}
@@ -289,6 +290,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser,
}
if ( (http_header = ast_str_create(255)) == NULL) {
close(fd);
return -1;
}