--- src/newgroups.c	Wed Jul 29 17:14:29 1998
+++ /usr/local/src/nntpcache-2.4.0b5/src/newgroups.c	Sun May 21 17:06:34 2000
@@ -1,4 +1,4 @@
-/* $Id: newgroups.c,v 1.1.1.1 1998/07/29 15:14:29 proff Exp $
+/* $Id: newgroups.c,v 1.4 2000/05/21 15:05:19 proff Exp $
  * $Copyright$
  */
 
@@ -19,32 +19,50 @@
 {
 	struct newsgroup *n;
 	time_t tim;
+	time_t now;
 	struct tm tm;
-	char d[13];
+	char d[11];
 	char gmt[4]="";
 	char dist[128]="";
 	int i;
-	int t[6];
+	int t[5];
+	char arg1[9];
+	int len;
+	int yr;
 	memset(d, 0, sizeof d);
-	if (sscanf(args, "%*s %6s %6s %3s <%127s>", d, d+6, gmt, dist)<2)
+	if (sscanf(args, "%*s %8s %6s %3s <%127s>", arg1, d+4, gmt, dist)<2)
 	{
 bad:
-		emitrn("501 yymmdd hhmmss [\"GMT\"] [<distributions>]");
+		emitrn("501 [yy]yymmdd hhmmss [\"GMT\"] [<distributions>]");
 		return FALSE;
 	}
-	for (i=0; i<6; i++)
+	len = strlen(arg1);
+	if (len < 5 || atoi(arg1) == 0) /* < 5, because some news readers send single digit years. i.e 0 */
+		goto bad;
+	strncpy(d, arg1+len-4, 4);
+	for (i=0; i<5; i++)
 		if ((t[i]=c2i(d+2*i))==-1)
 			goto bad;
+	/* deal with y2k bugged readers */
+	arg1[len-4] = '\0';
+	yr = atoi(arg1);
+	if (yr>=19100)
+	    yr-=19000;
+	if (yr>=1900)
+		yr-=1900;
+	if (yr <70)
+		yr += 100;
 	memset(&tm, 0, sizeof tm);
-	tm.tm_year = t[0];
-	tm.tm_mon = t[1]-1;
-	tm.tm_mday = t[2];
-	tm.tm_hour = t[3];
-	tm.tm_min = t[4];
-	tm.tm_sec = t[5];
+	tm.tm_year = yr;
+	tm.tm_mon = t[0]-1;
+	tm.tm_mday = t[1];
+	tm.tm_hour = t[2];
+	tm.tm_min = t[3];
+	tm.tm_sec = t[4];
 	if ((tim=mktime(&tm))==-1)
 		goto bad;
 	emitrn (NNTP_NEWGROUPS_FOLLOWS);
+	now = time(NULL);
 	for (n=Ni->newsgroup_head; n; n=n->next)
 	{
 #ifdef READ_LOCKS
@@ -53,6 +71,7 @@
 #endif
 		if (!n->moderation ||
 		    n->creation_time < tim ||
+		    n->creation_time > now ||
 		    (con->groupSecurity && !authGroup(n->group, FALSE)))
 		    	goto cont;
 		if (*dist)
