Handle keynames with special characters such as - and .
Bug: http://code.google.com/p/android/issues/detail?id=34577
Bug: 6837950
(cherry-picked from 0114bd9f9bbc2458ca77bf3508e7c15992a432b1)
Change-Id: I0c265fe73c1b2c430ffd196a21691264f8f3b555
diff --git a/keystore/keystore.cpp b/keystore/keystore.cpp
index af8c937..6f506dd 100644
--- a/keystore/keystore.cpp
+++ b/keystore/keystore.cpp
@@ -439,7 +439,7 @@
typedef struct {
uint32_t uid;
- const uint8_t* keyName;
+ const uint8_t* filename;
struct listnode plist;
} grant_t;
@@ -622,20 +622,18 @@
if (grant == NULL) {
grant = new grant_t;
grant->uid = uid;
- grant->keyName = reinterpret_cast<const uint8_t*>(strdup(filename));
+ grant->filename = reinterpret_cast<const uint8_t*>(strdup(filename));
list_add_tail(&mGrants, &grant->plist);
}
}
- bool removeGrant(const Value* keyValue, const Value* uidValue) {
+ bool removeGrant(const char* filename, const Value* uidValue) {
uid_t uid;
if (!convertToUid(uidValue, &uid)) {
return false;
}
- ValueString keyString(keyValue);
-
- grant_t *grant = getGrant(keyString.c_str(), uid);
+ grant_t *grant = getGrant(filename, uid);
if (grant != NULL) {
list_remove(&grant->plist);
delete grant;
@@ -645,9 +643,8 @@
return false;
}
- bool hasGrant(const Value* keyValue, const uid_t uid) const {
- ValueString keyString(keyValue);
- return getGrant(keyString.c_str(), uid) != NULL;
+ bool hasGrant(const char* filename, const uid_t uid) const {
+ return getGrant(filename, uid) != NULL;
}
ResponseCode importKey(const Value* key, const char* filename) {
@@ -748,15 +745,15 @@
&& (strcmp(filename, "..") != 0));
}
- grant_t* getGrant(const char* keyName, uid_t uid) const {
+ grant_t* getGrant(const char* filename, uid_t uid) const {
struct listnode *node;
grant_t *grant;
list_for_each(node, &mGrants) {
grant = node_to_item(node, grant_t, plist);
if (grant->uid == uid
- && !strcmp(reinterpret_cast<const char*>(grant->keyName),
- keyName)) {
+ && !strcmp(reinterpret_cast<const char*>(grant->filename),
+ filename)) {
return grant;
}
}
@@ -916,12 +913,12 @@
}
// They might be using a granted key.
- if (!keyStore->hasGrant(keyName, uid)) {
+ encode_key(filename, keyName);
+ if (!keyStore->hasGrant(filename, uid)) {
return responseCode;
}
// It is a granted key. Try to load it.
- encode_key(filename, keyName);
return keyStore->get(filename, keyBlob, type);
}
@@ -1267,7 +1264,7 @@
return (errno != ENOENT) ? SYSTEM_ERROR : KEY_NOT_FOUND;
}
- return keyStore->removeGrant(keyName, granteeData) ? NO_ERROR : KEY_NOT_FOUND;
+ return keyStore->removeGrant(filename, granteeData) ? NO_ERROR : KEY_NOT_FOUND;
}
/* Here are the permissions, actions, users, and the main function. */