diff options
author | alex <alex@FreeBSD.org> | 2000-07-19 08:14:09 +0000 |
---|---|---|
committer | alex <alex@FreeBSD.org> | 2000-07-19 08:14:09 +0000 |
commit | a35c423a7ccf6d33347314dcd1d2b2f2cf5b5aac (patch) | |
tree | 2d4d58dcff9bce39307a4c2c9709077c2afb4ce8 /www | |
parent | 0a2021589a4a919f30f1b789db00476edfc23b78 (diff) | |
download | FreeBSD-ports-a35c423a7ccf6d33347314dcd1d2b2f2cf5b5aac.zip FreeBSD-ports-a35c423a7ccf6d33347314dcd1d2b2f2cf5b5aac.tar.gz |
Fix patching for 2-digit years.
PR: 19315
Submitted by: Karl Dietz <Karl.Dietz@frankfurt.netsurf.de>
Diffstat (limited to 'www')
-rw-r--r-- | www/web500gw/files/patch-ac | 155 |
1 files changed, 77 insertions, 78 deletions
diff --git a/www/web500gw/files/patch-ac b/www/web500gw/files/patch-ac index 7f0f2b7..fa865d5 100644 --- a/www/web500gw/files/patch-ac +++ b/www/web500gw/files/patch-ac @@ -1,64 +1,46 @@ *** util.c.orig Thu Dec 2 18:07:10 1999 ---- util.c Mon Jan 17 23:23:51 2000 +--- util.c Thu Jan 27 11:41:36 2000 *************** -*** 14,20 **** - * software without specific prior written permission. This software +*** 15,20 **** +--- 15,22 ---- * is provided ``as is'' without express or implied warranty. */ -! - #include "web500gw.h" - /* msg_?printf: formats (and prints out) a string contained in message file */ ---- 14,21 ---- - * software without specific prior written permission. This software - * is provided ``as is'' without express or implied warranty. - */ -! #include <unistd.h> -! #include <gnuregex.h> ++ #include <unistd.h> ++ #include <gnuregex.h> #include "web500gw.h" /* msg_?printf: formats (and prints out) a string contained in message file */ *************** -*** 437,443 **** - hour = 0; +*** 438,443 **** +--- 440,449 ---- mday++; } -! year = YEAR (tm -> tm_year); - result = 0L; - for (i = 1970; i < year; i++) - result += dysize (i); ---- 438,444 ---- - hour = 0; - mday++; - } -! year = (tm -> tm_year); + year = YEAR (tm -> tm_year); ++ /* note that 2-digit-year LDAP timestamp will have "00" for "2000" */ ++ /* above year transformation will return "1900" for "00", 2-digit "2000" */ ++ /* the following assumes no real dates < 1970 */ ++ if (year < 1970) year += 100; /* turn "1900" into "2000" */ result = 0L; for (i = 1970; i < year; i++) result += dysize (i); *************** -*** 454,460 **** +*** 465,470 **** +--- 471,477 ---- + char mydate[256]; + struct tm tm, *ntm; + time_t t; ++ int ds_off; /* date string offset */ - - /* returns a printable date string from LDAP's date format: -! * s should point to: YYMMDDHHmmSSZ - * format format string for strftime(3) - */ - char * ---- 455,461 ---- - - - /* returns a printable date string from LDAP's date format: -! * s should point to: YYYYMMDDHHmmSSZ - * format format string for strftime(3) - */ - char * + #ifdef WEB500GW_DEBUG + Web500gw_debug(WEB500GW_DEBUG_UTIL, " format_date (%s, \"%s\")\n", *************** *** 473,487 **** if (!s) return(NULL); ! /* s should point to: YYMMDDHHmmSSZ */ -! /* ... well 2 digits for year :-( */ + /* ... well 2 digits for year :-( */ ! ! tm.tm_year = 10*(s[0] - '0') + (s[1] - '0'); ! tm.tm_mon = 10*(s[2] - '0') + (s[3] - '0') - 1; @@ -69,49 +51,54 @@ tm.tm_isdst = 0; #if ! (defined(__hpux) || defined(_AIX) || defined(sunos5) || defined(linux) || defined(unixware7)) ---- 474,487 ---- +--- 480,498 ---- if (!s) return(NULL); -! /* s should point to: YYYYMMDDHHmmSSZ for OpenLDAP */ -! /* this change will probably cause problems for UMich LDAP-3.3 use */ -! tm.tm_year = 1000*(s[0] - '0') + 100*(s[1] - '0') + 10*(s[2] - '0') + (s[3] - '0'); -! tm.tm_mon = 10*(s[4] - '0') + (s[5] - '0') - 1; -! tm.tm_mday = 10*(s[6] - '0') + (s[7] - '0'); -! tm.tm_hour = 10*(s[8] - '0') + (s[9] - '0'); -! tm.tm_min = 10*(s[10] - '0') + (s[11] - '0'); -! tm.tm_sec = 10*(s[12] - '0') + (s[13] - '0'); +! /* s should point to: YYMMDDHHmmSSZ (13 chars) */ + /* ... well 2 digits for year :-( */ +! /* or: YYYYMMDDHHmmSSZ (15 chars; 4-digit years) */ +! if (strlen(s) == 13) { +! tm.tm_year = 10*(s[0] - '0') + (s[1] - '0'); ds_off = 2;} +! else { +! tm.tm_year = 1000*(s[0] - '0') + 100*(s[1] - '0') + +! 10*(s[2] - '0') + (s[3] - '0'); ds_off = 4;} +! tm.tm_mon = 10*(s[ds_off] - '0') + (s[ds_off+1] - '0') - 1; +! tm.tm_mday = 10*(s[ds_off+2] - '0') + (s[ds_off+3] - '0'); +! tm.tm_hour = 10*(s[ds_off+4] - '0') + (s[ds_off+5] - '0'); +! tm.tm_min = 10*(s[ds_off+6] - '0') + (s[ds_off+7] - '0'); +! tm.tm_sec = 10*(s[ds_off+8] - '0') + (s[ds_off+9] - '0'); tm.tm_isdst = 0; #if ! (defined(__hpux) || defined(_AIX) || defined(sunos5) || defined(linux) || defined(unixware7)) *************** -*** 512,518 **** - } - - /* compares 2 dates: -! * ldap_date should point to: YYMMDDHHmmSSZ - * http_date is a HTTP date (3 different formats ...) - * returns 1,0,-1 if first date is newer, equal, older to second - */ ---- 512,518 ---- - } +*** 524,529 **** +--- 535,541 ---- + char month_name[4]; + int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0; + int i = 0; ++ int ds_off; /* date stamp offset */ - /* compares 2 dates: -! * ldap_date should point to: YYYYMMDDHHmmSSZ - * http_date is a HTTP date (3 different formats ...) - * returns 1,0,-1 if first date is newer, equal, older to second - */ + #ifdef WEB500GW_DEBUG + Web500gw_debug(WEB500GW_DEBUG_UTIL, " cmp_dates (%s, %s)\n", *************** *** 552,560 **** ---- 552,562 ---- /* RFC 850: dd-Mmm-yy hh:mm:ss */ sscanf(http_date, "%d-%3s-%d %d:%d:%d", &day, month_name, &year, &hour, &min, &sec); -+ /* OpenLDAP uses and records 4 digit years - following code not needed - if (year < 70) - year += 100; - year += 1900; -+ */ +! if (year < 70) +! year += 100; +! year += 1900; + } else { /* normal HTTP date (RFC 822/1123): dd Mmm yyyy hh:mm:ss */ + sscanf(http_date, "%d %s %d %d:%d:%d", + &day, month_name, &year, &hour, &min, &sec); +--- 564,572 ---- + /* RFC 850: dd-Mmm-yy hh:mm:ss */ + sscanf(http_date, "%d-%3s-%d %d:%d:%d", + &day, month_name, &year, &hour, &min, &sec); +! /* convert 2-digit year into 4-digit year based on Unix beg date */ +! if (year < 70) year += 100; +! if (year < 1900) year += 1900; } else { /* normal HTTP date (RFC 822/1123): dd Mmm yyyy hh:mm:ss */ sscanf(http_date, "%d %s %d %d:%d:%d", &day, month_name, &year, &hour, &min, &sec); @@ -121,7 +108,7 @@ Web500gw_debug(WEB500GW_DEBUG_UTIL, "%d:%d:%d\n", hour, min, sec, 0); #endif ! if ((i = ((10*(ldap_date[0] - '0') + (ldap_date[1] - '0') + 1900) - year))) - return i > 0; +! return i > 0; ! if ((i = ((10*(ldap_date[2] - '0') + (ldap_date[3] - '0')) - month))) return i > 0; ! if ((i = ((10*(ldap_date[4] - '0') + (ldap_date[5] - '0')) - day))) @@ -134,21 +121,33 @@ return i > 0; /* gone so far - dates are identical */ ---- 570,586 ---- +--- 580,608 ---- day, month, year, 0); Web500gw_debug(WEB500GW_DEBUG_UTIL, "%d:%d:%d\n", hour, min, sec, 0); #endif -! if ((i = (1000*(ldap_date[0] -'0') + 100*(ldap_date[1] - '0') + (10*(ldap_date[2] - '0') + (ldap_date[3] - '0')) - year))) - return i > 0; -! if ((i = ((10*(ldap_date[4] - '0') + (ldap_date[5] - '0')) - month))) +! /* ldap_date should point to: YYMMDDHHmmSSZ (13 chars) */ +! /* ... well 2 digits for year :-( */ +! /* or: YYYYMMDDHHmmSSZ (15 chars; 4-digit years) */ +! if (strlen(ldap_date) == 13) { +! ds_off=2; +! if ((i = ((10*(ldap_date[0] - '0') + +! (ldap_date[1] - '0') + 1900) - year))) return i > 0;} +! else { +! ds_off=4; +! if ((i = ((1000*(ldap_date[0] - '0') + +! 100*(ldap_date[1] - '0') + +! 10*(ldap_date[2] - '0') + +! (ldap_date[3] - '0')) - year ))) return i > 0;} +! +! if ((i = ((10*(ldap_date[ds_off] - '0') + (ldap_date[ds_off+1] - '0')) - month))) return i > 0; -! if ((i = ((10*(ldap_date[6] - '0') + (ldap_date[7] - '0')) - day))) +! if ((i = ((10*(ldap_date[ds_off+2] - '0') + (ldap_date[ds_off+3] - '0')) - day))) return i > 0; -! if ((i = ((10*(ldap_date[8] - '0') + (ldap_date[9] - '0')) - hour))) +! if ((i = ((10*(ldap_date[ds_off+4] - '0') + (ldap_date[ds_off+5] - '0')) - hour))) return i > 0; -! if ((i = ((10*(ldap_date[10] - '0') + (ldap_date[11] - '0')) - min))) +! if ((i = ((10*(ldap_date[ds_off+6] - '0') + (ldap_date[ds_off+7] - '0')) - min))) return i > 0; -! if ((i = ((10*(ldap_date[12] - '0') + (ldap_date[13] - '0')) - sec))) +! if ((i = ((10*(ldap_date[ds_off+8] - '0') + (ldap_date[ds_off+9] - '0')) - sec))) return i > 0; /* gone so far - dates are identical */ |