Fix CHAP challange not being fully read and hashed.

This commit is contained in:
Jakob van Kruijssen
2016-03-24 17:21:43 +01:00
committed by Ronnie Sahlberg
parent 8afffbd506
commit 81a7610155
4 changed files with 20 additions and 2 deletions

2
.gitignore vendored
View File

@@ -50,3 +50,5 @@ TAGS
/utils/iscsi-readcapacity16
/utils/iscsi-swp
/libiscsi.pc
/.cproject
/.project

View File

@@ -63,6 +63,9 @@ void iscsi_free_iscsi_inqueue(struct iscsi_context *iscsi, struct iscsi_in_pdu *
/* size of chap response field */
#define CHAP_R_SIZE 16
/* max length of chap challange */
#define MAX_CHAP_C_LENGTH 2048
struct iscsi_context {
char initiator_name[MAX_STRING_SIZE+1];
char target_name[MAX_STRING_SIZE+1];
@@ -74,7 +77,7 @@ struct iscsi_context {
char user[MAX_STRING_SIZE+1];
char passwd[MAX_STRING_SIZE+1];
char chap_c[MAX_STRING_SIZE+1];
char chap_c[MAX_CHAP_C_LENGTH+1];
char target_user[MAX_STRING_SIZE+1];
char target_passwd[MAX_STRING_SIZE+1];

View File

@@ -695,6 +695,7 @@ iscsi_login_add_chap_response(struct iscsi_context *iscsi, struct iscsi_pdu *pdu
return -1;
}
}
c = 0;
if (iscsi_pdu_add_data(iscsi, pdu, &c, 1) != 0) {
iscsi_set_error(iscsi, "Out-of-memory: pdu add data "
@@ -1153,7 +1154,15 @@ iscsi_process_login_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu,
}
if (!strncmp(ptr, "CHAP_C=0x", 9)) {
strncpy(iscsi->chap_c,ptr+9,MAX_STRING_SIZE);
if (len-9 > MAX_CHAP_C_LENGTH) {
iscsi_set_error(iscsi, "Wrong length of CHAP_C received from"
" target (%d, max: %d)", len-9, MAX_CHAP_C_LENGTH);
pdu->callback(iscsi, SCSI_STATUS_ERROR, NULL,
pdu->private_data);
return 0;
}
*iscsi->chap_c = '\0';
strncat(iscsi->chap_c,ptr+9,len-9);
iscsi->secneg_phase = ISCSI_LOGIN_SECNEG_PHASE_SEND_RESPONSE;
}

4
tests/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
/prog_noop_reply
/prog_reconnect
/prog_reconnect_timeout
/prog_timeout