]> WPIA git - gigi.git/blob - natives/org_cacert_gigi_natives_SetUID.c
Implemented native Uidset to open a priviliged port
[gigi.git] / natives / org_cacert_gigi_natives_SetUID.c
1 #include <jni.h>  
2 #include <sys/types.h>
3 #include <unistd.h> 
4   
5 #ifndef _Included_org_cacert_natives_SetUID  
6 #define _Included_org_cacert_natives_SetUID  
7 #ifdef __cplusplus  
8 extern "C" {  
9 #endif  
10   
11 jobject getStatus(JNIEnv *env, int successCode, const char * message) {  
12   
13    jstring message_str = (*env)->NewStringUTF(env, message);
14    jboolean success = successCode;  
15    jclass cls = (*env)->FindClass(env, "Lorg/cacert/gigi/natives/SetUID$Status;");  
16    jmethodID constructor = (*env)->GetMethodID(env, cls, "<init>", "(ZLjava/lang/String;)V");  
17    return (*env)->NewObject(env, cls, constructor, success, message_str);  
18 }  
19   
20 JNIEXPORT jobject JNICALL Java_org_cacert_gigi_natives_SetUID_setUid  
21   (JNIEnv *env, jobject obj, jint uid, jint gid) {  
22 if(setgid((int)gid)) {  
23          char str[15];
24         sprintf(str, "%d", gid);
25          return (jobject)getStatus(env, 0, str);  
26       } 
27   
28       if(setuid((int)uid)) {
29         char str[15];
30         sprintf(str, "%d", uid);
31          return (jobject)getStatus(env, 0, str);  
32       }  
33   
34       return (jobject)getStatus(env, 1, "Successfully set uid/gid.");  
35 }  
36   
37 #ifdef __cplusplus  
38 }  
39 #endif  
40 #endif