annotate src/http/modules/ngx_http_userid_filter_module.c @ 7732:59e1c73fe02b

SSL: ssl_reject_handshake directive (ticket #195). In some cases it might be needed to reject SSL handshake based on SNI server name provided, for example, to make sure an invalid certificate is not returned to clients trying to contact a name-based virtual server without SSL configured. Previously, a "ssl_ciphers aNULL;" was used for this. This workaround, however, is not compatible with TLSv1.3, in particular, when using BoringSSL, where it is not possible to configure TLSv1.3 ciphers at all. With this change, the ssl_reject_handshake directive is introduced, which instructs nginx to reject SSL handshakes with an "unrecognized_name" alert in a particular server block. For example, to reject handshake with names other than example.com, one can use the following configuration: server { listen 443 ssl; ssl_reject_handshake on; } server { listen 443 ssl; server_name example.com; ssl_certificate example.com.crt; ssl_certificate_key example.com.key; } The following configuration can be used to reject all SSL handshakes without SNI server name provided: server { listen 443 ssl; ssl_reject_handshake on; } server { listen 443 ssl; server_name ~^; ssl_certificate example.crt; ssl_certificate_key example.key; } Additionally, the ssl_reject_handshake directive makes configuring certificates for the default server block optional. If no certificates are configured in the default server for a given listening socket, certificates must be defined in all non-default server blocks with the listening socket in question.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 22 Oct 2020 18:02:28 +0300
parents c0cacad62cc8
children ef6a3a99a81a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3943
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 417
diff changeset
6
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
13 #define NGX_HTTP_USERID_OFF 0
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
14 #define NGX_HTTP_USERID_LOG 1
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
15 #define NGX_HTTP_USERID_V1 2
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
16 #define NGX_HTTP_USERID_ON 3
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
17
7719
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
18 #define NGX_HTTP_USERID_COOKIE_OFF 0x0002
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
19 #define NGX_HTTP_USERID_COOKIE_SECURE 0x0004
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
20 #define NGX_HTTP_USERID_COOKIE_HTTPONLY 0x0008
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
21 #define NGX_HTTP_USERID_COOKIE_SAMESITE 0x0010
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
22 #define NGX_HTTP_USERID_COOKIE_SAMESITE_STRICT 0x0020
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
23 #define NGX_HTTP_USERID_COOKIE_SAMESITE_LAX 0x0040
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
24 #define NGX_HTTP_USERID_COOKIE_SAMESITE_NONE 0x0080
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
25
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
26 /* 31 Dec 2037 23:55:55 GMT */
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
27 #define NGX_HTTP_USERID_MAX_EXPIRES 2145916555
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 typedef struct {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
31 ngx_uint_t enable;
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
32 ngx_uint_t flags;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 ngx_int_t service;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 ngx_str_t name;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 ngx_str_t domain;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 ngx_str_t path;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
39 ngx_str_t p3p;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
40
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 time_t expires;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
42
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
43 u_char mark;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 } ngx_http_userid_conf_t;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 typedef struct {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
48 uint32_t uid_got[4];
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
49 uint32_t uid_set[4];
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
50 ngx_str_t cookie;
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
51 ngx_uint_t reset;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 } ngx_http_userid_ctx_t;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
55 static ngx_http_userid_ctx_t *ngx_http_userid_get_uid(ngx_http_request_t *r,
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
56 ngx_http_userid_conf_t *conf);
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
57 static ngx_int_t ngx_http_userid_variable(ngx_http_request_t *r,
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
58 ngx_http_variable_value_t *v, ngx_str_t *name, uint32_t *uid);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
59 static ngx_int_t ngx_http_userid_set_uid(ngx_http_request_t *r,
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
60 ngx_http_userid_ctx_t *ctx, ngx_http_userid_conf_t *conf);
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
61 static ngx_int_t ngx_http_userid_create_uid(ngx_http_request_t *r,
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
62 ngx_http_userid_ctx_t *ctx, ngx_http_userid_conf_t *conf);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
64 static ngx_int_t ngx_http_userid_add_variables(ngx_conf_t *cf);
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
65 static ngx_int_t ngx_http_userid_init(ngx_conf_t *cf);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 static void *ngx_http_userid_create_conf(ngx_conf_t *cf);
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 static char *ngx_http_userid_merge_conf(ngx_conf_t *cf, void *parent,
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
68 void *child);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
69 static char *ngx_http_userid_domain(ngx_conf_t *cf, void *post, void *data);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
70 static char *ngx_http_userid_path(ngx_conf_t *cf, void *post, void *data);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
71 static char *ngx_http_userid_expires(ngx_conf_t *cf, ngx_command_t *cmd,
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
72 void *conf);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
73 static char *ngx_http_userid_p3p(ngx_conf_t *cf, void *post, void *data);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
74 static char *ngx_http_userid_mark(ngx_conf_t *cf, ngx_command_t *cmd,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
75 void *conf);
1651
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
76 static ngx_int_t ngx_http_userid_init_worker(ngx_cycle_t *cycle);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
77
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79
1651
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
80 static uint32_t start_value;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
81 static uint32_t sequencer_v1 = 1;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
82 static uint32_t sequencer_v2 = 0x03030302;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
83
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
84
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
85 static u_char expires[] = "; expires=Thu, 31-Dec-37 23:55:55 GMT";
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
86
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
87
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
88 static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
89
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
90
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
91 static ngx_conf_enum_t ngx_http_userid_state[] = {
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 { ngx_string("off"), NGX_HTTP_USERID_OFF },
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
93 { ngx_string("log"), NGX_HTTP_USERID_LOG },
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
94 { ngx_string("v1"), NGX_HTTP_USERID_V1 },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 { ngx_string("on"), NGX_HTTP_USERID_ON },
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 { ngx_null_string, 0 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 };
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
100 static ngx_conf_bitmask_t ngx_http_userid_flags[] = {
7719
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
101 { ngx_string("off"), NGX_HTTP_USERID_COOKIE_OFF },
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
102 { ngx_string("secure"), NGX_HTTP_USERID_COOKIE_SECURE },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
103 { ngx_string("httponly"), NGX_HTTP_USERID_COOKIE_HTTPONLY },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
104 { ngx_string("samesite=strict"),
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
105 NGX_HTTP_USERID_COOKIE_SAMESITE|NGX_HTTP_USERID_COOKIE_SAMESITE_STRICT },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
106 { ngx_string("samesite=lax"),
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
107 NGX_HTTP_USERID_COOKIE_SAMESITE|NGX_HTTP_USERID_COOKIE_SAMESITE_LAX },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
108 { ngx_string("samesite=none"),
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
109 NGX_HTTP_USERID_COOKIE_SAMESITE|NGX_HTTP_USERID_COOKIE_SAMESITE_NONE },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
110 { ngx_null_string, 0 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
111 };
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
112
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
113
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
114 static ngx_conf_post_handler_pt ngx_http_userid_domain_p =
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
115 ngx_http_userid_domain;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
116 static ngx_conf_post_handler_pt ngx_http_userid_path_p = ngx_http_userid_path;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
117 static ngx_conf_post_handler_pt ngx_http_userid_p3p_p = ngx_http_userid_p3p;
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
118
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
119
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 static ngx_command_t ngx_http_userid_commands[] = {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 { ngx_string("userid"),
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
123 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
124 ngx_conf_set_enum_slot,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 NGX_HTTP_LOC_CONF_OFFSET,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 offsetof(ngx_http_userid_conf_t, enable),
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
127 ngx_http_userid_state },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 { ngx_string("userid_service"),
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
130 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 ngx_conf_set_num_slot,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 NGX_HTTP_LOC_CONF_OFFSET,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 offsetof(ngx_http_userid_conf_t, service),
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
134 NULL },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 { ngx_string("userid_name"),
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
137 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 ngx_conf_set_str_slot,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 NGX_HTTP_LOC_CONF_OFFSET,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 offsetof(ngx_http_userid_conf_t, name),
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
141 NULL },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 { ngx_string("userid_domain"),
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
144 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 ngx_conf_set_str_slot,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 NGX_HTTP_LOC_CONF_OFFSET,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 offsetof(ngx_http_userid_conf_t, domain),
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
148 &ngx_http_userid_domain_p },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 { ngx_string("userid_path"),
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
151 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 ngx_conf_set_str_slot,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 NGX_HTTP_LOC_CONF_OFFSET,
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 offsetof(ngx_http_userid_conf_t, path),
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
155 &ngx_http_userid_path_p },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 { ngx_string("userid_expires"),
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
158 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
159 ngx_http_userid_expires,
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160 NGX_HTTP_LOC_CONF_OFFSET,
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
161 0,
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
162 NULL },
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
164 { ngx_string("userid_flags"),
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
165 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE123,
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
166 ngx_conf_set_bitmask_slot,
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
167 NGX_HTTP_LOC_CONF_OFFSET,
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
168 offsetof(ngx_http_userid_conf_t, flags),
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
169 &ngx_http_userid_flags },
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
170
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
171 { ngx_string("userid_p3p"),
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
172 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
173 ngx_conf_set_str_slot,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
174 NGX_HTTP_LOC_CONF_OFFSET,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
175 offsetof(ngx_http_userid_conf_t, p3p),
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
176 &ngx_http_userid_p3p_p },
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
177
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
178 { ngx_string("userid_mark"),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
179 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
180 ngx_http_userid_mark,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
181 NGX_HTTP_LOC_CONF_OFFSET,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
182 0,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
183 NULL },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
184
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
185 ngx_null_command
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 };
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
189 static ngx_http_module_t ngx_http_userid_filter_module_ctx = {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
190 ngx_http_userid_add_variables, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
191 ngx_http_userid_init, /* postconfiguration */
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 NULL, /* create main configuration */
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 NULL, /* init main configuration */
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 NULL, /* create server configuration */
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 NULL, /* merge server configuration */
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
4499
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4474
diff changeset
199 ngx_http_userid_create_conf, /* create location configuration */
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4474
diff changeset
200 ngx_http_userid_merge_conf /* merge location configuration */
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201 };
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
204 ngx_module_t ngx_http_userid_filter_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
205 NGX_MODULE_V1,
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
206 &ngx_http_userid_filter_module_ctx, /* module context */
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 ngx_http_userid_commands, /* module directives */
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
209 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
210 NULL, /* init module */
1651
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
211 ngx_http_userid_init_worker, /* init process */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
212 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
213 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
214 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
215 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
216 NGX_MODULE_V1_PADDING
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 };
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
220 static ngx_str_t ngx_http_userid_got = ngx_string("uid_got");
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
221 static ngx_str_t ngx_http_userid_set = ngx_string("uid_set");
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
222 static ngx_str_t ngx_http_userid_reset = ngx_string("uid_reset");
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
223 static ngx_uint_t ngx_http_userid_reset_index;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
224
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
225
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
226 static ngx_int_t
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
227 ngx_http_userid_filter(ngx_http_request_t *r)
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 ngx_http_userid_ctx_t *ctx;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 ngx_http_userid_conf_t *conf;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
232 if (r != r->main) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
233 return ngx_http_next_header_filter(r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
234 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
235
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
236 conf = ngx_http_get_module_loc_conf(r, ngx_http_userid_filter_module);
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
237
3647
ba0db579aeb6 make logic more clear
Igor Sysoev <igor@sysoev.ru>
parents: 3646
diff changeset
238 if (conf->enable < NGX_HTTP_USERID_V1) {
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
239 return ngx_http_next_header_filter(r);
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
240 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
242 ctx = ngx_http_userid_get_uid(r, conf);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
243
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
244 if (ctx == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
245 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
246 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
247
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
248 if (ngx_http_userid_set_uid(r, ctx, conf) == NGX_OK) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
249 return ngx_http_next_header_filter(r);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
252 return NGX_ERROR;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
253 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
254
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
255
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
256 static ngx_int_t
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
257 ngx_http_userid_got_variable(ngx_http_request_t *r,
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
258 ngx_http_variable_value_t *v, uintptr_t data)
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
259 {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
260 ngx_http_userid_ctx_t *ctx;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
261 ngx_http_userid_conf_t *conf;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
262
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
263 conf = ngx_http_get_module_loc_conf(r->main, ngx_http_userid_filter_module);
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
264
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
265 if (conf->enable == NGX_HTTP_USERID_OFF) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
266 v->not_found = 1;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
267 return NGX_OK;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
268 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
269
3659
7e69af2dd93c set uid values for main request only
Igor Sysoev <igor@sysoev.ru>
parents: 3649
diff changeset
270 ctx = ngx_http_userid_get_uid(r->main, conf);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
271
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
272 if (ctx == NULL) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
273 return NGX_ERROR;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
274 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
275
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
276 if (ctx->uid_got[3] != 0) {
3659
7e69af2dd93c set uid values for main request only
Igor Sysoev <igor@sysoev.ru>
parents: 3649
diff changeset
277 return ngx_http_userid_variable(r->main, v, &conf->name, ctx->uid_got);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
278 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
279
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
280 v->not_found = 1;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
281
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
282 return NGX_OK;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
286 static ngx_int_t
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
287 ngx_http_userid_set_variable(ngx_http_request_t *r,
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
288 ngx_http_variable_value_t *v, uintptr_t data)
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 {
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
290 ngx_http_userid_ctx_t *ctx;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
291 ngx_http_userid_conf_t *conf;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
292
3659
7e69af2dd93c set uid values for main request only
Igor Sysoev <igor@sysoev.ru>
parents: 3649
diff changeset
293 conf = ngx_http_get_module_loc_conf(r->main, ngx_http_userid_filter_module);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
294
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
295 if (conf->enable < NGX_HTTP_USERID_V1) {
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
296 v->not_found = 1;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
297 return NGX_OK;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
298 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
299
3659
7e69af2dd93c set uid values for main request only
Igor Sysoev <igor@sysoev.ru>
parents: 3649
diff changeset
300 ctx = ngx_http_userid_get_uid(r->main, conf);
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
301
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
302 if (ctx == NULL) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
303 return NGX_ERROR;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
304 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
305
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
306 if (ngx_http_userid_create_uid(r->main, ctx, conf) != NGX_OK) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
307 return NGX_ERROR;
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
308 }
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
309
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
310 if (ctx->uid_set[3] == 0) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
311 v->not_found = 1;
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
312 return NGX_OK;
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
313 }
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
314
3659
7e69af2dd93c set uid values for main request only
Igor Sysoev <igor@sysoev.ru>
parents: 3649
diff changeset
315 return ngx_http_userid_variable(r->main, v, &conf->name, ctx->uid_set);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
316 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
317
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
318
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
319 static ngx_http_userid_ctx_t *
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
320 ngx_http_userid_get_uid(ngx_http_request_t *r, ngx_http_userid_conf_t *conf)
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
321 {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
322 ngx_int_t n;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
323 ngx_str_t src, dst;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
324 ngx_table_elt_t **cookies;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
325 ngx_http_userid_ctx_t *ctx;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
326
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
327 ctx = ngx_http_get_module_ctx(r, ngx_http_userid_filter_module);
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
328
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
329 if (ctx) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
330 return ctx;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
331 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
332
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
333 if (ctx == NULL) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
334 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_userid_ctx_t));
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
335 if (ctx == NULL) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
336 return NULL;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
337 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
338
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
339 ngx_http_set_ctx(r, ctx, ngx_http_userid_filter_module);
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
340 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
342 n = ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &conf->name,
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
343 &ctx->cookie);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
344 if (n == NGX_DECLINED) {
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
345 return ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
346 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
347
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
348 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
349 "uid cookie: \"%V\"", &ctx->cookie);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
350
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
351 if (ctx->cookie.len < 22) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
352 cookies = r->headers_in.cookies.elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
353 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
354 "client sent too short userid cookie \"%V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
355 &cookies[n]->value);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
356 return ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
357 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
359 src = ctx->cookie;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
360
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
361 /*
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
362 * we have to limit the encoded string to 22 characters because
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
363 * 1) cookie may be marked by "userid_mark",
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
364 * 2) and there are already the millions cookies with a garbage
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
365 * instead of the correct base64 trail "=="
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
366 */
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
368 src.len = 22;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
370 dst.data = (u_char *) ctx->uid_got;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
372 if (ngx_decode_base64(&dst, &src) == NGX_ERROR) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
373 cookies = r->headers_in.cookies.elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
374 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
375 "client sent invalid userid cookie \"%V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
376 &cookies[n]->value);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
377 return ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
378 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
380 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
381 "uid: %08XD%08XD%08XD%08XD",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
382 ctx->uid_got[0], ctx->uid_got[1],
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
383 ctx->uid_got[2], ctx->uid_got[3]);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
384
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
385 return ctx;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
389 static ngx_int_t
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
390 ngx_http_userid_set_uid(ngx_http_request_t *r, ngx_http_userid_ctx_t *ctx,
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
391 ngx_http_userid_conf_t *conf)
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
392 {
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
393 u_char *cookie, *p;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
394 size_t len;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
395 ngx_str_t src, dst;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
396 ngx_table_elt_t *set_cookie, *p3p;
2528
c1975ccd0215 axe r->in_addr
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
397
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
398 if (ngx_http_userid_create_uid(r, ctx, conf) != NGX_OK) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
399 return NGX_ERROR;
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
400 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
401
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
402 if (ctx->uid_set[3] == 0) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
403 return NGX_OK;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
404 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
405
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
406 len = conf->name.len + 1 + ngx_base64_encoded_length(16) + conf->path.len;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
407
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
408 if (conf->expires) {
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
409 len += sizeof(expires) - 1 + 2;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
410 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
411
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
412 if (conf->domain.len) {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
413 len += conf->domain.len;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
414 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
415
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
416 if (conf->flags & NGX_HTTP_USERID_COOKIE_SECURE) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
417 len += sizeof("; secure") - 1;
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
418 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
419
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
420 if (conf->flags & NGX_HTTP_USERID_COOKIE_HTTPONLY) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
421 len += sizeof("; httponly") - 1;
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
422 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
423
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
424 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_STRICT) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
425 len += sizeof("; samesite=strict") - 1;
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
426 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
427
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
428 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_LAX) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
429 len += sizeof("; samesite=lax") - 1;
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
430 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
431
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
432 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_NONE) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
433 len += sizeof("; samesite=none") - 1;
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
434 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
435
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2012
diff changeset
436 cookie = ngx_pnalloc(r->pool, len);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
437 if (cookie == NULL) {
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
438 return NGX_ERROR;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
439 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
440
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
441 p = ngx_copy(cookie, conf->name.data, conf->name.len);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
442 *p++ = '=';
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
443
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
444 if (ctx->uid_got[3] == 0 || ctx->reset) {
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
445 src.len = 16;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
446 src.data = (u_char *) ctx->uid_set;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
447 dst.data = p;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
448
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
449 ngx_encode_base64(&dst, &src);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
450
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
451 p += dst.len;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
452
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
453 if (conf->mark) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
454 *(p - 2) = conf->mark;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
455 }
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
456
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
457 } else {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
458 p = ngx_cpymem(p, ctx->cookie.data, 22);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
459 *p++ = conf->mark;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
460 *p++ = '=';
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
461 }
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
462
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
463 if (conf->expires == NGX_HTTP_USERID_MAX_EXPIRES) {
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
464 p = ngx_cpymem(p, expires, sizeof(expires) - 1);
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
465
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
466 } else if (conf->expires) {
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
467 p = ngx_cpymem(p, expires, sizeof("; expires=") - 1);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
468 p = ngx_http_cookie_time(p, ngx_time() + conf->expires);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
469 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
470
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
471 p = ngx_copy(p, conf->domain.data, conf->domain.len);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
472
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
473 p = ngx_copy(p, conf->path.data, conf->path.len);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
474
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
475 if (conf->flags & NGX_HTTP_USERID_COOKIE_SECURE) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
476 p = ngx_cpymem(p, "; secure", sizeof("; secure") - 1);
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
477 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
478
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
479 if (conf->flags & NGX_HTTP_USERID_COOKIE_HTTPONLY) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
480 p = ngx_cpymem(p, "; httponly", sizeof("; httponly") - 1);
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
481 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
482
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
483 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_STRICT) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
484 p = ngx_cpymem(p, "; samesite=strict", sizeof("; samesite=strict") - 1);
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
485 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
486
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
487 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_LAX) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
488 p = ngx_cpymem(p, "; samesite=lax", sizeof("; samesite=lax") - 1);
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
489 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
490
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
491 if (conf->flags & NGX_HTTP_USERID_COOKIE_SAMESITE_NONE) {
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
492 p = ngx_cpymem(p, "; samesite=none", sizeof("; samesite=none") - 1);
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
493 }
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
494
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
495 set_cookie = ngx_list_push(&r->headers_out.headers);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
496 if (set_cookie == NULL) {
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
497 return NGX_ERROR;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
498 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
499
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
500 set_cookie->hash = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
501 ngx_str_set(&set_cookie->key, "Set-Cookie");
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
502 set_cookie->value.len = p - cookie;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
503 set_cookie->value.data = cookie;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
504
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
505 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
506 "uid cookie: \"%V\"", &set_cookie->value);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
507
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
508 if (conf->p3p.len == 0) {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
509 return NGX_OK;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
510 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
511
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
512 p3p = ngx_list_push(&r->headers_out.headers);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
513 if (p3p == NULL) {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
514 return NGX_ERROR;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
515 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
516
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
517 p3p->hash = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
518 ngx_str_set(&p3p->key, "P3P");
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
519 p3p->value = conf->p3p;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
520
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
521 return NGX_OK;
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
522 }
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
523
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
524
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
525 static ngx_int_t
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
526 ngx_http_userid_create_uid(ngx_http_request_t *r, ngx_http_userid_ctx_t *ctx,
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
527 ngx_http_userid_conf_t *conf)
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
528 {
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
529 ngx_connection_t *c;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
530 struct sockaddr_in *sin;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
531 ngx_http_variable_value_t *vv;
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
532 #if (NGX_HAVE_INET6)
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
533 u_char *p;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
534 struct sockaddr_in6 *sin6;
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
535 #endif
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
536
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
537 if (ctx->uid_set[3] != 0) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
538 return NGX_OK;
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
539 }
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
540
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
541 if (ctx->uid_got[3] != 0) {
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
542
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
543 vv = ngx_http_get_indexed_variable(r, ngx_http_userid_reset_index);
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
544
7028
e6f399a176e7 Userid: ngx_http_get_indexed_variable() error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6626
diff changeset
545 if (vv == NULL || vv->not_found) {
e6f399a176e7 Userid: ngx_http_get_indexed_variable() error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6626
diff changeset
546 return NGX_ERROR;
e6f399a176e7 Userid: ngx_http_get_indexed_variable() error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6626
diff changeset
547 }
e6f399a176e7 Userid: ngx_http_get_indexed_variable() error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6626
diff changeset
548
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
549 if (vv->len == 0 || (vv->len == 1 && vv->data[0] == '0')) {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
550
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
551 if (conf->mark == '\0'
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
552 || (ctx->cookie.len > 23
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
553 && ctx->cookie.data[22] == conf->mark
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
554 && ctx->cookie.data[23] == '='))
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
555 {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
556 return NGX_OK;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
557 }
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
558
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
559 ctx->uid_set[0] = ctx->uid_got[0];
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
560 ctx->uid_set[1] = ctx->uid_got[1];
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
561 ctx->uid_set[2] = ctx->uid_got[2];
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
562 ctx->uid_set[3] = ctx->uid_got[3];
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
563
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
564 return NGX_OK;
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
565
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
566 } else {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
567 ctx->reset = 1;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
568
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
569 if (vv->len == 3 && ngx_strncmp(vv->data, "log", 3) == 0) {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
570 ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
571 "userid cookie \"%V=%08XD%08XD%08XD%08XD\" was reset",
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
572 &conf->name, ctx->uid_got[0], ctx->uid_got[1],
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
573 ctx->uid_got[2], ctx->uid_got[3]);
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
574 }
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
575 }
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
576 }
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
577
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
578 /*
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
579 * TODO: in the threaded mode the sequencers should be in TLS and their
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
580 * ranges should be divided between threads
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
581 */
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
582
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
583 if (conf->enable == NGX_HTTP_USERID_V1) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
584 if (conf->service == NGX_CONF_UNSET) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
585 ctx->uid_set[0] = 0;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
586 } else {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
587 ctx->uid_set[0] = conf->service;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
588 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
589 ctx->uid_set[1] = (uint32_t) ngx_time();
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
590 ctx->uid_set[2] = start_value;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
591 ctx->uid_set[3] = sequencer_v1;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
592 sequencer_v1 += 0x100;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
593
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
594 } else {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
595 if (conf->service == NGX_CONF_UNSET) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
596
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
597 c = r->connection;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
598
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
599 if (ngx_connection_local_sockaddr(c, NULL, 0) != NGX_OK) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
600 return NGX_ERROR;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
601 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
602
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
603 switch (c->local_sockaddr->sa_family) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
604
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
605 #if (NGX_HAVE_INET6)
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
606 case AF_INET6:
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
607 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
608
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
609 p = (u_char *) &ctx->uid_set[0];
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
610
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
611 *p++ = sin6->sin6_addr.s6_addr[12];
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
612 *p++ = sin6->sin6_addr.s6_addr[13];
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
613 *p++ = sin6->sin6_addr.s6_addr[14];
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
614 *p = sin6->sin6_addr.s6_addr[15];
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
615
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
616 break;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
617 #endif
7432
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
618
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
619 #if (NGX_HAVE_UNIX_DOMAIN)
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
620 case AF_UNIX:
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
621 ctx->uid_set[0] = 0;
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
622 break;
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
623 #endif
ecc97cb0eda4 Userid: using stub for AF_UNIX addresses.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7028
diff changeset
624
3648
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
625 default: /* AF_INET */
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
626 sin = (struct sockaddr_in *) c->local_sockaddr;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
627 ctx->uid_set[0] = sin->sin_addr.s_addr;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
628 break;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
629 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
630
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
631 } else {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
632 ctx->uid_set[0] = htonl(conf->service);
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
633 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
634
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
635 ctx->uid_set[1] = htonl((uint32_t) ngx_time());
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
636 ctx->uid_set[2] = htonl(start_value);
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
637 ctx->uid_set[3] = htonl(sequencer_v2);
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
638 sequencer_v2 += 0x100;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
639 if (sequencer_v2 < 0x03030302) {
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
640 sequencer_v2 = 0x03030302;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
641 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
642 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
643
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
644 return NGX_OK;
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
645 }
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
646
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
647
67dc5dbbcca3 Now $uid_set may be used at any time, r2013 states the same is wrong.
Igor Sysoev <igor@sysoev.ru>
parents: 3647
diff changeset
648 static ngx_int_t
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
649 ngx_http_userid_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
650 ngx_str_t *name, uint32_t *uid)
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
651 {
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
652 v->len = name->len + sizeof("=00001111222233334444555566667777") - 1;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2012
diff changeset
653 v->data = ngx_pnalloc(r->pool, v->len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
654 if (v->data == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
655 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
656 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
657
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
658 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 880
diff changeset
659 v->no_cacheable = 0;
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
660 v->not_found = 0;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
661
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
662 ngx_sprintf(v->data, "%V=%08XD%08XD%08XD%08XD",
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
663 name, uid[0], uid[1], uid[2], uid[3]);
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
664
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
665 return NGX_OK;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
666 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
667
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
668
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
669 static ngx_int_t
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
670 ngx_http_userid_reset_variable(ngx_http_request_t *r,
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
671 ngx_http_variable_value_t *v, uintptr_t data)
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
672 {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
673 *v = ngx_http_variable_null_value;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
674
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
675 return NGX_OK;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
676 }
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
677
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
678
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
679 static ngx_int_t
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
680 ngx_http_userid_add_variables(ngx_conf_t *cf)
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
681 {
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
682 ngx_int_t n;
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
683 ngx_http_variable_t *var;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
684
3522
d24f030507cd allow to use $uid_got in SSI and perl module
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
685 var = ngx_http_add_variable(cf, &ngx_http_userid_got, 0);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
686 if (var == NULL) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
687 return NGX_ERROR;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
688 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
689
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
690 var->get_handler = ngx_http_userid_got_variable;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
691
3661
8649a0c0f09d change logic introduced in r3649:
Igor Sysoev <igor@sysoev.ru>
parents: 3659
diff changeset
692 var = ngx_http_add_variable(cf, &ngx_http_userid_set, 0);
2012
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
693 if (var == NULL) {
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
694 return NGX_ERROR;
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
695 }
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
696
220f5e8603d0 $uid_got and $uid_set may used at any time
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
697 var->get_handler = ngx_http_userid_set_variable;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
698
3943
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
699 var = ngx_http_add_variable(cf, &ngx_http_userid_reset,
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
700 NGX_HTTP_VAR_CHANGEABLE);
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
701 if (var == NULL) {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
702 return NGX_ERROR;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
703 }
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
704
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
705 var->get_handler = ngx_http_userid_reset_variable;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
706
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
707 n = ngx_http_get_variable_index(cf, &ngx_http_userid_reset);
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
708 if (n == NGX_ERROR) {
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
709 return NGX_ERROR;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
710 }
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
711
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
712 ngx_http_userid_reset_index = n;
bfab2536197b $uid_reset
Igor Sysoev <igor@sysoev.ru>
parents: 3661
diff changeset
713
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
714 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
715 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
716
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
717
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
718 static void *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
719 ngx_http_userid_create_conf(ngx_conf_t *cf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
720 {
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
721 ngx_http_userid_conf_t *conf;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
723 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_userid_conf_t));
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
724 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
725 return NULL;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
726 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
727
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
728 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
729 * set by ngx_pcalloc():
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
730 *
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
731 * conf->flags = 0;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
732 * conf->name = { 0, NULL };
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
733 * conf->domain = { 0, NULL };
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
734 * conf->path = { 0, NULL };
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
735 * conf->p3p = { 0, NULL };
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
736 */
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
737
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
738 conf->enable = NGX_CONF_UNSET_UINT;
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
739 conf->service = NGX_CONF_UNSET;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
740 conf->expires = NGX_CONF_UNSET;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
741 conf->mark = (u_char) '\xFF';
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
742
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
743 return conf;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
744 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
745
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
746
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
747 static char *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
748 ngx_http_userid_merge_conf(ngx_conf_t *cf, void *parent, void *child)
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
749 {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
750 ngx_http_userid_conf_t *prev = parent;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
751 ngx_http_userid_conf_t *conf = child;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
752
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
753 ngx_conf_merge_uint_value(conf->enable, prev->enable,
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
754 NGX_HTTP_USERID_OFF);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
755
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
756 ngx_conf_merge_bitmask_value(conf->flags, prev->flags,
7719
c0cacad62cc8 Userid: userid_flags fixup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7717
diff changeset
757 (NGX_CONF_BITMASK_SET|NGX_HTTP_USERID_COOKIE_OFF));
7717
e3e8b8234f05 Userid: userid_flags directive to set cookie flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7432
diff changeset
758
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
759 ngx_conf_merge_str_value(conf->name, prev->name, "uid");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
760 ngx_conf_merge_str_value(conf->domain, prev->domain, "");
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
761 ngx_conf_merge_str_value(conf->path, prev->path, "; path=/");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
762 ngx_conf_merge_str_value(conf->p3p, prev->p3p, "");
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
763
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
764 ngx_conf_merge_value(conf->service, prev->service, NGX_CONF_UNSET);
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
765 ngx_conf_merge_sec_value(conf->expires, prev->expires, 0);
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
766
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
767 if (conf->mark == (u_char) '\xFF') {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
768 if (prev->mark == (u_char) '\xFF') {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
769 conf->mark = '\0';
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
770 } else {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
771 conf->mark = prev->mark;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
772 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
773 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
774
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
775 return NGX_CONF_OK;
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
776 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
777
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
778
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
779 static ngx_int_t
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
780 ngx_http_userid_init(ngx_conf_t *cf)
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
781 {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
782 ngx_http_next_header_filter = ngx_http_top_header_filter;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
783 ngx_http_top_header_filter = ngx_http_userid_filter;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
784
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
785 return NGX_OK;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
786 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
787
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
788
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
789 static char *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
790 ngx_http_userid_domain(ngx_conf_t *cf, void *post, void *data)
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
791 {
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
792 ngx_str_t *domain = data;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
793
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
794 u_char *p, *new;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
795
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
796 if (ngx_strcmp(domain->data, "none") == 0) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
797 ngx_str_set(domain, "");
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
798 return NGX_CONF_OK;
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
799 }
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
800
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2012
diff changeset
801 new = ngx_pnalloc(cf->pool, sizeof("; domain=") - 1 + domain->len);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
802 if (new == NULL) {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
803 return NGX_CONF_ERROR;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
804 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
805
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
806 p = ngx_cpymem(new, "; domain=", sizeof("; domain=") - 1);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
807 ngx_memcpy(p, domain->data, domain->len);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
808
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
809 domain->len += sizeof("; domain=") - 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
810 domain->data = new;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
811
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
812 return NGX_CONF_OK;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
813 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
814
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
815
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
816 static char *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
817 ngx_http_userid_path(ngx_conf_t *cf, void *post, void *data)
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
818 {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
819 ngx_str_t *path = data;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
820
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
821 u_char *p, *new;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
822
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2012
diff changeset
823 new = ngx_pnalloc(cf->pool, sizeof("; path=") - 1 + path->len);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
824 if (new == NULL) {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
825 return NGX_CONF_ERROR;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
826 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
827
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
828 p = ngx_cpymem(new, "; path=", sizeof("; path=") - 1);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
829 ngx_memcpy(p, path->data, path->len);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
830
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
831 path->len += sizeof("; path=") - 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
832 path->data = new;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
833
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
834 return NGX_CONF_OK;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
835 }
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
836
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 411
diff changeset
837
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
838 static char *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
839 ngx_http_userid_expires(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
840 {
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
841 ngx_http_userid_conf_t *ucf = conf;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
842
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
843 ngx_str_t *value;
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
844
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
845 if (ucf->expires != NGX_CONF_UNSET) {
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
846 return "is duplicate";
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
847 }
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
848
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
849 value = cf->args->elts;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
850
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
851 if (ngx_strcmp(value[1].data, "max") == 0) {
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
852 ucf->expires = NGX_HTTP_USERID_MAX_EXPIRES;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
853 return NGX_CONF_OK;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
854 }
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
855
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
856 if (ngx_strcmp(value[1].data, "off") == 0) {
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
857 ucf->expires = 0;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
858 return NGX_CONF_OK;
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
859 }
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
860
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
861 ucf->expires = ngx_parse_time(&value[1], 1);
4474
41f640a693de Time parsing cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
862 if (ucf->expires == (time_t) NGX_ERROR) {
410
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
863 return "invalid value";
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
864 }
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
865
48b9ad5ca1fc nginx-0.0.10-2004-08-30-19:42:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 409
diff changeset
866 return NGX_CONF_OK;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
867 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
868
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
869
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
870 static char *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
871 ngx_http_userid_p3p(ngx_conf_t *cf, void *post, void *data)
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
872 {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
873 ngx_str_t *p3p = data;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
874
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
875 if (ngx_strcmp(p3p->data, "none") == 0) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3509
diff changeset
876 ngx_str_set(p3p, "");
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
877 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
878
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
879 return NGX_CONF_OK;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
880 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
881
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
882
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
883 static char *
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
884 ngx_http_userid_mark(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
885 {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
886 ngx_http_userid_conf_t *ucf = conf;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
887
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
888 ngx_str_t *value;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
889
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
890 if (ucf->mark != (u_char) '\xFF') {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
891 return "is duplicate";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
892 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
893
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
894 value = cf->args->elts;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
895
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
896 if (ngx_strcmp(value[1].data, "off") == 0) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
897 ucf->mark = '\0';
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
898 return NGX_CONF_OK;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
899 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
900
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
901 if (value[1].len != 1
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
902 || !((value[1].data[0] >= '0' && value[1].data[0] <= '9')
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
903 || (value[1].data[0] >= 'A' && value[1].data[0] <= 'Z')
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
904 || (value[1].data[0] >= 'a' && value[1].data[0] <= 'z')
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
905 || value[1].data[0] == '='))
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
906 {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
907 return "value must be \"off\" or a single letter, digit or \"=\"";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
908 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
909
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
910 ucf->mark = value[1].data[0];
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
911
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
912 return NGX_CONF_OK;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
913 }
1651
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
914
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
915
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
916 static ngx_int_t
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
917 ngx_http_userid_init_worker(ngx_cycle_t *cycle)
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
918 {
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
919 struct timeval tp;
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
920
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
921 ngx_gettimeofday(&tp);
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
922
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
923 /* use the most significant usec part that fits to 16 bits */
6626
b3682580c1bd Avoid left-shifting integers into the sign bit, which is undefined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 4499
diff changeset
924 start_value = (((uint32_t) tp.tv_usec / 20) << 16) | ngx_pid;
1651
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
925
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
926 return NGX_OK;
555ee689cecc use usec and pid as start value
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
927 }