Rename configure.in to configure.ac, the current autoconf standard.
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index ebfadd2..6641291 100644 (file)
--- a/main.c
+++ b/main.c
@@ -94,7 +94,8 @@ extern filter_rule_list daemon_filter_list;
 
 uid_t our_uid;
 gid_t our_gid;
-int am_generator = 0;
+int am_receiver = 0;  /* Only set to 1 after the receiver/generator fork. */
+int am_generator = 0; /* Only set to 1 after the receiver/generator fork. */
 int local_server = 0;
 int daemon_over_rsh = 0;
 mode_t orig_umask = 0;
@@ -395,7 +396,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                    int *f_in_p, int *f_out_p)
 {
        int i, argc = 0;
-       char *args[MAX_ARGS];
+       char *args[MAX_ARGS], *need_to_free = NULL;
        pid_t pid;
        int dash_l_set = 0;
 
@@ -406,7 +407,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        cmd = rsh_env;
                if (!cmd)
                        cmd = RSYNC_RSH;
-               cmd = strdup(cmd); /*MEMORY LEAK*/
+               cmd = need_to_free = strdup(cmd);
                if (!cmd)
                        goto oom;
 
@@ -538,6 +539,9 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        send_protected_args(*f_out_p, args);
        }
 
+       if (need_to_free)
+               free(need_to_free);
+
        return pid;
 
   oom:
@@ -848,6 +852,7 @@ static int do_recv(int f_in, int f_out, char *local_name)
        }
 
        if (pid == 0) {
+               am_receiver = 1;
                send_msgs_to_gen = am_server;
 
                close(error_pipe[0]);
@@ -1516,9 +1521,10 @@ int main(int argc,char *argv[])
                exit_cleanup(RERR_SYNTAX);
        }
 
-       /* we set a 0 umask so that correct file permissions can be
-        * carried across */
-       orig_umask = umask(0);
+       /* Get the umask for use in permission calculations.  We no longer set
+        * it to zero; that is ugly and pointless now that all the callers that
+        * relied on it have been reeducated to work with default ACLs. */
+       umask(orig_umask = umask(0));
 
 #if defined CONFIG_LOCALE && defined HAVE_SETLOCALE
        setlocale(LC_CTYPE, "");