-rw-r--r-- | .gitignore | 33 | ||||
-rw-r--r-- | COPYING | 2 | ||||
-rw-r--r-- | Makefile.am | 3 | ||||
-rw-r--r-- | NEWS.xml | 6 | ||||
-rwxr-xr-x | autogen.sh | 2 | ||||
-rw-r--r-- | autoregen.sh | 2 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | include/opkele/expat.h | 3 | ||||
-rw-r--r-- | lib/basic_rp.cc | 3 | ||||
-rw-r--r-- | lib/discovery.cc | 53 | ||||
-rw-r--r-- | lib/expat.cc | 9 | ||||
-rw-r--r-- | test/RP.cc | 1 |
12 files changed, 82 insertions, 39 deletions
@@ -1,21 +1,16 @@ -configure +/configure Makefile.in -Doxyfile -config.log -depcomp -config.guess -config.h -config.sub -ltmain.sh -INSTALL -NEWS +/Doxyfile +/config.log +/config.h +/INSTALL +/NEWS Makefile -config.status -stamp-h1 -config.h.in -libtool -autom4te.cache -libopkele.pc -missing -aclocal.m4 -install-sh +/config.status +/stamp-h1 +/config.h.in +/autom4te.cache +/libopkele.pc +/aclocal.m4 +/aclocal.d +/aux.d @@ -1,4 +1,4 @@ -Copyright (c) 2005-2008 Klever Group (http://www.klever.net/) +Copyright (c) 2005-2009 Klever Group (http://www.klever.net/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Makefile.am b/Makefile.am index 3227bdb..7726dad 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,8 @@ - SUBDIRS=include lib test EXTRA_DIST= NEWS NEWS.xml NEWS.xsl +ACLOCAL_AMFLAGS=-I aclocal.d + pkgconfigdir=${libdir}/pkgconfig pkgconfig_DATA=libopkele.pc @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="us-ascii"?> <news> + <version version="2.0.2" date="April 11th, 2009"> + <ni>Handling of unknown encodings during discovery</ni> + <ni>Discovery robustness improvements</ni> + <ni>Workaround for OPs (e.g. livejournal.com) breaking specs</ni> + <ni>Build fixes and improvements</ni> + </version> <version version="2.0.1" date="November 22nd, 2008"> <ni>Compile-time fixes and improvements</ni> <ni>Portability improvements for FreeBSD</ni> @@ -4,7 +4,7 @@ if test -z "$tool_libtoolize" ; then echo "Failed to find libtoolize." ; exit 1; fi "$tool_libtoolize" -f \ -&& aclocal \ +&& aclocal -I aclocal.d \ && autoheader \ && automake -a \ && autoconf \ diff --git a/autoregen.sh b/autoregen.sh new file mode 100644 index 0000000..ce75a08 --- a/dev/null +++ b/autoregen.sh @@ -0,0 +1,2 @@ +#!/bin/bash +eval sh autogen.sh $(./config.status --version | grep '^ with options "'|sed -e 's/^[^"]\+"//' -e 's/"$//') "$@" diff --git a/configure.ac b/configure.ac index a7b56ff..2ded490 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,8 @@ -AC_INIT([libopkele], [2.0.1], [libopkele-bugs@klever.net]) +AC_INIT([libopkele], [2.0.2], [libopkele-bugs@klever.net]) AC_CONFIG_SRCDIR([include/opkele/opkele-config.h]) AC_CONFIG_HEADERS([config.h include/opkele/acconfig.h]) +AC_CONFIG_MACRO_DIR([aclocal.d]) +AC_CONFIG_AUX_DIR([aux.d]) AM_INIT_AUTOMAKE([dist-bzip2]) AC_PROG_INSTALL diff --git a/include/opkele/expat.h b/include/opkele/expat.h index 3ab1630..21be003 100644 --- a/include/opkele/expat.h +++ b/include/opkele/expat.h @@ -26,6 +26,9 @@ namespace opkele { return XML_Parse(_x,s,len,final); } + virtual int unknown_encoding(const XML_Char * /* n */,XML_Encoding * /* i */) { return XML_STATUS_ERROR; } + void set_unknown_encoding_handler(); + virtual void start_element(const XML_Char * /* n */,const XML_Char ** /* a */) { } virtual void end_element(const XML_Char * /* n */) { } void set_element_handler(); diff --git a/lib/basic_rp.cc b/lib/basic_rp.cc index 3cad71c..9c7113b 100644 --- a/lib/basic_rp.cc +++ b/lib/basic_rp.cc @@ -218,7 +218,8 @@ namespace opkele { void basic_RP::id_res(const basic_openid_message& om,extension_t *ext) { reset_vars(); bool o2 = om.has_field("ns") - && om.get_field("ns")==OIURI_OPENID20; + && om.get_field("ns")==OIURI_OPENID20 + && om.has_field("op_endpoint") && !om.get_field("op_endpoint").empty(); if( (!o2) && om.has_field("user_setup_url")) throw id_res_setup(OPKELE_CP_ "assertion failed, setup url provided", om.get_field("user_setup_url")); diff --git a/lib/discovery.cc b/lib/discovery.cc index bd1f917..b4ed3b6 100644 --- a/lib/discovery.cc +++ b/lib/discovery.cc @@ -283,6 +283,7 @@ namespace opkele { (*(expat_t*)this) = parser_create_ns(); set_user_data(); set_element_handler(); set_character_data_handler(); + set_unknown_encoding_handler(); if(xmode&xmode_html) { html_openid1.clear(); html_openid2.clear(); @@ -453,25 +454,40 @@ namespace opkele { --skipping; return; } if(is_qelement(n,NSURI_XRD "\tType")) { - assert(xrd); assert(xrd_service); assert(cdata==&cdata_buf); - xrd_service->types.insert(cdata_buf); + if(xrd && xrd_service) { + assert(cdata==&cdata_buf); + xrd_service->types.insert(cdata_buf); + } }else if(is_qelement(n,NSURI_XRD "\tService")) { - assert(xrd); assert(xrd_service); - assert(!pt_stack.empty()); - assert(pt_stack.back()==(NSURI_XRD "\tService")); - pt_stack.pop_back(); - xrd_service = 0; - }else if(is_qelement(n,NSURI_XRD "\tStatus")) { - assert(xrd); - if(is_qelement(pt_stack.back().c_str(),n)) { - assert(cdata==&status_string); + if(!(xrd && xrd_service)) { + skipping = -1; + }else{ + assert(!pt_stack.empty()); + assert(pt_stack.back()==(NSURI_XRD "\tService")); pt_stack.pop_back(); - if(status_code!=100) - skipping = -1; + xrd_service = 0; + } + }else if(is_qelement(n,NSURI_XRD "\tStatus")) { + if(!xrd) { + skipping=-1; + }else{ + if(is_qelement(pt_stack.back().c_str(),n)) { + assert(cdata==&status_string); + pt_stack.pop_back(); + if(status_code!=100) + skipping = -1; + } } }else if(is_qelement(n,NSURI_XRD "\tExpires")) { - assert(xrd); - xrd->expires = util::w3c_to_time(cdata_buf); + if(!xrd) { + skipping=-1; + }else{ + xrd->expires = util::w3c_to_time(cdata_buf); + } + }else if(is_qelement(n,NSURI_XRD "\tXRD")) { + assert(!pt_stack.empty()); + assert(pt_stack.back()==(NSURI_XRD "\tXRD")); + pt_stack.pop_back(); }else if((xmode&xmode_html) && is_element(n,"head")) { skipping = -1; } @@ -569,6 +585,13 @@ namespace opkele { } } + int unknown_encoding(const XML_Char* /* n */,XML_Encoding *i) { + for(unsigned int ii=0;ii < sizeof(i->map)/sizeof(i->map[0]);++ii) + i->map[ii] = ii; + i->convert = 0; i->release = 0; + return XML_STATUS_OK; + } + }; string idiscover(endpoint_discovery_iterator oi,const string& identity) { diff --git a/lib/expat.cc b/lib/expat.cc index c4dab7e..fb58a9a 100644 --- a/lib/expat.cc +++ b/lib/expat.cc @@ -92,6 +92,15 @@ namespace opkele { XML_SetNamespaceDeclHandler(_x,_start_namespace_decl,_end_namespace_decl); } + static int _unknown_encoding(void *ehd,const XML_Char *n,XML_Encoding *i) { + return ((expat_t*)ehd)->unknown_encoding(n,i); + } + + void expat_t::set_unknown_encoding_handler() { + assert(_x); + XML_SetUnknownEncodingHandler(_x,_unknown_encoding,this); + } + } } @@ -1,6 +1,7 @@ #include <uuid/uuid.h> #include <iostream> #include <cassert> +#include <cstdlib> #include <stdexcept> #include <string> #include <set> |