-#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
}
/*
+ * When setting up X forwarding, we should send the screen number
+ * from the specified local display. This function extracts it from
+ * the display string.
+ */
+int x11_get_screen_number(char *display)
+{
+ int n;
+
+ n = strcspn(display, ":");
+ if (!display[n])
+ return 0;
+ n = strcspn(display, ".");
+ if (!display[n])
+ return 0;
+ return atoi(display + n + 1);
+}
+
+/*
* Called to set up the raw connection.
*
* Returns an error message, or NULL on success.
displaynum = 0; /* sensible default */
if (n > sizeof(host) - 1)
n = sizeof(host) - 1;
- strncpy(host, display, n);
- host[n] = '\0';
+ if (n > 0) {
+ strncpy(host, display, n);
+ host[n] = '\0';
+ } else {
+ /*
+ * Local display numbers, particularly on Unix, often omit
+ * the display part completely.
+ */
+ strcpy(host, "localhost");
+ }
/*
* Try to find host.
*/
- addr = sk_namelookup(host, &dummy_realhost);
+ addr = name_lookup(host, port, &dummy_realhost);
if ((err = sk_addr_error(addr)))
return err;
pr->auth_dsize = (pr->auth_dlen + 3) & ~3;
/* Leave room for a terminating zero, to make our lives easier. */
pr->auth_protocol = (char *) smalloc(pr->auth_psize + 1);
- pr->auth_data = (char *) smalloc(pr->auth_dsize);
+ pr->auth_data = (unsigned char *) smalloc(pr->auth_dsize);
}
/*
PUT_16BIT(pr->firstpkt[0], reply + 6, msgsize >> 2);/* data len */
memset(reply + 8, 0, msgsize);
memcpy(reply + 8, message, msglen);
- sshfwd_write(pr->c, reply, 8 + msgsize);
+ sshfwd_write(pr->c, (char *)reply, 8 + msgsize);
sshfwd_close(pr->c);
x11_close(s);
return 0;
*/
PUT_16BIT(pr->firstpkt[0], pr->firstpkt + 6, 0); /* auth proto */
PUT_16BIT(pr->firstpkt[0], pr->firstpkt + 8, 0); /* auth data */
- sk_write(s, pr->firstpkt, 12);
+ sk_write(s, (char *)pr->firstpkt, 12);
pr->verified = 1;
}