]> git.sur5r.net Git - openldap/commitdiff
Add locale support (slapd.conf keyword "locale") to slapd if HAVE_LOCALE_H
authorHallvard Furuseth <hallvard@openldap.org>
Mon, 22 Feb 1999 21:01:24 +0000 (21:01 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Mon, 22 Feb 1999 21:01:24 +0000 (21:01 +0000)
configure
configure.in
doc/man/man5/slapd.conf.5
include/portable.h.in
include/portable.h.nt
servers/slapd/config.c
servers/slapd/tools/centipede.c

index 4361158c11de59142f200cec83b5be594332f9db..203f266fcc783ee71726fb5a426e1768a22dcfe6 100755 (executable)
--- a/configure
+++ b/configure
@@ -7988,6 +7988,7 @@ for ac_hdr in \
        getopt.h                \
        libutil.h               \
        limits.h                \
+       locale.h                \
        malloc.h                \
        memory.h                \
        regex.h                 \
index 95f79d2982ce6f1a9bda0b3a43e2e98aca7092b8..44904c3f40c1f54fbfc69d82ef4820c74e2322a2 100644 (file)
@@ -1404,6 +1404,7 @@ AC_CHECK_HEADERS( \
        getopt.h                \
        libutil.h               \
        limits.h                \
+       locale.h                \
        malloc.h                \
        memory.h                \
        regex.h                 \
index 8cfdb7674b80f7bfb41312b98127b340860df6eb..a3acdefa152ed54d5e6eb84e9e9021b431cc955f 100644 (file)
@@ -124,6 +124,17 @@ The ( absolute ) name of a file that will hold the
 server's command line options
 if started without the debugging command line option.
 .TP
+.B
+locale { <locale-name> | on | off }
+Obey <locale-name>'s character classification and case conversion; i.e. the
+.BR locale (5)
+LC_CTYPE category.  See
+.BR locale (5)
+for details about locales.  "on" takes the locale from the environment,
+typically $LANG or $LC_CTYPE, and will only work properly if slapd will
+run with the same environment variables as when the database was
+generated.  "off" (the default setting) resets to the initial "C" locale.
+.TP
 .B loglevel <integer>
 Specify the level at which debugging statements and operation 
 statistics should be syslogged (currently logged to the
@@ -354,6 +365,7 @@ ETCDIR/slapd.conf
 .SH SEE ALSO
 .BR ldap (3),
 .BR slapd.replog (5),
+.BR locale (5),
 .BR passwd (5),
 .BR slapd (8),
 .BR slurpd (8),
index a297f2c9d1b6f73868c93f768ad7161b291683ac..0d116b6bbb48de733cdbd0b44be30fc21151c1d4 100644 (file)
 /* Define if you have the <limits.h> header file.  */
 #undef HAVE_LIMITS_H
 
+/* Define if you have the <locale.h> header file.  */
+#undef HAVE_LOCALE_H
+
 /* Define if you have the <lwp/lwp.h> header file.  */
 #undef HAVE_LWP_LWP_H
 
index e01023a684fcd686400809c1d905e07ba237c3ce..47b02791aaf3e66054f33787781b67284afeb773 100644 (file)
@@ -456,6 +456,9 @@ typedef char * caddr_t;
 /* Define if you have the <limits.h> header file.  */
 #define HAVE_LIMITS_H 1
 
+/* Define if you have the <locale.h> header file.  */
+#define HAVE_LOCALE_H 1
+
 /* Define if you have the <lwp/lwp.h> header file.  */
 /* #undef HAVE_LWP_LWP_H */
 
index 03d69e750ea2093019b03f864df721c309695c2c..28005b2153e540a8a35b049f063455abd60bbfde 100644 (file)
@@ -3,6 +3,9 @@
 #include "portable.h"
 
 #include <stdio.h>
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
 
 #include <ac/string.h>
 #include <ac/ctype.h>
@@ -309,6 +312,35 @@ read_config( char *fname )
                        strcpy( default_referral, "Referral:\n" );
                        strcat( default_referral, cargv[1] );
 
+               /* specify locale */
+               } else if ( strcasecmp( cargv[0], "locale" ) == 0 ) {
+#ifdef HAVE_LOCALE_H
+                       char *locale;
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: missing locale in \"locale <name | on | off>\" line\n",
+                                      fname, lineno, 0 );
+                               return( 1 );
+                       }
+
+                       locale = (strcasecmp(   cargv[1], "on"  ) == 0 ? ""
+                                 : strcasecmp( cargv[1], "off" ) == 0 ? "C"
+                                 : ch_strdup( cargv[1] )                    );
+
+                       if ( setlocale( LC_CTYPE, locale ) == 0 ) {
+                               Debug( LDAP_DEBUG_ANY,
+                                      (*locale
+                                       ? "%s: line %d: bad locale \"%s\"\n"
+                                       : "%s: line %d: bad locale\n"),
+                                      fname, lineno, locale );
+                               return( 1 );
+                       }
+#else
+                       Debug( LDAP_DEBUG_ANY,
+                              "%s: line %d: \"locale\" unsupported\n",
+                              fname, lineno, 0 );
+                       return( 1 );
+#endif
                /* specify an objectclass */
                } else if ( strcasecmp( cargv[0], "objectclass" ) == 0 ) {
                        parse_oc( be, fname, lineno, cargc, cargv );
index 388602ece586d62e54156335fc9d426aad83b34b..022d950878f5b76efd1d3875e7338d3e6e8b1a4c 100644 (file)
@@ -502,9 +502,7 @@ generate_new_centroids(
 
                                /* normalize the value */
                                for ( s = val[j]; *s; s++ ) {
-                                       if ( isascii( *s ) ) {
-                                               *s = TOLOWER( *s );
-                                       }
+                                       *s = TOLOWER( (unsigned char) *s );
                                        last = *s;
                                }
                                if ( isascii( last ) && isdigit( last ) ) {