From 088b6f33671697dc8c15197b0a63eecf6d74f75f Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 29 Nov 2013 12:10:53 -0500
Subject: [PATCH] Added filesystem write permission check (issue-345)

---
 src/main/java/com/gitblit/Constants.java                     |    4 +++-
 src/main/java/com/gitblit/manager/AuthenticationManager.java |    4 ++--
 src/main/java/com/gitblit/manager/UserManager.java           |    4 ++--
 releases.moxie                                               |    1 +
 src/main/java/com/gitblit/manager/RepositoryManager.java     |   18 ++++++++++++++++++
 5 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index 3a1b296..47c63b9 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -46,6 +46,7 @@
 	- Set Link: <url>; rel="canonical" http header for SEO (issue-304)
 	- Added raw links to the commit, commitdiff, and compare pages (issue-319)
 	- Support intradocument linking in Markdown content using [[WikiLinks]] syntax (issue-324)
+	- Added filesystem write permission check (issue-345) 
 	- Support rendering confluence, mediawiki, textile, tracwiki, and twiki markup documents
 	- Added setting to globally disable anonymous pushes in the receive pack
 	- Added a normalized diffstat display to the commit, commitdiff, and compare pages
diff --git a/src/main/java/com/gitblit/Constants.java b/src/main/java/com/gitblit/Constants.java
index ee6de45..d425cda 100644
--- a/src/main/java/com/gitblit/Constants.java
+++ b/src/main/java/com/gitblit/Constants.java
@@ -70,7 +70,9 @@
 
 	public static final String BRANCH_GRAPH_PATH = "/graph/";
 
-	public static final String BORDER = "***********************************************************";
+	public static final String BORDER = "*****************************************************************";
+
+	public static final String BORDER2 = "#################################################################";
 
 	public static final String FEDERATION_USER = "$gitblit";
 
diff --git a/src/main/java/com/gitblit/manager/AuthenticationManager.java b/src/main/java/com/gitblit/manager/AuthenticationManager.java
index 8c66ce5..60687d4 100644
--- a/src/main/java/com/gitblit/manager/AuthenticationManager.java
+++ b/src/main/java/com/gitblit/manager/AuthenticationManager.java
@@ -108,10 +108,10 @@
 		String realm = settings.getString(Keys.realm.userService, "${baseFolder}/users.conf");
 		if (legacyRedirects.containsKey(realm)) {
 			logger.warn("");
-			logger.warn("#################################################################");
+			logger.warn(Constants.BORDER2);
 			logger.warn(" IUserService '{}' is obsolete!", realm);
 			logger.warn(" Please set '{}={}'", "realm.authenticationProviders", legacyRedirects.get(realm));
-			logger.warn("#################################################################");
+			logger.warn(Constants.BORDER2);
 			logger.warn("");
 
 			// conditionally override specified authentication providers
diff --git a/src/main/java/com/gitblit/manager/RepositoryManager.java b/src/main/java/com/gitblit/manager/RepositoryManager.java
index 0a3f663..d24a06d 100644
--- a/src/main/java/com/gitblit/manager/RepositoryManager.java
+++ b/src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -157,6 +157,8 @@
 		configureJGit();
 		configureCommitCache();
 
+		confirmWriteAccess();
+
 		return this;
 	}
 
@@ -1756,4 +1758,20 @@
 					daysToCache, commitCount, repoCount, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start)));
 		}
 	}
+
+	protected void confirmWriteAccess() {
+		if (runtimeManager.isServingRepositories()) {
+			try {
+				File file = File.createTempFile(".test-", ".txt", getRepositoriesFolder());
+				file.delete();
+			} catch (Exception e) {
+				logger.error("");
+				logger.error(Constants.BORDER2);
+				logger.error("Please check filesystem permissions!");
+				logger.error("FAILED TO WRITE TO REPOSITORIES FOLDER!!", e);
+				logger.error(Constants.BORDER2);
+				logger.error("");
+			}
+		}
+	}
 }
diff --git a/src/main/java/com/gitblit/manager/UserManager.java b/src/main/java/com/gitblit/manager/UserManager.java
index 19943d7..67b1d68 100644
--- a/src/main/java/com/gitblit/manager/UserManager.java
+++ b/src/main/java/com/gitblit/manager/UserManager.java
@@ -94,10 +94,10 @@
 				// create the user service from the legacy config
 				String realmKey = legacyBackingServices.get(realm);
 				logger.warn("");
-				logger.warn("#################################################################");
+				logger.warn(Constants.BORDER2);
 				logger.warn(" Key '{}' is obsolete!", realmKey);
 				logger.warn(" Please set '{}={}'", Keys.realm.userService, settings.getString(realmKey, "${baseFolder}/users.conf"));
-				logger.warn("#################################################################");
+				logger.warn(Constants.BORDER2);
 				logger.warn("");
 				File realmFile = runtimeManager.getFileOrFolder(realmKey, "${baseFolder}/users.conf");
 				service = createUserService(realmFile);

--
Gitblit v1.9.1