[asterisk-commits] mmichelson: branch mmichelson/authenticate r381065 - in /team/mmichelson/auth...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Feb 8 09:25:28 CST 2013
Author: mmichelson
Date: Fri Feb 8 09:25:24 2013
New Revision: 381065
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=381065
Log:
Make nonce lifetime configurable.
Thanks to Olle Johansson for suggesting this.
Modified:
team/mmichelson/authenticate/include/asterisk/res_sip.h
team/mmichelson/authenticate/res/res_sip_authenticator_digest.c
Modified: team/mmichelson/authenticate/include/asterisk/res_sip.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/authenticate/include/asterisk/res_sip.h?view=diff&rev=381065&r1=381064&r2=381065
==============================================================================
--- team/mmichelson/authenticate/include/asterisk/res_sip.h (original)
+++ team/mmichelson/authenticate/include/asterisk/res_sip.h Fri Feb 8 09:25:24 2013
@@ -199,6 +199,8 @@
/* Authentication credentials in MD5 format (hash of user:realm:pass) */
AST_STRING_FIELD(md5_creds);
);
+ /* The time period (in seconds) that a nonce may be reused */
+ unsigned int nonce_lifetime;
/* Used to determine what to use when authenticating */
enum ast_sip_auth_type type;
};
Modified: team/mmichelson/authenticate/res/res_sip_authenticator_digest.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/authenticate/res/res_sip_authenticator_digest.c?view=diff&rev=381065&r1=381064&r2=381065
==============================================================================
--- team/mmichelson/authenticate/res/res_sip_authenticator_digest.c (original)
+++ team/mmichelson/authenticate/res/res_sip_authenticator_digest.c Fri Feb 8 09:25:24 2013
@@ -214,15 +214,14 @@
* data and a realm and see if it matches the nonce they sent us.
* \param candidate The nonce on an incoming request
* \param rdata The incoming request
- * \param realm The realm for which we want to authenticate
+ * \param auth The auth credentials we are trying to match against.
* \retval 0 Nonce does not pass validity checks
* \retval 1 Nonce passes validity check
*/
-static int check_nonce(const char *candidate, pjsip_rx_data *rdata, const char *realm)
+static int check_nonce(const char *candidate, pjsip_rx_data *rdata, struct ast_sip_auth *auth)
{
char *copy = ast_strdupa(candidate);
char *timestamp = strsep(©, "/");
- static const int AUTH_TOLERANCE = 32;
int timestamp_int;
time_t now = time(NULL);
struct ast_str *calculated = ast_str_create(64);
@@ -235,11 +234,11 @@
return 0;
}
- if ((int) now - timestamp_int > AUTH_TOLERANCE) {
+ if ((int) now - timestamp_int > auth->nonce_lifetime) {
return 0;
}
- build_nonce(&calculated, timestamp, rdata, realm);
+ build_nonce(&calculated, timestamp, rdata, auth->realm);
ast_debug(3, "Calculated nonce %s. Actual nonce is %s\n", ast_str_buffer(calculated), candidate);
if (strcmp(ast_str_buffer(calculated), candidate)) {
return 0;
@@ -255,7 +254,7 @@
while ((auth_hdr = (pjsip_authorization_hdr *) pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_AUTHORIZATION, auth_hdr->next))) {
ast_copy_pj_str(nonce, &auth_hdr->credential.digest.nonce, sizeof(nonce));
- if (check_nonce(nonce, rdata, auth->realm) && !pj_strcmp2(&auth_hdr->credential.digest.realm, auth->realm)) {
+ if (check_nonce(nonce, rdata, auth) && !pj_strcmp2(&auth_hdr->credential.digest.realm, auth->realm)) {
challenge_found = 1;
break;
}
More information about the asterisk-commits
mailing list