anchor.diff:      ?MODULE:stop();
   config_change("httpd", "socket_options") ->
       ?MODULE:stop();
  +config_change("httpd", "authentication_handlers") ->
  +    set_auth_handlers();
   config_change("httpd_global_handlers", _) ->
       ?MODULE:stop();
   config_change("httpd_db_handlers", _) ->
       ?MODULE:stop();
   config_change("ssl", _) ->
       ?MODULE:stop().
  +
  +set_auth_handlers() ->
  +    AuthenticationSrcs = make_fun_spec_strs(
  +        couch_config:get("httpd", "authentication_handlers", "")),
  +    AuthHandlers = lists:map(
  +        fun(A) -> {make_arity_1_fun(A), ?l2b(A)} end, AuthenticationSrcs),
  +    ok = application:set_env(couch, auth_handlers, AuthHandlers).
   
   % SpecStr is a string like "{my_module, my_fun}"
   %  or "{my_module, my_fun, <<"my_arg">>}"
  
positive.code:     },
  
      HandlerFun = couch_util:dict_find(HandlerKey, UrlHandlers, DefaultFun),
  
      {ok, Resp} =
      try
          case authenticate_request(HttpReq, AuthenticationSrcs) of
          #httpd{} = Req ->
              HandlerFun(Req);
          Response ->
  
negative.code: % Try authentication handlers in order until one sets a user_ctx
  % the auth funs also have the option of returning a response
  % move this to couch_httpd_auth?
  authenticate_request(#httpd{user_ctx=#user_ctx{}} = Req, _AuthHandlers) ->
      Req;
  authenticate_request(#httpd{} = Req, []) ->
      case couch_config:get("couch_httpd_auth", "require_valid_user", "false") of
  