Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b5549cf

Browse files
committed
RedisArray auth.
Issue #1508
1 parent 8cd165d commit b5549cf

4 files changed

Lines changed: 32 additions & 12 deletions

File tree

redis.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ extern zend_function_entry redis_cluster_functions[];
5656
PHP_INI_BEGIN()
5757
/* redis arrays */
5858
PHP_INI_ENTRY("redis.arrays.algorithm", "", PHP_INI_ALL, NULL)
59+
PHP_INI_ENTRY("redis.arrays.auth", "", PHP_INI_ALL, NULL)
5960
PHP_INI_ENTRY("redis.arrays.autorehash", "0", PHP_INI_ALL, NULL)
6061
PHP_INI_ENTRY("redis.arrays.connecttimeout", "0", PHP_INI_ALL, NULL)
6162
PHP_INI_ENTRY("redis.arrays.distributor", "", PHP_INI_ALL, NULL)

redis_array.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ PHP_METHOD(RedisArray, __construct)
279279
long l_retry_interval = 0;
280280
zend_bool b_lazy_connect = 0;
281281
double d_connect_timeout = 0, read_timeout = 0.0;
282-
zend_string *algorithm = NULL;
282+
zend_string *algorithm = NULL, *auth = NULL;
283283
redis_array_object *obj;
284284

285285
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|a", &z0, &z_opts) == FAILURE) {
@@ -370,6 +370,11 @@ PHP_METHOD(RedisArray, __construct)
370370
if ((zpData = zend_hash_str_find(hOpts, "consistent", sizeof("consistent") - 1)) != NULL) {
371371
consistent = zval_is_true(zpData);
372372
}
373+
374+
/* auth */
375+
if ((zpData = zend_hash_str_find(hOpts, "auth", sizeof("auth") - 1)) != NULL) {
376+
auth = zval_get_string(zpData);
377+
}
373378
}
374379

375380
/* extract either name of list of hosts from z0 */
@@ -379,13 +384,14 @@ PHP_METHOD(RedisArray, __construct)
379384
break;
380385

381386
case IS_ARRAY:
382-
ra = ra_make_array(Z_ARRVAL_P(z0), &z_fun, &z_dist, hPrev, b_index, b_pconnect, l_retry_interval, b_lazy_connect, d_connect_timeout, read_timeout, consistent, algorithm TSRMLS_CC);
387+
ra = ra_make_array(Z_ARRVAL_P(z0), &z_fun, &z_dist, hPrev, b_index, b_pconnect, l_retry_interval, b_lazy_connect, d_connect_timeout, read_timeout, consistent, algorithm, auth TSRMLS_CC);
383388
break;
384389

385390
default:
386391
WRONG_PARAM_COUNT;
387392
}
388393
if (algorithm) zend_string_release(algorithm);
394+
if (auth) zend_string_release(auth);
389395
zval_dtor(&z_dist);
390396
zval_dtor(&z_fun);
391397

redis_array_impl.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232

3333
extern zend_class_entry *redis_ce;
3434

