From 00ef94f3389db4568c3c9825d34febc520807c59 Mon Sep 17 00:00:00 2001
From: Corinna Vinschen <corinna@vinschen.de>
Date: Tue, 29 May 2012 12:46:01 +0000
Subject: [PATCH] 	* Makefile.in (LIBS): Re-add advapi32.dll.  Explain
 why. 	* make-64bit-version-with-mingw-w64.sh (LIBS): Ditto. 	* cyglsa.c:
 Drop NTDLL function declarations.  Use equivalent advapi32 	functions
 again, throughout. 	* cyglsa64.dll: Regenerate.

---
 winsup/lsaauth/ChangeLog                      |   8 +++
 winsup/lsaauth/Makefile.in                    |   6 ++-
 winsup/lsaauth/cyglsa.c                       |  46 +++++++-----------
 winsup/lsaauth/cyglsa64.dll                   | Bin 8704 -> 8704 bytes
 .../make-64bit-version-with-mingw-w64.sh      |   6 ++-
 5 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/winsup/lsaauth/ChangeLog b/winsup/lsaauth/ChangeLog
index bbb763a1e..b78696af2 100644
--- a/winsup/lsaauth/ChangeLog
+++ b/winsup/lsaauth/ChangeLog
@@ -1,3 +1,11 @@
+2012-05-29  Corinna Vinschen  <corinna@vinschen.de>
+
+	* Makefile.in (LIBS): Re-add advapi32.dll.  Explain why.
+	* make-64bit-version-with-mingw-w64.sh (LIBS): Ditto.
+	* cyglsa.c: Drop NTDLL function declarations.  Use equivalent advapi32
+	functions again, throughout.
+	* cyglsa64.dll: Regenerate.
+
 2011-05-10  Corinna Vinschen  <corinna@vinschen.de>
 
 	* Makefile.in: Don't override CC.
diff --git a/winsup/lsaauth/Makefile.in b/winsup/lsaauth/Makefile.in
index 948c08b34..bb585dfda 100644
--- a/winsup/lsaauth/Makefile.in
+++ b/winsup/lsaauth/Makefile.in
@@ -41,7 +41,11 @@ ifdef MINGW_CC
 override CC:=${MINGW_CC}
 endif
 
-LIBS		:= -lkernel32 -lntdll
+# Never again try to remove advapi32.  It does not matter if the DLL calls
+# advapi32 functions or the equivalent ntdll functions.
+# But if the LSA authentication DLL is not linked against advapi32, it's
+# not recognized by LSA.
+LIBS		:= -ladvapi32 -lkernel32 -lntdll
 
 DLL	:=	cyglsa.dll
 DEF_FILE:=	cyglsa.def
diff --git a/winsup/lsaauth/cyglsa.c b/winsup/lsaauth/cyglsa.c
index e64d0e11f..341fdd12c 100644
--- a/winsup/lsaauth/cyglsa.c
+++ b/winsup/lsaauth/cyglsa.c
@@ -1,6 +1,6 @@
 /* cyglsa.c: LSA authentication module for Cygwin
 
-   Copyright 2006, 2008, 2010, 2011 Red Hat, Inc.
+   Copyright 2006, 2008, 2010, 2011, 2012 Red Hat, Inc.
 
    Written by Corinna Vinschen <corinna@vinschen.de>
 
@@ -41,13 +41,6 @@ DllMain (HINSTANCE inst, DWORD reason, LPVOID res)
 #ifndef NT_SUCCESS
 #define NT_SUCCESS(s)	((s) >= 0)
 #endif
-NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID);
-NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
-NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID *);
-ULONG NTAPI RtlLengthSid (PSID);
-PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG);
-PUCHAR NTAPI RtlSubAuthorityCountSid (PSID);
-BOOLEAN NTAPI RtlValidSid (PSID);
 /* These standard POSIX functions are implemented in NTDLL and exported.
    There's just no header to define them and using wchar.h from mingw
    or Cygwin seems wrong somehow. */
