fa2969
diff -up shadow-4.1.5.1/libmisc/getdate.c.date-parsing shadow-4.1.5.1/libmisc/getdate.c
fa2969
--- shadow-4.1.5.1/libmisc/getdate.c.date-parsing	2008-06-14 00:07:51.000000000 +0200
fa2969
+++ shadow-4.1.5.1/libmisc/getdate.c	2014-08-29 13:41:22.553267506 +0200
fa2969
@@ -261,6 +261,7 @@ static int	yyHaveDay;
fa2969
 static int	yyHaveRel;
fa2969
 static int	yyHaveTime;
fa2969
 static int	yyHaveZone;
fa2969
+static int	yyHaveYear;
fa2969
 static int	yyTimezone;
fa2969
 static int	yyDay;
fa2969
 static int	yyHour;
fa2969
@@ -1730,6 +1731,7 @@ yyreduce:
fa2969
 	      yyDay = (yyvsp[(3) - (5)].Number);
fa2969
 	      yyYear = (yyvsp[(5) - (5)].Number);
fa2969
 	    }
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
     break;
fa2969
 
fa2969
@@ -1740,6 +1742,7 @@ yyreduce:
fa2969
 	    yyYear = (yyvsp[(1) - (3)].Number);
fa2969
 	    yyMonth = -(yyvsp[(2) - (3)].Number);
fa2969
 	    yyDay = -(yyvsp[(3) - (3)].Number);
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
     break;
fa2969
 
fa2969
@@ -1750,6 +1753,7 @@ yyreduce:
fa2969
 	    yyDay = (yyvsp[(1) - (3)].Number);
fa2969
 	    yyMonth = (yyvsp[(2) - (3)].Number);
fa2969
 	    yyYear = -(yyvsp[(3) - (3)].Number);
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
     break;
fa2969
 
fa2969
@@ -1767,6 +1771,7 @@ yyreduce:
fa2969
 	    yyMonth = (yyvsp[(1) - (4)].Number);
fa2969
 	    yyDay = (yyvsp[(2) - (4)].Number);
fa2969
 	    yyYear = (yyvsp[(4) - (4)].Number);
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
     break;
fa2969
 
fa2969
@@ -1784,6 +1789,7 @@ yyreduce:
fa2969
 	    yyMonth = (yyvsp[(2) - (3)].Number);
fa2969
 	    yyDay = (yyvsp[(1) - (3)].Number);
fa2969
 	    yyYear = (yyvsp[(3) - (3)].Number);
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
     break;
fa2969
 
fa2969
@@ -1928,7 +1934,8 @@ yyreduce:
fa2969
   case 49:
fa2969
 #line 397 "getdate.y"
fa2969
     {
fa2969
-	    if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
fa2969
+	    if ((yyHaveTime != 0 || (yyvsp[(1) - (1)].Number) >= 100) && !yyHaveYear
fa2969
+		&& (yyHaveDate != 0) && (yyHaveRel == 0))
fa2969
 	      yyYear = (yyvsp[(1) - (1)].Number);
fa2969
 	    else
fa2969
 	      {
fa2969
@@ -2556,7 +2563,7 @@ yylex (void)
fa2969
 	  return LookupWord (buff);
fa2969
 	}
fa2969
       if (c != '(')
fa2969
-	return *yyInput++;
fa2969
+	return (unsigned char)*yyInput++;
fa2969
       Count = 0;
fa2969
       do
fa2969
 	{
fa2969
diff -up shadow-4.1.5.1/libmisc/getdate.y.date-parsing shadow-4.1.5.1/libmisc/getdate.y
fa2969
--- shadow-4.1.5.1/libmisc/getdate.y.date-parsing	2008-05-26 10:57:51.000000000 +0200
fa2969
+++ shadow-4.1.5.1/libmisc/getdate.y	2014-08-29 13:40:37.502229879 +0200
fa2969
@@ -152,6 +152,7 @@ static int	yyHaveDay;
fa2969
 static int	yyHaveRel;
fa2969
 static int	yyHaveTime;
fa2969
 static int	yyHaveZone;
fa2969
+static int      yyHaveYear;
fa2969
 static int	yyTimezone;
fa2969
 static int	yyDay;
fa2969
 static int	yyHour;
fa2969
@@ -293,18 +294,21 @@ date	: tUNUMBER '/' tUNUMBER {
fa2969
 	      yyDay = $3;
fa2969
 	      yyYear = $5;
fa2969
 	    }
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
 	| tUNUMBER tSNUMBER tSNUMBER {
fa2969
 	    /* ISO 8601 format.  yyyy-mm-dd.  */
fa2969
 	    yyYear = $1;
fa2969
 	    yyMonth = -$2;
fa2969
 	    yyDay = -$3;
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
 	| tUNUMBER tMONTH tSNUMBER {
fa2969
 	    /* e.g. 17-JUN-1992.  */
fa2969
 	    yyDay = $1;
fa2969
 	    yyMonth = $2;
fa2969
 	    yyYear = -$3;
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
 	| tMONTH tUNUMBER {
fa2969
 	    yyMonth = $1;
fa2969
@@ -314,6 +318,7 @@ date	: tUNUMBER '/' tUNUMBER {
fa2969
 	    yyMonth = $1;
fa2969
 	    yyDay = $2;
fa2969
 	    yyYear = $4;
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
 	| tUNUMBER tMONTH {
fa2969
 	    yyMonth = $2;
fa2969
@@ -323,6 +328,7 @@ date	: tUNUMBER '/' tUNUMBER {
fa2969
 	    yyMonth = $2;
fa2969
 	    yyDay = $1;
fa2969
 	    yyYear = $3;
fa2969
+	    yyHaveYear++;
fa2969
 	}
fa2969
 	;
fa2969
 
fa2969
@@ -395,7 +401,8 @@ relunit	: tUNUMBER tYEAR_UNIT {
fa2969
 
fa2969
 number	: tUNUMBER
fa2969
           {
fa2969
-	    if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
fa2969
+	    if ((yyHaveTime != 0 || $1 >= 100) && !yyHaveYear
fa2969
+		&& (yyHaveDate != 0) && (yyHaveRel == 0))
fa2969
 	      yyYear = $1;
fa2969
 	    else
fa2969
 	      {
fa2969
@@ -802,7 +809,7 @@ yylex (void)
fa2969
 	  return LookupWord (buff);
fa2969
 	}
fa2969
       if (c != '(')
fa2969
-	return *yyInput++;
fa2969
+	return (unsigned char)*yyInput++;
fa2969
       Count = 0;
fa2969
       do
fa2969
 	{