summaryrefslogtreecommitdiffstats
path: root/src/server/rpc.c
diff options
context:
space:
mode:
authorSimon Rettberg2020-03-17 13:01:37 +0100
committerSimon Rettberg2020-03-17 13:01:37 +0100
commit2e70a0836173c9502ff5cddd849165d432a883cb (patch)
tree7e96df086ce728755dff66e88f125c8e6cef20fe /src/server/rpc.c
parent[SERVER] Don't prefetch across hash blocks in BGS_HASHBLOCK mode (diff)
downloaddnbd3-2e70a0836173c9502ff5cddd849165d432a883cb.tar.gz
dnbd3-2e70a0836173c9502ff5cddd849165d432a883cb.tar.xz
dnbd3-2e70a0836173c9502ff5cddd849165d432a883cb.zip
[SERVER] Include build type and version in RPC
Added new query type q=version, which uses the STATS access rights.
Diffstat (limited to 'src/server/rpc.c')
-rw-r--r--src/server/rpc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/server/rpc.c b/src/server/rpc.c
index b66b8fe..12ad0dd 100644
--- a/src/server/rpc.c
+++ b/src/server/rpc.c
@@ -6,6 +6,7 @@
#include "image.h"
#include "altservers.h"
#include "../shared/sockhelper.h"
+#include "../version.h"
#include "fileutil.h"
#include "picohttpparser/picohttpparser.h"
#include "urldecode.h"
@@ -259,7 +260,7 @@ static bool handleStatus(int sock, int permissions, struct field *fields, size_t
{
bool ok;
bool stats = false, images = false, clients = false, space = false;
- bool logfile = false, config = false, altservers = false;
+ bool logfile = false, config = false, altservers = false, version = false;
#define SETVAR(var) if ( !var && STRCMP(fields[i].value, #var) ) var = true
for (size_t i = 0; i < fields_num; ++i) {
if ( !equals( &fields[i].name, &STR_Q ) ) continue;
@@ -270,9 +271,10 @@ static bool handleStatus(int sock, int permissions, struct field *fields, size_t
else SETVAR(logfile);
else SETVAR(config);
else SETVAR(altservers);
+ else SETVAR(version);
}
#undef SETVAR
- if ( ( stats || space ) && !(permissions & ACL_STATS) ) {
+ if ( ( stats || space || version ) && !(permissions & ACL_STATS) ) {
return sendReply( sock, "403 Forbidden", "text/plain", "No permission to access statistics", -1, keepAlive );
}
if ( images && !(permissions & ACL_IMAGE_LIST) ) {
@@ -308,6 +310,10 @@ static bool handleStatus(int sock, int permissions, struct field *fields, size_t
statisticsJson = json_pack( "{sI}",
"runId", randomRunId );
}
+ if ( version ) {
+ json_object_set_new( statisticsJson, "version", json_string( VERSION_STRING ) );
+ json_object_set_new( statisticsJson, "build", json_string( TOSTRING( BUILD_TYPE ) ) );
+ }
if ( space ) {
uint64_t spaceTotal = 0, spaceAvail = 0;
file_freeDiskSpace( _basePath, &spaceTotal, &spaceAvail );