diff options
author | Salvatore Sanfilippo <antirez@gmail.com> | 2019-12-17 09:58:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-17 09:58:26 +0100 |
commit | b7c78b7651c5458ccf5d95ef5857ec427b927a27 (patch) | |
tree | a2dc46e4dfcbf8adeb309bba7b0e05e4a0170a07 /src/server.h | |
parent | 4348d25fc45706ffd611d251d961eb3f1bf1ebde (diff) | |
parent | 7f04a15311b1dfe25f8f63c7a6dabce5a12d55ed (diff) | |
download | redis-b7c78b7651c5458ccf5d95ef5857ec427b927a27.tar.gz |
Merge pull request #5916 from madolson/dev-unstable-acl-module-pr
Add module APIs for custom authentication
Diffstat (limited to 'src/server.h')
-rw-r--r-- | src/server.h | 64 |
1 files changed, 41 insertions, 23 deletions
diff --git a/src/server.h b/src/server.h index b5e51002b..7a78c884f 100644 --- a/src/server.h +++ b/src/server.h @@ -166,33 +166,34 @@ typedef long long ustime_t; /* microsecond time type. */ #define CMD_SKIP_SLOWLOG (1ULL<<12) /* "no-slowlog" flag */ #define CMD_ASKING (1ULL<<13) /* "cluster-asking" flag */ #define CMD_FAST (1ULL<<14) /* "fast" flag */ +#define CMD_NO_AUTH (1ULL<<15) /* "no-auth" flag */ /* Command flags used by the module system. */ -#define CMD_MODULE_GETKEYS (1ULL<<15) /* Use the modules getkeys interface. */ -#define CMD_MODULE_NO_CLUSTER (1ULL<<16) /* Deny on Redis Cluster. */ +#define CMD_MODULE_GETKEYS (1ULL<<16) /* Use the modules getkeys interface. */ +#define CMD_MODULE_NO_CLUSTER (1ULL<<17) /* Deny on Redis Cluster. */ /* Command flags that describe ACLs categories. */ -#define CMD_CATEGORY_KEYSPACE (1ULL<<17) -#define CMD_CATEGORY_READ (1ULL<<18) -#define CMD_CATEGORY_WRITE (1ULL<<19) -#define CMD_CATEGORY_SET (1ULL<<20) -#define CMD_CATEGORY_SORTEDSET (1ULL<<21) -#define CMD_CATEGORY_LIST (1ULL<<22) -#define CMD_CATEGORY_HASH (1ULL<<23) -#define CMD_CATEGORY_STRING (1ULL<<24) -#define CMD_CATEGORY_BITMAP (1ULL<<25) -#define CMD_CATEGORY_HYPERLOGLOG (1ULL<<26) -#define CMD_CATEGORY_GEO (1ULL<<27) -#define CMD_CATEGORY_STREAM (1ULL<<28) -#define CMD_CATEGORY_PUBSUB (1ULL<<29) -#define CMD_CATEGORY_ADMIN (1ULL<<30) -#define CMD_CATEGORY_FAST (1ULL<<31) -#define CMD_CATEGORY_SLOW (1ULL<<32) -#define CMD_CATEGORY_BLOCKING (1ULL<<33) -#define CMD_CATEGORY_DANGEROUS (1ULL<<34) -#define CMD_CATEGORY_CONNECTION (1ULL<<35) -#define CMD_CATEGORY_TRANSACTION (1ULL<<36) -#define CMD_CATEGORY_SCRIPTING (1ULL<<37) +#define CMD_CATEGORY_KEYSPACE (1ULL<<18) +#define CMD_CATEGORY_READ (1ULL<<19) +#define CMD_CATEGORY_WRITE (1ULL<<20) +#define CMD_CATEGORY_SET (1ULL<<21) +#define CMD_CATEGORY_SORTEDSET (1ULL<<22) +#define CMD_CATEGORY_LIST (1ULL<<23) +#define CMD_CATEGORY_HASH (1ULL<<24) +#define CMD_CATEGORY_STRING (1ULL<<25) +#define CMD_CATEGORY_BITMAP (1ULL<<26) +#define CMD_CATEGORY_HYPERLOGLOG (1ULL<<27) +#define CMD_CATEGORY_GEO (1ULL<<28) +#define CMD_CATEGORY_STREAM (1ULL<<29) +#define CMD_CATEGORY_PUBSUB (1ULL<<30) +#define CMD_CATEGORY_ADMIN (1ULL<<31) +#define CMD_CATEGORY_FAST (1ULL<<32) +#define CMD_CATEGORY_SLOW (1ULL<<33) +#define CMD_CATEGORY_BLOCKING (1ULL<<34) +#define CMD_CATEGORY_DANGEROUS (1ULL<<35) +#define CMD_CATEGORY_CONNECTION (1ULL<<36) +#define CMD_CATEGORY_TRANSACTION (1ULL<<37) +#define CMD_CATEGORY_SCRIPTING (1ULL<<38) /* AOF states */ #define AOF_OFF 0 /* AOF is off */ @@ -480,6 +481,11 @@ typedef void (*moduleTypeDigestFunc)(struct RedisModuleDigest *digest, void *val typedef size_t (*moduleTypeMemUsageFunc)(const void *value); typedef void (*moduleTypeFreeFunc)(void *value); +/* A callback that is called when the client authentication changes. This + * needs to be exposed since you can't cast a function pointer to (void *) */ +typedef void (*RedisModuleUserChangedFunc) (uint64_t client_id, void *privdata); + + /* The module type, which is referenced in each value of a given type, defines * the methods and links to the module exporting the type. */ typedef struct RedisModuleType { @@ -798,6 +804,15 @@ typedef struct client { list *pubsub_patterns; /* patterns a client is interested in (SUBSCRIBE) */ sds peerid; /* Cached peer ID. */ listNode *client_list_node; /* list node in client list */ + RedisModuleUserChangedFunc auth_callback; /* Module callback to execute + * when the authenticated user + * changes. */ + void *auth_callback_privdata; /* Private data that is passed when the auth + * changed callback is executed. Opaque for + * Redis Core. */ + void *auth_module; /* The module that owns the callback, which is used + * to disconnect the client if the module is + * unloaded for cleanup. Opaque for Redis Core.*/ /* If this client is in tracking mode and this field is non zero, * invalidation messages for keys fetched by this client will be send to @@ -1518,6 +1533,7 @@ void processModuleLoadingProgressEvent(int is_aof); int moduleTryServeClientBlockedOnKey(client *c, robj *key); void moduleUnblockClient(client *c); int moduleClientIsBlockedOnKeys(client *c); +void moduleNotifyUserChanged(client *c); /* Utils */ long long ustime(void); @@ -1811,6 +1827,8 @@ int ACLLoadConfiguredUsers(void); sds ACLDescribeUser(user *u); void ACLLoadUsersAtStartup(void); void addReplyCommandCategories(client *c, struct redisCommand *cmd); +user *ACLCreateUnlinkedUser(); +void ACLFreeUserAndKillClients(user *u); /* Sorted sets data type */ |