rpms/krb5/F-12 krb5-1.7-create_on_load.patch,1.1,1.2

Nalin Dahyabhai nalin at fedoraproject.org
Thu Jan 7 20:22:36 UTC 2010


Author: nalin

Update of /cvs/pkgs/rpms/krb5/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv7887

Modified Files:
	krb5-1.7-create_on_load.patch 
Log Message:
- pull in the current version of this patch from devel


krb5-1.7-create_on_load.patch:
 adb_openclose.c |   14 +++++++++++---
 kdb_db2.c       |   19 +++++++++++++------
 policy_db.h     |    2 ++
 3 files changed, 26 insertions(+), 9 deletions(-)

Index: krb5-1.7-create_on_load.patch
===================================================================
RCS file: /cvs/pkgs/rpms/krb5/F-12/krb5-1.7-create_on_load.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- krb5-1.7-create_on_load.patch	7 Jan 2010 20:20:48 -0000	1.1
+++ krb5-1.7-create_on_load.patch	7 Jan 2010 20:22:36 -0000	1.2
@@ -1,50 +1,115 @@
-When we are about to rename the database, try to create one first, just in
-case it's already there.  Ignore errors that crop up if there's actually one
-there.  Pulled down from trunk.
+Modify the kdb_db2 backend so that an attempt to "load" a database will
+successfully create it if it didn't already exist.  The internal promotion
+code appears to be built for this to happen, but doesn't always ensure
+that lock files are in place before it attempts to lock them.  We add
+modified interfaces which allow O_CREAT to be passed in and applied in the
+right paths, and change the function which promotes a temporary database
+to a "real" database to do so.  Other code paths shouldn't be affected.
+
 diff -up krb5-1.7/src/plugins/kdb/db2/adb_openclose.c krb5-1.7/src/plugins/kdb/db2/adb_openclose.c
