Better pid handling.
[rsync/rsync.git] / options.c
index b2ffa07..00a22fc 100644 (file)
--- a/options.c
+++ b/options.c
@@ -124,6 +124,7 @@ int quiet = 0;
 int always_checksum = 0;
 int list_only = 0;
 
+#define MAX_BATCH_PREFIX_LEN 256       /* Must be less than MAXPATHLEN-13 */
 char *batch_prefix = NULL;
 
 static int modify_window_set;
@@ -245,12 +246,12 @@ void usage(enum logcode F)
   rprintf(F,"     --delete                delete files that don't exist on the sending side\n");
   rprintf(F,"     --delete-excluded       also delete excluded files on the receiving side\n");
   rprintf(F,"     --delete-after          receiver deletes after transferring, not before\n");
-  rprintf(F,"     --ignore-errors         delete even if there are IO errors\n");
+  rprintf(F,"     --ignore-errors         delete even if there are I/O errors\n");
   rprintf(F,"     --max-delete=NUM        don't delete more than NUM files\n");
   rprintf(F,"     --partial               keep partially transferred files\n");
   rprintf(F,"     --force                 force deletion of directories even if not empty\n");
   rprintf(F,"     --numeric-ids           don't map uid/gid values by user/group name\n");
-  rprintf(F,"     --timeout=TIME          set IO timeout in seconds\n");
+  rprintf(F,"     --timeout=TIME          set I/O timeout in seconds\n");
   rprintf(F," -I, --ignore-times          turn off mod time & file size quick check\n");
   rprintf(F,"     --size-only             ignore mod time for quick check (use size)\n");
   rprintf(F,"     --modify-window=NUM     compare mod times with reduced accuracy\n");
@@ -267,12 +268,12 @@ void usage(enum logcode F)
   rprintf(F,"     --files-from=FILE       read FILE for list of source-file names\n");
   rprintf(F," -0  --from0                 all *-from file lists are delimited by nulls\n");
   rprintf(F,"     --version               print version number\n");
-  rprintf(F,"     --daemon                run as a rsync daemon\n");
+  rprintf(F,"     --daemon                run as an rsync daemon\n");
   rprintf(F,"     --no-detach             do not detach from the parent\n");
   rprintf(F,"     --address=ADDRESS       bind to the specified address\n");
   rprintf(F,"     --config=FILE           specify alternate rsyncd.conf file\n");
   rprintf(F,"     --port=PORT             specify alternate rsyncd port number\n");
-  rprintf(F,"     --blocking-io           use blocking IO for the remote shell\n");
+  rprintf(F,"     --blocking-io           use blocking I/O for the remote shell\n");
   rprintf(F,"     --no-blocking-io        turn off --blocking-io\n");
   rprintf(F,"     --stats                 give some file transfer stats\n");
   rprintf(F,"     --progress              show progress during transfer\n");
@@ -602,6 +603,17 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                        "write-batch and read-batch can not be used together\n");
                exit_cleanup(RERR_SYNTAX);
        }
+       if (batch_prefix && strlen(batch_prefix) > MAX_BATCH_PREFIX_LEN) {
+               rprintf(FERROR,
+                       "the batch-file prefix must be %d characters or less.\n",
+                       MAX_BATCH_PREFIX_LEN);
+               exit_cleanup(RERR_SYNTAX);
+       }
+
+       if (tmpdir && strlen(tmpdir) >= MAXPATHLEN - 10) {
+               rprintf(FERROR, "the --temp-dir path is WAY too long.\n");
+               exit_cleanup(RERR_SYNTAX);
+       }
 
        if (do_compression && (write_batch || read_batch)) {
                rprintf(FERROR,
@@ -707,7 +719,7 @@ void server_options(char **args,int *argc)
        static char mwindow[30];
        static char bw[50];
        /* Leave room for ``--(write|read)-batch='' */
-       static char fext[MAXPATHLEN + 15];
+       static char fext[MAX_BATCH_PREFIX_LEN + 15];
 
        int i, x;