anchor.diff:  %% Attribute fetching functions :
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
  +%%--------------------------------------------------------------------
  +%% Function: get_password_for_user(Username)
  +%%           Username = string()
  +%% Descrip.: Returns the password for a user.
  +%% Returns : Password               |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Password = string()
  +%%--------------------------------------------------------------------
   get_password_for_user(User) ->
       {Src, Res} = module_apply(get_password_for_user, [User]),
       ResStr = case Res of
  
positive.code: %%% File    : sipuserdb.erl
  %%% Author  : Fredrik Thulin <ft@it.su.se>
  %%% Description : Yxa user database.
  %%% Created : 30 Sep 2003 by Fredrik Thulin <ft@it.su.se>
  
  -module(sipuserdb).
  
  -export([yxa_init/0,
  	 get_user_with_address/1,
  	 get_users_for_address_of_record/1,
  
negative.code:     logger:log(debug, "Userdb: ~p:get_password_for_user ~p -> ~s", [Src, User, ResStr]),
      Res.
  
  %%--------------------------------------------------------------------
  %% Function: get_classes_for_user(Username)
  %%           Username = string()
  %% Descrip.: Return a list of classes for this Username. Classes are
  %%           'free-form' atoms of types of PSTN destinations this user
  %%           is allowed to call to, through a pstnproxy. What class a
  %%           PSTN number is in is determined through pstnproxy
  %%           configuration.
  %% Returns : Classes                |
  %%           nomatch                |
  %%           throw({siperror, ...})
  %%           Classes = list() of atom()
  %%--------------------------------------------------------------------
  get_classes_for_user(User) ->
      {Src, Res} = module_apply(get_classes_for_user, [User]),
      logger:log(debug, "Userdb: ~p:get_classes_for_user ~p -> ~p", [Src, User, Res]),
      Res.
  
  %%--------------------------------------------------------------------
  %% Function: get_telephonenumber_for_user(User)
  %%           User = string()
  %% Descrip.: Return the telephone number for a user. We do this by
  %%           fetching all addresses for the user and then examining
  %%           them to see if any of them is a tel: URL, or has a
  %%           user part which is all numeric or is an E.164 number.
  %%           The numbering plan in the number return is not specified.
  %% Returns : Number                 |
  %%           nomatch                |
  %%           throw({siperror, ...})
  %%           Number = string()
  %%--------------------------------------------------------------------
  get_telephonenumber_for_user(User) ->
      {Src, Res} = module_apply(get_telephonenumber_for_user, [User]),
      logger:log(debug, "Userdb: ~p:get_telephonenumber_for_user ~p -> ~p", [Src, User, Res]),
      Res.
  
  %%--------------------------------------------------------------------
  %% Function: get_forwards_for_users(Usernames)
  %%           Usernames = list() of string()
  %% Descrip.: Return a list of forwards for this user. Forwards are
  %%           currently not in the main Yxa CVS repository - Magnus has
  %%           some CVS merging to do.
  %% Returns : ForwardList            |
  %%           nomatch                |
  %%           throw({siperror, ...})
  %%           ForwardList = list() of sipproxy_forward record()
  %%--------------------------------------------------------------------
  get_forwards_for_users(Users) ->
      {Src, Res} = module_apply(get_forwards_for_users, [Users]),
      logger:log(debug, "Userdb: ~p:get_forwards_for_users ~p -> ~p", [Src, Users, Res]),
      Res.
  
  %%--------------------------------------------------------------------
  %% Function: get_forward_for_user(Username)
  %%           Username = string()
  %% Descrip.: Return the forward entry for a user. Forwards are
  %%           currently not in the main Yxa CVS repository - Magnus has
  %%           some CVS merging to do.
  %% Returns : ForwardList            |
  %%           nomatch                |
  %%           throw({siperror, ...})
  %%           ForwardList = list() of sipproxy_forward record()
  %%--------------------------------------------------------------------
  get_forward_for_user(User) ->
      {Src, Res} = module_apply(get_forward_for_users, [User]),
      logger:log(debug, "Userdb: ~p:get_forward_for_user ~p -> ~p", [Src, User, Res]),
      Res.
  
  
  %%====================================================================
  %% Internal functions
  %%====================================================================
  
  module_apply(Function, Args) ->
      Modules = sipserver:get_env(userdb_modules, ?DEFAULT_MODULES),
      module_apply(Modules, Function, Args).
  
  module_apply([], _Function, _Args) ->
      {"*", nomatch};
  module_apply([Module | T], Function, Args) ->
      case apply(Module, Function, Args) of
  	error ->
  	    logger:log(error, "Userdb: Error was returned from ~p:~p (arguments ~p), "
  