diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 5f8bca3d1b826dbb9618cb44cddc2b840a106719..1020880f397cf551f7b71c73bb9be71da7f34a95 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -296,7 +296,17 @@ int sieve_storage_alloc_with_settings(struct sieve_instance *svinst,
 	if (ret < 0)
 		return -1;
 
-	storage->bin_path = p_strdup_empty(storage->pool, set->script_bin_path);
+	const char *bin_path = set->script_bin_path;
+
+	if (sieve_storage_get_full_path(storage, bin_path, &bin_path) < 0) {
+		sieve_storage_set_critical(
+			storage,
+			"Binary storage path '%s' is relative to home directory, "
+			"but home directory is not available.", bin_path);
+		return -1;
+	}
+
+	storage->bin_path = p_strdup_empty(storage->pool, bin_path);
 	storage->max_storage = set->quota_storage_size;
 	storage->max_scripts = set->quota_script_count;