diff -up ypserv-2.29/lib/yp_db.c.dbopen ypserv-2.29/lib/yp_db.c --- ypserv-2.29/lib/yp_db.c.dbopen 2012-05-30 13:28:49.000000000 +0200 +++ ypserv-2.29/lib/yp_db.c 2013-01-28 12:07:28.555350199 +0100 @@ -173,11 +173,14 @@ _db_open (const char *domain, const char sprintf (buf, "%s/%s", domain, map); dbp = tcbdbnew (); - isok = tcbdbopen (dbp, buf, BDBOREADER); + isok = tcbdbopen (dbp, buf, BDBOREADER | BDBONOLCK); if (debug_flag && !isok) - log_msg ("tcbdbopen: Tokyo Cabinet Error: %s", - tcbdberrmsg (tcbdbecode (dbp))); + { + log_msg ("tcbdbopen: Tokyo Cabinet Error: %s", + tcbdberrmsg (tcbdbecode (dbp))); + log_msg ("tcbdbopen: consider rebuilding maps using ypinit"); + } else if (debug_flag) log_msg ("\t\t->Returning OK!"); } diff -up ypserv-2.29/makedbm/makedbm.c.dbopen ypserv-2.29/makedbm/makedbm.c --- ypserv-2.29/makedbm/makedbm.c.dbopen 2012-05-30 13:28:49.000000000 +0200 +++ ypserv-2.29/makedbm/makedbm.c 2013-01-28 12:23:50.243283071 +0100 @@ -490,6 +490,9 @@ create_file (char *fileName, char *dbmNa #endif #else unlink (dbmName); +#if defined(HAVE_LIBTC) + chmod(filename, S_IRUSR|S_IWUSR); +#endif rename (filename, dbmName); #endif free (filename); @@ -508,7 +511,7 @@ dump_file (char *dbmName) dbm = dbm_open (dbmName, O_RDONLY, 0600); #elif defined(HAVE_LIBTC) dbm = tcbdbnew(); - if (!tcbdbopen (dbm, dbmName, BDBOREADER)) + if (!tcbdbopen (dbm, dbmName, BDBOREADER | BDBONOLCK)) { tcbdbdel(dbm); dbm = NULL; @@ -517,6 +520,7 @@ dump_file (char *dbmName) if (dbm == NULL) { fprintf (stderr, "makedbm: Cannot open %s\n", dbmName); + fprintf (stderr, "makedbm: Consider rebuilding maps using ypinit\n"); exit (1); } #if defined(HAVE_COMPAT_LIBGDBM) diff -up ypserv-2.29/yphelper/yphelper.c.dbopen ypserv-2.29/yphelper/yphelper.c --- ypserv-2.29/yphelper/yphelper.c.dbopen 2012-05-30 13:28:50.000000000 +0200 +++ ypserv-2.29/yphelper/yphelper.c 2013-01-28 12:24:14.378281420 +0100 @@ -507,10 +507,10 @@ get_dbm_entry (char *key, char *map, cha #if defined(HAVE_COMPAT_LIBGDBM) dbm = gdbm_open (mappath, 0, GDBM_READER, 0600, NULL); #elif defined(HAVE_NDBM) - dbm = dbm_open (mappath, O_CREAT | O_RDWR, 0600); + dbm = dbm_open (mappath, O_RDONLY, 0600); #elif defined(HAVE_LIBTC) dbm = tcbdbnew(); - if (!tcbdbopen(dbm, mappath, BDBOWRITER | BDBOCREAT)) + if (!tcbdbopen(dbm, mappath, BDBOREADER | BDBONOLCK)) { tcbdbdel(dbm); dbm = NULL; @@ -519,6 +519,7 @@ get_dbm_entry (char *key, char *map, cha if (dbm == NULL) { fprintf (stderr, "yphelper: cannot open %s\n", mappath); + fprintf (stderr, "yphelper: consider rebuilding maps using ypinit\n", mappath); exit (1); } diff -up ypserv-2.29/yppush/yppush.c.dbopen ypserv-2.29/yppush/yppush.c --- ypserv-2.29/yppush/yppush.c.dbopen 2012-08-30 09:53:16.000000000 +0200 +++ ypserv-2.29/yppush/yppush.c 2013-01-28 12:23:59.161282461 +0100 @@ -290,10 +290,10 @@ get_dbm_entry (char *key) #if defined(HAVE_COMPAT_LIBGDBM) dbm = gdbm_open (mappath, 0, GDBM_READER, 0600, NULL); #elif defined(HAVE_NDBM) - dbm = dbm_open (mappath, O_CREAT | O_RDWR, 0600); + dbm = dbm_open (mappath, O_RDONLY, 0600); #elif defined(HAVE_LIBTC) dbm = tcbdbnew(); - if (!tcbdbopen(dbm, mappath, BDBOWRITER | BDBOCREAT)) + if (!tcbdbopen(dbm, mappath, BDBOREADER | BDBONOLCK)) { tcbdbdel(dbm); dbm = NULL; @@ -302,6 +302,7 @@ get_dbm_entry (char *key) if (dbm == NULL) { log_msg ("YPPUSH: Cannot open %s", mappath); + log_msg ("YPPUSH: consider rebuilding maps using ypinit"); exit (1); } diff -up ypserv-2.29/ypxfr/ypxfr.c.dbopen ypserv-2.29/ypxfr/ypxfr.c --- ypserv-2.29/ypxfr/ypxfr.c.dbopen 2013-01-28 12:07:28.475350204 +0100 +++ ypserv-2.29/ypxfr/ypxfr.c 2013-01-28 12:24:07.195281912 +0100 @@ -557,10 +557,10 @@ ypxfr (char *map, char *source_host, cha #if defined(HAVE_COMPAT_LIBGDBM) dbm = gdbm_open (dbName_orig, 0, GDBM_READER, 0600, NULL); #elif defined(HAVE_NDBM) - dbm = dbm_open (dbName_orig, O_CREAT|O_RDWR, 0600); + dbm = dbm_open (dbName_orig, O_RDONLY, 0600); #elif defined(HAVE_LIBTC) dbm = tcbdbnew (); - if (!tcbdbopen (dbm, dbName_orig, BDBOWRITER | BDBOCREAT)) + if (!tcbdbopen (dbm, dbName_orig, BDBOREADER | BDBONOLCK)) { tcbdbdel (dbm); dbm = NULL; @@ -629,7 +629,7 @@ ypxfr (char *map, char *source_host, cha dbm = dbm_open (dbName_temp, O_CREAT|O_RDWR, 0600); #elif defined(HAVE_LIBTC) dbm = tcbdbnew (); - if (!tcbdbopen (dbm, dbName_orig, BDBOWRITER | BDBOCREAT)) + if (!tcbdbopen (dbm, dbName_orig, BDBOWRITER | BDBOCREAT | BDBOTRUNC)) { tcbdbdel (dbm); dbm = NULL; @@ -782,7 +782,12 @@ ypxfr (char *map, char *source_host, cha } if (result == 0) - rename (dbName_temp, dbName_orig); + { +#if defined(HAVE_LIBTC) + chmod(dbName_temp, S_IRUSR|S_IWUSR); +#endif + rename (dbName_temp, dbName_orig); + } else unlink(dbName_temp);