X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fopenid%2Fserv_openid_rp.c;h=576bc22b612c2ef0af0e1754eff3c57d051a881a;hb=4450b2d29f7f18906e87b7abf3c707a995ebf681;hp=9bee4e6d209c6e4a15c60c24573562b2eaac0764;hpb=93c11f5e13de55b1c7b019881e2f3fd67401851d;p=citadel.git diff --git a/citadel/modules/openid/serv_openid_rp.c b/citadel/modules/openid/serv_openid_rp.c index 9bee4e6d2..576bc22b6 100644 --- a/citadel/modules/openid/serv_openid_rp.c +++ b/citadel/modules/openid/serv_openid_rp.c @@ -667,7 +667,6 @@ void xrds_xml_end(void *data, const char *supplied_el) { void xrds_xml_chardata(void *data, const XML_Char *s, int len) { struct xrds *xrds = (struct xrds *) data; - syslog(LOG_DEBUG, "%2d xrds_xml_chardata()", xrds->nesting_level); /* StrBufAppendBufPlain (xrds->CData, s, len, 0); */ } @@ -699,24 +698,47 @@ int parse_xrds_document(StrBuf *ReplyBuf) { /* - * Attempt to perform YADIS discovery. + * Attempt to perform Yadis discovery. * If successful, returns nonzero and fills the session's claimed ID blah FIXME this comment - * If YADIS fails, returns 0 and does nothing else. + * If Yadis fails, returns 0 and does nothing else. */ int perform_yadis_discovery(StrBuf *YadisURL) { int docbytes = (-1); StrBuf *ReplyBuf = NULL; int r; + CURL *curl; + CURLcode result; + char errmsg[1024] = ""; + struct curl_slist *my_headers = NULL; + /*char *effective_url = NULL;*/ if (YadisURL == NULL) return(0); if (StrLength(YadisURL) == 0) return(0); + ReplyBuf = NewStrBuf (); + if (ReplyBuf == 0) return(0); + curl = ctdl_openid_curl_easy_init(errmsg); + if (!curl) return(0); + curl_easy_setopt(curl, CURLOPT_URL, ChrPtr(YadisURL)); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, ReplyBuf); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlFillStrBuf_callback); + my_headers = curl_slist_append(my_headers, "Accept:"); /* disable the default Accept: header */ + my_headers = curl_slist_append(my_headers, "Accept: application/xrds+xml"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, my_headers); + result = curl_easy_perform(curl); + if (result) { + syslog(LOG_DEBUG, "libcurl error %d: %s", result, errmsg); + } + /*curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url); + StrBufPlain(YadisURL, effective_url, -1);*/ + curl_slist_free_all(my_headers); + curl_easy_cleanup(curl); - docbytes = fetch_http(YadisURL, &ReplyBuf); + docbytes = StrLength(ReplyBuf); if (docbytes < 0) { return(0); } @@ -795,7 +817,7 @@ void cmd_oids(char *argbuf) { * So we're not even going to bother attempting this mode. */ - /* Second we attempt YADIS. + /* Second we attempt Yadis. * Google uses this so we'd better do our best to implement it. */ int yadis_succeeded = perform_yadis_discovery(oiddata->claimed_id);