[5158] in Kerberos

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

Re: K5B5 for BSDI 2.0

daemon@ATHENA.MIT.EDU (Kurt J. Lidl)
Fri May 12 11:06:21 1995

To: kerberos@MIT.EDU
In-Reply-To: Your message of "12 May 1995 01:31:21 PDT."
             <3ov6cp$46e@wsrcc.com> 
Date: Fri, 12 May 1995 10:50:30 -0400
From: "Kurt J. Lidl" <lidl@va.pubnix.com>


>brian@warlock.ucsd.edu (Brian Kantor) writes:
>>The following are the patches I had to make to the K5B5 distribution
>>in order to get it to compile and pass the regression tests on a
>>BSDI 2.0 system.  They're pretty simple as such things go.

I sent these patches to krb5-bugs, but got no ack from anything/anyone.
Rather than have everybody re-invent the wheel, here's some more
patches for BSD/OS v2.0.


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