Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Grunder <michael.grunder@gmail.com>2020-06-25 03:00:01 +0300
committerGitHub <noreply@github.com>2020-06-25 03:00:01 +0300
commita311cc4ec3cecdbaf83ba66985efa82137e37cc0 (patch)
tree078ca80c140e3a77e088a213066b27d0b350c7c6 /library.h
parent04def9fbe2194b3b711362de57260a6cd5216e69 (diff)
Support for Redis 6 ACLs (#1791)
Add support for Redis 6 ACLs in the `Redis`, `RedisCluster`, and `RedisArray` classes. On a related note, it adds a mechanism for users to customize how we generate persistent connection IDs such that they can be grouped in different ways depending on the specific use case required (e.g. it would allow connections to be grouped by username, or by user-defined persistent_id, or both).
Diffstat (limited to 'library.h')
-rw-r--r--library.h63
1 files changed, 61 insertions, 2 deletions
diff --git a/library.h b/library.h
index a5c660b6..da73b34d 100644
--- a/library.h
+++ b/library.h
@@ -20,19 +20,34 @@
#define CLUSTER_THROW_EXCEPTION(msg, code) \
zend_throw_exception(redis_cluster_exception_ce, (msg), code)
+#define redis_sock_write_sstr(redis_sock, sstr) \
+ redis_sock_write(redis_sock, (sstr)->c, (sstr)->len)
+
+#if PHP_VERSION_ID < 80000
+ #define redis_hash_fetch_ops(zstr) php_hash_fetch_ops(ZSTR_VAL((zstr)), ZSTR_LEN((zstr)))
+#else
+ #define redis_hash_fetch_ops(zstr) php_hash_fetch_ops(zstr)
+#endif
+
+void redis_register_persistent_resource(zend_string *id, void *ptr, int le_id);
+
+PHP_REDIS_API int redis_extract_auth_info(zval *ztest, zend_string **user, zend_string **pass);
+
int redis_cmd_init_sstr(smart_string *str, int num_args, char *keyword, int keyword_len);
int redis_cmd_append_sstr(smart_string *str, char *append, int append_len);
int redis_cmd_append_sstr_int(smart_string *str, int append);
int redis_cmd_append_sstr_long(smart_string *str, long append);
int redis_cmd_append_sstr_i64(smart_string *str, int64_t append);
int redis_cmd_append_sstr_dbl(smart_string *str, double value);
+int redis_cmd_append_sstr_zstr(smart_string *str, zend_string *zstr);
int redis_cmd_append_sstr_zval(smart_string *str, zval *z, RedisSock *redis_sock);
int redis_cmd_append_sstr_key(smart_string *str, char *key, size_t len, RedisSock *redis_sock, short *slot);
int redis_cmd_append_sstr_arrkey(smart_string *cmd, zend_string *kstr, zend_ulong idx);
PHP_REDIS_API int redis_spprintf(RedisSock *redis_sock, short *slot, char **ret, char *kw, char *fmt, ...);
+PHP_REDIS_API zend_string *redis_pool_spprintf(RedisSock *redis_sock, char *fmt, ...);
-PHP_REDIS_API char * redis_sock_read(RedisSock *redis_sock, int *buf_len);
+PHP_REDIS_API char *redis_sock_read(RedisSock *redis_sock, int *buf_len);
PHP_REDIS_API int redis_sock_gets(RedisSock *redis_sock, char *buf, int buf_size, size_t* line_len);
PHP_REDIS_API void redis_1_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
PHP_REDIS_API void redis_long_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval* z_tab, void *ctx);
@@ -52,13 +67,17 @@ PHP_REDIS_API RedisSock* redis_sock_create(char *host, int host_len, int port, d
PHP_REDIS_API int redis_sock_connect(RedisSock *redis_sock);
PHP_REDIS_API int redis_sock_server_open(RedisSock *redis_sock);
PHP_REDIS_API int redis_sock_auth(RedisSock *redis_sock);
+PHP_REDIS_API char *redis_sock_auth_cmd(RedisSock *redis_sock, int *cmdlen);
+PHP_REDIS_API void redis_sock_set_auth(RedisSock *redis_sock, zend_string *user, zend_string *pass);
+PHP_REDIS_API void redis_sock_set_auth_zval(RedisSock *redis_sock, zval *zv);
+PHP_REDIS_API void redis_sock_copy_auth(RedisSock *dst, RedisSock *src);
+PHP_REDIS_API void redis_sock_free_auth(RedisSock *redis_sock);
PHP_REDIS_API int redis_sock_disconnect(RedisSock *redis_sock, int force);
PHP_REDIS_API zval *redis_sock_read_multibulk_reply_zval(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab);
PHP_REDIS_API int redis_sock_read_single_line(RedisSock *redis_sock, char *buffer,
size_t buflen, size_t *linelen, int set_err);
PHP_REDIS_API char *redis_sock_read_bulk_reply(RedisSock *redis_sock, int bytes);
PHP_REDIS_API int redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *_z_tab, void *ctx);
-//PHP_REDIS_API void redis_mbulk_reply_loop(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, int count, int unserialize);
PHP_REDIS_API void redis_mbulk_reply_loop(RedisSock *redis_sock, zval *z_tab, int count, int unserialize);
@@ -113,6 +132,12 @@ redis_read_xclaim_response(RedisSock *redis_sock, int count, zval *rv);
PHP_REDIS_API int
redis_read_xinfo_response(RedisSock *redis_sock, zval *z_ret, int elements);
+/* Specialized ACL reply handlers */
+PHP_REDIS_API int redis_read_acl_getuser_reply(RedisSock *redis_sock, zval *zret, long len);
+PHP_REDIS_API int redis_acl_getuser_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
+PHP_REDIS_API int redis_read_acl_log_reply(RedisSock *redis_sock, zval *zret, long count);
+PHP_REDIS_API int redis_acl_log_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
+
/*
* Variant Read methods, mostly to implement eval
*/
@@ -125,4 +150,38 @@ PHP_REDIS_API int redis_read_raw_variant_reply(INTERNAL_FUNCTION_PARAMETERS, Red
PHP_REDIS_API int redis_read_variant_reply_strings(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
PHP_REDIS_API void redis_client_list_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab);
+/* Helper methods to get configuration values from a HashTable. */
+
+#define REDIS_HASH_STR_FIND_STATIC(ht, sstr) \
+ zend_hash_str_find(ht, sstr, sizeof(sstr) - 1)
+#define REDIS_HASH_STR_FIND_TYPE_STATIC(ht, sstr, type) \
+ redis_hash_str_find_type(ht, sstr, sizeof(sstr) - 1, type)
+
+#define REDIS_CONF_DOUBLE_STATIC(ht, sstr, dval) \
+ redis_conf_double(ht, sstr, sizeof(sstr) - 1, dval)
+#define REDIS_CONF_BOOL_STATIC(ht, sstr, rval) \
+ redis_conf_bool(ht, sstr, sizeof(sstr) - 1, rval)
+#define REDIS_CONF_ZEND_BOOL_STATIC(ht, sstr, bval) \
+ redis_conf_zend_bool(ht, sstr, sizeof(sstr) - 1, bval)
+#define REDIS_CONF_LONG_STATIC(ht, sstr, lval) \
+ redis_conf_long(ht, sstr, sizeof(sstr) - 1, lval)
+#define REDIS_CONF_INT_STATIC(ht, sstr, ival) \
+ redis_conf_int(ht, sstr, sizeof(sstr) - 1, ival)
+#define REDIS_CONF_STRING_STATIC(ht, sstr, sval) \
+ redis_conf_string(ht, sstr, sizeof(sstr) - 1, sval)
+#define REDIS_CONF_ZVAL_STATIC(ht, sstr, zret, copy, dtor) \
+ redis_conf_zval(ht, sstr, sizeof(sstr) - 1, zret, copy, dtor)
+#define REDIS_CONF_AUTH_STATIC(ht, sstr, user, pass) \
+ redis_conf_auth(ht, sstr, sizeof(sstr) - 1, user, pass)
+
+zval *redis_hash_str_find_type(HashTable *ht, const char *key, int keylen, int type);
+void redis_conf_double(HashTable *ht, const char *key, int keylen, double *dval);
+void redis_conf_bool(HashTable *ht, const char *key, int keylen, int *bval);
+void redis_conf_zend_bool(HashTable *ht, const char *key, int keylen, zend_bool *bval);
+void redis_conf_long(HashTable *ht, const char *key, int keylen, zend_long *lval);
+void redis_conf_int(HashTable *ht, const char *key, int keylen, int *ival);
+void redis_conf_string(HashTable *ht, const char *key, size_t keylen, zend_string **sval);
+void redis_conf_zval(HashTable *ht, const char *key, size_t keylen, zval *zret, int copy, int dtor);
+void redis_conf_auth(HashTable *ht, const char *key, size_t keylen, zend_string **user, zend_string **pass);
+
#endif