DN list URL encoding bug
authorAndrew McNab <andrew.mcnab@manchester.ac.uk>
Wed, 1 Jul 2009 16:04:20 +0000 (16:04 +0000)
committerAndrew McNab <andrew.mcnab@manchester.ac.uk>
Wed, 1 Jul 2009 16:04:20 +0000 (16:04 +0000)
org.gridsite.core/CHANGES
org.gridsite.core/src/grst_gacl.c

index e30d0ad..5413046 100644 (file)
@@ -1,5 +1,6 @@
 * Wed Jul 01 2009 Andrew McNab <Andrew.McNab@cern.ch>
 - Tidy up debugging messages
+- Fix URL encoding bug in DN lists (' ' vs '+')
 * Tue Jun 30 2009 Andrew McNab <Andrew.McNab@cern.ch>
 - ==== GridSite version 1.7.2 ====
 * Tue Jun 30 2009 Andrew McNab <Andrew.McNab@cern.ch>
index e6239c3..8dbfc19 100644 (file)
@@ -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);  
 }