]> arthur.barton.de Git - netdata.git/blobdiff - src/registry.c
Merge branch 'master' into ab-debian
[netdata.git] / src / registry.c
index 164c9179af1bde727babd1f66d556823b06472df..ed9be984881d770d29c873285207cb2f076ca8f8 100644 (file)
 // REGISTRY concurrency locking
 
 static inline void registry_lock(void) {
-    pthread_mutex_lock(&registry.lock);
+    netdata_mutex_lock(&registry.lock);
 }
 
 static inline void registry_unlock(void) {
-    pthread_mutex_unlock(&registry.lock);
+    netdata_mutex_unlock(&registry.lock);
 }
 
 
@@ -41,19 +41,19 @@ static inline void registry_set_person_cookie(struct web_client *w, REGISTRY_PER
 // ----------------------------------------------------------------------------
 // JSON GENERATION
 
-static inline void registry_json_header(struct web_client *w, const char *action, const char *status) {
+static inline void registry_json_header(RRDHOST *host, struct web_client *w, const char *action, const char *status) {
     buffer_flush(w->response.data);
     w->response.data->contenttype = CT_APPLICATION_JSON;
     buffer_sprintf(w->response.data, "{\n\t\"action\": \"%s\",\n\t\"status\": \"%s\",\n\t\"hostname\": \"%s\",\n\t\"machine_guid\": \"%s\"",
-            action, status, registry.hostname, localhost->machine_guid);
+            action, status, (host == localhost)?registry.hostname:host->hostname, host->machine_guid);
 }
 
 static inline void registry_json_footer(struct web_client *w) {
     buffer_strcat(w->response.data, "\n}\n");
 }
 
-static inline int registry_json_disabled(struct web_client *w, const char *action) {
-    registry_json_header(w, action, REGISTRY_STATUS_DISABLED);
+static inline int registry_json_disabled(RRDHOST *host, struct web_client *w, const char *action) {
+    registry_json_header(host, w, action, REGISTRY_STATUS_DISABLED);
 
     buffer_sprintf(w->response.data, ",\n\t\"registry\": \"%s\"",
             registry.registry_to_announce);
@@ -127,8 +127,8 @@ static inline int registry_person_url_callback_verify_machine_exists(void *entry
 // ----------------------------------------------------------------------------
 // public HELLO request
 
-int registry_request_hello_json(struct web_client *w) {
-    registry_json_header(w, "hello", REGISTRY_STATUS_OK);
+int registry_request_hello_json(RRDHOST *host, struct web_client *w) {
+    registry_json_header(host, w, "hello", REGISTRY_STATUS_OK);
 
     buffer_sprintf(w->response.data, ",\n\t\"registry\": \"%s\"",
             registry.registry_to_announce);
@@ -143,9 +143,9 @@ int registry_request_hello_json(struct web_client *w) {
 #define REGISTRY_VERIFY_COOKIES_GUID "give-me-back-this-cookie-now--please"
 
 // the main method for registering an access
-int registry_request_access_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when) {
+int registry_request_access_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when) {
     if(unlikely(!registry.enabled))
-        return registry_json_disabled(w, "access");
+        return registry_json_disabled(host, w, "access");
 
     // ------------------------------------------------------------------------
     // verify the browser supports cookies
@@ -167,7 +167,7 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
 
     REGISTRY_PERSON *p = registry_request_access(person_guid, machine_guid, url, name, when);
     if(!p) {
-        registry_json_header(w, "access", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "access", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 412;
@@ -177,7 +177,7 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
     registry_set_person_cookie(w, p);
 
     // generate the response
-    registry_json_header(w, "access", REGISTRY_STATUS_OK);
+    registry_json_header(host, w, "access", REGISTRY_STATUS_OK);
 
     buffer_sprintf(w->response.data, ",\n\t\"person_guid\": \"%s\",\n\t\"urls\": [", p->guid);
     struct registry_json_walk_person_urls_callback c = { p, NULL, w, 0 };
@@ -193,22 +193,22 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
 // public DELETE request
 
 // the main method for deleting a URL from a person
-int registry_request_delete_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when) {
+int registry_request_delete_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when) {
     if(!registry.enabled)
-        return registry_json_disabled(w, "delete");
+        return registry_json_disabled(host, w, "delete");
 
     registry_lock();
 
     REGISTRY_PERSON *p = registry_request_delete(person_guid, machine_guid, url, delete_url, when);
     if(!p) {
-        registry_json_header(w, "delete", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "delete", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 412;
     }
 
     // generate the response
-    registry_json_header(w, "delete", REGISTRY_STATUS_OK);
+    registry_json_header(host, w, "delete", REGISTRY_STATUS_OK);
     registry_json_footer(w);
     registry_unlock();
     return 200;
@@ -218,21 +218,21 @@ int registry_request_delete_json(struct web_client *w, char *person_guid, char *
 // public SEARCH request
 
 // the main method for searching the URLs of a netdata
-int registry_request_search_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when) {
+int registry_request_search_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when) {
     if(!registry.enabled)
-        return registry_json_disabled(w, "search");
+        return registry_json_disabled(host, w, "search");
 
     registry_lock();
 
     REGISTRY_MACHINE *m = registry_request_machine(person_guid, machine_guid, url, request_machine, when);
     if(!m) {
-        registry_json_header(w, "search", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "search", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 404;
     }
 
-    registry_json_header(w, "search", REGISTRY_STATUS_OK);
+    registry_json_header(host, w, "search", REGISTRY_STATUS_OK);
 
     buffer_strcat(w->response.data, ",\n\t\"urls\": [");
     struct registry_json_walk_person_urls_callback c = { NULL, m, w, 0 };
@@ -248,9 +248,9 @@ int registry_request_search_json(struct web_client *w, char *person_guid, char *
 // SWITCH REQUEST
 
 // the main method for switching user identity
-int registry_request_switch_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when) {
+int registry_request_switch_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when) {
     if(!registry.enabled)
-        return registry_json_disabled(w, "switch");
+        return registry_json_disabled(host, w, "switch");
 
     (void)url;
     (void)when;
@@ -259,7 +259,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
 
     REGISTRY_PERSON *op = registry_person_find(person_guid);
     if(!op) {
-        registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 430;
@@ -267,7 +267,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
 
     REGISTRY_PERSON *np = registry_person_find(new_person_guid);
     if(!np) {
-        registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 431;
@@ -275,7 +275,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
 
     REGISTRY_MACHINE *m = registry_machine_find(machine_guid);
     if(!m) {
-        registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 432;
@@ -286,7 +286,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
     // verify the old person has access to this machine
     avl_traverse(&op->person_urls, registry_person_url_callback_verify_machine_exists, &data);
     if(!data.count) {
-        registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 433;
@@ -296,7 +296,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
     data.count = 0;
     avl_traverse(&np->person_urls, registry_person_url_callback_verify_machine_exists, &data);
     if(!data.count) {
-        registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
+        registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
         registry_json_footer(w);
         registry_unlock();
         return 434;
@@ -307,7 +307,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
     registry_set_person_cookie(w, np);
 
     // generate the response
-    registry_json_header(w, "switch", REGISTRY_STATUS_OK);
+    registry_json_header(host, w, "switch", REGISTRY_STATUS_OK);
     buffer_sprintf(w->response.data, ",\n\t\"person_guid\": \"%s\"", np->guid);
     registry_json_footer(w);