[svn-commits] russell: trunk r60604 - in /trunk: ./ configs/ include/asterisk/ main/ main/m...

svn-commits at lists.digium.com svn-commits at lists.digium.com
Fri Apr 6 14:16:41 MST 2007


Author: russell
Date: Fri Apr  6 16:16:38 2007
New Revision: 60604

URL: http://svn.digium.com/view/asterisk?view=rev&rev=60604
Log:
Merged revisions 60603 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r60603 | russell | 2007-04-06 15:58:43 -0500 (Fri, 06 Apr 2007) | 13 lines

To be able to achieve the things that we would like to achieve with the
Asterisk GUI project, we need a fully functional HTTP interface with access
to the Asterisk manager interface.  One of the things that was intended to be
a part of this system, but was never actually implemented, was the ability for
the GUI to be able to upload files to Asterisk.  So, this commit adds this in
the most minimally invasive way that we could come up with.

A lot of work on minimime was done by Steve Murphy.  He fixed a lot of bugs in
the parser, and updated it to be thread-safe.  The ability to check
permissions of active manager sessions was added by Dwayne Hubbard.  Then,
hacking this all together and do doing the modifications necessary to the HTTP
interface was done by me.

........

Added:
    trunk/main/minimime/   (props changed)
      - copied from r60603, branches/1.4/main/minimime/
    trunk/main/minimime/.cvsignore
      - copied unchanged from r60603, branches/1.4/main/minimime/.cvsignore
    trunk/main/minimime/Doxyfile
      - copied unchanged from r60603, branches/1.4/main/minimime/Doxyfile
    trunk/main/minimime/Make.conf
      - copied unchanged from r60603, branches/1.4/main/minimime/Make.conf
    trunk/main/minimime/Makefile
      - copied unchanged from r60603, branches/1.4/main/minimime/Makefile
    trunk/main/minimime/mimeparser.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.h
    trunk/main/minimime/mimeparser.l
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.l
    trunk/main/minimime/mimeparser.tab.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.tab.c
    trunk/main/minimime/mimeparser.tab.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.tab.h
    trunk/main/minimime/mimeparser.y
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.y
    trunk/main/minimime/mimeparser.yy.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mimeparser.yy.c
    trunk/main/minimime/minimime.c
      - copied unchanged from r60603, branches/1.4/main/minimime/minimime.c
    trunk/main/minimime/mm-docs/
      - copied from r60603, branches/1.4/main/minimime/mm-docs/
    trunk/main/minimime/mm-docs/html/
      - copied from r60603, branches/1.4/main/minimime/mm-docs/html/
    trunk/main/minimime/mm-docs/html/bug.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/bug.html
    trunk/main/minimime/mm-docs/html/doxygen.css
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/doxygen.css
    trunk/main/minimime/mm-docs/html/files.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/files.html
    trunk/main/minimime/mm-docs/html/globals.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/globals.html
    trunk/main/minimime/mm-docs/html/globals_func.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/globals_func.html
    trunk/main/minimime/mm-docs/html/group__codecs.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__codecs.html
    trunk/main/minimime/mm-docs/html/group__contenttype.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__contenttype.html
    trunk/main/minimime/mm-docs/html/group__context.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__context.html
    trunk/main/minimime/mm-docs/html/group__envelope.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__envelope.html
    trunk/main/minimime/mm-docs/html/group__error.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__error.html
    trunk/main/minimime/mm-docs/html/group__mimepart.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__mimepart.html
    trunk/main/minimime/mm-docs/html/group__mimeutil.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__mimeutil.html
    trunk/main/minimime/mm-docs/html/group__param.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__param.html
    trunk/main/minimime/mm-docs/html/group__util.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/group__util.html
    trunk/main/minimime/mm-docs/html/index.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/index.html
    trunk/main/minimime/mm-docs/html/mimeparser_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mimeparser_8h-source.html
    trunk/main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mimeparser_8tab_8h-source.html
    trunk/main/minimime/mm-docs/html/mm_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm_8h-source.html
    trunk/main/minimime/mm-docs/html/mm__codecs_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__codecs_8c.html
    trunk/main/minimime/mm-docs/html/mm__contenttype_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__contenttype_8c.html
    trunk/main/minimime/mm-docs/html/mm__context_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__context_8c.html
    trunk/main/minimime/mm-docs/html/mm__envelope_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__envelope_8c.html
    trunk/main/minimime/mm-docs/html/mm__error_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__error_8c.html
    trunk/main/minimime/mm-docs/html/mm__header_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__header_8c.html
    trunk/main/minimime/mm-docs/html/mm__internal_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__internal_8h-source.html
    trunk/main/minimime/mm-docs/html/mm__internal_8h.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__internal_8h.html
    trunk/main/minimime/mm-docs/html/mm__mem_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__mem_8h-source.html
    trunk/main/minimime/mm-docs/html/mm__mimepart_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__mimepart_8c.html
    trunk/main/minimime/mm-docs/html/mm__mimeutil_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__mimeutil_8c.html
    trunk/main/minimime/mm-docs/html/mm__param_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__param_8c.html
    trunk/main/minimime/mm-docs/html/mm__parse_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__parse_8c.html
    trunk/main/minimime/mm-docs/html/mm__queue_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__queue_8h-source.html
    trunk/main/minimime/mm-docs/html/mm__util_8c.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__util_8c.html
    trunk/main/minimime/mm-docs/html/mm__util_8h-source.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/mm__util_8h-source.html
    trunk/main/minimime/mm-docs/html/modules.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/modules.html
    trunk/main/minimime/mm-docs/html/pages.html
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/pages.html
    trunk/main/minimime/mm-docs/html/tabs.css
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/html/tabs.css
    trunk/main/minimime/mm-docs/latex/
      - copied from r60603, branches/1.4/main/minimime/mm-docs/latex/
    trunk/main/minimime/mm-docs/latex/Makefile
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/Makefile
    trunk/main/minimime/mm-docs/latex/bug.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/bug.tex
    trunk/main/minimime/mm-docs/latex/doxygen.sty
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/doxygen.sty
    trunk/main/minimime/mm-docs/latex/files.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/files.tex
    trunk/main/minimime/mm-docs/latex/group__codecs.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__codecs.tex
    trunk/main/minimime/mm-docs/latex/group__contenttype.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__contenttype.tex
    trunk/main/minimime/mm-docs/latex/group__context.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__context.tex
    trunk/main/minimime/mm-docs/latex/group__envelope.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__envelope.tex
    trunk/main/minimime/mm-docs/latex/group__error.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__error.tex
    trunk/main/minimime/mm-docs/latex/group__mimepart.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__mimepart.tex
    trunk/main/minimime/mm-docs/latex/group__mimeutil.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__mimeutil.tex
    trunk/main/minimime/mm-docs/latex/group__param.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__param.tex
    trunk/main/minimime/mm-docs/latex/group__util.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/group__util.tex
    trunk/main/minimime/mm-docs/latex/mm__codecs_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__codecs_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__contenttype_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__contenttype_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__context_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__context_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__envelope_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__envelope_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__error_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__error_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__header_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__header_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__internal_8h.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__internal_8h.tex
    trunk/main/minimime/mm-docs/latex/mm__mimepart_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__mimepart_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__mimeutil_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__mimeutil_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__param_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__param_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__parse_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__parse_8c.tex
    trunk/main/minimime/mm-docs/latex/mm__util_8c.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/mm__util_8c.tex
    trunk/main/minimime/mm-docs/latex/modules.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/modules.tex
    trunk/main/minimime/mm-docs/latex/pages.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/pages.tex
    trunk/main/minimime/mm-docs/latex/refman.tex
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/latex/refman.tex
    trunk/main/minimime/mm-docs/refman.pdf
      - copied unchanged from r60603, branches/1.4/main/minimime/mm-docs/refman.pdf
    trunk/main/minimime/mm.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mm.h
    trunk/main/minimime/mm_base64.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_base64.c
    trunk/main/minimime/mm_codecs.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_codecs.c
    trunk/main/minimime/mm_contenttype.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_contenttype.c
    trunk/main/minimime/mm_context.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_context.c
    trunk/main/minimime/mm_envelope.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_envelope.c
    trunk/main/minimime/mm_error.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_error.c
    trunk/main/minimime/mm_header.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_header.c
    trunk/main/minimime/mm_init.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_init.c
    trunk/main/minimime/mm_internal.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_internal.h
    trunk/main/minimime/mm_mem.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_mem.c
    trunk/main/minimime/mm_mem.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_mem.h
    trunk/main/minimime/mm_mimepart.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_mimepart.c
    trunk/main/minimime/mm_mimeutil.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_mimeutil.c
    trunk/main/minimime/mm_param.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_param.c
    trunk/main/minimime/mm_parse.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_parse.c
    trunk/main/minimime/mm_queue.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_queue.h
    trunk/main/minimime/mm_util.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_util.c
    trunk/main/minimime/mm_util.h
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_util.h
    trunk/main/minimime/mm_warnings.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mm_warnings.c
    trunk/main/minimime/mytest_files/
      - copied from r60603, branches/1.4/main/minimime/mytest_files/
    trunk/main/minimime/mytest_files/ast_postdata
      - copied unchanged from r60603, branches/1.4/main/minimime/mytest_files/ast_postdata
    trunk/main/minimime/mytest_files/ast_postdata2
      - copied unchanged from r60603, branches/1.4/main/minimime/mytest_files/ast_postdata2
    trunk/main/minimime/mytest_files/ast_postdata3.gz
      - copied unchanged from r60603, branches/1.4/main/minimime/mytest_files/ast_postdata3.gz
    trunk/main/minimime/mytest_files/mytest.c
      - copied unchanged from r60603, branches/1.4/main/minimime/mytest_files/mytest.c
    trunk/main/minimime/strlcat.c
      - copied unchanged from r60603, branches/1.4/main/minimime/strlcat.c
    trunk/main/minimime/strlcpy.c
      - copied unchanged from r60603, branches/1.4/main/minimime/strlcpy.c
    trunk/main/minimime/sys/
      - copied from r60603, branches/1.4/main/minimime/sys/
    trunk/main/minimime/sys/CVS/
      - copied from r60603, branches/1.4/main/minimime/sys/CVS/
    trunk/main/minimime/sys/CVS/Entries
      - copied unchanged from r60603, branches/1.4/main/minimime/sys/CVS/Entries
    trunk/main/minimime/sys/CVS/Repository
      - copied unchanged from r60603, branches/1.4/main/minimime/sys/CVS/Repository
    trunk/main/minimime/sys/CVS/Root
      - copied unchanged from r60603, branches/1.4/main/minimime/sys/CVS/Root
    trunk/main/minimime/sys/mm_queue.h
      - copied unchanged from r60603, branches/1.4/main/minimime/sys/mm_queue.h
    trunk/main/minimime/test/
      - copied from r60603, branches/1.4/main/minimime/test/
    trunk/main/minimime/test.sh
      - copied unchanged from r60603, branches/1.4/main/minimime/test.sh
    trunk/main/minimime/test/CVS/
      - copied from r60603, branches/1.4/main/minimime/test/CVS/
    trunk/main/minimime/test/CVS/Entries
      - copied unchanged from r60603, branches/1.4/main/minimime/test/CVS/Entries
    trunk/main/minimime/test/CVS/Repository
      - copied unchanged from r60603, branches/1.4/main/minimime/test/CVS/Repository
    trunk/main/minimime/test/CVS/Root
      - copied unchanged from r60603, branches/1.4/main/minimime/test/CVS/Root
    trunk/main/minimime/tests/
      - copied from r60603, branches/1.4/main/minimime/tests/
    trunk/main/minimime/tests/CVS/
      - copied from r60603, branches/1.4/main/minimime/tests/CVS/
    trunk/main/minimime/tests/CVS/Entries
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/CVS/Entries
    trunk/main/minimime/tests/CVS/Entries.Log
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/CVS/Entries.Log
    trunk/main/minimime/tests/CVS/Repository
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/CVS/Repository
    trunk/main/minimime/tests/CVS/Root
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/CVS/Root
    trunk/main/minimime/tests/Makefile
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/Makefile
    trunk/main/minimime/tests/create.c
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/create.c
    trunk/main/minimime/tests/messages/
      - copied from r60603, branches/1.4/main/minimime/tests/messages/
    trunk/main/minimime/tests/messages/CVS/
      - copied from r60603, branches/1.4/main/minimime/tests/messages/CVS/
    trunk/main/minimime/tests/messages/CVS/Entries
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/CVS/Entries
    trunk/main/minimime/tests/messages/CVS/Repository
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/CVS/Repository
    trunk/main/minimime/tests/messages/CVS/Root
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/CVS/Root
    trunk/main/minimime/tests/messages/test1.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test1.txt
    trunk/main/minimime/tests/messages/test2.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test2.txt
    trunk/main/minimime/tests/messages/test3.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test3.txt
    trunk/main/minimime/tests/messages/test4.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test4.txt
    trunk/main/minimime/tests/messages/test5.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test5.txt
    trunk/main/minimime/tests/messages/test6.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test6.txt
    trunk/main/minimime/tests/messages/test7.txt
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/messages/test7.txt
    trunk/main/minimime/tests/parse.c
      - copied unchanged from r60603, branches/1.4/main/minimime/tests/parse.c
