📄 iscsiauthclient.c
字号:
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 + -