annotate src/http/modules/perl/ngx_http_perl_module.h @ 7528:0cb693b4cbbb

Perl: disabled unrelated calls from variable handlers. Variable handlers are not expected to send anything to the client, cannot sleep or read body, and are not expected to modify the request. Added appropriate protection to prevent accidental foot shooting.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 12 Jul 2019 15:35:31 +0300
parents 575480d3fd01
children fd9252844ec1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 1897
diff changeset
4 * Copyright (C) Nginx, Inc.
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #ifndef _NGX_HTTP_PERL_MODULE_H_INCLUDED_
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #define _NGX_HTTP_PERL_MODULE_H_INCLUDED_
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_config.h>
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <ngx_core.h>
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #include <ngx_http.h>
775
a452a0e13539 check nginx.pm version
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
15 #include <nginx.h>
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #include <EXTERN.h>
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #include <perl.h>
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 typedef ngx_http_request_t *nginx;
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 typedef struct {
7524
deebe988cbd7 Perl: reworked perl module to pass ctx instead of request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
24 ngx_http_request_t *request;
deebe988cbd7 Perl: reworked perl module to pass ctx instead of request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
25
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 617
diff changeset
26 ngx_str_t filename;
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 ngx_str_t redirect_uri;
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 ngx_str_t redirect_args;
911
73c66ed9a9cd $r->sleep()
Igor Sysoev <igor@sysoev.ru>
parents: 872
diff changeset
29
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
30 SV *next;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
31
7525
575480d3fd01 Perl: propagate errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7524
diff changeset
32 ngx_int_t status;
575480d3fd01 Perl: propagate errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7524
diff changeset
33
575480d3fd01 Perl: propagate errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7524
diff changeset
34 unsigned done:1;
575480d3fd01 Perl: propagate errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7524
diff changeset
35 unsigned error:1;
7528
0cb693b4cbbb Perl: disabled unrelated calls from variable handlers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7525
diff changeset
36 unsigned variable:1;
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
912
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
38 ngx_array_t *variables; /* array of ngx_http_perl_var_t */
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
39
617
51b27717f140 nginx-0.3.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
40 #if (NGX_HTTP_SSI)
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 ngx_http_ssi_ctx_t *ssi;
617
51b27717f140 nginx-0.3.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 599
diff changeset
42 #endif
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 } ngx_http_perl_ctx_t;
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
912
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
46 typedef struct {
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
47 ngx_uint_t hash;
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
48 ngx_str_t name;
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
49 ngx_str_t value;
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
50 } ngx_http_perl_var_t;
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
51
7fa926a7926d $r->variable() supports perl only variables
Igor Sysoev <igor@sysoev.ru>
parents: 911
diff changeset
52
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 extern ngx_module_t ngx_http_perl_module;
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 /*
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 * workaround for "unused variable `Perl___notused'" warning
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 * when building with perl 5.6.1
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 */
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 #ifndef PERL_IMPLICIT_CONTEXT
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 #undef dTHXa
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 #define dTHXa(a)
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 #endif
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65
868
f3fae36f262f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 775
diff changeset
66 extern void boot_DynaLoader(pTHX_ CV* cv);
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
69 void ngx_http_perl_handle_request(ngx_http_request_t *r);
1897
b43f244d0430 optimize $r->sleep
Igor Sysoev <igor@sysoev.ru>
parents: 912
diff changeset
70 void ngx_http_perl_sleep_handler(ngx_http_request_t *r);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
71
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
72
599
869b6444d234 nginx-0.3.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 #endif /* _NGX_HTTP_PERL_MODULE_H_INCLUDED_ */