Modified:
    trunk/   (props changed)
    trunk/Makefile.moddir_rules
    trunk/configs/http.conf.sample
    trunk/configure
    trunk/configure.ac
    trunk/include/asterisk/autoconfig.h.in
    trunk/include/asterisk/compat.h
    trunk/include/asterisk/manager.h
    trunk/main/Makefile
    trunk/main/http.c
    trunk/main/manager.c
    trunk/main/strcompat.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/Makefile.moddir_rules
URL: http://svn.digium.com/view/asterisk/trunk/Makefile.moddir_rules?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/Makefile.moddir_rules (original)
+++ trunk/Makefile.moddir_rules Fri Apr  6 16:16:38 2007
@@ -12,7 +12,9 @@
 #
 
 ifneq ($(findstring MALLOC_DEBUG,$(MENUSELECT_CFLAGS)),)
+ ifeq ($(findstring astmm.h,$(ASTCFLAGS)),)
   ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/astmm.h
+ endif
 endif
 
 ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)

Modified: trunk/configs/http.conf.sample
URL: http://svn.digium.com/view/asterisk/trunk/configs/http.conf.sample?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/configs/http.conf.sample (original)
+++ trunk/configs/http.conf.sample Fri Apr  6 16:16:38 2007
@@ -48,3 +48,16 @@
 ; To produce a certificate you can e.g. use openssl
 ;	openssl req -new -x509 -days 365 -nodes -out /tmp/foo.pem -keyout /tmp/foo.pem
 ;
+;prefix=asterisk
+
+; The post_mappings section maps URLs to real paths on the filesystem.  If a
+; POST is done from within an authenticated manager session to one of the
+; configured POST mappings, then any files in the POST will be placed in the
+; configured directory.
+;
+;[post_mappings]
+;
+; In this example, if the prefix option is set to "asterisk", then using the
+; POST URL: /asterisk/uploads will put files in /var/lib/asterisk/uploads/.
+;uploads = /var/lib/asterisk/uploads/
+;

Modified: trunk/configure
URL: http://svn.digium.com/view/asterisk/trunk/configure?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/configure (original)
+++ trunk/configure Fri Apr  6 16:16:38 2007
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 58948 .
+# From configure.ac Revision: 59203 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.60.
 #
@@ -16007,7 +16007,9 @@
 
 
 
-for ac_func in asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf
+
+
+for ac_func in asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5

Modified: trunk/configure.ac
URL: http://svn.digium.com/view/asterisk/trunk/configure.ac?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Fri Apr  6 16:16:38 2007
@@ -275,7 +275,7 @@
 AC_FUNC_STRTOD
 AC_FUNC_UTIME_NULL
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf])
+AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf])
 
 # https support (in main/http.c) uses funopen on BSD systems,
 # fopencookie on linux

