annotate src/os/unix/ngx_user.c @ 7230:098bbd076a2d

Upstream: trailers support, u->conf->pass_trailers flag. Basic trailer headers support allows one to access response trailers via the $upstream_trailer_* variables. Additionally, the u->conf->pass_trailers flag was introduced. When the flag is set, trailer headers from the upstream response are passed to the client. Like normal headers, trailer headers will be hidden if present in u->conf->hide_headers_hash.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 17 Mar 2018 23:04:21 +0300
parents 4a670c18e5e6
children eca3e054e978
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3922
diff changeset
4 * Copyright (C) Nginx, Inc.
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #if (NGX_CRYPT)
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
14 #if (NGX_HAVE_GNU_CRYPT_R)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 ngx_int_t
3922
9c057d5e1c27 "$apr1", "{PLAIN}", and "{SSHA}" password methods in auth basic module
Igor Sysoev <igor@sysoev.ru>
parents: 3796
diff changeset
17 ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 char *value;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 size_t len;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 struct crypt_data cd;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
23 cd.initialized = 0;
5955
fd6fd02f6a4d Fixed building with musl libc (ticket #685).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4982
diff changeset
24 #ifdef __GLIBC__
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
25 /* work around the glibc bug */
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
26 cd.current_salt[0] = ~salt[0];
5955
fd6fd02f6a4d Fixed building with musl libc (ticket #685).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4982
diff changeset
27 #endif
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
28
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 value = crypt_r((char *) key, (char *) salt, &cd);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
31 if (value) {
3796
7dec2852e8fd allocate last zero byte in ngx_crypt()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
32 len = ngx_strlen(value) + 1;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
34 *encrypted = ngx_pnalloc(pool, len);
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
35 if (*encrypted == NULL) {
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
36 return NGX_ERROR;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 }
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
38
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
39 ngx_memcpy(*encrypted, value, len);
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
40 return NGX_OK;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
43 ngx_log_error(NGX_LOG_CRIT, pool->log, ngx_errno, "crypt_r() failed");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
44
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 return NGX_ERROR;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 #else
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 ngx_int_t
3922
9c057d5e1c27 "$apr1", "{PLAIN}", and "{SSHA}" password methods in auth basic module
Igor Sysoev <igor@sysoev.ru>
parents: 3796
diff changeset
51 ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 {
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 char *value;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
55 ngx_err_t err;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 value = crypt((char *) key, (char *) salt);
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 if (value) {
3796
7dec2852e8fd allocate last zero byte in ngx_crypt()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
60 len = ngx_strlen(value) + 1;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
62 *encrypted = ngx_pnalloc(pool, len);
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
63 if (*encrypted == NULL) {
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
64 return NGX_ERROR;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
66
4982
6ccd3a50b40f Core: crypt_r() error handling fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
67 ngx_memcpy(*encrypted, value, len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
68 return NGX_OK;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
71 err = ngx_errno;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
72
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
73 ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
74
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
75 return NGX_ERROR;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 #endif
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 #endif /* NGX_CRYPT */