1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
5 * Copyright (C) 2001-2007, Eduardo Silva P.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Library General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 #define M_CGI_TIMEOUT -2
26 #define M_CGI_INTERNAL_SERVER_ERR -3
27 #define M_CGI_PIPE_ERR -4
29 #define M_CGI_CHILD_EXIT_OK 0
30 #define M_CGI_CHILD_EXIT_FAIL -1
32 #define MK_CGI_DOCUMENT_ROOT "DOCUMENT_ROOT"
33 #define MK_CGI_CONTENT_LENGTH "CONTENT_LENGTH"
34 #define MK_CGI_CONTENT_TYPE "CONTENT_TYPE"
35 #define MK_CGI_SERVER_ADDR "SERVER_ADDR"
36 #define MK_CGI_SERVER_NAME "SERVER_NAME"
37 #define MK_CGI_SERVER_PROTOCOL "SERVER_PROTOCOL"
38 #define MK_CGI_SERVER_SOFTWARE "SERVER_SOFTWARE"
39 #define MK_CGI_SERVER_SIGNATURE "SERVER_SIGNATURE"
42 #define MK_CGI_HTTP_USER_AGENT "HTTP_USER_AGENT"
43 #define MK_CGI_HTTP_ACCEPT "HTTP_ACCEPT"
44 #define MK_CGI_HTTP_ACCEPT_CHARSET "HTTP_ACCEPT_CHARSET"
45 #define MK_CGI_HTTP_ACCEPT_ENCODING "HTTP_ACCEPT_ENCODING"
46 #define MK_CGI_HTTP_ACCEPT_LANGUAGE "HTTP_ACCEPT_LANGUAGE"
47 #define MK_CGI_HTTP_HOST "HTTP_HOST"
48 #define MK_CGI_HTTP_COOKIE "HTTP_COOKIE"
49 #define MK_CGI_HTTP_REFERER "HTTP_REFERER"
51 #define MK_CGI_SERVER_PORT "SERVER_PORT"
52 #define MK_CGI_CGI_VERSION "CGI_VERSION"
53 #define MK_CGI_GATEWAY_INTERFACE "GATEWAY_INTERFACE"
54 #define MK_CGI_REMOTE_ADDR "REMOTE_ADDR"
55 #define MK_CGI_REQUEST_URI "REQUEST_URI"
56 #define MK_CGI_REQUEST_METHOD "REQUEST_METHOD"
57 #define MK_CGI_SCRIPT_NAME "SCRIPT_NAME"
58 #define MK_CGI_SCRIPT_FILENAME "SCRIPT_FILENAME"
59 #define MK_CGI_REMOTE_PORT "REMOTE_PORT"
60 #define MK_CGI_QUERY_STRING "QUERY_STRING"
61 #define MK_CGI_POST_VARS "POST_VARS"
63 mk_pointer mk_cgi_document_root
;
64 mk_pointer mk_cgi_content_length
;
65 mk_pointer mk_cgi_content_type
;
66 mk_pointer mk_cgi_server_addr
;
67 mk_pointer mk_cgi_server_name
;
68 mk_pointer mk_cgi_server_protocol
;
69 mk_pointer mk_cgi_server_software
;
70 mk_pointer mk_cgi_server_signature
;
71 mk_pointer mk_cgi_http_user_agent
;
72 mk_pointer mk_cgi_http_accept
;
73 mk_pointer mk_cgi_http_accept_charset
;
74 mk_pointer mk_cgi_http_accept_encoding
;
75 mk_pointer mk_cgi_http_accept_language
;
76 mk_pointer mk_cgi_http_host
;
77 mk_pointer mk_cgi_http_cookie
;
78 mk_pointer mk_cgi_http_referer
;
79 mk_pointer mk_cgi_server_port
;
80 mk_pointer mk_cgi_cgi_version
;
81 mk_pointer mk_cgi_gateway_interface
;
82 mk_pointer mk_cgi_remote_addr
;
83 mk_pointer mk_cgi_request_uri
;
84 mk_pointer mk_cgi_request_method
;
85 mk_pointer mk_cgi_script_name
;
86 mk_pointer mk_cgi_script_filename
;
87 mk_pointer mk_cgi_remote_port
;
88 mk_pointer mk_cgi_query_string
;
89 mk_pointer mk_cgi_post_vars
;
91 #define CGI_VERSION "1.1"
92 mk_pointer mk_cgi_version
;
104 /* Struct to keep PID childs */
106 pthread_t thread_pid
;
108 struct cgi_child
*next
;
112 int M_CGI_main(struct client_request
*cr
, struct request
*sr
,
113 struct log_info
*s_log
,
114 mk_pointer remote_request
);
116 int M_CGI_run(struct client_request
*cr
, struct request
*sr
,
117 char *script_filename
, char **args
);
118 int M_CGI_send(int socket
, int cgi_pipe
, struct client_request
*cr
,
119 struct request
*sr
, int remote_protocol
);
121 int M_CGI_change_dir(char *script
);
122 char *M_CGI_env_add_var(char *name
, const char *value
);
123 char *M_CGI_alias(char *path
, char *query
, char *newstring
);
124 char **M_CGI_env_set_basic(struct request
*s_request
);
126 struct mk_iov
*mk_palm_create_env(struct client_request
*cr
,
128 void mk_palm_iov_add_header(struct mk_iov
*iov
,
129 mk_pointer header
, mk_pointer value
);
130 char *mk_palm_check_request(struct client_request
*cr
, struct request
*sr
);
131 int mk_palm_send_response(struct client_request
*cr
, struct request
*sr
,
133 void mk_palm_set_env();