--- urlparser.py.orig	2007-03-07 01:06:15.000000000 +0600
+++ urlparser.py	2007-03-07 01:11:51.000000000 +0600
@@ -425,11 +425,14 @@
 
     ``max_cache_age``:
       integer specifies Cache-Control max_age in seconds
+
+    ``index_file_name``:
+      string specifies name of directory index file. None disables directory indexing.
     """
     # @@: Should URLParser subclass from this?
 
     def __init__(self, directory, root_directory=None,
-                 cache_max_age=None):
+                 cache_max_age=None, index_file_name='index.html'):
         if os.path.sep != '/':
             directory = directory.replace(os.path.sep, '/')
         self.directory = directory
@@ -442,14 +445,17 @@
         if os.path.sep != '/':
             directory = directory.replace('/', os.path.sep)
             self.root_directory = self.root_directory.replace('/', os.path.sep)
+        self.index_file_name = index_file_name
 
     def __call__(self, environ, start_response):
         path_info = environ.get('PATH_INFO', '')
         if not path_info:
             return self.add_slash(environ, start_response)
         if path_info == '/':
-            # @@: This should obviously be configurable
-            filename = 'index.html'
+            if self.index_file_name:
+                filename = self.index_file_name
+            else:
+                return self.not_found(environ, start_response)
         else:
             filename = request.path_info_pop(environ)
         full = os.path.normpath(os.path.join(self.directory, filename))
@@ -465,8 +471,9 @@
             child_root = self.root_directory is not None and \
                 self.root_directory or self.directory
             return self.__class__(full, root_directory=child_root, 
-                                  cache_max_age=self.cache_max_age)(environ,
-                                                                   start_response)
+                                  cache_max_age=self.cache_max_age,
+                                  index_file_name=self.index_file_name)(environ,
+                                                                        start_response)
         if environ.get('PATH_INFO') and environ.get('PATH_INFO') != '/':
             return self.error_extra_path(environ, start_response)
         if_none_match = environ.get('HTTP_IF_NONE_MATCH')
@@ -518,7 +525,8 @@
     def __repr__(self):
         return '<%s %r>' % (self.__class__.__name__, self.directory)
 
-def make_static(global_conf, document_root, cache_max_age=None):
+def make_static(global_conf, document_root, cache_max_age=None,
+                index_file_name = 'index.html'):
     """
     Return a WSGI application that serves a directory (configured
     with document_root)
@@ -528,11 +536,12 @@
     if cache_max_age is not None:
         cache_max_age = int(cache_max_age)
     return StaticURLParser(
-        document_root, cache_max_age=cache_max_age)
+        document_root, cache_max_age=cache_max_age, index_file_name=index_file_name)
 
 class PkgResourcesParser(StaticURLParser):
 
-    def __init__(self, egg_or_spec, resource_name, manager=None, root_resource=None):
+    def __init__(self, egg_or_spec, resource_name, manager=None, root_resource=None,
+                 index_file_name = 'index.html'):
         if pkg_resources is None:
             raise NotImplementedError("This class requires pkg_resources.")
         if isinstance(egg_or_spec, (str, unicode)):
@@ -546,6 +555,7 @@
         if root_resource is None:
             root_resource = resource_name
         self.root_resource = os.path.normpath(root_resource)
+        self.index_file_name = index_file_name
 
     def __repr__(self):
         return '<%s for %s:%r>' % (
@@ -558,8 +568,10 @@
         if not path_info:
             return self.add_slash(environ, start_response)
         if path_info == '/':
-            # @@: This should obviously be configurable
-            filename = 'index.html'
+            if self.index_file_name:
+                filename = self.index_file_name
+            else:
+                return self.not_found(environ, start_response)
         else:
             filename = request.path_info_pop(environ)
         resource = os.path.normpath(self.resource_name + '/' + filename)
@@ -573,7 +585,9 @@
             child_root = self.root_resource is not None and self.root_resource or \
                 self.resource_name
             return self.__class__(self.egg, resource, self.manager,
-                                  root_resource=child_root)(environ, start_response)
+                                  root_resource=child_root,
+                                  index_file_name=self.index_file_name)(environ,
+                                                                        start_response)
         if environ.get('PATH_INFO') and environ.get('PATH_INFO') != '/':
             return self.error_extra_path(environ, start_response)
         
@@ -600,7 +614,8 @@
                self.egg, self.resource_name, debug_message or '(none)'))
         return exc.wsgi_application(environ, start_response)
 
-def make_pkg_resources(global_conf, egg, resource_name=''):
+def make_pkg_resources(global_conf, egg, resource_name='',
+                       index_file_name = 'index.html'):
     """
     A static file parser that loads data from an egg using
     ``pkg_resources``.  Takes a configuration value ``egg``, which is
@@ -609,7 +624,7 @@
     """
     if pkg_resources is None:
         raise NotImplementedError("This function requires pkg_resources.")
-    return PkgResourcesParser(egg, resource_name)
+    return PkgResourcesParser(egg, resource_name, index_file_name)
 
 def make_url_parser(global_conf, directory, base_python_name,
                     index_names=None, hide_extensions=None,

