Return to http_servlet_file.3 CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libpdel / http / servlet |
1.1 ! misho 1: .\" Copyright (c) 2001-2002 Packet Design, LLC. ! 2: .\" All rights reserved. ! 3: .\" ! 4: .\" Subject to the following obligations and disclaimer of warranty, ! 5: .\" use and redistribution of this software, in source or object code ! 6: .\" forms, with or without modifications are expressly permitted by ! 7: .\" Packet Design; provided, however, that: ! 8: .\" ! 9: .\" (i) Any and all reproductions of the source or object code ! 10: .\" must include the copyright notice above and the following ! 11: .\" disclaimer of warranties; and ! 12: .\" (ii) No rights are granted, in any manner or form, to use ! 13: .\" Packet Design trademarks, including the mark "PACKET DESIGN" ! 14: .\" on advertising, endorsements, or otherwise except as such ! 15: .\" appears in the above copyright notice or in the software. ! 16: .\" ! 17: .\" THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND ! 18: .\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO ! 19: .\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING ! 20: .\" THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED ! 21: .\" WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ! 22: .\" OR NON-INFRINGEMENT. PACKET DESIGN DOES NOT WARRANT, GUARANTEE, ! 23: .\" OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS ! 24: .\" OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, ! 25: .\" RELIABILITY OR OTHERWISE. IN NO EVENT SHALL PACKET DESIGN BE ! 26: .\" LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE ! 27: .\" OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT, ! 28: .\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL ! 29: .\" DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF ! 30: .\" USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF ! 31: .\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ! 32: .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ! 33: .\" THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF ! 34: .\" THE POSSIBILITY OF SUCH DAMAGE. ! 35: .\" ! 36: .\" Author: Archie Cobbs <archie@freebsd.org> ! 37: .\" ! 38: .\" $Id: http_servlet_file.3,v 1.11 2004/06/02 17:24:37 archie Exp $ ! 39: .\" ! 40: .Dd April 22, 2002 ! 41: .Dt HTTP_SERVLET_FILE 3 ! 42: .Os ! 43: .Sh NAME ! 44: .Nm http_servlet_file ! 45: .Nd HTTP file servlet ! 46: .Sh LIBRARY ! 47: PDEL Library (libpdel, \-lpdel) ! 48: .Sh SYNOPSIS ! 49: .In sys/types.h ! 50: .In stdio.h ! 51: .In netinet/in.h ! 52: .In openssl/ssl.h ! 53: .In pdel/tmpl/tmpl.h ! 54: .In pdel/http/http_defs.h ! 55: .In pdel/http/http_server.h ! 56: .In pdel/http/servlet/tmpl.h ! 57: .In pdel/http/servlet/file.h ! 58: .Ft "struct http_servlet *" ! 59: .Fn http_servlet_file_create "const struct http_servlet_file_info *info" ! 60: .Ft void ! 61: .Fn http_servlet_file_serve "const char *path" "http_logger_t *logger" "struct http_request *req" "struct http_response *resp" ! 62: .Sh DESCRIPTION ! 63: .Fn http_servlet_file_create ! 64: creates a new servlet that serves HTTP requests from a file ! 65: or a tree of files in a directory hierarchy, with support for serving ! 66: .Xr tmpl 3 ! 67: template files. ! 68: .Pp ! 69: .Fa info ! 70: is a pointer to a ! 71: .Li "struct http_servlet_file_info" : ! 72: .Pp ! 73: .Bd -literal -compact -offset 3n ! 74: typedef int http_servlet_file_hide_t( ! 75: const struct http_servlet_file_info *info, ! 76: struct http_request *req, struct http_response *resp, ! 77: const char *path); ! 78: ! 79: struct http_servlet_file_info { ! 80: const char *docroot; /* document root, or NULL for cwd */ ! 81: u_char allow_escape; /* allow url to escape docroot */ ! 82: const char *filename; /* filename, or NULL to use url */ ! 83: const char *prefix; /* url prefix to strip, or NULL */ ! 84: const char *mime_type; /* mime type, or NULL to guess */ ! 85: const char *mime_encoding; /* mime encoding (or NULL) */ ! 86: http_logger_t *logger; /* http error logger */ ! 87: ! 88: http_servlet_file_hide_t *hide; /* optional file hider */ ! 89: struct http_servlet_tmpl_tinfo tinfo; /* for *.tmpl files */ ! 90: }; ! 91: .Ed ! 92: .Pp ! 93: When a request is received, the above ! 94: .Fa info ! 95: is used together with the requested URL to identify a file in the ! 96: filesystem from which to generate the response. ! 97: .Pp ! 98: .Fa docroot ! 99: specifies the root directory starting from which relative pathnames ! 100: are resolved. ! 101: If ! 102: .Fa docroot ! 103: is ! 104: .Dv NULL , ! 105: then the current working directory is assumed. ! 106: .Pp ! 107: .Fa allow_escape ! 108: is a boolean value that determines whether the file ultimately served ! 109: may lie outside of the directory hierarchy rooted at ! 110: .Fa docroot ! 111: (or the current directory if ! 112: .Fa docroot ! 113: is equal to ! 114: .Dv NULL) . ! 115: This can happen when symbolic links are encountered. ! 116: .Pp ! 117: If not ! 118: .Dv NULL , ! 119: .Fa filename ! 120: is the pathname of a specific file from which to serve all requests. ! 121: It may be a relative or absolute pathname; in the relative case, ! 122: it is relative to ! 123: .Fa docroot . ! 124: .Pp ! 125: Otherwise, if ! 126: .Fa filename ! 127: is ! 128: .Dv NULL , ! 129: a pathname is generated dynamically as follows. ! 130: First, if ! 131: .Fa prefix ! 132: is not ! 133: .Dv NULL ! 134: and it exactly matches the first part of the requested URL path, then that ! 135: prefix is removed from the URL path. ! 136: Note that the first character of ! 137: .Fa prefix ! 138: must be '/' for it to match. ! 139: Then a pathname is generated by by treating the requested URL path ! 140: as a relative pathname relative to ! 141: .Fa docroot . ! 142: .Pp ! 143: In all cases, the strings ! 144: .Dq \&. , ! 145: .Dq \&.\&. , ! 146: and the empty string are disallowed as pathname components in the ! 147: requested URL path and will generate a ! 148: .Dq "404 Not Found" ! 149: response. ! 150: .Pp ! 151: .Fa mime_type ! 152: may be used to specify the MIME type for the served file, and ! 153: .Fa mime_encoding ! 154: the content encoding. ! 155: Either or both may be ! 156: .Dv NULL ! 157: to let the file servlet try to guess the MIME information. ! 158: .Pp ! 159: The ! 160: .Fa logger ! 161: is a logging function whose type is defined in ! 162: .Xr http_server 3 . ! 163: .Pp ! 164: The ! 165: .Fa hide ! 166: function pointer, if not ! 167: .Dv NULL , ! 168: allows selectively hiding certain files in the directory tree. ! 169: .Fn hide ! 170: should return non-zero to hide the file with pathname ! 171: .Fa path , ! 172: which will always be an absolute pathname in normalized form (see ! 173: .Xr realpath 3) . ! 174: .Fa info ! 175: points to a read-only copy of the information passed to ! 176: .Fn http_servlet_file_create . ! 177: .\" ! 178: .Ss "Template support" ! 179: .\" ! 180: This servlet is capable of serving ! 181: .Xr tmpl ! 182: template files by automatically creating ! 183: .Xr http_servlet_tmpl 3 ! 184: servlets on a demand basis. ! 185: To enable this feature, the ! 186: .Fa tinfo ! 187: structure should be filled in with a non- ! 188: .Dv NULL ! 189: .Fa handler ! 190: field. ! 191: Then if for any requested file pathname "/foo/bar" there is a file named ! 192: "/foo/bar.tmpl", then this file will be treated as a ! 193: .Xr tmpl 3 ! 194: template and passed to the ! 195: .Xr http_servlet_tmpl 3 ! 196: servlet. ! 197: .Pp ! 198: See ! 199: .Xr http_servlet_tmpl 3 ! 200: for a description of the ! 201: .Fa tinfo ! 202: structure. ! 203: Although the same ! 204: .Fa tinfo ! 205: structure is used to create multiple template servlets, the ! 206: .Fn tinfo.freer ! 207: destructor function will only be invoked once, when the enclosing ! 208: .Nm http_servlet_file ! 209: servlet is destroyed. ! 210: .Pp ! 211: The ! 212: .Fn hide ! 213: function (if specified) does not block template execution; however, ! 214: it may still be used to block access to the actual template files ! 215: themselves. ! 216: .\" ! 217: .Ss "Directory support" ! 218: .\" ! 219: If the file being served is a directory, the file servlet will ! 220: respond with a corresponding HTTP redirect if any of the following ! 221: files exist in that directory: ! 222: .Li index.tmpl , ! 223: .Li index.html , ! 224: or ! 225: .Li index.htm. ! 226: .Pp ! 227: .Fn http_servlet_file_serve ! 228: is a general function sometimes useful when implementing other servlets. ! 229: It simply serves the file at pathname ! 230: .Fa path ! 231: using the MIME guessing and directory redirection algorithms. ! 232: .Sh RETURN VALUES ! 233: On failure, ! 234: .Fn http_servlet_file_create ! 235: returns ! 236: .Dv NULL ! 237: and sets ! 238: .Va errno ! 239: to an appropriate value. ! 240: .Sh SEE ALSO ! 241: .Xr http_request 3 , ! 242: .Xr http_response 3 , ! 243: .Xr http_server 3 , ! 244: .Xr http_servlet 3 , ! 245: .Xr http_servlet_tmpl 3 , ! 246: .Xr libpdel 3 , ! 247: .Xr realpath 3 ! 248: .Sh HISTORY ! 249: The PDEL library was developed at Packet Design, LLC. ! 250: .Dv "http://www.packetdesign.com/" ! 251: .Sh AUTHORS ! 252: .An Archie Cobbs Aq archie@freebsd.org