Merge "mini-keyctl: use ParseInt to parse keys" am: 8aa059438d
am: 54f3e37edd
Change-Id: Ia349687c69c695eb089b46395a167179a9716e33
This commit is contained in:
commit
9184213f3f
2 changed files with 13 additions and 11 deletions
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "mini_keyctl_utils.h"
|
#include "mini_keyctl_utils.h"
|
||||||
|
|
||||||
|
#include <error.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
@ -36,6 +37,14 @@ static void Usage(int exit_code) {
|
||||||
_exit(exit_code);
|
_exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static key_serial_t parseKeyOrDie(const char* str) {
|
||||||
|
key_serial_t key;
|
||||||
|
if (!android::base::ParseInt(str, &key)) {
|
||||||
|
error(1 /* exit code */, 0 /* errno */, "Unparsable key: '%s'\n", str);
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, const char** argv) {
|
int main(int argc, const char** argv) {
|
||||||
if (argc < 2) Usage(1);
|
if (argc < 2) Usage(1);
|
||||||
const std::string action = argv[1];
|
const std::string action = argv[1];
|
||||||
|
|
@ -67,17 +76,13 @@ int main(int argc, const char** argv) {
|
||||||
return RestrictKeyring(keyring);
|
return RestrictKeyring(keyring);
|
||||||
} else if (action == "unlink") {
|
} else if (action == "unlink") {
|
||||||
if (argc != 4) Usage(1);
|
if (argc != 4) Usage(1);
|
||||||
key_serial_t key = std::stoi(argv[2], nullptr, 16);
|
key_serial_t key = parseKeyOrDie(argv[2]);
|
||||||
const std::string keyring = argv[3];
|
const std::string keyring = argv[3];
|
||||||
return Unlink(key, keyring);
|
return Unlink(key, keyring);
|
||||||
} else if (action == "security") {
|
} else if (action == "security") {
|
||||||
if (argc != 3) Usage(1);
|
if (argc != 3) Usage(1);
|
||||||
const char* key_str = argv[2];
|
const char* key_str = argv[2];
|
||||||
key_serial_t key;
|
key_serial_t key = parseKeyOrDie(key_str);
|
||||||
if (!android::base::ParseInt(key_str, &key)) {
|
|
||||||
fprintf(stderr, "Unparsable key: '%s'\n", key_str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
std::string context = RetrieveSecurityContext(key);
|
std::string context = RetrieveSecurityContext(key);
|
||||||
if (context.empty()) {
|
if (context.empty()) {
|
||||||
perror(key_str);
|
perror(key_str);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include <android-base/file.h>
|
#include <android-base/file.h>
|
||||||
#include <android-base/logging.h>
|
#include <android-base/logging.h>
|
||||||
|
#include <android-base/parseint.h>
|
||||||
#include <android-base/properties.h>
|
#include <android-base/properties.h>
|
||||||
#include <android-base/strings.h>
|
#include <android-base/strings.h>
|
||||||
#include <keyutils.h>
|
#include <keyutils.h>
|
||||||
|
|
@ -53,12 +54,8 @@ static bool GetKeyringId(const std::string& keyring_desc, key_serial_t* keyring_
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the keyring id is already a hex number, directly convert it to keyring id
|
// If the keyring id is already a hex number, directly convert it to keyring id
|
||||||
try {
|
if (android::base::ParseInt(keyring_desc.c_str(), keyring_id)) {
|
||||||
key_serial_t id = std::stoi(keyring_desc, nullptr, 16);
|
|
||||||
*keyring_id = id;
|
|
||||||
return true;
|
return true;
|
||||||
} catch (const std::exception& e) {
|
|
||||||
LOG(INFO) << "search /proc/keys for keyring id";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only keys allowed by SELinux rules will be shown here.
|
// Only keys allowed by SELinux rules will be shown here.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue