[w3m-dev 01051] Re: Location: in local cgi.

From: $B2,ED (okada@furuno.co.jp)
Date: Mon Sep 04 2000 - 03:31:34 CDT

  • Next message: Okabe Katsuya: "[w3m-dev 01052] cellpadding, cellspacing, vspace, etc."

    $B2,ED$G$9!#(B

    From: Yoshinari Nomura <nom@csce.kyushu-u.ac.jp>
    Subject: [w3m-dev 01045] Re: Location: in local cgi.
    Date: Mon, 04 Sep 2000 14:53:44 +0900

    > $B$"$H>/$7$@$1(B http (Apache) $B7OM3$N(B CGI $B$HF0:n$,0c$&=j$,$"$j$^$9!#(B
    >
    > B $B$GLa$k$H!"(BNo Line $B$J%P%C%U%!$,I=<($5$l$F$7$^$$$^$9!#(B
    >
    > -dump $B$,8z$-$^$;$s!#(B
    >
    > apache $BEy$O!"(BCGI $B%9%/%j%W%H$r8F=P$9$H$-$K!"%9%/%j%W%H$N(B
    > current working directory $B$r%9%/%j%W%H%U%!%$%k$N$"$k%G%#%l%/%H%j(B
    > $B$K$7$F$+$i8F=P$9$h$&$K$J$C$F$$$k$h$&$G$9!#$7$+$7!"(Bw3m $B$O!"(Bw3m $B<+?H$N(B
    > current working directory $B$N$^$^$G$9!#$3$l$N:9$G!"(B
    > $BAjBP%Q%9;XDj$G:n6HMQ%U%!%$%k$r$$$8$k%9%/%j%W%H$,%3%1$F$7$^$$$^$9!#(B

    goURL $B$rMxMQ$9$k$N$r$d$a$F!"(BHTTP $BEy$HF1$8=hM}$K$7$F!">e5-$NF0:n$rK~$?(B
    $B$9$h$&$K$7$F$_$^$7$?!#$*<j?t$G$9$,!"(B[w3m-dev 01041, 01044] $B$rGK4~$7$F(B
    $B$$$?$@$$$F!"E:IU$N%Q%C%A$r$*;n$72<$5$$!#(B

    # popen $B$G%^%k%A%9%F!<%H%a%s%H$r;H$C$F$$$k$N$G!"(BUNIX $B0J30$N4D6-$G$O$&(B
    # $B$^$/F0$+$J$$$+$b$7$l$^$;$s!#(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 Mon Sep 4 17:15:45 2000 *************** *** 980,985 **** --- 980,999 ---- t = checkContentType(t_buf); if (t == NULL) t = "text/plain"; + if ((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 Mon Sep 4 16:59:24 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 : Mon Sep 04 2000 - 03:42:05 CDT