aboutsummaryrefslogtreecommitdiff
path: root/src/identity-provider/identity_provider_api.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2016-01-11 16:36:26 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2016-01-11 16:36:26 +0000
commita393dbd7b27c62ebd101113b361560a477404bf5 (patch)
tree5dd7983acf8538ffe16bd128fe5a7416f6462a62 /src/identity-provider/identity_provider_api.c
parent55bc55b5f2046c96e1ae5a1d774c14300cc4b890 (diff)
downloadgnunet-a393dbd7b27c62ebd101113b361560a477404bf5.tar.gz
gnunet-a393dbd7b27c62ebd101113b361560a477404bf5.zip
- fixes, modify api
Diffstat (limited to 'src/identity-provider/identity_provider_api.c')
-rw-r--r--src/identity-provider/identity_provider_api.c41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/identity-provider/identity_provider_api.c b/src/identity-provider/identity_provider_api.c
index f0e91a739..bec0ab742 100644
--- a/src/identity-provider/identity_provider_api.c
+++ b/src/identity-provider/identity_provider_api.c
@@ -193,6 +193,9 @@ message_handler (void *cls,
193 const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm; 193 const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm;
194 const struct GNUNET_IDENTITY_PROVIDER_ExchangeResultMessage *erm; 194 const struct GNUNET_IDENTITY_PROVIDER_ExchangeResultMessage *erm;
195 char *str; 195 char *str;
196 char *ticket_str;
197 char *token_str;
198 char *label_str;
196 uint16_t size; 199 uint16_t size;
197 200
198 if (NULL == msg) 201 if (NULL == msg)
@@ -214,26 +217,56 @@ message_handler (void *cls,
214 return; 217 return;
215 } 218 }
216 irm = (const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *) msg; 219 irm = (const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *) msg;
217 str = (char *) &irm[1]; 220 str = GNUNET_strdup ((char *) &irm[1]);
218 if ( (size > sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) && 221 if ( (size > sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) &&
219 ('\0' != str[size - sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage) - 1]) ) 222 ('\0' != str[size - sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage) - 1]) )
220 { 223 {
224 GNUNET_free (str);
221 GNUNET_break (0); 225 GNUNET_break (0);
222 reschedule_connect (h); 226 reschedule_connect (h);
223 return; 227 return;
224 } 228 }
225 if (size == sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) 229 if (size == sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage))
230 {
231 GNUNET_free (str);
226 str = NULL; 232 str = NULL;
227 233 }
234 label_str = strtok (str, ",");
235
236 if (NULL == label_str)
237 {
238 GNUNET_free (str);
239 GNUNET_break (0);
240 reschedule_connect (h);
241 return;
242 }
243 ticket_str = strtok (NULL, ",");
244 if (NULL == ticket_str)
245 {
246 GNUNET_free (str);
247 GNUNET_break (0);
248 reschedule_connect (h);
249 return;
250 }
251 token_str = strtok (NULL, ",");
252 if (NULL == token_str)
253 {
254 GNUNET_free (str);
255 GNUNET_break (0);
256 reschedule_connect (h);
257 return;
258 }
228 op = h->op_head; 259 op = h->op_head;
229 GNUNET_CONTAINER_DLL_remove (h->op_head, 260 GNUNET_CONTAINER_DLL_remove (h->op_head,
230 h->op_tail, 261 h->op_tail,
231 op); 262 op);
232 GNUNET_CLIENT_receive (h->client, &message_handler, h, 263 GNUNET_CLIENT_receive (h->client, &message_handler, h,
233 GNUNET_TIME_UNIT_FOREVER_REL); 264 GNUNET_TIME_UNIT_FOREVER_REL);
234 ticket.data = str; 265 ticket.data = ticket_str;
266 token.data = token_str;
235 if (NULL != op->iss_cb) 267 if (NULL != op->iss_cb)
236 op->iss_cb (op->cls, &ticket); 268 op->iss_cb (op->cls, label_str, &ticket, &token);
269 GNUNET_free (str);
237 GNUNET_free (op); 270 GNUNET_free (op);
238 break; 271 break;
239 case GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_EXCHANGE_RESULT: 272 case GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_EXCHANGE_RESULT: