Hi!

I am trying to clean a bit in the open bugreports against cfengine2 in
the Debian BTS[1]. This mail is about an old bug that noone has
commented on yet, but as I believe still is an issue with 2.1.20.

This is bug #232512 [2]:

 I have a cfengine2 configuration, where occassionally (on purpose!)
 during a single run of cfexecd, a destination file gets copied from
 two different locations on the server. For example:
 /foo/file dest=/foo/bar server=host backup=true
 /foo2/file dest=/foo/bar server=host backup=true

 This results, in /foo:
 /foo/bar (identical to /foo/file) 
 /foo/bar.cfsaved (identical to whatever there was originally)
 /foo/bar.cfnew (identical to /foo2/file)

 Obviously, the latter copy has failed. During the next run, the first
 copy line copies nothing since /foo/bar is already identical to
 /foo/file and thus the directory now looks like:
 /foo/bar (identical to /foo2/file) 
 /foo/bar.cfsaved (identical to /foo/bar)

 Then we go back to square one and repeat this all over again. The
 culprit is lines 1509-1512 in image.c:
    if (IsItemIn(VREPOSLIST,backup))
       {
       return true;
       }

 This exits the whole CopyReg() and leaves .cfnew in place if AND ONLY
 IF, the same file (i.e. /foo/bar) was already in backup
 repository. Thus, the quick hack is to change either of the two lines
 to NOT create backups. However, it is, in my opinion, the wrong
 solution. Correct behaviour should be to either create a backup of a
 backup (troublesome), skip backup of a file already backed up (my
 choice) or at least print out a warning. The first one may be a little
 difficult to implement, but the second one is easy: change "return
 true;" to "continue;". This would skip the remainder of the backup
 procedure and continue as if it had been backed up. I do not think any
 harm would come from this, since the *original* file was already
 backed up earlier and now we just skip backing up a file cfengine
 previously copied into place. The patch is untested (I only have
 production systems at hand at the moment), but should work.

 --- image.old.c 2004-02-13 11:45:28.000000000 +0200
 +++ image.c     2004-02-13 11:45:57.000000000 +0200
 @@ -1508,7 +1508,7 @@
  
     if (IsItemIn(VREPOSLIST,backup))
        {
 -      return true;
 +      continue;  
        }
  
     /* Mainly important if there is a dir in the way */

After looking at the code, this is still an issue, right? So what do
you think? The bugreport can be found at [2].


- Werner

[1] http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=cfengine2
[2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=232512


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

Reply via email to