fix
[oweals/gnunet.git] / src / util / crypto_rsa.c
index 4a0a66b0abd6633957baa3c8c259b4cca1d34657..5820065301f0a20b541600b151bc74ab91dd6ec8 100644 (file)
@@ -578,12 +578,23 @@ GNUNET_CRYPTO_rsa_key_create_from_file (const char *filename)
                                   GNUNET_DISK_OPEN_CREATE |
                                   GNUNET_DISK_OPEN_FAILIFEXISTS,
                                   GNUNET_DISK_PERM_USER_READ |
-                                  GNUNET_DISK_PERM_USER_WRITE |
-                                  GNUNET_DISK_PERM_GROUP_READ);
+                                  GNUNET_DISK_PERM_USER_WRITE);
       if (NULL == fd)
         {
           if (errno == EEXIST)
-            continue;
+           {         
+             if (GNUNET_YES != GNUNET_DISK_file_test (filename))
+               {
+                 /* must exist but not be accessible, fail for good! */
+                 if (0 != ACCESS (filename, R_OK))                 
+                   GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+                                             "access", filename);
+                 else
+                   GNUNET_break (0); /* what is going on!? */
+                 return NULL;
+               }
+             continue;
+           }
           GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
                                     "open", filename);
           return NULL;
@@ -648,7 +659,7 @@ GNUNET_CRYPTO_rsa_key_create_from_file (const char *filename)
                                  sizeof (struct RsaPrivateKeyBinaryEncoded),
                                  GNUNET_NO))
         {
-          if (0 == ++cnt % 10)
+          if (0 == ++cnt % 60)
             {
               ec = errno;
               GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -768,6 +779,8 @@ GNUNET_CRYPTO_rsa_encrypt (const void *block,
 
   GNUNET_assert (size <= sizeof (GNUNET_HashCode));
   pubkey = public2PrivateKey (publicKey);
+  if (pubkey == NULL)
+    return GNUNET_SYSERR;
   isize = size;
   GNUNET_assert (0 ==
                  gcry_mpi_scan (&val, GCRYMPI_FMT_USG, block, isize, &isize));