summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2015-01-26 23:29:18 +0100
committerAndreas Schneider <asn@cryptomilk.org>2015-01-27 09:05:53 +0100
commit64fb94f5778271184d012f8c2434484cbcb522e4 (patch)
treeaf8ff9ff24834734026201991f2211a17df58034
parent2dccb183e7309e2b64b7b615bfd6629b32120626 (diff)
downloadandroid_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>
-rw-r--r--macloader/macloader.c26
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);