Modified: trunk/include/asterisk/autoconfig.h.in
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/autoconfig.h.in?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/include/asterisk/autoconfig.h.in (original)
+++ trunk/include/asterisk/autoconfig.h.in Fri Apr  6 16:16:38 2007
@@ -461,6 +461,12 @@
 
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define to 1 if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
 
 /* Define to 1 if you have the `strncasecmp' function. */
 #undef HAVE_STRNCASECMP

Modified: trunk/include/asterisk/compat.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/compat.h?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/include/asterisk/compat.h (original)
+++ trunk/include/asterisk/compat.h Fri Apr  6 16:16:38 2007
@@ -61,6 +61,14 @@
 int vasprintf(char **strp, const char *fmt, va_list ap);
 #endif
 
+#ifndef HAVE_STRLCAT
+size_t strlcat(char *dst, const char *src, size_t siz);
+#endif
+
+#ifndef HAVE_STRLCPY
+size_t strlcpy(char *dst, const char *src, size_t siz);
+#endif
+
 #ifdef SOLARIS
 #define __BEGIN_DECLS
 #define __END_DECLS

Modified: trunk/include/asterisk/manager.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/manager.h?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/include/asterisk/manager.h (original)
+++ trunk/include/asterisk/manager.h Fri Apr  6 16:16:38 2007
@@ -134,6 +134,22 @@
 */
 int ast_manager_unregister( char *action );
 
