static gboolean check_password (SoupAuthDomain *domain, SoupMessage *msg, const char *username, const char *password) { const char *header; GHashTable *params; const char *msg_username; char hex_urp[33]; gboolean accept; header = soup_message_headers_get_one (msg->request_headers, "Authorization"); if (strncmp (header, "Digest ", 7) != 0) return FALSE; params = soup_header_parse_param_list (header + 7); if (!params) return FALSE; msg_username = g_hash_table_lookup (params, "username"); if (!msg_username || strcmp (msg_username, username) != 0) { soup_header_free_param_list (params); return FALSE; } soup_auth_digest_compute_hex_urp (username, soup_auth_domain_get_realm (domain), password, hex_urp); accept = check_hex_urp (domain, msg, params, username, hex_urp); soup_header_free_param_list (params); return accept; }
static char * soup_auth_domain_digest_accepts (SoupAuthDomain *domain, SoupMessage *msg, const char *header) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (domain); GHashTable *params; const char *username; gboolean accept = FALSE; char *ret_user; if (strncmp (header, "Digest ", 7) != 0) return NULL; params = soup_header_parse_param_list (header + 7); if (!params) return NULL; username = g_hash_table_lookup (params, "username"); if (!username) { soup_header_free_param_list (params); return NULL; } if (priv->auth_callback) { char *hex_urp; hex_urp = priv->auth_callback (domain, msg, username, priv->auth_data); if (hex_urp) { accept = check_hex_urp (domain, msg, params, username, hex_urp); g_free (hex_urp); } else accept = FALSE; } else { accept = soup_auth_domain_try_generic_auth_callback ( domain, msg, username); } ret_user = accept ? g_strdup (username) : NULL; soup_header_free_param_list (params); return ret_user; }