083fc6d
--- netkit-rsh-0.17/rlogind/sockconv.c.linefeed	1999-10-02 23:50:52.000000000 +0200
083fc6d
+++ netkit-rsh-0.17/rlogind/sockconv.c	2006-07-17 14:30:50.000000000 +0200
083fc6d
@@ -86,6 +86,35 @@
083fc6d
   return (text);
083fc6d
 }
083fc6d
 
083fc6d
+/* conver \n to \r\n and also terminate string by \r\n */
083fc6d
+static void my_fputs(char *str, FILE *out)
083fc6d
+{
083fc6d
+	char *p = str, *last = str;
083fc6d
+
083fc6d
+	while(p && *p) { 
083fc6d
+		if ((p=strchr(p, '\n')) && (p==str || *(p-1)!='\r')) {
083fc6d
+			/* convert \n to \n\r  */
083fc6d
+			fwrite((const void *) last, 1, p-last, out);
083fc6d
+			fputs("\r\n", out);
083fc6d
+			p++;
083fc6d
+			last = p;
083fc6d
+		}
083fc6d
+		else if (p && *(p+1))
083fc6d
+			/* \r\n already in strimg, continue... */
083fc6d
+			p++;
083fc6d
+		else {
083fc6d
+			/* write the rest of string */
083fc6d
+			int len = strlen(str);
083fc6d
+
083fc6d
+			fwrite((const void *) last, 1, len-(last-str), out);
083fc6d
+			if (*(str+(len-1)) != '\n')
083fc6d
+				fputs("\r\n", out);	/* terminate output */
083fc6d
+			break;
083fc6d
+		}
083fc6d
+	}
083fc6d
+}
083fc6d
+
083fc6d
+
083fc6d
 static void drop_reply(struct pam_response *reply, int replies)
083fc6d
 {
083fc6d
   int i;
083fc6d
@@ -126,16 +155,15 @@
e4aceb7
       }
e4aceb7
       break;
e4aceb7
     case PAM_ERROR_MSG:
e4aceb7
-      fprintf(stderr,"%s\n",msgm[replies]->msg);
083fc6d
+      my_fputs(msgm[replies]->msg, stderr);
e4aceb7
       string = NULL;
083fc6d
-      
e4aceb7
       break;
e4aceb7
     case PAM_TEXT_INFO:
e4aceb7
-      fprintf(stderr,"%s\n",msgm[replies]->msg);
083fc6d
+      my_fputs(msgm[replies]->msg, stderr);
e4aceb7
       string = NULL;
e4aceb7
       break;
e4aceb7
     default:
e4aceb7
-      fprintf(stderr, "erroneous conversation (%d)\n"
e4aceb7
+      fprintf(stderr, "erroneous conversation (%d)\r\n"
e4aceb7
 	      ,msgm[replies]->msg_style);
e4aceb7
       drop_reply(reply,replies);
e4aceb7
       return (PAM_CONV_ERR);