X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fcrypto_rsa.c;h=5820065301f0a20b541600b151bc74ab91dd6ec8;hb=d47f834c1f2de41c9fba74a4b6928e7c8e0679e0;hp=4a0a66b0abd6633957baa3c8c259b4cca1d34657;hpb=651ce7813c3726accadc0bf54952ed8a7d22407d;p=oweals%2Fgnunet.git diff --git a/src/util/crypto_rsa.c b/src/util/crypto_rsa.c index 4a0a66b0a..582006530 100644 --- a/src/util/crypto_rsa.c +++ b/src/util/crypto_rsa.c @@ -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));