Modify not to limit the length of DB URI (#827)
This commit is contained in:
parent
0790674c14
commit
c6bfbed922
|
@ -20,11 +20,9 @@
|
|||
#include <mongoc.h>
|
||||
|
||||
#include "ogs-dbi.h"
|
||||
#include <string.h>
|
||||
|
||||
int __ogs_dbi_domain;
|
||||
|
||||
static char masked_db_uri[255];
|
||||
static ogs_mongoc_t self;
|
||||
|
||||
/*
|
||||
|
@ -50,28 +48,32 @@ ogs_mongoc_mongoc_client_get_server_status (mongoc_client_t *client, /* IN */
|
|||
return ret;
|
||||
}
|
||||
|
||||
const char* ogs_mask_db_uri(const char *db_uri)
|
||||
static char *masked_db_uri(const char *db_uri)
|
||||
{
|
||||
bzero(masked_db_uri, sizeof(masked_db_uri));
|
||||
if (strnlen(db_uri, sizeof(masked_db_uri)) == sizeof(masked_db_uri)) {
|
||||
return db_uri;
|
||||
}
|
||||
char *tmp;
|
||||
char *array[2], *saveptr = NULL;
|
||||
char *masked = NULL;
|
||||
|
||||
char *token = strtok((char *)db_uri, "@");
|
||||
if (strlen(token) > 1) {
|
||||
strcpy((char *)masked_db_uri, "mongodb://*****:*****@");
|
||||
while (token != NULL) {
|
||||
token = strtok(NULL, "@");
|
||||
if (token != NULL) {
|
||||
strcat((char *)masked_db_uri, token);
|
||||
}
|
||||
}
|
||||
ogs_assert(db_uri);
|
||||
|
||||
tmp = ogs_strdup(db_uri);
|
||||
|
||||
memset(array, 0, sizeof(array));
|
||||
array[0] = strtok_r(tmp, "@", &saveptr);
|
||||
if (array[0])
|
||||
array[1] = strtok_r(NULL, "@", &saveptr);
|
||||
|
||||
if (array[1]) {
|
||||
masked = ogs_msprintf("mongodb://*****:*****@%s", array[1]);
|
||||
ogs_assert(masked);
|
||||
} else {
|
||||
// no credentials provided, no need to mask anything
|
||||
return db_uri;
|
||||
masked = ogs_strdup(array[0]);
|
||||
ogs_assert(masked);
|
||||
}
|
||||
|
||||
return masked_db_uri;
|
||||
ogs_free(tmp);
|
||||
|
||||
return masked;
|
||||
}
|
||||
|
||||
int ogs_mongoc_init(const char *db_uri)
|
||||
|
@ -89,13 +91,15 @@ int ogs_mongoc_init(const char *db_uri)
|
|||
|
||||
memset(&self, 0, sizeof(ogs_mongoc_t));
|
||||
|
||||
self.masked_db_uri = masked_db_uri(db_uri);
|
||||
|
||||
mongoc_init();
|
||||
|
||||
self.initialized = true;
|
||||
|
||||
self.client = mongoc_client_new(db_uri);
|
||||
if (!self.client) {
|
||||
ogs_error("Failed to parse DB URI [%s]", ogs_mask_db_uri(db_uri));
|
||||
ogs_error("Failed to parse DB URI [%s]", self.masked_db_uri);
|
||||
return OGS_ERROR;
|
||||
}
|
||||
|
||||
|
@ -114,7 +118,7 @@ int ogs_mongoc_init(const char *db_uri)
|
|||
|
||||
if (!ogs_mongoc_mongoc_client_get_server_status(
|
||||
self.client, NULL, &reply, &error)) {
|
||||
ogs_warn("Failed to connect to server [%s]", ogs_mask_db_uri(db_uri));
|
||||
ogs_warn("Failed to connect to server [%s]", self.masked_db_uri);
|
||||
return OGS_RETRY;
|
||||
}
|
||||
|
||||
|
@ -122,7 +126,7 @@ int ogs_mongoc_init(const char *db_uri)
|
|||
|
||||
bson_destroy(&reply);
|
||||
|
||||
ogs_info("MongoDB URI: '%s'", ogs_mask_db_uri(db_uri));
|
||||
ogs_info("MongoDB URI: '%s'", self.masked_db_uri);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
@ -137,6 +141,10 @@ void ogs_mongoc_final(void)
|
|||
mongoc_client_destroy(self.client);
|
||||
self.client = NULL;
|
||||
}
|
||||
if (self.masked_db_uri) {
|
||||
ogs_free(self.masked_db_uri);
|
||||
self.masked_db_uri = NULL;
|
||||
}
|
||||
|
||||
if (self.initialized) {
|
||||
mongoc_cleanup();
|
||||
|
|
|
@ -37,12 +37,13 @@ typedef struct ogs_mongoc_s {
|
|||
void *client;
|
||||
void *database;
|
||||
|
||||
char *masked_db_uri;
|
||||
|
||||
struct {
|
||||
void *subscriber;
|
||||
} collection;
|
||||
} ogs_mongoc_t;
|
||||
|
||||
const char* ogs_mask_db_uri(const char *db_uri);
|
||||
int ogs_mongoc_init(const char *db_uri);
|
||||
void ogs_mongoc_final(void);
|
||||
ogs_mongoc_t *ogs_mongoc(void);
|
||||
|
|
Loading…
Reference in New Issue