rpms/nss_db/devel nss_db-2.2-makedb-atomic.patch,NONE,1.1

Nalin Somabhai Dahyabhai (nalin) fedora-extras-commits at redhat.com
Thu Aug 7 16:51:58 UTC 2008


Author: nalin

Update of /cvs/pkgs/rpms/nss_db/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24988

Added Files:
	nss_db-2.2-makedb-atomic.patch 
Log Message:
- create and populate new db files, moving them in place afterward (patch
  from Kelsey Cummings, CentOS #1987)


nss_db-2.2-makedb-atomic.patch:

--- NEW FILE nss_db-2.2-makedb-atomic.patch ---
--- nss_db-2.2/makedb.c	2008-08-04 14:21:06.000000000 -0700
+++ nss_db-2.2/makedb.c	2008-08-04 14:24:08.000000000 -0700
@@ -31,6 +31,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <unistd.h>
 
 #ifdef SELINUX
 #include <selinux/selinux.h>
@@ -110,6 +111,7 @@
 main (int argc, char *argv[])
 {
   const char *input_name;
+  char *output_name_temp;
   FILE *input_file;
   DB *db_file;
   int status;
@@ -184,10 +186,17 @@
 	mode = st.st_mode & ACCESSPERMS;
     }
 
+  /* Get name for tempfile using output_name and pid */
+  status = asprintf(&output_name_temp,"%s.%s.%d",output_name,"tmp",getpid());
+  if ( status < 0 )
+  {
+     error (EXIT_FAILURE, 0, gettext ("cannot generate temp file name"));
+  }  
+
   /* Open output file.  This must not be standard output so we don't
      handle "-" and "/dev/stdout" special.  */
   set_file_creation_context (output_name, mode);
-  status = db_open (output_name, DB_BTREE, DB_CREATE | DB_TRUNCATE, mode,
+  status = db_open (output_name_temp, DB_BTREE, DB_CREATE | DB_TRUNCATE, mode,
 		    NULL, NULL, &db_file);
   set_file_creation_context (NULL, 0);
   if (status)
@@ -203,6 +212,12 @@
     fclose (input_file);
   db_file->close (db_file, 0);
 
+  /* all done, move temp file over real file */
+  status = rename(output_name_temp,output_name);
+  if ( status < 0 )
+    error (EXIT_FAILURE, errno, gettext ("cannot rename `%s' to `%s'"),
+           output_name_temp, output_name);
+
   return status;
 }
 




More information about the scm-commits mailing list