X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fsession.c;h=936bb4dff8060a6f48a0c8b8bf86204c611654fd;hb=fcef933b69ccc363ad10d9f7308f02c5dc474ff6;hp=da2294bc2a285dc0153029a24a7f709ae0201b52;hpb=fb230eee946673ed5ebe9659d623c2a06d0a80ce;p=src%2Fapp-framework-binder.git diff --git a/src/session.c b/src/session.c index da2294bc..936bb4df 100644 --- a/src/session.c +++ b/src/session.c @@ -63,13 +63,13 @@ static void ctxUuidFreeCB (struct AFB_clientCtx *client) } // Create a new store in RAM, not that is too small it will be automatically extended -void ctxStoreInit (int nbSession, int timeout, int apicount, const char *initok) +void ctxStoreInit (int nbSession, int timeout, const char *initok) { // let's create as store as hashtable does not have any sessions.store = calloc (1 + (unsigned)nbSession, sizeof(struct AFB_clientCtx)); sessions.max = nbSession; sessions.timeout = timeout; - sessions.apicount = apicount; + sessions.apicount = afb_apis_count(); if (strlen(initok) >= 37) { fprintf(stderr, "Error: initial token '%s' too long (max length 36)", initok); exit(1); @@ -243,7 +243,7 @@ void ctxClientClose (struct AFB_clientCtx *clientCtx) } // Sample Generic Ping Debug API -int ctxTokenCheck (struct AFB_clientCtx *clientCtx, const char *token) +int ctxTokenCheckLen (struct AFB_clientCtx *clientCtx, const char *token, size_t length) { assert(clientCtx != NULL); assert(token != NULL); @@ -252,13 +252,20 @@ int ctxTokenCheck (struct AFB_clientCtx *clientCtx, const char *token) if (ctxStoreTooOld (clientCtx, NOW)) return 0; - if (!clientCtx->token[0] || 0 == strcmp (token, clientCtx->token)) { - clientCtx->created = 1; /* creates by default */ - return 1; - } + if (clientCtx->token[0] && (length >= sizeof(clientCtx->token) || strncmp (token, clientCtx->token, length) || clientCtx->token[length])) + return 0; + + clientCtx->created = 1; /* creates by default */ + return 1; +} + +// Sample Generic Ping Debug API +int ctxTokenCheck (struct AFB_clientCtx *clientCtx, const char *token) +{ + assert(clientCtx != NULL); + assert(token != NULL); - // Token is not valid let move level of assurance to zero and free attached client handle - return 0; + return ctxTokenCheckLen(clientCtx, token, strlen(token)); } // generate a new token and update client context