From: Andrew McNab Date: Wed, 1 Jul 2009 16:04:20 +0000 (+0000) Subject: DN list URL encoding bug X-Git-Tag: gridsite-core_R_1_7_2~1 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=a4596789663ef247d17abca76262836540d91ccd;p=jra1mw.git DN list URL encoding bug --- diff --git a/org.gridsite.core/CHANGES b/org.gridsite.core/CHANGES index e30d0ad..5413046 100644 --- a/org.gridsite.core/CHANGES +++ b/org.gridsite.core/CHANGES @@ -1,5 +1,6 @@ * Wed Jul 01 2009 Andrew McNab - Tidy up debugging messages +- Fix URL encoding bug in DN lists (' ' vs '+') * Tue Jun 30 2009 Andrew McNab - ==== GridSite version 1.7.2 ==== * Tue Jun 30 2009 Andrew McNab diff --git a/org.gridsite.core/src/grst_gacl.c b/org.gridsite.core/src/grst_gacl.c index e6239c3..8dbfc19 100644 --- a/org.gridsite.core/src/grst_gacl.c +++ b/org.gridsite.core/src/grst_gacl.c @@ -1089,7 +1089,7 @@ static void recurse4dnlists(GRSTgaclUser *user, char *dir, return full path to first found version or NULL on failure */ { int fd, linestart, i; - char *fullfilename, *mapped, *q, *s; + char *fullfilename, *mapped, *q, *s, *dn_decoded; size_t dn_len; struct stat statbuf; DIR *dirDIR; @@ -1098,14 +1098,15 @@ static void recurse4dnlists(GRSTgaclUser *user, char *dir, if (recurse_level >= GRST_RECURS_LIMIT) return; - dn_len = strlen(dn_cred->auri) - 3; - /* search this directory */ dirDIR = opendir(dir); if (dirDIR == NULL) return; + dn_decoded = GRSThttpUrlDecode(&(dn_cred->auri[3])); + dn_len = strlen(dn_decoded); + while ((file_ent = readdir(dirDIR)) != NULL) { if (file_ent->d_name[0] == '.') continue; @@ -1134,7 +1135,7 @@ static void recurse4dnlists(GRSTgaclUser *user, char *dir, for (i=0; (linestart + i < statbuf.st_size) && (i < dn_len); ++i) - if (mapped[linestart + i] != dn_cred->auri[3+i]) break; + if (mapped[linestart + i] != dn_decoded[i]) break; GRSTerrorLog(GRST_LOG_DEBUG, "recurse4dnlists at %d %d %d %d", linestart, i, dn_len, statbuf.st_size); @@ -1176,7 +1177,8 @@ static void recurse4dnlists(GRSTgaclUser *user, char *dir, if (fd < 0) close(fd); free(fullfilename); } - + + free(dn_decoded); closedir(dirDIR); }