[Sugar-devel] [PATCH v2 sugar] Recreate corrupted key pair (fixes SL#1568)

Sascha Silbe silbe at activitycentral.com
Mon Mar 26 11:10:31 EDT 2012


Recreate a corrupted key pair instead of leaving it alone and failing horribly
later.

This case was encountered two years ago (OLPC#9612 [2]) and recently again
in Nicaragua.

[1] https://bugs.sugarlabs.org/ticket/1568
[2] https://dev.laptop.org/ticket/9612

Signed-off-by: Sascha Silbe <silbe at activitycentral.com>
Signed-off-by: Daniel Drake <dsd at laptop.org>
Reviewed-by: James Cameron <quozl at laptop.org>
---
 v1->v2: updated my email address, fixed some minor style issues

 Thanks to Daniel for digging this up! We indeed forgot to review and apply
 the sugar part of the patch series.

 src/jarabe/intro/window.py |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/jarabe/intro/window.py b/src/jarabe/intro/window.py
index f7937b1..a6a2a29 100644
--- a/src/jarabe/intro/window.py
+++ b/src/jarabe/intro/window.py
@@ -15,6 +15,7 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

 import os
+import os.path
 import logging
 from gettext import gettext as _
 import gconf
@@ -24,6 +25,7 @@ import gtk
 import gobject

 from sugar import env
+from sugar import profile
 from sugar.graphics import style
 from sugar.graphics.icon import Icon
 from sugar.graphics.xocolor import XoColor
@@ -43,16 +45,27 @@ def create_profile(name, color=None):
     client.set_string('/desktop/sugar/user/color', color.to_string())
     client.suggest_sync()

+    if profile.get_pubkey() and profile.get_profile().privkey_hash:
+        logging.info('Valid key pair found, skipping generation.')
+        return
+
     # Generate keypair
     import commands
     keypath = os.path.join(env.get_profile_path(), 'owner.key')
-    if not os.path.isfile(keypath):
-        cmd = "ssh-keygen -q -t dsa -f %s -C '' -N ''" % keypath
-        (s, o) = commands.getstatusoutput(cmd)
-        if s != 0:
-            logging.error('Could not generate key pair: %d %s', s, o)
-    else:
-        logging.error('Keypair exists, skip generation.')
+    if os.path.exists(keypath):
+        os.rename(keypath, keypath + '.broken')
+        logging.warning('Existing private key %s moved to %s.broken',
+                        keypath, keypath)
+
+    if os.path.exists(keypath + '.pub'):
+        os.rename(keypath + '.pub', keypath + '.pub.broken')
+        logging.warning('Existing public key %s.pub moved to %s.pub.broken',
+                        keypath, keypath)
+
+    cmd = "ssh-keygen -q -t dsa -f %s -C '' -N ''" % (keypath, )
+    (s, o) = commands.getstatusoutput(cmd)
+    if s != 0:
+        logging.error('Could not generate key pair: %d %s', s, o)


 class _Page(gtk.VBox):
--
1.7.9



More information about the Sugar-devel mailing list