diff -ur src/mod_auth_dets.erl src_patched/mod_auth_dets.erl --- mod_auth_dets.erl 2008-08-19 13:05:23.000000000 +0200 +++ mod_auth_dets.erl 2008-08-21 09:47:49.000000000 +0200 @@ -32,27 +32,29 @@ delete_group/2, remove/1]). --export([store_directory_data/2]). +-export([store_directory_data/3]). -include("httpd.hrl"). -include("mod_auth.hrl"). -store_directory_data(_Directory, DirData) -> +store_directory_data(_Directory, DirData, Server_root) -> ?CDEBUG("store_directory_data -> ~n" " Directory: ~p~n" " DirData: ~p", [_Directory, DirData]), - PWFile = proplists:get_value(auth_user_file, DirData), - GroupFile = proplists:get_value(auth_group_file, DirData), + {PWFile, Absolute_pwdfile} = absolute_file_name(auth_user_file, DirData, + Server_root), + {GroupFile, Absolute_groupfile} = absolute_file_name(auth_group_file, + DirData, Server_root), Addr = proplists:get_value(bind_address, DirData), Port = proplists:get_value(port, DirData), PWName = httpd_util:make_name("httpd_dets_pwdb",Addr,Port), - case dets:open_file(PWName,[{type,set},{file,PWFile},{repair,true}]) of + case dets:open_file(PWName,[{type,set},{file,Absolute_pwdfile},{repair,true}]) of {ok, PWDB} -> GDBName = httpd_util:make_name("httpd_dets_groupdb",Addr,Port), - case dets:open_file(GDBName,[{type,set},{file,GroupFile},{repair,true}]) of + case dets:open_file(GDBName,[{type,set},{file,Absolute_groupfile},{repair,true}]) of {ok, GDB} -> NDD1 = lists:keyreplace(auth_user_file, 1, DirData, {auth_user_file, PWDB}), @@ -228,3 +230,25 @@ dets:close(GDB), dets:close(PWDB), ok. + +%% absolute_file_name/2 +%% +%% Return the absolute path name of File_type. +absolute_file_name(File_type, DirData, Server_root) -> + Path = proplists:get_value(File_type, DirData), + Absolute_path = case filename:pathtype(Path) of + relative -> + case Server_root of + undefined -> + {error, + ?NICE(Path++ + " is an invalid file name because " + "ServerRoot is not defined")}; + _ -> + filename:join(Server_root,Path) + end; + _ -> + Path + end, + {Path, Absolute_path}. + diff -ur src/mod_auth.erl src_patched/mod_auth.erl --- mod_auth.erl 2008-08-19 13:41:00.000000000 +0200 +++ mod_auth.erl 2008-08-21 09:47:49.000000000 +0200 @@ -520,7 +520,8 @@ PassW end, DirDataLast = lists:keydelete(auth_access_password,1,DirData), - case catch AuthMod:store_directory_data(Directory, DirDataLast) of + Server_root = proplists:get_value(server_root, ConfigList), + case catch AuthMod:store_directory_data(Directory, DirDataLast, Server_root) of ok -> add_auth_password(Directory,Pwd,ConfigList), {ok, {directory, {Directory, DirDataLast}}}; diff -ur src/mod_auth_mnesia.erl src_patched/mod_auth_mnesia.erl --- mod_auth_mnesia.erl 2008-08-19 13:48:10.000000000 +0200 +++ mod_auth_mnesia.erl 2008-08-21 09:47:49.000000000 +0200 @@ -37,14 +37,14 @@ remove_group_member/5, remove_group_member/6, remove_group/4, remove_group/5]). --export([store_directory_data/2]). +-export([store_directory_data/3]). -include("httpd.hrl"). -include("mod_auth.hrl"). -store_directory_data(_Directory, _DirData) -> +store_directory_data(_Directory, _DirData, _Server_root) -> %% We don't need to do anything here, we could of course check that %% the appropriate mnesia tables has been created prior to %% starting the http server. diff -ur src/mod_auth_plain.erl src_patched/mod_auth_plain.erl --- mod_auth_plain.erl 2008-08-19 13:05:38.000000000 +0200 +++ mod_auth_plain.erl 2008-08-21 09:47:49.000000000 +0200 @@ -25,7 +25,7 @@ -define(VMODULE,"AUTH_PLAIN"). %% Internal API --export([store_directory_data/2]). +-export([store_directory_data/3]). -export([get_user/2, @@ -154,9 +154,9 @@ {error, no_such_group} end. -store_directory_data(_Directory, DirData) -> - PWFile = proplists:get_value(auth_user_file, DirData), - GroupFile = proplists:get_value(auth_group_file, DirData), +store_directory_data(_Directory, DirData, Server_root) -> + PWFile = absolute_file_name(auth_user_file, DirData, Server_root), + GroupFile = absolute_file_name(auth_group_file, DirData, Server_root), case load_passwd(PWFile) of {ok, PWDB} -> case load_group(GroupFile) of @@ -292,6 +292,23 @@ - - +%% absolute_file_name/2 +%% +%% Return the absolute path name of File_type. +absolute_file_name(File_type, DirData, Server_root) -> + Path = proplists:get_value(File_type, DirData), + case filename:pathtype(Path) of + relative -> + case Server_root of + undefined -> + {error, + ?NICE(Path++ + " is an invalid file name because " + "ServerRoot is not defined")}; + _ -> + filename:join(Server_root,Path) + end; + _ -> + Path + end.