diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/nginx.c | 59 | ||||
| -rw-r--r-- | src/core/ngx_string.c | 33 | ||||
| -rw-r--r-- | src/core/ngx_string.h | 8 | ||||
| -rw-r--r-- | src/core/ngx_times.c | 53 | ||||
| -rw-r--r-- | src/core/ngx_times.h | 1 |
5 files changed, 62 insertions, 92 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c index 17071c1c5..6d6103c0e 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -140,65 +140,6 @@ int main(int argc, char *const *argv) return 1; } -{ - ngx_str_t d, s; - - s.data = "12"; - s.len = sizeof("12") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - - s.data = "123"; - s.len = sizeof("123") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - - s.data = "1234"; - s.len = sizeof("1234") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - - s.data = "12345"; - s.len = sizeof("12345") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - - s.data = "123456"; - s.len = sizeof("123456") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - - s.data = "12345678901234567890"; - s.len = sizeof("12345678901234567890") - 1; - - if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) { - ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed"); - } else { - ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data); - } - -} - if (ngx_add_inherited_sockets(&init_cycle) == NGX_ERROR) { return 1; } diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index 7231651c0..4cdb267dd 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -123,20 +123,16 @@ void ngx_md5_text(u_char *text, u_char *md5) } -ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) +void ngx_encode_base64(ngx_str_t *src, ngx_str_t *dst) { u_char *d, *s; size_t len; static u_char basis64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - if (!(d = ngx_palloc(pool, ((src->len + 2) / 3) * 4 + 1))) { - return NGX_ERROR; - } - - dst->data = d; - s = src->data; len = src->len; + s = src->data; + d = dst->data; while (len > 2) { *d++ = basis64[(s[0] >> 2) & 0x3f]; @@ -164,13 +160,10 @@ ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) } dst->len = d - dst->data; - *d++ = '\0'; - - return NGX_OK; } -ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) +ngx_int_t ngx_decode_base64(ngx_str_t *src, ngx_str_t *dst) { size_t len; u_char *d, *s; @@ -207,33 +200,27 @@ ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) return NGX_ERROR; } - if (!(d = ngx_palloc(pool, ((len + 3) / 4) * 3 + 1))) { - return NGX_ABORT; - } - - dst->data = d; - s = src->data; + d = dst->data; while (len > 3) { - *d++ = basis64[s[0]] << 2 | basis64[s[1]] >> 4; - *d++ = basis64[s[1]] << 4 | basis64[s[2]] >> 2; - *d++ = basis64[s[2]] << 6 | basis64[s[3]]; + *d++ = (u_char) (basis64[s[0]] << 2 | basis64[s[1]] >> 4); + *d++ = (u_char) (basis64[s[1]] << 4 | basis64[s[2]] >> 2); + *d++ = (u_char) (basis64[s[2]] << 6 | basis64[s[3]]); s += 4; len -= 4; } if (len > 1) { - *d++ = basis64[s[0]] << 2 | basis64[s[1]] >> 4; + *d++ = (u_char) (basis64[s[0]] << 2 | basis64[s[1]] >> 4); } if (len > 2) { - *d++ = basis64[s[1]] << 4 | basis64[s[2]] >> 2; + *d++ = (u_char) (basis64[s[1]] << 4 | basis64[s[2]] >> 2); } dst->len = d - dst->data; - *d++ = '\0'; return NGX_OK; } diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h index 8a0212685..6b22a67ba 100644 --- a/src/core/ngx_string.h +++ b/src/core/ngx_string.h @@ -71,8 +71,12 @@ ngx_int_t ngx_hextoi(u_char *line, size_t n); void ngx_md5_text(u_char *text, u_char *md5); -ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst); -ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst); + +#define ngx_base64_encoded_length(len) (((len + 2) / 3) * 4) +#define ngx_base64_decoded_length(len) (((len + 3) / 4) * 3) + +void ngx_encode_base64(ngx_str_t *src, ngx_str_t *dst); +ngx_int_t ngx_decode_base64(ngx_str_t *src, ngx_str_t *dst); #define ngx_qsort qsort diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c index df73a1dde..2c9985f20 100644 --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c @@ -214,14 +214,51 @@ size_t ngx_http_time(u_char *buf, time_t t) ngx_gmtime(t, &tm); return ngx_snprintf((char *) buf, sizeof("Mon, 28 Sep 1970 06:00:00 GMT"), - "%s, %02d %s %4d %02d:%02d:%02d GMT", - week[tm.ngx_tm_wday], - tm.ngx_tm_mday, - months[tm.ngx_tm_mon - 1], - tm.ngx_tm_year, - tm.ngx_tm_hour, - tm.ngx_tm_min, - tm.ngx_tm_sec); + "%s, %02d %s %4d %02d:%02d:%02d GMT", + week[tm.ngx_tm_wday], + tm.ngx_tm_mday, + months[tm.ngx_tm_mon - 1], + tm.ngx_tm_year, + tm.ngx_tm_hour, + tm.ngx_tm_min, + tm.ngx_tm_sec); +} + + +size_t ngx_http_cookie_time(u_char *buf, time_t t) +{ + ngx_tm_t tm; + + ngx_gmtime(t, &tm); + + /* + * Netscape 3.x does not understand 4-digit years at all and + * 2-digit years more than "37" + */ + + if (tm.ngx_tm_year > 2037) { + return ngx_snprintf((char *) buf, + sizeof("Mon, 28-Sep-1970 06:00:00 GMT"), + "%s, %02d-%s-%d %02d:%02d:%02d GMT", + week[tm.ngx_tm_wday], + tm.ngx_tm_mday, + months[tm.ngx_tm_mon - 1], + tm.ngx_tm_year, + tm.ngx_tm_hour, + tm.ngx_tm_min, + tm.ngx_tm_sec); + } else { + return ngx_snprintf((char *) buf, + sizeof("Mon, 28-Sep-70 06:00:00 GMT"), + "%s, %02d-%s-%02d %02d:%02d:%02d GMT", + week[tm.ngx_tm_wday], + tm.ngx_tm_mday, + months[tm.ngx_tm_mon - 1], + tm.ngx_tm_year % 100, + tm.ngx_tm_hour, + tm.ngx_tm_min, + tm.ngx_tm_sec); + } } diff --git a/src/core/ngx_times.h b/src/core/ngx_times.h index b5b6eb60a..426040577 100644 --- a/src/core/ngx_times.h +++ b/src/core/ngx_times.h @@ -9,6 +9,7 @@ void ngx_time_init(); void ngx_time_update(time_t s); size_t ngx_http_time(u_char *buf, time_t t); +size_t ngx_http_cookie_time(u_char *buf, time_t t); void ngx_gmtime(time_t t, ngx_tm_t *tp); #if (NGX_THREADS) |
