summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2008-02-15 23:21:05 (UTC)
committer Michael Krelin <hacker@klever.net>2008-02-15 23:21:05 (UTC)
commitccdfc6eacec435a59d773127762ad0b6bce07149 (patch) (unidiff)
tree0a653ff550db04a65f6bbda418725c6c966d294f
parent2048be862b8619ddec90163af05e6472bf5175e4 (diff)
downloadlibopkele-ccdfc6eacec435a59d773127762ad0b6bce07149.zip
libopkele-ccdfc6eacec435a59d773127762ad0b6bce07149.tar.gz
libopkele-ccdfc6eacec435a59d773127762ad0b6bce07149.tar.bz2
small fix to openid message find_ns method
it foolishly failed in presence of ns field and absence of namespace in question. Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--lib/openid_message.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/openid_message.cc b/lib/openid_message.cc
index 588bd62..75e59b3 100644
--- a/lib/openid_message.cc
+++ b/lib/openid_message.cc
@@ -192,51 +192,53 @@ namespace opkele {
192 signeds = get_field("signed"); 192 signeds = get_field("signed");
193 string::size_type lnc = signeds.find_last_not_of(","); 193 string::size_type lnc = signeds.find_last_not_of(",");
194 if(lnc==string::npos) 194 if(lnc==string::npos)
195 signeds.assign(fields,fnc,fields.size()-fnc); 195 signeds.assign(fields,fnc,fields.size()-fnc);
196 else{ 196 else{
197 string::size_type ss = signeds.size(); 197 string::size_type ss = signeds.size();
198 if(lnc==(ss-1)) { 198 if(lnc==(ss-1)) {
199 signeds+= ','; 199 signeds+= ',';
200 signeds.append(fields,fnc,fields.size()-fnc); 200 signeds.append(fields,fnc,fields.size()-fnc);
201 }else{ 201 }else{
202 if(lnc<(ss-2)) 202 if(lnc<(ss-2))
203 signeds.replace(lnc+2,ss-lnc-2, 203 signeds.replace(lnc+2,ss-lnc-2,
204 fields,fnc,fields.size()-fnc); 204 fields,fnc,fields.size()-fnc);
205 else 205 else
206 signeds.append(fields,fnc,fields.size()-fnc); 206 signeds.append(fields,fnc,fields.size()-fnc);
207 } 207 }
208 } 208 }
209 }catch(failed_lookup&) { 209 }catch(failed_lookup&) {
210 signeds.assign(fields,fnc,fields.size()-fnc); 210 signeds.assign(fields,fnc,fields.size()-fnc);
211 } 211 }
212 set_field("signed",signeds); 212 set_field("signed",signeds);
213 } 213 }
214 214
215 string basic_openid_message::find_ns(const string& uri,const char *pfx) const { 215 string basic_openid_message::find_ns(const string& uri,const char *pfx) const {
216 if(has_field("ns")) 216 try {
217 return get_ns(uri); 217 return get_ns(uri);
218 return pfx; 218 }catch(failed_lookup&) {
219 return pfx;
220 }
219 } 221 }
220 string basic_openid_message::allocate_ns(const string& uri,const char *pfx) { 222 string basic_openid_message::allocate_ns(const string& uri,const char *pfx) {
221 if(!has_field("ns")) 223 if(!has_field("ns"))
222 return pfx; 224 return pfx;
223 if(has_ns(uri)) 225 if(has_ns(uri))
224 throw bad_input(OPKELE_CP_ "OpenID message already contains namespace"); 226 throw bad_input(OPKELE_CP_ "OpenID message already contains namespace");
225 string rv = pfx; 227 string rv = pfx;
226 if(has_field("ns."+rv)) { 228 if(has_field("ns."+rv)) {
227 string::reference c=rv[rv.length()]; 229 string::reference c=rv[rv.length()];
228 for(c='a';c<='z' && has_field("ns."+rv);++c); 230 for(c='a';c<='z' && has_field("ns."+rv);++c);
229 if(c=='z') 231 if(c=='z')
230 throw exception(OPKELE_CP_ "Failed to allocate namespace"); 232 throw exception(OPKELE_CP_ "Failed to allocate namespace");
231 } 233 }
232 set_field("ns."+rv,uri); 234 set_field("ns."+rv,uri);
233 return rv; 235 return rv;
234 } 236 }
235 237
236 void openid_message_t::copy_to(basic_openid_message& x) const { 238 void openid_message_t::copy_to(basic_openid_message& x) const {
237 x.reset_fields(); 239 x.reset_fields();
238 for(const_iterator i=begin();i!=end();++i) 240 for(const_iterator i=begin();i!=end();++i)
239 x.set_field(i->first,i->second); 241 x.set_field(i->first,i->second);
240 } 242 }
241 243
242 bool openid_message_t::has_field(const string& n) const { 244 bool openid_message_t::has_field(const string& n) const {