diff options
Diffstat (limited to 'nscd/nscd_conf.c')
-rw-r--r-- | nscd/nscd_conf.c | 194 |
1 files changed, 88 insertions, 106 deletions
diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c index 2048eca886..d21f2fc501 100644 --- a/nscd/nscd_conf.c +++ b/nscd/nscd_conf.c @@ -1,23 +1,24 @@ -/* Copyright (c) 1998,2000,2003,2004,2005,2006 Free Software Foundation, Inc. +/* Copyright (c) 1998, 2000, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ #include <ctype.h> #include <errno.h> -#include <error.h> #include <libintl.h> #include <malloc.h> #include <pwd.h> @@ -44,18 +45,6 @@ const char *dbnames[lastdb] = [hstdb] = "hosts" }; - -static int -find_db (const char *name) -{ - for (int cnt = 0; cnt < lastdb; ++cnt) - if (strcmp (name, dbnames[cnt]) == 0) - return cnt; - - error (0, 0, _("database %s is not supported\n"), name); - return -1; -} - int nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) { @@ -63,7 +52,6 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) char *line, *cp, *entry, *arg1, *arg2; size_t len; int cnt; - const unsigned int initial_error_message_count = error_message_count; /* Open the configuration file. */ fp = fopen (fname, "r"); @@ -103,7 +91,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) ++arg1; *cp = '\0'; if (strlen (entry) == 0) - error (0, 0, _("Parse error: %s"), line); + dbg_log (_("Parse error: %s"), line); while (isspace (*arg1) && *arg1 != '\0') ++arg1; cp = arg1; @@ -124,49 +112,64 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) if (strcmp (entry, "positive-time-to-live") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - dbs[idx].postimeout = atol (arg2); + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + dbs[cnt].postimeout = atol (arg2); + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "negative-time-to-live") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - dbs[idx].negtimeout = atol (arg2); + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + dbs[cnt].negtimeout = atol (arg2); + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "suggested-size") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - dbs[idx].suggested_module = atol (arg2); + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + dbs[cnt].suggested_module = atol (arg2); + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "enable-cache") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - { - if (strcmp (arg2, "no") == 0) - dbs[idx].enabled = 0; - else if (strcmp (arg2, "yes") == 0) - dbs[idx].enabled = 1; - } + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + if (strcmp (arg2, "no") == 0) + dbs[cnt].enabled = 0; + else if (strcmp (arg2, "yes") == 0) + dbs[cnt].enabled = 1; + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "check-files") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - { - if (strcmp (arg2, "no") == 0) - dbs[idx].check_file = 0; - else if (strcmp (arg2, "yes") == 0) - dbs[idx].check_file = 1; - } - } - else if (strcmp (entry, "max-db-size") == 0) - { - int idx = find_db (arg1); - if (idx >= 0) - dbs[idx].max_db_size = atol (arg2); + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + if (strcmp (arg2, "no") == 0) + dbs[cnt].check_file = 0; + else if (strcmp (arg2, "yes") == 0) + dbs[cnt].check_file = 1; + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "logfile") == 0) set_logfile (arg1); @@ -188,14 +191,14 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) else if (strcmp (entry, "server-user") == 0) { if (!arg1) - error (0, 0, _("Must specify user name for server-user option")); + dbg_log (_("Must specify user name for server-user option")); else server_user = xstrdup (arg1); } else if (strcmp (entry, "stat-user") == 0) { if (arg1 == NULL) - error (0, 0, _("Must specify user name for stat-user option")); + dbg_log (_("Must specify user name for stat-user option")); else { stat_user = xstrdup (arg1); @@ -207,25 +210,31 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) } else if (strcmp (entry, "persistent") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - { - if (strcmp (arg2, "no") == 0) - dbs[idx].persistent = 0; - else if (strcmp (arg2, "yes") == 0) - dbs[idx].persistent = 1; - } + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + if (strcmp (arg2, "no") == 0) + dbs[cnt].persistent = 0; + else if (strcmp (arg2, "yes") == 0) + dbs[cnt].persistent = 1; + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "shared") == 0) { - int idx = find_db (arg1); - if (idx >= 0) - { - if (strcmp (arg2, "no") == 0) - dbs[idx].shared = 0; - else if (strcmp (arg2, "yes") == 0) - dbs[idx].shared = 1; - } + for (cnt = 0; cnt < lastdb; ++cnt) + if (strcmp (arg1, dbnames[cnt]) == 0) + { + if (strcmp (arg2, "no") == 0) + dbs[cnt].shared = 0; + else if (strcmp (arg2, "yes") == 0) + dbs[cnt].shared = 1; + break; + } + if (cnt == lastdb) + dbg_log ("database %s is not supported\n", arg1); } else if (strcmp (entry, "reload-count") == 0) { @@ -239,7 +248,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) else if (count >= 0) reload_count = count; else - error (0, 0, _("invalid value for 'reload-count': %u"), count); + dbg_log (_("invalid value for 'reload-count': %u"), count); } } else if (strcmp (entry, "paranoia") == 0) @@ -254,21 +263,10 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) if (arg1 != NULL) restart_interval = atol (arg1); else - error (0, 0, _("Must specify value for restart-interval option")); - } - else if (strcmp (entry, "auto-propagate") == 0) - { - int idx = find_db (arg1); - if (idx >= 0) - { - if (strcmp (arg2, "no") == 0) - dbs[idx].propagate = 0; - else if (strcmp (arg2, "yes") == 0) - dbs[idx].propagate = 1; - } + dbg_log (_("Must specify value for restart-interval option")); } else - error (0, 0, _("Unknown option: %s %s %s"), entry, arg1, arg2); + dbg_log (_("Unknown option: %s %s %s"), entry, arg1, arg2); } while (!feof_unlocked (fp)); @@ -281,7 +279,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb]) oldcwd = get_current_dir_name (); if (oldcwd == NULL) { - error (0, 0, _("\ + dbg_log (_("\ cannot get current working directory: %s; disabling paranoia mode"), strerror (errno)); paranoia = 0; @@ -292,26 +290,10 @@ cannot get current working directory: %s; disabling paranoia mode"), if (max_nthreads < nthreads) max_nthreads = nthreads; - for (cnt = 0; cnt < lastdb; ++cnt) - { - size_t datasize = (sizeof (struct database_pers_head) - + roundup (dbs[cnt].suggested_module - * sizeof (ref_t), ALIGN) - + (dbs[cnt].suggested_module - * DEFAULT_DATASIZE_PER_BUCKET)); - if (datasize > dbs[cnt].max_db_size) - { - error (0, 0, _("maximum file size for %s database too small"), - dbnames[cnt]); - dbs[cnt].max_db_size = datasize; - } - - } - /* Free the buffer. */ free (line); /* Close configuration file. */ fclose (fp); - return error_message_count != initial_error_message_count; + return 0; } |