annotate src/os/unix/ngx_time.c @ 9274:46ecad404a29 default tip

Mail: reset imap tag to empty after authentication attempt. We need to reset the imap tag to empty after an authentication attempt completes, otherwise if the next line parsed is incomplete with no tag (e.g. empty line) then we use the "tag" from the previous buffer which is now definitely wrong and has been partially overwritten with the most recently read data (e.g. CRLF). An example before this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: S: obar BAD invalid command Then with this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: * BAD invalid command
author Rob Mueller <robm@fastmailteam.com>
date Wed, 15 May 2024 10:06:00 +0300
parents d620f497c50f
children
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: 370
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: 370
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: 2220
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: 370
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: 370
diff changeset
6
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
9 #include <ngx_core.h>
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
10
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
2220
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
12 /*
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
13 * FreeBSD does not test /etc/localtime change, however, we can workaround it
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
14 * by calling tzset() with TZ and then without TZ to update timezone.
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
15 * The trick should work since FreeBSD 2.1.0.
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
16 *
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
17 * Linux does not test /etc/localtime change in localtime(),
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
18 * but may stat("/etc/localtime") several times in every strftime(),
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
19 * therefore we use it to update timezone.
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
20 *
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
21 * Solaris does not test /etc/TIMEZONE change too and no workaround available.
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
22 */
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
23
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
24 void
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
25 ngx_timezone_update(void)
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
26 {
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
27 #if (NGX_FREEBSD)
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
28
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
29 if (getenv("TZ")) {
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
30 return;
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
31 }
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
32
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
33 putenv("TZ=UTC");
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
34
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
35 tzset();
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
36
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
37 unsetenv("TZ");
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
38
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
39 tzset();
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
40
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
41 #elif (NGX_LINUX)
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
42 time_t s;
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
43 struct tm *t;
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
44 char buf[4];
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
45
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
46 s = time(0);
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
47
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
48 t = localtime(&s);
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
49
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
50 strftime(buf, 4, "%H", t);
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
51
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
52 #endif
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
53 }
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
54
bf38420c9e25 ngx_timezone_update()
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
55
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
56 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
57 ngx_localtime(time_t s, ngx_tm_t *tm)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 {
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
59 #if (NGX_HAVE_LOCALTIME_R)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
60 (void) localtime_r(&s, tm);
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
61
179
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
62 #else
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
63 ngx_tm_t *t;
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
64
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
65 t = localtime(&s);
179
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
66 *tm = *t;
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
67
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
68 #endif
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
69
28
a117a7fdf042 nginx-0.0.1-2002-12-16-00:08:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
70 tm->ngx_tm_mon++;
a117a7fdf042 nginx-0.0.1-2002-12-16-00:08:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
71 tm->ngx_tm_year += 1900;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
73
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
74
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
75 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
76 ngx_libc_localtime(time_t s, struct tm *tm)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
77 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
78 #if (NGX_HAVE_LOCALTIME_R)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
79 (void) localtime_r(&s, tm);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
80
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
81 #else
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
82 struct tm *t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
83
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
84 t = localtime(&s);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
85 *tm = *t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
86
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
87 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
88 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
89
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
90
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
91 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
92 ngx_libc_gmtime(time_t s, struct tm *tm)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
93 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
94 #if (NGX_HAVE_LOCALTIME_R)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
95 (void) gmtime_r(&s, tm);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
96
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
97 #else
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
98 struct tm *t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
99
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
100 t = gmtime(&s);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
101 *tm = *t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
102
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
103 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
104 }