From: Sangyoon Jang Date: Thu, 2 Feb 2017 06:34:51 +0000 (+0900) Subject: Fix password generator X-Git-Tag: accepted/tizen/3.0/common/20170210.071234^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F34%2F113534%2F1;p=platform%2Fcore%2Fappfw%2Fapp2sd.git Fix password generator In some case this generates abnormal password and this causes a failure when execute cryptosetup command. Change-Id: I51ead2cc9588fde71218795dc8a2290eb8f204f2 Signed-off-by: Sangyoon Jang (cherry picked from commit 876f0136b69b4e998c2e08aad42eac9bee301152) --- diff --git a/plugin/app2sd/server/app2sd_internals.c b/plugin/app2sd/server/app2sd_internals.c index 66a75e9..afff360 100644 --- a/plugin/app2sd/server/app2sd_internals.c +++ b/plugin/app2sd/server/app2sd_internals.c @@ -208,7 +208,7 @@ char *_app2sd_do_loopback_encryption_setup(const char *pkgid, } if ((passwd = _app2sd_get_password_from_db(pkgid, uid)) == NULL) { - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password"); return NULL; @@ -381,7 +381,7 @@ int _app2sd_dmcrypt_setup_device(const char *pkgid, _E("no password found for (%s)", pkgid); return APP2EXT_ERROR_SQLITE_REGISTRY; } - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password\n"); return APP2EXT_ERROR_PASSWD_GENERATION; @@ -1485,7 +1485,7 @@ int _app2sd_duplicate_device(const char *pkgid, } if ((passwd = _app2sd_get_password_from_db(pkgid, uid)) == NULL) { - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password"); return APP2EXT_ERROR_PASSWD_GENERATION; diff --git a/plugin/app2sd/server/app2sd_internals.h b/plugin/app2sd/server/app2sd_internals.h index 4c37e02..92195f4 100644 --- a/plugin/app2sd/server/app2sd_internals.h +++ b/plugin/app2sd/server/app2sd_internals.h @@ -148,7 +148,7 @@ int _app2sd_update_loopback_device_size(const char *pkgid, uid_t uid); /* this generates password */ -char *_app2sd_generate_password(const char *pkgid); +char *_app2sd_generate_password(void); /* this function encrypts device */ char *_app2sd_encrypt_device(const char *device, const char *loopback_device, diff --git a/plugin/app2sd/server/app2sd_internals_utils.c b/plugin/app2sd/server/app2sd_internals_utils.c index 970db56..3843349 100644 --- a/plugin/app2sd/server/app2sd_internals_utils.c +++ b/plugin/app2sd/server/app2sd_internals_utils.c @@ -22,7 +22,7 @@ */ #include -#include +#include #include #include "app2sd_internals.h" @@ -570,44 +570,26 @@ char *_app2sd_find_free_device(void) * This is a simple password generator * return: On success, it will return the password, else NULL. */ -char *_app2sd_generate_password(const char *pkgid) +char *_app2sd_generate_password(void) { - char passwd[PASSWD_LEN + 1] = { 0, }; - char *ret_result = NULL; - char set[ASCII_PASSWD_CHAR + 1] = + char *passwd; + static const char charset[ASCII_PASSWD_CHAR + 1] = "!\"#$%&()*+,-./0123456789:;<=>?@ABCDE" \ "FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; - unsigned char char_1; - unsigned char char_2; - int i = 0; - int appname_len = strlen(pkgid); - int j = appname_len; - unsigned int seed; - - /* length of the password */ - ret_result = (char *)malloc(PASSWD_LEN + 1); - if (NULL == ret_result) { + int i; + + /* include null byte */ + passwd = (char *)malloc(sizeof(char) * (PASSWD_LEN + 1)); + if (passwd == NULL) { _E("unable to allocate memory"); return NULL; } - memset((void *)ret_result, '\0', PASSWD_LEN + 1); - - while (i < PASSWD_LEN) { - seed = time(NULL); - if (j > 0) j--; - char_1 = (rand_r(&seed) + pkgid[j]) % ASCII_PASSWD_CHAR; - char_2 = rand_r(&seed) % ASCII_PASSWD_CHAR; - passwd[i] = set[char_1]; - if (j > 0) j--; - passwd[i + 1] = set[((pkgid[j]) * 2) % ASCII_PASSWD_CHAR]; - if (i < PASSWD_LEN - 3) - passwd[i + 2] = set[char_2]; - i++; - } - memcpy(ret_result, passwd, PASSWD_LEN + 1); + for (i = 0; i < PASSWD_LEN; i++) + passwd[i] = charset[g_random_int() % ASCII_PASSWD_CHAR]; + passwd[i] = '\0'; - return ret_result; + return passwd; } #ifdef TIZEN_FEATURE_APP2SD_DMCRYPT_ENCRYPTION