cvs commit: apache-1.3/src/os/win32 util_win32.c
ben 98/03/03 14:02:32 Modified:src/os/win32 util_win32.c Log: Wake up and fix the damn thing properly. Revision ChangesPath 1.11 +1 -5 apache-1.3/src/os/win32/util_win32.c Index: util_win32.c === RCS file: /export/home/cvs/apache-1.3/src/os/win32/util_win32.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- util_win32.c 1998/03/03 21:16:49 1.10 +++ util_win32.c 1998/03/03 22:02:32 1.11 @@ -57,15 +57,11 @@ API_EXPORT(char *) os_canonical_filename(pool *pPool, const char *szFile) { char buf[HUGE_STRING_LEN]; -int add_trailing_slash = 0; -if (*szFile && szFile[strlen(szFile)-1] == '/') -add_trailing_slash = 1; - sub_canonical_filename(buf, szFile); buf[0]=tolower(buf[0]); -if (add_trailing_slash) +if (*szFile && szFile[strlen(szFile)-1] == '/') strcat(buf, "/"); return pstrdup(pPool, buf);
cvs commit: apache-1.3/src/ap .cvsignore
ben 98/03/03 13:17:45 Modified:src/ap .cvsignore Log: Win32 build directory. Revision ChangesPath 1.2 +1 -0 apache-1.3/src/ap/.cvsignore Index: .cvsignore === RCS file: /export/home/cvs/apache-1.3/src/ap/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- .cvsignore1997/11/15 19:04:49 1.1 +++ .cvsignore1998/03/03 21:17:45 1.2 @@ -1 +1,2 @@ Makefile +Debug
cvs commit: apache-1.3/src/os/win32 util_win32.c
ben 98/03/03 13:16:50 Modified:src CHANGES src/os/win32 util_win32.c Log: Move (and document) the trailing / fix. Revision ChangesPath 1.679 +3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.678 retrieving revision 1.679 diff -u -r1.678 -r1.679 --- CHANGES 1998/03/03 01:22:03 1.678 +++ CHANGES 1998/03/03 21:16:47 1.679 @@ -1,5 +1,8 @@ Changes with Apache 1.3b6 + *) WIN32: Preserve trailing slash in canonical path (and hence +in PATH_INFO). [Paul Sutton, Ben Laurie] + *) USE_PTHREAD_SERIALIZED_ACCEPT has proven unreliable depending on the rev of Solaris and what mixture of modules are in use. So it has been disabled, and Solaris is back to using 1.10 +8 -9 apache-1.3/src/os/win32/util_win32.c Index: util_win32.c === RCS file: /export/home/cvs/apache-1.3/src/os/win32/util_win32.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- util_win32.c 1998/03/02 10:57:59 1.9 +++ util_win32.c 1998/03/03 21:16:49 1.10 @@ -12,17 +12,11 @@ char *szFilePart; WIN32_FIND_DATA d; HANDLE h; -int add_trailing_slash = 0; n = GetFullPathName(szFile, sizeof buf, buf, &szFilePart); assert(n); assert(n < sizeof buf); -if (*szFile && szFile[strlen(szFile)-1] == '/') { -add_trailing_slash = 1; -} - - if (!strchr(buf, '*') && !strchr(buf, '?')) { h = FindFirstFile(buf, &d); if(h != INVALID_HANDLE_VALUE) @@ -58,17 +52,22 @@ strlwr(d.cFileName); strcat(szCanon, d.cFileName); } -if (add_trailing_slash) { -strcat(szCanon, "/"); -} } API_EXPORT(char *) os_canonical_filename(pool *pPool, const char *szFile) { char buf[HUGE_STRING_LEN]; +int add_trailing_slash = 0; +if (*szFile && szFile[strlen(szFile)-1] == '/') +add_trailing_slash = 1; + sub_canonical_filename(buf, szFile); buf[0]=tolower(buf[0]); + +if (add_trailing_slash) +strcat(buf, "/"); + return pstrdup(pPool, buf); }
cvs commit: apache-1.3/src/modules/standard mod_rewrite.h
rse 98/03/03 07:58:12 Modified:src/modules/standard mod_rewrite.h Log: Remove already no longer needed define, because we replaced all of its usages with ap_cpystrn() variants in the past. Revision ChangesPath 1.42 +0 -3 apache-1.3/src/modules/standard/mod_rewrite.h Index: mod_rewrite.h === RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_rewrite.h,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- mod_rewrite.h 1998/03/03 15:53:33 1.41 +++ mod_rewrite.h 1998/03/03 15:58:11 1.42 @@ -208,9 +208,6 @@ #define MAX_ENV_FLAGS 5 -#define EOS_PARANOIA(ca)ca[sizeof(ca)-1] = '\0' -#define EOS_PARANOIA_SIZE(cp, size) cp[size-1] = '\0' - /* **
cvs commit: apache-1.3/src/modules/standard mod_rewrite.h
rse 98/03/03 07:53:34 Modified:src/modules/standard mod_rewrite.h Log: Add own definition for RAND_MAX because some non-strict-POSIX platforms don't define it although they provide the rand() function :-( Revision ChangesPath 1.41 +4 -0 apache-1.3/src/modules/standard/mod_rewrite.h Index: mod_rewrite.h === RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_rewrite.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- mod_rewrite.h 1998/03/02 06:51:20 1.40 +++ mod_rewrite.h 1998/03/03 15:53:33 1.41 @@ -198,6 +198,10 @@ #define YES TRUE #endif +#ifndef RAND_MAX +#define RAND_MAX 32767 +#endif + #ifndef LONG_STRING_LEN #define LONG_STRING_LEN 2048 #endif
cvs commit: apache-1.3/src Makefile.tmpl
rse 98/03/03 05:47:44 Modified:src/include hide.h src/helpers UpdateHide src Makefile.tmpl Log: Made the generation of src/include/hide.h more robust and complete and commit an updated version of this header file. Revision ChangesPath 1.2 +3 -11 apache-1.3/src/include/hide.h Index: hide.h === RCS file: /export/home/cvs/apache-1.3/src/include/hide.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- hide.h1998/02/28 15:39:32 1.1 +++ hide.h1998/03/03 13:47:41 1.2 @@ -76,8 +76,6 @@ #define daemons_max_free AP_daemons_max_free #define daemons_min_free AP_daemons_min_free #define daemons_to_start AP_daemons_to_start -#define endAP_end -#define environAP_environ #define excess_requests_per_child AP_excess_requests_per_child #define group_id AP_group_id #define jmpbuffer AP_jmpbuffer @@ -129,7 +127,6 @@ #define digest_module AP_digest_module #define dir_module AP_dir_module #define dummy_mutexAP_dummy_mutex -#define edata AP_edata #define env_module AP_env_module #define example_cmds AP_example_cmds #define example_handlers AP_example_handlers @@ -231,7 +228,6 @@ #define check_alarmAP_check_alarm #define check_auth AP_check_auth #define check_cmd_context AP_check_cmd_context -#define check_fulluri AP_check_fulluri #define check_serverpath AP_check_serverpath #define check_symlinks AP_check_symlinks #define check_user_id AP_check_user_id @@ -265,6 +261,7 @@ #define create_request_config AP_create_request_config #define create_server_config AP_create_server_config #define default_handlerAP_default_handler +#define default_port_for_request AP_default_port_for_request #define default_port_for_schemeAP_default_port_for_scheme #define default_type AP_default_type #define destroy_pool AP_destroy_pool @@ -274,10 +271,6 @@ #define directory_walk AP_directory_walk #define dirsection AP_dirsection #define discard_request_body AP_discard_request_body -#define dlcloseAP_dlclose -#define dlerrorAP_dlerror -#define dlopen AP_dlopen -#define dlsym AP_dlsym #define do_nothing AP_do_nothing #define document_root AP_document_root #define each_byterange AP_each_byterange @@ -287,7 +280,6 @@ #define escape_htmlAP_escape_html #define escape_path_segmentAP_escape_path_segment #define escape_shell_cmd AP_escape_shell_cmd -#define etext AP_etext #define exists_scoreboard_imageAP_exists_scoreboard_image #define file_walk AP_file_walk #define filesectionAP_filesection @@ -379,6 +371,7 @@ #define make_sub_request AP_make_sub_request #define make_table AP_make_table #define malloc_block AP_malloc_block +#define matches_request_vhost AP_matches_request_vhost #define meets_conditions AP_meets_conditions #define merge_core_dir_configs AP_merge_core_dir_configs #define merge_core_server_configs AP_merge_core_server_configs @@ -407,7 +400,6 @@ #define parse_htaccess AP_parse_htaccess #define parse_uri AP_parse_uri #define parse_uri_components AP_parse_uri_components -#define parse_uri_components_regex AP_parse_uri_components_regex #define parse_vhost_addrs AP_parse_vhost_addrs #define pcallocAP_pcalloc #define pcfg_open_custom AP_pcfg_open_custom @@ -554,6 +546,7 @@ #define set_pidfileAP_set_pidfile #define set_scoreboard AP_set_scoreboard #define set_send_buffer_size AP_set_send_buffer_size +#define set_server_alias AP_set_server_alias #define set_server_limit AP_set_server_limit #define set_server_rootAP_set_server_root #define set_server_string_slot AP_set_server_string_slot @@ -580,7 +573,6 @@ #define spawn_child_err_buff AP_spawn_child_err_buff #define srm_command_
cvs commit: apache-1.3 STATUS
mjc 98/03/03 05:38:57 Modified:.STATUS Log: warm and raining Revision ChangesPath 1.170 +6 -0 apache-1.3/STATUS Index: STATUS === RCS file: /export/home/cvs/apache-1.3/STATUS,v retrieving revision 1.169 retrieving revision 1.170 diff -u -r1.169 -r1.170 --- STATUS1998/03/03 08:17:20 1.169 +++ STATUS1998/03/03 13:38:56 1.170 @@ -81,6 +81,12 @@ Status: Dean +1, Martin +0 (duplicates /server-info?server), Alexei -1 (shared lib concerns) +* Mark Cox's [PATCH] Fix for broken ProxyPass/ProxyRequest +<[EMAIL PROTECTED]> +not commited immediately since it's involved with the new uri +stuff that I've not been closely following +Status: Mark +1 + Concepts: * Ralf's [CONTRIB] AutoConf Interface Emulation
cvs commit: apache-1.3/htdocs/manual/mod mod_log_config.html
dgaudet 98/03/03 00:38:27 Modified:htdocs/manual/mod mod_log_config.html Log: Explain %p and %v a little more. PR: 1908 Revision ChangesPath 1.26 +13 -2 apache-1.3/htdocs/manual/mod/mod_log_config.html Index: mod_log_config.html === RCS file: /export/home/cvs/apache-1.3/htdocs/manual/mod/mod_log_config.html,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- mod_log_config.html 1998/03/03 08:25:05 1.25 +++ mod_log_config.html 1998/03/03 08:38:26 1.26 @@ -116,7 +116,7 @@ %...l: Remote logname (from identd, if supplied) %...{Foobar}n: The contents of note "Foobar" from another module. %...{Foobar}o: The contents of Foobar: header line(s) in the reply. -%...p: Port of the server serving the request (see UseCanonicalName) +%...p: The canonical Port of the server serving the request %...P: The process ID of the child that serviced the request. %...r: First line of request %...s: Status. For requests that got internally redirected, this @@ -127,7 +127,7 @@ %...T: The time taken to serve the request, in seconds. %...u: Remote user (from auth; may be bogus if return status (%s) is 401) %...U: The URL path requested. -%...v: The name of the server (i.e. which virtual host?) +%...v: The canonical ServerName of the server serving the request. The `...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can @@ -153,6 +153,17 @@ %u %t \"%r\" %s %b", which can be used as the basis for extending for format if desired (e.g. to add extra fields at the end). NCSA's extended/combined log format would be "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"". + + + +Note that the canonical ServerName +and Port of the server serving the request +are used for %v and %p respectively. This +happens regardless of the +UseCanonicalName setting because +otherwise log analysis programs would have to duplicate the entire +vhost matching algorithm in order to decide what host really served +the request. Using Multiple Log Files
cvs commit: apache-1.3/src/modules/standard mod_log_config.c
dgaudet 98/03/03 00:31:29 Modified:src/modules/standard mod_log_config.c Log: explain why we don't use get_server_port and get_server_name in mod_log_config Revision ChangesPath 1.47 +3 -0 apache-1.3/src/modules/standard/mod_log_config.c Index: mod_log_config.c === RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_log_config.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- mod_log_config.c 1998/03/02 06:51:18 1.46 +++ mod_log_config.c 1998/03/03 08:31:28 1.47 @@ -401,6 +401,9 @@ return pstrdup(r->pool, duration); } +/* These next two routines use the canonical name:port so that log + * parsers don't need to duplicate all the vhost parsing crud. + */ static char *log_virtual_host(request_rec *r, char *a) { return pstrdup(r->pool, r->server->server_hostname);
cvs commit: apache-1.3/htdocs/manual/mod mod_log_config.html
dgaudet 98/03/03 00:25:06 Modified:htdocs/manual/mod mod_log_config.html Log: more accurate %p docs Revision ChangesPath 1.25 +1 -1 apache-1.3/htdocs/manual/mod/mod_log_config.html Index: mod_log_config.html === RCS file: /export/home/cvs/apache-1.3/htdocs/manual/mod/mod_log_config.html,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- mod_log_config.html 1998/02/28 08:12:48 1.24 +++ mod_log_config.html 1998/03/03 08:25:05 1.25 @@ -116,7 +116,7 @@ %...l: Remote logname (from identd, if supplied) %...{Foobar}n: The contents of note "Foobar" from another module. %...{Foobar}o: The contents of Foobar: header line(s) in the reply. -%...p: The port the request was served to +%...p: Port of the server serving the request (see UseCanonicalName) %...P: The process ID of the child that serviced the request. %...r: First line of request %...s: Status. For requests that got internally redirected, this
cvs commit: apache-1.3/src/modules/test mod_test_util_uri.c
dgaudet 98/03/03 00:21:55 Modified:src/modules/test mod_test_util_uri.c Log: (some cvs brokenness going on here) Aha! Now I understand why Martin modified the uri regex the way he did... and I documented it. Fix the "GET //foo/bar" bug. Revision ChangesPath 1.2 +18 -7 apache-1.3/src/modules/test/mod_test_util_uri.c Index: mod_test_util_uri.c === RCS file: /export/home/cvs/apache-1.3/src/modules/test/mod_test_util_uri.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mod_test_util_uri.c 1998/03/02 06:51:22 1.1 +++ mod_test_util_uri.c 1998/03/03 08:21:54 1.2 @@ -159,13 +159,12 @@ strp = input_uri; expect = 0; - if (u & T_scheme) { + /* a scheme requires a hostinfo and vice versa */ + /* a hostinfo requires a hostname */ + if (u & (T_scheme|T_user|T_password|T_hostname|T_port_str)) { expect |= T_scheme; strp = my_stpcpy(strp, pieces->scheme); *strp++ = ':'; - } - /* can't have hostinfo without hostname */ - if (u & (T_user|T_password|T_hostname|T_port_str)) { *strp++ = '/'; *strp++ = '/'; /* can't have password without user */ @@ -303,9 +302,21 @@ HEADER(fragment); #undef HEADER -total_failures = 0; -for (i = 0; i < sizeof(uri_tests) / sizeof(uri_tests[0]); ++i) { - total_failures += iterate_pieces(r, &uri_tests[i], i); +if (r->args) { + i = atoi(r->args); + total_failures = iterate_pieces(r, &uri_tests[i], i); +} +else { + total_failures = 0; + for (i = 0; i < sizeof(uri_tests) / sizeof(uri_tests[0]); ++i) { + total_failures += iterate_pieces(r, &uri_tests[i], i); + if (total_failures > 256) { + rprintf(r, "\nStopped early to save your browser " +"from certain death!\nTOTAL FAILURES = %u\n", +total_failures); + return OK; + } + } } rprintf(r, "\nTOTAL FAILURES = %u\n", total_failures);
cvs commit: apache-1.3 STATUS
dgaudet 98/03/02 18:25:07 Modified:.STATUS Log: it was a sunny day Revision ChangesPath 1.168 +17 -9 apache-1.3/STATUS Index: STATUS === RCS file: /export/home/cvs/apache-1.3/STATUS,v retrieving revision 1.167 retrieving revision 1.168 diff -u -r1.167 -r1.168 --- STATUS1998/03/02 14:32:33 1.167 +++ STATUS1998/03/03 02:25:06 1.168 @@ -62,6 +62,7 @@ * Dean's cleanup of code in http_vhost.c and vhost-stuff in mod_rewrite.c * Dean's rewrite of absoluteURI handling vhost matching * Dean's new mod_test_util_uri.c +* back out USE_PTHREAD_SERIALIZED_ACCEPT for solaris Available Patches: @@ -102,11 +103,6 @@ In progress: -* Martin Kraemer's [PATCH] Parsing URI into its components - This has "evolved" into a new module: util_uri. Martin - will post when it's at a state where he's happy with it. - Ken would like to see it in libap instead of libmain. - * Dean's [PATCH] yet another slow function <[EMAIL PROTECTED]> Status: Dean +1, Jim +1, Martin +1, Paul +1 @@ -124,14 +120,27 @@ * proxy security fixes from 1.2.5 need to be brought forward -* DoS created by the lame hostname lookup code in check_fulluri, which - should be part of the proxy and not in the core - * Documentation for: 1) htdocs/manual/sourcereorg.html and other files should mention new mod_so capabilities. 2) windows.html should be cleaned up. +* uri issues (dean will do unless someone else wants 'em): + - RFC2068 requires a server to recognize its own IP addr(s) in dot + notation, we do this fine if the user follows the dns-caveats + documentation... we should handle it in the case the user doesn't ever + supply a dot-notation address. + + - The proxy now asks http_vhost "is this hostname:port the same as + r->server?" Which means if it's not the same as r->server, but is another + server on the same machine then the proxy may make a request to itself. + In particular if you're so silly as to combine NameVirtualHosts with the + proxy on the same IP address you may end up with some fun results. + (which means: test namevhosts + proxy) + + - abs_path versus net_loc parsing issues with new parser, in particular + "GET //hostname/path HTTP/1.0" won't behave correctly. + Closed issues: * Removal of inetd mode @@ -220,7 +229,6 @@ * Ken's PR#1053: an error when accessing a negotiated document explicitly names the variant selected. Should it do so, or should the base input name be referenced? - Win32 specific issues:
cvs commit: apache-1.3/src/include conf.h
dgaudet 98/03/02 17:22:11 Modified:htdocs/manual new_features_1_3.html htdocs/manual/misc perf-tuning.html src CHANGES Configure src/include conf.h Log: Fall back to USE_FCNTL_SERIALIZED_ACCEPT for Solaris. It's foolish us wasting resources trying to solve what may end up being bugs in solaris. PR: 1779, 1854, 1904 Revision ChangesPath 1.47 +1 -2 apache-1.3/htdocs/manual/new_features_1_3.html Index: new_features_1_3.html === RCS file: /export/home/cvs/apache-1.3/htdocs/manual/new_features_1_3.html,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- new_features_1_3.html 1998/02/23 08:27:35 1.46 +++ new_features_1_3.html 1998/03/03 01:21:55 1.47 @@ -305,8 +305,7 @@ performed for each hit, now it is performed only once per second. This should be noticeable on servers running with hundreds of children and high loads. -New serialization choices improve performance on Linux, Solaris, - and IRIX. +New serialization choices improve performance on Linux, and IRIX. mod_log_config can be compile-time configured to buffer writes. Replaced strncpy() with ap_cpystrn(), a 1.9 +4 -2 apache-1.3/htdocs/manual/misc/perf-tuning.html Index: perf-tuning.html === RCS file: /export/home/cvs/apache-1.3/htdocs/manual/misc/perf-tuning.html,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- perf-tuning.html 1998/02/05 21:19:57 1.8 +++ perf-tuning.html 1998/03/03 01:21:56 1.9 @@ -371,8 +371,10 @@ USE_PTHREAD_SERIALIZED_ACCEPT (1.3 or later) This method uses POSIX mutexes and should work on any architecture implementing the full POSIX threads specification, -however appears to only work on Solaris (2.5 or later). This is the -default for Solaris 2.5 or later. +however appears to only work on Solaris (2.5 or later), and even then +only in certain configurations. If you experiment with this you should +watch out for your server hanging and not responding. Static content +only servers may work just fine. If your system has another method of serialization which isn't in the 1.678 +8 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.677 retrieving revision 1.678 diff -u -r1.677 -r1.678 --- CHANGES 1998/03/02 10:57:57 1.677 +++ CHANGES 1998/03/03 01:22:03 1.678 @@ -1,5 +1,13 @@ Changes with Apache 1.3b6 + *) USE_PTHREAD_SERIALIZED_ACCEPT has proven unreliable depending on + the rev of Solaris and what mixture of modules are in use. So + it has been disabled, and Solaris is back to using + USE_FCNTL_SERIALIZED_ACCEPT. Users may experiment with + USE_PTHREAD_SERIALIZED_ACCEPT at their own risk, it may speed + up static content only servers. Or it may fail unpredictably. + [Dean Gaudet] PR#1779, 1854, 1904 + *) mod_test_util_uri.c created which tests the logic in util_uri.c. [Dean Gaudet] 1.193 +0 -5 apache-1.3/src/Configure Index: Configure === RCS file: /export/home/cvs/apache-1.3/src/Configure,v retrieving revision 1.192 retrieving revision 1.193 diff -u -r1.192 -r1.193 --- Configure 1998/03/01 12:56:02 1.192 +++ Configure 1998/03/03 01:22:06 1.193 @@ -425,11 +425,6 @@ OS="Solaris $PLATOSVERS" CFLAGS="$CFLAGS -DSOLARIS2=$PLATOSVERS" LIBS="$LIBS -lsocket -lnsl" - case "$PLATOSVERS" in - 2[56789]*) - LIBS="$LIBS -lpthread" - ;; - esac DBM_LIB="" case "$PLATOSVERS" in 2[01234]*) 1.186 +2 -6 apache-1.3/src/include/conf.h Index: conf.h === RCS file: /export/home/cvs/apache-1.3/src/include/conf.h,v retrieving revision 1.185 retrieving revision 1.186 diff -u -r1.185 -r1.186 --- conf.h1998/02/28 15:39:32 1.185 +++ conf.h1998/03/03 01:22:10 1.186 @@ -138,13 +138,9 @@ #undef NO_SETSID #define HAVE_SYS_RESOURCE_H #define bzero(a,b) memset(a,0,b) -#if SOLARIS2 < 250 -#define USE_FCNTL_SERIALIZED_ACCEPT -#else #if !defined(USE_SYSVSEM_SERIALIZED_ACCEPT) && \ -!defined(USE_FCNTL_SERIALIZED_ACCEPT) -#define USE_PTHREAD_SERIALIZED_ACCEPT -#endif +!defined(USE_PTHREAD_SERIALIZED_ACCEPT) +#define USE_FCNTL_SERIALIZED_ACCEPT #endif #define NEED_UNION_SEMUN #define HAVE_MMAP