From 200de028bfb928c1a488fa48bcbe72400d9e1202 Mon Sep 17 00:00:00 2001 From: John Reck Date: Tue, 7 Dec 2010 14:51:01 -0800 Subject: [PATCH] DO NOT MERGE - Fixes webicon permissions Bug: 3244281, 3258386 partial cherry pick Change-Id: I30397effabe4b60d916f01f9b32bcfc3a6a402bc --- WebKit/android/jni/WebIconDatabase.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/WebKit/android/jni/WebIconDatabase.cpp b/WebKit/android/jni/WebIconDatabase.cpp index 840d161cd..b56b91e15 100644 --- a/WebKit/android/jni/WebIconDatabase.cpp +++ b/WebKit/android/jni/WebIconDatabase.cpp @@ -28,6 +28,8 @@ #include "config.h" #include "WebIconDatabase.h" +#include "CString.h" +#include "FileSystem.h" #include "GraphicsJNI.h" #include "IconDatabase.h" #include "Image.h" @@ -138,10 +140,27 @@ static void Open(JNIEnv* env, jobject obj, jstring path) iconDb->setClient(gIconDatabaseClient); LOG_ASSERT(path, "No path given to nativeOpen"); WebCore::String pathStr = to_string(env, path); - LOGV("Opening WebIconDatabase file '%s'", pathStr.latin1().data()); - bool res = iconDb->open(pathStr); - if (!res) - LOGE("Open failed!"); + WebCore::CString fullPath = WebCore::pathByAppendingComponent(pathStr, + WebCore::IconDatabase::defaultDatabaseFilename()).utf8(); + mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP; + bool didSetPermissions = false; + if (access(fullPath.data(), F_OK) == 0) { + if (chmod(fullPath.data(), mode) == 0) + didSetPermissions = true; + } else { + int fd = open(fullPath.data(), O_CREAT, mode); + if (fd >= 0) { + close(fd); + didSetPermissions = true; + } + } + if (didSetPermissions) { + LOGV("Opening WebIconDatabase file '%s'", pathStr.latin1().data()); + bool res = iconDb->open(pathStr); + if (!res) + LOGE("Open failed!"); + } else + LOGE("Failed to set permissions on '%s'", fullPath.data()); } static void Close(JNIEnv* env, jobject obj) -- 2.11.0