diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2015-01-26 23:29:18 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2015-01-27 09:05:53 +0100 |
commit | 64fb94f5778271184d012f8c2434484cbcb522e4 (patch) | |
tree | af8ff9ff24834734026201991f2211a17df58034 /macloader/macloader.c | |
parent | 2dccb183e7309e2b64b7b615bfd6629b32120626 (diff) | |
download | android_hardware_samsung-64fb94f5778271184d012f8c2434484cbcb522e4.tar.gz android_hardware_samsung-64fb94f5778271184d012f8c2434484cbcb522e4.tar.bz2 android_hardware_samsung-64fb94f5778271184d012f8c2434484cbcb522e4.zip |
macloader: Use fchown() to change owner of the cidfile.
Change-Id: Ia99c0ae414366d91b6d0112f50b00630749ea570
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'macloader/macloader.c')
-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 03ecc3d..1ca1cba 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> @@ -106,6 +107,9 @@ int main() { } if (type != NONE) { + struct passwd *pwd; + int fd; + /* open cid file */ cidfile = fopen(CID_PATH, "w"); if(cidfile == 0) { @@ -155,20 +159,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); |