Merge pull request #25 from ejohnstown/global-request

Global Request Message
pull/29/head
dgarske 2017-06-12 11:15:11 -07:00 committed by GitHub
commit 5ae31ea0c7
2 changed files with 81 additions and 2 deletions

View File

@ -2194,6 +2194,42 @@ static int DoUserAuthRequestPublicKey(WOLFSSH* ssh, WS_UserAuthData* authData,
}
static int DoGlobalRequest(WOLFSSH* ssh,
uint8_t* buf, uint32_t len, uint32_t* idx)
{
uint32_t begin;
int ret = WS_SUCCESS;
char name[80];
uint32_t nameSz = sizeof(name);
uint8_t wantReply = 0;
WLOG(WS_LOG_DEBUG, "Entering DoGlobalRequest()");
if (ssh == NULL || buf == NULL || len == 0 || idx == NULL)
ret = WS_BAD_ARGUMENT;
if (ret == WS_SUCCESS) {
begin = *idx;
ret = GetString(name, &nameSz, buf, len, &begin);
}
if (ret == WS_SUCCESS) {
WLOG(WS_LOG_DEBUG, "DGR: request name = %s", name);
ret = GetBoolean(&wantReply, buf, len, &begin);
}
if (ret == WS_SUCCESS) {
*idx += len;
if (wantReply)
ret = SendRequestSuccess(ssh, 0);
}
WLOG(WS_LOG_DEBUG, "Leaving DoGlobalRequest(), ret = %d", ret);
return ret;
}
static int DoUserAuthRequest(WOLFSSH* ssh,
uint8_t* buf, uint32_t len, uint32_t* idx)
{
@ -2204,11 +2240,9 @@ static int DoUserAuthRequest(WOLFSSH* ssh,
WLOG(WS_LOG_DEBUG, "Entering DoUserAuthRequest()");
if (ssh == NULL || buf == NULL || len == 0 || idx == NULL)
ret = WS_BAD_ARGUMENT;
if (ret == WS_SUCCESS) {
begin = *idx;
WMEMSET(&authData, 0, sizeof(authData));
@ -2635,6 +2669,11 @@ static int DoPacket(WOLFSSH* ssh)
ret = DoUserAuthRequest(ssh, buf + idx, payloadSz, &payloadIdx);
break;
case MSGID_GLOBAL_REQUEST:
WLOG(WS_LOG_DEBUG, "Decoding MSGID_GLOBAL_REQUEST");
ret = DoGlobalRequest(ssh, buf + idx, payloadSz, &payloadIdx);
break;
case MSGID_CHANNEL_OPEN:
WLOG(WS_LOG_DEBUG, "Decoding MSGID_CHANNEL_OPEN");
ret = DoChannelOpen(ssh, buf + idx, payloadSz, &payloadIdx);
@ -4010,6 +4049,41 @@ int SendUserAuthBanner(WOLFSSH* ssh)
}
int SendRequestSuccess(WOLFSSH* ssh, int success)
{
uint8_t* output;
uint32_t idx;
int ret = WS_SUCCESS;
WLOG(WS_LOG_DEBUG, "Entering SendRequestSuccess(), %s",
success ? "Success" : "Failure");
if (ssh == NULL)
ret = WS_BAD_ARGUMENT;
if (ret == WS_SUCCESS)
ret = PreparePacket(ssh, MSG_ID_SZ);
if (ret == WS_SUCCESS) {
output = ssh->outputBuffer.buffer;
idx = ssh->outputBuffer.length;
output[idx++] = success ?
MSGID_REQUEST_SUCCESS : MSGID_REQUEST_FAILURE;
ssh->outputBuffer.length = idx;
ret = BundlePacket(ssh);
}
if (ret == WS_SUCCESS)
ret = SendBuffered(ssh);
WLOG(WS_LOG_DEBUG, "Leaving SendRequestSuccess(), ret = %d", ret);
return ret;
}
int SendChannelOpenConf(WOLFSSH* ssh)
{
uint8_t* output;

View File

@ -313,6 +313,7 @@ WOLFSSH_LOCAL int SendUserAuthFailure(WOLFSSH*, uint8_t);
WOLFSSH_LOCAL int SendUserAuthBanner(WOLFSSH*);
WOLFSSH_LOCAL int SendUserAuthPkOk(WOLFSSH*, const uint8_t*, uint32_t,
const uint8_t*, uint32_t);
WOLFSSH_LOCAL int SendRequestSuccess(WOLFSSH*, int);
WOLFSSH_LOCAL int SendChannelOpenConf(WOLFSSH*);
WOLFSSH_LOCAL int SendChannelEof(WOLFSSH*, uint32_t);
WOLFSSH_LOCAL int SendChannelClose(WOLFSSH*, uint32_t);
@ -396,6 +397,10 @@ enum WS_MessageIds {
MSGID_USERAUTH_PK_OK = 60, /* Public Key OK */
MSGID_USERAUTH_PW_CHRQ = 60, /* Password Change Request */
MSGID_GLOBAL_REQUEST = 80,
MSGID_REQUEST_SUCCESS = 81,
MSGID_REQUEST_FAILURE = 82,
MSGID_CHANNEL_OPEN = 90,
MSGID_CHANNEL_OPEN_CONF = 91,
MSGID_CHANNEL_WINDOW_ADJUST = 93,