Oops, the previous patch contained a bug in chmod.  Fixed now.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index f5ac1d5..8458d58 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -695,10 +695,10 @@
 	char *path;
 	int i;
 	int res;
-	if (!PyArg_ParseTuple(args, format, &path, &i))
+	if (!PyArg_ParseTuple(args, "si", &path, &i))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
-	res = chmod(path, i);
+	res = chmod(path, (mode_t)i);
 	Py_END_ALLOW_THREADS
 	if (res < 0)
 		return posix_error_with_filename(path);