Annotation of embedaddon/thttpd/config.h, revision 1.1
1.1 ! misho 1: /* config.h - configuration defines for thttpd and libhttpd
! 2: **
! 3: ** Copyright © 1995,1998,1999,2000,2001 by Jef Poskanzer <jef@mail.acme.com>.
! 4: ** All rights reserved.
! 5: **
! 6: ** Redistribution and use in source and binary forms, with or without
! 7: ** modification, are permitted provided that the following conditions
! 8: ** are met:
! 9: ** 1. Redistributions of source code must retain the above copyright
! 10: ** notice, this list of conditions and the following disclaimer.
! 11: ** 2. Redistributions in binary form must reproduce the above copyright
! 12: ** notice, this list of conditions and the following disclaimer in the
! 13: ** documentation and/or other materials provided with the distribution.
! 14: **
! 15: ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
! 16: ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 17: ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 18: ** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
! 19: ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 20: ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 21: ** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 22: ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 23: ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 24: ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 25: ** SUCH DAMAGE.
! 26: */
! 27:
! 28: #ifndef _CONFIG_H_
! 29: #define _CONFIG_H_
! 30:
! 31:
! 32: /* The following configuration settings are sorted in order of decreasing
! 33: ** likelihood that you'd want to change them - most likely first, least
! 34: ** likely last.
! 35: **
! 36: ** In case you're not familiar with the convention, "#ifdef notdef"
! 37: ** is a Berkeleyism used to indicate temporarily disabled code.
! 38: ** The idea here is that you re-enable it by just moving it outside
! 39: ** of the ifdef.
! 40: */
! 41:
! 42: /* CONFIGURE: CGI programs must match this pattern to get executed. It's
! 43: ** a simple shell-style wildcard pattern, with * meaning any string not
! 44: ** containing a slash, ** meaning any string at all, and ? meaning any
! 45: ** single character; or multiple such patterns separated by |. The
! 46: ** patterns get checked against the filename part of the incoming URL.
! 47: **
! 48: ** Restricting CGI programs to a single directory lets the site administrator
! 49: ** review them for security holes, and is strongly recommended. If there
! 50: ** are individual users that you trust, you can enable their directories too.
! 51: **
! 52: ** You can also specify a CGI pattern on the command line, with the -c flag.
! 53: ** Such a pattern overrides this compiled-in default.
! 54: **
! 55: ** If no CGI pattern is specified, neither here nor on the command line,
! 56: ** then CGI programs cannot be run at all. If you want to disable CGI
! 57: ** as a security measure that's how you do it, just don't define any
! 58: ** pattern here and don't run with the -c flag.
! 59: */
! 60: #ifdef notdef
! 61: /* Some sample patterns. Allow programs only in one central directory: */
! 62: #define CGI_PATTERN "/cgi-bin/*"
! 63: /* Allow programs in a central directory, or anywhere in a trusted
! 64: ** user's tree: */
! 65: #define CGI_PATTERN "/cgi-bin/*|/jef/**"
! 66: /* Allow any program ending with a .cgi: */
! 67: #define CGI_PATTERN "**.cgi"
! 68: /* When virtual hosting, enable the central directory on every host: */
! 69: #define CGI_PATTERN "/*/cgi-bin/*"
! 70: #endif
! 71:
! 72: /* CONFIGURE: How many seconds to allow CGI programs to run before killing
! 73: ** them. This is in case someone writes a CGI program that goes into an
! 74: ** infinite loop, or does a massive database lookup that would take hours,
! 75: ** or whatever. If you don't want any limit, comment this out, but that's
! 76: ** probably a really bad idea.
! 77: */
! 78: #define CGI_TIMELIMIT 30
! 79:
! 80: /* CONFIGURE: Maximum number of simultaneous CGI programs allowed.
! 81: ** If this many are already running, then attempts to run more will
! 82: ** return an HTTP 503 error. If this is not defined then there's
! 83: ** no limit (and you'd better have a lot of memory). This can also be
! 84: ** set in the runtime config file.
! 85: */
! 86: #ifdef notdef
! 87: #define CGI_LIMIT 50
! 88: #endif
! 89:
! 90: /* CONFIGURE: How many seconds to allow for reading the initial request
! 91: ** on a new connection.
! 92: */
! 93: #define IDLE_READ_TIMELIMIT 60
! 94:
! 95: /* CONFIGURE: How many seconds before an idle connection gets closed.
! 96: */
! 97: #define IDLE_SEND_TIMELIMIT 300
! 98:
! 99: /* CONFIGURE: The syslog facility to use. Using this you can set up your
! 100: ** syslog.conf so that all thttpd messages go into a separate file. Note
! 101: ** that even if you use the -l command line flag to send logging to a
! 102: ** file, errors still get sent via syslog.
! 103: */
! 104: #define LOG_FACILITY LOG_DAEMON
! 105:
! 106: /* CONFIGURE: Tilde mapping. Many URLs use ~username to indicate a
! 107: ** user's home directory. thttpd provides two options for mapping
! 108: ** this construct to an actual filename.
! 109: **
! 110: ** 1) Map ~username to <prefix>/username. This is the recommended choice.
! 111: ** Each user gets a subdirectory in the main chrootable web tree, and
! 112: ** the tilde construct points there. The prefix could be something
! 113: ** like "users", or it could be empty. See also the makeweb program
! 114: ** for letting users create their own web subdirectories.
! 115: **
! 116: ** 2) Map ~username to <user's homedir>/<postfix>. The postfix would be
! 117: ** the name of a subdirectory off of the user's actual home dir, something
! 118: ** like "public_html". This is what Apache and other servers do. The problem
! 119: ** is, you can't do this and chroot() at the same time, so it's inherently
! 120: ** a security hole. This is strongly dis-recommended, but it's here because
! 121: ** some people really want it. Use at your own risk.
! 122: **
! 123: ** You can also leave both options undefined, and thttpd will not do
! 124: ** anything special about tildes. Enabling both options is an error.
! 125: */
! 126: #ifdef notdef
! 127: #define TILDE_MAP_1 "users"
! 128: #define TILDE_MAP_2 "public_html"
! 129: #endif
! 130:
! 131: /* CONFIGURE: The file to use for authentication. If this is defined then
! 132: ** thttpd checks for this file in the local directory before every fetch.
! 133: ** If the file exists then authentication is done, otherwise the fetch
! 134: ** proceeds as usual.
! 135: **
! 136: ** If you undefine this then thttpd will not implement authentication
! 137: ** at all and will not check for auth files, which saves a bit of CPU time.
! 138: */
! 139: #define AUTH_FILE ".htpasswd"
! 140:
! 141: /* CONFIGURE: The default character set name to use with text MIME types.
! 142: ** This gets substituted into the MIME types where they have a "%s".
! 143: **
! 144: ** You can override this in the config file with the "charset" setting,
! 145: ** or on the command like with the -T flag.
! 146: */
! 147: #define DEFAULT_CHARSET "iso-8859-1"
! 148:
! 149:
! 150: /* Most people won't want to change anything below here. */
! 151:
! 152: /* CONFIGURE: This controls the SERVER_NAME environment variable that gets
! 153: ** passed to CGI programs. By default thttpd does a gethostname(), which
! 154: ** gives the host's canonical name. If you want to always use some other name
! 155: ** you can define it here.
! 156: **
! 157: ** Alternately, if you want to run the same thttpd binary on multiple
! 158: ** machines, and want to build in alternate names for some or all of
! 159: ** them, you can define a list of canonical name to altername name
! 160: ** mappings. thttpd seatches the list and when it finds a match on
! 161: ** the canonical name, that alternate name gets used. If no match
! 162: ** is found, the canonical name gets used.
! 163: **
! 164: ** If both SERVER_NAME and SERVER_NAME_LIST are defined here, thttpd searches
! 165: ** the list as above, and if no match is found then SERVER_NAME gets used.
! 166: **
! 167: ** In any case, if thttpd is started with the -h flag, that name always
! 168: ** gets used.
! 169: */
! 170: #ifdef notdef
! 171: #define SERVER_NAME "your.hostname.here"
! 172: #define SERVER_NAME_LIST \
! 173: "canonical.name.here/alternate.name.here", \
! 174: "canonical.name.two/alternate.name.two"
! 175: #endif
! 176:
! 177: /* CONFIGURE: Undefine this if you want thttpd to hide its specific version
! 178: ** when returning into to browsers. Instead it'll just say "thttpd" with
! 179: ** no version.
! 180: */
! 181: #define SHOW_SERVER_VERSION
! 182:
! 183: /* CONFIGURE: Define this if you want to always chroot(), without having
! 184: ** to give the -r command line flag. Some people like this as a security
! 185: ** measure, to prevent inadvertant exposure by accidentally running without -r.
! 186: ** You can still disable it at runtime with the -nor flag.
! 187: */
! 188: #ifdef notdef
! 189: #define ALWAYS_CHROOT
! 190: #endif
! 191:
! 192: /* CONFIGURE: Define this if you want to always do virtual hosting, without
! 193: ** having to give the -v command line flag. You can still disable it at
! 194: ** runtime with the -nov flag.
! 195: */
! 196: #ifdef notdef
! 197: #define ALWAYS_VHOST
! 198: #endif
! 199:
! 200: /* CONFIGURE: If you're using the vhost feature and you have a LOT of
! 201: ** virtual hostnames (like, hundreds or thousands), you will want to
! 202: ** enable this feature. It avoids a problem with most Unix filesystems,
! 203: ** where if there are a whole lot of items in a directory then name lookup
! 204: ** becomes very slow. This feature makes thttpd use subdirectories
! 205: ** based on the first characters of each hostname. You can set it to use
! 206: ** from one to three characters. If the hostname starts with "www.", that
! 207: ** part is skipped over. Dots are also skipped over, and if the name isn't
! 208: ** long enough then "_"s are used. Here are some examples of how hostnames
! 209: ** would get turned into directory paths, for each different setting:
! 210: ** 1: www.acme.com -> a/www.acme.com
! 211: ** 1: foobar.acme.com -> f/foobar.acme.com
! 212: ** 2: www.acme.com -> a/c/www.acme.com
! 213: ** 2: foobar.acme.com -> f/o/foobar.acme.com
! 214: ** 3: www.acme.com -> a/c/m/www.acme.com
! 215: ** 3: foobar.acme.com -> f/o/o/foobar.acme.com
! 216: ** 3: m.tv -> m/t/v/m.tv
! 217: ** 4: m.tv -> m/t/v/_/m.tv
! 218: ** Note that if you compile this setting in but then forget to set up
! 219: ** the corresponding subdirectories, the only error indication you'll
! 220: ** get is a "404 Not Found" when you try to visit a site. So be careful.
! 221: */
! 222: #ifdef notdef
! 223: #define VHOST_DIRLEVELS 1
! 224: #define VHOST_DIRLEVELS 2
! 225: #define VHOST_DIRLEVELS 3
! 226: #endif
! 227:
! 228: /* CONFIGURE: Define this if you want to always use a global passwd file,
! 229: ** without having to give the -P command line flag. You can still disable
! 230: ** it at runtime with the -noP flag.
! 231: */
! 232: #ifdef notdef
! 233: #define ALWAYS_GLOBAL_PASSWD
! 234: #endif
! 235:
! 236: /* CONFIGURE: When started as root, the default username to switch to after
! 237: ** initializing. If this user (or the one specified by the -u flag) does
! 238: ** not exist, the program will refuse to run.
! 239: */
! 240: #define DEFAULT_USER "nobody"
! 241:
! 242: /* CONFIGURE: When started as root, the program can automatically chdir()
! 243: ** to the home directory of the user specified by -u or DEFAULT_USER.
! 244: ** An explicit -d still overrides this.
! 245: */
! 246: #ifdef notdef
! 247: #define USE_USER_DIR
! 248: #endif
! 249:
! 250: /* CONFIGURE: If this is defined, some of the built-in error pages will
! 251: ** have more explicit information about exactly what the problem is.
! 252: ** Some sysadmins don't like this, for security reasons.
! 253: */
! 254: #define EXPLICIT_ERROR_PAGES
! 255:
! 256: /* CONFIGURE: Subdirectory for custom error pages. The error filenames are
! 257: ** $WEBDIR/$ERR_DIR/err%d.html - if virtual hosting is enabled then
! 258: ** $WEBDIR/hostname/$ERR_DIR/err%d.html is searched first. This allows
! 259: ** different custom error pages for each virtual hosting web server. If
! 260: ** no custom page for a given error can be found, the built-in error page
! 261: ** is generated. If ERR_DIR is not defined at all, only the built-in error
! 262: ** pages will be generated.
! 263: */
! 264: #define ERR_DIR "errors"
! 265:
! 266: /* CONFIGURE: Define this if you want a standard HTML tail containing
! 267: ** $SERVER_SOFTWARE and $SERVER_ADDRESS to be appended to the custom error
! 268: ** pages. (It is always appended to the built-in error pages.)
! 269: */
! 270: #define ERR_APPEND_SERVER_INFO
! 271:
! 272: /* CONFIGURE: nice(2) value to use for CGI programs. If this is undefined,
! 273: ** CGI programs run at normal priority.
! 274: */
! 275: #define CGI_NICE 10
! 276:
! 277: /* CONFIGURE: $PATH to use for CGI programs.
! 278: */
! 279: #define CGI_PATH "/usr/local/bin:/usr/ucb:/bin:/usr/bin"
! 280:
! 281: /* CONFIGURE: If defined, $LD_LIBRARY_PATH to use for CGI programs.
! 282: */
! 283: #ifdef notdef
! 284: #define CGI_LD_LIBRARY_PATH "/usr/local/lib:/usr/lib"
! 285: #endif
! 286:
! 287: /* CONFIGURE: How often to run the occasional cleanup job.
! 288: */
! 289: #define OCCASIONAL_TIME 120
! 290:
! 291: /* CONFIGURE: Seconds between stats syslogs. If this is undefined then
! 292: ** no stats are accumulated and no stats syslogs are done.
! 293: */
! 294: #define STATS_TIME 3600
! 295:
! 296: /* CONFIGURE: The mmap cache tries to keep the total number of mapped
! 297: ** files below this number, so you don't run out of kernel file descriptors.
! 298: ** If you have reconfigured your kernel to have more descriptors, you can
! 299: ** raise this and thttpd will keep more maps cached. However it's not
! 300: ** a hard limit, thttpd will go over it if you really are accessing
! 301: ** a whole lot of files.
! 302: */
! 303: #define DESIRED_MAX_MAPPED_FILES 1000
! 304:
! 305: /* CONFIGURE: The mmap cache also tries to keep the total mapped bytes
! 306: ** below this number, so you don't run out of address space. Again
! 307: ** it's not a hard limit, thttpd will go over it if you really are
! 308: ** accessing a bunch of large files.
! 309: */
! 310: #define DESIRED_MAX_MAPPED_BYTES 1000000000
! 311:
! 312: /* CONFIGURE: Minimum and maximum intervals between child-process reaping,
! 313: ** in seconds.
! 314: */
! 315: #define MIN_REAP_TIME 30
! 316: #define MAX_REAP_TIME 900
! 317:
! 318:
! 319: /* You almost certainly don't want to change anything below here. */
! 320:
! 321: /* CONFIGURE: When throttling CGI programs, we don't know how many bytes
! 322: ** they send back to the client because it would be inefficient to
! 323: ** interpose a counter. CGI programs are much more expensive than
! 324: ** regular files to serve, so we set an arbitrary and high byte count
! 325: ** that gets applied to all CGI programs for throttling purposes.
! 326: */
! 327: #define CGI_BYTECOUNT 25000
! 328:
! 329: /* CONFIGURE: The default port to listen on. 80 is the standard HTTP port.
! 330: */
! 331: #define DEFAULT_PORT 80
! 332:
! 333: /* CONFIGURE: A list of index filenames to check. The files are searched
! 334: ** for in this order.
! 335: */
! 336: #define INDEX_NAMES "index.html", "index.htm", "index.xhtml", "index.xht", "Default.htm", "index.cgi"
! 337:
! 338: /* CONFIGURE: If this is defined then thttpd will automatically generate
! 339: ** index pages for directories that don't have an explicit index file.
! 340: ** If you want to disable this behavior site-wide, perhaps for security
! 341: ** reasons, just undefine this. Note that you can disable indexing of
! 342: ** individual directories by merely doing a "chmod 711" on them - the
! 343: ** standard Unix file permission to allow file access but disable "ls".
! 344: */
! 345: #define GENERATE_INDEXES
! 346:
! 347: /* CONFIGURE: Whether to log unknown request headers. Most sites will not
! 348: ** want to log them, which will save them a bit of CPU time.
! 349: */
! 350: #ifdef notdef
! 351: #define LOG_UNKNOWN_HEADERS
! 352: #endif
! 353:
! 354: /* CONFIGURE: Whether to fflush() the log file after each request. If
! 355: ** this is turned off there's a slight savings in CPU cycles.
! 356: */
! 357: #define FLUSH_LOG_EVERY_TIME
! 358:
! 359: /* CONFIGURE: Time between updates of the throttle table's rolling averages. */
! 360: #define THROTTLE_TIME 2
! 361:
! 362: /* CONFIGURE: The listen() backlog queue length. The 1024 doesn't actually
! 363: ** get used, the kernel uses its maximum allowed value. This is a config
! 364: ** parameter only in case there's some OS where asking for too high a queue
! 365: ** length causes an error. Note that on many systems the maximum length is
! 366: ** way too small - see http://www.acme.com/software/thttpd/notes.html
! 367: */
! 368: #define LISTEN_BACKLOG 1024
! 369:
! 370: /* CONFIGURE: Maximum number of throttle patterns that any single URL can
! 371: ** be included in. This has nothing to do with the number of throttle
! 372: ** patterns that you can define, which is unlimited.
! 373: */
! 374: #define MAXTHROTTLENUMS 10
! 375:
! 376: /* CONFIGURE: Number of file descriptors to reserve for uses other than
! 377: ** connections. Currently this is 10, representing one for the listen fd,
! 378: ** one for dup()ing at connection startup time, one for reading the file,
! 379: ** one for syslog, and possibly one for the regular log file, which is
! 380: ** five, plus a factor of two for who knows what.
! 381: */
! 382: #define SPARE_FDS 10
! 383:
! 384: /* CONFIGURE: How many milliseconds to leave a connection open while doing a
! 385: ** lingering close.
! 386: */
! 387: #define LINGER_TIME 500
! 388:
! 389: /* CONFIGURE: Maximum number of symbolic links to follow before
! 390: ** assuming there's a loop.
! 391: */
! 392: #define MAX_LINKS 32
! 393:
! 394: /* CONFIGURE: You don't even want to know.
! 395: */
! 396: #define MIN_WOULDBLOCK_DELAY 100L
! 397:
! 398: #define USE_SENDFILE
! 399:
! 400: #endif /* _CONFIG_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>