diff options
Diffstat (limited to 'src/manager/service/key-provider.cpp')
-rw-r--r-- | src/manager/service/key-provider.cpp | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/src/manager/service/key-provider.cpp b/src/manager/service/key-provider.cpp index 4ca4f038..60cce238 100644 --- a/src/manager/service/key-provider.cpp +++ b/src/manager/service/key-provider.cpp @@ -602,29 +602,13 @@ int KeyProvider::decryptAes256Gcm(const unsigned char *ciphertext, char *KeyProvider::concat_password_user(const char *user, const char *password) { - char *concat_user_pass = NULL; - char *resized_user = NULL; - int concat_user_pass_len = 0; - - if (strlen(user) > MAX_LABEL_SIZE - 1) { - resized_user = new char[MAX_LABEL_SIZE]; - memcpy(resized_user, user, MAX_LABEL_SIZE - 1); - resized_user[MAX_LABEL_SIZE - 1] = '\0'; - } else { - resized_user = new char[strlen(user) + 1]; - memcpy(resized_user, user, strlen(user)); - resized_user[strlen(user)] = '\0'; - } - - concat_user_pass_len = strlen(resized_user) + strlen(password) + 1; - concat_user_pass = new char[concat_user_pass_len]; + std::string result(password); + result += user; - memset(concat_user_pass, '\0', concat_user_pass_len); - memcpy(concat_user_pass, password, strlen(password)); - memcpy(&(concat_user_pass[strlen(password)]), resized_user, - strlen(resized_user)); - concat_user_pass[strlen(resized_user) + strlen(password)] = '\0'; + if (strlen(user) > MAX_LABEL_SIZE - 1) + result.resize(strlen(password) + MAX_LABEL_SIZE - 1); - delete[] resized_user; - return concat_user_pass; + char *ret = new char[result.size() + 1]; + memcpy(ret, result.c_str(), result.size() + 1); + return ret; } |