BUG/MEDIUM: init: don't use environment locale

This patch removes setlocale from the main function. It was introduced
by commit 379d9c7 ("MEDIUM: init: allow directory as argument of -f")
in 1.7-dev a few commits ago after a discussion on the mailing list.

Some regex may have different behaviours depending on the
locale. Some LUA scripts may change their behaviour too
(http://lua-users.org/wiki/LuaLocales).

Without this patch (haproxy is using setlocale) :

	$ cat locale.cfg
	defaults
	  mode http

	frontend test
	  bind :9000
	  mode http
	  use_backend testbk if { hdr_reg(X-Test) ^\w+$ }

	backend testbk
	  mode http
	  server s 127.0.0.1:80

	$ LANG=fr_FR.UTF-8 ./haproxy -f locale.cfg
	$ curl -i -H "X-Test: chec" localhost:9000
	HTTP/1.1 200 OK
	...

	$ LANG=C ./haproxy -f locale.cfg
	$ curl -i -H "X-Test: chec" localhost:9000
	HTTP/1.0 503 Service Unavailable
	...
This commit is contained in:
Maxime de Roucy 2016-05-18 23:13:38 +02:00 committed by Willy Tarreau
parent f34b28aa6e
commit e3841395ad
3 changed files with 3 additions and 7 deletions

View File

@ -35,8 +35,8 @@ instances without risking the system's stability.
.TP .TP
\fB\-f <configuration file|dir>\fP \fB\-f <configuration file|dir>\fP
Specify configuration file or directory path. If the argument is a directory Specify configuration file or directory path. If the argument is a directory
the files (and only files) it containes are added in lexical order (respecting the files (and only files) it containes are added in lexical order (using
LC_COLLATE) ; only non hidden files with ".cfg" extension are added. LC_COLLATE=C) ; only non hidden files with ".cfg" extension are added.
.TP .TP
\fB\-L <name>\fP \fB\-L <name>\fP

View File

@ -136,7 +136,7 @@ list of options is :
-f <cfgfile|cfgdir> : adds <cfgfile> to the list of configuration files to be -f <cfgfile|cfgdir> : adds <cfgfile> to the list of configuration files to be
loaded. If <cfgdir> is a directory, all the files (and only files) it loaded. If <cfgdir> is a directory, all the files (and only files) it
containes are added in lexical order (respecting LC_COLLATE) to the list of containes are added in lexical order (using LC_COLLATE=C) to the list of
configuration files to be loaded ; only files with ".cfg" extension are configuration files to be loaded ; only files with ".cfg" extension are
added, only non hidden files (not prefixed with ".") are added. added, only non hidden files (not prefixed with ".") are added.
Configuration files are loaded and processed in their declaration order. Configuration files are loaded and processed in their declaration order.

View File

@ -32,7 +32,6 @@
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
#include <dirent.h> #include <dirent.h>
#include <locale.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h> #include <sys/types.h>
@ -1752,9 +1751,6 @@ int main(int argc, char **argv)
char errmsg[100]; char errmsg[100];
int pidfd = -1; int pidfd = -1;
/* get the locale from the environment variables */
setlocale(LC_ALL, "");
init(argc, argv); init(argc, argv);
signal_register_fct(SIGQUIT, dump, SIGQUIT); signal_register_fct(SIGQUIT, dump, SIGQUIT);
signal_register_fct(SIGUSR1, sig_soft_stop, SIGUSR1); signal_register_fct(SIGUSR1, sig_soft_stop, SIGUSR1);