mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
auth: Rename the various authentication clean up functions
For consistency and to a avoid confusion. Closes #3869
This commit is contained in:
parent
4d8461ae8a
commit
52dfab65d6
@ -74,7 +74,7 @@
|
||||
# define sclose_nolog(x) close((x))
|
||||
#endif
|
||||
|
||||
void Curl_ntlm_wb_cleanup(struct connectdata *conn)
|
||||
void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn)
|
||||
{
|
||||
if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) {
|
||||
sclose(conn->ntlm_auth_hlpr_socket);
|
||||
@ -423,7 +423,7 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
|
||||
DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
|
||||
ntlm->state = NTLMSTATE_TYPE3; /* we sent a type-3 */
|
||||
authp->done = TRUE;
|
||||
Curl_ntlm_wb_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm_wb(conn);
|
||||
if(!*allocuserpwd)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
break;
|
||||
|
@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -31,7 +31,7 @@
|
||||
to Samba's winbind daemon helper ntlm_auth */
|
||||
CURLcode Curl_output_ntlm_wb(struct connectdata *conn, bool proxy);
|
||||
|
||||
void Curl_ntlm_wb_cleanup(struct connectdata *conn);
|
||||
void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn);
|
||||
|
||||
#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */
|
||||
|
||||
|
@ -83,14 +83,14 @@ void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
|
||||
#if defined(USE_KERBEROS5)
|
||||
/* Cleanup the gssapi structure */
|
||||
if(authused == SASL_MECH_GSSAPI) {
|
||||
Curl_auth_gssapi_cleanup(&conn->krb5);
|
||||
Curl_auth_cleanup_gssapi(&conn->krb5);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USE_NTLM)
|
||||
/* Cleanup the NTLM structure */
|
||||
if(authused == SASL_MECH_NTLM) {
|
||||
Curl_auth_ntlm_cleanup(&conn->ntlm);
|
||||
Curl_auth_cleanup_ntlm(&conn->ntlm);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -963,7 +963,7 @@ void curl_easy_reset(struct Curl_easy *data)
|
||||
memset(&data->state.authproxy, 0, sizeof(struct auth));
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
|
||||
Curl_digest_cleanup(data);
|
||||
Curl_http_auth_cleanup_digest(data);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -28,6 +28,7 @@
|
||||
#include "strcase.h"
|
||||
#include "vauth/vauth.h"
|
||||
#include "http_digest.h"
|
||||
|
||||
/* The last 3 #include files should be in this order */
|
||||
#include "curl_printf.h"
|
||||
#include "curl_memory.h"
|
||||
@ -171,7 +172,7 @@ CURLcode Curl_output_digest(struct connectdata *conn,
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
void Curl_digest_cleanup(struct Curl_easy *data)
|
||||
void Curl_http_auth_cleanup_digest(struct Curl_easy *data)
|
||||
{
|
||||
Curl_auth_digest_cleanup(&data->state.digest);
|
||||
Curl_auth_digest_cleanup(&data->state.proxydigest);
|
||||
|
@ -35,7 +35,7 @@ CURLcode Curl_output_digest(struct connectdata *conn,
|
||||
const unsigned char *request,
|
||||
const unsigned char *uripath);
|
||||
|
||||
void Curl_digest_cleanup(struct Curl_easy *data);
|
||||
void Curl_http_auth_cleanup_digest(struct Curl_easy *data);
|
||||
|
||||
#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_CRYPTO_AUTH */
|
||||
|
||||
|
@ -84,12 +84,12 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
|
||||
if(!len) {
|
||||
if(neg_ctx->state == GSS_AUTHSUCC) {
|
||||
infof(conn->data, "Negotiate auth restarted\n");
|
||||
Curl_cleanup_negotiate(conn);
|
||||
Curl_http_auth_cleanup_negotiate(conn);
|
||||
}
|
||||
else if(neg_ctx->state != GSS_AUTHNONE) {
|
||||
/* The server rejected our authentication and hasn't supplied any more
|
||||
negotiation mechanisms */
|
||||
Curl_cleanup_negotiate(conn);
|
||||
Curl_http_auth_cleanup_negotiate(conn);
|
||||
return CURLE_LOGIN_DENIED;
|
||||
}
|
||||
}
|
||||
@ -104,7 +104,7 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
|
||||
host, header, neg_ctx);
|
||||
|
||||
if(result)
|
||||
Curl_auth_spnego_cleanup(neg_ctx);
|
||||
Curl_auth_cleanup_spnego(neg_ctx);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -139,7 +139,7 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
|
||||
if(neg_ctx->noauthpersist && neg_ctx->state == GSS_AUTHSUCC) {
|
||||
infof(conn->data, "Curl_output_negotiate, "
|
||||
"no persistent authentication: cleanup existing context");
|
||||
Curl_auth_spnego_cleanup(neg_ctx);
|
||||
Curl_auth_cleanup_spnego(neg_ctx);
|
||||
}
|
||||
if(!neg_ctx->context) {
|
||||
result = Curl_input_negotiate(conn, proxy, "Negotiate");
|
||||
@ -203,10 +203,10 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
void Curl_cleanup_negotiate(struct connectdata *conn)
|
||||
void Curl_http_auth_cleanup_negotiate(struct connectdata *conn)
|
||||
{
|
||||
Curl_auth_spnego_cleanup(&conn->negotiate);
|
||||
Curl_auth_spnego_cleanup(&conn->proxyneg);
|
||||
Curl_auth_cleanup_spnego(&conn->negotiate);
|
||||
Curl_auth_cleanup_spnego(&conn->proxyneg);
|
||||
}
|
||||
|
||||
#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */
|
||||
|
@ -31,7 +31,7 @@ CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
|
||||
/* this is for creating Negotiate header output */
|
||||
CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy);
|
||||
|
||||
void Curl_cleanup_negotiate(struct connectdata *conn);
|
||||
void Curl_http_auth_cleanup_negotiate(struct connectdata *conn);
|
||||
|
||||
#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -88,11 +88,11 @@ CURLcode Curl_input_ntlm(struct connectdata *conn,
|
||||
else {
|
||||
if(ntlm->state == NTLMSTATE_LAST) {
|
||||
infof(conn->data, "NTLM auth restarted\n");
|
||||
Curl_http_ntlm_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm(conn);
|
||||
}
|
||||
else if(ntlm->state == NTLMSTATE_TYPE3) {
|
||||
infof(conn->data, "NTLM handshake rejected\n");
|
||||
Curl_http_ntlm_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm(conn);
|
||||
ntlm->state = NTLMSTATE_NONE;
|
||||
return CURLE_REMOTE_ACCESS_DENIED;
|
||||
}
|
||||
@ -241,13 +241,13 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
void Curl_http_ntlm_cleanup(struct connectdata *conn)
|
||||
void Curl_http_auth_cleanup_ntlm(struct connectdata *conn)
|
||||
{
|
||||
Curl_auth_ntlm_cleanup(&conn->ntlm);
|
||||
Curl_auth_ntlm_cleanup(&conn->proxyntlm);
|
||||
Curl_auth_cleanup_ntlm(&conn->ntlm);
|
||||
Curl_auth_cleanup_ntlm(&conn->proxyntlm);
|
||||
|
||||
#if defined(NTLM_WB_ENABLED)
|
||||
Curl_ntlm_wb_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm_wb(conn);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ CURLcode Curl_input_ntlm(struct connectdata *conn, bool proxy,
|
||||
/* this is for creating ntlm header output */
|
||||
CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy);
|
||||
|
||||
void Curl_http_ntlm_cleanup(struct connectdata *conn);
|
||||
void Curl_http_auth_cleanup_ntlm(struct connectdata *conn);
|
||||
|
||||
#endif /* !CURL_DISABLE_HTTP && USE_NTLM */
|
||||
|
||||
|
@ -380,7 +380,7 @@ CURLcode Curl_close(struct Curl_easy *data)
|
||||
data->asi = NULL;
|
||||
#endif
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
|
||||
Curl_digest_cleanup(data);
|
||||
Curl_http_auth_cleanup_digest(data);
|
||||
#endif
|
||||
Curl_safefree(data->info.contenttype);
|
||||
Curl_safefree(data->info.wouldredirect);
|
||||
@ -697,7 +697,7 @@ static void conn_shutdown(struct connectdata *conn)
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
|
||||
defined(NTLM_WB_ENABLED)
|
||||
Curl_ntlm_wb_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm_wb(conn);
|
||||
#endif
|
||||
|
||||
/* unlink ourselves. this should be called last since other shutdown
|
||||
@ -801,11 +801,11 @@ CURLcode Curl_disconnect(struct Curl_easy *data,
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM)
|
||||
/* Cleanup NTLM connection-related data */
|
||||
Curl_http_ntlm_cleanup(conn);
|
||||
Curl_http_auth_cleanup_ntlm(conn);
|
||||
#endif
|
||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
|
||||
/* Cleanup NEGOTIATE connection-related data */
|
||||
Curl_cleanup_negotiate(conn);
|
||||
Curl_http_auth_cleanup_negotiate(conn);
|
||||
#endif
|
||||
|
||||
/* the protocol specific disconnect handler and conn_shutdown need a transfer
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2014 - 2017, Steve Holme, <steve_holme@hotmail.com>.
|
||||
* Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
|
||||
* Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
@ -372,7 +372,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_gssapi_cleanup()
|
||||
* Curl_auth_cleanup_gssapi()
|
||||
*
|
||||
* This is used to clean up the GSSAPI (Kerberos V5) specific data.
|
||||
*
|
||||
@ -381,7 +381,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
|
||||
* krb5 [in/out] - The Kerberos 5 data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5)
|
||||
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5)
|
||||
{
|
||||
OM_uint32 minor_status;
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2014 - 2017, Steve Holme, <steve_holme@hotmail.com>.
|
||||
* Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -474,7 +474,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_gssapi_cleanup()
|
||||
* Curl_auth_cleanup_gssapi()
|
||||
*
|
||||
* This is used to clean up the GSSAPI (Kerberos V5) specific data.
|
||||
*
|
||||
@ -483,7 +483,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
|
||||
* krb5 [in/out] - The Kerberos 5 data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5)
|
||||
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5)
|
||||
{
|
||||
/* Free our security context */
|
||||
if(krb5->context) {
|
||||
|
@ -403,7 +403,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
|
||||
(void)hostname,
|
||||
|
||||
/* Clean up any former leftovers and initialise to defaults */
|
||||
Curl_auth_ntlm_cleanup(ntlm);
|
||||
Curl_auth_cleanup_ntlm(ntlm);
|
||||
|
||||
#if defined(USE_NTRESPONSES) && defined(USE_NTLM2SESSION)
|
||||
#define NTLM2FLAG NTLMFLAG_NEGOTIATE_NTLM2_KEY
|
||||
@ -844,13 +844,13 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
|
||||
/* Return with binary blob encoded into base64 */
|
||||
result = Curl_base64_encode(data, (char *)ntlmbuf, size, outptr, outlen);
|
||||
|
||||
Curl_auth_ntlm_cleanup(ntlm);
|
||||
Curl_auth_cleanup_ntlm(ntlm);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_ntlm_cleanup()
|
||||
* Curl_auth_cleanup_ntlm()
|
||||
*
|
||||
* This is used to clean up the NTLM specific data.
|
||||
*
|
||||
@ -859,7 +859,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
|
||||
* ntlm [in/out] - The NTLM data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm)
|
||||
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm)
|
||||
{
|
||||
/* Free the target info */
|
||||
Curl_safefree(ntlm->target_info);
|
||||
|
@ -95,7 +95,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
|
||||
TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */
|
||||
|
||||
/* Clean up any former leftovers and initialise to defaults */
|
||||
Curl_auth_ntlm_cleanup(ntlm);
|
||||
Curl_auth_cleanup_ntlm(ntlm);
|
||||
|
||||
/* Query the security package for NTLM */
|
||||
status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM),
|
||||
@ -323,13 +323,13 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
|
||||
result = Curl_base64_encode(data, (char *) ntlm->output_token,
|
||||
type_3_buf.cbBuffer, outptr, outlen);
|
||||
|
||||
Curl_auth_ntlm_cleanup(ntlm);
|
||||
Curl_auth_cleanup_ntlm(ntlm);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_ntlm_cleanup()
|
||||
* Curl_auth_cleanup_ntlm()
|
||||
*
|
||||
* This is used to clean up the NTLM specific data.
|
||||
*
|
||||
@ -338,7 +338,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
|
||||
* ntlm [in/out] - The NTLM data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm)
|
||||
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm)
|
||||
{
|
||||
/* Free our security context */
|
||||
if(ntlm->context) {
|
||||
|
@ -97,7 +97,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
|
||||
/* We finished successfully our part of authentication, but server
|
||||
* rejected it (since we're again here). Exit with an error since we
|
||||
* can't invent anything better */
|
||||
Curl_auth_spnego_cleanup(nego);
|
||||
Curl_auth_cleanup_spnego(nego);
|
||||
return CURLE_LOGIN_DENIED;
|
||||
}
|
||||
|
||||
@ -238,7 +238,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_spnego_cleanup()
|
||||
* Curl_auth_cleanup_spnego()
|
||||
*
|
||||
* This is used to clean up the SPNEGO (Negotiate) specific data.
|
||||
*
|
||||
@ -247,7 +247,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
|
||||
* nego [in/out] - The Negotiate data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_spnego_cleanup(struct negotiatedata *nego)
|
||||
void Curl_auth_cleanup_spnego(struct negotiatedata *nego)
|
||||
{
|
||||
OM_uint32 minor_status;
|
||||
|
||||
|
@ -107,7 +107,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
|
||||
/* We finished successfully our part of authentication, but server
|
||||
* rejected it (since we're again here). Exit with an error since we
|
||||
* can't invent anything better */
|
||||
Curl_auth_spnego_cleanup(nego);
|
||||
Curl_auth_cleanup_spnego(nego);
|
||||
return CURLE_LOGIN_DENIED;
|
||||
}
|
||||
|
||||
@ -307,7 +307,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
|
||||
}
|
||||
|
||||
/*
|
||||
* Curl_auth_spnego_cleanup()
|
||||
* Curl_auth_cleanup_spnego()
|
||||
*
|
||||
* This is used to clean up the SPNEGO (Negotiate) specific data.
|
||||
*
|
||||
@ -316,7 +316,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
|
||||
* nego [in/out] - The Negotiate data struct being cleaned up.
|
||||
*
|
||||
*/
|
||||
void Curl_auth_spnego_cleanup(struct negotiatedata *nego)
|
||||
void Curl_auth_cleanup_spnego(struct negotiatedata *nego)
|
||||
{
|
||||
/* Free our security context */
|
||||
if(nego->context) {
|
||||
|
@ -142,7 +142,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
|
||||
char **outptr, size_t *outlen);
|
||||
|
||||
/* This is used to clean up the NTLM specific data */
|
||||
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm);
|
||||
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm);
|
||||
#endif /* USE_NTLM */
|
||||
|
||||
/* This is used to generate a base64 encoded OAuth 2.0 message */
|
||||
@ -184,7 +184,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
|
||||
size_t *outlen);
|
||||
|
||||
/* This is used to clean up the GSSAPI specific data */
|
||||
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5);
|
||||
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5);
|
||||
#endif /* USE_KERBEROS5 */
|
||||
|
||||
#if defined(USE_SPNEGO)
|
||||
@ -208,7 +208,7 @@ CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
|
||||
char **outptr, size_t *outlen);
|
||||
|
||||
/* This is used to clean up the SPNEGO specifiec data */
|
||||
void Curl_auth_spnego_cleanup(struct negotiatedata *nego);
|
||||
void Curl_auth_cleanup_spnego(struct negotiatedata *nego);
|
||||
|
||||
#endif /* USE_SPNEGO */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user