[1363] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

dbm differences under BSDi v2.0

daemon@ATHENA.MIT.EDU (Kurt J. Lidl)
Mon May 8 11:38:41 1995

From: "Kurt J. Lidl" <lidl@Pix.COM>
To: krb5-bugs@MIT.EDU
Date: Mon, 8 May 1995 11:37:50 -0400 (EDT)
Cc: stripes@uu.net, jmalcolm@uu.net, tgsmith@uunet.uu


Here's a set of diffs that will allow the "make check" pass
under BSDi v2.0 and the K5.B5 software.

You will need to configure with --ccp-opts=-DDB_DBM to get
this to work.

I've #ifdef'd the code around DB_DBM.

These patches are necesary for anybody who wants to run the
kerberos server on a machine that uses the "libdb" routines,
rather than a traditional "ndbm" or "dbm" database.  This
certainly includes BSDi v1.1 and v2.0, as well as the
NetBSD and FreeBSD efforts.  I have no reason to suspect that
these changes will not work on all these platforms.

Hope this helps the V5 effort a little bit.

-Kurt

===================================================================
RCS file: admin/destroy/RCS/kdb5_destroy.c,v
retrieving revision 1.1
diff -u -r1.1 admin/destroy/kdb5_destroy.c
--- 1.1	1995/05/07 16:26:40
+++ admin/destroy/kdb5_destroy.c	1995/05/08 15:06:15
@@ -88,7 +88,11 @@
 	printf("OK, deleting database '%s'...\n", dbname);
     }
     (void) strcpy(dbfilename, dbname);
+#if defined(DB_DBM)
+    (void) strcat(dbfilename, ".db");
+#else
     (void) strcat(dbfilename, ".dir");
+#endif
     if (unlink(dbfilename) == -1) {
 	retval = errno;
 	com_err(argv[0], retval, "deleting database file '%s'",dbfilename);
@@ -100,6 +104,7 @@
 	        "Database may be partially deleted--inspect files manually!\n");
 	exit(1);
     }
+#if !defined(DB_DBM)
     (void) strcpy(dbfilename, dbname);
     (void) strcat(dbfilename, ".pag");
     if (unlink(dbfilename) == -1) {
@@ -109,6 +114,7 @@
 		"Database may be partially deleted--inspect files manually!\n");
 	exit(1);
     }
+#endif
     (void) strcpy(dbfilename, dbname);
     (void) strcat(dbfilename, ".ok");
     if (unlink(dbfilename) == -1) {
===================================================================
RCS file: lib/kdb/RCS/kdb_dbm.c,v
retrieving revision 1.1
diff -u -r1.1 lib/kdb/kdb_dbm.c
--- 1.1	1995/05/07 16:45:56
+++ lib/kdb/kdb_dbm.c	1995/05/07 17:03:09
@@ -923,9 +923,18 @@
     else
 	dbm_close(db);
 #else /* OLD DBM */
+#if defined(DB_DBM)
+	char *dbname;
+#else
     char *dirname;
     char *pagname;
+#endif
 
+#if defined(DB_DBM)
+    dbname = gen_dbsuffix(db_name, ".db");
+    if (!dirname)
+	return ENOMEM;
+#else
     dirname = gen_dbsuffix(db_name, ".dir");
     if (!dirname)
 	return ENOMEM;
@@ -934,7 +943,18 @@
 	free_dbsuffix(dirname);
 	return ENOMEM;
     }    
+#endif
 
+#if defined(DB_DBM)
+    fd = open(dbname, O_RDWR|O_CREAT|O_EXCL, 0600);
+    if (fd < 0)
+	retval = errno;
+    else
+	close(fd);
+    if (dbminit(db_name) < 0)
+	retval = errno;
+    free_dbsuffix(dbname);
+#else
     fd = open(dirname, O_RDWR|O_CREAT|O_EXCL, 0600);
     if (fd < 0)
 	retval = errno;
@@ -950,6 +970,7 @@
     }
     free_dbsuffix(dirname);
     free_dbsuffix(pagname);
+#endif
 #endif /* ODBM */
     if (retval == 0) {
 	okname = gen_dbsuffix(db_name, ".ok");
@@ -1030,10 +1051,15 @@
 {
 	krb5_error_code	retval;
 
+#if defined(DB_DBM)
+	if (retval = destroy_file_suffix(dbname, ".db"))
+		return(retval);
+#else
 	if (retval = destroy_file_suffix(dbname, ".pag"))
 		return(retval);
 	if (retval = destroy_file_suffix(dbname, ".dir"))
 		return(retval);
+#endif
 	if (retval = destroy_file_suffix(dbname, ".ok"))
 		return(retval);
 	return(0);
@@ -1053,14 +1079,29 @@
     char *from;
     char *to;
 {
+#if defined(DB_DBM)
+    char *fromdb = 0;
+    char *todb = 0;
+#else
     char *fromdir = 0;
     char *todir = 0;
     char *frompag = 0;
     char *topag = 0;
+#endif
     char *fromok = 0;
     time_t trans;
     krb5_error_code retval;
 
+#if defined(DB_DBM)
+    fromdb = gen_dbsuffix (from, ".db");
+    if (!fromdb)
+	return ENOMEM;
+    todb = gen_dbsuffix (to, ".db");
+    if (!todb) {
+	retval = ENOMEM;
+	goto errout;
+    }
+#else
     fromdir = gen_dbsuffix (from, ".dir");
     if (!fromdir)
 	return ENOMEM;
@@ -1079,6 +1120,8 @@
 	retval = ENOMEM;
 	goto errout;
     }
+#endif
+
     fromok = gen_dbsuffix(from, ".ok");
     if (!fromok) {
 	retval = ENOMEM;
@@ -1088,8 +1131,13 @@
     if (retval = krb5_dbm_db_start_update(context, to, &trans))
 	goto errout;
     
+#if defined(DB_DBM)
+    if (rename (fromdb, todb) == 0)
+#else
     if ((rename (fromdir, todir) == 0)
-	&& (rename (frompag, topag) == 0)) {
+	&& (rename (frompag, topag) == 0))
+#endif
+    {
 	(void) unlink (fromok);
 	retval = 0;
     } else
@@ -1098,6 +1146,12 @@
 errout:
     if (fromok)
 	free_dbsuffix (fromok);
+#if defined(DB_DBM)
+    if (todb)
+	free_dbsuffix (todb);
+    if (fromdb)
+	free_dbsuffix (fromdb);
+#else
     if (topag)
 	free_dbsuffix (topag);
     if (frompag)
@@ -1106,6 +1160,7 @@
 	free_dbsuffix (todir);
     if (fromdir)
 	free_dbsuffix (fromdir);
+#endif
 
     if (retval == 0)
 	return krb5_dbm_db_end_update(context, to, trans);

home help back first fref pref prev next nref lref last post