This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: cygwin 1.7 problems: network, path, file system


On Jun 18 11:27, Thomas Wolff wrote:
> Hello, I had a number of problems with cygwin 1.7:
> 
> 
> ----------------------
> Network problems
> 
> 
> No /etc/fstab - this has been discussed in other mails, but I am mentioning it 
This is not a general problem, just in your installation.  Did you use a
snapshot in a 1.5 environment?  If so, you have to create your
/etc/fstab files manually, or, you have to fetch the base-cygwin package
from the release-2 area to create /etc/fstab and /etc/fstab.d/$USER from
your current mount points in the registry.  When installing from scratch
from the release-2 area, you get the package for free.

> as I am having other network problems too:
> 
> I cannot copy to a Hummingbird-nfs-mounted device anymore.
> This is when mounting with nfs link X: ...; file browsing and opening works, 
> just not create/copy.
> With Windows mount (net use X: ...) everything works (but I don't like that 
> mount because it works with fixed file permissions only).

I don't have hummingbird NFS installed, just Microsoft's NFS from SFU
resp. the default NFS clients built in to Vista and 2008.  Works fine
for me.  There's code in Cygwin 1.7 to work with these NFS clients, see
http://cygwin.com/ml/cygwin-developers/2008-05/msg00029.html I have no
idea how hummingbird NFS works.  If you want support for this NFS
client, Cygwin needs code from you.  For a start, please build the
attached source code and run it with the path to the drive, like this:

  $ gcc -g -o GetVolInfo GetVolInfo.c -lntdll
  $ ./GetVolInfo /cygdrive/x
or
  $ GetVolInfo x:/

Paste the output in your reply.

> rlogin does not work anymore; it just hangs.
> 
> 
> ----------------------
> Path problems
> 
> 
> rsh does not work anymore:
> 	- complains about missing /usr/bin/rlogin (which has moved to /bin)
> 
> 
> man does not work anymore:
> sh: /usr/bin/tbl: No such file or directory
> sh: /usr/bin/nroff: No such file or directory
> (I wonder why man tries to invoke these using absolute pathnames...)

fstab problem, probably.  Works for me.

> ----------------------
> File system problem (weird)
> 
> 
> I had a shell script "x." which mysteriously was renamed to "x" after the update.
> I could rename it back to "x.", though.

Files with trailing dots (or spaces) are not supported by native Windows
apps and, FWIW, by Cygwin 1.5.  Since Cygwin 1.7 uses native NT
functions for file access exclusively, this restriction doesn't apply to
1.7 anymore.  I can't reproduce any problems with 1.7 with such files,
and the 1.5 behaviour is normal and expected sice the underlying Win32
functions can't handle these files.  How and what should have
mysteriously renamed the file in the first place beats me.

> After I reverted to cygwin 1.5 (for network problems described above), 
> the file is not available anymore; it appears in ls -l as follows:
> ??????????? ? ?              ?         ?            ? x.
> and is not accessible by either "x." or "x" from either cygwin or Windows.
> (Since I cannot create another "y." now, I am not sure how I originally created the "x." file, 
> but it had been there and I regularly called it as "x." on the command line.)

Sorry, I have some doubts.  Neither native Win32 apps, nor Cygwin 1.5
apps can access these files since the trailing dots and spaces
restriction is implied by the Win32 layer.  Is that a file on the NFS
share?  If so, there's a chance that the hummingbird NFS client is doing
some translations for the sake of Win32 apps, but that's not under
Cygwin's control.  Using Cygwin 1.7 I can create and manipulate these
files fine, on local NTFS file systems as well as on NFS shares (using
the MS client).  With 1.5 or native apps, no chance.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat
#include <stdio.h>
#include <string.h>
#include <sys/cygwin.h>
#define _WIN32_WINNT 0x0600
#include <windows.h>
#include <ddk/ntifs.h>
#include <wchar.h>

#ifndef FILE_READ_ONLY_VOLUME
#define FILE_READ_ONLY_VOLUME 0x80000
#endif
#ifndef FILE_SEQUENTIAL_WRITE_ONCE
#define FILE_SEQUENTIAL_WRITE_ONCE 0x100000
#endif
#ifndef FILE_SUPPORTS_TRANSACTIONS
#define FILE_SUPPORTS_TRANSACTIONS 0x200000
#endif

typedef struct _FILE_FS_OBJECTID_INFORMATION
{
  UCHAR ObjectId[16];
  UCHAR ExtendedInfo[48];
} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;

BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
BOOLEAN NTAPI RtlTimeToSecondsSince1970 (PLARGE_INTEGER, PULONG);

int __stdcall
sys_wcstombs (char *tgt, int tlen, const WCHAR *src, int slen)
{
  int ret;
    
  ret = WideCharToMultiByte (GetOEMCP (), 0, src, slen, tgt, tlen, NULL, NULL);
  if (ret)
    tgt[ret < tlen ? ret : tlen - 1] = '\0';
  return ret;
}   

#define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
#define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
#pragma pack(push,4)
struct smb_extended_info { 
  DWORD         samba_magic;             /* Always SAMBA_EXTRA_INFO_MAGIC */
  DWORD         samba_version;           /* Major/Minor/Release/Revision */
  DWORD         samba_subversion;        /* Prerelease/RC/Vendor patch */
  LARGE_INTEGER samba_gitcommitdate;
  char   samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
};
#pragma pack(pop)

void
print_objectid (PFILE_FS_OBJECTID_INFORMATION pfi)
{
      struct smb_extended_info *ei = (struct smb_extended_info *)
				     &pfi->ExtendedInfo;
      time_t t;
      int i;

      printf ("Object Id          : ");
      for (i = 0; i < 16; ++i)
        printf ("%02x ", pfi->ObjectId[i]);
      puts ("");
      printf ("Extended Info      : ");
      if (ei->samba_magic == SAMBA_EXTENDED_INFO_MAGIC)
        {
	  printf ("Samba!!!\n");
	  printf ("                   : magic          <%08lx>\n", ei->samba_magic);
	  printf ("                   : version        <%08lx>\n", ei->samba_version);
	  printf ("                   : subversion     <%08lx>\n", ei->samba_subversion);
	  RtlTimeToSecondsSince1970 (&ei->samba_gitcommitdate, &t);
	  printf ("                   : GIT commit     <%.24s>\n", ctime (&t));
	  printf ("                   : version string <%s>", ei->samba_version_string);
	}
      else
        printf ("Not Samba");
      for (i = 0; i < 48; ++i)
	{
	  if (i == 0 || i == 16 || i == 32)
	    printf ("\n                     ");
	  printf ("%02x ", pfi->ExtendedInfo[i]);
	}
      puts ("");
}

