mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-26 22:30:28 +00:00 
			
		
		
		
	Fix my recent change for sending large files via the http server. This code
*must* write the file to the FILE *, and not the raw fd. Otherwise, it breaks TLS support. Thanks to rizzo for catching this! git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@72738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										62
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| #! /bin/sh | #! /bin/sh | ||||||
| # From configure.ac Revision: 72539 . | # From configure.ac Revision: 72701 . | ||||||
| # Guess values for system-dependent variables and create Makefiles. | # Guess values for system-dependent variables and create Makefiles. | ||||||
| # Generated by GNU Autoconf 2.61. | # Generated by GNU Autoconf 2.61. | ||||||
| # | # | ||||||
| @@ -16476,66 +16476,6 @@ _ACEOF | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| cat >conftest.$ac_ext <<_ACEOF |  | ||||||
| /* confdefs.h.  */ |  | ||||||
| _ACEOF |  | ||||||
| cat confdefs.h >>conftest.$ac_ext |  | ||||||
| cat >>conftest.$ac_ext <<_ACEOF |  | ||||||
| /* end confdefs.h.  */ |  | ||||||
| #include <stdlib.h> |  | ||||||
|      #include <sys/sendfile.h> |  | ||||||
| int |  | ||||||
| main () |  | ||||||
| { |  | ||||||
| sendfile(1, 0, NULL, 1); |  | ||||||
|   ; |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| _ACEOF |  | ||||||
| rm -f conftest.$ac_objext |  | ||||||
| if { (ac_try="$ac_compile" |  | ||||||
| case "(($ac_try" in |  | ||||||
|   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; |  | ||||||
|   *) ac_try_echo=$ac_try;; |  | ||||||
| esac |  | ||||||
| eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 |  | ||||||
|   (eval "$ac_compile") 2>conftest.er1 |  | ||||||
|   ac_status=$? |  | ||||||
|   grep -v '^ *+' conftest.er1 >conftest.err |  | ||||||
|   rm -f conftest.er1 |  | ||||||
|   cat conftest.err >&5 |  | ||||||
|   echo "$as_me:$LINENO: \$? = $ac_status" >&5 |  | ||||||
|   (exit $ac_status); } && { |  | ||||||
| 	 test -z "$ac_c_werror_flag" || |  | ||||||
| 	 test ! -s conftest.err |  | ||||||
|        } && test -s conftest.$ac_objext; then |  | ||||||
| 
 |  | ||||||
|     { echo "$as_me:$LINENO: result: yes" >&5 |  | ||||||
| echo "${ECHO_T}yes" >&6; } |  | ||||||
|        have_sendfile=yes |  | ||||||
| 
 |  | ||||||
| else |  | ||||||
|   echo "$as_me: failed program was:" >&5 |  | ||||||
| sed 's/^/| /' conftest.$ac_ext >&5 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     { echo "$as_me:$LINENO: result: no" >&5 |  | ||||||
| echo "${ECHO_T}no" >&6; } |  | ||||||
|        have_sendfile=no |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext |  | ||||||
| if test "${have_sendfile}" = "yes"; then |  | ||||||
| 
 |  | ||||||
| cat >>confdefs.h <<\_ACEOF |  | ||||||
| #define HAVE_SENDFILE 1 |  | ||||||
| _ACEOF |  | ||||||
| 
 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # do the package library checks now | # do the package library checks now | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -364,23 +364,6 @@ AC_CHECK_HEADER([libkern/OSAtomic.h], | |||||||
|  |  | ||||||
| AC_CHECK_SIZEOF(int) | AC_CHECK_SIZEOF(int) | ||||||
|  |  | ||||||
| AC_COMPILE_IFELSE( |  | ||||||
|   [AC_LANG_PROGRAM( |  | ||||||
|     [#include <stdlib.h> |  | ||||||
|      #include <sys/sendfile.h>], |  | ||||||
|     [sendfile(1, 0, NULL, 1);]) |  | ||||||
|   ],[ |  | ||||||
|     AC_MSG_RESULT(yes) |  | ||||||
|        have_sendfile=yes |  | ||||||
|   ],[ |  | ||||||
|     AC_MSG_RESULT(no) |  | ||||||
|        have_sendfile=no |  | ||||||
|   ] |  | ||||||
| ) |  | ||||||
| if test "${have_sendfile}" = "yes"; then |  | ||||||
|   AC_DEFINE([HAVE_SENDFILE], 1, [Define if your system has the sendfile syscall.]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # do the package library checks now | # do the package library checks now | ||||||
|  |  | ||||||
| AST_EXT_LIB_CHECK([ALSA], [asound], [snd_spcm_init], [alsa/asoundlib.h], [-lm -ldl]) | AST_EXT_LIB_CHECK([ALSA], [asound], [snd_spcm_init], [alsa/asoundlib.h], [-lm -ldl]) | ||||||
|   | |||||||
| @@ -394,9 +394,6 @@ | |||||||
| /* Define to 1 if you have the `select' function. */ | /* Define to 1 if you have the `select' function. */ | ||||||
| #undef HAVE_SELECT | #undef HAVE_SELECT | ||||||
|  |  | ||||||
| /* Define if your system has the sendfile syscall. */ |  | ||||||
| #undef HAVE_SENDFILE |  | ||||||
|  |  | ||||||
| /* Define to 1 if you have the `setenv' function. */ | /* Define to 1 if you have the `setenv' function. */ | ||||||
| #undef HAVE_SETENV | #undef HAVE_SETENV | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								main/http.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								main/http.c
									
									
									
									
									
								
							| @@ -48,10 +48,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") | |||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
|  |  | ||||||
| #ifdef HAVE_SENDFILE |  | ||||||
| #include <sys/sendfile.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include "minimime/mm.h" | #include "minimime/mm.h" | ||||||
|  |  | ||||||
| #include "asterisk/cli.h" | #include "asterisk/cli.h" | ||||||
| @@ -201,14 +197,8 @@ static struct ast_str *static_callback(struct server_instance *ser, const char * | |||||||
| 		"Content-type: %s\r\n\r\n", | 		"Content-type: %s\r\n\r\n", | ||||||
| 		ASTERISK_VERSION, buf, (int) st.st_size, mtype); | 		ASTERISK_VERSION, buf, (int) st.st_size, mtype); | ||||||
|  |  | ||||||
| 	fflush(ser->f); |  | ||||||
|  |  | ||||||
| #ifdef HAVE_SENDFILE |  | ||||||
| 	sendfile(ser->fd, fd, NULL, st.st_size); |  | ||||||
| #else |  | ||||||
| 	while ((len = read(fd, buf, sizeof(buf))) > 0) | 	while ((len = read(fd, buf, sizeof(buf))) > 0) | ||||||
| 		write(ser->fd, buf, len); | 		fwrite(buf, 1, len, ser->f); | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	close(fd); | 	close(fd); | ||||||
| 	return NULL; | 	return NULL; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user