public
Description: Git mirror of the MacPorts svn repo
Homepage: http://www.macports.org
Clone URL: git://github.com/kballard/macports.git
net/rsync: Updated to 3.0.4.


git-svn-id: http://svn.macports.org/repository/macports/trunk@39822 
d073be05-634f-4543-b044-5fe20cf6d1d6
Simon Ruderich (author)
Sat Sep 06 15:37:30 -0700 2008
commit  63b2de0e8c4ec7667ed5a19d17818d0bdded351d
tree    2b3a72c52f4b4b79c5124e89265fd6aadd920d5d
parent  53c44e60f069d4201aecc304807ab6dc819e2de1
...
3
4
5
6
7
 
8
9
10
...
14
15
16
17
18
19
 
 
20
21
22
23
24
25
26
27
28
 
 
 
29
30
31
...
3
4
5
 
 
6
7
8
9
...
13
14
15
 
 
 
16
17
18
19
20
21
22
23
 
 
 
24
25
26
27
28
29
0
@@ -3,8 +3,7 @@
0
 PortSystem 1.0
0
 
0
 name rsync
0
-version 3.0.3
0
-revision 2
0
+version 3.0.4
0
 categories net
0
 platforms darwin freebsd sunos
0
 maintainers simon openmaintainer
0
@@ -14,18 +13,17 @@ long_description rsync is an open source utility that provides fast \
0
                     under the GNU General Public License and is currently \
0
                     being maintained by Wayne Davison. \
0
                     \
0
- Rsync version 3.0.3 has been released. This is a \
0
- security release that fixes a potential buffer-overflow \
0
- issue. Related pages: \
0
+ Rsync version 3.0.4 has been released. This is a \
0
+ bug-fix release. Related pages: \
0
                     http://rsync.samba.org/ftp/rsync/rsync-${version}-NEWS
0
 
0
 homepage http://samba.org/rsync/
0
 master_sites http://rsync.samba.org/ftp/rsync/ \
0
                     http://rsync.samba.org/ftp/rsync/src/
0
 checksums ${distname}${extract.suffix} \
0
- md5 16d41aab9ece435198af222c5415a304 \
0
- sha1 c12668eb888e386511299616f6972bec300ed346 \
0
- rmd160 9997a18cb5577bb127b26bcc55e50382b6e9f68d
0
+ md5 2b2d159c9bd1b5f8adfd8b13da3a1f3f \
0
+ sha1 e89ed8d84fe0b6740208ba8183ee1dbc220ba5e5 \
0
+ rmd160 5e0082c7751205e16431471bdc5f48f87ae26b1a
0
 distname rsync-${version}
0
 
0
 depends_lib port:popt port:libiconv
...
11
12
13
14
 
15
16
17
...
19
20
21
22
 
23
24
25
...
27
28
29
30
31
 
 
32
33
34
...
40
41
42
43
 
44
45
46
...
48
49
50
51
52
53
 
 
 
54
55
56
57
58
59
60
 
61
62
63
...
71
72
73
74
 
75
76
77
...
80
81
82
83
 
84
85
86
...
89
90
91
92
 
93
94
95
...
109
110
111
112
 
113
114
115
...
118
119
120
121
 
122
123
124
...
136
137
138
 
139
140
141
 
142
143
144
...
146
147
148
149
 
150
151
152
...
160
161
162
163
 
164
165
166
...
173
174
175
176
 
177
178
179
...
181
182
183
184
 
185
186
187
...
200
201
202
203
 
204
205
206
...
243
244
245
246
 
247
248
249
...
264
265
266
267
 
268
269
270
...
272
273
274
275
 
276
277
278
...
282
283
284
285
 
286
287
288
...
294
295
296
297
 
298
299
300
...
309
310
311
312
 
313
314
315
...
317
318
319
320
321
 
 
322
323
324
...
355
356
357
358
 
359
360
361
...
363
364
365
366
 
367
368
369
...
371
372
373
374
 
375
376
377
...
382
383
384
385
 
386
387
388
...
390
391
392
393
 
394
395
396
...
400
401
402
403
 
404
405
406
...
409
410
411
412
 
413
414
415
...
613
614
615
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
11
12
13
 
14
15
16
17
...
19
20
21
 
22
23
24
25
...
27
28
29
 
 
30
31
32
33
34
...
40
41
42
 
43
44
45
46
...
48
49
50
 
 
 
51
52
53
54
55
56
57
58
59
 
60
61
62
63
...
71
72
73
 
74
75
76
77
...
80
81
82
 
