aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.c
diff options
context:
space:
mode:
authorJose Bollo <jose.bollo@iot.bzh>2018-09-19 14:52:03 +0200
committerJose Bollo <jose.bollo@iot.bzh>2018-09-20 23:39:57 +0200
commit4123ffb189acd0c18cddd0df75a58cbc3276ad80 (patch)
treea393e83dce5f57c7db0ab5475841c86829468ebe /src/queue.c
parent7ae3477d84ae13c5e9ef9bb1980a8f70f8b7e9bf (diff)
Add session, value as string and expiration
The DB now records sessions. It has expiration management (currently coarse: ~16s, see db.c) that is propagated to caches. Values are now strings. Default values are "yes" and "no" for allowed or denied permissions. new program: cynadm Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/queue.c')
-rw-r--r--src/queue.c55
1 files changed, 21 insertions, 34 deletions
diff --git a/src/queue.c b/src/queue.c
index e2fb84c..0699bb1 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -55,16 +55,8 @@ qread(
static
bool
-qget_char(
- char *value
-) {
- return qread(value, sizeof *value);
-}
-
-static
-bool
-qget_uint32(
- uint32_t *value
+qget_time(
+ time_t *value
) {
return qread(value, sizeof *value);
}
@@ -109,16 +101,8 @@ qwrite(
static
bool
-qput_char(
- char value
-) {
- return qwrite(&value, sizeof value);
-}
-
-static
-bool
-qput_uint32(
- uint32_t value
+qput_time(
+ time_t value
) {
return qwrite(&value, sizeof value);
}
@@ -144,11 +128,11 @@ queue_drop(
const char *user,
const char *permission
) {
- return qput_char(DROP)
- && qput_string(client)
+ return qput_string(client)
&& qput_string(session)
&& qput_string(user)
&& qput_string(permission)
+ && qput_string(0)
? 0 : -(errno = ENOMEM);
}
@@ -158,14 +142,15 @@ queue_set(
const char *session,
const char *user,
const char *permission,
- uint32_t value
+ const char *value,
+ time_t expire
) {
- return qput_char(SET)
- && qput_string(client)
+ return qput_string(client)
&& qput_string(session)
&& qput_string(user)
&& qput_string(permission)
- && qput_uint32(value)
+ && qput_string(value)
+ && qput_time(expire)
? 0 : -(errno = ENOMEM);
}
@@ -180,26 +165,28 @@ int
queue_play(
) {
int rc, rc2;
- char op;
const char *client;
const char *session;
const char *user;
const char *permission;
- uint32_t value;
+ const char *value;
+ time_t expire;
rc = 0;
queue.read = 0;
while (queue.read < queue.write) {
rc2 = -EINVAL;
- if (qget_char(&op)
- && qget_string(&client)
+ if (qget_string(&client)
&& qget_string(&session)
&& qget_string(&user)
- && qget_string(&permission)) {
- if (op == DROP)
+ && qget_string(&permission)
+ && qget_string(&value)) {
+ if (!value[0])
rc2 = db_drop(client, session, user, permission);
- else if (qget_uint32(&value))
- rc2 = db_set(client, session, user, permission, value);
+ else {
+ if (qget_time(&expire))
+ rc2 = db_set(client, session, user, permission, value, expire);
+ }
}
if (rc2 != 0 && rc == 0)
rc = rc2;