Add another routine in ypdb (ypdb_open_suf) that doesn't add the suffix to
authormaja <maja@openbsd.org>
Sun, 9 Feb 1997 09:49:36 +0000 (09:49 +0000)
committermaja <maja@openbsd.org>
Sun, 9 Feb 1997 09:49:36 +0000 (09:49 +0000)
the database name. The suffix is added in the call to mkstemp. Now ypdb and
mkstemp can coexist and do what we excpect. All code from 1.12 has been
reintegrated now.

usr.sbin/ypserv/common/ypdb.c
usr.sbin/ypserv/common/ypdb.h
usr.sbin/ypserv/ypxfr/ypxfr.c

index 7de9001..6f6234d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ypdb.c,v 1.4 1996/06/26 21:26:33 maja Exp $ */
+/*     $OpenBSD: ypdb.c,v 1.5 1997/02/09 09:49:36 maja Exp $ */
 
 /*
  * Copyright (c) 1990, 1993
@@ -95,6 +95,44 @@ ypdb_open(file, flags, mode)
 #endif
 }
 
+/*
+ * Returns:
+ *     *DBM on success
+ *      NULL on failure
+ */
+
+extern DBM *
+ypdb_open_suf(file, flags, mode)
+       const char *file;
+       int flags, mode;
+{
+#ifdef YPDB_PATCH
+       HASHINFO info;
+
+       info.bsize = 4096;
+       info.ffactor = 40;
+       info.nelem = 1;
+       info.cachesize = NULL;
+       info.hash = NULL;
+       info.lorder = 0;
+       return ((DBM *)__hash_open(file, flags, mode, &info, 0));
+#else
+       BTREEINFO info;
+       DBM *db;
+
+       info.flags = 0;
+       info.cachesize = 0;
+       info.maxkeypage = 0;
+       info.minkeypage = 0;
+       info.psize = 0;
+       info.compare = NULL;
+       info.prefix = NULL;
+       info.lorder = 0;
+       db = (DBM *)__bt_open(file, flags, mode, &info, 0);
+       return (db);
+#endif
+}
+
 extern void
 ypdb_close(db)
        DBM *db;
index f645bf3..80aac6c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ypdb.h,v 1.4 1996/06/26 21:26:34 maja Exp $ */
+/*     $OpenBSD: ypdb.h,v 1.5 1997/02/09 09:49:37 maja Exp $ */
 
 /*
  * Copyright (c) 1990, 1993
@@ -70,6 +70,7 @@ datum  ypdb_firstkey __P((DBM *));
 datum   ypdb_nextkey __P((DBM *));
 datum   ypdb_setkey __P((DBM *, datum));
 DBM     *ypdb_open __P((const char *, int, int));
+DBM     *ypdb_open_suf __P((const char *, int, int));
 int     ypdb_store __P((DBM *, datum, datum, int));
 __END_DECLS
 
index 31d9b73..6bcd600 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ypxfr.c,v 1.14 1997/02/08 19:58:51 maja Exp $ */
+/*     $OpenBSD: ypxfr.c,v 1.15 1997/02/09 09:49:37 maja Exp $ */
 
 /*
  * Copyright (c) 1994 Mats O Jansson <moj@stacken.kth.se>
@@ -32,7 +32,7 @@
  */
 
 #ifndef LINT
-static char rcsid[] = "$OpenBSD: ypxfr.c,v 1.14 1997/02/08 19:58:51 maja Exp $";
+static char rcsid[] = "$OpenBSD: ypxfr.c,v 1.15 1997/02/09 09:49:37 maja Exp $";
 #endif
 
 #include <sys/types.h>
@@ -113,7 +113,7 @@ u_long *lordernum;
        if (!((stat(map_path, &finfo) == 0) &&
              ((finfo.st_mode & S_IFMT) == S_IFDIR))) {
                fprintf(stderr, "%s: domain %s not found locally\n",
-                       __progname, domain);
+                   __progname, domain);
                status = YPPUSH_NODOM;
        }
 
@@ -203,17 +203,7 @@ char *domain;
 char *map;
 char *temp_map;
 {
-       DBM     *db;
-       char    db_temp[255];
-
-       snprintf(db_temp,sizeof db_temp, "%s/%s/%s",
-           YP_DB_PATH,domain,temp_map);
-
-       db = ypdb_open(db_temp, O_RDWR|O_CREAT, 0444);
-
-       return db;
-
-       yplog("Open DB %s", db_temp);
+       return ypdb_open_suf(temp_map, O_RDWR, 0444);
 }
 
 int
@@ -222,26 +212,11 @@ char *domain;
 char *map;
 char *temp_map;
 {
-       char    db_name[MAXPATHLEN],db_temp[MAXPATHLEN];
+       char    db_name[MAXPATHLEN];
 
        snprintf(db_name, sizeof db_name, "%s/%s/%s%s",
            YP_DB_PATH,domain,map,YPDB_SUFFIX);
-       snprintf(db_temp, sizeof db_temp, "%s/%s/%s%s",
-           YP_DB_PATH,domain,temp_map,YPDB_SUFFIX);
-       rename(db_temp,db_name);
-
-       return YPPUSH_SUCC;
-}
-
-int
-unlink_db(domain,map,temp_map)
-char *temp_map;
-{
-       char    db_temp[MAXPATHLEN];
-
-       snprintf(db_temp, sizeof db_temp, "%s/%s/%s%s",
-           YP_DB_PATH,domain,temp_map,YPDB_SUFFIX);
-       unlink(db_temp);
+       rename(temp_map,db_name);
 
        return YPPUSH_SUCC;
 }
@@ -461,7 +436,6 @@ char *argv[];
        u_long   ordernum,new_ordernum;
        struct   ypall_callback callback;
        CLIENT   *client;
-       char     mapname[] = "ypdbXXXXXX";
        int      status,xfr_status;
        int      srvport;
        
@@ -511,8 +485,11 @@ char *argv[];
        }
 
        if (usage) {
-         status = YPPUSH_BADARGS;
-         (void)fprintf(stderr,"usage: %s [-cf] [-d domain] [-h host] [-s domain] [-C tid prog ipadd port] mapname\n",__progname);
+               status = YPPUSH_BADARGS;
+               fprintf(stderr, "usage: %s %s %s\n",
+                   "[-cf] [-d domain] [-h host] [-s domain]",
+                   "[-C tid prog ipadd port] mapname\n",
+                   __progname);
        }
 
        if (status > 0) {
@@ -577,12 +554,21 @@ char *argv[];
        }
 
        if (status == YPPUSH_SUCC) {
+               char    tmpmapname[MAXPATHLEN];
+               int     fd;
 
                /* Create temporary db */
-               mktemp(mapname);
+               snprintf(tmpmapname, sizeof tmpmapname,
+                   "%s/%s/ypdbXXXXXXXXXX%s",
+                   YP_DB_PATH, domain, YPDB_SUFFIX);
+               fd = mkstemp(tmpmapname);
+               if (fd == -1)
+                       status = YPPUSH_DBM;
+               else
+                       close(fd);
 
                if (status > 0) {
-                       db = create_db(domain,map,mapname);
+                       db = create_db(domain,map,tmpmapname);
                        if(db == NULL)
                                status = YPPUSH_DBM;
                }
@@ -619,9 +605,10 @@ char *argv[];
 
                /* Rename db */
                if(status > 0) {
-                       status = install_db(domain,map,mapname);
+                       status = install_db(domain,map,tmpmapname);
                } else {
-                       status = unlink_db(domain,map,mapname);
+                       unlink(tmpmapname);
+                       status = YPPUSH_SUCC;
                }
                
        }