Add user to context
authorJosé Bollo <jose.bollo@iot.bzh>
Fri, 5 May 2017 16:59:57 +0000 (18:59 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Fri, 5 May 2017 16:59:57 +0000 (18:59 +0200)
At this time, user is the string representation
of the uid.

Change-Id: I65fbb4112f209fdb948d24e9c47fa73dacdf571f
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/afb-cred.c
src/afb-cred.h
src/afb-hook.c

index 8a77700..763c926 100644 (file)
@@ -34,9 +34,18 @@ static struct afb_cred *current;
 static struct afb_cred *mkcred(uid_t uid, gid_t gid, pid_t pid, const char *label, size_t size)
 {
        struct afb_cred *cred;
-       char *dest;
-
-       cred = malloc(1 + size + sizeof *cred);
+       char *dest, user[64];
+       size_t i;
+       uid_t u;
+
+       i = 0;
+       u = uid;
+       do {
+               user[i++] = (char)('0' + u % 10);
+               u = u / 10;
+       } while(u && i < sizeof user);
+
+       cred = malloc(2 + i + size + sizeof *cred);
        if (!cred)
                errno = ENOMEM;
        else {
@@ -45,12 +54,16 @@ static struct afb_cred *mkcred(uid_t uid, gid_t gid, pid_t pid, const char *labe
                cred->gid = gid;
                cred->pid = pid;
                dest = (char*)(&cred[1]);
-               memcpy(dest, label, size);
-               dest[size] = 0;
+               cred->user = dest;
+               while(i)
+                       *dest++ = user[--i];
+               *dest++ = 0;
                cred->label = dest;
                cred->id = dest;
+               memcpy(dest, label, size);
+               dest[size] = 0;
                dest = strrchr(dest, ':');
-               if (dest && dest[1])
+               if (dest)
                        cred->id = &dest[1];
        }
        return cred;
index 5bd5423..6f8173f 100644 (file)
@@ -25,6 +25,7 @@ struct afb_cred
        uid_t uid;
        gid_t gid;
        pid_t pid;
+       const char *user;
        const char *label;
        const char *id;
 };
index efd2e65..c1f93fa 100644 (file)
@@ -99,8 +99,9 @@ static void hook_xreq_begin_default_cb(void * closure, const struct afb_xreq *xr
        if (!xreq->cred)
                _hook_xreq_(xreq, "BEGIN");
        else
-               _hook_xreq_(xreq, "BEGIN uid=%d gid=%d pid=%d label=%s id=%s",
+               _hook_xreq_(xreq, "BEGIN uid=%d=%s gid=%d pid=%d label=%s id=%s",
                        (int)xreq->cred->uid,
+                       xreq->cred->user,
                        (int)xreq->cred->gid,
                        (int)xreq->cred->pid,
                        xreq->cred->label?:"(null)",