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/27 20:00:04 UTC
svn commit: r769072 - in /commons/sandbox/runtime/trunk/src:
main/java/org/apache/commons/runtime/
main/java/org/apache/commons/runtime/exception/
main/java/org/apache/commons/runtime/util/ main/native/
main/native/include/ main/native/os/unix/ main/na...
Author: mturk
Date: Mon Apr 27 18:00:03 2009
New Revision: 769072
URL: http://svn.apache.org/viewvc?rev=769072&view=rev
Log:
Add user and group skeleton
Added:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java (with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java (with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java (with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java (with props)
commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c (with props)
commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c (with props)
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java (with props)
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java (with props)
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor32.java
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor64.java
commons/sandbox/runtime/trunk/src/main/native/Makefile.in
commons/sandbox/runtime/trunk/src/main/native/include/acr.h
commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
commons/sandbox/runtime/trunk/src/main/native/shared/memory.c
commons/sandbox/runtime/trunk/src/main/native/shared/string.c
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java Mon Apr 27 18:00:03 2009
@@ -39,7 +39,7 @@
* If the operation is recoverable the clearerr() should be
* used after the recovery.
*/
- private int IERRNUM;
+ private int IERRNUM;
/*
* Descriptor can be only created from native code.
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor32.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor32.java?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor32.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor32.java Mon Apr 27 18:00:03 2009
@@ -70,7 +70,7 @@
{
if (PHANDLE != 0) {
String h = Integer.toHexString(PHANDLE);
- return "0x" + ("00000000" + h).substring(h.length());
+ return ("00000000" + h).substring(h.length());
}
else if (IHANDLE >= 0) {
return Integer.toString(IHANDLE);
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor64.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor64.java?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor64.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor64.java Mon Apr 27 18:00:03 2009
@@ -70,7 +70,7 @@
{
if (PHANDLE != 0) {
String h = Long.toHexString(PHANDLE);
- return "0x" + ("0000000000000000" + h).substring(h.length());
+ return ("0000000000000000" + h).substring(h.length());
}
else if (IHANDLE >= 0) {
return Integer.toString(IHANDLE);
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,38 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.exception;
+import java.io.IOException;
+
+/**
+ * ClosedDescriptorException thrown when an attempt is made to
+ * invoke an operation on closed {@code Descriptor}.
+ *
+ * @since Runtime 1.0
+ */
+
+public class ClosedDescriptorException extends IOException {
+
+ public ClosedDescriptorException()
+ {
+ super();
+ }
+
+ public ClosedDescriptorException(String msg)
+ {
+ super(msg);
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/ClosedDescriptorException.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,38 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.exception;
+
+/**
+ * NoSuchObjectException thrown when an attempt is made to
+ * invoke an operation on unexisting operating system {@code object}.
+ * This class mimics the os {@code ENOENT} error.
+ *
+ * @since Runtime 1.0
+ */
+
+public class NoSuchObjectException extends Exception {
+
+ public NoSuchObjectException()
+ {
+ super();
+ }
+
+ public NoSuchObjectException(String msg)
+ {
+ super(msg);
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/exception/NoSuchObjectException.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,137 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util;
+
+import org.apache.commons.runtime.Descriptor;
+import org.apache.commons.runtime.exception.NoSuchObjectException;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * Group Information.
+ */
+public final class Group
+{
+
+ private Group()
+ {
+ // No instance.
+ Id = null;
+ }
+
+ private Group(Descriptor id)
+ {
+ Id = id;
+ }
+
+ private static native Group get0(String name);
+ private static native boolean equals0(Descriptor a, Descriptor b);
+
+ /**
+ * Create the {@code Group object from the {@code name}.
+ *
+ * @return {@code Group} obect.
+ * @throws SecurityException if access to an internal group database
+ * is forbidden.
+ * @throws IOException in case of I/O error.
+ * @throws NoSuchObjectException if the group {@code name} doesn't exist.
+ */
+ public static Group get(String name)
+ throws IOException, SecurityException, NoSuchObjectException
+ {
+ Group g = get0(name);
+ if (g == null)
+ throw new NoSuchObjectException("Group '" + name + "' not found.");
+ return g;
+ }
+
+ /**
+ * String that specifies the name of the group account.
+ */
+ public String getName()
+ {
+ return Name;
+ }
+ private String Name;
+
+ /**
+ * String that contains a comment associated with the group. This string can
+ * be a null string.
+ */
+ public String getComment()
+ {
+ return Comment;
+ }
+ private String Comment;
+
+ /**
+ * Returns a string representation of the Group.
+ */
+ public String getGroupId()
+ {
+ return GroupId;
+ }
+ private String GroupId;
+
+ /**
+ * Set to true if the group is Local system group.
+ */
+ public boolean IsLocal()
+ {
+ return isLocal;
+ }
+ private boolean isLocal;
+
+ /**
+ * Specifies the <em>gid_t</em> or <em>PSID</em>
+ * {@code Descriptor} identifier of the group.
+ */
+ public final Descriptor Id;
+
+ /**
+ * Compares this {@code Group} to the specified object.
+ *
+ * @param other a {@code Group}
+ * @return true if the class of this {@code Group} object and the
+ * class of {@code other} are exactly equal, and they point
+ * to the same system group id.
+ */
+ public boolean equals(Object other)
+ {
+ if (other == null)
+ return false;
+ if (other == this)
+ return true;
+ if (Group.class != other.getClass())
+ return false;
+ return equals0(Id, ((Group)other).Id);
+ }
+
+ /**
+ * Returns a string representation of the Group.
+ * The returned string is native representation of the underlying
+ * user descriptor.
+ * @return a string representation of the group id.
+ */
+ @Override
+ public String toString()
+ {
+ return GroupId;
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Group.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,156 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.util;
+
+import org.apache.commons.runtime.Descriptor;
+import org.apache.commons.runtime.exception.NoSuchObjectException;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * User Information.
+ *
+ */
+public final class User
+{
+
+ private User()
+ {
+ // No instance.
+ Id = null;
+ }
+
+ private User(Descriptor id)
+ {
+ Id = id;
+ }
+
+ private static native User get0(String name);
+ private static native boolean equals0(Descriptor a, Descriptor b);
+
+ /**
+ * Create the {@code User} object from the {@code name}.
+ *
+ * @return {@code User} obect.
+ * @throws SecurityException if access to an internal user database
+ * is forbidden.
+ * @throws IOException in case of I/O error.
+ * @throws NoSuchObjectException if the user {@code name} doesn't exist.
+ */
+ public static User get(String name)
+ throws IOException, SecurityException, NoSuchObjectException
+ {
+ User u = get0(name);
+ if (u == null)
+ throw new NoSuchObjectException("User '" + name + "' not found.");
+ return u;
+ }
+
+ /**
+ * String that specifies the name of the user account.
+ */
+ public String getName()
+ {
+ return Name;
+ }
+ private String Name;
+
+ /**
+ * String that contains the full name of the user. This string can be
+ * a null string.
+ */
+ public String getFullName()
+ {
+ return FullName;
+ }
+ private String FullName;
+
+ /**
+ * String that contains a comment associated with the user. This string can
+ * be a null string.
+ */
+ public String getComment()
+ {
+ return Comment;
+ }
+ private String Comment;
+
+ /**
+ * String that contains a comment users Home directory.
+ */
+ public String getHome()
+ {
+ return Home;
+ }
+ private String Home;
+
+ /**
+ * String that contains a user shell.
+ */
+ public String getShell()
+ {
+ return Shell;
+ }
+ private String Shell;
+
+ /**
+ * Returns a string representation of the User.
+ */
+ public String getUserId()
+ {
+ return UserId;
+ }
+ private String UserId;
+
+ /**
+ * Specifies the <em>uid_t</em> or <em>PSID</em>
+ * {@code Descriptor} identifier of the user.
+ */
+ public final Descriptor Id;
+
+ /**
+ * Compares this {@code User} to the specified object.
+ *
+ * @param other a {@code User}
+ * @return true if the class of this {@code User} object and the
+ * class of {@code other} are exactly equal, and they point
+ * to the same system user id.
+ */
+ public boolean equals(Object other)
+ {
+ if (other == null)
+ return false;
+ if (other == this)
+ return true;
+ if (User.class != other.getClass())
+ return false;
+ return equals0(Id, ((User)other).Id);
+ }
+
+ /**
+ * Returns a string representation of the User.
+ * The returned string is native representation of the underlying
+ * user descriptor.
+ * @return a string representation of the user id.
+ */
+ @Override
+ public String toString()
+ {
+ return UserId;
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/User.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Mon Apr 27 18:00:03 2009
@@ -80,6 +80,8 @@
LINUX_OBJS= \
$(SRCDIR)/os/unix/file.$(OBJ) \
$(SRCDIR)/os/unix/main.$(OBJ) \
+ $(SRCDIR)/os/unix/group.$(OBJ) \
+ $(SRCDIR)/os/unix/user.$(OBJ) \
$(SRCDIR)/os/unix/uuid.$(OBJ) \
$(SRCDIR)/os/unix/uutils.$(OBJ) \
$(SRCDIR)/os/linux/platform.$(OBJ) \
@@ -88,6 +90,8 @@
SOLARIS_OBJS= \
$(SRCDIR)/os/unix/file.$(OBJ) \
$(SRCDIR)/os/unix/main.$(OBJ) \
+ $(SRCDIR)/os/unix/group.$(OBJ) \
+ $(SRCDIR)/os/unix/user.$(OBJ) \
$(SRCDIR)/os/unix/uuid.$(OBJ) \
$(SRCDIR)/os/unix/uutils.$(OBJ) \
$(SRCDIR)/os/solaris/platform.$(OBJ) \
@@ -96,6 +100,8 @@
DARWIN_OBJS= \
$(SRCDIR)/os/unix/file.$(OBJ) \
$(SRCDIR)/os/unix/main.$(OBJ) \
+ $(SRCDIR)/os/unix/group.$(OBJ) \
+ $(SRCDIR)/os/unix/user.$(OBJ) \
$(SRCDIR)/os/unix/uuid.$(OBJ) \
$(SRCDIR)/os/unix/uutils.$(OBJ) \
$(SRCDIR)/os/darwin/platform.$(OBJ) \
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr.h?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr.h Mon Apr 27 18:00:03 2009
@@ -208,7 +208,9 @@
typedef int acr_socklen_t;
/* API char type on windows is always WCHAR */
typedef wchar_t acr_pchar_t;
-#else
+typedef PSID acr_uid_t;
+typedef PSID acr_gid_t;
+#else /* !_MSC_VER */
typedef ssize_t acr_ssize_t;
#ifdef _LP64 /* 64-bit Solaris */
typedef long acr_int64_t;
@@ -225,7 +227,9 @@
typedef socklen_t acr_socklen_t;
/* API char type on POSIX is always char (UTF-8) */
typedef char acr_pchar_t;
-#endif
+typedef uid_t acr_uid_t;
+typedef gid_t acr_gid_t;
+#endif /* _MSC_VER */
#if CC_SIZEOF_VOIDP == 8
typedef acr_uint64_t acr_ptr_t;
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h Mon Apr 27 18:00:03 2009
@@ -341,21 +341,21 @@
#define SET_IFIELD_S(I, O, V) \
if (_f##I##n.i && (V)) { \
- jstring _str = (*_E)->NewStringUTF(_E, (V)); \
+ jstring _str = ACR_NewJavaStringA(_E, (V)); \
(*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \
(*_E)->DeleteLocalRef(_E, _str); \
} else (void)(0)
#define SET_IFIELD_N(I, O, V) \
if (_f##I##n.i && (V) && *(V)) { \
- jstring _str = (*_E)->NewStringUTF(_E, (V)); \
+ jstring _str = ACR_NewJavaStringA(_E, (V)); \
(*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \
(*_E)->DeleteLocalRef(_E, _str); \
} else (void)(0)
#define SET_IFIELD_W(I, O, V) \
if (_f##I##n.i && (V)) { \
- jstring _str = (*_E)->NewString(_E, (V), (jsize)wcslen((V))); \
+ jstring _str = ACR_NewJavaStringW(_E, (V)); \
(*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \
(*_E)->DeleteLocalRef(_E, _str); \
} else (void)(0)
@@ -420,6 +420,21 @@
#define CALL_METHODN(T, I, O, ARGS) \
(*_E)->Call##T##Method(_E, (O), _m##I##n.i, ARGS)
+#define SET_SARRAY_A(A, I, V) \
+ if ((A) && (V)) { \
+ jstring _str = ACR_NewJavaStringA(_E, (V)); \
+ (*_E)->SetObjectArrayElement(_E, (A), (I), _str); \
+ (*_E)->DeleteLocalRef(_E, _str); \
+ } else (void)(0)
+
+#define SET_SARRAY_W(A, I, V) \
+ if ((A) && (V)) { \
+ jstring _str = ACR_NewJavaStringW(_E, (V)); \
+ (*_E)->SetObjectArrayElement(_E, (A), (I), _str); \
+ (*_E)->DeleteLocalRef(_E, _str); \
+ } else (void)(0)
+
+
#if defined(DEBUG) || defined(_DEBUG)
/* In DEBUG mode always use statistics */
#ifndef ACR_DO_STATS
Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c Mon Apr 27 18:00:03 2009
@@ -0,0 +1,157 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_arch.h"
+#include "acr_clazz.h"
+#include "acr_error.h"
+#include "acr_memory.h"
+#include "acr_string.h"
+#include "acr_descriptor.h"
+
+#include <pwd.h>
+#include <grp.h>
+
+J_DECLARE_CLAZZ = {
+ NULL,
+ NULL,
+ ACR_CLASS_PATH "util/Group"
+};
+
+J_DECLARE_M_ID(0000) = {
+ NULL,
+ "<init>",
+ "(L" ACR_CLASS_PATH "Descriptor;)V"
+};
+
+J_DECLARE_F_ID(0000) = {
+ NULL,
+ "Name",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0001) = {
+ NULL,
+ "Comment",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0002) = {
+ NULL,
+ "GroupId",
+ "Ljava/lang/String;"
+};
+
+
+J_DECLARE_F_ID(0003) = {
+ NULL,
+ "isLocal",
+ "Z"
+};
+
+ACR_CLASS_LDEF(util_Group)
+{
+ int rv;
+
+ if ((rv = ACR_LoadClass(_E, &_clazzn, 0)) != ACR_SUCCESS)
+ return rv;
+ J_LOAD_METHOD(0000);
+ J_LOAD_IFIELD(0000);
+ J_LOAD_IFIELD(0001);
+ J_LOAD_IFIELD(0002);
+ J_LOAD_IFIELD(0003);
+
+ return ACR_SUCCESS;
+}
+
+ACR_CLASS_UDEF(util_Group)
+{
+ ACR_UnloadClass(_E, &_clazzn);
+}
+
+ACR_DECLARE(jobjectArray) ACR_NewGroupArray(JNIEnv *_E, jsize len)
+{
+ if (_clazzn.i)
+ return (*_E)->NewObjectArray(_E, len, _clazzn.i, NULL);
+ else
+ return NULL;
+}
+
+static jobject grp_object_create(JNIEnv *_E, struct group *gr)
+{
+ jobject gid;
+ jobject grp;
+ char *sid;
+
+ gid = ACR_DescriptorCreate(_E, 0, gr->gr_gid, NULL, NULL);
+ if (!gid) {
+
+ return NULL;
+ }
+ grp = (*_E)->NewObject(_E, _clazzn.i, J4MID(0000), gid);
+ if (!grp) {
+
+ return NULL;
+ }
+
+ SET_IFIELD_S(0000, grp, gr->gr_name);
+ /* Comment is unknown */
+ sid = ACR_Ltoa((acr_long_t)gr->gr_gid);
+ SET_IFIELD_S(0002, grp, sid);
+ SET_IFIELD_Z(0003, grp, JNI_TRUE);
+ ACR_Free(_E, THROW_FMARK, sid);
+
+ return grp;
+}
+
+ACR_JNI_EXPORT_DECLARE(jobject, util_Group, get0)(ACR_JNISTDARGS,
+ jstring name)
+{
+ jobject grp = NULL;
+ UNREFERENCED_O;
+
+ WITH_CSTR(name) {
+ int rc;
+ struct group grb;
+ struct group *pp;
+ char buffer[4096];
+
+ rc = getgrnam_r(J2S(name), &grb, buffer, sizeof(buffer), &pp);
+ if (rc) {
+ if (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
+ else
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
+ ACR_FROM_OS_ERROR(rc));
+ }
+ else {
+ if (pp)
+ grp = grp_object_create(_E, pp);
+ }
+ } END_WITH_CSTR(name);
+
+ return grp;
+}
+
+ACR_JNI_EXPORT_DECLARE(jboolean, util_Group, equals0)(ACR_JNISTDARGS,
+ jobject a, jobject b)
+{
+ gid_t gida = ACR_DescriptorGetInt(_E, a);
+ gid_t gidb = ACR_DescriptorGetInt(_E, b);
+
+ return V2Z(gida == gidb);
+}
Propchange: commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c Mon Apr 27 18:00:03 2009
@@ -0,0 +1,172 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_arch.h"
+#include "acr_clazz.h"
+#include "acr_error.h"
+#include "acr_memory.h"
+#include "acr_string.h"
+#include "acr_descriptor.h"
+
+#include <pwd.h>
+#include <grp.h>
+
+J_DECLARE_CLAZZ = {
+ NULL,
+ NULL,
+ ACR_CLASS_PATH "util/User"
+};
+
+J_DECLARE_M_ID(0000) = {
+ NULL,
+ "<init>",
+ "(L" ACR_CLASS_PATH "Descriptor;)V"
+};
+
+J_DECLARE_F_ID(0000) = {
+ NULL,
+ "Name",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0001) = {
+ NULL,
+ "FullName",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0002) = {
+ NULL,
+ "Comment",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0003) = {
+ NULL,
+ "Home",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0004) = {
+ NULL,
+ "Shell",
+ "Ljava/lang/String;"
+};
+
+J_DECLARE_F_ID(0005) = {
+ NULL,
+ "UserId",
+ "Ljava/lang/String;"
+};
+
+ACR_CLASS_LDEF(util_User)
+{
+ int rv;
+
+ if ((rv = ACR_LoadClass(_E, &_clazzn, 0)) != ACR_SUCCESS)
+ return rv;
+ J_LOAD_METHOD(0000);
+ J_LOAD_IFIELD(0000);
+ J_LOAD_IFIELD(0001);
+ J_LOAD_IFIELD(0002);
+ J_LOAD_IFIELD(0003);
+ J_LOAD_IFIELD(0004);
+ J_LOAD_IFIELD(0005);
+
+ return ACR_SUCCESS;
+}
+
+ACR_CLASS_UDEF(util_User)
+{
+ ACR_UnloadClass(_E, &_clazzn);
+}
+
+ACR_DECLARE(jobjectArray) ACR_NewUserArray(JNIEnv *_E, jsize len)
+{
+ if (_clazzn.i)
+ return (*_E)->NewObjectArray(_E, len, _clazzn.i, NULL);
+ else
+ return NULL;
+}
+
+static jobject usr_object_create(JNIEnv *_E, struct passwd *pw)
+{
+ jobject uid;
+ jobject usr;
+ char *sid;
+
+ uid = ACR_DescriptorCreate(_E, 0, pw->pw_uid, NULL, NULL);
+ if (!uid) {
+
+ return NULL;
+ }
+ usr = (*_E)->NewObject(_E, _clazzn.i, J4MID(0000), uid);
+ if (!usr) {
+
+ return NULL;
+ }
+
+ SET_IFIELD_S(0000, usr, pw->pw_name);
+ SET_IFIELD_S(0001, usr, pw->pw_gecos);
+ /* Comment is unknown */
+ SET_IFIELD_S(0003, usr, pw->pw_dir);
+ SET_IFIELD_S(0004, usr, pw->pw_shell);
+ sid = ACR_Ltoa((acr_long_t)pw->pw_uid);
+ SET_IFIELD_S(0005, usr, sid);
+ ACR_Free(_E, THROW_FMARK, sid);
+
+ return usr;
+}
+
+ACR_JNI_EXPORT_DECLARE(jobject, util_User, get0)(ACR_JNISTDARGS,
+ jstring name)
+{
+ jobject usr = NULL;
+ UNREFERENCED_O;
+
+ WITH_CSTR(name) {
+ int rc;
+ struct passwd pwb;
+ struct passwd *pp;
+ char buffer[4096];
+
+ rc = getpwnam_r(J2S(name), &pwb, buffer, sizeof(buffer), &pp);
+ if (rc) {
+ if (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
+ else
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
+ ACR_FROM_OS_ERROR(rc));
+ }
+ else {
+ if (pp)
+ usr = usr_object_create(_E, pp);
+ }
+ } END_WITH_CSTR(name);
+
+ return usr;
+}
+
+ACR_JNI_EXPORT_DECLARE(jboolean, util_User, equals0)(ACR_JNISTDARGS,
+ jobject a, jobject b)
+{
+ uid_t uida = ACR_DescriptorGetInt(_E, a);
+ uid_t uidb = ACR_DescriptorGetInt(_E, b);
+
+ return V2Z(uida == uidb);
+}
Propchange: commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c Mon Apr 27 18:00:03 2009
@@ -341,22 +341,20 @@
int protection = 0;
PSID user = NULL, group = NULL;
PACL dacl = NULL;
- SECURITY_INFORMATION sinf = 0;
PSECURITY_DESCRIPTOR pdesc = NULL;
int fix = 0;
int rc;
if (wcsncmp(fname, L"\\\\?\\", 4) == 0) {
- fix = 4;
- if (wcsncmp(fname + fix, L"UNC\\", 4) == 0) {
- fname[6] = L'\\';
- fix = 6;
+ fname += 4;
+ if (wcsncmp(fname, L"UNC\\", 4) == 0) {
+ fname += 2;
+ *fname = L'\\';
}
}
- sinf = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
- DACL_SECURITY_INFORMATION;
- rc = GetNamedSecurityInfoW(fname + fix,
- SE_FILE_OBJECT, sinf,
+ rc = GetNamedSecurityInfoW(fname,
+ SE_FILE_OBJECT,
+ OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
&user,
&group,
&dacl,
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Mon Apr 27 18:00:03 2009
@@ -247,6 +247,8 @@
ACR_CLASS_LDEC(Descriptor);
ACR_CLASS_LDEC(Pointer);
ACR_CLASS_LDEC(io_File);
+ACR_CLASS_LDEC(util_Group);
+ACR_CLASS_LDEC(util_User);
ACR_DECLARE(int) ACR_LoadRuntimeClasses(JNIEnv *_E)
{
@@ -254,6 +256,8 @@
ACR_CLASS_LRUN(Descriptor);
ACR_CLASS_LRUN(Pointer);
ACR_CLASS_LRUN(io_File);
+ ACR_CLASS_LRUN(util_Group);
+ ACR_CLASS_LRUN(util_User);
#ifdef WIN32
#endif
@@ -267,6 +271,8 @@
ACR_CLASS_URUN(Descriptor);
ACR_CLASS_URUN(Pointer);
ACR_CLASS_URUN(io_File);
+ ACR_CLASS_URUN(util_Group);
+ ACR_CLASS_URUN(util_User);
#ifdef WIN32
#endif
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Mon Apr 27 18:00:03 2009
@@ -23,6 +23,7 @@
#include "acr_private.h"
#include "acr_error.h"
#include "acr_clazz.h"
+#include "acr_string.h"
#include "acr_descriptor.h"
/**
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/memory.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/memory.c?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/memory.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/memory.c Mon Apr 27 18:00:03 2009
@@ -37,11 +37,11 @@
void *mem = malloc(size);
if (!mem) {
+ int err = ACR_GET_OS_ERROR();
if (_E == NULL)
_E = ACR_GetJNIEnv();
if (_E != NULL)
- ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM,
- ACR_GET_OS_ERROR());
+ ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM, err);
}
return mem;
}
@@ -52,11 +52,11 @@
void *mem = calloc(1, size);
if (!mem) {
+ int err = ACR_GET_OS_ERROR();
if (_E == NULL)
_E = ACR_GetJNIEnv();
if (_E != NULL)
- ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM,
- ACR_GET_OS_ERROR());
+ ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM, err);
}
return mem;
}
@@ -67,11 +67,11 @@
void *mem = realloc(org, size);
if (!mem) {
+ int err = ACR_GET_OS_ERROR();
if (_E == NULL)
_E = ACR_GetJNIEnv();
if (_E != NULL)
- ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM,
- ACR_GET_OS_ERROR());
+ ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM, err);
}
return mem;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/string.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/string.c?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/string.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/string.c Mon Apr 27 18:00:03 2009
@@ -21,6 +21,7 @@
#include "acr_error.h"
#include "acr_types.h"
#include "acr_clazz.h"
+#include "acr_vm.h"
J_DECLARE_CLAZZ = {
NULL,
@@ -120,12 +121,29 @@
return s ? ++s : pathname;
}
+ACR_DECLARE(char *) ACR_Strdup(JNIEnv *_E, const char *file, int line,
+ const char *s)
+{
+ char *d = NULL;
+ if (s) {
+ d = strdup(s);
+ if (!d) {
+ int err = ACR_GET_OS_ERROR();
+ if (_E == NULL)
+ _E = ACR_GetJNIEnv();
+ if (_E != NULL)
+ ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM, err);
+ }
+ }
+ return d;
+}
+
ACR_DECLARE(char *) ACR_Itoa(acr_int_t n)
{
const int BUFFER_SIZE = sizeof(jint) * 3 + 2;
char *start;
int negative;
- char *buf = ACR_Malloc(NULL, THROW_FMARK, BUFFER_SIZE);
+ char buf[BUFFER_SIZE];
if (!buf)
return NULL;
@@ -145,7 +163,7 @@
if (negative) {
*--start = '-';
}
- return start;
+ return ACR_Strdup(NULL, THROW_FMARK, start);
}
ACR_DECLARE(char *) ACR_Ltoa(acr_long_t n)
@@ -153,7 +171,7 @@
const int BUFFER_SIZE = sizeof(jlong) * 3 + 2;
char *start;
int negative;
- char *buf = ACR_Malloc(NULL, THROW_FMARK, BUFFER_SIZE);
+ char buf[BUFFER_SIZE];
if (!buf)
return NULL;
@@ -173,7 +191,7 @@
if (negative) {
*--start = '-';
}
- return start;
+ return ACR_Strdup(NULL, THROW_FMARK, start);
}
ACR_DECLARE(char *) ACR_StrLwr(char *src)
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java Mon Apr 27 18:00:03 2009
@@ -35,6 +35,8 @@
suite.addTest(TestProperties.suite());
suite.addTest(TestOS.suite());
suite.addTest(TestUUID.suite());
+ suite.addTest(TestUser.suite());
+ suite.addTest(TestGroup.suite());
suite.addTest(TestStatus.suite());
suite.addTest(TestMemory.suite());
suite.addTest(TestDirectByteBuffer.suite());
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java?rev=769072&r1=769071&r2=769072&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java Mon Apr 27 18:00:03 2009
@@ -173,6 +173,7 @@
File f = new File("ffoo");
f.createNewFile();
EnumSet <FileProtection> fp = f.getFileProtection();
+ System.out.println("Protection " + fp);
assertTrue("GWRITE", fp.contains(FileProtection.GREAD));
f.delete();
}
Added: 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=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java (added)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,64 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+
+import org.apache.commons.runtime.util.Group;
+import org.apache.commons.runtime.exception.*;
+
+import java.lang.System;
+import junit.framework.*;
+
+/**
+ * Group Test.
+ *
+ */
+public class TestGroup extends TestCase
+{
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(TestGroup.class);
+ return suite;
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ System.loadLibrary("acr");
+ }
+
+ public void testGroup()
+ throws Exception
+ {
+ Group g;
+
+ g = Group.get("bin");
+ assertNotNull("Group" + g);
+ assertTrue("Local", g.IsLocal());
+ }
+
+ public void testUnknownGroup()
+ throws Exception
+ {
+ try {
+ Group g = Group.get("the_group_that_do_not_exist");
+ fail("NoSuchObjectException not thrown");
+ } catch (NoSuchObjectException ex) {
+ // OK.
+ }
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestGroup.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java?rev=769072&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java (added)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java Mon Apr 27 18:00:03 2009
@@ -0,0 +1,69 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+
+import org.apache.commons.runtime.util.User;
+import org.apache.commons.runtime.exception.*;
+
+import java.lang.System;
+import junit.framework.*;
+
+/**
+ * User Test.
+ *
+ */
+public class TestUser extends TestCase
+{
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(TestUser.class);
+ return suite;
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ System.loadLibrary("acr");
+ }
+
+ public void testUser()
+ throws Exception
+ {
+ User u;
+
+ u = User.get("root");
+ assertNotNull("User" + u);
+ System.out.println();
+ System.out.println("User " + u.getFullName());
+ System.out.println("Home " + u.getHome());
+ System.out.println("Comment " + u.getComment());
+ System.out.println("Shell " + u.getShell());
+ System.out.println("Id " + u);
+ }
+
+ public void testUnknownUser()
+ throws Exception
+ {
+ try {
+ User u = User.get("the_user_that_do_not_exist");
+ fail("NoSuchObjectException not thrown");
+ } catch (NoSuchObjectException ex) {
+ // OK.
+ }
+ }
+
+}
Propchange: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestUser.java
------------------------------------------------------------------------------
svn:eol-style = native