summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/consumer.h6
-rw-r--r--include/opkele/exception.h9
-rw-r--r--lib/consumer.cc6
-rw-r--r--lib/util.cc6
4 files changed, 21 insertions, 6 deletions
diff --git a/include/opkele/consumer.h b/include/opkele/consumer.h
index 50ff692..c463787 100644
--- a/include/opkele/consumer.h
+++ b/include/opkele/consumer.h
@@ -69,2 +69,7 @@ namespace opkele {
*
+ * @note
+ * It may be a good idea to pre-expire associations shortly before
+ * their time is really up to avoid association expiry in the
+ * middle of negotiations.
+ *
* @param server the OpenID server
@@ -139,2 +144,3 @@ namespace opkele {
* @throw id_res_failed in case of failure
+ * @throw id_res_expired_on_delivery if the association expired before it could've been verified
* @throw exception in case of other failures
diff --git a/include/opkele/exception.h b/include/opkele/exception.h
index a654d59..8913665 100644
--- a/include/opkele/exception.h
+++ b/include/opkele/exception.h
@@ -172,2 +172,11 @@ namespace opkele {
/**
+ * thrown if the association has expired before it could've been verified.
+ */
+ class id_res_expired_on_delivery : public id_res_failed {
+ public:
+ id_res_expired_on_delivery(OPKELE_E_PARS)
+ : id_res_failed(OPKELE_E_CONS) { }
+ };
+
+ /**
* openssl malfunction occured
diff --git a/lib/consumer.cc b/lib/consumer.cc
index 66db7dd..9f7530f 100644
--- a/lib/consumer.cc
+++ b/lib/consumer.cc
@@ -186,4 +186,4 @@ namespace opkele {
assoc_t assoc = retrieve_assoc(server,pin.get_param("openid.assoc_handle"));
- if(assoc->is_expired()) /* TODO: or should I throw some other exception to force programmer fix his implementation? */
- throw failed_lookup(OPKELE_CP_ "retrieve_assoc() has returned expired handle");
+ if(assoc->is_expired())
+ throw id_res_expired_on_delivery(OPKELE_CP_ "retrieve_assoc() has returned expired handle");
const string& sigenc = pin.get_param("openid.sig");
@@ -216,3 +216,3 @@ namespace opkele {
throw id_res_mismatch(OPKELE_CP_ "signature mismatch");
- }catch(failed_lookup& e) { /* XXX: more specific? */
+ }catch(failed_lookup& e) {
const string& slist = pin.get_param("openid.signed");
diff --git a/lib/util.cc b/lib/util.cc
index 83f0eef..4600576 100644
--- a/lib/util.cc
+++ b/lib/util.cc
@@ -223,5 +223,5 @@ namespace opkele {
if( (port>0) && (port<65535) && port!=(s?443:80) ) {
- char tmp[6];
- snprintf(tmp,sizeof(tmp),"%ld",port);
- rv += ':'; rv += tmp;
+ char tmp[8];
+ snprintf(tmp,sizeof(tmp),":%ld",port);
+ rv += tmp;
}