Fix nasty 500 error on POST to /_config
diff --git a/src/config.erl b/src/config.erl
index 640d7c2..1feed6b 100644
--- a/src/config.erl
+++ b/src/config.erl
@@ -253,7 +253,7 @@
             true = ets:insert(?MODULE, {{Sec, Key}, Val}),
             couch_log:notice("~p: [~s] ~s set to ~s for reason ~p",
                              [?MODULE, Sec, Key, Val, Reason]),
-            case {Persist, Config#config.write_filename} of
+            ConfigWriteReturn = case {Persist, Config#config.write_filename} of
                 {true, undefined} ->
                     ok;
                 {true, FileName} ->
@@ -261,16 +261,21 @@
                 _ ->
                     ok
             end,
-            Event = {config_change, Sec, Key, Val, Persist},
-            gen_event:sync_notify(config_event, Event),
-            {reply, ok, Config}
+            case ConfigWriteReturn of
+                ok ->
+                    Event = {config_change, Sec, Key, Val, Persist},
+                    gen_event:sync_notify(config_event, Event),
+                    {reply, ok, Config};
+                {error, _Else} ->
+                    {reply, {error, _Else}, Config}
+            end
     end;
 
 handle_call({delete, Sec, Key, Persist, Reason}, _From, Config) ->
     true = ets:delete(?MODULE, {Sec,Key}),
     couch_log:notice("~p: [~s] ~s deleted for reason ~p",
         [?MODULE, Sec, Key, Reason]),
-    case {Persist, Config#config.write_filename} of
+    ConfigDeleteReturn = case {Persist, Config#config.write_filename} of
         {true, undefined} ->
             ok;
         {true, FileName} ->
@@ -278,9 +283,15 @@
         _ ->
             ok
     end,
-    Event = {config_change, Sec, Key, deleted, Persist},
-    gen_event:sync_notify(config_event, Event),
-    {reply, ok, Config};
+    case ConfigDeleteReturn of
+        ok ->
+            Event = {config_change, Sec, Key, deleted, Persist},
+            gen_event:sync_notify(config_event, Event),
+            {reply, ok, Config};
+        _Else ->
+            {reply, _Else, Config}
+    end;
+
 handle_call(reload, _From, Config) ->
     DiskKVs = lists:foldl(fun(IniFile, DiskKVs0) ->
         {ok, ParsedIniValues} = parse_ini_file(IniFile),
diff --git a/src/config_writer.erl b/src/config_writer.erl
index 2812686..159437c 100644
--- a/src/config_writer.erl
+++ b/src/config_writer.erl
@@ -35,7 +35,7 @@
 
     NewLines = process_file_lines(Lines, [], SectionLine, Pattern, Key, Value),
     NewFileContents = reverse_and_add_newline(strip_empty_lines(NewLines), []),
-    ok = file:write_file(File, NewFileContents).
+    file:write_file(File, NewFileContents).
 
 
 process_file_lines([Section|Rest], SeenLines, Section, Pattern, Key, Value) ->
diff --git a/test/config_tests.erl b/test/config_tests.erl
index 7a5b56d..6afb591 100644
--- a/test/config_tests.erl
+++ b/test/config_tests.erl
@@ -297,6 +297,45 @@
     }.
 
 
+config_access_right_test_() ->
+    {
+        "Config file access right tests",
+        {
+            foreach,
+            fun setup/0,
+            fun teardown/1,
+            [
+                fun should_write_config_to_file/0,
+                fun should_delete_config_from_file/0,
+                fun should_not_write_config_to_file/0,
+                fun should_not_delete_config_from_file/0
+            ]
+        }
+    }.
+
+
+should_write_config_to_file() ->
+    ?assertEqual(ok, config:set("admins", "foo", "500", true)).
+
+
+should_delete_config_from_file() ->
+    ?assertEqual(ok, config:delete("admins", "foo", true)).
+
+
+should_not_write_config_to_file() ->
+    meck:new(config_writer),
+    meck:expect(config_writer, save_to_file, fun(_, _) -> {error, eacces} end),
+    ?assertEqual({error, eacces}, config:set("admins", "foo", "500", true)),
+    meck:unload(config_writer).
+
+
+should_not_delete_config_from_file() ->
+    meck:new(config_writer),
+    meck:expect(config_writer, save_to_file, fun(_, _) -> {error, eacces} end),
+    ?assertEqual({error, eacces}, config:delete("admins", "foo", true)),
+    meck:unload(config_writer).
+
+
 should_load_all_configs() ->
     ?assert(length(config:all()) > 0).