vlr_auth_fsm: on SAI use the GSUP provided GMM cause code

The HLR might respond with a specific GMM cause code. E.g. roaming not
allowed which needs to be passed down the layers.

Change-Id: I9af515dc52834b7c57c42fc3a76ee2c682734e2a
diff --git a/src/libvlr/vlr_auth_fsm.c b/src/libvlr/vlr_auth_fsm.c
index 6026510..036c3d7 100644
--- a/src/libvlr/vlr_auth_fsm.c
+++ b/src/libvlr/vlr_auth_fsm.c
@@ -331,6 +331,7 @@
 	struct auth_fsm_priv *afp = fi->priv;
 	struct vlr_subscr *vsub = afp->vsub;
 	struct osmo_gsup_message *gsup = data;
+	enum gsm48_reject_value gsm48_rej;
 
 	if (event == VLR_AUTH_E_HLR_SAI_NACK)
 		LOGPFSM(fi, "GSUP: rx Auth Info Error cause: %d: %s\n",
@@ -350,21 +351,21 @@
 			afp->auth_tuple_max_reuse_count = -1;
 			goto pass;
 		}
-		/* result = procedure error */
-		auth_fsm_term(fi, GSM48_REJECT_NETWORK_FAILURE);
-		return;
 	}
 
 	switch (event) {
 	case VLR_AUTH_E_HLR_SAI_ACK:
+		if (!gsup->num_auth_vectors) {
+			auth_fsm_term(fi, GSM48_REJECT_NETWORK_FAILURE);
+			return;
+		}
 		vlr_subscr_update_tuples(vsub, gsup);
 		goto pass;
 		break;
 	case VLR_AUTH_E_HLR_SAI_NACK:
-		auth_fsm_term(fi,
-			      gsup->cause == GMM_CAUSE_IMSI_UNKNOWN?
-				      GSM48_REJECT_IMSI_UNKNOWN_IN_HLR
-				      : GSM48_REJECT_NETWORK_FAILURE);
+	case VLR_AUTH_E_HLR_SAI_ABORT:
+		vlr_gmm_cause_to_mm_cause(gsup->cause, &gsm48_rej);
+		auth_fsm_term(fi, gsm48_rej);
 		break;
 	}