From a26fbdd37cf08b1de984319565646e04f140f046 Mon Sep 17 00:00:00 2001
From: Marc Fiuczynski <mef@cs.princeton.edu>
Date: Fri, 17 Jul 2009 04:05:35 +0000
Subject: [PATCH] use a temp file to write the keys

---
 plugins/specialaccounts.py | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/plugins/specialaccounts.py b/plugins/specialaccounts.py
index ad4c2cf..a6c07b0 100644
--- a/plugins/specialaccounts.py
+++ b/plugins/specialaccounts.py
@@ -38,16 +38,21 @@ def GetSlivers(plc, data, conf):
         if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
         auth_keys = dot_ssh + '/authorized_keys'
 	logger.log("new keys = %s" % auth_keys)
-	auth_file = file(auth_keys,"w")
+
+        fd, fname = tempfile.mkstemp('','authorized_keys',dot_ssh)
 	for key in new_keys:
-		auth_file.write(key)
-		auth_file.write("\n")
-	auth_file.close()
+            os.write(fd,key)
+            os.write(fd,'\n')
+
+        os.close(fd)
+        if os.path.exists(auth_keys):
+            os.unlink(auth_keys)
+        os.rename(fname,auth_keys)
 
         # set permissions properly
         os.chmod(dot_ssh, 0700)
-        os.chmod(auth_keys, 0600)
         os.chown(dot_ssh, uid,gid)
+        os.chmod(auth_keys, 0600)
         os.chown(auth_keys, uid,gid)
 
         logger.log('specialacounts: installed ssh keys for %s' % name)
-- 
2.47.0