**Note: This document is work in progress and yet unfinished!** written by Emmanuel Schmidbauer (eschmidbauer@gmail.com) This guide is designed to illustrate how to setup auth_db and usrloc to do digest authentication using a database backend. I will be using a postgresql database in this example. The following modules are required: usrloc, registrar, auth, auth_db ====== General preparations ====== You'll probably want to setup your database and add a few users. I will briefly go over how to setup the tables using the schema provided with kamailio. ====== Modules: auth, auth_db, usrloc, registrar ====== loadmodule "auth.so" loadmodule "auth_db.so" loadmodule "usrloc.so" loadmodule "registrar.so" modparam("auth_db|usrloc", "db_url", DB_URL) modparam("auth_db", "use_domain", 1) modparam("auth_db", "calculate_ha1", 1) modparam("usrloc", "db_mode", 3 ) modparam("usrloc", "desc_time_order", 1 ) modparam("usrloc", "nat_bflag", 1 ) modparam("usrloc", "timer_interval", 5 ) modparam("usrloc", "use_domain", 1) modparam("nathelper|registrar", "received_avp", "$avp(s:rcv)") # ------------------------- request routing logic ------------------- # main routing logic route { # per request initial checks route(SANITY_CHECK); # CANCEL processing if (is_method("CANCEL")) { if (t_check_trans()) { t_relay(); } exit; } route(CHECK_SOURCE_IP); ################################## ### HANDLE SEQUENTIAL REQUESTS ### route(WITHINDLG); ############################### ### HANDLE INITIAL REQUESTS ### t_check_trans(); route(REGISTER); route(INVITE); route(RELAY); } route[REGISTER] { if (is_method("REGISTER")) { # auth user/pass if(!www_authenticate("$fd", "user_extension")) { www_challenge("$fd", "1"); } if (!save("sip_registration")) { sl_reply_error(); } exit; } } # Handle INVITE + REFER route[INVITE] { # record routing for dialog forming requests (in case they are routed) # remove preloaded route headers remove_hf("Route"); if (is_method("INVITE|REFER")) { record_route(); # auth user/pass if (!proxy_authenticate("$fd", "user_extension")) { proxy_challenge("$fd", "1"); exit; } } }