#include <sys/types.h>\r
#include <unistd.h>\r
#include <security-server.h>\r
-#include <mdm.h>\r
#include <vconf.h>\r
#include <vconf-keys.h>\r
\r
unsigned int max_attempt;\r
unsigned int expire_sec;\r
int recoverable;\r
- int mdm_quality;\r
password_operation_cb callback;\r
void *data;\r
} lockscreen_password_policy;\r
\r
-static Eina_Bool __password_verification_check_pw_expired(void *data)\r
-{\r
- lockscreen_password_policy *password_policy = (lockscreen_password_policy *)data;\r
- if (!password_policy) {\r
- return EINA_FALSE;\r
- }\r
-\r
- LOCK_SCREEN_TRACE_DBG("Checking pw expired => valid_secs:%d:%d", password_policy->expire_sec);\r
-\r
- if (password_policy->expire_sec == 0) {\r
- return EINA_TRUE;\r
- } else\r
- return EINA_FALSE;\r
-}\r
-\r
-static Eina_Bool __password_verification_check_recovery(void *data)\r
-{\r
- lockscreen_password_policy *password_policy = (lockscreen_password_policy *)data;\r
- if (!password_policy) {\r
- return EINA_FALSE;\r
- }\r
-\r
- LOCK_SCREEN_TRACE_DBG("Checking recovery => current_attempt:%d max_attempt:%d",\r
- password_policy->current_attempt, password_policy->max_attempt);\r
-\r
- if ((password_policy->max_attempt != 0) && (password_policy->max_attempt == password_policy->current_attempt)) {\r
- password_policy->recoverable = 1;\r
- return EINA_TRUE;\r
- } else\r
- return EINA_FALSE;\r
-}\r
-\r
static Eina_Bool __password_verification_check_phone_password(void *data, const char *str)\r
{\r
LOCK_SCREEN_TRACE_DBG("%s : %s\n", __FUNCTION__, str);\r
return NORMAL_PASSWORD;\r
}\r
\r
-static void __password_verification_set_expired_password_by_mdm(void *data)\r
-{\r
- lockscreen_password_policy *password_policy = (lockscreen_password_policy *)data;\r
-\r
- if(!password_policy) {\r
- LOCK_SCREEN_TRACE_DBG("lock_policy is NULL");\r
- return;\r
- }\r
-\r
- if(mdm_get_service() == MDM_RESULT_SUCCESS) {\r
- LOCK_SCREEN_TRACE_DBG("success to connect mdm server..!!");\r
- if (mdm_enforce_password_change() == MDM_RESULT_SUCCESS) {\r
- LOCK_SCREEN_TRACE_DBG("success to call mdm_enforce_password_change..!!");\r
- } else {\r
- LOCK_SCREEN_TRACE_DBG("[ERROR] failed to call mdm_enforce_password_change..!!");\r
- }\r
-\r
- if (mdm_set_password_status(MDM_PASSWORD_EXPIRED) == MDM_RESULT_SUCCESS) {\r
- LOCK_SCREEN_TRACE_DBG("success to set MDM_PASSWORD_EXPIRED..!!");\r
- } else {\r
- LOCK_SCREEN_TRACE_DBG("[ERROR] failed to set MDM_PASSWORD_EXPIRED..!!");\r
- }\r
- mdm_release_service();\r
- } else {\r
- LOCK_SCREEN_TRACE_DBG("[ERROR] failed to connect mdm server");\r
- }\r
-}\r
-\r
-static void __password_verification_recorver_password_by_mdm(void *data)\r
-{\r
- lockscreen_password_policy *password_policy = (lockscreen_password_policy *)data;\r
-\r
- if(!password_policy) {\r
- LOCK_SCREEN_TRACE_DBG("lock_policy is NULL");\r
- return;\r
- }\r
-\r
- if(mdm_get_service() == MDM_RESULT_SUCCESS) {\r
- LOCK_SCREEN_TRACE_DBG("success to connect mdm server..!!");\r
- mdm_data_t * lp_data = NULL;\r
- mdm_password_policy_t *pwd_info = NULL;\r
- lp_data = mdm_get_password_policy();\r
- if (lp_data != NULL) {\r
- pwd_info = (mdm_password_policy_t *)lp_data->data;\r
- password_policy->mdm_quality = pwd_info->quality;\r
- LOCK_SCREEN_TRACE_DBG("mdm quality : %d", password_policy->mdm_quality);\r
- lp_data->mem_header.free_func(lp_data);\r
- } else {\r
- LOCK_SCREEN_TRACE_DBG("set password policy fail");\r
- }\r
- if (password_policy->mdm_quality != MDM_PASSWORD_QUALITY_UNSPECIFIED) {\r
- if (mdm_set_password_status(MDM_PASSWORD_FAILED) == MDM_RESULT_SUCCESS) {\r
- LOCK_SCREEN_TRACE_DBG("success to set MDM_PASSWORD_FAILED..!!");\r
- } else {\r
- LOCK_SCREEN_TRACE_DBG("[ERROR] failed to set MDM_PASSWORD_FAILED..!!");\r
- }\r
- }\r
- mdm_release_service();\r
- }else {\r
- LOCK_SCREEN_TRACE_DBG("[ERROR] failed to connect mdm server");\r
- }\r
-}\r
-\r
void *password_verification_policy_create()\r
{\r
lockscreen_password_policy *password_policy = NULL;\r
return NULL;\r
}\r
\r
- password_policy->mdm_quality = MDM_PASSWORD_QUALITY_UNSPECIFIED;\r
-\r
ret = security_server_is_pwd_valid(&cur_attempt, &max_attempt, &expire_sec);\r
LOCK_SCREEN_TRACE_DBG("policy status:%d, cur_attempt:%d, max_attempt:%d ", ret, cur_attempt, max_attempt);\r
\r
switch(password_type){\r
case NORMAL_PASSWORD:\r
if (__password_verification_check_phone_password(password_policy, password)) {\r
- if ( __password_verification_check_pw_expired(password_policy)) {\r
- __password_verification_set_expired_password_by_mdm(password_policy);\r
- }\r
LOCK_SCREEN_TRACE_DBG("password is right!!!!");\r
elm_exit();\r
} else {\r
- if (__password_verification_check_recovery (password_policy)) {\r
- LOCK_SCREEN_TRACE_DBG("Recovery lock mode..!!");\r
- __password_verification_recorver_password_by_mdm(password_policy);\r
- }\r
if(password_policy->callback){\r
password_policy->callback("", password_policy->data);\r
}\r