| 1761 | |
| 1762 | |
| 1763 | static int pv_get_authattr(struct sip_msg *msg, pv_param_t *param, |
| 1764 | pv_value_t *res) |
| 1765 | { |
| 1766 | struct hdr_field *hdr; |
| 1767 | str *s; |
| 1768 | |
| 1769 | if(msg==NULL) |
| 1770 | return -1; |
| 1771 | |
| 1772 | if ((msg->REQ_METHOD==METHOD_ACK) || (msg->REQ_METHOD==METHOD_CANCEL)) { |
| 1773 | LM_DBG("no [Proxy-]Authorization header\n"); |
| 1774 | return pv_get_null(msg, param, res); |
| 1775 | } |
| 1776 | |
| 1777 | if ((parse_headers(msg, HDR_PROXYAUTH_F|HDR_AUTHORIZATION_F, 0)==-1) |
| 1778 | || (msg->proxy_auth==0 && msg->authorization==0)) |
| 1779 | { |
| 1780 | LM_DBG("no [Proxy-]Authorization header\n"); |
| 1781 | return pv_get_null(msg, param, res); |
| 1782 | } |
| 1783 | |
| 1784 | hdr = (msg->proxy_auth==0)?msg->authorization:msg->proxy_auth; |
| 1785 | if(parse_credentials(hdr)!=0) { |
| 1786 | LM_ERR("failed to parse credentials\n"); |
| 1787 | return pv_get_null(msg, param, res); |
| 1788 | } |
| 1789 | |
| 1790 | switch(param->pvn.u.isname.name.n) |
| 1791 | { |
| 1792 | case 11: |
| 1793 | s = &((auth_body_t*)(hdr->parsed))->digest.nc; |
| 1794 | break; |
| 1795 | case 10: |
| 1796 | s = &((auth_body_t*)(hdr->parsed))->digest.qop.qop_str; |
| 1797 | break; |
| 1798 | case 9: |
| 1799 | s = &((auth_body_t*)(hdr->parsed))->digest.alg.alg_str; |
| 1800 | break; |
| 1801 | case 8: |
| 1802 | s = &((auth_body_t*)(hdr->parsed))->digest.opaque; |
| 1803 | break; |
| 1804 | case 7: |
| 1805 | s = &((auth_body_t*)(hdr->parsed))->digest.cnonce; |
| 1806 | break; |
| 1807 | case 6: |
| 1808 | s = &((auth_body_t*)(hdr->parsed))->digest.response; |
| 1809 | break; |
| 1810 | case 5: |
| 1811 | s = &((auth_body_t*)(hdr->parsed))->digest.nonce; |
| 1812 | break; |
| 1813 | case 4: |
| 1814 | s = &((auth_body_t*)(hdr->parsed))->digest.username.domain; |
| 1815 | break; |
| 1816 | case 3: |
| 1817 | s = &((auth_body_t*)(hdr->parsed))->digest.uri; |
| 1818 | break; |
| 1819 | case 2: |
| 1820 | s = &((auth_body_t*)(hdr->parsed))->digest.realm; |
nothing calls this directly
no test coverage detected