-rw-r--r-- | lib/consumer.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/consumer.cc b/lib/consumer.cc index 299b3bc..ff5da91 100644 --- a/lib/consumer.cc +++ b/lib/consumer.cc @@ -266,52 +266,52 @@ namespace opkele { } throw failed_check_authentication(OPKELE_CP_ "failed to verify response"); } void consumer_t::retrieve_links(const string& url,string& server,string& delegate) { #if defined(USE_LIBPCRECPP) || defined(USE_PCREPP) server.erase(); delegate.erase(); curl_t curl = curl_easy_init(); if(!curl) throw exception_curl(OPKELE_CP_ "failed to curl_easy_init()"); string html; CURLcode r; (r=curl_misc_sets(curl)) || (r=curl_easy_setopt(curl,CURLOPT_URL,url.c_str())) || (r=curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,_curl_tostring)) || (r=curl_easy_setopt(curl,CURLOPT_WRITEDATA,&html)) ; if(r) throw exception_curl(OPKELE_CP_ "failed to curl_easy_setopt()",r); r = curl_easy_perform(curl); if(r && r!=CURLE_WRITE_ERROR) throw exception_curl(OPKELE_CP_ "failed to curl_easy_perform()",r); // strip out everything past body - static const char *re_hdre = "<head[^>]*>", - *re_lre = "<link\\b([^>]+)>", - *re_rre = "\\brel=['\"]([^'\"]+)['\"]", - *re_hre = "\\bhref=['\"]([^'\"]+)['\"]"; + static const char *re_hdre = "<\\s*head[^>]*>", + *re_lre = "<\\s*link\\b([^>]+)>", + *re_rre = "\\brel\\s*=\\s*['\"]\\s*([^'\"\\s]+)\\s*['\"]", + *re_hre = "\\bhref\\s*=\\s*['\"]\\s*([^'\"\\s]+)\\s*['\"]"; #if defined(USE_LIBPCRECPP) static pcrecpp::RE_Options ro(PCRE_CASELESS|PCRE_DOTALL); static pcrecpp::RE bre("<body\\b.*",ro), hdre(re_hdre,ro), lre(re_lre,ro), rre(re_rre), hre(re_hre,ro); bre.Replace("",&html); pcrecpp::StringPiece hpiece(html); if(!hdre.FindAndConsume(&hpiece)) throw bad_input(OPKELE_CP_ "failed to find head"); string attrs; while(lre.FindAndConsume(&hpiece,&attrs)) { pcrecpp::StringPiece rel, href; if(!(rre.PartialMatch(attrs,&rel) && hre.PartialMatch(attrs,&href))) continue; if(rel=="openid.server") { href.CopyToString(&server); if(!delegate.empty()) break; }else if(rel=="openid.delegate") { href.CopyToString(&delegate); if(!server.empty()) break; } } |