Windows PSCP now links against winsftp.c, and scp.c is now a
[u/mdw/putty] / unix / uxplink.c
index a62d34e..8d0e169 100644 (file)
 #include <pwd.h>
 #include <sys/ioctl.h>
 
-/* More helpful version of the FD_SET macro, to also handle maxfd. */
-#define FD_SET_MAX(fd, max, set) do { \
-    FD_SET(fd, &set); \
-    if (max < fd + 1) max = fd + 1; \
-} while (0)
-
 #define PUTTY_DO_GLOBALS              /* actually _define_ globals */
 #include "putty.h"
 #include "storage.h"
@@ -80,48 +74,11 @@ static Config cfg;
 char *platform_default_s(const char *name)
 {
     if (!strcmp(name, "X11Display"))
-       return getenv("DISPLAY");
+       return dupstr(getenv("DISPLAY"));
     if (!strcmp(name, "TermType"))
-       return getenv("TERM");
-    if (!strcmp(name, "UserName")) {
-       /*
-        * Remote login username will default to the local username.
-        */
-       struct passwd *p;
-       uid_t uid = getuid();
-       char *user, *ret = NULL;
-
-       /*
-        * First, find who we think we are using getlogin. If this
-        * agrees with our uid, we'll go along with it. This should
-        * allow sharing of uids between several login names whilst
-        * coping correctly with people who have su'ed.
-        */
-       user = getlogin();
-       setpwent();
-       if (user)
-           p = getpwnam(user);
-       else
-           p = NULL;
-       if (p && p->pw_uid == uid) {
-           /*
-            * The result of getlogin() really does correspond to
-            * our uid. Fine.
-            */
-           ret = user;
-       } else {
-           /*
-            * If that didn't work, for whatever reason, we'll do
-            * the simpler version: look up our uid in the password
-            * file and map it straight to a name.
-            */
-           p = getpwuid(uid);
-           ret = p->pw_name;
-       }
-       endpwent();
-
-       return ret;
-    }
+       return dupstr(getenv("TERM"));
+    if (!strcmp(name, "UserName"))
+       return get_username();
     return NULL;
 }
 
@@ -237,6 +194,13 @@ void sigwinch(int signum)
 }
 
 /*
+ * In Plink our selects are synchronous, so these functions are
+ * empty stubs.
+ */
+int uxsel_input_add(int fd, int rwx) { return 0; }
+void uxsel_input_remove(int id) { }
+
+/*
  * Short description of parameters.
  */
 static void usage(void)
@@ -256,6 +220,7 @@ static void usage(void)
     printf("  -batch    disable all interactive prompts\n");
     printf("The following options only apply to SSH connections:\n");
     printf("  -pw passw login with specified password\n");
+    printf("  -D listen-port   Dynamic SOCKS-based port forwarding\n");
     printf("  -L listen-port:host:port   Forward local port to "
           "remote address\n");
     printf("  -R listen-port:host:port   Forward remote port to"
@@ -279,7 +244,7 @@ int main(int argc, char **argv)
     int connopen;
     int exitcode;
     int errors;
-    void *ldisc;
+    void *ldisc, *logctx;
 
     ssh_get_line = console_get_line;
 
@@ -565,8 +530,9 @@ int main(int argc, char **argv)
      * Start up the connection.
      */
     logctx = log_init(NULL, &cfg);
+    console_provide_logctx(logctx);
     {
-       char *error;
+       const char *error;
        char *realhost;
        /* nodelay is only useful if stdin is a terminal device */
        int nodelay = cfg.tcp_nodelay && isatty(0);