+/*! 
+ * \brief Verify a session's read permissions against a permission mask.  
+ * \param ident session identity
+ * \param perm permission mask to verify
+ * \returns 1 if the session has the permission mask capabilities, otherwise 0
+ */
+int astman_verify_session_readpermissions(unsigned long ident, int perm);
+
+/*!
+ * \brief Verify a session's write permissions against a permission mask.  
+ * \param ident session identity
+ * \param perm permission mask to verify
+ * \returns 1 if the session has the permission mask capabilities, otherwise 0
+ */
+int astman_verify_session_writepermissions(unsigned long ident, int perm);
+
 /*! External routines may send asterisk manager events this way */
 /*! 	\param category	Event category, matches manager authorization
 	\param event	Event name

Modified: trunk/main/Makefile
URL: http://svn.digium.com/view/asterisk/trunk/main/Makefile?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/main/Makefile (original)
+++ trunk/main/Makefile Fri Apr  6 16:16:38 2007
@@ -133,7 +133,10 @@
   H323LDLIBS=
 endif
 
-asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
+minimime/libmmime.a:
+	@cd minimime && $(MAKE) libmmime.a
+
+asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a minimime/libmmime.a $(AST_EMBED_LDSCRIPTS)
 	@$(CC) -c -o buildinfo.o $(ASTCFLAGS) buildinfo.c
 	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
 	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS)
@@ -145,3 +148,6 @@
 	@if [ -f editline/Makefile ]; then $(MAKE) -C editline distclean ; fi
 	@$(MAKE) -C db1-ast clean
 	@$(MAKE) -C stdtime clean
+	@$(MAKE) -C minimime clean
+
+.PHONY: minimime/libmmime.a

Modified: trunk/main/http.c
URL: http://svn.digium.com/view/asterisk/trunk/main/http.c?view=diff&rev=60604&r1=60603&r2=60604
==============================================================================
--- trunk/main/http.c (original)
+++ trunk/main/http.c Fri Apr  6 16:16:38 2007
@@ -21,8 +21,9 @@
  * \brief http server for AMI access
  *
  * \author Mark Spencer <markster at digium.com>
- * This program implements a tiny http server supporting the "get" method
- * only and was inspired by micro-httpd by Jef Poskanzer 
+ *
+ * This program implements a tiny http server
+ * and was inspired by micro-httpd by Jef Poskanzer 
  * 
  * \ref AstHTTP - AMI over the http protocol
  */
@@ -47,6 +48,8 @@
 #include <fcntl.h>
 #include <pthread.h>
 
+#include "minimime/mm.h"
+
 #include "asterisk/cli.h"
 #include "asterisk/http.h"
 #include "asterisk/utils.h"
@@ -55,6 +58,7 @@
 #include "asterisk/config.h"
 #include "asterisk/stringfields.h"
 #include "asterisk/version.h"
+#include "asterisk/manager.h"
 
 #define MAX_PREFIX 80
 #define DEFAULT_PREFIX "/asterisk"
@@ -92,6 +96,14 @@
 };
 
 static AST_RWLIST_HEAD_STATIC(uris, ast_http_uri);	/*!< list of supported handlers */
+
+struct ast_http_post_mapping {
+	AST_RWLIST_ENTRY(ast_http_post_mapping) entry;
+	char *from;
+	char *to;
+};
+
+static AST_RWLIST_HEAD_STATIC(post_mappings, ast_http_post_mapping);
 
 /* all valid URIs must be prepended by the string in prefix. */
 static char prefix[MAX_PREFIX];
@@ -329,6 +341,225 @@
 	AST_RWLIST_UNLOCK(&uris);
 }
 