+--- krb5-1.7/src/plugins/kdb/db2/adb_openclose.c	2010-01-05 17:31:01.000000000 -0500
++++ krb5-1.7/src/plugins/kdb/db2/adb_openclose.c	2010-01-05 17:42:11.000000000 -0500
+@@ -110,8 +110,8 @@ krb5_error_code osa_adb_rename_db(char *
+      return 0;
+ }
+ 
+-krb5_error_code osa_adb_init_db(osa_adb_db_t *dbp, char *filename,
+-			      char *lockfilename, int magic)
++krb5_error_code osa_adb_init_db_flags(osa_adb_db_t *dbp, char *filename,
++				      char *lockfilename, int magic, int flags)
+ {
+      osa_adb_db_t db;
+      static struct _locklist *locklist = NULL;
+@@ -198,7 +198,9 @@ krb5_error_code osa_adb_init_db(osa_adb_
+ 	   * POSIX systems
+ 	   */
+ 	  lockp->lockinfo.filename = strdup(lockfilename);
+-	  if ((lockp->lockinfo.lockfile = WRITABLEFOPEN(lockfilename, "r+")) == NULL) {
++	  if ((((flags & O_CREAT) == 0) ||
++	       ((lockp->lockinfo.lockfile = WRITABLEFOPEN(lockfilename, "w+")) == NULL)) &&
++	     ((lockp->lockinfo.lockfile = WRITABLEFOPEN(lockfilename, "r+")) == NULL)) {
+ 	       /*
+ 		* maybe someone took away write permission so we could only
+ 		* get shared locks?
+@@ -226,6 +228,12 @@ krb5_error_code osa_adb_init_db(osa_adb_
+      return OSA_ADB_OK;
+ }
+ 
++krb5_error_code osa_adb_init_db(osa_adb_db_t *dbp, char *filename,
++				char *lockfilename, int magic)
++{
++     return osa_adb_init_db_flags(dbp, filename, lockfilename, magic, 0);
++}
++
+ krb5_error_code osa_adb_fini_db(osa_adb_db_t db, int magic)
+ {
+      if (db->magic != magic)
 diff -up krb5-1.7/src/plugins/kdb/db2/kdb_db2.c krb5-1.7/src/plugins/kdb/db2/kdb_db2.c
---- krb5-1.7/src/plugins/kdb/db2/kdb_db2.c	2010-01-05 18:17:24.000000000 -0500
-+++ krb5-1.7/src/plugins/kdb/db2/kdb_db2.c	2010-01-05 18:35:24.000000000 -0500
-@@ -1745,13 +1745,10 @@ krb5_db2_db_rename(context, from, to)
-      * files must exist because krb5_db2_db_lock, called below,
-      * will fail otherwise.
+--- krb5-1.7/src/plugins/kdb/db2/kdb_db2.c	2010-01-05 15:49:47.000000000 -0500
++++ krb5-1.7/src/plugins/kdb/db2/kdb_db2.c	2010-01-05 17:45:33.000000000 -0500
+@@ -298,8 +298,8 @@ krb5_db2_db_set_hashfirst(krb5_context c
+  * initialization for data base routines.
+  */
+ 
+-krb5_error_code
+-krb5_db2_db_init(krb5_context context)
++static krb5_error_code
++krb5_db2_db_init_flags(krb5_context context, int flags)
+ {
+     char   *filename = NULL;
+     krb5_db2_context *db_ctx;
+@@ -327,7 +327,7 @@ krb5_db2_db_init(krb5_context context)
+      * should be opened read/write so that write locking can work with
+      * POSIX systems
       */
--    db = k5db2_dbopen(db_ctx, to, O_RDWR|O_CREAT, 0600, 0);
--    if (db == NULL) {
--	retval = errno;
-+    retval = krb5_db2_db_create(context, to, 0);
-+    if (retval != 0 && retval != EEXIST)
- 	goto errout;
--    }
--    else
--	(*db->close)(db);
+-    if ((db_ctx->db_lf_file = THREEPARAMOPEN(filename, O_RDWR, 0666)) < 0) {
++    if ((db_ctx->db_lf_file = THREEPARAMOPEN(filename, O_RDWR | (flags & O_CREAT), 0666)) < 0) {
+ 	if ((db_ctx->db_lf_file = THREEPARAMOPEN(filename, O_RDONLY, 0666)) < 0) {
+ 	    retval = errno;
+ 	    goto err_out;
+@@ -345,8 +345,9 @@ krb5_db2_db_init(krb5_context context)
+     snprintf(policy_lock_name, sizeof(policy_lock_name),
+ 	     "%s.lock", policy_db_name);
+ 
+-    if ((retval = osa_adb_init_db(&db_ctx->policy_db, policy_db_name,
+-				  policy_lock_name, OSA_ADB_POLICY_DB_MAGIC)))
++    if ((retval = osa_adb_init_db_flags(&db_ctx->policy_db, policy_db_name,
++				        policy_lock_name,
++					OSA_ADB_POLICY_DB_MAGIC, flags)))
+     {
+ 	goto err_out;
+     }
+@@ -358,6 +359,12 @@ krb5_db2_db_init(krb5_context context)
+     return (retval);
+ }
+ 
++krb5_error_code
++krb5_db2_db_init(krb5_context context)
++{
++    return krb5_db2_db_init_flags(context, 0);
++}
 +
-     /*
-      * Set the database to the target, so that other processes sharing
-      * the target will stop their activity, and notice the new database.
-@@ -1764,25 +1761,6 @@ krb5_db2_db_rename(context, from, to)
+ /*
+  * gracefully shut down database--must be called by ANY program that does
+  * a krb5_db2_db_init
+@@ -1760,7 +1767,7 @@ krb5_db2_db_rename(context, from, to)
+     if (retval)
+ 	goto errout;
+ 
+-    retval = krb5_db2_db_init(context);
++    retval = krb5_db2_db_init_flags(context, O_CREAT);
      if (retval)
  	goto errout;
  
--    {
--	/* Ugly brute force hack.
--
--	   Should be going through nice friendly helper routines for
--	   this, but it's a mess of jumbled so-called interfaces right
--	   now.  */
--	char    policy[2048], new_policy[2048];
--	assert (strlen(db_ctx->db_name) < 2000);
--	snprintf(policy, sizeof(policy), "%s.kadm5", db_ctx->db_name);
--	snprintf(new_policy, sizeof(new_policy),
--		 "%s~.kadm5", db_ctx->db_name);
--	if (0 != rename(new_policy, policy)) {
--	    retval = errno;
--	    goto errout;
--	}
--	strlcat(new_policy, ".lock",sizeof(new_policy));
--	(void) unlink(new_policy);
--    }
--
-     db_ctx->db_lf_name = gen_dbsuffix(db_ctx->db_name, KDB2_LOCK_EXT);
-     if (db_ctx->db_lf_name == NULL) {
- 	retval = ENOMEM;
+diff -up krb5-1.7/src/plugins/kdb/db2/policy_db.h krb5-1.7/src/plugins/kdb/db2/policy_db.h
+--- krb5-1.7/src/plugins/kdb/db2/policy_db.h	2010-01-05 17:24:44.000000000 -0500
++++ krb5-1.7/src/plugins/kdb/db2/policy_db.h	2010-01-05 17:30:46.000000000 -0500
+@@ -75,6 +75,8 @@ krb5_error_code   osa_adb_rename_db(char
+ 				  char *fileto, char *lockto, int magic);
+ krb5_error_code	osa_adb_init_db(osa_adb_db_t *dbp, char *filename,
+ 				char *lockfile, int magic);
++krb5_error_code	osa_adb_init_db_flags(osa_adb_db_t *dbp, char *filename,
++				      char *lockfile, int magic, int flags);
+ krb5_error_code	osa_adb_fini_db(osa_adb_db_t db, int magic);
+ krb5_error_code	osa_adb_get_lock(osa_adb_db_t db, int mode);
+ krb5_error_code	osa_adb_release_lock(osa_adb_db_t db);




More information about the fedora-extras-commits mailing list