hi,春哥:
drizzle-nginx-module-0.1.8貌似存在一个DB密码过长导致的BUG,验证方法很简单,使用最新的openresty1.7.10,将密码设置成32个字符或更长,将由于coredump而无法启动nginx,请确认一下,谢谢。
堆栈:
Program terminated with signal 11, Segmentation fault.
#0 0x000000000049d98b in ngx_http_upstream_drizzle_server (cf=0x7fff7ce484a0, cmd=<value optimized out>, conf=<value optimized out>)
at ../drizzle-nginx-module-0.1.8/src/ngx_http_drizzle_upstream.c:191
191 ../drizzle-nginx-module-0.1.8/src/ngx_http_drizzle_upstream.c: No such file or directory.
in ../drizzle-nginx-module-0.1.8/src/ngx_http_drizzle_upstream.c
(gdb) bt
#0 0x000000000049d98b in ngx_http_upstream_drizzle_server (cf=0x7fff7ce484a0, cmd=<value optimized out>, conf=<value optimized out>)
at ../drizzle-nginx-module-0.1.8/src/ngx_http_drizzle_upstream.c:191
#1 0x0000000000429b5f in ngx_conf_handler (cf=0x7fff7ce484a0, filename=0x0) at src/core/ngx_conf_file.c:391
#2 ngx_conf_parse (cf=0x7fff7ce484a0, filename=0x0) at src/core/ngx_conf_file.c:247
#3 0x000000000045d825 in ngx_http_upstream (cf=0x7fff7ce484a0, cmd=<value optimized out>, dummy=<value optimized out>) at src/http/ngx_http_upstream.c:5172
#4 0x0000000000429b5f in ngx_conf_handler (cf=0x7fff7ce484a0, filename=0x7fff7ce47ca0) at src/core/ngx_conf_file.c:391
#5 ngx_conf_parse (cf=0x7fff7ce484a0, filename=0x7fff7ce47ca0) at src/core/ngx_conf_file.c:247
#6 0x0000000000429e0b in ngx_conf_include (cf=0x7fff7ce484a0, cmd=<value optimized out>, conf=<value optimized out>) at src/core/ngx_conf_file.c:790
#7 0x0000000000429b5f in ngx_conf_handler (cf=0x7fff7ce484a0, filename=0x0) at src/core/ngx_conf_file.c:391
#8 ngx_conf_parse (cf=0x7fff7ce484a0, filename=0x0) at src/core/ngx_conf_file.c:247
#9 0x00000000004411f0 in ngx_http_block (cf=0x7fff7ce484a0, cmd=<value optimized out>, conf=0x44) at src/http/ngx_http.c:240
#10 0x0000000000429b5f in ngx_conf_handler (cf=0x7fff7ce484a0, filename=0x189b938) at src/core/ngx_conf_file.c:391
#11 ngx_conf_parse (cf=0x7fff7ce484a0, filename=0x189b938) at src/core/ngx_conf_file.c:247
#12 0x0000000000427338 in ngx_init_cycle (old_cycle=0x7fff7ce48550) at src/core/ngx_cycle.c:264
#13 0x0000000000419fb0 in main (argc=3, argv=0x7fff7ce48858) at src/core/nginx.c:333
代码:
if (ngx_strncmp(value[i].data, "password=", sizeof("password=") - 1)
== 0)
{
ds->password.len = value[i].len - (sizeof("password=") - 1);
if (ds->password.len >= DRIZZLE_MAX_PASSWORD_SIZE) {
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
"drizzle: \"password\" value too large in upstream "
"\"%V\" (at most %d bytes)",
dscf->peers->name,
(int) DRIZZLE_MAX_PASSWORD_SIZE);
return NGX_CONF_ERROR;
}
ds->password.data = "" - 1];
continue;
}