--- /tmp/network-manager-0.8~a~git.20091013t193206.679d548/libnm-util/crypto.c 2009-10-15 00:03:07.000000000 +0200 +++ network-manager-0.8~a~git.20091013t193206.679d548/libnm-util/crypto.c 2010-06-14 22:49:01.000000000 +0200 @@ -572,6 +572,9 @@ GError **error) { GByteArray *array; + char *iv = NULL; + char *cipher = NULL; + GByteArray *data; g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (out_file_format != NULL, NULL); @@ -587,6 +590,22 @@ if (crypto_is_pkcs12_data (array)) { *out_file_format = NM_CRYPTO_FILE_FORMAT_PKCS12; g_clear_error (error); + + /* Try PEM (DSA) */ + } else if ((data = parse_old_openssl_key_file (array, NM_CRYPTO_KEY_TYPE_DSA, &cipher, &iv, error))) { + *out_file_format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; + g_free (cipher); + g_free (iv); + g_byte_array_free (data, TRUE); + g_clear_error (error); + + /* Try PEM (RSA) */ + } else if ((data = parse_old_openssl_key_file (array, NM_CRYPTO_KEY_TYPE_RSA, &cipher, &iv, error))) { + *out_file_format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; + g_free (cipher); + g_free (iv); + g_byte_array_free (data, TRUE); + g_clear_error (error); } else { g_byte_array_free (array, TRUE); array = NULL;