added rewritten normpath from Moshe Zadka that does the right thing with
paths containing ..
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 2f7780c..d8da4ef 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -346,30 +346,25 @@
 
 def normpath(path):
     """Normalize path, eliminating double slashes, etc."""
+    if path == '':
+        return '.'
     import string
-    # Treat initial slashes specially
-    slashes = ''
-    while path[:1] == '/':
-        slashes = slashes + '/'
-        path = path[1:]
-    comps = string.splitfields(path, '/')
-    i = 0
-    while i < len(comps):
-        if comps[i] == '.':
-            del comps[i]
-            while i < len(comps) and comps[i] == '':
-                del comps[i]
-        elif comps[i] == '..' and i > 0 and comps[i-1] not in ('', '..'):
-            del comps[i-1:i+1]
-            i = i-1
-        elif comps[i] == '' and i > 0 and comps[i-1] <> '':
-            del comps[i]
-        else:
-            i = i+1
-    # If the path is now empty, substitute '.'
-    if not comps and not slashes:
-        comps.append('.')
-    return slashes + string.joinfields(comps, '/')
+    initial_slash = (path[0] == '/')
+    comps = string.split(path, '/')
+    new_comps = []
+    for comp in comps:
+        if comp in ('', '.'):
+            continue
+        if (comp != '..' or (not initial_slash and not new_comps) or 
+             (new_comps and new_comps[-1] == '..')):
+            new_comps.append(comp)
+        elif new_comps:
+            new_comps.pop()
+    comps = new_comps
+    path = string.join(comps, '/')
+    if initial_slash:
+        path = '/' + path
+    return path or '.'
 
 
 def abspath(path):