chuck 97/04/13 20:43:34
Modified: src/modules/proxy proxy_ftp.c
Log:
Encode spaces for displayed filenames in directories.
Revision Changes Path
1.20 +26 -2 apache/src/modules/proxy/proxy_ftp.c
Index: proxy_ftp.c
===================================================================
RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_ftp.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C3 -r1.19 -r1.20
*** proxy_ftp.c 1997/04/13 15:20:30 1.19
--- proxy_ftp.c 1997/04/14 03:43:33 1.20
***************
*** 149,155 ****
}
else
{
! p = proxy_canonenc(pool, r->args, strlen(r->args), enc_path, 1);
if (p == NULL) return BAD_REQUEST;
path = pstrcat(pool, path, "?", p, NULL);
}
--- 149,155 ----
}
else
{
! p = proxy_canonenc(pool, r->args, strlen(r->args), enc_fpath, 1);
if (p == NULL) return BAD_REQUEST;
path = pstrcat(pool, path, "?", p, NULL);
}
***************
*** 213,218 ****
--- 213,239 ----
return status;
}
+ static char *
+ encode_space(request_rec *r, char *path)
+ {
+ pool *pool=r->pool;
+ char *newpath;
+ int i, j, len;
+
+ len = strlen(path);
+ newpath = palloc(pool, 3 * len + 1);
+ for (i=0, j=0; i < len; i++, j++) {
+ if (path[i] != ' ')
+ newpath[j] = path[i];
+ else {
+ proxy_c2hex(' ', &newpath[j]);
+ j += 2;
+ }
+ }
+ newpath[j] = '\0';
+ return newpath;
+ }
+
static long int
send_dir(BUFF *f, request_rec *r, BUFF *f2, struct cache_req *c, char *url)
{
***************
*** 220,225 ****
--- 241,247 ----
char buf2[IOBUFSIZE];
char *filename;
char *tempurl;
+ char *newurlptr;
int searchidx = 0;
char *searchptr = NULL;
int firstfile = 1;
***************
*** 235,240 ****
--- 257,263 ----
tempurl += n - 5; /* leave room for ftp:// */
}
+ n = decodeenc(tempurl);
ap_snprintf(buf, sizeof(buf),
"<HTML><HEAD><TITLE>%s</TITLE></HEAD><BODY><H1>Directory %s</H1><HR><PRE>",
tempurl, tempurl);
bwrite(con->client, buf, strlen(buf));
if (f2 != NULL) bwrite(f2, buf, strlen(buf));
***************
*** 326,332 ****
else
{
ap_snprintf(urlptr, sizeof(urlptr),
"%s%s%s",url,(url[strlen(url)-1]=='/' ? "" : "/"), filename);
! ap_snprintf(buf2, sizeof(buf2), "%s <A
HREF=\"%s\">%s</A>\015\012", buf, urlptr, filename);
}
strncpy(buf, buf2, sizeof(buf));
buf[sizeof(buf)-1] = '\0';
--- 349,356 ----
else
{
ap_snprintf(urlptr, sizeof(urlptr),
"%s%s%s",url,(url[strlen(url)-1]=='/' ? "" : "/"), filename);
! newurlptr = encode_space(r, urlptr);
! ap_snprintf(buf2, sizeof(buf2), "%s <A
HREF=\"%s\">%s</A>\015\012", buf, newurlptr, filename);
}
strncpy(buf, buf2, sizeof(buf));
buf[sizeof(buf)-1] = '\0';