OpenFlax Change Log ------------------- 2002.0702 - preliminary pre-release. 2002.0715 - added openflax.sh - changed config file extensions to '.conf' - non-world-executable directories are not displayed in dir listings - handlers can redirect to new URI's (but be careful not to form loops!) - divines MIME type when none configured in mime.conf by using 'file -b' 2002.0716 - All configuration info moved into ebin/openflax.app - Archivers (zip, tgz, bz2) configurable in .app file - Directory listing consults (dir)/index.pub for various settings: - - local template items to be inserted in dir.htpm, - - descriptions of files and directories - - offsite hyperlinks and associated description - - restrictions (if a list of IPs is given, only those IPs can access dir) - MIME type configuration can specify {M,F} handler to process file - Parses multipart forms (allows uploading of files, saves to /usr/tmp) - Sends Content-Length header as part of response for static files 2002.0717 - openflax.erl split into five smaller modules - prerequisites and keywords retrieved from index.pub file - temporary directory is configurable in .app file - uploaded files are tagged with unique timestamp - RFC 1123 style date/time sent in Date header field 2002.0718 - multipart forms are now parsed much more compliantly (IE, Netscape) - version number consistently retrieved from .app file - responds to HEAD requests - sends 501 Not Implemented in response to non GET/POST/HEAD requests - cleaned up code including better naming of functions - refuses to serve any symbolic link - form_* and arg_* variable names are always converted to lowercase - shows prerequisites and keywords in directory listing 2002.0719 - extracted new modules openflax_file and openflax_test from existing - core functions work when _user, _file, _dir, _test modules missing - insists on inclusion of Host: header field in request - for files, sends Last-Modified header field in HTTP response header - added BSD license to sources and generated preliminary documentation - archiving dir disallowed if index.pub contains {allow_archive, false} 2002.0720 - fixed several small bugs regarding log, archiving, and Last-Modified - never sends non-world-readable files or index.pub files in an archive - requests for /dir/?keyword=blah only show files with keyword 'blah' - file uploads which exceed size limit are choked off with a 413 response - temporary files and incomplete uploads are deleted 2002.0723 - fixed naming of uploaded files from Windows browsers that send path - gets upload size limit from user's quota if possible - links are now filtered by keyword like files - resurrected functionality to email user upon sign-up - archiving now only allowed if dir containing dir to archive contains {allow_archive, true} in its index.pub file - allows uploading of patches (stored in tmpdir) for any given file - allows downloading of files with patches already applied 2002.0727 - added TCP port tunnel so webserver can run as www-user, not root - made logging asynchronous - added log to socket option (e.g. run 'socket -s 2319' in another xterm) - handler is chosen based on virtual host 2002.0728 - added Remote-Address field so client can be identified even via tunnel - moved all request functionality from openflax to openflax_request - all optional OpenFlax modules renamed to openflax_mod_* - all openflax_mod_* modules now should conform to openflax_mod behaviour - moved archiving and patching functionalities into openflax_mod_dev - implemented simple virtual hosting for files and directories 2002.0729 - created openflax_mod_error for serving errors - changed openflax_htpm to openflax_mod_htpm for serving HTPM templates - syntax now: openflax_mod_htpm:serve_stock(Socket, ?MODULE, "template") - templates now have .html extension for sake of being viewed in browser 2002.0730 - moved patch menu (apply/upload/etc) to own page to reduce clutter in dir 2002.0801 - added ability to view patches - fixed minor errors in openflax_mod and openflax_mod_user 2002.0803 - added preliminary support for CGI's 2002.0806 - added x-url-encoded fill-out form POST data support for CGI's - made redirect to dir with trailing slash even if dir contains index.html - allows user to specify exactly which patches to apply upon download - allows user to remove patches if user level > 5 2002.0807 - fixed minor issues in serving of CGIs 2002.0809 - imported HTTP parsing functions from ce - fixed-width font used to display file sizes - does not show download-archive links in dir list if archiving not allowed 2002.0812 - uses ce_html:table/4 to generate directory & patch listings - openflax_mod_htpm absorbed into openflax_response module - .app file divided into sections on module basis - all templates moved into .app file - does not show ANY empty columns in dir listing (compressed ce_html:table/4) - dir only shows patch links for files with extensions listed in .app file - 'file magic' for when MIME type is missing now uses ce_file:is_binary/1 - symbolic links were only checked at end of URI; now they are NOT checked 2002.0813 - can upload and download files in dirs with 'allow_upload' in index.pub - moved patch-related stuff in mod_dir to mod_dev - description can be given for both patches and uploaded files - fixed errors in mod_user regarding >1 user logged in with same IP 2002.0814 - allows last component to be filename in dir hierarchy (for patch page) - allows file-upload form to be configured in .app file - moved more patch-related stuff in mod_dir to mod_dev - cleaned up optional interdependencies between mod_dir and mod_dev - absorbed openflax_mod_error back into openflax_response 2002.0906 - removed openflax_log, uses standard disk_log functionality instead 2002.0907 - dir and ext (args-on-otherwise-plain-file) handlers cfg'ed in mod_file - dispatches resource based on matching host & URI against regexps - uses erl_tar to create tgz files for archiving in a portable manner - added mod_tgz: when nonexistant .tgz file requested, auto-archives dir - added mod_txt: shows files as text (for browsers like IE that want to d/l) - no-cache pragma only sent for CGI's and other dynamic content - spaces in links in directory listing now translated to %20's 2002.0908 - openflax_mod_dev can now list all patches for all files - question marks and forward slashes recognized in all parts of dir listings 2002.1008 - tweaked GC in tunnel {fullsweep_after, 0} for serving large (>8M) files - added detection of Remote-Address when openflax_tunnel not running - fixed bug in Host var - now removes port number when resolving virt. host 2002.1009 - openflax_mod_tgz now uses openflax_mod_file:is_accessible to check access 2002.1010 - all config info except ports moved to private config file, for security - all config info centralized to priv conf file (no more index.pub files) - hierarchical selective directory access {openflax_mod_dir, allow_only} - fixed several bugs regarding log file 2002.1011 - openflax_mod_mnesia allows serving, editing resources in mnesia database - more robust parse_header_field/1 allows semicolons, equal-sign in quotes 2002.1018 - openflax_tunnel now no longer overflows and crashes on large files (based on flow control, not garbage collection) 2002.1027 - added log_access_modules to app file (mod_user is no longer hardcoded) - minor polishing 2002.1031 - made patch approval (logged in / max size) configurable - fixed "extra space" bug in Content-type: form/multipart request parsing - making user login "start page" configurable in config file - fixed bugs in mod_user, mod_dev, mod_dir 2002.1104 - upload directory size limiting - {global_quota, number_of_kilobytes} - made mod_dev use patch-2002.1104 module instead of executable 2002.1105 - module have optional log_access/2 and log_done/2 callbacks - three new experimental modules were added: - openflax_mod_monitor shows a list of connected machines at any given time - openflax_mod_random displays a random file picked from a directory - openflax_mod_html processes html before it is sent to the socket 2002.1108 - fixed up scripts and sample.conf 2002.1110 - fixed errors in README 2002.1111 - made openflax_mod_monitor work in real-time through a debugging socket - added openflax:start("Port") for overriding the .app port setting 2002.1112 - guessing content type now uses mime_types tag in config file (openflax_mod_random now sends correct content type) - moved get_content_type from openflax_mod_file to openflax - (it's still useful even when openflax_mod_file isn't installed) - added experimental openflax_mod_peer module (embryonic - in planning) 2002.1113 - split openflax_mod_dev into openflax_mod_patch and openflax_mod_upload - implementing ubiquitous session id's as part of openflax_mod_user - splitting into openflax (bare) and openflax_goodies (majority of mod's) 2002.1115 - changed sample configuration file to conform with minimal OpenFlax server - moved openflax_mod_dir to openflax_mod app; added openflax_mod_ls instead - upload functionality was moved into openflax_mod_upload for tighter base - access restrictions by IP are in request_dispatch, not individual modules 2002.1116 - openflax_response:send_raw_file/1 has tunable options like [read_ahead] 2002.1117 - fixed EOL in openflax_response:send_header_field/3 2002.1120 - removed openflax_tunnel from openflax startup script - use ipf instead! 2002.1204 - OpenFlax now refuses to run as root (assuming USER env var is accurate) 2003.0216 - argument to openflax:start/1 is now name of alternate config file to use 2003.0218 - thoroughly cleaned up openflax_request module - NOTE that openflax_request's interface to openflax_mod_upload has changed and that uploading will only work with the latest version of openflax_mod - cleaned up openflax module, added openflax:set_env/2 2003.0219 - split openflax_conf off from openflax 2003.0220 - added filename auto-completion in openflax_mod_file 2003.0223 - improved auto-completion 2003.0224 - removed openflax.app and all application-related functions. config file(s) must now be specified on the command line. config files specified later on the line will override earlier ones. 2003.0317 - required module to be listed in modules key in config file before calling - fixed openflax_mod_file:is_accessible/1 when used under Windows 2003.0326 - improved documentation. - improved auto-completion (ambiguous cases choose the latest accessible file) - openflax now checks that temp dir actually exists before starting up. 2003.0327 - improved documentation. - adopted use of ce_log as a friendlier wrapper to disk_log - rewrote serve/4 -> resolve_request/4, much cleaner - refuses to acknowledge world-writeable configuration files - precompiled host, resource, args regexps for performance boost - precompiled MIME-Type regexps for performance boost 2003.0405 - now refuses to serve world-writeable files or list world-writeable dirs - bug in openflax_mod_ls fixed regarding autoimatically appending / to URI - improved documentation & sample.conf 2003.0407 - openflax_mod_ls now accepts style=plain to generate plaintext listing - split lengthy inline documentation into seperate overview.html file 2003.0409 - improved error message when config file cannot be stat'ed 2003.0415 - removed temp_dir, file_handler, mime_types, 'guess' options from basic config - removed dir_handler options from openflax_mod_file config - removed allow_only option from openflax_mod_ls config - removed search_env and get_content_type from openflax_conf - changed openflax_mod behaviour: parameterized handlers & startup - removed "MIME-Type" process dictionary variable. - changed "HTTP-Version" into "HTTP-Major-Version" and "HTTP-Minor-Version" 2003.0416 - now parses absoluteURI form of request properly - fixed up HEAD logic. - worked on conformancy documentation. - split openflax into openflax and openflax_dispatch - split openflax_request into openflax_request and openflax_http - wrapped Socket in Http object (openflax_http server), changed all interfaces - split openflax_mod_file into openflax_mod_file and openflax_mod_autocomplete - converted from process dictionary to explicit dictionary argument - now loads arguments from config file into dictionary upon serve 2003.0417 - fixed parsing in openflax_http and openflax_request, including http version - fixed bug in openflax_dispatch - non-RemoteAddress no longer aborts dispatch (This was a longstanding bug in the dispatching logic that was triggered by me rearranging my config file, bringing my site down for several hours.) 2003.0418 - worked on documentation - added openflax_mod:put/3, dump/1, so modules needn't know about dict:* - removed logs_accesses/0 from openflax_mod behaviour - upgraded log_access/2, log_done/2 to log_access/3, log_done/3 2003.0419 - gearing towards openflax_mod handlers returning a code to let openflax serve rather than being allowed to call openflax_response themselves - fixed up HEAD logic - openflax_response:send_data & send_raw_file now send nothing if the request method was HEAD - experimental persistent connection support. - better zombie handling - fixed up content-length for persistent connections - changed all connection setting tags to atoms (e.g. sreq_basic_resource) - gearing towards removing openflax_conf; using global/module-level dicts for all configuration information 2003.0420 - fixed bug in merging global->module->handler level dict()s when launching an openflax_mod_* module. - switched configuration file to new, more expressive format. Now variables can be set as defaults in the {openflax, [...]} section. The {openflax_dispatch, [...]} section has it's own format (dispatching.) All other keys can be like {openflax_mod_ls, [{cfg_template, "blah"}]} - changed dict()s to conf()s and moved their functionality from openflax_mod to openflax_conf. - fixed up the 'file magic' in openflax_mod_file. 2003.0421 - fixed bug in {redirect, URI} and {redirect_domain, Domain} - added Allow: response header for openflax_mod_file - split openflax_http into openflax_http and openflax_http_parse - made openflax_http read header fields that extend beyond a single line - worked on conformancy (throws out content-length if TE =/= identity) - added streaming responses - made API outlaw calls to openflax_response + _mod - streaming responses correctly notice close of socket -> sres_stream_error 2003.0428 - added openflax_install - generates config file from interactive user query - changed openflax_mod interface 2003.0429 - added stop/1 callback to behaviour - worked on documentation 2003.0501 - added start-script generation to openflax_install 2003.0502 - fixed bug in http_parse: hostname is now always lowercased - reinstated openflax_http:read_line (openflax_mod_upload needs it!) - fixed (another) bug in opeflax_mod_file:is_accessible under Windows - worked on installer - works under windows, shows version number 2003.0516 - sres_keep_alive no longer defaults to true with openflax_install - Lynx complained that the Location: header was not a fully qualified URL, so now it is automatically fully qualified upon all redirects - cfg_www_roots removed; replaced with extra sections in config file; each section is a virtual hostname, and may contain settings like usual each virtual host section should contain a sreq_document_root setting - split openflax into openflax and openflax_serve 2003.0526 - response structure is the same in both config file and _mod response - redirect_domain is now permanent_new_domain or temporary_new_domain - stream resp changes: {stream_start, module} and {stream_data, module, data} - fixed bug in log_access code (no longer tries to pass along http()) - added cfg_max_conn concurrency limit - worked on API 1.0 draft document - confirmed all cfg_ and sreq_ settings - dangerous responses in dispatch (serve file, stream) are not allowed 2003.0529 - worked on conformancy document. - added 417 Expectation Failed response, given for all Expect: requests. - added parsing of chunked transfer-encoding (ignores exts and trailers) - checking that openflax_mod_* is actually installed is now in openflax_serve 2003.0629 - dependency on 'ce' library application removed 2003.0829 - API changed - file and temp_file are no longer valid responses. In this manner the base system no longer touches the file system, except to load the configuration file, thus making security auditing simpler. Consequently, the openflax_file module was removed. - openflax_mod_file, openflax_mod_ls moved to openflax_mod application. - now, no modules are included, but direct responses can be in config file. 2003.0903 - migrating module names to new hierarchical package format - openflax_dispatch cfg section has turned into additive cfg_dispatch setting with this, we lose the ability to pattern-match the host name (so what?) and the precompiling of regexps has also been removed, for simplicity but we gain a simpler configuration file layout (dispatch is per host) - now each dispatch specifier can contain a list of additional settings - API changed - content response replaces data, w/o additional settings - moved all templating functionality to openflax.mod.template 2003.0904 - multiple configuration files now cascade correctly - API changed - stream response now has a Size parameter (can be 'unknown') - stream response also takes a pid and exchanges messages with a process 2003.0905 - per-module configuration settings no longer override extant settings (the pre-existing settings take precedence when the new ones are combined) - added moved_temporarily response 2003.0916 - altered http.request so that body-parsing callbacks have access to conf settings accrued from the request line and headers. 2003.0917 - callback to parse body can be specified as {module, function} pair - various minor fixups and refactoring in openflax.string, .http.interface 2003.0923 - worked on documentation 2003.0925 - added sreq_basic_resource_container and sreq_basic_resource_leaf - added default res_content_type, res_last_modified, and sres_response_code - added cfg_openflax_error_handler scheme, for prettier error responses - worked on documentation 2003.0926 - cleaned up code dependencies (openflax.tcp is now used only by openflax.http.interface; openflax.http.response is now used only by openflax.serve) - renamed openflax.mod to openflax.handler - renamed cfg_port, etc, to cfg_openflax_port - cfg_openflax_watchers is now cumulative - worked on documentation 2003.0927 - removed openflax.log (will be replaced with openflax.handler.clf in future) 2003.1201 - rewritten openflax.http.interface now drives http parsing sequence - streaming responses now handled more efficiently (direct to http.interface) 2004.0129 - configuration files replaced with configuration modules - removed openflax.calendar, moved functions to openflax.string - cleaned up openflax.serve:launch to catch "server errors" in handler - adding upload->messages functionality to openflax.http.interface