Mercurial > pidgin
comparison src/protocols/simple/simple.c @ 11439:617e67e1c985
[gaim-migrate @ 13676]
Fixed a couple leaks and potential leaks. The retval of g_strsplit() needs to be g_strfreev()'d. Also some "declaration after code" fixes.
committer: Tailor Script <tailor@pidgin.im>
| author | Daniel Atallah <daniel.atallah@gmail.com> |
|---|---|
| date | Sun, 04 Sep 2005 18:05:48 +0000 |
| parents | e1ab173ef3b5 |
| children | 0d18fa6c3b41 |
comparison
equal
deleted
inserted
replaced
| 11438:5451fe2d89c0 | 11439:617e67e1c985 |
|---|---|
| 295 | 295 |
| 296 static void fill_auth(struct simple_account_data *sip, gchar *hdr, struct sip_auth *auth) { | 296 static void fill_auth(struct simple_account_data *sip, gchar *hdr, struct sip_auth *auth) { |
| 297 int i=0; | 297 int i=0; |
| 298 char *tmp; | 298 char *tmp; |
| 299 char *tmp2; | 299 char *tmp2; |
| 300 gchar **parts; | |
| 300 if(!hdr) { | 301 if(!hdr) { |
| 301 gaim_debug_error("simple", "fill_auth: hdr==NULL\n"); | 302 gaim_debug_error("simple", "fill_auth: hdr==NULL\n"); |
| 302 return; | 303 return; |
| 303 } | 304 } |
| 304 | 305 |
| 305 if(!g_strncasecmp(hdr, "NTLM", 4)) { | 306 if(!g_strncasecmp(hdr, "NTLM", 4)) { |
| 306 gaim_debug_info("simple", "found NTLM\n"); | 307 gaim_debug_info("simple", "found NTLM\n"); |
| 307 auth->type = 2; | 308 auth->type = 2; |
| 308 if(!auth->nonce && !auth->nc) { | 309 if(!auth->nonce && !auth->nc) { |
| 309 gchar **parts = g_strsplit(hdr, " ", 0); | 310 parts = g_strsplit(hdr, " ", 0); |
| 310 while(parts[i]) { | 311 while(parts[i]) { |
| 311 if(!strncmp(parts[i],"targetname",10)) { | 312 if(!strncmp(parts[i],"targetname",10)) { |
| 312 auth->target = g_strndup(parts[i]+12,strlen(parts[i]+12)-1); | 313 auth->target = g_strndup(parts[i]+12,strlen(parts[i]+12)-1); |
| 313 } | 314 } |
| 314 if(!strncmp(parts[i],"realm",5)) { | 315 if(!strncmp(parts[i],"realm",5)) { |
| 319 auth->realm = g_strdup(tmp); | 320 auth->realm = g_strdup(tmp); |
| 320 *tmp2 = '"'; | 321 *tmp2 = '"'; |
| 321 } | 322 } |
| 322 i++; | 323 i++; |
| 323 } | 324 } |
| 325 g_strfreev(parts); | |
| 326 parts = NULL; | |
| 324 auth->nc = 1; | 327 auth->nc = 1; |
| 325 } | 328 } |
| 326 if(!auth->nonce && auth->nc==2) { | 329 if(!auth->nonce && auth->nc==2) { |
| 327 auth->nc = 3; | 330 auth->nc = 3; |
| 328 auth->nonce = gaim_ntlm_parse_type2(hdr+5); | 331 auth->nonce = gaim_ntlm_parse_type2(hdr+5); |
| 329 } | 332 } |
| 330 return; | 333 return; |
| 331 } | 334 } |
| 332 | 335 |
| 333 auth->type = 1; | 336 auth->type = 1; |
| 334 gchar **parts = g_strsplit(hdr, " ", 0); | 337 parts = g_strsplit(hdr, " ", 0); |
| 335 while(parts[i]) { | 338 while(parts[i]) { |
| 336 if(!strncmp(parts[i],"nonce",5)) { | 339 if(!strncmp(parts[i],"nonce",5)) { |
| 337 auth->nonce = g_strndup(parts[i]+7,strlen(parts[i]+7)-1); | 340 auth->nonce = g_strndup(parts[i]+7,strlen(parts[i]+7)-1); |
| 338 } | 341 } |
| 339 if(!strncmp(parts[i],"realm",5)) { | 342 if(!strncmp(parts[i],"realm",5)) { |
| 340 auth->realm = g_strndup(parts[i]+7,strlen(parts[i]+7)-2); | 343 auth->realm = g_strndup(parts[i]+7,strlen(parts[i]+7)-2); |
| 341 } | 344 } |
| 342 i++; | 345 i++; |
| 343 } | 346 } |
| 347 g_strfreev(parts); | |
| 344 | 348 |
| 345 gaim_debug(GAIM_DEBUG_MISC, "simple", "nonce: %s realm: %s ", auth->nonce, auth->realm); | 349 gaim_debug(GAIM_DEBUG_MISC, "simple", "nonce: %s realm: %s ", auth->nonce, auth->realm); |
| 346 | 350 |
| 347 DigestCalcHA1("md5", sip->username, auth->realm, sip->password, auth->nonce, "", auth->HA1); | 351 DigestCalcHA1("md5", sip->username, auth->realm, sip->password, auth->nonce, "", auth->HA1); |
| 348 | 352 |
| 552 | 556 |
| 553 g_free(buf); | 557 g_free(buf); |
| 554 } | 558 } |
| 555 | 559 |
| 556 static void do_register_exp(struct simple_account_data *sip, int expire) { | 560 static void do_register_exp(struct simple_account_data *sip, int expire) { |
| 557 sip->registerstatus = 1; | |
| 558 | |
| 559 char *uri = g_strdup_printf("sip:%s",sip->servername); | 561 char *uri = g_strdup_printf("sip:%s",sip->servername); |
| 560 char *to = g_strdup_printf("sip:%s@%s",sip->username,sip->servername); | 562 char *to = g_strdup_printf("sip:%s@%s",sip->username,sip->servername); |
| 561 char *contact = g_strdup_printf("Contact: <sip:%s@%s:%d;transport=%s>;methods=\"MESSAGE, SUBSCRIBE, NOTIFY\"\r\nExpires: %d\r\n", sip->username, sip->ip ? sip->ip : "", sip->listenport, sip->udp ? "udp" : "tcp", expire); | 563 char *contact = g_strdup_printf("Contact: <sip:%s@%s:%d;transport=%s>;methods=\"MESSAGE, SUBSCRIBE, NOTIFY\"\r\nExpires: %d\r\n", sip->username, sip->ip ? sip->ip : "", sip->listenport, sip->udp ? "udp" : "tcp", expire); |
| 564 | |
| 565 sip->registerstatus = 1; | |
| 562 | 566 |
| 563 if(expire) { | 567 if(expire) { |
| 564 sip->reregister = time(NULL) + expire - 50; | 568 sip->reregister = time(NULL) + expire - 50; |
| 565 } else { | 569 } else { |
| 566 sip->reregister = time(NULL) + 600; | 570 sip->reregister = time(NULL) + 600; |
| 986 } | 990 } |
| 987 } else { /* response */ | 991 } else { /* response */ |
| 988 struct transaction *trans = transactions_find(sip, msg); | 992 struct transaction *trans = transactions_find(sip, msg); |
| 989 if(trans) { | 993 if(trans) { |
| 990 if(msg->response == 407) { | 994 if(msg->response == 407) { |
| 995 gchar *resend, *auth, *ptmp; | |
| 996 | |
| 991 if(sip->proxy.retries>3) return; | 997 if(sip->proxy.retries>3) return; |
| 992 sip->proxy.retries++; | 998 sip->proxy.retries++; |
| 993 /* do proxy authentication */ | 999 /* do proxy authentication */ |
| 994 | 1000 |
| 995 gchar *ptmp = sipmsg_find_header(msg,"Proxy-Authenticate"); | 1001 ptmp = sipmsg_find_header(msg, "Proxy-Authenticate"); |
| 996 gchar *resend; | |
| 997 gchar *auth; | |
| 998 | 1002 |
| 999 fill_auth(sip, ptmp, &sip->proxy); | 1003 fill_auth(sip, ptmp, &sip->proxy); |
| 1000 auth = auth_header(sip, &sip->proxy, trans->msg->method, trans->msg->target); | 1004 auth = auth_header(sip, &sip->proxy, trans->msg->method, trans->msg->target); |
| 1001 sipmsg_remove_header(msg, "Proxy-Authorization"); | 1005 sipmsg_remove_header(msg, "Proxy-Authorization"); |
| 1002 sipmsg_add_header(trans->msg, "Proxy-Authorization", auth); | 1006 sipmsg_add_header(trans->msg, "Proxy-Authorization", auth); |