@@ -123,7 +116,7 @@ print_sid (const char *prefix, int idx, PISID sid)
     cyglsa_printf ("NULL\n");
   else if (IsBadReadPtr (sid, 8))
     cyglsa_printf ("INVALID POINTER\n");
-  else if (!RtlValidSid ((PSID) sid))
+  else if (!IsValidSid ((PSID) sid))
     cyglsa_printf ("INVALID SID\n");
   else if (IsBadReadPtr (sid, 8 + sizeof (DWORD) * sid->SubAuthorityCount))
     cyglsa_printf ("INVALID POINTER SPACE\n");
@@ -203,11 +196,9 @@ print_dacl (PACL dacl)
         {
 	  PVOID vace;
 	  PACCESS_ALLOWED_ACE ace;
-	  NTSTATUS stat;
 
-	  stat = RtlGetAce (dacl, i, &vace);
-	  if (!NT_SUCCESS (stat))
-	    cyglsa_printf ("[%lu] RtlGetAce status 0x%08lx\n", i, stat);
+	  if (!GetAce (dacl, i, &vace))
+	    cyglsa_printf ("[%lu] GetAce error %lu\n", i, GetLastError ());
 	  else
 	    {
 	      ace = (PACCESS_ALLOWED_ACE) vace;
@@ -503,8 +494,8 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
       tokinf->ExpirationTime = authinf->inf.ExpirationTime;
       /* User SID */
       src_sid = (PSID) (base + authinf->inf.User.User.Sid);
-      size = RtlLengthSid (src_sid);
-      RtlCopySid (size, (PSID) tptr, src_sid);
+      size = GetLengthSid (src_sid);
+      CopySid (size, (PSID) tptr, src_sid);
       tokinf->User.User.Sid = (PSID) tptr;
       tptr += size;
       tokinf->User.User.Attributes = authinf->inf.User.User.Attributes;
@@ -518,16 +509,16 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
       for (i = 0; i < src_grps->GroupCount; ++i)
 	{
 	  src_sid = (PSID) (base + src_grps->Groups[i].Sid);
-	  size = RtlLengthSid (src_sid);
-	  RtlCopySid (size, (PSID) tptr, src_sid);
+	  size = GetLengthSid (src_sid);
+	  CopySid (size, (PSID) tptr, src_sid);
 	  tokinf->Groups->Groups[i].Sid = (PSID) tptr;
 	  tptr += size;
 	  tokinf->Groups->Groups[i].Attributes = src_grps->Groups[i].Attributes;
 	}
       /* Primary Group SID */
       src_sid = (PSID) (base + authinf->inf.PrimaryGroup.PrimaryGroup);
-      size = RtlLengthSid (src_sid);
-      RtlCopySid (size, (PSID) tptr, src_sid);
+      size = GetLengthSid (src_sid);
+      CopySid (size, (PSID) tptr, src_sid);
       tokinf->PrimaryGroup.PrimaryGroup = (PSID) tptr;
       tptr += size;
       /* Privileges */
@@ -554,8 +545,7 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
 	 not done in the 64 bit code above for hopefully obvious reasons... */
       LUID logon_sid_id;
 
-      if (must_create_logon_sid
-	  && !NT_SUCCESS (NtAllocateLocallyUniqueId (&logon_sid_id)))
+      if (must_create_logon_sid && !AllocateLocallyUniqueId (&logon_sid_id))
 	return STATUS_INSUFFICIENT_RESOURCES;
 
       if (!(tokinf = funcs->AllocateLsaHeap (authinf->inf_size)))
@@ -575,13 +565,13 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
 		((PBYTE) tokinf + (LONG_PTR) tokinf->Groups->Groups[i].Sid);
 	  if (must_create_logon_sid
 	      && tokinf->Groups->Groups[i].Attributes & SE_GROUP_LOGON_ID
-	      && *RtlSubAuthorityCountSid (tokinf->Groups->Groups[i].Sid) == 3
-	      && *RtlSubAuthoritySid (tokinf->Groups->Groups[i].Sid, 0)
+	      && *GetSidSubAuthorityCount (tokinf->Groups->Groups[i].Sid) == 3
+	      && *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 0)
 		 == SECURITY_LOGON_IDS_RID)
 	    {
-	      *RtlSubAuthoritySid (tokinf->Groups->Groups[i].Sid, 1)
+	      *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 1)
 	      = logon_sid_id.HighPart;
-	      *RtlSubAuthoritySid (tokinf->Groups->Groups[i].Sid, 2)
+	      *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 2)
 	      = logon_sid_id.LowPart;
 	    }
 	}
