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;
|
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;
|
clock_t c_start = 0, c_end;
|
||||||
|
|
||||||
int opt = 0;
|
int opt = 0;
|
||||||
@ -185,9 +185,10 @@ memory_err:
|
|||||||
struct tm ts;
|
struct tm ts;
|
||||||
char buffer[30];
|
char buffer[30];
|
||||||
r_time = t_current.tv_sec;
|
r_time = t_current.tv_sec;
|
||||||
ts = *localtime(&r_time);
|
ts = *gmtime(&r_time);
|
||||||
strftime(buffer, 30, "%c", &ts);
|
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->error);
|
||||||
free(wps);
|
free(wps);
|
||||||
return ARG_ERROR;
|
return ARG_ERROR;
|
||||||
@ -290,11 +291,9 @@ usage_err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Cannot specify --start or --end if --force is selected */
|
/* Cannot specify --start or --end if --force is selected */
|
||||||
if (wps->bruteforce && (start_p || end_p)) {
|
if (wps->bruteforce && ((start_p != (time_t) -1) || (end_p != (time_t) -1))) {
|
||||||
if (start_p || end_p) {
|
snprintf(wps->error, 256, "\n [!] Cannot specify --start or --end if --force is selected!\n\n");
|
||||||
snprintf(wps->error, 256, "\n [!] Cannot specify --start or --end if --force is selected!\n\n");
|
goto usage_err;
|
||||||
goto usage_err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wps->mode_auto) { /* Mode auto */
|
if (wps->mode_auto) { /* Mode auto */
|
||||||
@ -337,8 +336,8 @@ usage_err:
|
|||||||
wps->end = t_now.tv_sec - MODE3_DAYS * SEC_PER_DAY;
|
wps->end = t_now.tv_sec - MODE3_DAYS * SEC_PER_DAY;
|
||||||
|
|
||||||
/* Attributes --start and --end can be switched start > end or end > start */
|
/* Attributes --start and --end can be switched start > end or end > start */
|
||||||
if (start_p) {
|
if (start_p != (time_t) -1) {
|
||||||
if (end_p) {
|
if (end_p != (time_t) -1) {
|
||||||
|
|
||||||
/* Attributes --start and --end must be different */
|
/* Attributes --start and --end must be different */
|
||||||
if (start_p == end_p) {
|
if (start_p == end_p) {
|
||||||
@ -361,7 +360,7 @@ usage_err:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (end_p) {
|
if (end_p != (time_t) -1) {
|
||||||
if (end_p >= wps->start) {
|
if (end_p >= wps->start) {
|
||||||
snprintf(wps->error, 256, "\n [!] Bad Ending point!\n\n");
|
snprintf(wps->error, 256, "\n [!] Bad Ending point!\n\n");
|
||||||
goto usage_err;
|
goto usage_err;
|
||||||
@ -589,14 +588,14 @@ usage_err:
|
|||||||
{
|
{
|
||||||
struct tm ts;
|
struct tm ts;
|
||||||
char buffer[30];
|
char buffer[30];
|
||||||
ts = *localtime(&wps->start);
|
ts = *gmtime(&wps->start);
|
||||||
strftime(buffer, 30, "%c", &ts);
|
strftime(buffer, 30, "%c", &ts);
|
||||||
printf("\n [DEBUG] %s:%d:%s(): Start: %10ld (%s)",
|
printf("\n [DEBUG] %s:%d:%s(): Start: %10lu (%s UTC)",
|
||||||
__FILE__, __LINE__, __func__, (long) wps->start, buffer);
|
__FILE__, __LINE__, __func__, (unsigned long) wps->start, buffer);
|
||||||
ts = *localtime(&wps->end);
|
ts = *gmtime(&wps->end);
|
||||||
strftime(buffer, 30, "%c", &ts);
|
strftime(buffer, 30, "%c", &ts);
|
||||||
printf("\n [DEBUG] %s:%d:%s(): End: %10ld (%s)",
|
printf("\n [DEBUG] %s:%d:%s(): End: %10lu (%s UTC)",
|
||||||
__FILE__, __LINE__, __func__, (long) wps->end, buffer);
|
__FILE__, __LINE__, __func__, (unsigned long) wps->end, buffer);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -812,9 +811,9 @@ usage_err:
|
|||||||
char buffer[30];
|
char buffer[30];
|
||||||
|
|
||||||
seed_time = print_seed;
|
seed_time = print_seed;
|
||||||
ts = *localtime(&seed_time);
|
ts = *gmtime(&seed_time);
|
||||||
strftime(buffer, 30, "%c", &ts);
|
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;
|
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 */
|
/* Converts a [mm/]yyyy string to Unix date time */
|
||||||
unsigned int get_unix_datetime(char *s, time_t *datetime) {
|
unsigned int get_unix_datetime(char *s, time_t *datetime) {
|
||||||
unsigned int len = strlen(s);
|
unsigned int len = strlen(s);
|
||||||
int month = 0, year;
|
int month = 0, year;
|
||||||
struct tm tm;
|
struct tm t;
|
||||||
|
|
||||||
if (len == 4) {
|
if (len == 4) {
|
||||||
if (get_int(s, &year))
|
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))
|
if (get_int(s_month, &month) || get_int(s_year, &year))
|
||||||
return 1;
|
return 1;
|
||||||
|
if ((year < 1970 && year > 2037) || (month < 1 && month > 12))
|
||||||
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tm.tm_sec = 0;
|
t.tm_sec = 0;
|
||||||
tm.tm_min = 0;
|
t.tm_min = 0;
|
||||||
tm.tm_hour = 0;
|
t.tm_hour = 0;
|
||||||
tm.tm_mday = 1;
|
t.tm_mday = 1;
|
||||||
tm.tm_mon = month - 1;
|
t.tm_mon = month - 1;
|
||||||
tm.tm_year = year - 1900;
|
t.tm_year = year - 1900;
|
||||||
tm.tm_isdst = -1;
|
t.tm_isdst = 0;
|
||||||
*datetime = mktime(&tm);
|
*datetime = c_timegm(&t);
|
||||||
|
|
||||||
if (*datetime < 0)
|
if (*datetime < 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user