[5158] in Kerberos
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);