From ba1e98d16dea8db22478d22063d5a3aff7da8106 Mon Sep 17 00:00:00 2001 From: agc Date: Sun, 12 Feb 2006 15:36:54 +0000 Subject: [PATCH] Check that the initiator address is allowed to discover targets. Log a LOG_INFO error if an initiator attempts to discover targets it shouldn't be. --- dist/iscsi/src/target.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/dist/iscsi/src/target.c b/dist/iscsi/src/target.c index 5e6ac54b9c34..bcc692547a28 100644 --- a/dist/iscsi/src/target.c +++ b/dist/iscsi/src/target.c @@ -561,13 +561,13 @@ nop_out_t(target_session_t * sess, uint8_t *header) static int text_command_t(target_session_t * sess, uint8_t *header) { - iscsi_text_cmd_args_t text_cmd; - iscsi_text_rsp_args_t text_rsp; - uint8_t rsp_header[ISCSI_HEADER_LEN]; - char *text_in = NULL; - char *text_out = NULL; - unsigned len_in; - int len_out = 0; + iscsi_text_cmd_args_t text_cmd; + iscsi_text_rsp_args_t text_rsp; + uint8_t rsp_header[ISCSI_HEADER_LEN]; + char *text_in = NULL; + char *text_out = NULL; + unsigned len_in; + int len_out = 0; #define TC_CLEANUP { if (text_in != NULL) iscsi_free_atomic(text_in);if (text_out != NULL) iscsi_free_atomic(text_out);} #define TC_ERROR {TC_CLEANUP; return -1;} @@ -622,8 +622,13 @@ text_command_t(target_session_t * sess, uint8_t *header) TRACE(TRACE_ISCSI_DEBUG, "Rejecting SendTargets=All in a non Discovery session\n"); PARAM_TEXT_ADD(sess->params, "SendTargets", "Reject", text_out, &len_out, 2048, 0, TC_ERROR); } else { - PARAM_TEXT_ADD(sess->params, "TargetName", sess->globals->targetname, text_out, &len_out, 2048, 0, TC_ERROR); - PARAM_TEXT_ADD(sess->params, "TargetAddress", sess->globals->targetaddress, text_out, &len_out, 2048, 0, TC_ERROR); + if (allow_netmask(sess->globals->tv->v[0].mask, sess->initiator)) { + PARAM_TEXT_ADD(sess->params, "TargetName", sess->globals->targetname, text_out, &len_out, 2048, 0, TC_ERROR); + PARAM_TEXT_ADD(sess->params, "TargetAddress", sess->globals->targetaddress, text_out, &len_out, 2048, 0, TC_ERROR); + } else { + syslog(LOG_INFO, "WARNING: attempt to discover targets from %s (not allowed by %s) has been rejected", sess->initiator, sess->globals->tv->v[0].mask); + PARAM_TEXT_ADD(sess->params, "SendTargets", "Reject", text_out, &len_out, 2048, 0, TC_ERROR); + } } ptr->rx_offer = 0; } @@ -1404,7 +1409,7 @@ target_init(globals_t *gp, targv_t *tv, char *TargetName, int n) int i; (void) strlcpy(gp->targetname, TargetName, sizeof(gp->targetname)); - if ((d = device_init(gp, tv, &tv->v[n])) < 0) { + if ((d = device_init(gp, gp->tv = tv, &tv->v[n])) < 0) { TRACE_ERROR("device_init() failed\n"); return -1; }