Annotation of embedaddon/libpdel/http/servlet/http_servlet_file.3, revision 1.1.1.1
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>