mirror of
https://github.com/wiire-a/pixiewps.git
synced 2025-07-27 07:44:36 +02:00
Fixed time conversion issue due to different timezones and DST
Now UTC is used.
This commit is contained in:
parent
b6ef342b71
commit
00e4b59bfb
@ -79,7 +79,7 @@ memory_err:
|
||||
return MEM_ERROR;
|
||||
}
|
||||
|
||||
time_t start_p = 0, end_p = 0;
|
||||
time_t start_p = (time_t) -1, end_p = (time_t) -1;
|
||||
clock_t c_start = 0, c_end;
|
||||
|
||||
int opt = 0;
|
||||
@ -185,9 +185,10 @@ memory_err:
|
||||
struct tm ts;
|
||||
char buffer[30];
|
||||
r_time = t_current.tv_sec;
|
||||
ts = *localtime(&r_time);
|
||||
ts = *gmtime(&r_time);
|
||||
strftime(buffer, 30, "%c", &ts);
|
||||
fprintf(stderr, "\n Pixiewps %s\n\n [*] System time: %s\n\n", LONG_VERSION, buffer);
|
||||
fprintf(stderr, "\n Pixiewps %s\n\n [*] System time: %lu (%s UTC)\n\n",
|
||||
LONG_VERSION, (unsigned long) t_current.tv_sec, buffer);
|
||||
free(wps->error);
|
||||
free(wps);
|
||||
return ARG_ERROR;
|
||||
@ -290,11 +291,9 @@ usage_err:
|
||||
}
|
||||
|
||||
/* Cannot specify --start or --end if --force is selected */
|
||||
if (wps->bruteforce && (start_p || end_p)) {
|
||||
if (start_p || end_p) {
|
||||
snprintf(wps->error, 256, "\n [!] Cannot specify --start or --end if --force is selected!\n\n");
|
||||
goto usage_err;
|
||||
}
|
||||
if (wps->bruteforce && ((start_p != (time_t) -1) || (end_p != (time_t) -1))) {
|
||||
snprintf(wps->error, 256, "\n [!] Cannot specify --start or --end if --force is selected!\n\n");
|
||||
goto usage_err;
|
||||
}
|
||||
|
||||
if (wps->mode_auto) { /* Mode auto */
|
||||
@ -337,8 +336,8 @@ usage_err:
|
||||
wps->end = t_now.tv_sec - MODE3_DAYS * SEC_PER_DAY;
|
||||
|
||||
/* Attributes --start and --end can be switched start > end or end > start */
|
||||
if (start_p) {
|
||||
if (end_p) {
|
||||
if (start_p != (time_t) -1) {
|
||||
if (end_p != (time_t) -1) {
|
||||
|
||||
/* Attributes --start and --end must be different */
|
||||
if (start_p == end_p) {
|
||||
@ -361,7 +360,7 @@ usage_err:
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (end_p) {
|
||||
if (end_p != (time_t) -1) {
|
||||
if (end_p >= wps->start) {
|
||||
snprintf(wps->error, 256, "\n [!] Bad Ending point!\n\n");
|
||||
goto usage_err;
|
||||
@ -589,14 +588,14 @@ usage_err:
|
||||
{
|
||||
struct tm ts;
|
||||
char buffer[30];
|
||||
ts = *localtime(&wps->start);
|
||||
ts = *gmtime(&wps->start);
|
||||
strftime(buffer, 30, "%c", &ts);
|
||||
printf("\n [DEBUG] %s:%d:%s(): Start: %10ld (%s)",
|
||||
__FILE__, __LINE__, __func__, (long) wps->start, buffer);
|
||||
ts = *localtime(&wps->end);
|
||||
printf("\n [DEBUG] %s:%d:%s(): Start: %10lu (%s UTC)",
|
||||
__FILE__, __LINE__, __func__, (unsigned long) wps->start, buffer);
|
||||
ts = *gmtime(&wps->end);
|
||||
strftime(buffer, 30, "%c", &ts);
|
||||
printf("\n [DEBUG] %s:%d:%s(): End: %10ld (%s)",
|
||||
__FILE__, __LINE__, __func__, (long) wps->end, buffer);
|
||||
printf("\n [DEBUG] %s:%d:%s(): End: %10lu (%s UTC)",
|
||||
__FILE__, __LINE__, __func__, (unsigned long) wps->end, buffer);
|
||||
fflush(stdout);
|
||||
}
|
||||
#endif
|
||||
@ -812,9 +811,9 @@ usage_err:
|
||||
char buffer[30];
|
||||
|
||||
seed_time = print_seed;
|
||||
ts = *localtime(&seed_time);
|
||||
ts = *gmtime(&seed_time);
|
||||
strftime(buffer, 30, "%c", &ts);
|
||||
printf(" (%s)", buffer);
|
||||
printf(" (%s UTC)", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
52
src/utils.h
52
src/utils.h
@ -74,11 +74,43 @@ int get_int(char *in, int *out) {
|
||||
return 0;
|
||||
};
|
||||
|
||||
/* Custom timegm function made by Eric S Raymond */
|
||||
time_t c_timegm(register struct tm *t) {
|
||||
register long year;
|
||||
register time_t result;
|
||||
|
||||
#define MONTHS_PER_YEAR 12 /* Months per calendar year */
|
||||
|
||||
static const int cumdays[MONTHS_PER_YEAR] =
|
||||
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
|
||||
|
||||
year = 1900 + t->tm_year + t->tm_mon / MONTHS_PER_YEAR;
|
||||
result = (year - 1970) * 365 + cumdays[t->tm_mon % MONTHS_PER_YEAR];
|
||||
result += (year - 1968) / 4;
|
||||
result -= (year - 1900) / 100;
|
||||
result += (year - 1600) / 400;
|
||||
if ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0) &&
|
||||
(t->tm_mon % MONTHS_PER_YEAR) < 2) {
|
||||
result--;
|
||||
}
|
||||
result += t->tm_mday - 1;
|
||||
result *= 24;
|
||||
result += t->tm_hour;
|
||||
result *= 60;
|
||||
result += t->tm_min;
|
||||
result *= 60;
|
||||
result += t->tm_sec;
|
||||
if (t->tm_isdst == 1)
|
||||
result -= 3600;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Converts a [mm/]yyyy string to Unix date time */
|
||||
unsigned int get_unix_datetime(char *s, time_t *datetime) {
|
||||
unsigned int len = strlen(s);
|
||||
int month = 0, year;
|
||||
struct tm tm;
|
||||
struct tm t;
|
||||
|
||||
if (len == 4) {
|
||||
if (get_int(s, &year))
|
||||
@ -106,18 +138,20 @@ unsigned int get_unix_datetime(char *s, time_t *datetime) {
|
||||
|
||||
if (get_int(s_month, &month) || get_int(s_year, &year))
|
||||
return 1;
|
||||
if ((year < 1970 && year > 2037) || (month < 1 && month > 12))
|
||||
return 1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
|
||||
tm.tm_sec = 0;
|
||||
tm.tm_min = 0;
|
||||
tm.tm_hour = 0;
|
||||
tm.tm_mday = 1;
|
||||
tm.tm_mon = month - 1;
|
||||
tm.tm_year = year - 1900;
|
||||
tm.tm_isdst = -1;
|
||||
*datetime = mktime(&tm);
|
||||
t.tm_sec = 0;
|
||||
t.tm_min = 0;
|
||||
t.tm_hour = 0;
|
||||
t.tm_mday = 1;
|
||||
t.tm_mon = month - 1;
|
||||
t.tm_year = year - 1900;
|
||||
t.tm_isdst = 0;
|
||||
*datetime = c_timegm(&t);
|
||||
|
||||
if (*datetime < 0)
|
||||
return 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user