[maybe-ITP] gamin

classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

[maybe-ITP] gamin

Yaakov (Cygwin/X)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lapo,

Thanks for the patch.  Please test 0.1.7:

ftp://sunsite.dk/projects/cygwinports/release/gamin/gamin-0.1.7-1-src.tar.bz2
ftp://sunsite.dk/projects/cygwinports/release/gamin/gamin-0.1.7-1.tar.bz2
ftp://sunsite.dk/projects/cygwinports/release/gamin/gamin-devel/gamin-devel-0.1.7-1.tar.bz2
ftp://sunsite.dk/projects/cygwinports/release/gamin/gamin-devel/setup.hint
ftp://sunsite.dk/projects/cygwinports/release/gamin/pygamin/pygamin-0.1.7-1.tar.bz2
ftp://sunsite.dk/projects/cygwinports/release/gamin/pygamin/setup.hint
ftp://sunsite.dk/projects/cygwinports/release/gamin/setup.hint

I've changed gamin_check_not_fat to handle the lack of GetVolumePathName
on some versions (I hope); but I'm not sure how to handle NT4 on FAT.

#ifdef __CYGWIN__

#include <sys/cygwin.h>
/* FIXME: #define WIN32_LEAN_AND_MEAN ?? */
#define _WIN32_WINNT 0x0500
#include <windows.h>

#endif  /* __CYGWIN__ */

/**
 * gamin_check_not_fat:
 *
 * On Cygwin, check if socket dir is on not a FAT drive.  This is
 * necessary because gamin_check_secure_{dir,path} check permissions,
 * and FAT drives do not have a permissions model; everything is 755.
 *
 * On other platforms, we assume that the socket dir is not on FAT.
 *
 * Returns 1 if <b>not</b> on a FAT drive, 0 if on FAT, -1 in case of error.
 */
static int
gamin_check_not_fat (void)
{
#ifdef __CYGWIN__
  OSVERSIONINFO osvi;
  const char *cygpath;
  char winpath[256];
  char rootdir[256];
  char volname[256];
  char fsname[256];
  DWORD sernum = 0;
  DWORD maxlen = 0;
  DWORD flags = 0;

  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&osvi);

  if (osvi.dwPlatformId == 1)   /* VER_PLATFORM_WIN32_WINDOWS */
    {
      return 0;      /* Win9x/Me, must be FAT */
    }

  cygpath = gamin_get_socket_dir();

  cygwin_conv_to_full_win32_path (cygpath, winpath);
  if (!GetVolumePathName(winpath, rootdir, 256))
    {
      fprintf (stderr, "GetVolumePathName: %d\n", GetLastError ());
      return -1;
    }
  if (!GetVolumeInformation (rootdir, volname, 256, &sernum,
                             &maxlen, &flags, fsname, 256))
    {
      fprintf (stderr, "GetVolumeInformation: %d\n", GetLastError ());
      return -1;
    }
  if (strncmp(fsname, "FAT", 3) == 0)
    {
      return 0;
    }
#endif  /* __CYGWIN__ */
  return 1;
}


Yaakov

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFD/kzjpiWmPGlmQSMRApKfAJ42267wRhgRRAXNLoD6OFXyZVeWJQCgykY0
ZmxIPEyzVua/Xzy8HdfY9iE=
=87zX
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini-2
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yaakov S (Cygwin Ports) wrote:
> Lapo,
>
> Thanks for the patch.  Please test 0.1.7:
I and Alex tried that against our application and seems to work ok, so
I guess the package is ready for the public ;-)

    Lapo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQIcBAEBAgAGBQJECG2qAAoJEJLw0EUVBG94ky4P/A2qvmfQLNWdCFOZuyHUHLHx
etdta3ZYaqA+4e+rnmsfDYgHBpbPlR92Ql8GfgncpJJjlVbcZnIrdIbtlD2g9pZH
tziEL2V8V2uJhZ0SHk7oEEjAejHsOzklbY9aTGixnvfw7CtmPYHXFN8LGTqVB9ri
eZJJCgkviJhDATZpJriloTvn0kk2LgdVtDG6ElyDO9us09t7RRir2WETBShAWZtr
TOMojXoREVDcga4ddmznR6V3IQ5RxhTGlwzBrwwSUsqvwZc1Q4RttcwXJ614RDnj
UeF2ApmrtKWUQvdhtHRuCRfIh0ope+/Uf0INP6GavnZlLK/5NYkjb9oIBoVThio7
eCFGDo7Oq+dsjbSOt5AyK3Wbm0bCI6/g6JgvPqfhWaGkyBiWqfltzo2UGSNhGcED
u2ZneXyZpf60F5Cx8F2O9c0D8dbd6Vjl/U553Sz0Vnx6AEbw/AI1T0SCx28qLT3E
HIzVqt9NyuUnxzEMNohkPN+aWg+C3SaTo3Ubb1rj89PPZdeBaCjvB/RuVTZB8gjb
c4Y4clf6Tod+Y7a/+7u2Wx70VVT12hdu0aYhRC71zGOpZiUcwXdpXlDjEi63hprQ
fvjOPJ+/E9PYPAdQv3W8/PlZl0cnvJVLGmbUOqTpi7Pjr00rnuAESaS7qpA+5LNA
GoR1FswiQeY3ByXQpjRU
=oyMR
-----END PGP SIGNATURE-----

Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Yaakov (Cygwin/X)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lapo Luchini wrote:
> I and Alex tried that against our application and seems to work ok, so
> I guess the package is ready for the public ;-)

OK, thanks.  Sorry for the delay; I was just about to ping you when I
saw your response, which I obviously missed before.

Do you have any ideas about how to deal with FAT on NT4?


Yaakov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEEL30piWmPGlmQSMRAvXeAJ9YNGkxpcpr6jRUyD/0hGKUHUPIWACeP7FO
8G1SxUGY19kX0jG8YC9LweY=
=FEGB
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini-2
Yaakov S (Cygwin Ports) wrote:
> OK, thanks.  Sorry for the delay; I was just about to ping you when I
> saw your response, which I obviously missed before.
Eheh =)
Then the package seems to be ready for prime time? (aka upload)
> Do you have any ideas about how to deal with FAT on NT4?
As soon as I have some time I'll try installing NT4 in a virtual machine
and try a bit... but I can't say this is high on my TODO list...
I wonder how many people still use NT4? ^_^"""
Those few might as well use NTFS "as it were FAT", e.g. with less
permissions checks.

   Lapo
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Yaakov (Cygwin/X)
Lapo Luchini wrote:
> Eheh =)
> Then the package seems to be ready for prime time? (aka upload)

I think so, could you build from source for a GTG review?

> As soon as I have some time I'll try installing NT4 in a virtual machine
> and try a bit... but I can't say this is high on my TODO list...
> I wonder how many people still use NT4? ^_^"""
> Those few might as well use NTFS "as it were FAT", e.g. with less
> permissions checks.

OK, it's not a showstopper.


Yaakov
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Corinna Vinschen-2
On Mar 13 20:11, Yaakov S (Cygwin Ports) wrote:

