summaryrefslogtreecommitdiffabout
path: root/lib/util.cc
authorMichael Krelin <hacker@klever.net>2008-02-02 21:10:12 (UTC)
committer Michael Krelin <hacker@klever.net>2008-02-02 21:10:12 (UTC)
commit3658759966cbadb7b50457d446f3436b6f7987da (patch) (unidiff)
treeb215da5b5212b60aa1ec965df28070b4bff587bc /lib/util.cc
parenta8f733c88d87abe422ecaa405df385bad562e60f (diff)
downloadlibopkele-3658759966cbadb7b50457d446f3436b6f7987da.zip
libopkele-3658759966cbadb7b50457d446f3436b6f7987da.tar.gz
libopkele-3658759966cbadb7b50457d446f3436b6f7987da.tar.bz2
moved uri matching into separate procedure
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'lib/util.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/util.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/util.cc b/lib/util.cc
index b7bc437..b85a377 100644
--- a/lib/util.cc
+++ b/lib/util.cc
@@ -5,6 +5,7 @@
5#include <vector> 5#include <vector>
6#include <string> 6#include <string>
7#include <stack> 7#include <stack>
8#include <algorithm>
8#include <openssl/bio.h> 9#include <openssl/bio.h>
9#include <openssl/evp.h> 10#include <openssl/evp.h>
10#include <openssl/hmac.h> 11#include <openssl/hmac.h>
@@ -351,6 +352,35 @@ namespace opkele {
351 return u; 352 return u;
352 } 353 }
353 354
355 bool uri_matches_realm(const string& uri,const string& realm) {
356 string nrealm = opkele::util::rfc_3986_normalize_uri(realm);
357 string nu = opkele::util::rfc_3986_normalize_uri(uri);
358 string::size_type pr = nrealm.find("://");
359 string::size_type pu = nu.find("://");
360 assert(!(pr==string::npos || pu==string::npos));
361 pr += sizeof("://")-1;
362 pu += sizeof("://")-1;
363 if(!strncmp(nrealm.c_str()+pr,"*.",2)) {
364 pr = nrealm.find('.',pr);
365 pu = nu.find('.',pu);
366 assert(pr!=string::npos);
367 if(pu==string::npos)
368 return false;
369 // TODO: check for overgeneralized realm
370 }
371 string::size_type lr = nrealm.length();
372 string::size_type lu = nu.length();
373 if( (lu-pu) < (lr-pr) )
374 return false;
375 pair<const char*,const char*> mp = mismatch(
376 nrealm.c_str()+pr,nrealm.c_str()+lr,
377 nu.c_str()+pu);
378 if( (*(mp.first-1))!='/'
379 && !strchr("/?#",*mp.second) )
380 return false;
381 return true;
382 }
383
354 string abi_demangle(const char *mn) { 384 string abi_demangle(const char *mn) {
355#ifndef HAVE_DEMANGLE 385#ifndef HAVE_DEMANGLE
356 return mn; 386 return mn;