+/*! \note This assumes that the post_mappings list is locked */
+static struct ast_http_post_mapping *find_post_mapping(const char *uri)
+{
+	struct ast_http_post_mapping *post_map;
+
+	if (!ast_strlen_zero(prefix) && strncmp(prefix, uri, strlen(prefix))) {
+		ast_log(LOG_DEBUG, "URI %s does not have prefix %s\n", uri, prefix);
+		return NULL;
+	}
+
+	uri += strlen(prefix);
+	if (*uri == '/')
+		uri++;
+	
+	AST_RWLIST_TRAVERSE(&post_mappings, post_map, entry) {
+		if (!strcmp(uri, post_map->from))
+			return post_map;
+	}
+
+	return NULL;
+}
+
+static int get_filename(struct mm_mimepart *part, char *fn, size_t fn_len)
+{
+	const char *filename;
+
+	filename = mm_content_getdispositionparambyname(part->type, "filename");
+
+	if (ast_strlen_zero(filename))
+		return -1;
+
+	ast_copy_string(fn, filename, fn_len);
+
+	return 0;
+}
+
+static void post_raw(struct mm_mimepart *part, const char *post_dir, const char *fn)
+{
+	char filename[PATH_MAX];
+	FILE *f;
+	const char *body;
+	size_t body_len;
+
+	snprintf(filename, sizeof(filename), "%s/%s", post_dir, fn);
+
+	if (option_debug)
+		ast_log(LOG_DEBUG, "Posting raw data to %s\n", filename);
+
+	if (!(f = fopen(filename, "w"))) {
+		ast_log(LOG_WARNING, "Unable to open %s for writing file from a POST!\n", filename);
+		return;
+	}
+
+	if (!(body = mm_mimepart_getbody(part, 0))) {
+		if (option_debug)
+			ast_log(LOG_DEBUG, "Couldn't get the mimepart body\n");
+		fclose(f);
+		return;
+	}
+	body_len = mm_mimepart_getlength(part);
+
+	if (option_debug)
+		ast_log(LOG_DEBUG, "Body length is %ld\n", body_len);
+
+	fwrite(body, 1, body_len, f);
+
+	fclose(f);
+}
+
+static struct ast_str *handle_post(struct server_instance *ser, char *uri, 
+	int *status, char **title, int *contentlength, struct ast_variable *headers,
+	struct ast_variable *cookies)
+{
+	char buf;
+	FILE *f;
+	size_t res;
+	struct ast_variable *var;
+	int content_len = 0;
+	MM_CTX *ctx;
+	int mm_res, i;
+	struct ast_http_post_mapping *post_map;
+	const char *post_dir;
+	unsigned long ident = 0;
+
+	for (var = cookies; var; var = var->next) {
+		if (strcasecmp(var->name, "mansession_id"))
+			continue;
+
+		if (sscanf(var->value, "%lx", &ident) != 1) {
+			*status = 400;
+			*title = ast_strdup("Bad Request");
+			return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
+		}
+
+		if (!astman_verify_session_writepermissions(ident, EVENT_FLAG_CONFIG)) {
+			*status = 401;
+			*title = ast_strdup("Unauthorized");
+			return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request.");
+		}
+
+		break;
+	}
+	if (!var) {
+		*status = 401;
+		*title = ast_strdup("Unauthorized");
+		return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request.");
+	}
+
+	if (!(f = tmpfile()))
+		return NULL;
+
+	for (var = headers; var; var = var->next) {
+		if (!strcasecmp(var->name, "Content-Length")) {
+			if ((sscanf(var->value, "%u", &content_len)) != 1) {
+				ast_log(LOG_ERROR, "Invalid Content-Length in POST request!\n");
+				fclose(f);
+				return NULL;
+			}
+			if (option_debug)
+				ast_log(LOG_DEBUG, "Got a Content-Length of %d\n", content_len);
+		} else if (!strcasecmp(var->name, "Content-Type"))
+			fprintf(f, "Content-Type: %s\r\n\r\n", var->value);
+	}
+
+	while ((res = fread(&buf, 1, 1, ser->f))) {
+		fwrite(&buf, 1, 1, f);
+		content_len--;
+		if (!content_len)
+			break;
+	}
+
+	if (fseek(f, SEEK_SET, 0)) {
+		if (option_debug)
+			ast_log(LOG_DEBUG, "Failed to seek temp file back to beginning.\n");
+		fclose(f);
+		return NULL;
+	}
+
+	AST_RWLIST_RDLOCK(&post_mappings);
+	if (!(post_map = find_post_mapping(uri))) {
+		if (option_debug)
+			ast_log(LOG_DEBUG, "%s is not a valid URI for POST\n", uri);
+		AST_RWLIST_UNLOCK(&post_mappings);
+		fclose(f);
+		*status = 404;
+		*title = ast_strdup("Not Found");
+		return ast_http_error(404, "Not Found", NULL, "The requested URL was not found on this server.");
+	}
+	post_dir = ast_strdupa(post_map->to);
+	post_map = NULL;
+	AST_RWLIST_UNLOCK(&post_mappings);
+
+	if (option_debug)
+		ast_log(LOG_DEBUG, "Going to post files to dir %s\n", post_dir);
+
+	if (!(ctx = mm_context_new())) {
+		fclose(f);
+		return NULL;
+	}
+
+	mm_res = mm_parse_fileptr(ctx, f, MM_PARSE_LOOSE, 0);
+	fclose(f);
+	if (mm_res == -1) {
+		ast_log(LOG_ERROR, "Error parsing MIME data\n");
+		mm_context_free(ctx);
+		*status = 400;
+		*title = ast_strdup("Bad Request");
+		return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
+	}
+
+	mm_res = mm_context_countparts(ctx);
+	if (!mm_res) {
+		ast_log(LOG_ERROR, "Invalid MIME data, found no parts!\n");
+		mm_context_free(ctx);
+		*status = 400;
+		*title = ast_strdup("Bad Request");
+		return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
+	}
+
+	if (option_debug) {
+		if (mm_context_iscomposite(ctx))
+			ast_log(LOG_DEBUG, "Found %d MIME parts\n", mm_res - 1);
+		else
+			ast_log(LOG_DEBUG, "We have a flat (not multi-part) message\n");
+	}
+
+	for (i = 1; i < mm_res; i++) {
+		struct mm_mimepart *part;
+		char fn[PATH_MAX];
+
+		if (!(part = mm_context_getpart(ctx, i))) {
+			if (option_debug)
+				ast_log(LOG_DEBUG, "Failed to get mime part num %d\n", i);
+			continue;
+		}
+
+		if (get_filename(part, fn, sizeof(fn))) {
+			if (option_debug)
+				ast_log(LOG_DEBUG, "Failed to retrieve a filename for part num %d\n", i);
+			continue;
+		}
+	
+		if (!part->type) {
+			if (option_debug)
+				ast_log(LOG_DEBUG, "This part has no content struct?\n");
+			continue;
+		}
+
+		/* XXX This assumes the MIME part body is not encoded! */
+		post_raw(part, post_dir, fn);
+	}
+
+	mm_context_free(ctx);
+
+	*status = 200;
+	*title = ast_strdup("OK");
+	return ast_http_error(200, "OK", NULL, "File successfully uploaded.");
+}
+
 static struct ast_str *handle_uri(struct sockaddr_in *sin, char *uri, int *status, char **title, int *contentlength, struct ast_variable **cookies)
 {
 	char *c;
@@ -520,7 +751,7 @@
 	char buf[4096];
 	char cookie[4096];
 	struct server_instance *ser = data;
-	struct ast_variable *var, *prev=NULL, *vars=NULL;
+	struct ast_variable *var, *prev=NULL, *vars=NULL, *headers = NULL;
 	char *uri, *title=NULL;
 	int status = 200, contentlength = 0;
 	struct ast_str *out = NULL;
@@ -549,8 +780,23 @@
 		ast_trim_blanks(cookie);
 		if (ast_strlen_zero(cookie))
 			break;
-		if (strncasecmp(cookie, "Cookie: ", 8))
+		if (strncasecmp(cookie, "Cookie: ", 8)) {
+			char *name, *value;
+
+			value = ast_strdupa(cookie);
+			name = strsep(&value, ":");
+			if (!value)
+				continue;
+			value = ast_skip_blanks(value);
+			if (ast_strlen_zero(value))
+				continue;
+			var = ast_variable_new(name, value);
+			if (!var)
+				continue;
+			var->next = headers;
+			headers = var;
 			continue;
+		}
 
 		/* TODO - The cookie parsing code below seems to work   
 		   in IE6 and FireFox 1.5.  However, it is not entirely 
@@ -596,6 +842,8 @@
 
 	if (!*uri)
 		out = ast_http_error(400, "Bad Request", NULL, "Invalid Request");
+	else if (!strcasecmp(buf, "post")) 
+		out = handle_post(ser, uri, &status, &title, &contentlength, headers, vars);
 	else if (strcasecmp(buf, "get")) 
 		out = ast_http_error(501, "Not Implemented", NULL,
 			"Attempt to use unimplemented / unsupported method");
@@ -851,6 +1099,47 @@
 	AST_RWLIST_UNLOCK(&uri_redirects);
 }
 
+static void destroy_post_mapping(struct ast_http_post_mapping *post_map)
+{
+	if (post_map->from)
+		free(post_map->from);
+	if (post_map->to)
+		free(post_map->to);
+	free(post_map);
+}
+
+static void destroy_post_mappings(void)
+{
+	struct ast_http_post_mapping *post_map;
+
+	AST_RWLIST_WRLOCK(&post_mappings);
+	while ((post_map = AST_RWLIST_REMOVE_HEAD(&post_mappings, entry)))
+		destroy_post_mapping(post_map);
+	AST_RWLIST_UNLOCK(&post_mappings);
+}
+
+static void add_post_mapping(const char *from, const char *to)
+{
+	struct ast_http_post_mapping *post_map;
+
+	if (!(post_map = ast_calloc(1, sizeof(*post_map))))
+		return;
+
+	if (!(post_map->from = ast_strdup(from))) {
+		destroy_post_mapping(post_map);
+		return;
+	}
+
+	if (!(post_map->to = ast_strdup(to))) {
+		destroy_post_mapping(post_map);
+		return;
+	}
+
+	AST_RWLIST_WRLOCK(&post_mappings);
+	AST_RWLIST_INSERT_TAIL(&post_mappings, post_map, entry);
+	AST_RWLIST_UNLOCK(&post_mappings);
+}
+
 static int __ast_http_load(int reload)
 {
 	struct ast_config *cfg;
@@ -869,6 +1158,7 @@
 
 	memset(&https_desc.sin, 0, sizeof(https_desc.sin));
 	https_desc.sin.sin_port = htons(8089);
+
 	strcpy(newprefix, DEFAULT_PREFIX);
 
 	http_tls_cfg.enabled = 0;
@@ -883,6 +1173,8 @@
 	while ((redirect = AST_RWLIST_REMOVE_HEAD(&uri_redirects, entry)))
 		free(redirect);
 	AST_RWLIST_UNLOCK(&uri_redirects);
+
+	destroy_post_mappings();
 
 	cfg = ast_config_load("http.conf");
 	if (cfg) {
@@ -931,6 +1223,10 @@
 				ast_log(LOG_WARNING, "Ignoring unknown option '%s' in http.conf\n", v->name);
 			}
 		}
+
+		for (v = ast_variable_browse(cfg, "post_mappings"); v; v = v->next)
+			add_post_mapping(v->name, v->value);
+
 		ast_config_destroy(cfg);
 	}
 	if (!have_sslbindaddr)
@@ -943,6 +1239,7 @@
 	server_start(&http_desc);
 	if (ssl_setup(https_desc.tls_cfg))
 		server_start(&https_desc);
+
 	return 0;
 }
 
@@ -950,6 +1247,7 @@
 {
 	struct ast_http_uri *urih;
 	struct http_uri_redirect *redirect;
+	struct ast_http_post_mapping *post_map;
 
 	if (argc != 3)
 		return RESULT_SHOWUSAGE;
@@ -986,6 +1284,14 @@
 		ast_cli(fd, "  None.\n");
 	AST_RWLIST_UNLOCK(&uri_redirects);
 
+
+	ast_cli(fd, "\nPOST mappings:\n");
+	AST_RWLIST_RDLOCK(&post_mappings);
+	AST_LIST_TRAVERSE(&post_mappings, post_map, entry)
+		ast_cli(fd, "%s/%s => %s\n", prefix, post_map->from, post_map->to);
+	ast_cli(fd, "%s\n", AST_LIST_EMPTY(&post_mappings) ? "None.\n" : "");
+	AST_RWLIST_UNLOCK(&post_mappings);
+
 	return RESULT_SUCCESS;
 }
 
@@ -1006,8 +1312,12 @@
 
 int ast_http_init(void)
 {
+	mm_library_init();
+	mm_codec_registerdefaultcodecs();
+
 	ast_http_uri_link(&statusuri);
 	ast_http_uri_link(&staticuri);

[... 201 lines stripped ...]


More information about the svn-commits mailing list