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/04/29 08:49:18 UTC

svn commit: r769681 - in /commons/sandbox/runtime/trunk/src: main/native/os/win32/group.c main/native/os/win32/user.c test/org/apache/commons/runtime/TestGroup.java

Author: mturk
Date: Wed Apr 29 06:49:17 2009
New Revision: 769681

URL: http://svn.apache.org/viewvc?rev=769681&view=rev
Log:
Implement group and user lists on win32

Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/win32/group.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/user.c
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java

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=769681&r1=769680&r2=769681&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 Wed Apr 29 06:49:17 2009
@@ -142,7 +142,7 @@
     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);            
+        SET_IFIELD_C(0001, grp, pb->lgrpi1_comment);
         NetApiBufferFree(pb);
     }
     else {
@@ -180,3 +180,103 @@
 
     return V2Z(EqualSid(gida, gidb));
 }
+
+ACR_JNI_EXPORT_DECLARE(jobjectArray, Group, enum0)(ACR_JNISTDARGS)
+{
+
+    DWORD resumehandle = 0, total;
+    PGROUP_INFO_0 pb;
+    DWORD  res, dwRec, n, i = 0;
+    jsize j = 0, ngroups = 0;
+    jobjectArray grps = NULL;
+
+    UNREFERENCED_O;
+    do {
+        res = NetLocalGroupEnum(NULL, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                                &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            ngroups += dwRec;
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+    if (ngroups)
+        grps = (*_E)->NewObjectArray(_E, ngroups, _clazzn.i, NULL);
+    if (!grps)
+        return NULL;
+    resumehandle = 0;
+    do {
+        res = NetLocalGroupEnum(NULL, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                                &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            for (n = 0; n < dwRec; n++) {
+                if (j < ngroups) {
+                    jobject gid = ACR_GroupObjectCreate(_E, pb[n].grpi0_name);
+                    if ((*_E)->ExceptionCheck(_E) || gid == NULL) {
+                        NetApiBufferFree(pb);
+                        grps = NULL;
+                        goto cleanup;
+                    }
+                    (*_E)->SetObjectArrayElement(_E, grps, j, gid);
+                    (*_E)->DeleteLocalRef(_E, gid);
+                }
+                j++;
+            }
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+
+
+cleanup:
+    return grps;
+
+}
+
+ACR_JNI_EXPORT_DECLARE(jobjectArray, Group, enum1)(ACR_JNISTDARGS)
+{
+
+    DWORD resumehandle = 0, total;
+    PGROUP_INFO_0 pb;
+    DWORD  res, dwRec, n, i = 0;
+    jsize j = 0, ngroups = 0;
+    jobjectArray grps = NULL;
+
+    UNREFERENCED_O;
+    do {
+        res = NetGroupEnum(NULL, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                           &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            ngroups += dwRec;
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+    if (ngroups)
+        grps = (*_E)->NewObjectArray(_E, ngroups, _clazzn.i, NULL);
+    if (!grps)
+        return NULL;
+    resumehandle = 0;
+    do {
+        res = NetGroupEnum(NULL, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                           &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            for (n = 0; n < dwRec; n++) {
+                if (j < ngroups) {
+                    jobject gid = ACR_GroupObjectCreate(_E, pb[n].grpi0_name);
+                    if ((*_E)->ExceptionCheck(_E) || gid == NULL) {
+                        NetApiBufferFree(pb);
+                        grps = NULL;
+                        goto cleanup;
+                    }
+                    (*_E)->SetObjectArrayElement(_E, grps, j, gid);
+                    (*_E)->DeleteLocalRef(_E, gid);
+                }
+                j++;
+            }
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+
+
+cleanup:
+    return grps;
+
+}

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=769681&r1=769680&r2=769681&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 Wed Apr 29 06:49:17 2009
@@ -284,3 +284,53 @@
 
     return V2Z(EqualSid(uida, uidb));
 }
+
+ACR_JNI_EXPORT_DECLARE(jobjectArray, User, enum0)(ACR_JNISTDARGS)
+{
+
+    DWORD resumehandle = 0, total;
+    PUSER_INFO_0 pb;
+    DWORD  res, dwRec, n, i = 0;
+    jsize j = 0, nusers = 0;
+    jobjectArray usrs = NULL;
+
+    UNREFERENCED_O;
+    do {
+        res = NetUserEnum(NULL, 0, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                          &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            nusers += dwRec;
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+    if (nusers)
+        usrs = (*_E)->NewObjectArray(_E, nusers, _clazzn.i, NULL);
+    if (!usrs)
+        return NULL;
+    resumehandle = 0;
+    do {
+        res = NetUserEnum(NULL, 0, 0, (LPBYTE *)&pb, MAX_PREFERRED_LENGTH,
+                          &dwRec, &total, (LPDWORD)&resumehandle );
+        if ((res == ERROR_SUCCESS) || (res == ERROR_MORE_DATA)) {
+            for (n = 0; n < dwRec; n++) {
+                if (j < nusers) {
+                    jobject uid = ACR_UserObjectCreate(_E, pb[n].usri0_name);
+                    if ((*_E)->ExceptionCheck(_E) || uid == NULL) {
+                        NetApiBufferFree(pb);
+                        usrs = NULL;
+                        goto cleanup;
+                    }
+                    (*_E)->SetObjectArrayElement(_E, usrs, j, uid);
+                    (*_E)->DeleteLocalRef(_E, uid);
+                }
+                j++;
+            }
+            NetApiBufferFree(pb);
+        }
+    } while (res == ERROR_MORE_DATA);
+
+
+cleanup:
+    return usrs;
+
+}

Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java?rev=769681&r1=769680&r2=769681&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java Wed Apr 29 06:49:17 2009
@@ -84,7 +84,7 @@
             Group[] groups = Group.getGlobalGroups();
 
             assertNotNull("Group" + groups);
-            assertTrue("Size", groups.length > 1);
+            assertTrue("Size", groups.length > 0);
             System.out.println();
             System.out.println("G Groups   " + groups.length);
         } catch (UnsupportedOperationException ex) {