afb-hreq.c: fix etag size (fixes stack smashing detected by stack protector)
[src/app-framework-binder.git] / src / session.c
index 320eab9..16dc836 100644 (file)
@@ -48,6 +48,7 @@ struct afb_event_listener_list
 struct AFB_clientCtx
 {
        unsigned refcount;
+       unsigned loa;
        time_t expiration;    // expiration time of the token
        time_t access;
        char uuid[37];        // long term authentication of remote client
@@ -434,6 +435,18 @@ const char *ctxClientGetToken (struct AFB_clientCtx *clientCtx)
        return clientCtx->token;
 }
 
+unsigned ctxClientGetLOA (struct AFB_clientCtx *clientCtx)
+{
+       assert(clientCtx != NULL);
+       return clientCtx->loa;
+}
+
+void ctxClientSetLOA (struct AFB_clientCtx *clientCtx, unsigned loa)
+{
+       assert(clientCtx != NULL);
+       clientCtx->loa = loa;
+}
+
 void *ctxClientValueGet(struct AFB_clientCtx *clientCtx, int index)
 {
        assert(clientCtx != NULL);
@@ -450,6 +463,6 @@ void ctxClientValueSet(struct AFB_clientCtx *clientCtx, int index, void *value,
        assert(index < sessions.apicount);
        prev = clientCtx->values[index];
        clientCtx->values[index] = (struct client_value){.value = value, .free_value = free_value};
-       if (prev.value !=  NULL && prev.free_value != NULL)
+       if (prev.value != NULL && prev.value != value && prev.free_value != NULL)
                prev.free_value(prev.value);
 }