spread a few debug logs around authentication

This commit is contained in:
Neels Hofmeyr
2016-03-07 16:50:47 +01:00
parent f1777ee843
commit 93f6fa5a81

View File

@@ -174,14 +174,23 @@ int gsm48_secure_channel(struct gsm_subscriber_connection *conn, int key_seq,
} }
/* Are we done yet ? */ /* Are we done yet ? */
if (status >= 0) if (status >= 0) {
DEBUGP(DMM, "gsm48_secure_channel(%s) returning with status %d\n",
subscr_name(subscr), status);
return cb ? return cb ?
cb(GSM_HOOK_RR_SECURITY, status, NULL, conn, cb_data) : cb(GSM_HOOK_RR_SECURITY, status, NULL, conn, cb_data) :
0; 0;
}
/* Start an operation (can't have more than one pending !!!) */ /* Start an operation (can't have more than one pending !!!) */
if (conn->sec_operation) if (conn->sec_operation) {
DEBUGP(DMM, "gsm48_secure_channel(%s) error: attempt to start"
" second security operation\n",
subscr_name(subscr));
return -EBUSY; return -EBUSY;
}
DEBUGP(DMM, "gsm48_secure_channel(%s) starting security operation\n",
subscr_name(subscr));
allocate_security_operation(conn); allocate_security_operation(conn);
op = conn->sec_operation; op = conn->sec_operation;
@@ -194,9 +203,13 @@ int gsm48_secure_channel(struct gsm_subscriber_connection *conn, int key_seq,
/* Then do whatever is needed ... */ /* Then do whatever is needed ... */
if (rc == AUTH_DO_AUTH_THEN_CIPH) { if (rc == AUTH_DO_AUTH_THEN_CIPH) {
/* Start authentication */ /* Start authentication */
DEBUGP(DMM, "gsm48_secure_channel(%s) starting authentication\n",
subscr_name(subscr));
return gsm48_tx_mm_auth_req(conn, op->atuple.rand, op->atuple.key_seq); return gsm48_tx_mm_auth_req(conn, op->atuple.rand, op->atuple.key_seq);
} else if (rc == AUTH_DO_CIPH) { } else if (rc == AUTH_DO_CIPH) {
/* Start ciphering directly */ /* Start ciphering directly */
DEBUGP(DMM, "gsm48_secure_channel(%s) starting ciphering\n",
subscr_name(subscr));
return gsm0808_cipher_mode(conn, net->a5_encryption, return gsm0808_cipher_mode(conn, net->a5_encryption,
op->atuple.kc, 8, 0); op->atuple.kc, 8, 0);
} }
@@ -207,27 +220,46 @@ int gsm48_secure_channel(struct gsm_subscriber_connection *conn, int key_seq,
static int authorize_subscriber(struct gsm_loc_updating_operation *loc, static int authorize_subscriber(struct gsm_loc_updating_operation *loc,
struct gsm_subscriber *subscriber) struct gsm_subscriber *subscriber)
{ {
if (!subscriber) if (!subscriber) {
LOGP(DMM, LOGL_DEBUG, "authorize_subscriber() on NULL subscriber\n");
return 0; return 0;
}
/* /*
* Do not send accept yet as more information should arrive. Some * Do not send accept yet as more information should arrive. Some
* phones will not send us the information and we will have to check * phones will not send us the information and we will have to check
* what we want to do with that. * what we want to do with that.
*/ */
if (loc && (loc->waiting_for_imsi || loc->waiting_for_imei)) if (loc && (loc->waiting_for_imsi || loc->waiting_for_imei)) {
LOGP(DMM, LOGL_DEBUG, "authorize_subscriber() failed:"
" still waiting for%s%s of subscriber %s\n",
loc->waiting_for_imsi? " IMSI": "",
loc->waiting_for_imei? " IMEI": "",
subscr_name(subscriber));
return 0; return 0;
}
switch (subscriber->group->net->auth_policy) { switch (subscriber->group->net->auth_policy) {
case GSM_AUTH_POLICY_CLOSED: case GSM_AUTH_POLICY_CLOSED:
LOGP(DMM, LOGL_DEBUG, "subscriber %s authorized = %d\n",
subscr_name(subscriber), subscriber->authorized);
return subscriber->authorized; return subscriber->authorized;
case GSM_AUTH_POLICY_TOKEN: case GSM_AUTH_POLICY_TOKEN:
if (subscriber->authorized) if (subscriber->authorized) {
LOGP(DMM, LOGL_DEBUG,
"subscriber %s authorized = %d\n",
subscr_name(subscriber), subscriber->authorized);
return subscriber->authorized; return subscriber->authorized;
}
LOGP(DMM, LOGL_DEBUG, "subscriber %s first contact = %d\n",
subscr_name(subscriber),
(int)(subscriber->flags & GSM_SUBSCRIBER_FIRST_CONTACT));
return (subscriber->flags & GSM_SUBSCRIBER_FIRST_CONTACT); return (subscriber->flags & GSM_SUBSCRIBER_FIRST_CONTACT);
case GSM_AUTH_POLICY_ACCEPT_ALL: case GSM_AUTH_POLICY_ACCEPT_ALL:
return 1; return 1;
default: default:
LOGP(DMM, LOGL_DEBUG, "unknown auth_policy, rejecting"
" subscriber %s\n", subscr_name(subscriber));
return 0; return 0;
} }
} }
@@ -324,6 +356,7 @@ static int _gsm0408_authorize_sec_cb(unsigned int hooknum, unsigned int event,
subscr_name(conn->subscr)); subscr_name(conn->subscr));
/* fall through */ /* fall through */
default: default:
LOGP(DMM, LOGL_DEBUG, "invalid authorization event\n");
rc = -EINVAL; rc = -EINVAL;
}; };
@@ -332,8 +365,11 @@ static int _gsm0408_authorize_sec_cb(unsigned int hooknum, unsigned int event,
static int gsm0408_authorize(struct gsm_subscriber_connection *conn, struct msgb *msg) static int gsm0408_authorize(struct gsm_subscriber_connection *conn, struct msgb *msg)
{ {
if (!conn->loc_operation) if (!conn->loc_operation) {
LOGP(DMM, LOGL_DEBUG, "gsm0408_authorize() failed:"
" no location update operation pending\n");
return 0; return 0;
}
if (authorize_subscriber(conn->loc_operation, conn->subscr)) if (authorize_subscriber(conn->loc_operation, conn->subscr))
return gsm48_secure_channel(conn, return gsm48_secure_channel(conn,