You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/05/02 15:11:00 UTC

svn commit: r770950 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/Group.java native/include/arch/windows/acr_arch_private.h native/os/win32/group.c native/os/win32/user.c

Author: mturk
Date: Sat May  2 13:10:59 2009
New Revision: 770950

URL: http://svn.apache.org/viewvc?rev=770950&view=rev
Log:
Fix local and global group namings

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Group.java
    commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h
    commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Group.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Group.java?rev=770950&r1=770949&r2=770950&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Group.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Group.java Sat May  2 13:10:59 2009
@@ -107,7 +107,7 @@
     public static Group getEffective()
         throws IOException, SecurityException, NoSuchObjectException
     {
-        Group g = get1();
+        Group g = get2();
         if (g == null)
             throw new NoSuchObjectException("Effective group not found.");
         return g;

Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h?rev=770950&r1=770949&r2=770950&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h Sat May  2 13:10:59 2009
@@ -64,6 +64,7 @@
  */
 PSID         ACR_GetSidFromAccountName(LPCWSTR name, PSID_NAME_USE sidtype);
 SID_NAME_USE ACR_GetAccountNameFromSid(LPWSTR buf, size_t blen, PSID psid);
+SID_NAME_USE ACR_GetAccountSidType(PSID psid);
 LPVOID       ACR_GetTokenInformation(JNIEnv *_E, HANDLE h, TOKEN_INFORMATION_CLASS ic);
 
 /**

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c?rev=770950&r1=770949&r2=770950&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c Sat May  2 13:10:59 2009
@@ -139,7 +139,9 @@
     }
     (*_E)->DeleteLocalRef(_E, gid);
 
-    rc =  NetGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
+    rc = NetLocalGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
+    if (rc == NERR_GroupNotFound)
+        rc = NetGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
     if (rc == ERROR_SUCCESS) {
         SET_IFIELD_W(0000, grp, pb->lgrpi1_name);
         SET_IFIELD_C(0001, grp, pb->lgrpi1_comment);
@@ -194,13 +196,18 @@
         ACR_DescriptorCleanup(_E, grp);
         return NULL;
     }
-
-    rc =  NetGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
+    rc = NetLocalGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
+    if (rc == NERR_GroupNotFound || rc == ERROR_NO_SUCH_ALIAS)
+        rc = NetGroupGetInfo(NULL, name, 1, (LPBYTE *)&pb);
     if (rc == ERROR_SUCCESS) {
         SET_IFIELD_W(0000, grp, pb->lgrpi1_name);
         SET_IFIELD_C(0001, grp, pb->lgrpi1_comment);
         NetApiBufferFree(pb);
     }
+    else if ((rc == NERR_GroupNotFound  || rc == ERROR_NO_SUCH_ALIAS) &&
+             sidtype == SidTypeGroup) {
+        SET_IFIELD_W(0000, grp, name);
+    }
     else {
         ACR_DescriptorCleanup(_E, gid);
         ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
@@ -208,7 +215,6 @@
         return NULL;
     }
     if (ConvertSidToStringSidW(sid, &ssid)) {
-
         SET_IFIELD_W(0002, grp, ssid);
         LocalFree(ssid);
     }
@@ -275,7 +281,9 @@
     jobject gid = NULL;
     DWORD   i, rc  = ERROR_SUCCESS;
     HANDLE  token;
+    SID_NAME_USE  sidtype;
     PTOKEN_GROUPS grp = NULL;
+    PTOKEN_OWNER  own = NULL;
 
     UNREFERENCED_O;
     if (!OpenThreadToken(GetCurrentThread(),
@@ -299,20 +307,28 @@
             return NULL;
         }
     }
-    grp = ACR_GetTokenInformation(_E, token, TokenGroups);
-    if (!grp) {
-        goto cleanup;
+    own = ACR_GetTokenInformation(_E, token, TokenOwner);
+    if (own) {
+        sidtype = ACR_GetAccountSidType(own->Owner);
+        if (sidtype == SidTypeGroup || sidtype == SidTypeWellKnownGroup)
+            gid = ACR_GroupObjectCreateFromId(_E, own->Owner);
+        free(own);
     }
-    for (i = 0; i < grp->GroupCount; i++) {
-        if (grp->Groups[i].Attributes & SE_GROUP_OWNER) {
-            gid = ACR_GroupObjectCreateFromId(_E, grp->Groups[i].Sid);
-            if (!gid) {
-                goto cleanup;
+    if (!gid) {
+        grp = ACR_GetTokenInformation(_E, token, TokenGroups);
+        if (!grp) {
+            goto cleanup;
+        }
+        for (i = 0; i < grp->GroupCount; i++) {
+            if (grp->Groups[i].Attributes & SE_GROUP_OWNER) {
+                gid = ACR_GroupObjectCreateFromId(_E, grp->Groups[i].Sid);
+                if (!gid) {
+                    goto cleanup;
+                }
+                break;
             }
-            break;
         }
     }
-
 cleanup:
     if (grp)
         free(grp);

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c?rev=770950&r1=770949&r2=770950&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c Sat May  2 13:10:59 2009
@@ -460,6 +460,7 @@
     usr = ACR_GetTokenInformation(_E, token, TokenOwner);
     if (usr) {
         SID_NAME_USE sidtype = ACR_GetAccountSidType(usr->Owner);
+        fprintf(stderr, "NUGI is %d\n", sidtype);
         if (sidtype == SidTypeUser)
             uid = ACR_UserObjectCreateFromId(_E, usr->Owner);
         free(usr);