sgsn: Add global require_update_location flag

This flag is used to determine, whether the Update Location procedure
shall be invoked. This is currently only set, when the 'remote'
authorization policy is set. When the flag is set, sgsn_auth_update
will not never be called directly by sgsn_auth_request, if an Attach
Request procedure is pending, even if the remote connection fails for
some reason.

Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/gprs/sgsn_auth.c b/openbsc/src/gprs/sgsn_auth.c
index 83372e8..9cc67db 100644
--- a/openbsc/src/gprs/sgsn_auth.c
+++ b/openbsc/src/gprs/sgsn_auth.c
@@ -161,9 +161,9 @@
 		return 0;
 	}
 
-	need_update_location =
-		mmctx->subscr == NULL ||
-		mmctx->pending_req == GSM48_MT_GMM_ATTACH_REQ;
+	need_update_location = sgsn->cfg.require_update_location &&
+		(mmctx->subscr == NULL ||
+		 mmctx->pending_req == GSM48_MT_GMM_ATTACH_REQ);
 
 	/* This has the side effect of registering the subscr with the mmctx */
 	subscr = gprs_subscr_get_or_create_by_mmctx(mmctx);
@@ -191,8 +191,11 @@
 	} else if (need_update_location) {
 		LOGMMCTXP(LOGL_INFO, mmctx,
 			  "Missing information, requesting subscriber data\n");
-		if (gprs_subscr_request_update_location(mmctx) >= 0)
+		rc = gprs_subscr_request_update_location(mmctx);
+		if (rc >= 0)
 			return 0;
+
+		return rc;
 	}
 
 	sgsn_auth_update(mmctx);