diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 37 | ||||
-rw-r--r-- | src/interfaces/libpq/libpq-int.h | 14 |
2 files changed, 16 insertions, 35 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 3ca7e0560cd..cb3c431e328 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -304,6 +304,10 @@ static const internalPQconninfoOption PQconninfoOptions[] = { "SSL-Client-Key", "", 64, offsetof(struct pg_conn, sslkey)}, + {"sslpassword", NULL, NULL, NULL, + "SSL-Client-Key-Password", "*", 20, + offsetof(struct pg_conn, sslpassword)}, + {"sslrootcert", "PGSSLROOTCERT", NULL, NULL, "SSL-Root-Certificate", "", 64, offsetof(struct pg_conn, sslrootcert)}, @@ -317,30 +321,21 @@ static const internalPQconninfoOption PQconninfoOptions[] = { offsetof(struct pg_conn, requirepeer)}, /* - * Expose gssencmode similarly to sslmode - we can still handle "disable" - * and "prefer". + * As with SSL, all GSS options are exposed even in builds that don't have + * support. */ {"gssencmode", "PGGSSENCMODE", DefaultGSSMode, NULL, "GSSENC-Mode", "", 7, /* sizeof("disable") == 7 */ offsetof(struct pg_conn, gssencmode)}, -#if defined(ENABLE_GSS) || defined(ENABLE_SSPI) /* Kerberos and GSSAPI authentication support specifying the service name */ {"krbsrvname", "PGKRBSRVNAME", PG_KRB_SRVNAM, NULL, "Kerberos-service-name", "", 20, offsetof(struct pg_conn, krbsrvname)}, -#endif - -#if defined(ENABLE_GSS) && defined(ENABLE_SSPI) - /* - * GSSAPI and SSPI both enabled, give a way to override which is used by - * default - */ {"gsslib", "PGGSSLIB", NULL, NULL, "GSS-library", "", 7, /* sizeof("gssapi") = 7 */ offsetof(struct pg_conn, gsslib)}, -#endif {"replication", NULL, NULL, NULL, "Replication", "D", 5, @@ -351,10 +346,6 @@ static const internalPQconninfoOption PQconninfoOptions[] = { "Target-Session-Attrs", "", 11, /* sizeof("read-write") = 11 */ offsetof(struct pg_conn, target_session_attrs)}, - {"sslpassword", NULL, NULL, NULL, - "SSL-Client-Key-Password", "*", 20, - offsetof(struct pg_conn, sslpassword)}, - /* Terminating entry --- MUST BE LAST */ {NULL, NULL, NULL, NULL, NULL, NULL, 0} @@ -3983,6 +3974,8 @@ freePGconn(PGconn *conn) free(conn->sslcert); if (conn->sslkey) free(conn->sslkey); + if (conn->sslpassword) + free(conn->sslpassword); if (conn->sslrootcert) free(conn->sslrootcert); if (conn->sslcrl) @@ -3991,14 +3984,14 @@ freePGconn(PGconn *conn) free(conn->sslcompression); if (conn->requirepeer) free(conn->requirepeer); - if (conn->connip) - free(conn->connip); if (conn->gssencmode) free(conn->gssencmode); -#if defined(ENABLE_GSS) || defined(ENABLE_SSPI) if (conn->krbsrvname) free(conn->krbsrvname); -#endif + if (conn->gsslib) + free(conn->gsslib); + if (conn->connip) + free(conn->connip); #ifdef ENABLE_GSS if (conn->gcred != GSS_C_NO_CREDENTIAL) { @@ -4015,10 +4008,6 @@ freePGconn(PGconn *conn) conn->gctx = NULL; } #endif -#if defined(ENABLE_GSS) && defined(ENABLE_SSPI) - if (conn->gsslib) - free(conn->gsslib); -#endif /* Note that conn->Pfdebug is not ours to close or free */ if (conn->last_query) free(conn->last_query); @@ -4034,8 +4023,6 @@ freePGconn(PGconn *conn) free(conn->target_session_attrs); termPQExpBuffer(&conn->errorMessage); termPQExpBuffer(&conn->workBuffer); - if (conn->sslpassword) - free(conn->sslpassword); free(conn); diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 7f5be7db7a1..e99cbf3739e 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -359,13 +359,14 @@ struct pg_conn char *sslcompression; /* SSL compression (0 or 1) */ char *sslkey; /* client key filename */ char *sslcert; /* client certificate filename */ + char *sslpassword; /* client key file password */ char *sslrootcert; /* root certificate filename */ char *sslcrl; /* certificate revocation list filename */ char *requirepeer; /* required peer credentials for local sockets */ - -#if defined(ENABLE_GSS) || defined(ENABLE_SSPI) + char *gssencmode; /* GSS mode (require,prefer,disable) */ char *krbsrvname; /* Kerberos service name */ -#endif + char *gsslib; /* What GSS library to use ("gssapi" or + * "sspi") */ /* Type of connection to make. Possible values: any, read-write. */ char *target_session_attrs; @@ -484,7 +485,6 @@ struct pg_conn #endif /* USE_OPENSSL */ #endif /* USE_SSL */ - char *gssencmode; /* GSS mode (require,prefer,disable) */ #ifdef ENABLE_GSS gss_ctx_id_t gctx; /* GSS context */ gss_name_t gtarg_nam; /* GSS target name */ @@ -496,10 +496,6 @@ struct pg_conn #endif #ifdef ENABLE_SSPI -#ifdef ENABLE_GSS - char *gsslib; /* What GSS library to use ("gssapi" or - * "sspi") */ -#endif CredHandle *sspicred; /* SSPI credentials handle */ CtxtHandle *sspictx; /* SSPI context */ char *sspitarget; /* SSPI target name */ @@ -512,8 +508,6 @@ struct pg_conn /* Buffer for receiving various parts of messages */ PQExpBufferData workBuffer; /* expansible string */ - - char *sslpassword; /* client key file password */ }; /* PGcancel stores all data necessary to cancel a connection. A copy of this |