Package: rdist
Version: 6.1.5-11
Severity: normal
Tags: patch

Hello, 

The nodescend options is described in the rdist manpage as:
 nodescend
   Do  not  descend  into  a  directory.  Normally rdist will recursively check
   directories.  If this option is enabled, then any files listed in  the  file
   list in the distfile that are directories are not recursively scanned.  Only
   the existence, ownership, and mode of the directory are checked.

Given this description I expected that if I had a distfile like this:

/tmp/DIR1/ -> ( localhost )
        install -onodescend /tmp/rdist/DIR1 ;

rdist would create a directory /tmp/rdist/DIR1 with the same permissions as
/tmp/DIR1 but would not copy files from /tmp/DIR1 into the new directory.

This was not the case. AFAICS this is a real issue because in the alpha 
version 7.0 of rdist at http://www.magnicomp.com/ this problem is fixed.

A simple patch to ensure expected behaviour could be:

--- src/client.c.orig   2006-05-15 15:56:21.000000000 +0300
+++ src/client.c        2006-05-15 16:44:39.000000000 +0300
@@ -573,35 +573,35 @@
        int destdir;
 {
        DIRENTRY *dp;
        DIR *d;
        char *optarget, *cp;
        int len;
        int didupdate = 0;
 
-       /*
-        * Don't descend into directory
-        */
-       if (IS_ON(opts, DO_NODESCEND))
-               return(0);
-
        if ((d = opendir(target)) == NULL) {
                error("%s: opendir failed: %s", target, SYSERR);
                return(-1);
        }
 
        /*
         * Send recvdir command in recvit() format.
         */
        (void) sendcmd(C_RECVDIR, "%o %04o 0 0 0 %s %s %s", 
                       opts, stb->st_mode & 07777, user, group, rname);
        if (response() < 0)
                return(-1);
 
+       /*
+        * Don't descend into directory
+        */
+       if (IS_ON(opts, DO_NODESCEND))
+               return(0);
+       
        if (IS_ON(opts, DO_REMOVE))
                if (rmchk(opts) > 0)
                        ++didupdate;
        
        optarget = ptarget;
        len = ptarget - target;
        while (dp = readdir(d)) {
                if (!strcmp(dp->d_name, ".") ||

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15

Versions of packages rdist depends on:
ii  libc6                         2.3.6-7    GNU C Library: Shared libraries

rdist recommends no packages.

-- no debconf information

Thanks.

-- 
Kornilios Kourtis


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to