/[mod_czs]/mod_czs.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /mod_czs.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (hide annotations)
Thu Aug 10 13:39:31 2000 UTC (23 years, 7 months ago) by dpavlin
Branch: MAIN
Changes since 1.8: +15 -13 lines
File MIME type: text/plain
don't pass cgi scripts through this handler

1 dpavlin 1.1 /*
2     * mod_czs -- nuke iso8859-2 characters
3     * Dobrica Pavlinusic <dpavlin@rot13.org>
4     *
5     * based on mod_format by Stephen F. Booth and
6     * mod_mocrify by Peter Triller, Ernst Bachmann
7     *
8     * Usage: httpd.conf
9     * AddHandler czs .html
10     *
11     * This program is free software; you can redistribute it and/or modify
12     * it under the terms of the GNU General Public License as published by
13     * the Free Software Foundation; either version 2 of the License, or
14     * (at your option) any later version.
15     *
16     * This program is distributed in the hope that it will be useful,
17     * but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19     * GNU General Public License for more details.
20     *
21     * You should have received a copy of the GNU General Public License
22     * along with this program; if not, write to the Free Software
23     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24     */
25    
26     #include "httpd.h"
27     #include "http_main.h"
28     #include "http_config.h"
29     #include "http_log.h"
30     #include "http_protocol.h"
31 dpavlin 1.8 #include "translate.c"
32 dpavlin 1.1
33     module MODULE_VAR_EXPORT mod_czs;
34    
35     FILE *in;
36     int do_czs;
37    
38     static int czs_handler(request_rec *r) {
39    
40     char buffer[MAX_STRING_LEN] = "undefined buffer content";
41     int i;
42    
43     if(r->method_number != M_GET)
44     return DECLINED;
45     if(r->finfo.st_mode == 0)
46     return NOT_FOUND;
47    
48     in = ap_pfopen(r->pool, r->filename, "r");
49    
50     if(in == NULL) {
51     ap_log_reason("file permissions deny server access", r->filename, r);
52     return FORBIDDEN;
53     }
54 dpavlin 1.7 #ifdef DEBUG
55 dpavlin 1.1 if(r->args != 0 || do_czs) {
56     ap_table_setn(r->headers_out, "X-czs_filename", r->filename);
57 dpavlin 1.9 ap_table_setn(r->headers_out, "X-czs_content-type", r->content_type);
58 dpavlin 1.2 if (r->args != 0) {
59     ap_table_setn(r->headers_out, "X-czs_args", r->args);
60     }
61 dpavlin 1.1 }
62 dpavlin 1.7 #endif
63 dpavlin 1.1
64 dpavlin 1.9 #ifdef TEST_QUERYSTRINGV
65     if(r->args == 0 && !do_czs || strstr(r->content_type,"cgi") != NULL) {
66 dpavlin 1.5 #else
67 dpavlin 1.9 if(!do_czs || strstr(r->content_type,"cgi") != NULL) {
68 dpavlin 1.5 #endif
69 dpavlin 1.9 return DECLINED;
70     /* ap_send_fd(in, r); */
71 dpavlin 1.1 } else {
72 dpavlin 1.9
73     ap_soft_timeout("send", r);
74     ap_send_http_header(r);
75    
76     if(r->header_only) {
77     ap_kill_timeout(r);
78     ap_pfclose(r->pool, in);
79     return OK;
80     }
81 dpavlin 1.5
82     while(fgets(buffer,MAX_STRING_LEN,in)) {
83     for(i=0; i<MAX_STRING_LEN && buffer[i]; i++) {
84     switch ( buffer[i] ) {
85     case '¹': buffer[i]='s'; break;
86     case 'ð': buffer[i]='d'; break;
87     case 'è': buffer[i]='c'; break;
88     case 'æ': buffer[i]='c'; break;
89     case '¾': buffer[i]='z'; break;
90     case '©': buffer[i]='S'; break;
91     case 'Ð': buffer[i]='D'; break;
92     case 'È': buffer[i]='C'; break;
93     case 'Æ': buffer[i]='C'; break;
94     case '®': buffer[i]='Z'; break;
95     }
96 dpavlin 1.1 }
97 dpavlin 1.5 ap_rprintf(r,"%s",buffer);
98 dpavlin 1.1 }
99     }
100    
101     ap_kill_timeout(r);
102     ap_pfclose(r->pool, in);
103     return OK;
104     }
105    
106     /* Dispatch list of content handlers */
107     static const handler_rec czs_handlers[] = {
108     { "czs", czs_handler },
109     { NULL, NULL }
110     };
111    
112     /* Dispatch list for API hooks */
113     module MODULE_VAR_EXPORT czs_module = {
114     STANDARD_MODULE_STUFF,
115     NULL, /* module initializer */
116     NULL, /* create per-dir config structures */
117     NULL, /* merge per-dir config structures */
118     NULL, /* create per-server config structures */
119     NULL, /* merge per-server config structures */
120     NULL, /* table of config file commands */
121     czs_handlers, /* [#8] MIME-typed-dispatched handlers */
122     translate_path, /* [#1] URI to filename translation */
123     NULL, /* [#4] validate user id from request */
124     NULL, /* [#5] check if the user is ok _here_ */
125     NULL, /* [#2] check access by host address */
126     NULL, /* [#6] determine MIME type */
127     NULL, /* [#7] pre-run fixups */
128     NULL, /* [#9] log a transaction */
129     NULL, /* [#3] header parser */
130     NULL, /* child_init */
131     NULL, /* child_exit */
132     NULL /* [#0] post read-request */
133 dpavlin 1.8 #ifdef EAPI
134     ,NULL, /* EAPI: add_module */
135     NULL, /* EAPI: remove_module */
136     NULL, /* EAPI: rewrite_command */
137     NULL /* EAPI: new_connection */
138     #endif
139 dpavlin 1.1 };
140    

  ViewVC Help
Powered by ViewVC 1.1.26