mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
pgindent run for 8.3.
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.132 2007/09/25 16:29:34 petere Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.133 2007/11/15 21:14:46 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -139,8 +139,8 @@ pg_krb5_init(PQExpBuffer errorMessage, struct krb5_info * info)
|
||||
if (retval)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
"pg_krb5_init: krb5_init_context: %s\n",
|
||||
error_message(retval));
|
||||
"pg_krb5_init: krb5_init_context: %s\n",
|
||||
error_message(retval));
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
@ -148,8 +148,8 @@ pg_krb5_init(PQExpBuffer errorMessage, struct krb5_info * info)
|
||||
if (retval)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
"pg_krb5_init: krb5_cc_default: %s\n",
|
||||
error_message(retval));
|
||||
"pg_krb5_init: krb5_cc_default: %s\n",
|
||||
error_message(retval));
|
||||
krb5_free_context(info->pg_krb5_context);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
@ -159,8 +159,8 @@ pg_krb5_init(PQExpBuffer errorMessage, struct krb5_info * info)
|
||||
if (retval)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
"pg_krb5_init: krb5_cc_get_principal: %s\n",
|
||||
error_message(retval));
|
||||
"pg_krb5_init: krb5_cc_get_principal: %s\n",
|
||||
error_message(retval));
|
||||
krb5_cc_close(info->pg_krb5_context, info->pg_krb5_ccache);
|
||||
krb5_free_context(info->pg_krb5_context);
|
||||
return STATUS_ERROR;
|
||||
@ -170,8 +170,8 @@ pg_krb5_init(PQExpBuffer errorMessage, struct krb5_info * info)
|
||||
if (retval)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
"pg_krb5_init: krb5_unparse_name: %s\n",
|
||||
error_message(retval));
|
||||
"pg_krb5_init: krb5_unparse_name: %s\n",
|
||||
error_message(retval));
|
||||
krb5_free_principal(info->pg_krb5_context, info->pg_krb5_client);
|
||||
krb5_cc_close(info->pg_krb5_context, info->pg_krb5_ccache);
|
||||
krb5_free_context(info->pg_krb5_context);
|
||||
@ -235,7 +235,7 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
if (!conn->pghost)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
"pg_krb5_sendauth: hostname must be specified for Kerberos authentication\n");
|
||||
"pg_krb5_sendauth: hostname must be specified for Kerberos authentication\n");
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
@ -243,14 +243,14 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
if (ret != STATUS_OK)
|
||||
return ret;
|
||||
|
||||
retval = krb5_sname_to_principal(info.pg_krb5_context, conn->pghost,
|
||||
retval = krb5_sname_to_principal(info.pg_krb5_context, conn->pghost,
|
||||
conn->krbsrvname,
|
||||
KRB5_NT_SRV_HST, &server);
|
||||
if (retval)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
"pg_krb5_sendauth: krb5_sname_to_principal: %s\n",
|
||||
error_message(retval));
|
||||
"pg_krb5_sendauth: krb5_sname_to_principal: %s\n",
|
||||
error_message(retval));
|
||||
pg_krb5_destroy(&info);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
@ -265,14 +265,14 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
char sebuf[256];
|
||||
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("could not set socket to blocking mode: %s\n"), pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
libpq_gettext("could not set socket to blocking mode: %s\n"), pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
krb5_free_principal(info.pg_krb5_context, server);
|
||||
pg_krb5_destroy(&info);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
retval = krb5_sendauth(info.pg_krb5_context, &auth_context,
|
||||
(krb5_pointer) & conn->sock, (char *) conn->krbsrvname,
|
||||
(krb5_pointer) & conn->sock, (char *) conn->krbsrvname,
|
||||
info.pg_krb5_client, server,
|
||||
AP_OPTS_MUTUAL_REQUIRED,
|
||||
NULL, 0, /* no creds, use ccache instead */
|
||||
@ -284,12 +284,12 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
#if defined(HAVE_KRB5_ERROR_TEXT_DATA)
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
||||
(int) err_ret->text.length, err_ret->text.data);
|
||||
(int) err_ret->text.length, err_ret->text.data);
|
||||
#elif defined(HAVE_KRB5_ERROR_E_DATA)
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
||||
(int) err_ret->e_data->length,
|
||||
(const char *) err_ret->e_data->data);
|
||||
(int) err_ret->e_data->length,
|
||||
(const char *) err_ret->e_data->data);
|
||||
#else
|
||||
#error "bogus configuration"
|
||||
#endif
|
||||
@ -297,7 +297,7 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
else
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
"krb5_sendauth: %s\n", error_message(retval));
|
||||
"krb5_sendauth: %s\n", error_message(retval));
|
||||
}
|
||||
|
||||
if (err_ret)
|
||||
@ -314,7 +314,7 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("could not restore non-blocking mode on socket: %s\n"),
|
||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
ret = STATUS_ERROR;
|
||||
}
|
||||
pg_krb5_destroy(&info);
|
||||
@ -335,7 +335,7 @@ pg_krb5_sendauth(PGconn *conn)
|
||||
* from src/athena/auth/krb5/src/lib/gssapi/generic/gssapi_generic.c
|
||||
*/
|
||||
static const gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_desc =
|
||||
{10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04"};
|
||||
{10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04"};
|
||||
static GSS_DLLIMP gss_OID GSS_C_NT_HOSTBASED_SERVICE = &GSS_C_NT_HOSTBASED_SERVICE_desc;
|
||||
#endif
|
||||
|
||||
@ -345,22 +345,23 @@ static GSS_DLLIMP gss_OID GSS_C_NT_HOSTBASED_SERVICE = &GSS_C_NT_HOSTBASED_SERVI
|
||||
*/
|
||||
static void
|
||||
pg_GSS_error_int(char *mprefix, char *msg, int msglen,
|
||||
OM_uint32 stat, int type)
|
||||
OM_uint32 stat, int type)
|
||||
{
|
||||
int curlen = 0;
|
||||
OM_uint32 lmaj_s, lmin_s;
|
||||
gss_buffer_desc lmsg;
|
||||
OM_uint32 msg_ctx = 0;
|
||||
int curlen = 0;
|
||||
OM_uint32 lmaj_s,
|
||||
lmin_s;
|
||||
gss_buffer_desc lmsg;
|
||||
OM_uint32 msg_ctx = 0;
|
||||
|
||||
do
|
||||
do
|
||||
{
|
||||
lmaj_s = gss_display_status(&lmin_s, stat, type,
|
||||
GSS_C_NO_OID, &msg_ctx, &lmsg);
|
||||
lmaj_s = gss_display_status(&lmin_s, stat, type,
|
||||
GSS_C_NO_OID, &msg_ctx, &lmsg);
|
||||
|
||||
if (curlen < msglen)
|
||||
{
|
||||
snprintf(msg + curlen, msglen - curlen, "%s: %s\n",
|
||||
mprefix, (char *)lmsg.value);
|
||||
mprefix, (char *) lmsg.value);
|
||||
curlen += lmsg.length;
|
||||
}
|
||||
gss_release_buffer(&lmin_s, &lmsg);
|
||||
@ -373,42 +374,44 @@ pg_GSS_error_int(char *mprefix, char *msg, int msglen,
|
||||
*/
|
||||
static void
|
||||
pg_GSS_error(char *mprefix, PGconn *conn,
|
||||
OM_uint32 maj_stat, OM_uint32 min_stat)
|
||||
OM_uint32 maj_stat, OM_uint32 min_stat)
|
||||
{
|
||||
int mlen;
|
||||
int mlen;
|
||||
|
||||
/* Fetch major error codes */
|
||||
pg_GSS_error_int(mprefix, conn->errorMessage.data,
|
||||
conn->errorMessage.maxlen, maj_stat, GSS_C_GSS_CODE);
|
||||
pg_GSS_error_int(mprefix, conn->errorMessage.data,
|
||||
conn->errorMessage.maxlen, maj_stat, GSS_C_GSS_CODE);
|
||||
mlen = strlen(conn->errorMessage.data);
|
||||
|
||||
/* If there is room left, try to add the minor codes as well */
|
||||
if (mlen < conn->errorMessage.maxlen - 1)
|
||||
pg_GSS_error_int(mprefix, conn->errorMessage.data + mlen,
|
||||
pg_GSS_error_int(mprefix, conn->errorMessage.data + mlen,
|
||||
conn->errorMessage.maxlen - mlen, min_stat, GSS_C_MECH_CODE);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Continue GSS authentication with next token as needed.
|
||||
*/
|
||||
static int
|
||||
pg_GSS_continue(PGconn *conn)
|
||||
{
|
||||
OM_uint32 maj_stat, min_stat, lmin_s;
|
||||
OM_uint32 maj_stat,
|
||||
min_stat,
|
||||
lmin_s;
|
||||
|
||||
maj_stat = gss_init_sec_context(&min_stat,
|
||||
GSS_C_NO_CREDENTIAL,
|
||||
&conn->gctx,
|
||||
conn->gtarg_nam,
|
||||
GSS_C_NO_OID,
|
||||
GSS_C_MUTUAL_FLAG,
|
||||
0,
|
||||
GSS_C_NO_CHANNEL_BINDINGS,
|
||||
(conn->gctx==GSS_C_NO_CONTEXT)?GSS_C_NO_BUFFER:&conn->ginbuf,
|
||||
NULL,
|
||||
&conn->goutbuf,
|
||||
NULL,
|
||||
NULL);
|
||||
GSS_C_NO_CREDENTIAL,
|
||||
&conn->gctx,
|
||||
conn->gtarg_nam,
|
||||
GSS_C_NO_OID,
|
||||
GSS_C_MUTUAL_FLAG,
|
||||
0,
|
||||
GSS_C_NO_CHANNEL_BINDINGS,
|
||||
(conn->gctx == GSS_C_NO_CONTEXT) ? GSS_C_NO_BUFFER : &conn->ginbuf,
|
||||
NULL,
|
||||
&conn->goutbuf,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (conn->gctx != GSS_C_NO_CONTEXT)
|
||||
{
|
||||
@ -420,13 +423,13 @@ pg_GSS_continue(PGconn *conn)
|
||||
if (conn->goutbuf.length != 0)
|
||||
{
|
||||
/*
|
||||
* GSS generated data to send to the server. We don't care if it's
|
||||
* the first or subsequent packet, just send the same kind of
|
||||
* password packet.
|
||||
* GSS generated data to send to the server. We don't care if it's the
|
||||
* first or subsequent packet, just send the same kind of password
|
||||
* packet.
|
||||
*/
|
||||
if (pqPacketSend(conn, 'p',
|
||||
conn->goutbuf.value, conn->goutbuf.length)
|
||||
!= STATUS_OK)
|
||||
conn->goutbuf.value, conn->goutbuf.length)
|
||||
!= STATUS_OK)
|
||||
{
|
||||
gss_release_buffer(&lmin_s, &conn->goutbuf);
|
||||
return STATUS_ERROR;
|
||||
@ -437,8 +440,8 @@ pg_GSS_continue(PGconn *conn)
|
||||
if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED)
|
||||
{
|
||||
pg_GSS_error(libpq_gettext("GSSAPI continuation error"),
|
||||
conn,
|
||||
maj_stat, min_stat);
|
||||
conn,
|
||||
maj_stat, min_stat);
|
||||
gss_release_name(&lmin_s, &conn->gtarg_nam);
|
||||
if (conn->gctx)
|
||||
gss_delete_sec_context(&lmin_s, &conn->gctx, GSS_C_NO_BUFFER);
|
||||
@ -451,54 +454,55 @@ pg_GSS_continue(PGconn *conn)
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Send initial GSS authentication token
|
||||
*/
|
||||
static int
|
||||
pg_GSS_startup(PGconn *conn)
|
||||
{
|
||||
OM_uint32 maj_stat, min_stat;
|
||||
OM_uint32 maj_stat,
|
||||
min_stat;
|
||||
int maxlen;
|
||||
gss_buffer_desc temp_gbuf;
|
||||
gss_buffer_desc temp_gbuf;
|
||||
|
||||
if (conn->gctx)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("duplicate GSS authentication request\n"));
|
||||
libpq_gettext("duplicate GSS authentication request\n"));
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Import service principal name so the proper ticket can be
|
||||
* acquired by the GSSAPI system.
|
||||
* Import service principal name so the proper ticket can be acquired by
|
||||
* the GSSAPI system.
|
||||
*/
|
||||
maxlen = NI_MAXHOST + strlen(conn->krbsrvname) + 2;
|
||||
temp_gbuf.value = (char*)malloc(maxlen);
|
||||
snprintf(temp_gbuf.value, maxlen, "%s@%s",
|
||||
conn->krbsrvname, conn->pghost);
|
||||
temp_gbuf.value = (char *) malloc(maxlen);
|
||||
snprintf(temp_gbuf.value, maxlen, "%s@%s",
|
||||
conn->krbsrvname, conn->pghost);
|
||||
temp_gbuf.length = strlen(temp_gbuf.value);
|
||||
|
||||
maj_stat = gss_import_name(&min_stat, &temp_gbuf,
|
||||
GSS_C_NT_HOSTBASED_SERVICE, &conn->gtarg_nam);
|
||||
GSS_C_NT_HOSTBASED_SERVICE, &conn->gtarg_nam);
|
||||
free(temp_gbuf.value);
|
||||
|
||||
if (maj_stat != GSS_S_COMPLETE)
|
||||
{
|
||||
pg_GSS_error(libpq_gettext("GSSAPI name import error"),
|
||||
conn,
|
||||
maj_stat, min_stat);
|
||||
pg_GSS_error(libpq_gettext("GSSAPI name import error"),
|
||||
conn,
|
||||
maj_stat, min_stat);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initial packet is the same as a continuation packet with
|
||||
* no initial context.
|
||||
* Initial packet is the same as a continuation packet with no initial
|
||||
* context.
|
||||
*/
|
||||
conn->gctx = GSS_C_NO_CONTEXT;
|
||||
|
||||
return pg_GSS_continue(conn);
|
||||
}
|
||||
#endif /* ENABLE_GSS */
|
||||
#endif /* ENABLE_GSS */
|
||||
|
||||
|
||||
#ifdef ENABLE_SSPI
|
||||
@ -509,30 +513,30 @@ pg_GSS_startup(PGconn *conn)
|
||||
static void
|
||||
pg_SSPI_error(PGconn *conn, char *mprefix, SECURITY_STATUS r)
|
||||
{
|
||||
char sysmsg[256];
|
||||
char sysmsg[256];
|
||||
|
||||
if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, r, 0,
|
||||
sysmsg, sizeof(sysmsg), NULL) == 0)
|
||||
printfPQExpBuffer(&conn->errorMessage, "%s: sspi error %x",
|
||||
mprefix, (unsigned int)r);
|
||||
mprefix, (unsigned int) r);
|
||||
else
|
||||
printfPQExpBuffer(&conn->errorMessage, "%s: %s (%x)",
|
||||
mprefix, sysmsg, (unsigned int)r);
|
||||
mprefix, sysmsg, (unsigned int) r);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Continue SSPI authentication with next token as needed.
|
||||
*/
|
||||
static int
|
||||
pg_SSPI_continue(PGconn *conn)
|
||||
{
|
||||
SECURITY_STATUS r;
|
||||
CtxtHandle newContext;
|
||||
ULONG contextAttr;
|
||||
SecBufferDesc inbuf;
|
||||
SecBufferDesc outbuf;
|
||||
SecBuffer OutBuffers[1];
|
||||
SecBuffer InBuffers[1];
|
||||
SECURITY_STATUS r;
|
||||
CtxtHandle newContext;
|
||||
ULONG contextAttr;
|
||||
SecBufferDesc inbuf;
|
||||
SecBufferDesc outbuf;
|
||||
SecBuffer OutBuffers[1];
|
||||
SecBuffer InBuffers[1];
|
||||
|
||||
if (conn->sspictx != NULL)
|
||||
{
|
||||
@ -556,18 +560,18 @@ pg_SSPI_continue(PGconn *conn)
|
||||
outbuf.ulVersion = SECBUFFER_VERSION;
|
||||
|
||||
r = InitializeSecurityContext(conn->sspicred,
|
||||
conn->sspictx,
|
||||
conn->sspitarget,
|
||||
ISC_REQ_ALLOCATE_MEMORY,
|
||||
0,
|
||||
SECURITY_NETWORK_DREP,
|
||||
(conn->sspictx == NULL)?NULL:&inbuf,
|
||||
0,
|
||||
&newContext,
|
||||
&outbuf,
|
||||
&contextAttr,
|
||||
NULL);
|
||||
|
||||
conn->sspictx,
|
||||
conn->sspitarget,
|
||||
ISC_REQ_ALLOCATE_MEMORY,
|
||||
0,
|
||||
SECURITY_NETWORK_DREP,
|
||||
(conn->sspictx == NULL) ? NULL : &inbuf,
|
||||
0,
|
||||
&newContext,
|
||||
&outbuf,
|
||||
&contextAttr,
|
||||
NULL);
|
||||
|
||||
if (r != SEC_E_OK && r != SEC_I_CONTINUE_NEEDED)
|
||||
{
|
||||
pg_SSPI_error(conn, libpq_gettext("SSPI continuation error"), r);
|
||||
@ -589,8 +593,8 @@ pg_SSPI_continue(PGconn *conn)
|
||||
else
|
||||
{
|
||||
/*
|
||||
* On subsequent runs when we had data to send, free buffers that contained
|
||||
* this data.
|
||||
* On subsequent runs when we had data to send, free buffers that
|
||||
* contained this data.
|
||||
*/
|
||||
free(conn->ginbuf.value);
|
||||
conn->ginbuf.value = NULL;
|
||||
@ -598,23 +602,24 @@ pg_SSPI_continue(PGconn *conn)
|
||||
}
|
||||
|
||||
/*
|
||||
* If SSPI returned any data to be sent to the server (as it normally would),
|
||||
* send this data as a password packet.
|
||||
* If SSPI returned any data to be sent to the server (as it normally
|
||||
* would), send this data as a password packet.
|
||||
*/
|
||||
if (outbuf.cBuffers > 0)
|
||||
{
|
||||
if (outbuf.cBuffers != 1)
|
||||
{
|
||||
/*
|
||||
* This should never happen, at least not for Kerberos authentication. Keep check
|
||||
* in case it shows up with other authentication methods later.
|
||||
* This should never happen, at least not for Kerberos
|
||||
* authentication. Keep check in case it shows up with other
|
||||
* authentication methods later.
|
||||
*/
|
||||
printfPQExpBuffer(&conn->errorMessage, "SSPI returned invalid number of output buffers\n");
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
if (pqPacketSend(conn, 'p',
|
||||
outbuf.pBuffers[0].pvBuffer, outbuf.pBuffers[0].cbBuffer))
|
||||
outbuf.pBuffers[0].pvBuffer, outbuf.pBuffers[0].cbBuffer))
|
||||
{
|
||||
FreeContextBuffer(outbuf.pBuffers[0].pvBuffer);
|
||||
return STATUS_ERROR;
|
||||
@ -626,7 +631,7 @@ pg_SSPI_continue(PGconn *conn)
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Send initial SSPI authentication token.
|
||||
* If use_negotiate is 0, use kerberos authentication package which is
|
||||
* compatible with Unix. If use_negotiate is 1, use the negotiate package
|
||||
@ -635,8 +640,8 @@ pg_SSPI_continue(PGconn *conn)
|
||||
static int
|
||||
pg_SSPI_startup(PGconn *conn, int use_negotiate)
|
||||
{
|
||||
SECURITY_STATUS r;
|
||||
TimeStamp expire;
|
||||
SECURITY_STATUS r;
|
||||
TimeStamp expire;
|
||||
|
||||
conn->sspictx = NULL;
|
||||
|
||||
@ -650,7 +655,7 @@ pg_SSPI_startup(PGconn *conn, int use_negotiate)
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
r = AcquireCredentialsHandle(NULL, use_negotiate?"negotiate":"kerberos", SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, conn->sspicred, &expire);
|
||||
r = AcquireCredentialsHandle(NULL, use_negotiate ? "negotiate" : "kerberos", SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, conn->sspicred, &expire);
|
||||
if (r != SEC_E_OK)
|
||||
{
|
||||
pg_SSPI_error(conn, "acquire credentials failed", r);
|
||||
@ -660,16 +665,16 @@ pg_SSPI_startup(PGconn *conn, int use_negotiate)
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute target principal name. SSPI has a different format from GSSAPI, but
|
||||
* not more complex. We can skip the @REALM part, because Windows will fill that
|
||||
* in for us automatically.
|
||||
* Compute target principal name. SSPI has a different format from GSSAPI,
|
||||
* but not more complex. We can skip the @REALM part, because Windows will
|
||||
* fill that in for us automatically.
|
||||
*/
|
||||
if (conn->pghost == NULL)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage, libpq_gettext("host name must be specified\n"));
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
conn->sspitarget = malloc(strlen(conn->krbsrvname)+strlen(conn->pghost)+2);
|
||||
conn->sspitarget = malloc(strlen(conn->krbsrvname) + strlen(conn->pghost) + 2);
|
||||
if (!conn->sspitarget)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage, libpq_gettext("out of memory\n"));
|
||||
@ -685,7 +690,7 @@ pg_SSPI_startup(PGconn *conn, int use_negotiate)
|
||||
|
||||
return pg_SSPI_continue(conn);
|
||||
}
|
||||
#endif /* ENABLE_SSPI */
|
||||
#endif /* ENABLE_SSPI */
|
||||
|
||||
/*
|
||||
* Respond to AUTH_REQ_SCM_CREDS challenge.
|
||||
@ -738,14 +743,14 @@ pg_local_sendauth(PGconn *conn)
|
||||
char sebuf[256];
|
||||
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
"pg_local_sendauth: sendmsg: %s\n",
|
||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
"pg_local_sendauth: sendmsg: %s\n",
|
||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
return STATUS_OK;
|
||||
#else
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("SCM_CRED authentication method not supported\n"));
|
||||
libpq_gettext("SCM_CRED authentication method not supported\n"));
|
||||
return STATUS_ERROR;
|
||||
#endif
|
||||
}
|
||||
@ -850,14 +855,17 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
|
||||
#if defined(ENABLE_GSS) || defined(ENABLE_SSPI)
|
||||
case AUTH_REQ_GSS:
|
||||
{
|
||||
int r;
|
||||
int r;
|
||||
|
||||
pglock_thread();
|
||||
|
||||
/*
|
||||
* If we have both GSS and SSPI support compiled in, use SSPI
|
||||
* support by default. This is overridable by a connection string parameter.
|
||||
* Note that when using SSPI we still leave the negotiate parameter off,
|
||||
* since we want SSPI to use the GSSAPI kerberos protocol. For actual
|
||||
* SSPI negotiate protocol, we use AUTH_REQ_SSPI.
|
||||
* support by default. This is overridable by a connection
|
||||
* string parameter. Note that when using SSPI we still leave
|
||||
* the negotiate parameter off, since we want SSPI to use the
|
||||
* GSSAPI kerberos protocol. For actual SSPI negotiate
|
||||
* protocol, we use AUTH_REQ_SSPI.
|
||||
*/
|
||||
#if defined(ENABLE_GSS) && defined(ENABLE_SSPI)
|
||||
if (conn->gsslib && (pg_strcasecmp(conn->gsslib, "gssapi") == 0))
|
||||
@ -881,7 +889,8 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
|
||||
|
||||
case AUTH_REQ_GSS_CONT:
|
||||
{
|
||||
int r;
|
||||
int r;
|
||||
|
||||
pglock_thread();
|
||||
#if defined(ENABLE_GSS) && defined(ENABLE_SSPI)
|
||||
if (conn->usesspi)
|
||||
@ -902,21 +911,21 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
|
||||
pgunlock_thread();
|
||||
}
|
||||
break;
|
||||
|
||||
#else
|
||||
case AUTH_REQ_GSS:
|
||||
case AUTH_REQ_GSS_CONT:
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("GSSAPI authentication not supported\n"));
|
||||
libpq_gettext("GSSAPI authentication not supported\n"));
|
||||
return STATUS_ERROR;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_SSPI
|
||||
case AUTH_REQ_SSPI:
|
||||
/*
|
||||
|
||||
/*
|
||||
* SSPI has it's own startup message so libpq can decide which
|
||||
* method to use. Indicate to pg_SSPI_startup that we want
|
||||
* SSPI negotiation instead of Kerberos.
|
||||
* method to use. Indicate to pg_SSPI_startup that we want SSPI
|
||||
* negotiation instead of Kerberos.
|
||||
*/
|
||||
pglock_thread();
|
||||
if (pg_SSPI_startup(conn, 1) != STATUS_OK)
|
||||
@ -930,7 +939,7 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
|
||||
#else
|
||||
case AUTH_REQ_SSPI:
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("SSPI authentication not supported\n"));
|
||||
libpq_gettext("SSPI authentication not supported\n"));
|
||||
return STATUS_ERROR;
|
||||
#endif
|
||||
|
||||
@ -938,10 +947,10 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
|
||||
case AUTH_REQ_MD5:
|
||||
case AUTH_REQ_CRYPT:
|
||||
case AUTH_REQ_PASSWORD:
|
||||
if (conn->pgpass == NULL || *conn->pgpass== '\0')
|
||||
if (conn->pgpass == NULL || *conn->pgpass == '\0')
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
PQnoPasswordSupplied);
|
||||
PQnoPasswordSupplied);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
if (pg_password_sendauth(conn, conn->pgpass, areq) != STATUS_OK)
|
||||
|
Reference in New Issue
Block a user