> Lapo Luchini wrote:
> >Eheh =)
> >Then the package seems to be ready for prime time? (aka upload)
>
> I think so, could you build from source for a GTG review?
>
> >As soon as I have some time I'll try installing NT4 in a virtual machine
> >and try a bit... but I can't say this is high on my TODO list...
> >I wonder how many people still use NT4? ^_^"""
> >Those few might as well use NTFS "as it were FAT", e.g. with less
> >permissions checks.
>
> OK, it's not a showstopper.

I'm a bit irritated about that.  The only thing to do is to load
the GetVolumePathName function dynamically and if that doesn't
work, use a simple string function which cuts the path after either
X:\ or \\server\share.  Just to dismiss NT4 instead of implementing
these 10 lines of code is a bit strange, isn't it?


Corinna

--
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini-2
Corinna Vinschen wrote:
> Just to dismiss NT4 instead of implementing
> these 10 lines of code is a bit strange, isn't it?
>  
I hardly call this 10 lines of code, it was more than 1 hour worth of
work, emulating that pesky function ;-)
(of course I completely ignored UNC paths and the very idea that
"C:\mnt\driveC" can be a mount point)

Anyway, I wrote something "close enough".
Unfortunately I am well over the free time I had so I have to GTG Yakoov
package another evening =(

% wc -l GVPN.c
88 GVPN.c
% cat GVPN.c
#include <windows.h>
#include <string.h>

BOOL EmGetVolumePathName(
LPCTSTR lpszFileName,
LPTSTR lpszVolumePathName,
DWORD cchBufferLength
)
{
if (cchBufferLength < 4)
return 0;
if (isalpha(lpszFileName[0])) {
lpszVolumePathName[0] = lpszFileName[1] == ':' ? lpszFileName[0] : 'C';
lpszVolumePathName[1] = ':';
lpszVolumePathName[2] = '\\';
lpszVolumePathName[3] = 0;
return 1;
}
if (lpszFileName[0] == '\\' && lpszFileName[1] == '\\' &&
isalpha(lpszFileName[2])) {
int slash = 0;
while (*lpszFileName != 0 && slash < 4) {
if (*lpszFileName == '\\')
++slash;
if (cchBufferLength-- > 1)
*lpszVolumePathName++ = *lpszFileName++;
else
return 0;
}
if (slash == 2)
return 0;
else if (slash == 3) {
if (cchBufferLength-- > 1)
*lpszVolumePathName++ = '\\';
else
return 0;
}
*lpszVolumePathName = 0;
return 1;
}
return 0;
}

BOOL MyGetVolumePathName(
LPCTSTR lpszFileName,
LPTSTR lpszVolumePathName,
DWORD cchBufferLength
)
{
HINSTANCE hinstLib = LoadLibrary("Kernel32");
if (hinstLib != NULL) {
BOOL (*fun)(LPCTSTR, LPTSTR, DWORD) = (BOOL (*)(LPCTSTR, LPTSTR, DWORD))
GetProcAddress(hinstLib, "GetVolumePathNameA");
// If the function address is valid, call the function.
if (fun != NULL) {
BOOL ret = fun(lpszFileName, lpszVolumePathName, cchBufferLength);
FreeLibrary(hinstLib);
return ret;
}
FreeLibrary(hinstLib);
}
return EmGetVolumePathName(lpszFileName, lpszVolumePathName,
cchBufferLength);
}

main() {
char try[][80] = {
"Z",
"Z:",
"Z:\\ciao",
"\\\\cyberone",
"\\\\cyberone\\Musica",
"\\\\cyberone\\Musica\\ciao",
"\\\\cyberone\\Musica-ciao-too-much--way-too-much",
"\\\\\\cyberone"
};
char root[40];
int i;
BOOL b;
for (i = 0; i < sizeof(try) / sizeof(try[0]); ++i) {
printf("Orig = %s\n", try[i]);
strcpy(root, "--------------------");
b = MyGetVolumePathName(try[i], root, 40);
printf("Real = %d %s\n", b, root);
strcpy(root, "--------------------");
b = EmGetVolumePathName(try[i], root, 40);
printf("Emul = %d %s\n", b, root);
putchar('\n');
}
}
% gcc -o GVPN.exe GVPN.c && ./GVPN.exe
Orig = Z
Real = 1 C:\
Emul = 1 C:\

Orig = Z:
Real = 1 Z:\
Emul = 1 Z:\

Orig = Z:\ciao
Real = 1 Z:\
Emul = 1 Z:\

Orig = \\cyberone
Real = 0 --------------------
Emul = 0 \\cyberone----------

Orig = \\cyberone\Musica
Real = 1 \\cyberone\Musica\
Emul = 1 \\cyberone\Musica\

Orig = \\cyberone\Musica\ciao
Real = 1 \\cyberone\Musica\
Emul = 1 \\cyberone\Musica\

Orig = \\cyberone\Musica-ciao-too-much--way-too-much
[some seconds delay, as this share doesn't actually exist]
Real = 0 --------------------
Emul = 0 \\cyberone\Musica-ciao-too-much--way-to

Orig = \\\cyberone
Real = 0 --------------------
Emul = 0 --------------------

Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini-2
Lapo Luchini wrote:
> if (cchBufferLength < 4)
> return 0;
>  
Before being included in the mail this code was better indented, of
course.. let's try with an attach.

#include <windows.h>
#include <string.h>

BOOL EmGetVolumePathName(
  LPCTSTR lpszFileName,
  LPTSTR lpszVolumePathName,
  DWORD cchBufferLength
)
{
  if (cchBufferLength < 4)
    return 0;
  if (isalpha(lpszFileName[0])) {
    lpszVolumePathName[0] = lpszFileName[1] == ':' ? lpszFileName[0] : 'C';
    lpszVolumePathName[1] = ':';
    lpszVolumePathName[2] = '\\';
    lpszVolumePathName[3] = 0;
    return 1;
  }
  if (lpszFileName[0] == '\\' && lpszFileName[1] == '\\' && isalpha(lpszFileName[2])) {
    int slash = 0;
    while (*lpszFileName != 0 && slash < 4) {
      if (*lpszFileName == '\\')
        ++slash;
      if (cchBufferLength-- > 1)
        *lpszVolumePathName++ = *lpszFileName++;
      else
        return 0;
    }
    if (slash == 2)
      return 0;
    else if (slash == 3) {
      if (cchBufferLength-- > 1)
        *lpszVolumePathName++ = '\\';
      else
        return 0;
    }
    *lpszVolumePathName = 0;
    return 1;
  }
  return 0;
}

BOOL MyGetVolumePathName(
  LPCTSTR lpszFileName,
  LPTSTR lpszVolumePathName,
  DWORD cchBufferLength
)
{
  HINSTANCE hinstLib = LoadLibrary("Kernel32");
  if (hinstLib != NULL) {
    BOOL (*fun)(LPCTSTR, LPTSTR, DWORD) = (BOOL (*)(LPCTSTR, LPTSTR, DWORD))
      GetProcAddress(hinstLib, "GetVolumePathNameA");
    // If the function address is valid, call the function.
    if (fun != NULL) {
      BOOL ret = fun(lpszFileName, lpszVolumePathName, cchBufferLength);
      FreeLibrary(hinstLib);
      return ret;
    }
    FreeLibrary(hinstLib);
  }
  return EmGetVolumePathName(lpszFileName, lpszVolumePathName, cchBufferLength);
}

main() {
  char try[][80] = {
    "Z",
    "Z:",
    "Z:\\ciao",
    "\\\\cyberone",
    "\\\\cyberone\\Musica",
    "\\\\cyberone\\Musica\\ciao",
    "\\\\cyberone\\Musica-ciao-too-much--way-too-much",
    "\\\\\\cyberone"
  };
  char root[40];
  int i;
  BOOL b;
  for (i = 0; i < sizeof(try) / sizeof(try[0]); ++i) {
    printf("Orig = %s\n", try[i]);
    strcpy(root, "--------------------");
    b = MyGetVolumePathName(try[i], root, 40);
    printf("Real = %d %s\n", b, root);
    strcpy(root, "--------------------");
    b = EmGetVolumePathName(try[i], root, 40);
    printf("Emul = %d %s\n", b, root);
    putchar('\n');
  }
}
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Corinna Vinschen-2
In reply to this post by Lapo Luchini-2
On Mar 14 21:58, Lapo Luchini wrote:
> Corinna Vinschen wrote:
> > Just to dismiss NT4 instead of implementing
> > these 10 lines of code is a bit strange, isn't it?
> >  
> I hardly call this 10 lines of code, it was more than 1 hour worth of
> work, emulating that pesky function ;-)
> (of course I completely ignored UNC paths and the very idea that
> "C:\mnt\driveC" can be a mount point)

That's fine since the existance of reparse points corresponds with the
existance of the GetVolumePathName function.  In other words, if you
have to emulate the function, no other volume mount points besides X:\
and \\server\share can exist.

May I suggest to use GetFullPathName on the incoming path first?
Then you can savely remove the "if (isalpha(lpszFileName[0])) {" part.


Corinna

--
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini-2
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Corinna Vinschen wrote:
> That's fine since the existance of reparse points corresponds with
> the existance of the GetVolumePathName function.  In other words,
> if you have to emulate the function, no other volume mount points
> besides X:\ and \\server\share can exist.

That's what I supposed, but thanks for the confirmation.

> May I suggest to use GetFullPathName on the incoming path first?
> Then you can savely remove the "if (isalpha(lpszFileName[0])) {"
> part.

OK, will modify it ASAP (which can be a while, graduation thesis
deadline in less than 2 weeks...).

BTW: would this only be useful to gamin or could be useful enough to
be included in cygwin1.dll?
After all knowing the "possibilities" (i.e. the presence of
permissions, the granularity of mtime) of a mount can be useful elsewhere?
In that case just let me know and I will adapt the patch to apply
there and change the one to gamin (I already have done the copyright
assignment).

    Lapo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQIcBAEBAgAGBQJEHBWIAAoJELBiMTth2oCDNtoP/0Kc6E0s6HCkLOfF5CLzVlJx
BFlA6iDeQfpYsW+BbTONt5qMLZlR6e+DF44V8jBVin94q/WTM/GWt7ulCOZ7SwWS
/hBh5TR9xwrFveAEIleG7aL8Yo8S42s4pvOSTh8kaXCI7YgV7RJDb8YwgiBLFnU0
FNmp0wbadILVZyK+zGm1zQayCTN7pX3dCsfcugi7vkRCKN8pd+albvHI3K4zaUhJ
fsXvSOMQahq1fGOWZ9qukrh1fx1MK6kSMX5MtuBt3mHQosN7FuX3iwfK9Y6DM557
y7LYU89CSTyVYGquuNGF17VUlBhbWwHE0jc+WWPGr4JtLgQTrowzqfNx6iNW048y
yDGu9tyAu7ET87S87jywkxqihYAdEnE7JqVFu4NTn/KNNSa2r91f5SpihLer3xWL
SlSeC3G1abIXZh2PaFVRHoKS4X4qmSwP6TlGXdZM7+tRo0E54DeYVA5QG4dQuko4
9jJZ7jZZGS/Qjpg35Hm+YvWC+YzOxNtYZtpFGWonWrWGesi5UZvbVnlh6znspCDY
sGVYTwt6drqbuJ3eyin8f3rAnQIRRbYeKx/5ed/pQSNVtifJK5tKzKRbLwNTumXB
25OnLA4TyduAREqiuK4GlF0fYituhw9xPtE7Kcga6CLPsTRwf+prXM+dgZU991Le
jd39JX1oFve1DmdT0vqv
=T4Zf
-----END PGP SIGNATURE-----

Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Corinna Vinschen-2
On Mar 18 15:13, Lapo Luchini wrote:
> > May I suggest to use GetFullPathName on the incoming path first?
> > Then you can savely remove the "if (isalpha(lpszFileName[0])) {"
> > part.
>
> OK, will modify it ASAP (which can be a while, graduation thesis
> deadline in less than 2 weeks...).
>
> BTW: would this only be useful to gamin or could be useful enough to
> be included in cygwin1.dll?

Thanks for your offer, but I think Cygwin will not need it.

First of all, calling GetVolumePathName is *incredibly* slow.  Since the
root directory is evaluated on each path handling right now, the cost of
using GetVolumePathName is unbearable.

The next problem is that the Cygwin function requesting volume
information uses the Win32 function GetVolumeInformation, which needs
the path to the root directory, unfortunately.  This is still required
as long as we support 9x (blerch), but on NT, the underlying native
volume information function ZwQueryVolumeInformationFile doesn't need
the root path at all.  A handle to any file or directory on the volume
is sufficient, so in turn there's no need to know the Win32 root
directory anymore to request information when using this function.

Consequentially I'm planning to change the volume handling in Cygwin in
the near future (for 1.5.21), so that evaluating the volume root
directory will only be required on 9x.


Corinna

--
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Yaakov (Cygwin/X)
In reply to this post by Lapo Luchini-2
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lapo Luchini wrote:

> Corinna Vinschen wrote:
>>> That's fine since the existance of reparse points corresponds with
>>> the existance of the GetVolumePathName function.  In other words,
>>> if you have to emulate the function, no other volume mount points
>>> besides X:\ and \\server\share can exist.
>
> That's what I supposed, but thanks for the confirmation.
>
>>> May I suggest to use GetFullPathName on the incoming path first?
>>> Then you can savely remove the "if (isalpha(lpszFileName[0])) {"
>>> part.
>
> OK, will modify it ASAP (which can be a while, graduation thesis
> deadline in less than 2 weeks...).

Hmmm, this has seemingly stalled for about two months now.  Where are we
holding with gamin now?


Yaakov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEc4hYpiWmPGlmQSMRApp9AKD1lh3flrTYs1GLXnjl3S3F9ECPLACgv1PX
kke4KrLVoRGQ22uqKbOuy5U=
=Gd9h
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: [maybe-ITP] gamin

Lapo Luchini
Yaakov S (Cygwin Ports) wrote:

> Lapo Luchini wrote:
> >> Corinna Vinschen wrote:
> >>>> That's fine since the existance of reparse points corresponds with
> >>>> the existance of the GetVolumePathName function.  In other words,
> >>>> if you have to emulate the function, no other volume mount points
> >>>> besides X:\ and \\server\share can exist.
> >> That's what I supposed, but thanks for the confirmation.
> >>
> >>>> May I suggest to use GetFullPathName on the incoming path first?
> >>>> Then you can savely remove the "if (isalpha(lpszFileName[0])) {"
> >>>> part.
> >> OK, will modify it ASAP (which can be a while, graduation thesis
> >> deadline in less than 2 weeks...).
>
> Hmmm, this has seemingly stalled for about two months now.  Where are we
> holding with gamin now?
Apparently the size of the object "writing thesis + defending it" pushed
it in the swap file and was then forgotten there.
Thanks for having remembered it to me, I'll take a look at it ASAP
(really, this time) ;-)
(same goes for the package I didn't yet update yet, such as rsync)

    Lapo