| 
					
				 | 
			
			
				@@ -4,6 +4,7 @@ import socket 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import tempfile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import uuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from borg.constants import UMASK_DEFAULT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from borg.helpers import safe_unlink 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 """ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -193,6 +194,15 @@ class SaveFile: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if exc_type is not None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             safe_unlink(self.tmp_fname)  # with-body has failed, clean up tmp file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return  # continue processing the exception normally 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # tempfile.mkstemp always uses owner-only file permissions for the temp file, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # but as we'll rename it to the non-temp permanent file now, we need to respect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # the umask and change the file mode to what a normally created file would have. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # thanks to the crappy os.umask api, we can't query the umask without setting it. :-( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        umask = os.umask(UMASK_DEFAULT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        os.umask(umask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        os.chmod(self.tmp_fname, mode=0o666 & ~ umask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             os.replace(self.tmp_fname, self.path)  # POSIX: atomic rename 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except OSError: 
			 |