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) {