mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-23 04:54:26 +00:00
api.c ensure old mode is always available when not using --api-groups + quit() on param errors
This commit is contained in:
parent
e16452f09f
commit
b63a374de2
60
api.c
60
api.c
@ -158,7 +158,7 @@ static char *msg_buffer = NULL;
|
|||||||
static SOCKETTYPE sock = INVSOCK;
|
static SOCKETTYPE sock = INVSOCK;
|
||||||
|
|
||||||
static const char *UNAVAILABLE = " - API will not be available";
|
static const char *UNAVAILABLE = " - API will not be available";
|
||||||
static const char *GROUPDIS = " - groups will be disabled";
|
static const char *INVAPIGROUPS = "Invalid --api-groups parameter";
|
||||||
|
|
||||||
static const char *BLANK = "";
|
static const char *BLANK = "";
|
||||||
static const char *COMMA = ",";
|
static const char *COMMA = ",";
|
||||||
@ -549,8 +549,6 @@ struct APIGROUPS {
|
|||||||
char *commands;
|
char *commands;
|
||||||
} apigroups['Z' - 'A' + 1]; // only A=0 to Z=25 (R: noprivs, W: allprivs)
|
} apigroups['Z' - 'A' + 1]; // only A=0 to Z=25 (R: noprivs, W: allprivs)
|
||||||
|
|
||||||
static bool groups_enabled = false;
|
|
||||||
|
|
||||||
static struct IP4ACCESS *ipaccess = NULL;
|
static struct IP4ACCESS *ipaccess = NULL;
|
||||||
static int ips = 0;
|
static int ips = 0;
|
||||||
|
|
||||||
@ -2022,7 +2020,7 @@ void notifystatus(int device, struct cgpu_info *cgpu, bool isjson, __maybe_unuse
|
|||||||
strcat(io_buffer, buf);
|
strcat(io_buffer, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void notify(__maybe_unused SOCKETTYPE c, __maybe_unused char *param, bool isjson, __maybe_unused char group)
|
static void notify(__maybe_unused SOCKETTYPE c, __maybe_unused char *param, bool isjson, char group)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -2344,6 +2342,7 @@ static void tidyup(__maybe_unused void *arg)
|
|||||||
*/
|
*/
|
||||||
static void setup_groups()
|
static void setup_groups()
|
||||||
{
|
{
|
||||||
|
char *api_groups = opt_api_groups ? opt_api_groups : (char *)BLANK;
|
||||||
char *buf, *ptr, *next, *colon;
|
char *buf, *ptr, *next, *colon;
|
||||||
char group;
|
char group;
|
||||||
char commands[TMPBUFSIZ];
|
char commands[TMPBUFSIZ];
|
||||||
@ -2352,11 +2351,11 @@ static void setup_groups()
|
|||||||
bool addstar, did;
|
bool addstar, did;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
buf = malloc(strlen(opt_api_groups) + 1);
|
buf = malloc(strlen(api_groups) + 1);
|
||||||
if (unlikely(!buf))
|
if (unlikely(!buf))
|
||||||
quit(1, "Failed to malloc ipgroups buf");
|
quit(1, "Failed to malloc ipgroups buf");
|
||||||
|
|
||||||
strcpy(buf, opt_api_groups);
|
strcpy(buf, api_groups);
|
||||||
|
|
||||||
next = buf;
|
next = buf;
|
||||||
// for each group defined
|
// for each group defined
|
||||||
@ -2371,29 +2370,29 @@ static void setup_groups()
|
|||||||
colon = strchr(ptr, ':');
|
colon = strchr(ptr, ':');
|
||||||
if (colon)
|
if (colon)
|
||||||
*colon = '\0';
|
*colon = '\0';
|
||||||
applog(LOG_WARNING, "API invalid group name '%s'%s", ptr, GROUPDIS);
|
applog(LOG_WARNING, "API invalid group name '%s'", ptr);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
group = GROUP(*ptr);
|
group = GROUP(*ptr);
|
||||||
if (!VALIDGROUP(group)) {
|
if (!VALIDGROUP(group)) {
|
||||||
applog(LOG_WARNING, "API invalid group name '%c'%s", *ptr, GROUPDIS);
|
applog(LOG_WARNING, "API invalid group name '%c'", *ptr);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group == PRIVGROUP) {
|
if (group == PRIVGROUP) {
|
||||||
applog(LOG_WARNING, "API group name can't be '%c'%s", PRIVGROUP, GROUPDIS);
|
applog(LOG_WARNING, "API group name can't be '%c'", PRIVGROUP);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group == NOPRIVGROUP) {
|
if (group == NOPRIVGROUP) {
|
||||||
applog(LOG_WARNING, "API group name can't be '%c'%s", NOPRIVGROUP, GROUPDIS);
|
applog(LOG_WARNING, "API group name can't be '%c'", NOPRIVGROUP);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apigroups[GROUPOFFSET(group)].commands != NULL) {
|
if (apigroups[GROUPOFFSET(group)].commands != NULL) {
|
||||||
applog(LOG_WARNING, "API duplicate group name '%c'%s", *ptr, GROUPDIS);
|
applog(LOG_WARNING, "API duplicate group name '%c'", *ptr);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr += 2;
|
ptr += 2;
|
||||||
@ -2428,8 +2427,8 @@ static void setup_groups()
|
|||||||
*cmd = '\0';
|
*cmd = '\0';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
applog(LOG_WARNING, "API unknown command '%s' in group '%c'%s", ptr, group, GROUPDIS);
|
applog(LOG_WARNING, "API unknown command '%s' in group '%c'", ptr, group);
|
||||||
goto shin;
|
quit(1, INVAPIGROUPS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2480,8 +2479,6 @@ static void setup_groups()
|
|||||||
|
|
||||||
// W (PRIVGROUP) is handled as a special case since it simply means all commands
|
// W (PRIVGROUP) is handled as a special case since it simply means all commands
|
||||||
|
|
||||||
groups_enabled = true;
|
|
||||||
shin:
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2648,16 +2645,12 @@ void api(int api_thr_id)
|
|||||||
pthread_cleanup_push(tidyup, NULL);
|
pthread_cleanup_push(tidyup, NULL);
|
||||||
my_thr_id = api_thr_id;
|
my_thr_id = api_thr_id;
|
||||||
|
|
||||||
/* This should be done first to ensure curl has already called WSAStartup() in windows */
|
|
||||||
sleep(opt_log_interval);
|
|
||||||
|
|
||||||
if (!opt_api_listen) {
|
if (!opt_api_listen) {
|
||||||
applog(LOG_DEBUG, "API not running%s", UNAVAILABLE);
|
applog(LOG_DEBUG, "API not running%s", UNAVAILABLE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt_api_groups)
|
setup_groups();
|
||||||
setup_groups();
|
|
||||||
|
|
||||||
if (opt_api_allow) {
|
if (opt_api_allow) {
|
||||||
setup_ipaccess();
|
setup_ipaccess();
|
||||||
@ -2668,6 +2661,10 @@ void api(int api_thr_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This should be done before curl in needed
|
||||||
|
* to ensure curl has already called WSAStartup() in windows */
|
||||||
|
sleep(opt_log_interval);
|
||||||
|
|
||||||
sock = socket(AF_INET, SOCK_STREAM, 0);
|
sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
if (sock == INVSOCK) {
|
if (sock == INVSOCK) {
|
||||||
applog(LOG_ERR, "API1 initialisation failed (%s)%s", SOCKERRMSG, UNAVAILABLE);
|
applog(LOG_ERR, "API1 initialisation failed (%s)%s", SOCKERRMSG, UNAVAILABLE);
|
||||||
@ -2739,14 +2736,13 @@ void api(int api_thr_id)
|
|||||||
addrok = false;
|
addrok = false;
|
||||||
group = NOPRIVGROUP;
|
group = NOPRIVGROUP;
|
||||||
if (opt_api_allow) {
|
if (opt_api_allow) {
|
||||||
if (groups_enabled)
|
for (i = 0; i < ips; i++) {
|
||||||
for (i = 0; i < ips; i++) {
|
if ((cli.sin_addr.s_addr & ipaccess[i].mask) == ipaccess[i].ip) {
|
||||||
if ((cli.sin_addr.s_addr & ipaccess[i].mask) == ipaccess[i].ip) {
|
addrok = true;
|
||||||
addrok = true;
|
group = ipaccess[i].group;
|
||||||
group = ipaccess[i].group;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (opt_api_network)
|
if (opt_api_network)
|
||||||
addrok = true;
|
addrok = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user