summaryrefslogtreecommitdiff
path: root/nss/nss_db
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-07-11 14:50:24 -0400
committerUlrich Drepper <drepper@gmail.com>2011-07-11 14:50:24 -0400
commit319b9ad4bccedb2a6b1a222cf446e873b2bc6de1 (patch)
tree7951727c0dbd4394af52715e226745986e8beeb4 /nss/nss_db
parent23bee3e8677c9357662ce789ed77fe25f3991c66 (diff)
Generalize framework to register monitoring of files in nscd
nscd can clear caches when certain files change. The list of files was hardcoded so far and worked for nss_files and nss_dns and those modules which need no monitoring. nss_db, for instance, has its own set of files to monitor. Now the NSS modules themselves can request that certain files are monitored.
Diffstat (limited to 'nss/nss_db')
-rw-r--r--nss/nss_db/db-init.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/nss/nss_db/db-init.c b/nss/nss_db/db-init.c
new file mode 100644
index 0000000000..8228d61f57
--- /dev/null
+++ b/nss/nss_db/db-init.c
@@ -0,0 +1,54 @@
+/* Initialization in nss_db module.
+ Copyright (C) 2011 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ 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 <paths.h>
+#include <nscd/nscd.h>
+
+
+static union
+{
+ struct traced_file file;
+ char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "passwd.db")];
+} pwd_traced_file;
+
+static union
+{
+ struct traced_file file;
+ char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "group.db")];
+} grp_traced_file;
+
+static union
+{
+ struct traced_file file;
+ char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "services.db")];
+} serv_traced_file;
+
+
+void
+_nss_db_init (void (*cb) (size_t, struct traced_file *))
+{
+ strcpy (pwd_traced_file.file.fname,_PATH_VARDB "passwd.db");
+ cb (pwddb, &pwd_traced_file.file);
+
+ strcpy (grp_traced_file.file.fname, _PATH_VARDB "group.db");
+ cb (grpdb, &grp_traced_file.file);
+
+ strcpy (serv_traced_file.file.fname, _PATH_VARDB "services.db");
+ cb (servdb, &serv_traced_file.file);
+}