Loading adb/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -15,8 +15,9 @@ adb_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/nul ADB_COMMON_CFLAGS := \ -Wall -Wextra -Werror \ -Wno-unused-parameter \ -Wformat-nonliteral \ -Wno-missing-field-initializers \ -Wno-unused-parameter \ -DADB_REVISION='"$(adb_version)"' \ # libadb Loading adb/adb.h +2 −2 Original line number Diff line number Diff line Loading @@ -277,8 +277,8 @@ asocket *create_remote_socket(unsigned id, atransport *t); void connect_to_remote(asocket *s, const char *destination); void connect_to_smartsocket(asocket *s); void fatal(const char *fmt, ...); void fatal_errno(const char *fmt, ...); void fatal(const char *fmt, ...) ATTRIBUTE_FORMAT(1, 2); void fatal_errno(const char *fmt, ...) ATTRIBUTE_FORMAT(1, 2); void handle_packet(apacket *p, atransport *t); Loading adb/adb_auth_host.cpp +36 −40 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ #include "mincrypt/rsa.h" #undef RSA_verify #include <base/logging.h> #include <base/strings.h> #include <cutils/list.h> Loading @@ -56,8 +57,10 @@ #include <openssl/base64.h> #endif #define ANDROID_PATH ".android" #define ADB_KEY_FILE "adbkey" #include "adb_utils.h" const char kAndroidPath[] = ".android"; const char kAdbKeyFile[] = "adbkey"; struct adb_private_key { struct listnode node; Loading Loading @@ -295,64 +298,58 @@ static int read_key(const char *file, struct listnode *list) return 1; } static int get_user_keyfilepath(char *filename, size_t len) { const char *format, *home; char android_dir[PATH_MAX]; struct stat buf; static bool get_user_keyfilepath(std::string* filename) { CHECK(filename != nullptr); #ifdef _WIN32 const char* home = getenv("ANDROID_SDK_HOME"); if (home == nullptr) { char path[PATH_MAX]; home = getenv("ANDROID_SDK_HOME"); if (!home) { SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, 0, path); home = path; } format = "%s\\%s"; #else home = getenv("HOME"); if (!home) return -1; format = "%s/%s"; const char* home = getenv("HOME"); if (home == nullptr) return false; #endif D("home '%s'\n", home); if (snprintf(android_dir, sizeof(android_dir), format, home, ANDROID_PATH) >= (int)sizeof(android_dir)) return -1; const std::string android_dir = android::base::Join( std::vector<std::string>({home, kAndroidPath}), OS_PATH_SEPARATOR); if (stat(android_dir, &buf)) { if (adb_mkdir(android_dir, 0750) < 0) { D("Cannot mkdir '%s'", android_dir); return -1; if (!directory_exists(android_dir)) { if (adb_mkdir(android_dir.c_str(), 0750) == -1) { D("Cannot mkdir '%s'", android_dir.c_str()); return false; } } return snprintf(filename, len, format, android_dir, ADB_KEY_FILE); *filename = android::base::Join( std::vector<std::string>({android_dir, kAdbKeyFile}), OS_PATH_SEPARATOR); return true; } static int get_user_key(struct listnode *list) { struct stat buf; char path[PATH_MAX]; int ret; ret = get_user_keyfilepath(path, sizeof(path)); if (ret < 0 || ret >= (signed)sizeof(path)) { std::string path; if (!get_user_keyfilepath(&path)) { D("Error getting user key filename"); return 0; } D("user key '%s'\n", path); D("user key '%s'\n", path.c_str()); if (stat(path, &buf) == -1) { if (!generate_key(path)) { if (!file_exists(path)) { if (!generate_key(path.c_str())) { D("Failed to generate new key\n"); return 0; } } return read_key(path, list); return read_key(path.c_str(), list); } static void get_vendor_keys(struct listnode* key_list) { Loading Loading @@ -411,27 +408,26 @@ void *adb_auth_nextkey(void *current) int adb_auth_get_userkey(unsigned char *data, size_t len) { char path[PATH_MAX]; int ret = get_user_keyfilepath(path, sizeof(path) - 4); if (ret < 0 || ret >= (signed)(sizeof(path) - 4)) { std::string path; if (!get_user_keyfilepath(&path)) { D("Error getting user key filename"); return 0; } strcat(path, ".pub"); path += ".pub"; // TODO(danalbert): ReadFileToString // Note that on Windows, load_file() does not do CR/LF translation, but // ReadFileToString() uses the C Runtime which uses CR/LF translation by // default (by is overridable with _setmode()). unsigned size; char* file_data = reinterpret_cast<char*>(load_file(path, &size)); void* file_data = load_file(path.c_str(), &size); if (file_data == nullptr) { D("Can't load '%s'\n", path); D("Can't load '%s'\n", path.c_str()); return 0; } if (len < (size_t)(size + 1)) { D("%s: Content too large ret=%d\n", path, size); D("%s: Content too large ret=%d\n", path.c_str(), size); free(file_data); return 0; } Loading adb/adb_io.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #include <string> #include "base/macros.h" // Sends the protocol "OKAY" message. bool SendOkay(int fd); Loading Loading @@ -54,6 +56,6 @@ bool WriteFdExactly(int fd, const char* s); bool WriteFdExactly(int fd, const std::string& s); // Same as above, but formats the string to send. bool WriteFdFmt(int fd, const char* fmt, ...) __attribute__((__format__(__printf__, 2, 3))); bool WriteFdFmt(int fd, const char* fmt, ...) ATTRIBUTE_FORMAT(2, 3); #endif /* ADB_IO_H */ adb/adb_utils.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,11 @@ bool directory_exists(const std::string& path) { return lstat(path.c_str(), &sb) != -1 && S_ISDIR(sb.st_mode); } bool file_exists(const std::string& path) { struct stat sb; return lstat(path.c_str(), &sb) != -1 && S_ISREG(sb.st_mode); } std::string escape_arg(const std::string& s) { std::string result = s; Loading Loading
adb/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -15,8 +15,9 @@ adb_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/nul ADB_COMMON_CFLAGS := \ -Wall -Wextra -Werror \ -Wno-unused-parameter \ -Wformat-nonliteral \ -Wno-missing-field-initializers \ -Wno-unused-parameter \ -DADB_REVISION='"$(adb_version)"' \ # libadb Loading
adb/adb.h +2 −2 Original line number Diff line number Diff line Loading @@ -277,8 +277,8 @@ asocket *create_remote_socket(unsigned id, atransport *t); void connect_to_remote(asocket *s, const char *destination); void connect_to_smartsocket(asocket *s); void fatal(const char *fmt, ...); void fatal_errno(const char *fmt, ...); void fatal(const char *fmt, ...) ATTRIBUTE_FORMAT(1, 2); void fatal_errno(const char *fmt, ...) ATTRIBUTE_FORMAT(1, 2); void handle_packet(apacket *p, atransport *t); Loading
adb/adb_auth_host.cpp +36 −40 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ #include "mincrypt/rsa.h" #undef RSA_verify #include <base/logging.h> #include <base/strings.h> #include <cutils/list.h> Loading @@ -56,8 +57,10 @@ #include <openssl/base64.h> #endif #define ANDROID_PATH ".android" #define ADB_KEY_FILE "adbkey" #include "adb_utils.h" const char kAndroidPath[] = ".android"; const char kAdbKeyFile[] = "adbkey"; struct adb_private_key { struct listnode node; Loading Loading @@ -295,64 +298,58 @@ static int read_key(const char *file, struct listnode *list) return 1; } static int get_user_keyfilepath(char *filename, size_t len) { const char *format, *home; char android_dir[PATH_MAX]; struct stat buf; static bool get_user_keyfilepath(std::string* filename) { CHECK(filename != nullptr); #ifdef _WIN32 const char* home = getenv("ANDROID_SDK_HOME"); if (home == nullptr) { char path[PATH_MAX]; home = getenv("ANDROID_SDK_HOME"); if (!home) { SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, 0, path); home = path; } format = "%s\\%s"; #else home = getenv("HOME"); if (!home) return -1; format = "%s/%s"; const char* home = getenv("HOME"); if (home == nullptr) return false; #endif D("home '%s'\n", home); if (snprintf(android_dir, sizeof(android_dir), format, home, ANDROID_PATH) >= (int)sizeof(android_dir)) return -1; const std::string android_dir = android::base::Join( std::vector<std::string>({home, kAndroidPath}), OS_PATH_SEPARATOR); if (stat(android_dir, &buf)) { if (adb_mkdir(android_dir, 0750) < 0) { D("Cannot mkdir '%s'", android_dir); return -1; if (!directory_exists(android_dir)) { if (adb_mkdir(android_dir.c_str(), 0750) == -1) { D("Cannot mkdir '%s'", android_dir.c_str()); return false; } } return snprintf(filename, len, format, android_dir, ADB_KEY_FILE); *filename = android::base::Join( std::vector<std::string>({android_dir, kAdbKeyFile}), OS_PATH_SEPARATOR); return true; } static int get_user_key(struct listnode *list) { struct stat buf; char path[PATH_MAX]; int ret; ret = get_user_keyfilepath(path, sizeof(path)); if (ret < 0 || ret >= (signed)sizeof(path)) { std::string path; if (!get_user_keyfilepath(&path)) { D("Error getting user key filename"); return 0; } D("user key '%s'\n", path); D("user key '%s'\n", path.c_str()); if (stat(path, &buf) == -1) { if (!generate_key(path)) { if (!file_exists(path)) { if (!generate_key(path.c_str())) { D("Failed to generate new key\n"); return 0; } } return read_key(path, list); return read_key(path.c_str(), list); } static void get_vendor_keys(struct listnode* key_list) { Loading Loading @@ -411,27 +408,26 @@ void *adb_auth_nextkey(void *current) int adb_auth_get_userkey(unsigned char *data, size_t len) { char path[PATH_MAX]; int ret = get_user_keyfilepath(path, sizeof(path) - 4); if (ret < 0 || ret >= (signed)(sizeof(path) - 4)) { std::string path; if (!get_user_keyfilepath(&path)) { D("Error getting user key filename"); return 0; } strcat(path, ".pub"); path += ".pub"; // TODO(danalbert): ReadFileToString // Note that on Windows, load_file() does not do CR/LF translation, but // ReadFileToString() uses the C Runtime which uses CR/LF translation by // default (by is overridable with _setmode()). unsigned size; char* file_data = reinterpret_cast<char*>(load_file(path, &size)); void* file_data = load_file(path.c_str(), &size); if (file_data == nullptr) { D("Can't load '%s'\n", path); D("Can't load '%s'\n", path.c_str()); return 0; } if (len < (size_t)(size + 1)) { D("%s: Content too large ret=%d\n", path, size); D("%s: Content too large ret=%d\n", path.c_str(), size); free(file_data); return 0; } Loading
adb/adb_io.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #include <string> #include "base/macros.h" // Sends the protocol "OKAY" message. bool SendOkay(int fd); Loading Loading @@ -54,6 +56,6 @@ bool WriteFdExactly(int fd, const char* s); bool WriteFdExactly(int fd, const std::string& s); // Same as above, but formats the string to send. bool WriteFdFmt(int fd, const char* fmt, ...) __attribute__((__format__(__printf__, 2, 3))); bool WriteFdFmt(int fd, const char* fmt, ...) ATTRIBUTE_FORMAT(2, 3); #endif /* ADB_IO_H */
adb/adb_utils.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,11 @@ bool directory_exists(const std::string& path) { return lstat(path.c_str(), &sb) != -1 && S_ISDIR(sb.st_mode); } bool file_exists(const std::string& path) { struct stat sb; return lstat(path.c_str(), &sb) != -1 && S_ISREG(sb.st_mode); } std::string escape_arg(const std::string& s) { std::string result = s; Loading