Browse Source

Check for corrupt ckdb responses in send_recv_auth

master
Con Kolivas 10 years ago
parent
commit
8c6e786cef
  1. 18
      src/stratifier.c

18
src/stratifier.c

@ -1944,7 +1944,7 @@ static int send_recv_auth(stratum_instance_t *client)
json_msg = ckdb_msg(ckp, val, ID_AUTH); json_msg = ckdb_msg(ckp, val, ID_AUTH);
if (unlikely(!json_msg)) { if (unlikely(!json_msg)) {
LOGWARNING("Failed to dump json in send_recv_auth"); LOGWARNING("Failed to dump json in send_recv_auth");
return ret; goto out;
} }
/* We want responses from ckdb serialised and not interleaved with /* We want responses from ckdb serialised and not interleaved with
@ -1964,7 +1964,10 @@ static int send_recv_auth(stratum_instance_t *client)
json_t *val = NULL; json_t *val = NULL;
LOGINFO("Got ckdb response: %s", buf); LOGINFO("Got ckdb response: %s", buf);
sscanf(buf, "id.%*d.%s", response); if (unlikely(sscanf(buf, "id.%*d.%s", response) < 1 || strlen(response) < 1 || !strchr(response, '='))) {
LOGWARNING("Got unparseable ckdb auth response: %s", buf);
goto out_fail;
}
cmd = response; cmd = response;
strsep(&cmd, "="); strsep(&cmd, "=");
LOGINFO("User %s Worker %s got auth response: %s cmd: %s", LOGINFO("User %s Worker %s got auth response: %s cmd: %s",
@ -1972,7 +1975,7 @@ static int send_recv_auth(stratum_instance_t *client)
response, cmd); response, cmd);
val = json_loads(cmd, 0, &err_val); val = json_loads(cmd, 0, &err_val);
if (unlikely(!val)) if (unlikely(!val))
LOGINFO("AUTH JSON decode failed(%d): %s", err_val.line, err_val.text); LOGWARNING("AUTH JSON decode failed(%d): %s", err_val.line, err_val.text);
else { else {
json_get_string(&secondaryuserid, val, "secondaryuserid"); json_get_string(&secondaryuserid, val, "secondaryuserid");
json_get_int(&worker->mindiff, val, "difficultydefault"); json_get_int(&worker->mindiff, val, "difficultydefault");
@ -1990,11 +1993,12 @@ static int send_recv_auth(stratum_instance_t *client)
} }
if (likely(val)) if (likely(val))
json_decref(val); json_decref(val);
} else { goto out;
ret = -1;
LOGWARNING("Got no auth response from ckdb :(");
} }
LOGWARNING("Got no auth response from ckdb :(");
out_fail:
ret = -1;
out:
return ret; return ret;
} }

Loading…
Cancel
Save