[libtirpc] fix to cred refresh during cred establishment
if we are in the process of establishing a gss context and failing to do so, don't try to "refresh" the creds.
This commit is contained in:
parent
1b7a5f6c6c
commit
918ef9cd3e
1 changed files with 4 additions and 1 deletions
|
|
@ -57,6 +57,7 @@ static struct auth_ops authsspi_ops = {
|
||||||
|
|
||||||
struct rpc_sspi_data {
|
struct rpc_sspi_data {
|
||||||
bool_t established; /* context established */
|
bool_t established; /* context established */
|
||||||
|
bool_t inprogress;
|
||||||
sspi_buffer_desc gc_wire_verf; /* save GSS_S_COMPLETE NULL RPC verfier
|
sspi_buffer_desc gc_wire_verf; /* save GSS_S_COMPLETE NULL RPC verfier
|
||||||
* to process at end of context negotiation*/
|
* to process at end of context negotiation*/
|
||||||
CLIENT *clnt; /* client handle */
|
CLIENT *clnt; /* client handle */
|
||||||
|
|
@ -359,7 +360,7 @@ authsspi_refresh(AUTH *auth, void *tmp)
|
||||||
|
|
||||||
gd = AUTH_PRIVATE(auth);
|
gd = AUTH_PRIVATE(auth);
|
||||||
|
|
||||||
if (gd->established && tmp == NULL)
|
if ((gd->established && tmp == NULL) || gd->inprogress)
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
else if (tmp) {
|
else if (tmp) {
|
||||||
log_debug("trying to refresh credentials\n");
|
log_debug("trying to refresh credentials\n");
|
||||||
|
|
@ -406,6 +407,7 @@ authsspi_refresh(AUTH *auth, void *tmp)
|
||||||
&ret_flags,
|
&ret_flags,
|
||||||
NULL); /* time rec */
|
NULL); /* time rec */
|
||||||
#else
|
#else
|
||||||
|
gd->inprogress = TRUE;
|
||||||
out_desc.cBuffers = 1;
|
out_desc.cBuffers = 1;
|
||||||
out_desc.pBuffers = wtkn;
|
out_desc.pBuffers = wtkn;
|
||||||
out_desc.ulVersion = SECBUFFER_VERSION;
|
out_desc.ulVersion = SECBUFFER_VERSION;
|
||||||
|
|
@ -518,6 +520,7 @@ authsspi_refresh(AUTH *auth, void *tmp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gd->established = TRUE;
|
gd->established = TRUE;
|
||||||
|
gd->inprogress = FALSE;
|
||||||
gd->gc.gc_proc = RPCSEC_SSPI_DATA;
|
gd->gc.gc_proc = RPCSEC_SSPI_DATA;
|
||||||
gd->gc.gc_seq = 0;
|
gd->gc.gc_seq = 0;
|
||||||
gd->win = gr.gr_win;
|
gd->win = gr.gr_win;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue