/dev/ptmx fails with Azure accounts

Corinna Vinschen corinna-cygwin@cygwin.com
Fri Aug 5 11:24:00 GMT 2016


On Aug  4 09:00, Corinna Vinschen wrote:
> On Aug  3 15:05, rmora@aboutgolf.com wrote:
> > [...]
> > Unknown+User@Lenovo-PC /cygdrive/c/cygwin64
> > $ ./azure-check2
> >   Sid: S-1-12-1-2043906341-1249388050-2635137163-399631282
> > Dom\Name: AzureAD\RussellMora
> > Primary Group:
> >   Sid: S-1-12-1-2043906341-1249388050-2635137163-399631282
> >   Dom\Name: AzureAD\RussellMora
> > NetUserGetInfo: 53
> > 
> > Unknown+User@Lenovo-PC /cygdrive/c/cygwin64
> > $
> > 
> > (As an aside, I assume that the fact that the permissions on the
> > compiled executable are totally messed up, and thus the executable
> > won't run until I fix them via Windows, is incidental to the fact that
> > I am running under "Unknown+User" and thus you don't want any
> > information on that as well.....)
> 
> Good thinking :)
> 
> Can you please try the attached testcase?  Probably my last straw.  If
> that doesn't work as desired, support for AzureAD accounts will be very
> limited.

I guess you're already on vacation, but never mind.

I improved my testcase a bit and attached it to this mail.  Can you please
try this one when you're back?


Thanks a lot,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
#include <stdio.h>
#include <wchar.h>
#define _WIN32_WINNT 0x0a00
#define WINVER 0x0a00
#include <windows.h>
#include <lm.h>
#include <dsgetdc.h>
#include <sddl.h>

int
main ()
{
  HANDLE tok;
  PTOKEN_USER tp = (PTOKEN_USER) malloc (65536);
  DWORD ret;
  LPSTR str;
  WCHAR name[256];
  WCHAR dom[256];
  DWORD nlen, dlen;
  SID_NAME_USE type;
  PDOMAIN_CONTROLLER_INFOW pci;
  NET_API_STATUS status;
  PUSER_INFO_3 ui3;
  PUSER_INFO_24 ui24;

  if (!OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &tok))
    {
      printf ("OpenProcessToken: %u\n", GetLastError ());
      return 1;
    }
  if (!GetTokenInformation (tok, TokenUser, tp, 65536, &ret))
    {
      printf ("GetTokenInformation(user): %u\n", GetLastError ());
      return 1;
    }
  ConvertSidToStringSidA (tp->User.Sid, &str);
  printf ("  Sid: %s\n", str);
  LocalFree (str);
  nlen = dlen = 256;
  if (LookupAccountSidW (NULL, tp->User.Sid, name, &nlen, 
			 dom, &dlen, &type))
    printf ("Dom\\Name: %ls\\%ls\n", dom, name);
  else
    printf ("LookupAccountSidW: %u\n", GetLastError ());

  ret = DsGetDcNameW (NULL, dom, NULL, NULL,
		      DS_IS_FLAT_NAME | DS_RETURN_DNS_NAME, &pci);
  if (ret != ERROR_SUCCESS)
    {
      printf ("DsGetDcNameW: %u\n", status);
      pci->DomainControllerName = NULL;
    }

  status = NetUserGetInfo (NULL, name, 3, (PBYTE *) &ui3);
  if (status != NERR_Success)
    printf ("NetUserGetInfo(NULL, 3): %u\n", status);
  else
    {
      printf ("UserInfo NULL, 3:\n");
      printf ("  Name: %ls\n", ui3->usri3_name);
      NetApiBufferFree (ui3);
    }
  status = NetUserGetInfo (NULL, name, 24, (PBYTE *) &ui24);
  if (status != NERR_Success)
    printf ("NetUserGetInfo(NULL, 24): %u\n", status);
  else
    {
      printf ("UserInfo NULL, 24:\n");
      printf ("  InternetIdentity: %d\n", ui24->usri24_internet_identity);
      printf ("  Flags: 0x%08x\n", ui24->usri24_flags);
      printf ("  ProviderName: %ls\n", ui24->usri24_internet_provider_name);
      printf ("  PrincipalName: %ls\n", ui24->usri24_internet_principal_name);
      ConvertSidToStringSidA (ui24->usri24_user_sid, &str);
      printf ("  Sid: %s\n", str);
      LocalFree (str);
      NetApiBufferFree (ui24);
    }

  if (pci->DomainControllerName)
    {
      status = NetUserGetInfo (pci->DomainControllerName, name,
			       3, (PBYTE *) &ui3);
      if (status != NERR_Success)
	printf ("NetUserGetInfo(%ls, 3): %u\n", pci->DomainControllerName, status);
      else
	{
	  printf ("UserInfo %ls, 3:\n", pci->DomainControllerName);
	  printf ("  Name: %ls\n", ui3->usri3_name);
	  NetApiBufferFree (ui3);
	}

      status = NetUserGetInfo (pci->DomainControllerName, name,
			       24, (PBYTE *) &ui24);
      if (status != NERR_Success)
	printf ("NetUserGetInfo(%ls, 24): %u\n",
		pci->DomainControllerName, status);
      else
	{
	  printf ("UserInfo %ls, 24:\n", pci->DomainControllerName);
	  printf ("  InternetIdentity: %d\n", ui24->usri24_internet_identity);
	  printf ("  Flags: 0x%08x\n", ui24->usri24_flags);
	  printf ("  ProviderName: %ls\n", ui24->usri24_internet_provider_name);
	  printf ("  PrincipalName: %ls\n", ui24->usri24_internet_principal_name);
	  ConvertSidToStringSidA (ui24->usri24_user_sid, &str);
	  printf ("  Sid: %s\n", str);
	  LocalFree (str);
	  NetApiBufferFree (ui24);
	}
    }

  return 0;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin/attachments/20160805/f6446f16/attachment.sig>


More information about the Cygwin mailing list