diff options
| author | Andreas Schneider <asn@cryptomilk.org> | 2015-01-26 23:29:18 +0100 |
|---|---|---|
| committer | Alexander Martinz <eviscerationls@gmail.com> | 2015-02-09 12:30:55 +0100 |
| commit | 779a6421acb48ec4b85bcf3b7e27628b5ab92fba (patch) | |
| tree | 50f1eb5adb093e2e0fee6954a27eca53ed0aa461 | |
| parent | 239707a63a866208b63d94752f07b870334516f6 (diff) | |
macloader: Use fchown() to change owner of the cidfile.
Change-Id: Ia99c0ae414366d91b6d0112f50b00630749ea570
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
| -rw-r--r-- | macloader/macloader.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/macloader/macloader.c b/macloader/macloader.c index 89b657d..a9c0d5b 100644 --- a/macloader/macloader.c +++ b/macloader/macloader.c @@ -24,6 +24,7 @@ #include <string.h> #include <sys/stat.h> #include <unistd.h> +#include <pwd.h> #include <cutils/log.h> @@ -118,6 +119,9 @@ int main() { } if (type != NONE) { + struct passwd *pwd; + int fd; + /* open cid file */ cidfile = fopen(CID_PATH, "w"); if(cidfile == 0) { @@ -172,20 +176,28 @@ int main() { fd = fileno(cidfile); amode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; ret = fchmod(fd, amode); - fclose(cidfile); if (ret != 0) { + fclose(cidfile); ALOGE("Can't set permissions on %s - %s\n", CID_PATH, strerror(errno)); return 1; } - char* chown_cmd = (char*) malloc(strlen("chown system ") + strlen(CID_PATH) + 1); - char* chgrp_cmd = (char*) malloc(strlen("chgrp system ") + strlen(CID_PATH) + 1); - sprintf(chown_cmd, "chown system %s", CID_PATH); - sprintf(chgrp_cmd, "chgrp system %s", CID_PATH); - system(chown_cmd); - system(chgrp_cmd); + pwd = getpwnam("system"); + if (pwd == NULL) { + fclose(cidfile); + ALOGE("Failed to find 'system' user - %s\n", + strerror(errno)); + return 1; + } + ret = fchown(fd, pwd->pw_uid, pwd->pw_gid); + fclose(cidfile); + if (ret != 0) { + ALOGE("Failed to change owner of %s - %s\n", + CID_PATH, strerror(errno)); + return 1; + } } else { /* delete cid file if no specific type */ ALOGD("Deleting file %s\n", CID_PATH); |
