X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/c6e7fcb42bc87660ece8d4dc9a1b10bd1fb7b0c5..8bf737494f17ca384b30db13b4bc31a5158f3646:/main.c?ds=sidebyside diff --git a/main.c b/main.c index 038a2d2c..3cbf5f8a 100644 --- a/main.c +++ b/main.c @@ -47,6 +47,8 @@ int one_file_system=0; int remote_version=0; int sparse_files=0; int do_compression=0; +int am_root=0; +int orig_umask=0; extern int csum_length; @@ -93,7 +95,6 @@ static void server_options(char **args,int *argc) int ac = *argc; static char argstr[50]; static char bsize[30]; - static char slength[30]; int i, x; args[ac++] = "--server"; @@ -137,6 +138,8 @@ static void server_options(char **args,int *argc) argstr[x++] = 'x'; if (sparse_files) argstr[x++] = 'S'; + if (do_compression) + argstr[x++] = 'z'; argstr[x] = 0; if (x != 1) args[ac++] = argstr; @@ -146,11 +149,6 @@ static void server_options(char **args,int *argc) args[ac++] = bsize; } - if (csum_length != SUM_LENGTH) { - sprintf(slength,"--csum-length=%d",csum_length); - args[ac++] = slength; - } - if (delete_mode) args[ac++] = "--delete"; @@ -178,11 +176,20 @@ int do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int *f_out) args[argc++] = tok; } +#if HAVE_REMSH + /* remsh (on HPUX) takes the arguments the other way around */ + args[argc++] = machine; + if (user) { + args[argc++] = "-l"; + args[argc++] = user; + } +#else if (user) { args[argc++] = "-l"; args[argc++] = user; } args[argc++] = machine; +#endif } args[argc++] = rsync_path; @@ -194,7 +201,10 @@ int do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int *f_out) p = strrchr(dir,'/'); if (p) { *p = 0; - args[argc++] = dir; + if (!dir[0]) + args[argc++] = "/"; + else + args[argc++] = dir; p++; } else { args[argc++] = "."; @@ -248,7 +258,7 @@ static char *get_local_name(struct file_list *flist,char *name) if (!name) return NULL; - if (mkdir(name,0777) != 0) { + if (mkdir(name,0777 & ~orig_umask) != 0) { fprintf(FERROR,"mkdir %s : %s\n",name,strerror(errno)); exit_cleanup(1); } else { @@ -284,6 +294,8 @@ void do_server_sender(int argc,char *argv[]) if (strcmp(dir,".")) { int l = strlen(dir); + if (strcmp(dir,"/") == 0) + l = 0; for (i=0;i 3) fprintf(FERROR,"file list sent\n"); send_files(flist,f_out,f_in);