EC_BOOL lic_date_check(const LIC_DATE *lic_date) { if(LIC_DATE_START_YEAR(lic_date) > LIC_DATE_END_YEAR(lic_date)) { return (EC_FALSE); } if(LIC_DATE_START_YEAR(lic_date) < LIC_DATE_END_YEAR(lic_date)) { return (EC_TRUE); } /*now start year == end year*/ if(LIC_DATE_START_MONTH(lic_date) > LIC_DATE_END_MONTH(lic_date)) { return (EC_FALSE); } if(LIC_DATE_START_MONTH(lic_date) < LIC_DATE_END_MONTH(lic_date)) { return (EC_TRUE); } /*now start month == end month*/ if(LIC_DATE_START_DAY(lic_date) > LIC_DATE_END_DAY(lic_date)) { return (EC_FALSE); } if(LIC_DATE_START_DAY(lic_date) < LIC_DATE_END_DAY(lic_date)) { return (EC_TRUE); } return (EC_FALSE); }
EC_BOOL lic_date_clean(LIC_DATE *lic_date) { LIC_DATE_START_YEAR(lic_date) = 0; LIC_DATE_START_MONTH(lic_date) = 0; LIC_DATE_START_DAY(lic_date) = 0; LIC_DATE_START_RSVD(lic_date) = 0; LIC_DATE_END_YEAR(lic_date) = 0; LIC_DATE_END_MONTH(lic_date) = 0; LIC_DATE_END_DAY(lic_date) = 0; LIC_DATE_END_RSVD(lic_date) = 0; return (EC_TRUE); }
void lic_date_print(LOG *log, const LIC_DATE *lic_date) { sys_log(log, "start date : %4ld-%02ld-%02d\n", LIC_DATE_START_YEAR(lic_date), LIC_DATE_START_MONTH(lic_date), LIC_DATE_START_DAY(lic_date) ); sys_log(log, "end date : %4ld-%02ld-%02d\n", LIC_DATE_END_YEAR(lic_date), LIC_DATE_END_MONTH(lic_date), LIC_DATE_END_DAY(lic_date) ); return; }
EC_BOOL lic_check() { LIC_CFG lic_cfg; struct tm *cur_time; UINT32 year; UINT32 month; UINT32 day; LIC_DATE *lic_date; int fd; lic_cfg_init(&lic_cfg); fd = c_file_open(g_lic_file_name, O_RDONLY, 0666); if(-1 == fd) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: open license file %s failed\n", g_lic_file_name); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } if(EC_FALSE == lic_cfg_load(fd, &lic_cfg)) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: load license file %s failed\n", g_lic_file_name); close(fd); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*check signature*/ if(EC_FALSE == lic_cfg_verify(&lic_cfg)) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: verify signature failed\n"); close(fd); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } close(fd); /*check mac addr*/ if(EC_FALSE == lic_mac_verify(LIC_CFG_MAC(&lic_cfg))) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: verify mac addr failed\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*check version*/ if(EC_FALSE == lic_version_verify((char *)LIC_CFG_VERSION(&lic_cfg))) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: verify version failed\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*check vendor*/ if(EC_FALSE == lic_vendor_verify((char *)LIC_CFG_VENDOR_NAME(&lic_cfg), (char *)LIC_CFG_VENDOR_EMAIL(&lic_cfg))) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_check: verify vendor failed\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*check expiration*/ cur_time = c_localtime_r(NULL_PTR); year = cur_time->tm_year + 1900; month = cur_time->tm_mon + 1; day = cur_time->tm_mday; lic_date = LIC_CFG_DATE(&lic_cfg); if(LIC_DATE_END_YEAR(lic_date) > year) { lic_cfg_clean(&lic_cfg); return (EC_TRUE); } if(LIC_DATE_END_YEAR(lic_date) < year) { dbg_log(SEC_0060_LICENSE, 1)(LOGSTDOUT, "warn:lic_check: license is expired\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*now year == end year*/ if(LIC_DATE_END_MONTH(lic_date) > month) { lic_cfg_clean(&lic_cfg); return (EC_TRUE); } if(LIC_DATE_END_MONTH(lic_date) < month) { dbg_log(SEC_0060_LICENSE, 1)(LOGSTDOUT, "warn:lic_check: license is expired\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } /*now month == end month*/ if(LIC_DATE_END_DAY(lic_date) < day) { dbg_log(SEC_0060_LICENSE, 1)(LOGSTDOUT, "warn:lic_check: license is expired\n"); lic_cfg_clean(&lic_cfg); return (EC_FALSE); } if(LIC_DATE_END_DAY(lic_date) < day + 15) { dbg_log(SEC_0060_LICENSE, 1)(LOGSTDOUT, "warn:lic_check: license will be expired in %ld days. please contact %s/%s to renew.\n", LIC_DATE_END_DAY(lic_date) - day, g_lic_vendor_name, g_lic_vendor_email); } lic_cfg_clean(&lic_cfg); return (EC_TRUE); }
EC_BOOL lic_date_make(LIC_DATE *lic_date, const char *start_date_str, const char *end_date_str) { char start_date_str_tmp[32]; char end_date_str_tmp[32]; char *fields[8]; UINT32 field_num; UINT32 year; UINT32 month; UINT32 day; snprintf(start_date_str_tmp, sizeof(start_date_str_tmp)/sizeof(start_date_str_tmp[0]), "%s", start_date_str); snprintf(end_date_str_tmp, sizeof(end_date_str_tmp)/sizeof(end_date_str_tmp[0]), "%s", end_date_str); /*start date*/ field_num = c_str_split(start_date_str_tmp, "-/", fields, sizeof(fields)/sizeof(fields[ 0 ])); if(3 != field_num) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_date_make: invalid start date: %s\n", start_date_str); return (EC_FALSE); } year = c_str_to_word(fields[ 0 ]); month = c_str_to_word(fields[ 1 ]); day = c_str_to_word(fields[ 2 ]); if(2012 > year || year > 4095 || 1 > month || month > 12 || 1 > day || day > 31) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_date_make: illegal start date: %s\n", start_date_str); return (EC_FALSE); } LIC_DATE_START_YEAR(lic_date) = year; LIC_DATE_START_MONTH(lic_date) = month; LIC_DATE_START_DAY(lic_date) = day; /*end date*/ field_num = c_str_split(end_date_str_tmp, "-/", fields, sizeof(fields)/sizeof(fields[ 0 ])); if(3 != field_num) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_date_make: invalid end date: %s\n", end_date_str); return (EC_FALSE); } year = c_str_to_word(fields[ 0 ]); month = c_str_to_word(fields[ 1 ]); day = c_str_to_word(fields[ 2 ]); if(2012 > year || year > 4095 || 1 > month || month > 12 || 1 > day || day > 31) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_date_make: illegal end date: %s\n", end_date_str); return (EC_FALSE); } LIC_DATE_END_YEAR(lic_date) = year; LIC_DATE_END_MONTH(lic_date) = month; LIC_DATE_END_DAY(lic_date) = day; if(EC_FALSE == lic_date_check(lic_date)) { dbg_log(SEC_0060_LICENSE, 0)(LOGSTDOUT, "error:lic_date_make: illegal issued expiration: from %s to %s\n", start_date_str, end_date_str); return (EC_FALSE); } return (EC_TRUE); }