Kirjoittaja Aihe: Hardy/thunar/umask-bugi: miten korjauksen saisi viralliseksi?  (Luettu 608 kertaa)

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
Hei! Hardyn Thunarissa on hauska bugi. Se ei nimittäin välitä umaskista mitään, vaan luo aina tiedostot ja hakemistot vakio-oikeuksin. Vika on korjattu uusimpiin versioihin https://bugs.launchpad.net/thunar/+bug/242842, mutta korjausta ei ole tullu eikä taida olla tulossakaan Hardyyn (miksi  ???). Haittaa kovasti, mikäli kone on yhteisessä käytössä ja umask on sellainen, että omistajalle ja ryhmälle on tarkoitus antaa kaikki oikeudet ja muille vain lukuoikeudet. Thunar jättää kuitenkin ryhmälle vain lukuoikeudet, koska umask on kovakoodattu ohjelmaan.

Vika koskee kai lähinnä Xubuntua, mutta voi kai tuota Thunaria käyttää Ubuntu-työpöydälläkin?

Hain itse patchin (joka tietysti ei suoraan mennyt läpi), kävin manuaalisesti läpi muutetu kohdat, sekä korjasin ja käänsin ohjelman. Thunar toimii nyt oikein ja olisi fiksua laittaa patchi eteenpäin, eikö vain? Miten tuo tulisi tehdä? Korjaava 8.04:n patchi siis on alla:

diff -ruN a/thunar-vfs/thunar-vfs-io-jobs.c b/thunar-vfs/thunar-vfs-io-jobs.c
--- a/thunar-vfs/thunar-vfs-io-jobs.c   2010-01-23 09:31:28.564007724 +0200
+++ b/thunar-vfs/thunar-vfs-io-jobs.c   2010-01-23 09:40:17.281671772 +0200
@@ -432,8 +432,12 @@
       absolute_path = thunar_vfs_path_dup_string (lp->data);
 
 again:
-      /* try to create the file at the given path */
-      fd = g_open (absolute_path, O_CREAT | O_EXCL | O_WRONLY, 0644);
+      /* Try to create the file at the given path.
+       *
+       * Note that despite the 0666 mask, we won't really create a world-writable
+       * file unless the user's umask permits it (ie the umask is 0000).
+       */
+      fd = g_open (absolute_path, O_CREAT | O_EXCL | O_WRONLY, 0666);
       if (G_UNLIKELY (fd < 0))
         {
           /* check if the file already exists */
@@ -707,8 +711,13 @@
       /* update the progress information */
       _thunar_vfs_job_process_path (job, lp);
 
-      /* try to create the target directory */
-      if (!_thunar_vfs_io_ops_mkdir (lp->data, 0755, THUNAR_VFS_IO_OPS_NONE, error))
+      /* try to create the target directory
+       *
+       * Note that the mode specified here is limited by the user's umask, so we will not
+       * actually be creating a world writable directory unless the user's umask permits
+       * it.
+       */
+      if (!_thunar_vfs_io_ops_mkdir (lp->data, 0777, THUNAR_VFS_IO_OPS_NONE, error))
         return FALSE;
     }