35-
RedisArray*
36-
ra_load_hosts(RedisArray *ra, HashTable *hosts, long retry_interval, zend_bool b_lazy_connect TSRMLS_DC)
35+
static RedisArray *
36+
ra_load_hosts(RedisArray *ra, HashTable *hosts, zend_string *auth, long retry_interval, zend_bool b_lazy_connect TSRMLS_DC)
3737
{
3838
int i = 0, host_len;
3939
char *host, *p;
@@ -77,6 +77,9 @@ ra_load_hosts(RedisArray *ra, HashTable *hosts, long retry_interval, zend_bool b
7777
/* create socket */
7878
redis->sock = redis_sock_create(host, host_len, port, ra->connect_timeout, ra->read_timeout, ra->pconnect, NULL, retry_interval);
7979

80+
/* copy password is specified */
81+
if (auth) redis->sock->auth = zend_string_copy(auth);
82+
8083
if (!b_lazy_connect)
8184
{
8285
/* connect */
@@ -178,9 +181,10 @@ RedisArray *ra_load_array(const char *name TSRMLS_DC) {
178181
zval z_params_read_timeout;
179182
zval z_params_lazy_connect;
180183
zval z_params_consistent;
184+
zval z_params_auth;
181185
RedisArray *ra = NULL;
182186

183-
zend_string *algorithm= NULL;
187+
zend_string *algorithm = NULL, *auth = NULL;
184188
zend_bool b_index = 0, b_autorehash = 0, b_pconnect = 0, consistent = 0;
185189
long l_retry_interval = 0;
186190
zend_bool b_lazy_connect = 0;
@@ -338,16 +342,25 @@ RedisArray *ra_load_array(const char *name TSRMLS_DC) {
338342
}
339343
}
340344

345+
/* find auth option */
346+
array_init(&z_params_auth);
347+
if ((iptr = INI_STR("redis.arrays.auth")) != NULL) {
348+
sapi_module.treat_data(PARSE_STRING, estrdup(iptr), &z_params_auth TSRMLS_CC);
349+
}
350+
if ((z_data = zend_hash_str_find(Z_ARRVAL(z_params_auth), name, name_len)) != NULL) {
351+
auth = zval_get_string(z_data);
352+
}
341353

342354
/* create RedisArray object */
343-
ra = ra_make_array(hHosts, &z_fun, &z_dist, hPrev, b_index, b_pconnect, l_retry_interval, b_lazy_connect, d_connect_timeout, read_timeout, consistent, algorithm TSRMLS_CC);
355+
ra = ra_make_array(hHosts, &z_fun, &z_dist, hPrev, b_index, b_pconnect, l_retry_interval, b_lazy_connect, d_connect_timeout, read_timeout, consistent, algorithm, auth TSRMLS_CC);
344356
if (ra) {
345357
ra->auto_rehash = b_autorehash;
346358
if(ra->prev) ra->prev->auto_rehash = b_autorehash;
347359
}
348360

349361
/* cleanup */
350362
if (algorithm) zend_string_release(algorithm);
363+
if (auth) zend_string_release(auth);
351364

352365
zval_dtor(&z_params_hosts);
353366
zval_dtor(&z_params_prev);
@@ -362,6 +375,7 @@ RedisArray *ra_load_array(const char *name TSRMLS_DC) {
362375
zval_dtor(&z_params_read_timeout);
363376
zval_dtor(&z_params_lazy_connect);
364377
zval_dtor(&z_params_consistent);
378+
zval_dtor(&z_params_auth);
365379
zval_dtor(&z_dist);
366380
zval_dtor(&z_fun);
367381

@@ -409,8 +423,8 @@ ra_make_continuum(zend_string **hosts, int nb_hosts)
409423
}
410424

411425
RedisArray *
412-
ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev, zend_bool b_index, zend_bool b_pconnect, long retry_interval, zend_bool b_lazy_connect, double connect_timeout, double read_timeout, zend_bool consistent, zend_string *algorithm TSRMLS_DC) {
413-
426+
ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev, zend_bool b_index, zend_bool b_pconnect, long retry_interval, zend_bool b_lazy_connect, double connect_timeout, double read_timeout, zend_bool consistent, zend_string *algorithm, zend_string *auth TSRMLS_DC)
427+
{
414428
int i, count;
415429
RedisArray *ra;
416430

@@ -430,7 +444,7 @@ ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev
430444
ra->continuum = NULL;
431445
ra->algorithm = NULL;
432446

433-
if (ra_load_hosts(ra, hosts, retry_interval, b_lazy_connect TSRMLS_CC) == NULL || !ra->count) {
447+
if (ra_load_hosts(ra, hosts, auth, retry_interval, b_lazy_connect TSRMLS_CC) == NULL || !ra->count) {
434448
for (i = 0; i < ra->count; ++i) {
435449
zval_dtor(&ra->redis[i]);
436450
zend_string_release(ra->hosts[i]);
@@ -440,7 +454,7 @@ ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev
440454
efree(ra);
441455
return NULL;
442456
}
443-
ra->prev = hosts_prev ? ra_make_array(hosts_prev, z_fun, z_dist, NULL, b_index, b_pconnect, retry_interval, b_lazy_connect, connect_timeout, read_timeout, consistent, algorithm TSRMLS_CC) : NULL;
457+
ra->prev = hosts_prev ? ra_make_array(hosts_prev, z_fun, z_dist, NULL, b_index, b_pconnect, retry_interval, b_lazy_connect, connect_timeout, read_timeout, consistent, algorithm, auth TSRMLS_CC) : NULL;
444458

445459
/* init array data structures */
446460
ra_init_function_table(ra);

redis_array_impl.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99

1010
#include "redis_array.h"
1111

12-
RedisArray *ra_load_hosts(RedisArray *ra, HashTable *hosts, long retry_interval, zend_bool b_lazy_connect TSRMLS_DC);
1312
RedisArray *ra_load_array(const char *name TSRMLS_DC);
14-
RedisArray *ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev, zend_bool b_index, zend_bool b_pconnect, long retry_interval, zend_bool b_lazy_connect, double connect_timeout, double read_timeout, zend_bool consistent, zend_string *algorithm TSRMLS_DC);
13+
RedisArray *ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev, zend_bool b_index, zend_bool b_pconnect, long retry_interval, zend_bool b_lazy_connect, double connect_timeout, double read_timeout, zend_bool consistent, zend_string *algorithm, zend_string *auth TSRMLS_DC);
1514
zval *ra_find_node_by_name(RedisArray *ra, const char *host, int host_len TSRMLS_DC);
1615
zval *ra_find_node(RedisArray *ra, const char *key, int key_len, int *out_pos TSRMLS_DC);
1716
void ra_init_function_table(RedisArray *ra);

0 commit comments

Comments
 (0)