# HG changeset patch
# User Mike Frysinger <[email protected]>
# Date 1333864252 14400
# Node ID 44f6add4e5d0bb336f3d9e2dea6adee00b047b97
# Parent  d392f5a61a48ce6427ad33fcc8540b3b55b560cc
check for fork() and not __uClinux__

diff -r d392f5a61a48 -r 44f6add4e5d0 configure.in
--- a/configure.in      Thu Feb 23 21:46:02 2012 +0800
+++ b/configure.in      Sun Apr 08 01:50:52 2012 -0400
@@ -616,7 +616,7 @@
 AC_FUNC_MEMCMP
 AC_FUNC_SELECT_ARGTYPES
 AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([dup2 getspnam getusershell memset putenv select socket strdup 
clearenv strlcpy strlcat daemon basename _getpty getaddrinfo freeaddrinfo 
getnameinfo])
+AC_CHECK_FUNCS([dup2 getspnam getusershell memset putenv select socket strdup 
clearenv strlcpy strlcat daemon basename _getpty getaddrinfo freeaddrinfo 
getnameinfo fork])
 
 AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME))
 
diff -r d392f5a61a48 -r 44f6add4e5d0 dbutil.c
--- a/dbutil.c  Thu Feb 23 21:46:02 2012 +0800
+++ b/dbutil.c  Sun Apr 08 01:50:52 2012 -0400
@@ -443,7 +443,7 @@
                return DROPBEAR_FAILURE;
        }
 
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        pid = vfork();
 #else
        pid = fork();
diff -r d392f5a61a48 -r 44f6add4e5d0 scp.c
--- a/scp.c     Thu Feb 23 21:46:02 2012 +0800
+++ b/scp.c     Sun Apr 08 01:50:52 2012 -0400
@@ -130,22 +130,22 @@
                        fprintf(stderr, " %s", a->list[i]);
                fprintf(stderr, "\n");
        }
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        pid = vfork();
 #else
        pid = fork();
-#endif /* __uClinux__ */
+#endif
        if (pid == -1)
                fatal("do_local_cmd: fork: %s", strerror(errno));
 
        if (pid == 0) {
                execvp(a->list[0], a->list);
                perror(a->list[0]);
-#ifdef __uClinux__
+#ifndef HAVE_FORK
                _exit(1);
 #else
                exit(1);
-#endif /* __uClinux__ */
+#endif
        }
 
        do_cmd_pid = pid;
@@ -171,6 +171,16 @@
  * assigns the input and output file descriptors on success.
  */
 
+static void
+arg_setup(char *host, char *remuser, char *cmd)
+{
+       replacearg(&args, 0, "%s", ssh_program);
+       if (remuser != NULL)
+               addargs(&args, "-l%s", remuser);
+       addargs(&args, "%s", host);
+       addargs(&args, "%s", cmd);
+}
+
 int
 do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc)
 {
@@ -198,22 +208,18 @@
        close(reserved[0]);
        close(reserved[1]);
 
-    /* uClinux needs to build the args here before vforking,
-       otherwise we do it later on. */
-#ifdef __uClinux__
-               replacearg(&args, 0, "%s", ssh_program);
-               if (remuser != NULL)
-                       addargs(&args, "-l%s", remuser);
-               addargs(&args, "%s", host);
-               addargs(&args, "%s", cmd);
-#endif /* __uClinux__ */
+       /* uClinux needs to build the args here before vforking,
+          otherwise we do it later on. */
+#ifndef HAVE_FORK
+       arg_setup(host, remuser, cmd);
+#endif
 
        /* Fork a child to execute the command on the remote host using ssh. */
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        do_cmd_pid = vfork();
 #else
        do_cmd_pid = fork();
-#endif /* __uClinux__ */
+#endif
 
        if (do_cmd_pid == 0) {
                /* Child. */
@@ -224,27 +230,22 @@
                close(pin[0]);
                close(pout[1]);
 
-#ifndef __uClinux__
-               replacearg(&args, 0, "%s", ssh_program);
-               if (remuser != NULL)
-                       addargs(&args, "-l%s", remuser);
-               addargs(&args, "%s", host);
-               addargs(&args, "%s", cmd);
-#endif /* __uClinux__ */
+#ifndef HAVE_FORK
+               arg_setup(host, remuser, cmd);
+#endif
 
                execvp(ssh_program, args.list);
                perror(ssh_program);
-#ifndef __uClinux__
+#ifndef HAVE_FORK
+               _exit(1);
+#else
                exit(1);
-#else
-               _exit(1);
-#endif /* __uClinux__ */
+#endif
        } else if (do_cmd_pid == -1) {
                fatal("fork: %s", strerror(errno));
        }
 
-
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        /* clean up command */
        /* pop cmd */
        xfree(args.list[args.num-1]);
@@ -260,7 +261,7 @@
                args.list[args.num-1]=NULL;
                args.num--;
        }
-#endif /* __uClinux__ */
+#endif
 
        /* Parent.  Close the other side, and return the local side. */
        close(pin[0]);
diff -r d392f5a61a48 -r 44f6add4e5d0 session.h
--- a/session.h Thu Feb 23 21:46:02 2012 +0800
+++ b/session.h Sun Apr 08 01:50:52 2012 -0400
@@ -218,7 +218,7 @@
        /* The resolved remote address, used for lastlog etc */
        char *remotehost;
 
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        pid_t server_pid;
 #endif
 
diff -r d392f5a61a48 -r 44f6add4e5d0 svr-chansession.c
--- a/svr-chansession.c Thu Feb 23 21:46:02 2012 +0800
+++ b/svr-chansession.c Sun Apr 08 01:50:52 2012 -0400
@@ -658,7 +658,7 @@
 
        /* uClinux will vfork(), so there'll be a race as 
        connection_string is freed below. */
-#ifndef __uClinux__
+#ifdef HAVE_FORK
        chansess->connection_string = make_connection_string();
 #endif
 
@@ -670,7 +670,7 @@
                ret = ptycommand(channel, chansess);
        }
 
-#ifndef __uClinux__    
+#ifdef HAVE_FORK       
        m_free(chansess->connection_string);
 #endif
 
@@ -745,7 +745,7 @@
                return DROPBEAR_FAILURE;
        }
        
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        pid = vfork();
 #else
        pid = fork();
@@ -863,9 +863,9 @@
        struct ChanSess *chansess = user_data;
        char *usershell = NULL;
 
-    /* with uClinux we'll have vfork()ed, so don't want to overwrite the
-     * hostkey. can't think of a workaround to clear it */
-#ifndef __uClinux__
+       /* with uClinux we'll have vfork()ed, so don't want to overwrite the
+        * hostkey. can't think of a workaround to clear it */
+#ifdef HAVE_FORK
        /* wipe the hostkey */
        sign_key_free(svr_opts.hostkey);
        svr_opts.hostkey = NULL;
diff -r d392f5a61a48 -r 44f6add4e5d0 svr-session.c
--- a/svr-session.c     Thu Feb 23 21:46:02 2012 +0800
+++ b/svr-session.c     Sun Apr 08 01:50:52 2012 -0400
@@ -84,7 +84,7 @@
 
        /* Initialise server specific parts of the session */
        svr_ses.childpipe = childpipe;
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        svr_ses.server_pid = getpid();
 #endif
        svr_authinitialise();
@@ -157,7 +157,7 @@
 
        _dropbear_log(LOG_INFO, fmtbuf, param);
 
-#ifdef __uClinux__
+#ifndef HAVE_FORK
        /* only the main server process should cleanup - we don't want
         * forked children doing that */
        if (svr_ses.server_pid == getpid())

Reply via email to