73 */ |
73 */ |
74 fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); |
74 fid = (*env)->GetFieldID(env, cls, "username", "Ljava/lang/String;"); |
75 if (fid == 0) { |
75 if (fid == 0) { |
76 (*env)->ExceptionClear(env); |
76 (*env)->ExceptionClear(env); |
77 throwIllegalArgumentException(env, "invalid field: username"); |
77 throwIllegalArgumentException(env, "invalid field: username"); |
78 return; |
78 goto cleanupAndReturn; |
79 } |
79 } |
80 jstr = (*env)->NewStringUTF(env, pwd.pw_name); |
80 jstr = (*env)->NewStringUTF(env, pwd.pw_name); |
81 if (jstr == NULL) |
81 if (jstr == NULL) { |
82 return; |
82 goto cleanupAndReturn; |
|
83 } |
83 (*env)->SetObjectField(env, obj, fid, jstr); |
84 (*env)->SetObjectField(env, obj, fid, jstr); |
84 |
85 |
85 /* |
86 /* |
86 * set uid |
87 * set uid |
87 */ |
88 */ |
88 fid = (*env)->GetFieldID(env, cls, "uid", "J"); |
89 fid = (*env)->GetFieldID(env, cls, "uid", "J"); |
89 if (fid == 0) { |
90 if (fid == 0) { |
90 (*env)->ExceptionClear(env); |
91 (*env)->ExceptionClear(env); |
91 throwIllegalArgumentException(env, "invalid field: uid"); |
92 throwIllegalArgumentException(env, "invalid field: uid"); |
92 return; |
93 goto cleanupAndReturn; |
93 } |
94 } |
94 (*env)->SetLongField(env, obj, fid, pwd.pw_uid); |
95 (*env)->SetLongField(env, obj, fid, pwd.pw_uid); |
95 |
96 |
96 /* |
97 /* |
97 * set gid |
98 * set gid |
98 */ |
99 */ |
99 fid = (*env)->GetFieldID(env, cls, "gid", "J"); |
100 fid = (*env)->GetFieldID(env, cls, "gid", "J"); |
100 if (fid == 0) { |
101 if (fid == 0) { |
101 (*env)->ExceptionClear(env); |
102 (*env)->ExceptionClear(env); |
102 throwIllegalArgumentException(env, "invalid field: gid"); |
103 throwIllegalArgumentException(env, "invalid field: gid"); |
103 return; |
104 goto cleanupAndReturn; |
104 } |
105 } |
105 (*env)->SetLongField(env, obj, fid, pwd.pw_gid); |
106 (*env)->SetLongField(env, obj, fid, pwd.pw_gid); |
106 |
107 |
107 /* |
108 /* |
108 * set supplementary groups |
109 * set supplementary groups |
109 */ |
110 */ |
110 fid = (*env)->GetFieldID(env, cls, "groups", "[J"); |
111 fid = (*env)->GetFieldID(env, cls, "groups", "[J"); |
111 if (fid == 0) { |
112 if (fid == 0) { |
112 (*env)->ExceptionClear(env); |
113 (*env)->ExceptionClear(env); |
113 throwIllegalArgumentException(env, "invalid field: groups"); |
114 throwIllegalArgumentException(env, "invalid field: groups"); |
114 return; |
115 goto cleanupAndReturn; |
115 } |
116 } |
116 |
117 |
117 jgroups = (*env)->NewLongArray(env, numSuppGroups); |
118 jgroups = (*env)->NewLongArray(env, numSuppGroups); |
118 if (jgroups == NULL) |
119 if (jgroups == NULL) { |
119 return; |
120 goto cleanupAndReturn; |
|
121 } |
120 jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); |
122 jgroupsAsArray = (*env)->GetLongArrayElements(env, jgroups, 0); |
121 if (jgroupsAsArray == NULL) |
123 if (jgroupsAsArray == NULL) { |
122 return; |
124 goto cleanupAndReturn; |
|
125 } |
123 for (i = 0; i < numSuppGroups; i++) |
126 for (i = 0; i < numSuppGroups; i++) |
124 jgroupsAsArray[i] = groups[i]; |
127 jgroupsAsArray[i] = groups[i]; |
125 (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); |
128 (*env)->ReleaseLongArrayElements(env, jgroups, jgroupsAsArray, 0); |
126 (*env)->SetObjectField(env, obj, fid, jgroups); |
129 (*env)->SetObjectField(env, obj, fid, jgroups); |
127 } |
130 } |
|
131 cleanupAndReturn: |
|
132 free(groups); |
|
133 |
128 return; |
134 return; |
129 } |
135 } |