Damn, forgot the rest of the patch. Here it comes.
diff -Nur openssh-2.2.0p1-/ssh-keygen.c openssh-2.2.0p1/ssh-keygen.c
--- openssh-2.2.0p1-/ssh-keygen.c Wed Aug 23 02:46:24 2000
+++ openssh-2.2.0p1/ssh-keygen.c Sun Oct 29 16:44:50 2000
@@ -68,7 +68,7 @@
static const char *__progname = "ssh-keygen";
#endif /* HAVE___PROGNAME */
-char hostname[MAXHOSTNAMELEN];
+char *hostname;
void
ask_filename(struct passwd *pw, const char *prompt)
@@ -525,10 +525,24 @@
printf("You don't exist, go away!\n");
exit(1);
}
- if (gethostname(hostname, sizeof(hostname)) < 0) {
- perror("gethostname");
- exit(1);
- }
+ {
+ size_t size = 100;
+ hostname = (char *)malloc(size);
+ while (hostname) {
+ if (gethostname(hostname, size) >= 0)
+ break;
+ if (errno != ENAMETOOLONG) {
+ perror("gethostname");
+ exit(1);
+ }
+ size <<= 1;
+ hostname = realloc(hostname, size);
+ }
+ if (hostname == NULL) {
+ perror("malloc");
+ exit(1);
+ }
+ }
while ((opt = getopt(ac, av, "dqpclRxXyb:f:P:N:C:")) != EOF) {
switch (opt) {
diff -Nur openssh-2.2.0p1-/sshd.c openssh-2.2.0p1/sshd.c
--- openssh-2.2.0p1-/sshd.c Tue Aug 29 02:05:50 2000
+++ openssh-2.2.0p1/sshd.c Sun Oct 29 16:44:50 2000
@@ -140,7 +140,7 @@
int session_id2_len = 0;
/* record remote hostname or ip */
-unsigned int utmp_len = MAXHOSTNAMELEN;
+unsigned int utmp_len = 256; /* bigger than LI_HOSTSIZE makes no sense */
/* Prototypes for various functions defined later in this file. */
void do_ssh1_kex();
--
Debian Developer and Quality Assurance Team Member
1024/26CC7853 31E6 A8CA 68FC 284F 7D16 63EC A9E6 67FF 26CC 7853
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 242 bytes
Desc: not available
Url :
http://lists.mindrot.org/pipermail/openssh-unix-dev/attachments/20001227/8a794ead/attachment.bin
1) IMHO, Hurd should add a definition for MAXHOSTNAMELEN. 2) the patch does not use xmalloc,xrealloc On Wed, Dec 27, 2000 at 11:51:20PM +0100, Christian Kurz wrote:> > Damn, forgot the rest of the patch. Here it comes. > > diff -Nur openssh-2.2.0p1-/ssh-keygen.c openssh-2.2.0p1/ssh-keygen.c > --- openssh-2.2.0p1-/ssh-keygen.c Wed Aug 23 02:46:24 2000 > +++ openssh-2.2.0p1/ssh-keygen.c Sun Oct 29 16:44:50 2000 > @@ -68,7 +68,7 @@ > static const char *__progname = "ssh-keygen"; > #endif /* HAVE___PROGNAME */ > > -char hostname[MAXHOSTNAMELEN]; > +char *hostname; > > void > ask_filename(struct passwd *pw, const char *prompt) > @@ -525,10 +525,24 @@ > printf("You don't exist, go away!\n"); > exit(1); > } > - if (gethostname(hostname, sizeof(hostname)) < 0) { > - perror("gethostname"); > - exit(1); > - } > + { > + size_t size = 100; > + hostname = (char *)malloc(size); > + while (hostname) { > + if (gethostname(hostname, size) >= 0) > + break; > + if (errno != ENAMETOOLONG) { > + perror("gethostname"); > + exit(1); > + } > + size <<= 1; > + hostname = realloc(hostname, size); > + } > + if (hostname == NULL) { > + perror("malloc"); > + exit(1); > + } > + } > > while ((opt = getopt(ac, av, "dqpclRxXyb:f:P:N:C:")) != EOF) { > switch (opt) { > diff -Nur openssh-2.2.0p1-/sshd.c openssh-2.2.0p1/sshd.c > --- openssh-2.2.0p1-/sshd.c Tue Aug 29 02:05:50 2000 > +++ openssh-2.2.0p1/sshd.c Sun Oct 29 16:44:50 2000 > @@ -140,7 +140,7 @@ > int session_id2_len = 0; > > /* record remote hostname or ip */ > -unsigned int utmp_len = MAXHOSTNAMELEN; > +unsigned int utmp_len = 256; /* bigger than LI_HOSTSIZE makes no sense */ > > /* Prototypes for various functions defined later in this file. */ > void do_ssh1_kex(); > > -- > Debian Developer and Quality Assurance Team Member > 1024/26CC7853 31E6 A8CA 68FC 284F 7D16 63EC A9E6 67FF 26CC 7853