diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 6c0274a785fb4012286712b30cc196d8f2476cbe..b5f30766a8b985ce6389cb02911dcd7a1dc576ba 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -75,14 +75,25 @@ void sieve_tool_deinit(void)
 
 const char *sieve_tool_get_user(void)
 {
-	uid_t process_euid = geteuid();
-	struct passwd *pw = getpwuid(process_euid);
-	if (pw != NULL) {
-		return t_strdup(pw->pw_name);
-	} 
-		
-	i_fatal("couldn't lookup our username (uid=%s)", dec2str(process_euid));
-	return NULL;
+	const char *user;
+	uid_t process_euid;
+	struct passwd *pw;
+
+	user = getenv("USER");
+
+	if ( user == NULL || *user == '\0' ) {
+		process_euid = geteuid();
+
+		if ((pw = getpwuid(process_euid)) != NULL) {
+            user = t_strdup(pw->pw_name);
+        }
+	}
+
+	if ( user == NULL || *user == '\0' ) {
+		i_fatal("couldn't lookup our username (uid=%s)", dec2str(process_euid));
+	}
+	
+	return user;
 }
 
 void sieve_tool_get_envelope_data