From a4596789663ef247d17abca76262836540d91ccd Mon Sep 17 00:00:00 2001 From: Andrew McNab Date: Wed, 1 Jul 2009 16:04:20 +0000 Subject: [PATCH] DN list URL encoding bug --- org.gridsite.core/CHANGES | 1 + org.gridsite.core/src/grst_gacl.c | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) 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); } -- 1.8.2.3