From bdc9c1373fe761b9d65a730a2faf5b13d8f879ce Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Mon, 28 Nov 2022 10:47:04 +0100 Subject: [PATCH] [UDM/UDR] Handle UEAuthentication authRemovalInd --- src/udm/nudm-handler.c | 5 +++++ src/udm/nudr-build.c | 8 ++++++-- src/udm/nudr-handler.c | 31 +++++++++++++++++++------------ src/udm/ue-sm.c | 16 ++++++++++++++++ src/udr/nudr-handler.c | 4 +++- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/udm/nudm-handler.c b/src/udm/nudm-handler.c index aa9bb38be..a843f4635 100644 --- a/src/udm/nudm-handler.c +++ b/src/udm/nudm-handler.c @@ -229,6 +229,11 @@ bool udm_nudm_ueau_handle_result_confirmation_inform( return false; } + if (udm_ue->auth_event) { + OpenAPI_auth_event_free(udm_ue->auth_event); + udm_ue->auth_event = NULL; + } + udm_ue->auth_event = OpenAPI_auth_event_copy( udm_ue->auth_event, message->AuthEvent); diff --git a/src/udm/nudr-build.c b/src/udm/nudr-build.c index 809aaa1c7..ebce89fc8 100644 --- a/src/udm/nudr-build.c +++ b/src/udm/nudr-build.c @@ -103,8 +103,12 @@ ogs_sbi_request_t *udm_nudr_dr_build_update_authentication_status( message.h.resource.component[3] = (char *)OGS_SBI_RESOURCE_NAME_AUTHENTICATION_STATUS; - message.AuthEvent = OpenAPI_auth_event_copy( - message.AuthEvent, udm_ue->auth_event); + if (udm_ue->auth_event->auth_removal_ind) { + message.h.method = (char *)OGS_SBI_HTTP_METHOD_DELETE; + } else { + message.AuthEvent = OpenAPI_auth_event_copy( + message.AuthEvent, udm_ue->auth_event); + } request = ogs_sbi_build_request(&message); ogs_assert(request); diff --git a/src/udm/nudr-handler.c b/src/udm/nudr-handler.c index 14ec9008c..47bd4536c 100644 --- a/src/udm/nudr-handler.c +++ b/src/udm/nudr-handler.c @@ -338,20 +338,27 @@ bool udm_nudr_dr_handle_subscription_authentication( memset(&sendmsg, 0, sizeof(sendmsg)); - memset(&header, 0, sizeof(header)); - header.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDM_UEAU; - header.api.version = (char *)OGS_SBI_API_V1; - header.resource.component[0] = udm_ue->supi; - header.resource.component[1] = - (char *)OGS_SBI_RESOURCE_NAME_AUTH_EVENTS; - header.resource.component[2] = udm_ue->ctx_id; + if (AuthEvent->auth_removal_ind) { + OpenAPI_auth_event_free(AuthEvent); + udm_ue->auth_event = NULL; + response = ogs_sbi_build_response(&sendmsg, + OGS_SBI_HTTP_STATUS_NO_CONTENT); + } else { + memset(&header, 0, sizeof(header)); + header.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDM_UEAU; + header.api.version = (char *)OGS_SBI_API_V1; + header.resource.component[0] = udm_ue->supi; + header.resource.component[1] = + (char *)OGS_SBI_RESOURCE_NAME_AUTH_EVENTS; + header.resource.component[2] = udm_ue->ctx_id; - sendmsg.http.location = ogs_sbi_server_uri(server, &header); - sendmsg.AuthEvent = OpenAPI_auth_event_copy( - sendmsg.AuthEvent, udm_ue->auth_event); + sendmsg.http.location = ogs_sbi_server_uri(server, &header); + sendmsg.AuthEvent = OpenAPI_auth_event_copy( + sendmsg.AuthEvent, udm_ue->auth_event); - response = ogs_sbi_build_response(&sendmsg, - OGS_SBI_HTTP_STATUS_CREATED); + response = ogs_sbi_build_response(&sendmsg, + OGS_SBI_HTTP_STATUS_CREATED); + } ogs_assert(response); ogs_assert(true == ogs_sbi_server_send_response(stream, response)); diff --git a/src/udm/ue-sm.c b/src/udm/ue-sm.c index 24a375588..57f327e4d 100644 --- a/src/udm/ue-sm.c +++ b/src/udm/ue-sm.c @@ -83,6 +83,22 @@ void udm_ue_state_operational(ogs_fsm_t *s, udm_event_t *e) END break; + CASE(OGS_SBI_HTTP_METHOD_PUT) + SWITCH(message->h.resource.component[1]) + CASE(OGS_SBI_RESOURCE_NAME_AUTH_EVENTS) + udm_nudm_ueau_handle_result_confirmation_inform( + udm_ue, stream, message); + break; + DEFAULT + ogs_error("[%s] Invalid resource name [%s]", + udm_ue->suci, message->h.resource.component[1]); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, message, + "Invalid resource name", message->h.method)); + END + break; + DEFAULT ogs_error("[%s] Invalid HTTP method [%s]", udm_ue->suci, message->h.method); diff --git a/src/udr/nudr-handler.c b/src/udr/nudr-handler.c index 0b028b8bb..618d1536b 100644 --- a/src/udr/nudr-handler.c +++ b/src/udr/nudr-handler.c @@ -195,10 +195,12 @@ bool udr_nudr_dr_handle_subscription_authentication( CASE(OGS_SBI_RESOURCE_NAME_AUTHENTICATION_STATUS) SWITCH(recvmsg->h.method) CASE(OGS_SBI_HTTP_METHOD_PUT) + CASE(OGS_SBI_HTTP_METHOD_DELETE) OpenAPI_auth_event_t *AuthEvent = NULL; AuthEvent = recvmsg->AuthEvent; - if (!AuthEvent) { + if (!AuthEvent && + !strcmp(recvmsg->h.method, OGS_SBI_HTTP_METHOD_PUT)) { ogs_error("[%s] No AuthEvent", supi); ogs_assert(true == ogs_sbi_server_send_error(