int
main (int argc, char **argv)
{
  char winpath[256];
  DWORD flags = 0;
  HANDLE h;
  UNICODE_STRING wpath;
  UNICODE_STRING upath;
  OBJECT_ATTRIBUTES attr;
  IO_STATUS_BLOCK io;
  NTSTATUS stat;
  ULONG ret;
  char buf[1024];
  char name[256];

  if (argc < 2)
    {
      fprintf (stderr, "usage: %s path\n", argv[0]);
      return 1;
    }
  cygwin_conv_to_full_win32_path (argv[1], winpath);
  if (!RtlCreateUnicodeStringFromAsciiz (&wpath, winpath))
    {
      fprintf (stderr, "RtlCreateUnicodeStringFromAsciiz failed\n");
      return 1;
    }
  if (!RtlDosPathNameToNtPathName_U (wpath.Buffer, &upath, NULL, NULL))
    {
      fprintf (stderr, "RtlDosPathNameToNtPathName_U failed\n");
      RtlFreeUnicodeString (&wpath);
      return 1;
    }
  InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);

  stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS,
		     FILE_OPEN_FOR_BACKUP_INTENT);
  if (!NT_SUCCESS (stat) && stat == STATUS_NO_MEDIA_IN_DEVICE)
    {
      upath.Length = 6 * sizeof (WCHAR);
      stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, 0);
    }
  if (!NT_SUCCESS (stat))
    {
      char buf[1024];
      wcstombs (buf, upath.Buffer, upath.Length / sizeof (WCHAR));
      buf[upath.Length / sizeof (WCHAR)] = '\0';
      fprintf (stderr, "ZwOpenFile(%s) failed, %08x\n", buf, stat);
      return 1;
    }

  stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024,
				       FileFsDeviceInformation);
  if (NT_SUCCESS (stat))
    {
      PFILE_FS_DEVICE_INFORMATION pfi =
	    (PFILE_FS_DEVICE_INFORMATION) buf;
      printf ("Device Type        : %lx\n", pfi->DeviceType);
      printf ("Characteristics    : %lx\n", pfi->Characteristics);
    }
  else
    fprintf (stderr, "FileFsDeviceInformation failed, %08lx\n", stat);

  stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024,
				       FileFsObjectIdInformation);
  if (NT_SUCCESS (stat))
    print_objectid ((PFILE_FS_OBJECTID_INFORMATION) buf);
  else
    fprintf (stderr, "FileFsObjectIdInformation failed, %08lx\n", stat);

  stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024,
				       FileFsVolumeInformation);
  if (NT_SUCCESS (stat))
    {
      PFILE_FS_VOLUME_INFORMATION pfi =
	    (PFILE_FS_VOLUME_INFORMATION) buf;
      if (pfi->VolumeLabelLength)
	{
	  sys_wcstombs (name, 256, pfi->VolumeLabel,
			pfi->VolumeLabelLength / sizeof (WCHAR));
	  printf ("Volume Name        : <%s>\n", name);
	}
      else
	printf ("Volume Name        : <>\n");
      printf ("Serial Number      : %lu\n", pfi->VolumeSerialNumber);
    }
  else
    fprintf (stderr, "FileFsVolumeInformation failed, %08lx\n", stat);

  stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024,
				       FileFsAttributeInformation);
  if (NT_SUCCESS (stat))
    {
      PFILE_FS_ATTRIBUTE_INFORMATION pfi =
	    (PFILE_FS_ATTRIBUTE_INFORMATION) buf;
      printf ("Max Filenamelength : %lu\n",pfi->MaximumComponentNameLength);
      sys_wcstombs (name, 256, pfi->FileSystemName,
		    pfi->FileSystemNameLength / sizeof (WCHAR));
      printf ("Filesystemname     : <%s>\n", name);
      printf ("Flags              : %lx\n",
	      flags = pfi->FileSystemAttributes);

      printf ("  FILE_CASE_SENSITIVE_SEARCH  : %s\n",
	      (flags & FILE_CASE_SENSITIVE_SEARCH) ? "TRUE" : "FALSE");
      printf ("  FILE_CASE_PRESERVED_NAMES   : %s\n",
	      (flags & FILE_CASE_PRESERVED_NAMES) ? "TRUE" : "FALSE");
      printf ("  FILE_UNICODE_ON_DISK        : %s\n",
	      (flags & FILE_UNICODE_ON_DISK) ? "TRUE" : "FALSE");
      printf ("  FILE_PERSISTENT_ACLS        : %s\n",
	      (flags & FILE_PERSISTENT_ACLS) ? "TRUE" : "FALSE");
      printf ("  FILE_FILE_COMPRESSION       : %s\n",
	      (flags & FILE_FILE_COMPRESSION) ? "TRUE" : "FALSE");
      printf ("  FILE_VOLUME_QUOTAS          : %s\n",
	      (flags & FILE_VOLUME_QUOTAS) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_SPARSE_FILES  : %s\n",
	      (flags & FILE_SUPPORTS_SPARSE_FILES) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_REPARSE_POINTS: %s\n",
	      (flags & FILE_SUPPORTS_REPARSE_POINTS) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_REMOTE_STORAGE: %s\n",
	      (flags & FILE_SUPPORTS_REMOTE_STORAGE) ? "TRUE" : "FALSE");
      printf ("  FILE_VOLUME_IS_COMPRESSED   : %s\n",
	      (flags & FILE_VOLUME_IS_COMPRESSED) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_OBJECT_IDS    : %s\n",
	      (flags & FILE_SUPPORTS_OBJECT_IDS) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_ENCRYPTION    : %s\n",
	      (flags & FILE_SUPPORTS_ENCRYPTION) ? "TRUE" : "FALSE");
      printf ("  FILE_NAMED_STREAMS          : %s\n",
	      (flags & FILE_NAMED_STREAMS) ? "TRUE" : "FALSE");
      printf ("  FILE_READ_ONLY_VOLUME       : %s\n",
	      (flags & FILE_READ_ONLY_VOLUME) ? "TRUE" : "FALSE");
      printf ("  FILE_SEQUENTIAL_WRITE_ONCE  : %s\n",
	      (flags & FILE_SEQUENTIAL_WRITE_ONCE) ? "TRUE" : "FALSE");
      printf ("  FILE_SUPPORTS_TRANSACTIONS  : %s\n",
	      (flags & FILE_SUPPORTS_TRANSACTIONS) ? "TRUE" : "FALSE");
    }
  else
    fprintf (stderr, "FileFsAttributeInformation failed, %08lx\n", stat);

  ZwClose (h);
  RtlFreeUnicodeString (&upath);
  RtlFreeUnicodeString (&wpath);
  return 0;
}

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]