Package: wicd
Version: 1.7.2.4-2
Severity: serious

In wicd-daemon.py the main() function backs up and restores
/etc/resolv.conf. To back up it does

    shutil.copy2('/etc/resolv.conf', wpath.varlib + 'resolv.conf.orig')

which is like the following shell command.

   cp -p /etc/resolv.conf path/resolv.conf.orig

Note that if /etc/resolv.conf is a symbolic link to another file, the
shutil.copy2() copies the contents to the target; it does not create an
equivalent symbolic link at the target.

To restore, it does

    shutil.move(wpath.varlib + 'resolv.conf.orig', '/etc/resolv.conf')

which is like the following.

    mv path/resolv.conf.orig /etc/resolv.conf

If /etc/resolv.conf was a symbolic link before the backup-and-restore
sequence then afterwards it is a plain file with the contents of the target
of that symlink. Put more bluntly, it clobbers the symlink.

Resolvconf makes use of a symbolic link /etc/resolv.conf ->
../run/resolvconf/resolv.conf. Therefore it appears that wicd-daemon.py
will break any system using resolvconf.

I was just reading the wicd code and this bug report arises from that
reading, not from testing. But even if the code in question isn't currently
executed it should be fixed.

Reply via email to