@@ -608,12 +598,12 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
 		(PVOID)((LONG_PTR) &authinf->inf + authinf->inf_size));
 
   /* Create logon session. */
-  stat = NtAllocateLocallyUniqueId (logon_id);
-  if (!NT_SUCCESS (stat))
+  if (!AllocateLocallyUniqueId (logon_id))
     {
       funcs->FreeLsaHeap (*tok);
       *tok = NULL;
-      cyglsa_printf ("NtAllocateLocallyUniqueId status 0x%08lx\n", stat);
+      cyglsa_printf ("AllocateLocallyUniqueId failed: Win32 error %lu\n",
+		     GetLastError ());
       return STATUS_INSUFFICIENT_RESOURCES;
     }
   stat = funcs->CreateLogonSession (logon_id);
diff --git a/winsup/lsaauth/cyglsa64.dll b/winsup/lsaauth/cyglsa64.dll
index 14f1f6cff1e5eba2d2f8ab7800e35ed4edf8d547..f3324d26ade36b5aa606ec6c2e4bff8e18b4dd12 100644
GIT binary patch
delta 2447
zcmc&#drVVj6#wp>Ev2-y6ex9~Ehq|#j37Ehq6N9z?GQwy8mCTBI_ZK^Yw?vix*(40
zg$eoG!$*|)&$7%#h3OQhDX>lV$kJ_@ac*%7%O(xR*EV&EcIVvQVnee1yPLG<e82Pi
ze&>AW+=sW=Tio7~(AodVLLy%`NmgnM%Njcl6tE@NJ1*z5tt@?&tx#NY5z^9;GA=sH
z<JjT>b|>v%&NHpu%h;nVTdAXJMGbR@)+;KQHMCE$spKYbc#*U8sL&C5c~SAr3xovy
z%|1^Y-=;k~oshxfkAlI#XEHNH+98t~kn|psT4|#)Bi<F>91Hk1#LMX!Won}n-E`17
z&kchR85)mSMf<Q=+^!P(fV>bHN?<f`!wd#>C#{U`q;C#4y!ktb=VJW#hr!_I{dQjX
zjc>Y^%?qV^VCs2EAQ1_l0)cPZt|wAqr!oQR0%%ge4@rB*NN2!JiuYGWoboN?iPRgF
znz1R2;{m*gFM<6-n=y|_q(p}iwbC!6Qk6T=HPJt!CM#>vJx<N4OluyxJ;RZed@v25
zcL53nM-|e!BBGF1q<N{RnwGgb60bwN2)FN(jxbV-h=B|`pxU4;MYoGCi_Yfep!@QJ
z$O7u80^|fJFpGgsNaGfzPOM%YQ9v2eijbzGUq_ovIg!Bv3>q-_Gkp|oDLaentM^BS
z8rX})wb=(nZrCRHp;@5}`<@SFXh?y^pO6+pA8-mKPMcOhokP^2&Q;c;>!63!W0idw
z;KtB%>Lg|{y{NXZ4@~r)dQzhnDFc7Q;pEXjVK<=*8ACThCK7sOf@sxCLn}h?NO+fM
zRoMhzPY^B`vj#KS;T)2pXf?q-K6n7zhZ#hxC4w89h(Z~U$>~VmN{_`Djki(f;o}^6
z7;2+G#bl|jK8??r;umVrOlD5g*_sSyH(jHd&ScXLO=5h1l=K*8^P>G8FW~*Th@RHu
zFlu^DGn4VtRPB_fTGB!N#NA*}<h}|xm4xU{HoM>eJA4gBID~-VHz9l~l@MQmr(3kM
z^)3WU5!50Wq`lfQ{Y(UJ+yU?wg6~jsY<8mo1wZmZ0e-&iId~)o2mZna*lT%#g+A2s
zBH^1usjf@`fhH74LV=kID86aCi+IX`=;sw`763T<IS7ns?m`q~#gMEkB<qr86YvN}
zQ8#l$_X-_|&73!6mv0_mG-pc#OMDH8m|zNKmQh%yOZlMw5D$=hf6`K&X+k9m?}fyn
zf=l2%00rj}&phaKJ#ErW)#V~(5m2zZiZS$Kog>9R19)P2y2yPf^aj7>1+Ejeb&>{k
zNaqz=q%TMViK<GhQQ-E#4gWUu?2^dsu?ZKX*J-X4qx<z$%q}{tHzWVd;(zDwmSQw7
zu98_x+u|l5f8u}e?^d7|y%1N%%%Mq!Rm_icv%#Hw5r)o-91m>*fu2Qj6RoiLp00?W
zkP1$}gi4QxZz3H3#4YF$ykLAoFG2JTYK<SqYz6Y<<ii+V1!3sUkP-f*O~(+m(Sz~%
zjls0r<%G1i2h%Q(vVHQpOS15Skgmu40XhD~C_9=znitL^=`-!!<q2M<%XpVHEl;a!
zSZR6I;VE3>usGcAdbb4-HR(<o8_m-7=A<VrFIGG295wltrOx#;aw0j@Htx(A{L)fY
zvc>qTnUL`B2HfgDz*;f3dv0<clV9!%ABB(tHzD}t^+sS-fT=bRax4P#0+zR-BgNQQ
z1rfZq$##cqUzhDc*@jqz9Ff;P+4^OBMYh*v8|L4a*DA<}mqE74A=?;2;s5_BB!LjQ
zl957E2#m&5xrxlLcWqtltRWMb&<F{ch28?k`n8@~43M3SZR3*aI%kcv+K<us_3K;>
z9*4WEdYxk_ymVOHQN7W_;rQuXvn9r?Sn76q9M8bu=~?qU1A(~|7B49*x6R1Os;R3Z
bgvMHo<4d@TGHyW_A|xGXBfswHmL}#OD$!m$

delta 2455
zcmcgteN0nV6u<95ODXgNkqSYeqNpff=UilrjWVe`CK3fZHx-pgqnIKEAG6Fb*a~Cy
z1u45|44P%`E6bL-IW{mlT_r~6f{wVv7`G++ifh-o=&}jAZrwSrx7e7uKX;S%-1|Gf
z^L=mIS=L$Rd1-pO_WVl1)(ujSoxt-c{fCNqx}yJT5fActzFP5-gAix`tn~N-(dHC^
z?V$bKIj(r<Y5skl|6NPfih6E8ZBkToadcGiO!+Us5hRQ8xC%G!(}JXE-AG7iyxS`#
z3B8(=`Gok6{v8VWM;Q}HzE?Daba`8m@E#I8)TPW#PK_990e=qhHS|+uw$O;%Jn(VO
z5(FnCkbw~;YfvilsNADKu0e(x7%oeYL#1xm%;|=`k641cz65<C>VKxWap~qX+@Aj{
z6cSwRdLpOrNghDM0Qtwk`|(&g(Up2ArKUEjl!Hj?qg`>?xtS3hGwnir9he7pL1?{1
z<doh*w2Xccm#y4`+nIDCZm!af+mGpNRi3#Rx2J;9i5y)B(7OQnL-!;iY=}z4gS0N%
zr&^e&j>a8`FGur1xrC`)`cRQiuc?}qt8qI_YvWBFCAjVUGdh8t3jk^a$iIk#PRKKr
z<W8v9M<q~=wB<-s0S$}RjhK1eh*yBp!~Co3qWEUy8<2m6B?kQ3Sl!6DY&%R~RHg25
zxo@YD8@MwyZ2!w>(rfiemSBa<fdIboctYHkNmu(MX-ku=lc0<^*oO|@p$_$uM|b1a
z0lpy24Z-DAL4H$idNmhvSz7GYU=@%Q-WpxcI{Ka3$Sc!mOu`(c5glEp`3dReCAb~C
zE&J3<X1$!W6~Pe(3X)k>;r1R6!Gh~C1EXvXCjocLoQe<Nb=sF;czhO`ExD_jkE%|*
z63|khnxfn&kgK}OEky1B{VAb9_1jV$f+9dO66bPfXjx(|H%NCR=I1Vh(BNtkGb%l%
z#zunC-Z&XG3D7se4RI8No=IHHrO=7Qhq$k3zGmK{gYzMpcOn#$EMxvkC4mWbJD?tT
zv<9f@5ULM@`dBt0UjIVs(mbqpA@~%68U(+mW11?xfZ&~50NzBfi!RWbk}oL0A>0<p
zIxh4+0Z$lu+o(<3dUGC-_ab=)l2d^Ouhc=rRZzvapiuMS3fiLW_aF)`_Wyx>vpNJf
z4{V1Z5urPr?I^lkI_35>y{^scc+DEVpjc10Ngh?oAP})bm*6KLg2M3!IO1JpJV0W?
zv7F&p&Zt;hG1eQP4wq1Xo?PvPL@a?mKf44@lDQDlqz80HT{)6B02#aNi=pRqHtfGX
zi>sq6^~D*!H)HUc55Su`05(@7%Rq(uGl;(raC$_)nR|iilCm;<s{8OJp*6H7X${vz
z-%iTR@Hw$n|Ke{O@&ZX!TqZ4=wuw7M2dA}U{0gIlP72tOa(L%%%b2TujI<R&B@=Xh
za%Lf<Enoi|v!RY}ZbH%U!{ZHX2f|4cmI{|kwhvum#v;_NIE=<~BF3MiaSs>+5HLj0
zD~LAJv&lsr9=1X`*H#hY@q}_NGkKQDVJ5Y!!}?q79N}MN=LjCLJHqgYe!qN%XCg0r
zzp#dSrnhm_#F;)cOz=jsKF8i#YpfRS<u<W&i_N%GtP@*z8cog|Q=#3d9@3@7^SM=G
zsombRrB1X}!nfVtX5G=y+-j?+zn4xc(oe+VKQmR$G#XB15fb_Q2v6WBobRL#JvMWc
zn_KLN<V8rZnGpP^u8+b@ErfjS=$~ci$OA1dGm}+JZe%j7C1g80zsTeOldm%Q0h6bg
z9Aok_lixBK@yFtJ{O^GeaxjZ!O^uFL(biHGTi0k?OD|>_H)Si<wls*g<qdWlxkT<e
z6LNuvaV~3ewAD1!6S6yIYPcjN7WS349b3h1vMxmd=O^pz4fSxOx3fwfSYfHIvQ$2}
YxS-x{$3{$tk^JXpsNLw|sE1$m4`vN<>Hq)$

diff --git a/winsup/lsaauth/make-64bit-version-with-mingw-w64.sh b/winsup/lsaauth/make-64bit-version-with-mingw-w64.sh
index a93daf8f3..4a8c37c23 100644
--- a/winsup/lsaauth/make-64bit-version-with-mingw-w64.sh
+++ b/winsup/lsaauth/make-64bit-version-with-mingw-w64.sh
@@ -20,6 +20,10 @@ set -e
 CC="x86_64-w64-mingw32-gcc"
 CFLAGS="-fno-exceptions -O0 -Wall -Werror"
 LDFLAGS="-s -nostdlib -Wl,--entry,DllMain,--major-os-version,5,--minor-os-version,2"
-LIBS="-lkernel32 -lntdll"
+# Never again try to remove advapi32.  It does not matter if the DLL calls
+# advapi32 functions or the equivalent ntdll functions.
+# But if the LSA authentication DLL is not linked against advapi32, it's
+# not recognized by LSA.
+LIBS="-ladvapi32 -lkernel32 -lntdll"
 
 $CC $CFLAGS $LDFLAGS -shared -o cyglsa64.dll cyglsa.c cyglsa64.def $LIBS