diff --git a/README.markdown b/README.markdown index 300d755..3622cda 100644 --- a/README.markdown +++ b/README.markdown @@ -22,6 +22,7 @@ curl -d "GET/hello" http://127.0.0.1:7379/ * HTTP 1.1 pipelining (50,000 http requests per second on a desktop Linux machine.) * Connects to Redis using a TCP or UNIX socket. * Restricted commands by IP range (CIDR subnet + mask), returning 403 errors. +* Possible Redis authentication in the config file. # Ideas, TODO... * Add meta-data info per key (MIME type in a second key, for instance). diff --git a/conf.c b/conf.c index 919b0ed..cb9cfef 100644 --- a/conf.c +++ b/conf.c @@ -39,6 +39,8 @@ conf_read(const char *filename) { conf->redis_host = strdup(json_string_value(jtmp)); } else if(strcmp(json_object_iter_key(kv), "redis_port") == 0 && json_typeof(jtmp) == JSON_INTEGER) { conf->redis_port = (short)json_integer_value(jtmp); + } else if(strcmp(json_object_iter_key(kv), "redis_auth") == 0 && json_typeof(jtmp) == JSON_STRING) { + conf->redis_auth = strdup(json_string_value(jtmp)); } else if(strcmp(json_object_iter_key(kv), "http_host") == 0 && json_typeof(jtmp) == JSON_STRING) { free(conf->http_host); conf->http_host = strdup(json_string_value(jtmp)); @@ -129,6 +131,8 @@ void conf_free(struct conf *conf) { free(conf->redis_host); + free(conf->redis_auth); + free(conf->http_host); free(conf); diff --git a/conf.h b/conf.h index 7da8340..917d8a2 100644 --- a/conf.h +++ b/conf.h @@ -18,6 +18,7 @@ struct conf { char *redis_host; short redis_port; + char *redis_auth; char *http_host; short http_port; diff --git a/formats/raw.c b/formats/raw.c index 7fe2056..8bd0914 100644 --- a/formats/raw.c +++ b/formats/raw.c @@ -13,12 +13,12 @@ raw_wrap(const redisReply *r, size_t *sz); void raw_reply(redisAsyncContext *c, void *r, void *privdata) { - (void)c; struct evbuffer *body; redisReply *reply = r; struct cmd *cmd = privdata; char *raw_out; size_t sz; + (void)c; evhttp_clear_headers(&cmd->uri_params); diff --git a/server.c b/server.c index 6d4e90d..e19aa6b 100644 --- a/server.c +++ b/server.c @@ -50,10 +50,13 @@ on_timer_reconnect(int fd, short event, void *ctx) { printf("Error: %s\n", s->ac->errstr); } - redisLibeventAttach(s->ac, s->base); redisAsyncSetConnectCallback(s->ac, connectCallback); redisAsyncSetDisconnectCallback(s->ac, disconnectCallback); + + if (s->cfg->redis_auth) { /* authenticate. */ + redisAsyncCommand(s->ac, NULL, NULL, "AUTH %s", s->cfg->redis_auth); + } } void diff --git a/turnip.json b/turnip.json index 5df0381..3174b4b 100644 --- a/turnip.json +++ b/turnip.json @@ -1,6 +1,7 @@ { "redis_host": "127.0.0.1", "redis_port": 6379, + "redis_auth": null, "http_host": "0.0.0.0", "http_port": 7379,