$B2,ED$G$9!#(B
[w3m-dev 01051] $B$N%Q%C%A$G$O!"(Bw3m -m $B$G(B Location: $B$N%X%C%@$N$"$kJ8>O$r(B
$B8+$k$HHt$s$G$$$C$F$7$^$&$N$G!"(Blocal CGI $B$N$H$-$N$_(B Location: $B$r;2>H$9(B
$B$k$h$&$KJQ99$7$^$7$?!#(B
$B2?2s$bCfESH>C<$J%Q%C%A$rEj$2$F?=$7Lu$"$j$^$;$s!#(B> $B3'$5$^(B
# $B2,It$5$s$N(B [w3m-dev 01052] $B$N%Q%C%A$H$O$V$D$+$i$J$$$O$:$G$9!#(B
## current working directory $B$rJQ99$7$F(B popen $B$9$k!"$b$C$H$^$H$b$J<BAu(B
## $B$r8fB8CN$NJ}$O!"=$@5$r$*4j$$$7$^$9!#$3$N$^$^$@$H!"(BOS/2 $B$d(B MS-DOS $B$G(B
## $BF0:n$7$J$$$G$9$h$M!D(B
-- Tsutomu Okada <okada@furuno.co.jp>*** etc.c.dist Fri Aug 11 17:10:41 2000 --- etc.c Mon Sep 4 16:50:29 2000 *************** *** 586,591 **** --- 586,604 ---- return allocStr(p, 0); } + char * + mydirname(char *s) + { + char *p = s; + while (*p) + p++; + while (s <= p && *p != '/') + p--; + if (*p != '/') + p = NULL; + return allocStr(s, strlen(s) - strlen(p)); + } + #ifndef STRERROR char * strerror(int errno) *** file.c.dist Mon Sep 4 16:22:16 2000 --- file.c Tue Sep 5 13:34:09 2000 *************** *** 980,985 **** --- 980,999 ---- t = checkContentType(t_buf); if (t == NULL) t = "text/plain"; + if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL) { + /* document moved */ + tmp = Strnew_charp(p); + Strchop(tmp); + tpath = tmp->ptr; + request = NULL; + UFclose(&f); + add_auth_cookie_flag = 0; + current = New(ParsedURL); + copyParsedURL(current, &pu); + t_buf->bufferprop |= BP_REDIRECTED; + status = HTST_NORMAL; + goto load_doc; + } searchHeader = SearchHeader = FALSE; } else if (DefaultType) { *** local.c.dist Mon Sep 4 10:50:52 2000 --- local.c Tue Sep 5 09:21:33 2000 *************** *** 224,236 **** } static void ! set_cgi_environ() { set_environ("SERVER_SOFTWARE", version); set_environ("SERVER_PROTOCOL", "HTTP/1.0"); set_environ("REMOTE_HOST", "localhost"); set_environ("REMOTE_ADDR", "127.0.0.1"); set_environ("SERVER_PORT", "80"); /* dummy */ } static Str --- 224,240 ---- } static void ! set_cgi_environ(char *name, char *fn, char *req_uri) { set_environ("SERVER_SOFTWARE", version); set_environ("SERVER_PROTOCOL", "HTTP/1.0"); set_environ("REMOTE_HOST", "localhost"); set_environ("REMOTE_ADDR", "127.0.0.1"); set_environ("SERVER_PORT", "80"); /* dummy */ + + set_environ("SCRIPT_NAME", name); + set_environ("SCRIPT_FILENAME", fn); + set_environ("REQUEST_URI", req_uri); } static Str *************** *** 290,302 **** localcgi_post(char *file, FormList * request) { FILE *f; ! Str tmp1, tmp2; int status; file = cgi_filename(file, &status); if (check_local_cgi(file, status) < 0) return NULL; ! set_cgi_environ(); set_environ("REQUEST_METHOD", "POST"); set_environ("CONTENT_LENGTH", Sprintf("%d", request->length)->ptr); if (request->enctype == FORM_ENCTYPE_MULTIPART) { --- 294,307 ---- localcgi_post(char *file, FormList * request) { FILE *f; ! Str name, tmp1, tmp2; int status; + name = Strnew_charp(file); file = cgi_filename(file, &status); if (check_local_cgi(file, status) < 0) return NULL; ! set_cgi_environ(name->ptr, file, name->ptr); set_environ("REQUEST_METHOD", "POST"); set_environ("CONTENT_LENGTH", Sprintf("%d", request->length)->ptr); if (request->enctype == FORM_ENCTYPE_MULTIPART) { *************** *** 325,344 **** fputs(request->body, f); } fclose(f); ! tmp2 = Sprintf("%s < %s", file, tmp1->ptr); return popen(tmp2->ptr, "r"); } FILE * localcgi_get(char *file, char *request) { int status; file = cgi_filename(file, &status); if (check_local_cgi(file, status) < 0) return NULL; ! set_cgi_environ(); set_environ("REQUEST_METHOD", "GET"); set_environ("QUERY_STRING", request); ! return popen(file, "r"); } --- 330,359 ---- fputs(request->body, f); } fclose(f); ! tmp2 = Sprintf("cd %s; %s < %s", mydirname(file), file, tmp1->ptr); return popen(tmp2->ptr, "r"); } FILE * localcgi_get(char *file, char *request) { + Str name, tmp; int status; + name = Strnew_charp(file); file = cgi_filename(file, &status); if (check_local_cgi(file, status) < 0) return NULL; ! if (!strcmp(request, "")) ! set_cgi_environ(name->ptr, file, name->ptr); ! else { ! Str req_uri; ! ! req_uri = Strnew_m_charp(name->ptr, "?", request, NULL); ! set_cgi_environ(name->ptr, file, req_uri->ptr); ! } set_environ("REQUEST_METHOD", "GET"); set_environ("QUERY_STRING", request); ! tmp = Sprintf("cd %s; %s", mydirname(file), file); ! return popen(tmp->ptr, "r"); }
This archive was generated by hypermail 2b29 : Tue Sep 05 2000 - 00:20:09 CDT