X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-cred.c;h=763c926536ea4b0aeea1b7690248567f8b03c910;hb=6f1126ae2c585afc34d0bb06f3763e3a82ee3d37;hp=8a77700912b6be8278334c663c91698cf248011e;hpb=a05138e6bf1257b0e7b1ad90c974fb9e12f1d040;p=src%2Fapp-framework-binder.git diff --git a/src/afb-cred.c b/src/afb-cred.c index 8a777009..763c9265 100644 --- a/src/afb-cred.c +++ b/src/afb-cred.c @@ -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;