Use credential if it was passed in.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22167 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -190,6 +190,36 @@ _gss_ntlm_get_user_cred(const char *domain, | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static int | ||||
| _gss_copy_cred(ntlm_cred from, ntlm_cred *to) | ||||
| { | ||||
|     *to = calloc(1, sizeof(*to)); | ||||
|     if (*to == NULL) | ||||
| 	return ENOMEM; | ||||
|     (*to)->username = strdup(from->username); | ||||
|     if ((*to)->username == NULL) { | ||||
| 	free(*to); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|     (*to)->domain = strdup(from->domain); | ||||
|     if ((*to)->domain == NULL) { | ||||
| 	free((*to)->username); | ||||
| 	free(*to); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|     (*to)->key.data = malloc(from->key.length); | ||||
|     if ((*to)->key.data == NULL) { | ||||
| 	free((*to)->domain); | ||||
| 	free((*to)->username); | ||||
| 	free(*to); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|     memcpy((*to)->key.data, from->key.data, from->key.length); | ||||
|     (*to)->key.length = from->key.length; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| OM_uint32 | ||||
| _gss_ntlm_init_sec_context | ||||
|            (OM_uint32 * minor_status, | ||||
| @@ -232,7 +262,12 @@ _gss_ntlm_init_sec_context | ||||
| 	} | ||||
| 	*context_handle = (gss_ctx_id_t)ctx; | ||||
|  | ||||
| 	ret = _gss_ntlm_get_user_cred(name->domain, &ctx->client); | ||||
| 	if (initiator_cred_handle != GSS_C_NO_CREDENTIAL) { | ||||
| 	    ntlm_cred cred = initiator_cred_handle; | ||||
| 	    ret = _gss_copy_cred(cred, &ctx->client); | ||||
| 	} else | ||||
| 	    ret = _gss_ntlm_get_user_cred(name->domain, &ctx->client); | ||||
|  | ||||
| 	if (ret) { | ||||
| 	    _gss_ntlm_delete_sec_context(minor_status, context_handle, NULL); | ||||
| 	    *minor_status = ret; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand