Mercurial > hg > freeDiameter
annotate extensions/app_sip/multimediaauth.c @ 1443:ca7ca55e2488
app_sip: debug log a non-NULL value
Detected by gcc 9.1.1.
author | Luke Mewburn <luke@mewburn.net> |
---|---|
date | Thu, 27 Feb 2020 16:27:48 +1100 |
parents | c8057892e56b |
children |
rev | line source |
---|---|
364
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
1 /********************************************************************************************************* |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
2 * Software License Agreement (BSD License) * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
3 * Author: Alexandre Westfahl <awestfahl@freediameter.net> * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
4 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
5 * Copyright (c) 2010, Alexandre Westfahl, Teraoka Laboratory (Keio University), and the WIDE Project. * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
6 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
7 * All rights reserved. * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
8 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
9 * Redistribution and use of this software in source and binary forms, with or without modification, are * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
10 * permitted provided that the following conditions are met: * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
11 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
12 * * Redistributions of source code must retain the above * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
13 * copyright notice, this list of conditions and the * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
14 * following disclaimer. * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
15 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
16 * * Redistributions in binary form must reproduce the above * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
17 * copyright notice, this list of conditions and the * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
18 * following disclaimer in the documentation and/or other * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
19 * materials provided with the distribution. * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
20 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
21 * * Neither the name of the Teraoka Laboratory nor the * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
22 * names of its contributors may be used to endorse or * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
23 * promote products derived from this software without * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
24 * specific prior written permission of Teraoka Laboratory * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
25 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
26 * * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
28 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
29 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
33 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * |
da11085cf6d9
Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
360
diff
changeset
|
35 *********************************************************************************************************/ |
433
0d08a9ab2212
Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
430
diff
changeset
|
36 #include "app_sip.h" |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
37 |
1088
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
38 struct sess_state |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
39 { |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
40 char *nonce; |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
41 }; |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
42 |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
43 |
639
95a784729cac
Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
433
diff
changeset
|
44 int app_sip_MAR_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, void * opaque, enum disp_action * act) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
45 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
46 struct msg *ans, *qry; |
368
a1f26147ec61
Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
364
diff
changeset
|
47 struct avp *avp, *a2, *authdataitem; |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
48 //struct msg_hdr * header = NULL; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
49 struct avp_hdr * avphdr=NULL, *avpheader=NULL, *avpheader_auth=NULL,*digestheader=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
50 union avp_value val; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
51 int found_cnonce=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
52 struct avp * tempavp=NULL,*sipAuthentication=NULL,*sipAuthenticate=NULL; |
1405 | 53 char * result = NULL; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
54 char password[51]; |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
55 int idx=0, number_of_auth_items=0,i=0, ret=0; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
56 //Flags and variables for Database |
430
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
57 int sipurinotstored=0, authenticationpending=0; |
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
58 size_t querylen=0, usernamelen=0; |
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
59 char *query=NULL; |
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
60 unsigned char *username=NULL; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
61 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
62 //The nonce we will store and retrieve in session |
1088
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
63 struct sess_state *storednonce=NULL; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
64 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
65 |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
66 TRACE_ENTRY("%p %p %p %p", msg, paramavp, sess, act); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
67 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
68 if (msg == NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
69 return EINVAL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
70 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
71 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
72 /* Create answer header */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
73 qry = *msg; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
74 CHECK_FCT( fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, msg, 0 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
75 ans = *msg; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
76 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
77 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
78 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
79 /* Add the appropriate command code & Auth-Application-Id |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
80 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
81 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
82 CHECK_FCT( fd_msg_hdr ( *msg, &header ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
83 header->msg_flags = CMD_FLAG_PROXIABLE; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
84 header->msg_code = 286; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
85 header->msg_appl = 6; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
86 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
87 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
88 // Add the Auth-Application-Id |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
89 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
90 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Application_Id, 0, &avp ) ); |
368
a1f26147ec61
Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
364
diff
changeset
|
91 ASSERT(avp); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
92 val.i32 = header->msg_appl; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
93 CHECK_FCT( fd_msg_avp_setvalue ( avp, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
94 CHECK_FCT( fd_msg_avp_add ( ans, MSG_BRW_LAST_CHILD, avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
95 } |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
96 }*/ |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
97 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
98 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
99 /* Add the Auth-Session-State AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
100 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
101 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
102 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.Auth_Session_State, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
103 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
104 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
105 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Session_State, 0, &avp ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
106 CHECK_FCT( fd_msg_avp_setvalue( avp, avphdr->avp_value ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
107 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
108 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
109 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
110 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
111 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
112 /* Check if method is REGISTER then User-Name must be present */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
113 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
114 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
115 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Method, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
116 CHECK_FCT( fd_msg_avp_hdr( avp, &avpheader )); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
117 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
118 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
119 char *method=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
120 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
121 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.User_Name, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
122 if(avp!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
123 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
124 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
125 int not_found=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
126 MYSQL_RES *res=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
127 MYSQL_ROW row; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
128 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
129 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
130 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
131 |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
132 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
133 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
134 if((strncmp((const char *)avpheader->avp_value->os.data,"REGISTER",avpheader->avp_value->os.len)==0)) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
135 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
136 not_found=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
137 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
138 //TODO TODO TODO TODO TODO TODO TODO: maybe doesn't work!!' |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
139 ret=get_password(avphdr->avp_value->os.data, avphdr->avp_value->os.len, (char *)&password); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
140 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
141 if(ret>1) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
142 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
143 //We couldn't make the request |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
144 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
145 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
146 } |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
147 not_found=ret; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
148 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
149 if(not_found) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
150 { |
1443
ca7ca55e2488
app_sip: debug log a non-NULL value
Luke Mewburn <luke@mewburn.net>
parents:
1424
diff
changeset
|
151 TRACE_DEBUG(FULL,"The user %s doesn't exist!", avphdr->avp_value->os.data); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
152 result="DIAMETER_ERROR_USER_UNKNOWN"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
153 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
154 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
155 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
156 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
157 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
158 //We allocate the double size of username because at worst it can be all quotes |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
159 username=malloc(avphdr->avp_value->os.len*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
160 //We purify username not to have forbidden characters |
430
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
161 usernamelen=mysql_real_escape_string(conn, (char *)username, (const char *)avphdr->avp_value->os.data, avphdr->avp_value->os.len); |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
162 |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
163 //Now that we know the user exist, we get the list of AOR owned by this user |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
164 querylen=SQL_GETSIPAOR_LEN + usernamelen; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
165 query = malloc(querylen+2); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
166 snprintf(query, querylen+1, SQL_GETSIPAOR, username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
167 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
168 //We make the query |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
169 request_mysql(query); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
170 res=mysql_use_result(conn); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
171 if(res==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
172 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
173 //We couldn't make the request |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
174 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
175 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
176 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
177 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
178 //We retrieve the SIP-AOR from AVP to check if the user can us it |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
179 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_AOR, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
180 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
181 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
182 not_found=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
183 while ((row = mysql_fetch_row(res)) != NULL) |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
184 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
185 if(strncmp((const char *)avphdr->avp_value->os.data,row[0],avphdr->avp_value->os.len)==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
186 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
187 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
188 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
189 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
190 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
191 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
192 free(query); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
193 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
194 if(not_found) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
195 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
196 TRACE_DEBUG(FULL,"The user %s can't use this SIP-AOR!",username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
197 result="DIAMETER_ERROR_IDENTITIES_DONT_MATCH"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
198 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
199 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
200 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
201 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
202 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
203 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
204 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Server_URI, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
205 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr )); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
206 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
207 if(avphdr!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
208 { |
430
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
209 unsigned char *sipuri=NULL; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
210 int sipurilen=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
211 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
212 //We allocate the double size of SIP-URI because at worst it can be all quotes |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
213 CHECK_MALLOC(sipuri=malloc(avphdr->avp_value->os.len*2+1)); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
214 //We purify SIP-URI not to have forbidden characters |
430
f77fc3a97287
Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
427
diff
changeset
|
215 sipurilen=mysql_real_escape_string(conn, (char *)sipuri, (const char *)avphdr->avp_value->os.data, avphdr->avp_value->os.len); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
216 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
217 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
218 //We get the SIP-URI assignated to the user |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
219 querylen=SQL_GETSIPURI_LEN + usernamelen; |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
220 CHECK_MALLOC(query = malloc(querylen+2)); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
221 snprintf(query, querylen+1, SQL_GETSIPURI, username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
222 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
223 //We make the query |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
224 request_mysql(query); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
225 res=mysql_use_result(conn); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
226 if(res==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
227 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
228 //We couldn't make the request |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
229 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
230 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
231 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
232 not_found=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
233 while ((row = mysql_fetch_row(res)) != NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
234 { |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
235 if(strncmp((const char *)avphdr->avp_value->os.data,row[0],avphdr->avp_value->os.len)==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
236 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
237 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
238 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
239 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
240 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
241 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
242 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
243 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
244 if(not_found) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
245 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
246 //Temporary |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
247 set_sipserver_uri(username, usernamelen, sipuri,sipurilen); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
248 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
249 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
250 set_pending_flag(username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
251 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
252 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
253 authenticationpending=1; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
254 } |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
255 free(sipuri); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
256 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
257 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
258 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
259 sipurinotstored=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
260 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
261 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
262 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
263 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
264 result="DIAMETER_USER_NAME_REQUIRED"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
265 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
266 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
267 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
268 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
269 free(method); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
270 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
271 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
272 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
273 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
274 //TODO: remove loop for authdataitem because RFC say only one (wait for answer from Garcia) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
275 // How many Auth Data Items? |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
276 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Number_Auth_Items, &avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
277 CHECK_FCT( fd_msg_avp_hdr( avp, &avpheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
278 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
279 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
280 if(avp!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
281 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
282 CHECK_FCT(fd_msg_search_avp ( qry, sip_dict.SIP_Auth_Data_Item, &avp)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
283 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
284 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
285 if(avp!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
286 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
287 //First is Authentication Scheme |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
288 CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_FIRST_CHILD, &avp, NULL) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
289 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
290 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
291 //Digest-Authentication? |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
292 if(avphdr->avp_value->i32==0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
293 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
294 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
295 for(idx=0;idx<avpheader->avp_value->i32;idx++) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
296 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
297 //We look for SIP Auth items |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
298 CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
299 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
300 if(avp!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
301 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
302 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
303 CHECK_FCT( fd_msg_avp_hdr( avp,&avphdr )); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
304 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
305 if(avphdr->avp_code==380) //We only create Auth-Data-Item to answer Auth-Data-Item |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
306 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
307 /* Add the Auth-Data-Item AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
308 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Auth_Data_Item, 0, &authdataitem ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
309 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
310 /* Add the Authentication Scheme AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
311 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
312 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authentication_Scheme, 0, &a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
313 val.i32=0; //We only know Digest Authentication |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
314 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
315 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
316 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
317 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
318 //We need to know if there is a Cnonce attribute (only in the second MAR request) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
319 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
320 //CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
321 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
322 |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
323 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
324 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
325 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
326 found_cnonce=1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
327 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
328 found_cnonce=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
329 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
330 if(!found_cnonce) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
331 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
332 /* |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
333 We are in the case of first access request so we need to challenge the user. |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
334 */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
335 TRACE_DEBUG(FULL,"First Authorization in progress..."); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
336 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
337 /* Create a new session */ //this create a new session Id !!! |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
338 //CHECK_FCT_DO( fd_sess_new( &sess, fd_g_config->cnf_diamid, "diamsip", 7), goto out ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
339 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
340 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
341 /* Create the SIP-Authenticate AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
342 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
343 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authenticate, 0, &sipAuthenticate ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
344 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
345 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
346 /* Add the Digest QOP AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
347 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
348 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_QOP, 0, &a2 ) ); |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
349 val.os.data=(unsigned char *)"auth"; |
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
350 val.os.len=strlen((const char *)val.os.data); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
351 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
352 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
353 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
354 /* Add the Digest Nonce AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
355 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
356 uint8_t buffer[NONCE_SIZE]; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
357 char nonce[NONCE_SIZE * 2 + 1]; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
358 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
359 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
360 gcry_create_nonce ((uint8_t *)buffer, sizeof(buffer)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
361 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
362 for(i=0;i<NONCE_SIZE;i++) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
363 sprintf(&nonce[2 * i], "%2.2hhx", buffer[i]); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
364 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
365 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Nonce, 0, &a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
366 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
367 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
368 //We store the nonce (storednonce structure) inside the session |
1088
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
369 storednonce=malloc(sizeof(struct sess_state)); |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
639
diff
changeset
|
370 memset(storednonce,0,sizeof(struct sess_state)); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
371 CHECK_MALLOC(storednonce->nonce=malloc(NONCE_SIZE*2+1)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
372 memcpy(storednonce->nonce,(char *)nonce,NONCE_SIZE*2+1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
373 CHECK_FCT( fd_sess_state_store ( ds_sess_hdl, sess, &storednonce )); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
374 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
375 val.os.data=(unsigned char *)nonce; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
376 val.os.len=NONCE_SIZE * 2; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
377 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
378 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
379 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
380 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
381 /* Add the Digest Algorithm AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
382 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
383 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Algorithm, 0, &a2 ) ); |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
384 val.os.data=(unsigned char *)"MD5"; |
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
385 val.os.len=strlen((const char *)val.os.data); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
386 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
387 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
388 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
389 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
390 /* Add the Digest Realm AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
391 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
392 tempavp=avp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
393 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
394 avpheader_auth=walk_digest(tempavp, 104); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
395 if(avpheader_auth!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
396 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
397 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Realm, 0, &a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
398 CHECK_FCT( fd_msg_avp_setvalue( a2, avpheader_auth->avp_value ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
399 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
400 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
401 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
402 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
403 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
404 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
405 //We add SIP Authenticate to Auth Data Item |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
406 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, sipAuthenticate ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
407 //We add Auth Data Item to Answer |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
408 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, authdataitem ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
409 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
410 number_of_auth_items++; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
411 if(sipurinotstored) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
412 result="DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
413 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
414 result="DIAMETER_MULTI_ROUND_AUTH"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
415 found_cnonce=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
416 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
417 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
418 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
419 /* |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
420 We are in the case of access request after challenge so we need to check credentials. |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
421 */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
422 TRACE_DEBUG(FULL,"Authentication after challenge"); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
423 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
424 /* Search the session, retrieve its data */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
425 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
426 //int new=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
427 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
428 //TRACE_DEBUG(FULL,"new: *%d*",new); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
429 //ASSERT( new == 0 ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
430 CHECK_FCT( fd_sess_state_retrieve( ds_sess_hdl, sess, &storednonce )); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
431 if(storednonce ==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
432 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
433 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
434 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
435 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
436 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
437 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
438 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
439 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
440 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
441 /* Create the SIP-Authentication-Info AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
442 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
443 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authentication_Info, 0, &sipAuthentication ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
444 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
445 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
446 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
447 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
448 /* Add the Digest response Auth AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
449 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
450 //uint8_t bufferresp[DIGEST_LEN]; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
451 //char response[DIGEST_LEN*2+1]; |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
452 |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
453 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
454 //We extract all the data we need |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
455 tempavp=avp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
456 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
457 char * digest_username=NULL, *digest_uri=NULL, *digest_response=NULL, *digest_realm=NULL, *digest_nonce=NULL, *digest_method=NULL, *digest_qop=NULL, *digest_algorithm=NULL, *digest_cnonce=NULL, *digest_noncecount=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
458 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
459 |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
460 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
461 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
462 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
463 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
464 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
465 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
466 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
467 digest_nonce = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
468 memcpy(digest_nonce, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
469 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
470 digest_nonce[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
471 TRACE_DEBUG(FULL,"Element:*%s*",digest_nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
472 TRACE_DEBUG(FULL,"Stored Nonce:*%s*",storednonce->nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
473 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
474 if(strcmp(digest_nonce,storednonce->nonce)!=0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
475 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
476 free(digest_nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
477 free(storednonce->nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
478 free(storednonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
479 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
480 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
481 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
482 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
483 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
484 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
485 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
486 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
487 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
488 } |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
489 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Response, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
490 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
491 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
492 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
493 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
494 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
495 digest_response = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
496 memcpy(digest_response, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
497 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
498 digest_response[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
499 TRACE_DEBUG(FULL,"Element:*%s*",digest_response); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
500 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
501 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
502 } |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
503 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Realm, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
504 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
505 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
506 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
507 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
508 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
509 digest_realm = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
510 memcpy(digest_realm, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
511 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
512 digest_realm[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
513 TRACE_DEBUG(FULL,"Element:*%s*",digest_realm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
514 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
515 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
516 |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
517 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Method, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
518 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
519 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
520 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
521 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
522 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
523 digest_method = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
524 memcpy(digest_method, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
525 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
526 digest_method[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
527 TRACE_DEBUG(FULL,"Element:*%s*",digest_method); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
528 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
529 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
530 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
531 digest_method=""; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
532 |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
533 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_URI, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
534 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
535 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
536 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
537 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
538 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
539 digest_uri = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
540 memcpy(digest_uri, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
541 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
542 digest_uri[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
543 TRACE_DEBUG(FULL,"Element:*%s*",digest_uri); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
544 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
545 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
546 |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
547 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_QOP, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
548 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
549 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
550 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
551 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
552 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
553 digest_qop = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
554 memcpy(digest_qop, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
555 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
556 digest_qop[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
557 TRACE_DEBUG(FULL,"Element:*%s*",digest_qop); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
558 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
559 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
560 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
561 digest_qop=NULL; |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
562 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Algorithm, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
563 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
564 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
565 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
566 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
567 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
568 digest_algorithm = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
569 memcpy(digest_algorithm, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
570 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
571 digest_algorithm[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
572 TRACE_DEBUG(FULL,"Element:*%s*",digest_algorithm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
573 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
574 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
575 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
576 digest_algorithm=NULL; |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
577 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
578 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
579 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
580 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
581 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
582 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
583 digest_cnonce = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
584 memcpy(digest_cnonce, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
585 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
586 digest_cnonce[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
587 TRACE_DEBUG(FULL,"Element:*%s*",digest_cnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
588 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
589 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
590 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
591 digest_cnonce=""; |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
592 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
593 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
594 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
595 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
596 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
597 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
598 digest_noncecount = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
599 memcpy(digest_noncecount, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
600 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
601 digest_noncecount[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
602 TRACE_DEBUG(FULL,"Element:*%s*",digest_noncecount); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
603 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
604 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
605 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
606 digest_noncecount=""; |
1424
c8057892e56b
adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents:
1405
diff
changeset
|
607 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Username, &a2 )); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
608 if(a2!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
609 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
610 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
611 if(digestheader!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
612 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
613 digest_username = malloc(digestheader->avp_value->os.len + 1); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
614 memcpy(digest_username, digestheader->avp_value->os.data, |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
615 digestheader->avp_value->os.len); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
616 digest_username[digestheader->avp_value->os.len]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
617 TRACE_DEBUG(FULL,"Element:*%s*",digest_username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
618 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
619 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
620 //TODO: replace by authentication function |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
621 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
622 HASHHEX HA1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
623 HASHHEX HA2 = ""; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
624 HASHHEX response, responseauth; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
625 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
626 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
627 DigestCalcHA1(digest_algorithm, digest_username, digest_realm, password, digest_nonce,digest_cnonce, HA1); |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
628 DigestCalcResponse(HA1, digest_nonce, digest_noncecount, digest_cnonce, digest_qop,digest_method, digest_uri, HA2, response); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
629 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
630 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
631 // We check that the Digest-Response is the same (UA, Diameter) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
632 if(strcmp(response,digest_response)!=0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
633 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
634 TRACE_DEBUG(FULL,"Response calculated by Diameter server:%s",response); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
635 TRACE_DEBUG(FULL,"Response calculated by UA:%s",digest_response); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
636 TRACE_DEBUG(INFO,"Digest-Response does not match!"); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
637 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
638 free(digest_algorithm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
639 free(digest_cnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
640 free(digest_nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
641 free(digest_noncecount); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
642 free(digest_method); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
643 free(digest_username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
644 free(digest_uri); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
645 free(digest_qop); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
646 free(digest_response); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
647 free(digest_realm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
648 free(storednonce->nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
649 free(storednonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
650 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
651 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
652 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
653 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
654 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
655 //We calculate Digest_Response_Auth |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
656 DigestCalcResponseAuth(HA1, digest_nonce, digest_noncecount, digest_cnonce, digest_qop,digest_method, digest_uri, HA2, responseauth); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
657 |
368
a1f26147ec61
Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
364
diff
changeset
|
658 TRACE_DEBUG(FULL,"Response calculated by Diameter server:%s",response); |
a1f26147ec61
Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
364
diff
changeset
|
659 TRACE_DEBUG(FULL,"Response calculated by UA:%s",digest_response); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
660 if(strcmp(digest_qop,"auth-int")==0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
661 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
662 //Digest-HA1 MUST be used instead of Digest-Response-Auth if Digest-Qop is 'auth-int'. |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
663 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_HA1, 0, &a2 ) ); |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
664 val.os.data=(unsigned char *)HA1; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
665 val.os.len=HASHHEXLEN+1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
666 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
667 CHECK_FCT( fd_msg_avp_add( sipAuthentication, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
668 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
669 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
670 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
671 //Digest-Response-Auth MUST be used instead of Digest-HA1 if Digest-Qop is 'auth'. |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
672 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Response_Auth, 0, &a2 ) ); |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
368
diff
changeset
|
673 val.os.data=(unsigned char *)responseauth; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
674 val.os.len=DIGEST_LEN*2; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
675 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
676 CHECK_FCT( fd_msg_avp_add( sipAuthentication, MSG_BRW_LAST_CHILD, a2 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
677 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
678 free(digest_algorithm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
679 free(digest_cnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
680 free(digest_nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
681 free(digest_noncecount); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
682 free(digest_method); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
683 free(digest_username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
684 free(digest_uri); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
685 free(digest_qop); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
686 free(digest_response); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
687 free(digest_realm); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
688 free(storednonce->nonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
689 free(storednonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
690 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
691 number_of_auth_items++; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
692 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
693 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
694 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
695 //We add SIP Authentication-Info to Auth Data Item |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
696 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, sipAuthentication ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
697 //We add Auth Data Item to Answer |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
698 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, authdataitem ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
699 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
700 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
701 if(username!=NULL && authenticationpending) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
702 { |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
703 //We clear the pending flag |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
704 clear_pending_flag(username, usernamelen); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
705 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
706 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
707 if(sipurinotstored) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
708 result="DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
709 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
710 result="DIAMETER_SUCCESS"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
711 found_cnonce=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
712 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
713 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
714 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
715 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
716 TRACE_DEBUG(INFO,"No auth data items!"); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
717 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
718 /*Add SIP_Number_Auth_Items AVP */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
719 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
720 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Number_Auth_Items, 0, &avp ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
721 val.i32 = number_of_auth_items; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
722 CHECK_FCT( fd_msg_avp_setvalue ( avp, &val ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
723 CHECK_FCT( fd_msg_avp_add ( ans, MSG_BRW_LAST_CHILD, avp) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
724 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
725 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
726 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
727 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
728 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
729 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
730 TRACE_DEBUG(INFO,"We only support DIGEST for now, unable to comply"); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
731 result="DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
732 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
733 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
734 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
735 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
736 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
737 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
738 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
739 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
740 //TODO: remove this because Number_Auth_Items is not compulsory |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
741 TRACE_DEBUG(FULL,"Number-Auth-Items is not included."); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
742 result="DIAMETER_UNABLE_TO_COMPLY"; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
743 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
744 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
745 goto out; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
746 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
747 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
748 if(username!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
749 free(username); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
750 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
751 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
752 out: |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
753 /* Set the Origin-Host, Origin-Realm, Result-Code AVPs */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
754 CHECK_FCT( fd_msg_rescode_set( ans, result, NULL, NULL, 1 ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
755 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
756 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
757 /* Send the answer */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
758 CHECK_FCT( fd_msg_send( msg, NULL, NULL ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
759 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
760 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
761 return 0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
762 } |