83
84
85
86
...
89
90
91
 
92
93
94
95
...
109
110
111
 
112
113
114
115
...
118
119
120
 
121
122
123
124
...
136
137
138
139
140
 
 
141
142
143
144
...
146
147
148
 
149
150
151
152
...
160
161
162
 
163
164
165
166
...
173
174
175
 
176
177
178
179
...
181
182
183
 
184
185
186
187
...
200
201
202
 
203
204
205
206
...
243
244
245
 
246
247
248
249
...
264
265
266
 
267
268
269
270
...
272
273
274
 
275
276
277
278
...
282
283
284
 
285
286
287
288
...
294
295
296
 
297
298
299
300
...
309
310
311
 
312
313
314
315
...
317
318
319
 
 
320
321
322
323
324
...
355
356
357
 
358
359
360
361
...
363
364
365
 
366
367
368
369
...
371
372
373
 
374
375
376
377
...
382
383
384
 
385
386
387
388
...
390
391
392
 
393
394
395
396
...
400
401
402
 
403
404
405
406
...
409
410
411
 
412
413
414
415
...
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
0
@@ -11,7 +11,7 @@ To use this patch, run these commands for a successful build:
0
 diff --git a/compat.c b/compat.c
0
 --- a/compat.c
0
 +++ b/compat.c
0
-@@ -44,6 +44,7 @@ extern int force_change;
0
+@@ -45,6 +45,7 @@ extern int force_change;
0
  extern int protect_args;
0
  extern int preserve_uid;
0
  extern int preserve_gid;
0
@@ -19,7 +19,7 @@ diff --git a/compat.c b/compat.c
0
  extern int preserve_fileflags;
0
  extern int preserve_acls;
0
  extern int preserve_xattrs;
0
-@@ -61,7 +62,7 @@ extern iconv_t ic_send, ic_recv;
0
+@@ -63,7 +64,7 @@ extern char *iconv_opt;
0
  #endif
0
  
0
  /* These index values are for the file-list's extra-attribute array. */
0
@@ -27,8 +27,8 @@ diff --git a/compat.c b/compat.c
0
 +int uid_ndx, gid_ndx, crtimes_ndx, fileflags_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
0
  
0
  int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
0
-
0
-@@ -135,6 +136,8 @@ void setup_protocol(int f_out,int f_in)
0
+ int sender_symlink_iconv = 0; /* sender should convert symlink content */
0
+@@ -139,6 +140,8 @@ void setup_protocol(int f_out,int f_in)
0
      uid_ndx = ++file_extra_cnt;
0
    if (preserve_gid)
0
      gid_ndx = ++file_extra_cnt;
0
@@ -40,7 +40,7 @@ diff --git a/compat.c b/compat.c
0
 diff --git a/flist.c b/flist.c
0
 --- a/flist.c
0
 +++ b/flist.c
0
-@@ -54,6 +54,7 @@ extern int preserve_fileflags;
0
+@@ -56,6 +56,7 @@ extern int preserve_fileflags;
0
  extern int uid_ndx;
0
  extern int gid_ndx;
0
  extern int eol_nulls;
0
@@ -48,16 +48,16 @@ diff --git a/flist.c b/flist.c
0
  extern int relative_paths;
0
  extern int implied_dirs;
0
  extern int file_extra_cnt;
0
-@@ -389,7 +390,7 @@ int change_pathname(struct file_struct *file, const char *dir, int dirlen)
0
-
0
- static void send_file_entry(int f, const char *fname, struct file_struct *file, int ndx, int first_ndx)
0
+@@ -394,7 +395,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+ #endif
0
+ int ndx, int first_ndx)
0
  {
0
 -  static time_t modtime;
0
 +  static time_t modtime, crtime;
0
    static mode_t mode;
0
  #ifdef SUPPORT_FILEFLAGS
0
    static uint32 fileflags;
0
-@@ -474,6 +475,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -479,6 +480,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
      xflags |= XMIT_SAME_TIME;
0
    else
0
      modtime = file->modtime;
0
@@ -71,7 +71,7 @@ diff --git a/flist.c b/flist.c
0
  
0
  #ifdef SUPPORT_HARD_LINKS
0
    if (tmp_dev != 0) {
0
-@@ -543,6 +551,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -548,6 +556,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
      else
0
        write_int(f, modtime);
0
    }
0
@@ -80,7 +80,7 @@ diff --git a/flist.c b/flist.c
0
    if (!(xflags & XMIT_SAME_MODE))
0
      write_int(f, to_wire_mode(mode));
0
  #ifdef SUPPORT_FILEFLAGS
0
-@@ -635,7 +645,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -638,7 +648,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
  static struct file_struct *recv_file_entry(struct file_list *flist,
0
             int xflags, int f)
0
  {
0
@@ -89,7 +89,7 @@ diff --git a/flist.c b/flist.c
0
    static mode_t mode;
0
  #ifdef SUPPORT_FILEFLAGS
0
    static uint32 fileflags;
0
-@@ -770,6 +780,19 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
+@@ -773,6 +783,19 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
      } else
0
        modtime = read_int(f);
0
    }
0
@@ -109,7 +109,7 @@ diff --git a/flist.c b/flist.c
0
    if (!(xflags & XMIT_SAME_MODE))
0
      mode = from_wire_mode(read_int(f));
0
  
0
-@@ -922,6 +945,8 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
+@@ -932,6 +955,8 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
      F_GROUP(file) = gid;
0
      file->flags |= gid_flags;
0
    }
0
@@ -118,7 +118,7 @@ diff --git a/flist.c b/flist.c
0
    if (unsort_ndx)
0
      F_NDX(file) = flist->used + flist->ndx_start;
0
  
0
-@@ -1272,6 +1297,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
0
+@@ -1308,6 +1333,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
0
      F_OWNER(file) = st.st_uid;
0
    if (gid_ndx) /* Check gid_ndx instead of preserve_gid for del support */
0
      F_GROUP(file) = st.st_gid;
0
@@ -136,9 +136,9 @@ diff --git a/generator.c b/generator.c
0
  #include "rsync.h"
0
 +#include "ifuncs.h"
0
  
0
+ extern int verbose;
0
  extern int dry_run;
0
- extern int do_xfers;
0
-@@ -38,6 +39,7 @@ extern int preserve_xattrs;
0
+@@ -40,6 +41,7 @@ extern int preserve_xattrs;
0
  extern int preserve_links;
0
  extern int preserve_devices;
0
  extern int preserve_specials;
0
@@ -146,7 +146,7 @@ diff --git a/generator.c b/generator.c
0
  extern int preserve_hard_links;
0
  extern int preserve_executability;
0
  extern int preserve_fileflags;
0
-@@ -618,6 +620,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
0
+@@ -620,6 +622,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
0
    if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file))
0
      return 0;
0
  
0
@@ -160,7 +160,7 @@ diff --git a/generator.c b/generator.c
0
  #ifdef SUPPORT_ACLS
0
    if (preserve_acls && !S_ISLNK(file->mode)) {
0
      if (!ACL_READY(*sxp))
0
-@@ -661,6 +670,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
0
+@@ -663,6 +672,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
0
       : iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !(iflags & ITEM_MATCHED)
0
       && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
0
        iflags |= ITEM_REPORT_TIME;
0
@@ -173,7 +173,7 @@ diff --git a/generator.c b/generator.c
0
  #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST
0
      if (S_ISLNK(file->mode)) {
0
        ;
0
-@@ -1221,6 +1236,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
0
+@@ -1223,6 +1238,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
0
  static void list_file_entry(struct file_struct *f)
0
  {
0
    char permbuf[PERMSTRING_SIZE];
0
@@ -181,7 +181,7 @@ diff --git a/generator.c b/generator.c
0
    double len;
0
  
0
    if (!F_IS_ACTIVE(f)) {
0
-@@ -1235,14 +1251,16 @@ static void list_file_entry(struct file_struct *f)
0
+@@ -1237,14 +1253,16 @@ static void list_file_entry(struct file_struct *f)
0
  
0
  #ifdef SUPPORT_LINKS
0
    if (preserve_links && S_ISLNK(f->mode)) {
0
@@ -200,7 +200,7 @@ diff --git a/generator.c b/generator.c
0
        f_name(f, NULL));
0
    }
0
  }
0
-@@ -1334,6 +1352,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
0
+@@ -1336,6 +1354,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
0
        return;
0
      }
0
    }
0
@@ -243,7 +243,7 @@ diff --git a/ifuncs.h b/ifuncs.h
0
 diff --git a/log.c b/log.c
0
 --- a/log.c
0
 +++ b/log.c
0
-@@ -664,7 +664,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
0
+@@ -663,7 +663,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
0
        c[8] = !(iflags & ITEM_REPORT_FFLAGS) ? '.' : 'f';
0
        c[9] = !(iflags & ITEM_REPORT_ACL) ? '.' : 'a';
0
        c[10] = !(iflags & ITEM_REPORT_XATTR) ? '.' : 'x';
0
@@ -264,7 +264,7 @@ diff --git a/options.c b/options.c
0
  int update_only = 0;
0
  int cvs_exclude = 0;
0
  int dry_run = 0;
0
-@@ -698,6 +699,7 @@ void usage(enum logcode F)
0
+@@ -362,6 +363,7 @@ void usage(enum logcode F)
0
    rprintf(F," -D same as --devices --specials\n");
0
    rprintf(F," -t, --times preserve modification times\n");
0
    rprintf(F," -O, --omit-dir-times omit directories from --times\n");
0
@@ -272,7 +272,7 @@ diff --git a/options.c b/options.c
0
    rprintf(F," --super receiver attempts super-user activities\n");
0
  #ifdef SUPPORT_XATTRS
0
    rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
0
-@@ -847,6 +849,9 @@ static struct poptOption long_options[] = {
0
+@@ -508,6 +510,9 @@ static struct poptOption long_options[] = {
0
    {"times", 't', POPT_ARG_VAL, &preserve_times, 2, 0, 0 },
0
    {"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
0
    {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
0
@@ -282,7 +282,7 @@ diff --git a/options.c b/options.c
0
    {"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 },
0
    {"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
0
    {"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
0
-@@ -2180,6 +2185,8 @@ void server_options(char **args, int *argc_p)
0
+@@ -1799,6 +1804,8 @@ void server_options(char **args, int *argc_p)
0
      argstr[x++] = 'D';
0
    if (preserve_times)
0
      argstr[x++] = 't';
0
@@ -294,7 +294,7 @@ diff --git a/options.c b/options.c
0
 diff --git a/rsync.c b/rsync.c
0
 --- a/rsync.c
0
 +++ b/rsync.c
0
-@@ -471,6 +471,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
0
+@@ -472,6 +472,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
0
      else
0
        file->flags |= FLAG_TIME_FAILED;
0
    }
0
@@ -309,7 +309,7 @@ diff --git a/rsync.c b/rsync.c
0
  
0
    change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file);
0
    change_gid = gid_ndx && !(file->flags & FLAG_SKIP_GROUP)
0
-@@ -618,7 +626,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
0
+@@ -619,7 +627,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
0
    /* Change permissions before putting the file into place. */
0
    set_file_attrs(fnametmp, file, NULL, fnamecmp,
0
       ATTRS_DELAY_IMMUTABLE
0
@@ -317,8 +317,8 @@ diff --git a/rsync.c b/rsync.c
0
 +     | (ok_to_set_time ? 0 : ATTRS_SKIP_MTIME | ATTRS_SKIP_CRTIME));
0
  
0
    /* move tmp file over real file */
0
- if (DEBUG_GTE(RECV, 1))
0
-@@ -649,7 +657,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
0
+ if (verbose > 2)
0
+@@ -650,7 +658,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
0
  
0
    do_set_file_attrs:
0
    set_file_attrs(fnametmp, file, NULL, fnamecmp,
0
@@ -355,7 +355,7 @@ diff --git a/rsync.h b/rsync.h
0
  #define ITEM_REPORT_CHANGE (1<<1)
0
  #define ITEM_REPORT_SIZE (1<<2) /* regular files only */
0
  #define ITEM_REPORT_TIMEFAIL (1<<2) /* symlinks only */
0
-@@ -655,6 +657,7 @@ extern int file_extra_cnt;
0
+@@ -657,6 +659,7 @@ extern int file_extra_cnt;
0
  extern int inc_recurse;
0
  extern int uid_ndx;
0
  extern int gid_ndx;
0
@@ -363,7 +363,7 @@ diff --git a/rsync.h b/rsync.h
0
  extern int fileflags_ndx;
0
  extern int acls_ndx;
0
  extern int xattrs_ndx;
0
-@@ -662,6 +665,7 @@ extern int xattrs_ndx;
0
+@@ -664,6 +667,7 @@ extern int xattrs_ndx;
0
  #define FILE_STRUCT_LEN (offsetof(struct file_struct, basename))
0
  #define EXTRA_LEN (sizeof (union file_extras))
0
  #define PTR_EXTRA_CNT ((sizeof (char *) + EXTRA_LEN - 1) / EXTRA_LEN)
0
@@ -371,7 +371,7 @@ diff --git a/rsync.h b/rsync.h
0
  #define DEV_EXTRA_CNT 2
0
  #define DIRNODE_EXTRA_CNT 3
0
  #define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN)
0
-@@ -920,6 +924,7 @@ typedef struct {
0
+@@ -922,6 +926,7 @@ typedef struct {
0
  
0
  typedef struct {
0
      STRUCT_STAT st;
0
@@ -382,7 +382,7 @@ diff --git a/rsync.h b/rsync.h
0
 diff --git a/rsync.yo b/rsync.yo
0
 --- a/rsync.yo
0
 +++ b/rsync.yo
0
-@@ -352,6 +352,7 @@ to the detailed description below for a complete description. verb(
0
+@@ -350,6 +350,7 @@ to the detailed description below for a complete description. verb(
0
   -D same as --devices --specials
0
   -t, --times preserve modification times
0
   -O, --omit-dir-times omit directories from --times
0
@@ -390,7 +390,7 @@ diff --git a/rsync.yo b/rsync.yo
0
       --super receiver attempts super-user activities
0
       --fake-super store/recover privileged attrs using xattrs
0
   -S, --sparse handle sparse files efficiently
0
-@@ -1069,6 +1070,9 @@ it is preserving modification times (see bf(--times)). If NFS is sharing
0
+@@ -1028,6 +1029,9 @@ it is preserving modification times (see bf(--times)). If NFS is sharing
0
  the directories on the receiving side, it is a good idea to use bf(-O).
0
  This option is inferred if you use bf(--backup) without bf(--backup-dir).
0
  
0
@@ -400,7 +400,7 @@ diff --git a/rsync.yo b/rsync.yo
0
  dit(bf(--super)) This tells the receiving side to attempt super-user
0
  activities even if the receiving rsync wasn't run by the super-user. These
0
  activities include: preserving users via the bf(--owner) option, preserving
0
-@@ -1758,7 +1762,7 @@ with older versions of rsync, but that also turns on the output of other
0
+@@ -1692,7 +1696,7 @@ with older versions of rsync, but that also turns on the output of other
0
  verbose messages).
0
  
0
  The "%i" escape has a cryptic output that is 11 letters long. The general
0
@@ -409,7 +409,7 @@ diff --git a/rsync.yo b/rsync.yo
0
  type of update being done, bf(X) is replaced by the file-type, and the
0
  other letters represent attributes that may be output if they are being
0
  modified.
0
-@@ -1817,6 +1821,8 @@ quote(itemization(
0
+@@ -1751,6 +1755,8 @@ quote(itemization(
0
    it() The bf(f) means that the fileflags information changed.
0
    it() The bf(a) means that the ACL information changed.
0
    it() The bf(x) means that the extended attribute information changed.
0
@@ -613,3 +613,56 @@ diff --git a/tls.c b/tls.c
0
    fprintf(F," -l, --link-times display the time on a symlink\n");
0
    fprintf(F," -L, --link-owner display the owner+group on a symlink\n");
0
  #ifdef SUPPORT_XATTRS
0
+diff -up a/proto.h b/proto.h
0
+--- a/proto.h
0
++++ b/proto.h
0
+@@ -312,6 +312,8 @@ int do_stat(const char *fname, STRUCT_ST
0
+ int do_lstat(const char *fname, STRUCT_STAT *st);
0
+ int do_fstat(int fd, STRUCT_STAT *st);
0
+ OFF_T do_lseek(int fd, OFF_T offset, int whence);
0
++time_t get_create_time(const char *path);
0
++int set_create_time(const char *path, time_t crtime);
0
+ void set_compression(const char *fname);
0
+ void send_token(int f, int32 token, struct map_struct *buf, OFF_T offset,
0
+ int32 n, int32 toklen);
0
+diff -up a/rsync.1 b/rsync.1
0
+--- a/rsync.1
0
++++ b/rsync.1
0
+@@ -425,6 +425,7 @@ to the detailed description below for a
0
+ \-D same as \-\-devices \-\-specials
0
+ \-t, \-\-times preserve modification times
0
+ \-O, \-\-omit\-dir\-times omit directories from \-\-times
0
++ \-N, \-\-crtimes preserve create times (newness)
0
+ \-\-super receiver attempts super-user activities
0
+ \-\-fake\-super store/recover privileged attrs using xattrs
0
+ \-S, \-\-sparse handle sparse files efficiently
0
+@@ -1183,6 +1184,10 @@ it is preserving modification times (see
0
+ the directories on the receiving side, it is a good idea to use \fB\-O\fP.
0
+ This option is inferred if you use \fB\-\-backup\fP without \fB\-\-backup\-dir\fP.
0
+ .IP
0
++.IP "\fB\-N, \-\-crtimes\fP"
0
++This tells rsync to set the create times (newness) of
0
++the destination files to the same value as the source files.
0
++.IP
0
+ .IP "\fB\-\-super\fP"
0
+ This tells the receiving side to attempt super-user
0
+ activities even if the receiving rsync wasn't run by the super-user. These
0
+@@ -1938,7 +1943,7 @@ with older versions of rsync, but that a
0
+ verbose messages).
0
+ .IP
0
+ The \(lq%i\(rq escape has a cryptic output that is 11 letters long. The general
0
+-format is like the string \fBYXcstpogfax\fP, where \fBY\fP is replaced by the
0
++format is like the string \fBYXcstpogfaxn\fP, where \fBY\fP is replaced by the
0
+ type of update being done, \fBX\fP is replaced by the file-type, and the
0
+ other letters represent attributes that may be output if they are being
0
+ modified.
0
+@@ -2013,6 +2018,9 @@ The \fBf\fP means that the fileflags inf
0
+ The \fBa\fP means that the ACL information changed.
0
+ .IP o
0
+ The \fBx\fP means that the extended attribute information changed.
0
++.IP o
0
++A \fBn\fP means the create time (newness) is different and is being
0
++updated to the sender's value (requires \fB\-\-crtimes\fP).
0
+ .RE
0
+
0
+ .IP
...
44
45
46
47
 
48
49
50
...
52
53
54
55
56
 
 
57
58
59
...
85
86
87
88
 
89
90
91
...
95
96
97
98
 
99
100
101
...
110
111
112
113
 
114
115
116
...
121
122
123
124
 
125
126
127
...
131
132
133
134
 
135
136
137
...
142
143
144
145
 
146
147
148
...
153
154
155
156
 
157
158
159
...
164
165
166
167
 
168
169
170
...
303
304
305
306
307
308
 
 
 
309
310
311
312
 
313
314
315
...
416
417
418
419
 
420
421
422
...
426
427
428
429
 
430
431
432
...
590
591
592
593
 
594
595
596
...
619
620
621
622
 
623
624
625
...
627
628
629
630
 
631
632
633
...
711
712
713
714
 
715
716
717
...
728
729
730
731
 
732
733
734
...
737
738
739
740
 
741
742
743
...
1060
1061
1062
1063
 
1064
1065
1066
...
1072
1073
1074
1075
 
1076
1077
1078
...
1224
1225
1226
1227
 
1228
1229
1230
...
1242
1243
1244
1245
 
1246
1247
1248
...
1251
1252
1253
1254
 
1255
1256
1257
...
44
45
46
 
47
48
49
50
...
52
53
54
 
 
55
56
57
58
59
...
85
86
87
 
88
89
90
91
...
95
96
97
 
98
99
100
101
...
110
111
112
 
113
114
115
116
...
121
122
123
 
124
125
126
127
...
131
132
133
 
134
135
136
137
...
142
143
144
 
145
146
147
148
...
153
154
155
 
156
157
158
159
...
164
165
166
 
167
168
169
170
...
303
304
305
 
 
 
306
307
308
309
310
311
 
312
313
314
315
...
416
417
418
 
419
420
421
422
...
426
427
428
 
429
430
431
432
...
590
591
592
 
593
594
595
596
...
619
620
621
 
622
623
624
625
...
627
628
629
 
630
631
632
633
...
711
712
713
 
714
715
716
717
...
728
729
730
 
731
732
733
734
...
737
738
739
 
740
741
742
743
...
1060
1061
1062
 
1063
1064
1065
1066
...
1072
1073
1074
 
1075
1076
1077
1078
...
1224
1225
1226
 
1227
1228
1229
1230
...
1242
1243
1244
 
1245
1246
1247
1248
...
1251
1252
1253
 
1254
1255
1256
1257
0
@@ -44,7 +44,7 @@ diff --git a/compat.c b/compat.c
0
  extern int preserve_acls;
0
  extern int preserve_xattrs;
0
  extern int need_messages_from_generator;
0
-@@ -60,7 +62,7 @@ extern iconv_t ic_send, ic_recv;
0
+@@ -61,7 +63,7 @@ extern char *iconv_opt;
0
  #endif
0
  
0
  /* These index values are for the file-list's extra-attribute array. */
0
@@ -52,8 +52,8 @@ diff --git a/compat.c b/compat.c
0
 +int uid_ndx, gid_ndx, fileflags_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
0
  
0
  int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
0
-
0
-@@ -134,6 +136,8 @@ void setup_protocol(int f_out,int f_in)
0
+ int sender_symlink_iconv = 0; /* sender should convert symlink content */
0
+@@ -137,6 +139,8 @@ void setup_protocol(int f_out,int f_in)
0
      uid_ndx = ++file_extra_cnt;
0
    if (preserve_gid)
0
      gid_ndx = ++file_extra_cnt;
0
@@ -85,7 +85,7 @@ diff --git a/flist.c b/flist.c
0
  extern int uid_ndx;
0
  extern int gid_ndx;
0
  extern int eol_nulls;
0
-@@ -390,6 +391,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -395,6 +396,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
  {
0
    static time_t modtime;
0
    static mode_t mode;
0
@@ -95,7 +95,7 @@ diff --git a/flist.c b/flist.c
0
  #ifdef SUPPORT_HARD_LINKS
0
    static int64 dev;
0
  #endif
0
-@@ -419,6 +423,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -424,6 +428,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
      xflags |= XMIT_SAME_MODE;
0
    else
0
      mode = file->mode;
0
@@ -110,7 +110,7 @@ diff --git a/flist.c b/flist.c
0
  
0
    if ((preserve_devices && IS_DEVICE(mode))
0
     || (preserve_specials && IS_SPECIAL(mode))) {
0
-@@ -533,6 +545,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
+@@ -538,6 +550,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
0
    }
0
    if (!(xflags & XMIT_SAME_MODE))
0
      write_int(f, to_wire_mode(mode));
0
@@ -121,7 +121,7 @@ diff --git a/flist.c b/flist.c
0
    if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
0
      if (protocol_version < 30)
0
        write_int(f, uid);
0
-@@ -621,6 +637,9 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
+@@ -624,6 +640,9 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
  {
0
    static int64 modtime;
0
    static mode_t mode;
0
@@ -131,7 +131,7 @@ diff --git a/flist.c b/flist.c
0
  #ifdef SUPPORT_HARD_LINKS
0
    static int64 dev;
0
  #endif
0
-@@ -756,6 +775,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
+@@ -759,6 +778,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
  
0
    if (chmod_modes && !S_ISLNK(mode))
0
      mode = tweak_mode(mode, chmod_modes);
0
@@ -142,7 +142,7 @@ diff --git a/flist.c b/flist.c
0
  
0
    if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
0
      if (protocol_version < 30)
0
-@@ -889,6 +912,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
+@@ -899,6 +922,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
0
    }
0
  #endif
0
    file->mode = mode;
0
@@ -153,7 +153,7 @@ diff --git a/flist.c b/flist.c
0
    if (preserve_uid)
0
      F_OWNER(file) = uid;
0
    if (preserve_gid) {
0
-@@ -1237,6 +1264,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
0
+@@ -1273,6 +1300,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
0
    }
0
  #endif
0
    file->mode = st.st_mode;
0
@@ -164,7 +164,7 @@ diff --git a/flist.c b/flist.c
0
    if (uid_ndx) /* Check uid_ndx instead of preserve_uid for del support */
0
      F_OWNER(file) = st.st_uid;
0
    if (gid_ndx) /* Check gid_ndx instead of preserve_gid for del support */
0
-@@ -1355,6 +1386,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
0
+@@ -1427,6 +1458,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
0
  #endif
0
  #ifdef SUPPORT_XATTRS
0
      if (preserve_xattrs) {
0
@@ -303,13 +303,13 @@ diff --git a/generator.c b/generator.c
0
 +    if (force_change && F_FFLAGS(file) & force_change)
0
 +      undo_make_mutable(fname, F_FFLAGS(file));
0
 +#endif
0
- if (allowed_lull && !(counter % lull_mod))
0
- maybe_send_keepalive();
0
- else if (!(counter & 0xFF))
0
+ if (counter >= loopchk_limit) {
0
+ if (allowed_lull)
0
+ maybe_send_keepalive();
0
 diff --git a/log.c b/log.c
0
 --- a/log.c
0
 +++ b/log.c
0
-@@ -656,7 +656,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
0
+@@ -660,7 +660,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
0
        c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
0
        c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
0
        c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
0
@@ -416,7 +416,7 @@ diff --git a/options.c b/options.c
0
    {"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 },
0
    {"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 },
0
    {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 },
0
-@@ -1852,6 +1878,9 @@ void server_options(char **args, int *argc_p)
0
+@@ -1866,6 +1892,9 @@ void server_options(char **args, int *argc_p)
0
    if (xfer_dirs && !recurse && delete_mode && am_sender)
0
      args[ac++] = "--no-r";
0
  
0
@@ -426,7 +426,7 @@ diff --git a/options.c b/options.c
0
    if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
0
      if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
0
        goto oom;
0
-@@ -1939,6 +1968,16 @@ void server_options(char **args, int *argc_p)
0
+@@ -1953,6 +1982,16 @@ void server_options(char **args, int *argc_p)
0
        args[ac++] = "--delete-excluded";
0
      if (force_delete)
0
        args[ac++] = "--force";
0
@@ -590,7 +590,7 @@ diff --git a/rsync.h b/rsync.h
0
  #define ITEM_BASIS_TYPE_FOLLOWS (1<<11)
0
  #define ITEM_XNAME_FOLLOWS (1<<12)
0
  #define ITEM_IS_NEW (1<<13)
0
-@@ -460,6 +463,28 @@ typedef unsigned int size_t;
0
+@@ -462,6 +465,28 @@ typedef unsigned int size_t;
0
  #endif
0
  #endif
0
  
0
@@ -619,7 +619,7 @@ diff --git a/rsync.h b/rsync.h
0
  /* Find a variable that is either exactly 32-bits or longer.
0
   * If some code depends on 32-bit truncation, it will need to
0
   * take special action in a "#if SIZEOF_INT32 > 4" section. */
0
-@@ -630,6 +655,7 @@ extern int file_extra_cnt;
0
+@@ -632,6 +657,7 @@ extern int file_extra_cnt;
0
  extern int inc_recurse;
0
  extern int uid_ndx;
0
  extern int gid_ndx;
0
@@ -627,7 +627,7 @@ diff --git a/rsync.h b/rsync.h
0
  extern int acls_ndx;
0
  extern int xattrs_ndx;
0
  
0
-@@ -667,6 +693,11 @@ extern int xattrs_ndx;
0
+@@ -669,6 +695,11 @@ extern int xattrs_ndx;
0
  /* When the associated option is on, all entries will have these present: */
0
  #define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum
0
  #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum
0
@@ -711,7 +711,7 @@ diff --git a/rsync.yo b/rsync.yo
0
  dit(bf(--chmod)) This option tells rsync to apply one or more
0
  comma-separated "chmod" strings to the permission of the files in the
0
  transfer. The resulting value is treated as though it was the permissions
0
-@@ -1190,12 +1218,13 @@ See bf(--delete) (which is implied) for more details on file-deletion.
0
+@@ -1197,12 +1225,13 @@ See bf(--delete) (which is implied) for more details on file-deletion.
0
  dit(bf(--ignore-errors)) Tells bf(--delete) to go ahead and delete files
0
  even when there are I/O errors.
0
  
0
@@ -728,7 +728,7 @@ diff --git a/rsync.yo b/rsync.yo
0
  bf(--recursive) option was also enabled.
0
  
0
  dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
0
-@@ -1651,7 +1680,7 @@ with older versions of rsync, but that also turns on the output of other
0
+@@ -1663,7 +1692,7 @@ with older versions of rsync, but that also turns on the output of other
0
  verbose messages).
0
  
0
  The "%i" escape has a cryptic output that is 11 letters long. The general
0
@@ -737,7 +737,7 @@ diff --git a/rsync.yo b/rsync.yo
0
  type of update being done, bf(X) is replaced by the file-type, and the
0
  other letters represent attributes that may be output if they are being
0
  modified.
0
-@@ -1707,7 +1736,7 @@ quote(itemization(
0
+@@ -1719,7 +1748,7 @@ quote(itemization(
0
    sender's value (requires bf(--owner) and super-user privileges).
0
    it() A bf(g) means the group is different and is being updated to the
0
    sender's value (requires bf(--group) and the authority to set the group).
0
@@ -1060,7 +1060,7 @@ diff --git a/xattrs.c b/xattrs.c
0
    if (rsync_xal_get(fname, sxp->xattr) < 0) {
0
      free_xattr(sxp);
0
      return -1;
0
-@@ -861,6 +865,11 @@ int set_xattr(const char *fname, const struct file_struct *file,
0
+@@ -864,6 +868,11 @@ int set_xattr(const char *fname, const struct file_struct *file,
0
      return -1;
0
    }
0
  
0
@@ -1072,7 +1072,7 @@ diff --git a/xattrs.c b/xattrs.c
0
    ndx = F_XATTR(file);
0
    return rsync_xal_set(fname, lst + ndx, fnamecmp, sxp);
0
  }
0
-@@ -977,7 +986,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
0
+@@ -980,7 +989,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
0
    mode = (fst.st_mode & _S_IFMT) | (fmode & ACCESSPERMS)
0