1111 *
1212 *
1313 * IDENTIFICATION
14- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.93 2007/02/1602:59:41 momjian Exp $
14+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.94 2007/02/1617:07:00 tgl Exp $
1515 *
1616 * NOTES
1717 * [ Most of these notes are wrong/obsolete, but perhaps not all ]
@@ -619,7 +619,7 @@ client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
619619char * engine_env = getenv ("PGSSLKEY" );
620620char * engine_colon = strchr (engine_env ,':' );
621621char * engine_str ;
622- ENGINE * engine_ptr = NULL ;
622+ ENGINE * engine_ptr ;
623623
624624if (!engine_colon )
625625{
@@ -630,34 +630,38 @@ client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
630630
631631engine_str = malloc (engine_colon - engine_env + 1 );
632632strlcpy (engine_str ,engine_env ,engine_colon - engine_env + 1 );
633- if ((engine_ptr = ENGINE_by_id (engine_str ))== NULL )
633+ engine_ptr = ENGINE_by_id (engine_str );
634+ if (engine_ptr == NULL )
634635{
635636char * err = SSLerrmessage ();
636637
637638printfPQExpBuffer (& conn -> errorMessage ,
638- libpq_gettext ("could not load SSL engine \"%s\":%s\n" ),engine_str , err );
639- free ( engine_str );
639+ libpq_gettext ("could not load SSL engine \"%s\": %s\n" ),
640+ engine_str , err );
640641SSLerrfree (err );
642+ free (engine_str );
641643return 0 ;
642644}
643- if ((* pkey = ENGINE_load_private_key (engine_ptr ,
644- engine_colon + 1 ,NULL ,NULL ))== NULL )
645+
646+ * pkey = ENGINE_load_private_key (engine_ptr ,engine_colon + 1 ,
647+ NULL ,NULL );
648+ if (* pkey == NULL )
645649{
646650char * err = SSLerrmessage ();
647651
648652printfPQExpBuffer (& conn -> errorMessage ,
649- libpq_gettext ("could not read private SSL key%s from engine \"%s\": %s\n" ),
650- engine_colon + 1 ,engine_str ,err );
653+ libpq_gettext ("could not read private SSL key\"%s\" from engine \"%s\": %s\n" ),
654+ engine_colon + 1 ,engine_str ,err );
651655SSLerrfree (err );
652656free (engine_str );
653657return 0 ;
654658}
655659free (engine_str );
656660}
657661else
658- #endif
662+ #endif /* use PGSSLKEY */
659663{
660- /* read the user key from file*/
664+ /* read the user key from file */
661665snprintf (fnbuf ,sizeof (fnbuf ),"%s/%s" ,homedir ,USER_KEY_FILE );
662666if (stat (fnbuf ,& buf )== -1 )
663667{
@@ -666,7 +670,7 @@ client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
666670fnbuf );
667671return 0 ;
668672}
669- #ifndef WIN32
673+ #ifndef WIN32
670674if (!S_ISREG (buf .st_mode )|| (buf .st_mode & 0077 )||
671675buf .st_uid != geteuid ())
672676{
@@ -675,23 +679,23 @@ client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
675679fnbuf );
676680return 0 ;
677681}
678- #endif
682+ #endif
679683if ((fp = fopen (fnbuf ,"r" ))== NULL )
680684{
681685printfPQExpBuffer (& conn -> errorMessage ,
682686libpq_gettext ("could not open private key file \"%s\": %s\n" ),
683687fnbuf ,pqStrerror (errno ,sebuf ,sizeof (sebuf )));
684688return 0 ;
685689}
686- #ifndef WIN32
690+ #ifndef WIN32
687691if (fstat (fileno (fp ),& buf2 )== -1 ||
688692buf .st_dev != buf2 .st_dev || buf .st_ino != buf2 .st_ino )
689693{
690694printfPQExpBuffer (& conn -> errorMessage ,
691695libpq_gettext ("private key file \"%s\" changed during execution\n" ),fnbuf );
692696return 0 ;
693697}
694- #endif
698+ #endif
695699if (PEM_read_PrivateKey (fp ,pkey ,NULL ,NULL )== NULL )
696700{
697701char * err = SSLerrmessage ();
@@ -705,6 +709,7 @@ client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
705709}
706710fclose (fp );
707711}
712+
708713/* verify that the cert and key go together */
709714if (!X509_check_private_key (* x509 ,* pkey ))
710715{
@@ -788,7 +793,7 @@ init_ssl_system(PGconn *conn)
788793{
789794if (pq_initssllib )
790795{
791- #if ( SSLEAY_VERSION_NUMBER >=0x00907000L )
796+ #if SSLEAY_VERSION_NUMBER >=0x00907000L
792797OPENSSL_config (NULL );
793798#endif
794799SSL_library_init ();