diff --git a/includes/file.inc b/includes/file.inc
index bc7ce78..e921ef8 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -2289,12 +2289,19 @@ function drupal_mkdir($uri, $mode = NULL, $recursive = FALSE, $context = NULL) {
     $mode = variable_get('file_chmod_directory', 0775);
   }
 
+  // The mode is affected by the current umask, so will default to 755 on some
+  // servers. To avoid this, get the current umask and set it to 0. This way,
+  // the mode can be used without interference. When finished, reset the umask.
+  // @see http://drupal.org/node/1068266
+  $oldumask = umask(0);
   if (!isset($context)) {
-    return mkdir($uri, $mode, $recursive);
+    $success = mkdir($uri, $mode, $recursive);
   }
   else {
-    return mkdir($uri, $mode, $recursive, $context);
+    $success = mkdir($uri, $mode, $recursive, $context);
   }
+  umask($oldumask);
+  return $success;
 }
 
 /**
