⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iscsiauthclient.c

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 C
📖 第 1 页 / 共 4 页
字号:
	unsigned int optionCount,	const int *optionList){	int status;	status = iscsiAuthClientSetOptionList(		client,		optionCount,		optionList,		&client->authMethodCount,		client->authMethodList,		iscsiAuthMethodMaxCount,		iscsiAuthClientCheckAuthMethodOption,		iscsiAuthClientCheckAuthMethodList);	if (status != iscsiAuthStatusNoError) {		return status;	}	/* Setting authMethod affects authMethodValid. */	iscsiAuthClientSetAuthMethodValid(client);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetAuthMethodNegRole(IscsiAuthClient *client, int negRole){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure ||		iscsiAuthClientCheckNegRole(negRole) ||		client->nodeType != iscsiAuthNodeTypeInitiator) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->authMethodNegRole = (IscsiAuthNegRole)negRole;	/* Setting negRole affects authMethodValid. */	iscsiAuthClientSetAuthMethodValid(client);	return iscsiAuthStatusNoError;}static intiscsiAuthClientCheckChapAlgorithmList(	unsigned int optionCount,	const int *optionList){	if (!optionList || optionCount < 1) {		return TRUE;	}	return FALSE;}intiscsiAuthClientSetChapAlgorithmList(	IscsiAuthClient *client,	unsigned int optionCount,	const int *optionList){	return iscsiAuthClientSetOptionList(		client,		optionCount,		optionList,		&client->chapAlgorithmCount,		client->chapAlgorithmList,		iscsiAuthChapAlgorithmMaxCount,		iscsiAuthClientCheckChapAlgorithmOption,		iscsiAuthClientCheckChapAlgorithmList);}intiscsiAuthClientSetUsername(IscsiAuthClient *client, const char *username){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure ||		iscsiAuthClientCheckString(username, NULL)) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	strcpy(client->username, username);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetPassword(	IscsiAuthClient *client,	const unsigned char *passwordData,	unsigned int passwordLength){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure ||		passwordLength > sizeof(client->passwordData)) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	memcpy(client->passwordData, passwordData, passwordLength);	client->passwordLength = passwordLength;	client->passwordPresent = TRUE;	/* Setting password may affect authMethodValid. */	iscsiAuthClientSetAuthMethodValid(client);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetAuthRemote(IscsiAuthClient *client, int authRemote){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->authRemote = authRemote;	/* Setting authRemote may affect authMethodValid. */	iscsiAuthClientSetAuthMethodValid(client);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetGlueHandle(IscsiAuthClient *client, void *glueHandle){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure &&		client->phase != iscsiAuthPhaseNegotiate &&		client->phase != iscsiAuthPhaseAuthenticate) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->glueHandle = glueHandle;	return iscsiAuthStatusNoError;}intiscsiAuthClientSetMethodListName(	IscsiAuthClient *client, const char *methodListName){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure ||		iscsiAuthClientCheckString(methodListName, NULL)) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	strcpy(client->methodListName, methodListName);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetVersion(IscsiAuthClient *client, int version){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure ||		iscsiAuthClientCheckVersion(version)) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->version = (IscsiAuthVersion)version;	iscsiAuthClientSetAuthMethodValid(client);	return iscsiAuthStatusNoError;}intiscsiAuthClientSetIpSec(IscsiAuthClient *client, int ipSec){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->ipSec = ipSec;	return iscsiAuthStatusNoError;}intiscsiAuthClientSetBase64(IscsiAuthClient *client, int base64){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	client->base64 = base64;	return iscsiAuthStatusNoError;}intiscsiAuthClientGetAuthPhase(IscsiAuthClient *client, int *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	*value = client->phase;	return iscsiAuthStatusNoError;}intiscsiAuthClientGetAuthStatus(IscsiAuthClient *client, int *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	*value = client->remoteAuthStatus;	return iscsiAuthStatusNoError;}intiscsiAuthClientAuthStatusPass(int authStatus){	if (authStatus == iscsiAuthStatusPass) {		return TRUE;	}	return FALSE;}intiscsiAuthClientGetAuthMethod(IscsiAuthClient *client, int *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone &&		client->phase != iscsiAuthPhaseAuthenticate) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	*value = client->negotiatedAuthMethod;	return iscsiAuthStatusNoError;}intiscsiAuthClientGetChapAlgorithm(IscsiAuthClient *client, int *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	*value = client->negotiatedChapAlgorithm;	return iscsiAuthStatusNoError;}intiscsiAuthClientGetChapUsername(IscsiAuthClient *client, char *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	strcpy(value, client->chapUsername);	return iscsiAuthStatusNoError;}intiscsiAuthClientSendStatusCode(IscsiAuthClient *client, int *statusCode){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseConfigure &&		client->phase != iscsiAuthPhaseNegotiate &&		client->phase != iscsiAuthPhaseAuthenticate &&		client->phase != iscsiAuthPhaseDone) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone) {		*statusCode = 0x0000;		return iscsiAuthStatusNoError;	}	switch (client->remoteAuthStatus) {	case iscsiAuthStatusPass:		*statusCode = 0x0000; /* no error */		break;	case iscsiAuthStatusFail:		switch (client->debugStatus) {		case iscsiAuthDebugStatusAuthFail:			/* Authentication Error with peer. */			if (client->nodeType == iscsiAuthNodeTypeInitiator) {				*statusCode = 0x0300; /* iSCSI Target error */			} else {				*statusCode = 0x0201; /* iSCSI Initiator error */			}			break;		case iscsiAuthDebugStatusChapAlgorithmExpected:		case iscsiAuthDebugStatusChapIdentifierExpected:		case iscsiAuthDebugStatusChapChallengeExpected:		case iscsiAuthDebugStatusChapResponseExpected:		case iscsiAuthDebugStatusChapUsernameExpected:			/* Missing parameter with peer. */			if (client->nodeType == iscsiAuthNodeTypeInitiator) {				*statusCode = 0x0300; /* iSCSI Target error */			} else {				*statusCode = 0x0207; /* iSCSI Initiator error */			}			break;		case iscsiAuthDebugStatusAuthMethodNotPresent:		case iscsiAuthDebugStatusAuthMethodReject:		case iscsiAuthDebugStatusAuthMethodNone:		case iscsiAuthDebugStatusChapAlgorithmReject:		case iscsiAuthDebugStatusChapIdentifierBad:		case iscsiAuthDebugStatusChapChallengeBad:		case iscsiAuthDebugStatusChapResponseBad:		case iscsiAuthDebugStatusChapChallengeReflected:		case iscsiAuthDebugStatusUnexpectedKeyPresent:		case iscsiAuthDebugStatusTbitSetIllegal:		case iscsiAuthDebugStatusTbitSetPremature:		case iscsiAuthDebugStatusMessageCountLimit:			/* Other error with peer. */			if (client->nodeType == iscsiAuthNodeTypeInitiator) {				*statusCode = 0x0300; /* iSCSI Target error */			} else {				*statusCode = 0x0200; /* iSCSI Initiator error */			}			break;		case iscsiAuthDebugStatusNotSet:		case iscsiAuthDebugStatusAuthPass:		case iscsiAuthDebugStatusAuthRemoteFalse:		case iscsiAuthDebugStatusRecvDuplicateSetKeyValue:		case iscsiAuthDebugStatusRecvStringTooLong:		case iscsiAuthDebugStatusRecvTooMuchData:		case iscsiAuthDebugStatusAuthMethodBad:		case iscsiAuthDebugStatusChapAlgorithmBad:		case iscsiAuthDebugStatusLocalPasswordNotSet:		case iscsiAuthDebugStatusPasswordDecryptFailed:		case iscsiAuthDebugStatusPasswordTooShortWithNoIpSec:		case iscsiAuthDebugStatusAuthStatusBad:		case iscsiAuthDebugStatusAuthPassNotValid:		case iscsiAuthDebugStatusSendDuplicateSetKeyValue:		case iscsiAuthDebugStatusSendStringTooLong:		case iscsiAuthDebugStatusSendTooMuchData:		default:			/* Error on this side. */			if (client->nodeType == iscsiAuthNodeTypeInitiator) {				*statusCode = 0x0200; /* iSCSI Initiator error */			} else {				*statusCode = 0x0300; /* iSCSI Target error */			}		}		break;	case iscsiAuthStatusNoError:	case iscsiAuthStatusError:	case iscsiAuthStatusContinue:	case iscsiAuthStatusInProgress:		/* Bad authStatus */		if (client->nodeType == iscsiAuthNodeTypeInitiator) {			*statusCode = 0x0200; /* iSCSI Initiator error */		} else {			*statusCode = 0x0300; /* iSCSI Target error */		}	}	return iscsiAuthStatusNoError;}intiscsiAuthClientGetDebugStatus(IscsiAuthClient *client, int *value){	if (!client || client->signature != iscsiAuthClientSignature) {		return iscsiAuthStatusError;	}	if (client->phase != iscsiAuthPhaseDone) {		client->phase = iscsiAuthPhaseError;		return iscsiAuthStatusError;	}	*value = client->debugStatus;	return iscsiAuthStatusNoError;}const char *iscsiAuthClientDebugStatusToText(int debugStatus){	const char *s;	switch (debugStatus) {	case iscsiAuthDebugStatusNotSet:		s = "Debug status not set";		break;	case iscsiAuthDebugStatusAuthPass:		s = "Authentication request passed";		break;	case iscsiAuthDebugStatusAuthRemoteFalse:		s = "Authentication not enabled";		break;	case iscsiAuthDebugStatusAuthFail:		s = "Authentication request failed";		break;	case iscsiAuthDebugStatusRecvDuplicateSetKeyValue:		s = "Same key set more than once on receive";		break;	case iscsiAuthDebugStatusRecvStringTooLong:		s = "Key value too long on receive";		break;	case iscsiAuthDebugStatusRecvTooMuchData:		s = "Too much data on receive";		break;	case iscsiAuthDebugStatusAuthMethodBad:		s = "AuthMethod bad";		break;	case iscsiAuthDebugStatusChapAlgorithmBad:		s = "CHAP algorithm bad";		break;	case iscsiAuthDebugStatusLocalPasswordNotSet:		s = "local password not set";		break;	case iscsiAuthDebugStatusPasswordDecryptFailed:		s = "decrypt password failed";		break;	case iscsiAuthDebugStatusPasswordTooShortWithNoIpSec:		s = "local password too short with no IPSec";		break;	case iscsiAuthDebugStatusAuthStatusBad:		s = "Authentication request status bad";		break;	case iscsiAuthDebugStatusAuthPassNotValid:		s = "authentication pass status not valid";		break;	case iscsiAuthDebugStatusSendDuplicateSetKeyValue:		s = "Same key set more than once on send";		break;	case iscsiAuthDebugStatusSendStringTooLong:		s = "Key value too long on send";		break;	case iscsiAuthDebugStatusSendTooMuchData:		s = "Too much data on send";		break;	case iscsiAuthDebugStatusChapAlgorithmExpected:		s = "CHAP algorithm key expected";		break;	case iscsiAuthDebugStatusChapIdentifierExpected:		s = "CHAP identifier expected";		break;	case iscsiAuthDebugStatusChapChallengeExpected:		s = "CHAP challenge expected";		break;	case iscsiAuthDebugStatusChapResponseExpected:		s = "CHAP response expected";		break;	case iscsiAuthDebugStatusChapUsernameExpected:		s = "CHAP username expected";		break;	case iscsiAuthDebugStatusAuthMethodNotPresent:		s = "AuthMethod key not present";		break;	case iscsiAuthDebugStatusAuthMethodReject:		s = "AuthMethod negotiation failed";		break;	case iscsiAuthDebugStatusAuthMethodNone:		s = "AuthMethod negotiated to none";		break;	case iscsiAuthDebugStatusChapAlgorithmReject:		s = "CHAP algorithm negotiation failed";		break;	case iscsiAuthDebugStatusChapIdentifierBad:		s = "CHAP identifier bad";		break;	case iscsiAuthDebugStatusChapChallengeBad:		s = "CHAP challenge bad";		break;	case iscsiAuthDebugStatusChapResponseBad:		s = "CHAP response bad";		break;	case iscsiAuthDebugStatusChapChallengeReflected:		s = "CHAP challange reflected";		break;	case iscsiAuthDebugStatusUnexpectedKeyPresent:		s = "unexpected key present";		break;	case iscsiAuthDebugStatusTbitSetIllegal:		s = "T bit set on response, but not on previous command";		break;	case iscsiAuthDebugStatusTbitSetPremature:		s = "T bit set on response, but authenticaton not complete";		break;	case iscsiAuthDebugStatusMessageCountLimit:		s = "message count limit reached";		break;	default:		s = "Unknown error";	}	return s;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -