Moved the mkfifo() and socket-making stuff from tru64.diff to here so
[rsync/rsync-patches.git] / acls.diff
index 1eb414a..39875cb 100644 (file)
--- a/acls.diff
+++ b/acls.diff
@@ -31,9 +31,9 @@ ACLs to a non-ACL-supporting disk should complain.
  OBJS3=progress.o pipe.o
  DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
  popt_OBJS=popt/findme.o  popt/popt.o  popt/poptconfig.o \
---- orig/acls.c        2004-08-19 17:09:41
-+++ acls.c     2004-08-19 17:09:41
-@@ -0,0 +1,1117 @@
+--- orig/acls.c        2004-09-08 06:09:30
++++ acls.c     2004-09-08 06:09:30
+@@ -0,0 +1,1144 @@
 +/* -*- c-file-style: "linux" -*-
 +   Copyright (C) Andrew Tridgell 1996
 +   Copyright (C) Paul Mackerras 1996
@@ -642,8 +642,8 @@ ACLs to a non-ACL-supporting disk should complain.
 +{
 +#if ACLS_NEED_MASK
 +      uchar required_mask_perm = 0;
-+      BOOL saw_mask = False;
 +#endif
++      BOOL saw_mask = False;
 +      BOOL saw_user_obj = False, saw_group_obj = False,
 +              saw_other = False;
 +      size_t count = read_int(f);
@@ -675,9 +675,7 @@ ACLs to a non-ACL-supporting disk should complain.
 +                      break;
 +              case 'm':
 +                      race->tag_type = SMB_ACL_MASK;
-+#if ACLS_NEED_MASK
 +                      saw_mask = True;
-+#endif
 +                      break;
 +              default:
 +                      rprintf(FERROR, "receive_rsync_acl: unknown tag %c\n",
@@ -728,6 +726,35 @@ ACLs to a non-ACL-supporting disk should complain.
 +              race->tag_type = SMB_ACL_MASK;
 +              race->access = required_mask_perm;
 +      }
++#else
++      /* If we, a system without ACLS_NEED_MASK, received data from a
++       * system that has masks, throw away the extraneous CLASS_OBJs. */
++      if (saw_mask && racl->count == 4) {
++              rsync_ace *group_obj_race = NULL, *mask_race = NULL;
++              rsync_ace *p;
++              size_t i;
++              for (i = 0, p = racl->races; i < racl->count; i++, p++) {
++                      if (p->tag_type == SMB_ACL_MASK)
++                              mask_race = p;
++                      else if (p->tag_type == SMB_ACL_GROUP_OBJ)
++                              group_obj_race = p;
++              }
++              if (mask_race == NULL || group_obj_race == NULL) {
++                      rprintf(FERROR, "receive_rsync_acl: have four ACES "
++                                      "and one's ACL_MASK but missing "
++                                      "either it or ACL_GROUP_OBJ, "
++                                      "when pruning ACL\n");
++              } else {
++                      /* mask off group perms with it first */
++                      group_obj_race->access &= mask_race->access;
++                      /* dump mask_race; re-slot any followers-on */
++                      racl->count--;
++                      if (mask_race != &racl->races[racl->count]) {
++                              *mask_race = racl->races[racl->count];
++                              saw_user_obj = False; /* force re-sort */
++                      }
++              }
++      }
 +#endif
 +#if ACLS_NEED_MASK
 +      if (!(saw_user_obj && saw_group_obj && saw_other && saw_mask))
@@ -1151,9 +1178,9 @@ ACLs to a non-ACL-supporting disk should complain.
 +}
 +
 +#endif /* SUPPORT_ACLS */
---- orig/backup.c      2004-09-07 21:45:30
+--- orig/backup.c      2004-09-20 19:50:13
 +++ backup.c   2004-09-07 21:45:57
-@@ -121,6 +121,7 @@ static int make_bak_dir(char *fullpath)
+@@ -119,6 +119,7 @@ static int make_bak_dir(char *fullpath)
                        } else {
                                do_lchown(fullpath, st.st_uid, st.st_gid);
                                do_chmod(fullpath, st.st_mode);
@@ -1161,7 +1188,7 @@ ACLs to a non-ACL-supporting disk should complain.
                        }
                }
                *p = '/';
-@@ -178,6 +179,8 @@ static int keep_backup(char *fname)
+@@ -176,6 +177,8 @@ static int keep_backup(char *fname)
        if (!(buf = get_backup_name(fname)))
                return 0;
  
@@ -1170,7 +1197,7 @@ ACLs to a non-ACL-supporting disk should complain.
  #ifdef HAVE_MKNOD
        /* Check to see if this is a device file, or link */
        if (IS_DEVICE(file->mode)) {
-@@ -253,6 +256,7 @@ static int keep_backup(char *fname)
+@@ -251,6 +254,7 @@ static int keep_backup(char *fname)
                }
        }
        set_perms(buf, file, NULL, 0);
@@ -1270,9 +1297,9 @@ ACLs to a non-ACL-supporting disk should complain.
  AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
  AC_OUTPUT
  
---- orig/flist.c       2004-08-12 18:34:38
+--- orig/flist.c       2004-09-21 09:40:27
 +++ flist.c    2004-07-03 20:11:58
-@@ -944,6 +944,8 @@ void send_file_name(int f, struct file_l
+@@ -966,6 +966,8 @@ void send_file_name(int f, struct file_l
  
        if (!file)
                return;
@@ -1281,7 +1308,7 @@ ACLs to a non-ACL-supporting disk should complain.
  
        maybe_emit_filelist_progress(flist);
  
-@@ -952,6 +954,10 @@ void send_file_name(int f, struct file_l
+@@ -974,6 +976,10 @@ void send_file_name(int f, struct file_l
        if (file->basename[0]) {
                flist->files[flist->count++] = file;
                send_file_entry(file, f, base_flags);
@@ -1292,7 +1319,7 @@ ACLs to a non-ACL-supporting disk should complain.
        }
  
        if (recursive && S_ISDIR(file->mode)
-@@ -1268,6 +1274,8 @@ struct file_list *recv_file_list(int f)
+@@ -1291,6 +1297,8 @@ struct file_list *recv_file_list(int f)
                        flags |= read_byte(f) << 8;
                receive_file_entry(&flist->files[i], flags, flist, f);
  
@@ -1301,7 +1328,7 @@ ACLs to a non-ACL-supporting disk should complain.
                if (S_ISREG(flist->files[i]->mode))
                        stats.total_size += flist->files[i]->length;
  
-@@ -1290,6 +1298,8 @@ struct file_list *recv_file_list(int f)
+@@ -1313,6 +1321,8 @@ struct file_list *recv_file_list(int f)
  
        clean_flist(flist, relative_paths, 1);
  
@@ -1310,7 +1337,7 @@ ACLs to a non-ACL-supporting disk should complain.
        if (f != -1) {
                /* Now send the uid/gid list. This was introduced in
                 * protocol version 15 */
---- orig/generator.c   2004-09-07 21:45:30
+--- orig/generator.c   2004-09-20 19:50:13
 +++ generator.c        2004-07-03 20:11:58
 @@ -338,6 +338,10 @@ static void recv_generator(char *fname, 
                if (set_perms(fname, file, statret ? NULL : &st, 0)
@@ -1334,7 +1361,7 @@ ACLs to a non-ACL-supporting disk should complain.
    next;
  }
  
---- orig/options.c     2004-09-07 21:45:30
+--- orig/options.c     2004-09-20 05:10:48
 +++ options.c  2004-08-19 17:38:57
 @@ -43,6 +43,7 @@ int keep_dirlinks = 0;
  int copy_links = 0;
@@ -1416,7 +1443,7 @@ ACLs to a non-ACL-supporting disk should complain.
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off (opt-BASE is its index). */
-@@ -934,6 +960,8 @@ void server_options(char **args,int *arg
+@@ -938,6 +964,8 @@ void server_options(char **args,int *arg
  
        if (preserve_hard_links)
                argstr[x++] = 'H';
@@ -1485,7 +1512,7 @@ ACLs to a non-ACL-supporting disk should complain.
  #include "proto.h"
  
  /* We have replacement versions of these if they're missing. */
---- orig/rsync.yo      2004-09-07 19:54:51
+--- orig/rsync.yo      2004-09-20 05:10:48
 +++ rsync.yo   2004-07-03 20:11:58
 @@ -326,6 +326,7 @@ verb(
       --safe-links            ignore "unsafe" symlinks
@@ -1974,7 +2001,7 @@ ACLs to a non-ACL-supporting disk should complain.
 +      return acl_free(the_acl);
 +}
 +
-+int sys_acl_free_qualifier(void *qual, UNUSED(SMB_ACL_TAG_T tagtype))
++int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype)
 +{
 +      return acl_free(qual);
 +}