--- server/main.c.orig	Sun Jan  5 19:59:27 1997
+++ server/main.c	Wed Sep 17 15:34:40 1997
@@ -139,6 +139,36 @@
   }
 }
 
+#if defined(__FreeBSD__)
+static unsigned char itoa64[] =
+    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
+
+static void
+to64(char *s, long v, int n)
+{
+	while (--n >= 0) {
+		*s++ = itoa64[v&0x3f];
+		v >>= 6;
+	}
+}
+
+char *
+crypt_string(char *str, char *salt)
+{
+	char	s[10];
+	if (salt==NULL) {
+		struct timeval	tv;
+		gettimeofday(&tv,0);
+		to64(&s[0], random(), 3);
+		to64(&s[3], tv.tv_usec, 3);
+		to64(&s[6], tv.tv_sec, 2);
+		s[8] = '\0';
+		salt = s;
+	}
+	return (crypt(str, salt));
+}
+#else
+
 char *crypt_string(char *str, char *salt) {
   static char *c=
     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
@@ -151,6 +181,7 @@
     s[1]= salt[1];
   return crypt(str,s);
 }
+#endif
 
 int check_password(char *typed,char *crypted) {
   return !strcmp(crypt_string(typed,crypted),crypted);
