seteuid()/setegid() support

git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@103 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Landon Fuller
2006-12-19 20:38:18 +00:00
parent fc284c2e58
commit ae23946af0
5 changed files with 119 additions and 5 deletions
@@ -77,6 +77,26 @@ Java_com_threerings_util_unsafe_Unsafe_nativeSetgid (
return JNI_TRUE;
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSeteuid (
JNIEnv* env, jclass clzz, jint uid)
{
if (seteuid((uid_t)uid) != 0) {
fprintf(stderr, "seteuid(%d) failed: %s\n", uid, strerror(errno));
return JNI_FALSE;
}
return JNI_TRUE;
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetegid (
JNIEnv* env, jclass clazz, jint gid)
{
if (setegid((gid_t)gid) != 0) {
fprintf(stderr, "setegid(%d) failed: %s\n", gid, strerror(errno));
return JNI_FALSE;
}
return JNI_TRUE;
}
JNIEXPORT jboolean JNICALL
Java_com_threerings_util_unsafe_Unsafe_init (JNIEnv* env, jclass clazz)
{
@@ -73,7 +73,7 @@ public class Unsafe
}
/**
* Sets the processes uid to the specified value.
* Sets the process' uid to the specified value.
*
* @return true if the uid was changed, false if we were unable to do so.
*/
@@ -86,9 +86,9 @@ public class Unsafe
}
/**
* Sets the processes uid to the specified value.
* Sets the process' gid to the specified value.
*
* @return true if the uid was changed, false if we were unable to do so.
* @return true if the gid was changed, false if we were unable to do so.
*/
public static boolean setgid (int gid)
{
@@ -98,6 +98,32 @@ public class Unsafe
return false;
}
/**
* Sets the process' effective uid to the specified value.
*
* @return true if the euid was changed, false if we were unable to do so.
*/
public static boolean seteuid (int uid)
{
if (_loaded && !RunAnywhere.isWindows()) {
return nativeSeteuid(uid);
}
return false;
}
/**
* Sets the process' effective gid to the specified value.
*
* @return true if the egid was changed, false if we were unable to do so.
*/
public static boolean setegid (int gid)
{
if (_loaded && !RunAnywhere.isWindows()) {
return nativeSetegid(gid);
}
return false;
}
/**
* Reenable garbage collection after a call to {@link #disableGC}.
*/
@@ -123,6 +149,16 @@ public class Unsafe
*/
protected static native boolean nativeSetgid (int gid);
/**
* Calls through to the native OS system call to change our euid.
*/
protected static native boolean nativeSeteuid (int uid);
/**
* Calls through to the native OS system call to change our egid.
*/
protected static native boolean nativeSetegid (int gid);
/**
* Called to initialize our library.
*/
@@ -32,6 +32,34 @@ Java_com_threerings_util_unsafe_Unsafe_nativeSleep (
/* not supported */
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetuid
(JNIEnv *, jclass, jint)
{
/* not supported */
return JNI_FALSE;
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetgid
(JNIEnv *, jclass, jint)
{
/* not supported */
return JNI_FALSE;
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSeteuid (
JNIEnv* env, jclass clzz, jint uid)
{
/* not supported */
return JNI_FALSE;
}
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetegid (
JNIEnv* env, jclass clazz, jint gid)
{
/* not supported */
return JNI_FALSE;
}
JNIEXPORT jboolean JNICALL
Java_com_threerings_util_unsafe_Unsafe_init (JNIEnv* env, jclass clazz)
{
@@ -7,8 +7,6 @@
#ifdef __cplusplus
extern "C" {
#endif
/* Inaccessible static: _gcEnabled */
/* Inaccessible static: _loaded */
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: enableGC
@@ -33,6 +31,38 @@ JNIEXPORT void JNICALL Java_com_threerings_util_unsafe_Unsafe_disableGC
JNIEXPORT void JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSleep
(JNIEnv *, jclass, jint);
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: nativeSetuid
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetuid
(JNIEnv *, jclass, jint);
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: nativeSetgid
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetgid
(JNIEnv *, jclass, jint);
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: nativeSeteuid
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSeteuid
(JNIEnv *, jclass, jint);
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: nativeSetegid
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL Java_com_threerings_util_unsafe_Unsafe_nativeSetegid
(JNIEnv *, jclass, jint);
/*
* Class: com_threerings_util_unsafe_Unsafe
* Method: init