41 |
41 |
42 /* |
42 /* |
43 * Statics for this module |
43 * Statics for this module |
44 */ |
44 */ |
45 |
45 |
46 static jclass derValueClass = NULL; |
|
47 static jclass ticketClass = NULL; |
46 static jclass ticketClass = NULL; |
48 static jclass principalNameClass = NULL; |
47 static jclass principalNameClass = NULL; |
49 static jclass encryptionKeyClass = NULL; |
48 static jclass encryptionKeyClass = NULL; |
50 static jclass ticketFlagsClass = NULL; |
49 static jclass ticketFlagsClass = NULL; |
51 static jclass kerberosTimeClass = NULL; |
50 static jclass kerberosTimeClass = NULL; |
52 static jclass javaLangStringClass = NULL; |
51 static jclass javaLangStringClass = NULL; |
53 static jclass javaLangIntegerClass = NULL; |
52 static jclass javaLangIntegerClass = NULL; |
54 static jclass hostAddressClass = NULL; |
53 static jclass hostAddressClass = NULL; |
55 static jclass hostAddressesClass = NULL; |
54 static jclass hostAddressesClass = NULL; |
56 |
55 |
57 static jmethodID derValueConstructor = 0; |
|
58 static jmethodID ticketConstructor = 0; |
56 static jmethodID ticketConstructor = 0; |
59 static jmethodID principalNameConstructor = 0; |
57 static jmethodID principalNameConstructor = 0; |
60 static jmethodID encryptionKeyConstructor = 0; |
58 static jmethodID encryptionKeyConstructor = 0; |
61 static jmethodID ticketFlagsConstructor = 0; |
59 static jmethodID ticketFlagsConstructor = 0; |
62 static jmethodID kerberosTimeConstructor = 0; |
60 static jmethodID kerberosTimeConstructor = 0; |
106 if (ticketClass == NULL) return JNI_ERR; |
104 if (ticketClass == NULL) return JNI_ERR; |
107 |
105 |
108 principalNameClass = FindClass(env, "sun/security/krb5/PrincipalName"); |
106 principalNameClass = FindClass(env, "sun/security/krb5/PrincipalName"); |
109 if (principalNameClass == NULL) return JNI_ERR; |
107 if (principalNameClass == NULL) return JNI_ERR; |
110 |
108 |
111 derValueClass = FindClass(env, "sun/security/util/DerValue"); |
|
112 if (derValueClass == NULL) return JNI_ERR; |
|
113 |
|
114 encryptionKeyClass = FindClass(env, "sun/security/krb5/EncryptionKey"); |
109 encryptionKeyClass = FindClass(env, "sun/security/krb5/EncryptionKey"); |
115 if (encryptionKeyClass == NULL) return JNI_ERR; |
110 if (encryptionKeyClass == NULL) return JNI_ERR; |
116 |
111 |
117 ticketFlagsClass = FindClass(env,"sun/security/krb5/internal/TicketFlags"); |
112 ticketFlagsClass = FindClass(env,"sun/security/krb5/internal/TicketFlags"); |
118 if (ticketFlagsClass == NULL) return JNI_ERR; |
113 if (ticketFlagsClass == NULL) return JNI_ERR; |
130 if (hostAddressClass == NULL) return JNI_ERR; |
125 if (hostAddressClass == NULL) return JNI_ERR; |
131 |
126 |
132 hostAddressesClass = FindClass(env,"sun/security/krb5/internal/HostAddresses"); |
127 hostAddressesClass = FindClass(env,"sun/security/krb5/internal/HostAddresses"); |
133 if (hostAddressesClass == NULL) return JNI_ERR; |
128 if (hostAddressesClass == NULL) return JNI_ERR; |
134 |
129 |
135 derValueConstructor = (*env)->GetMethodID(env, derValueClass, "<init>", "([B)V"); |
130 ticketConstructor = (*env)->GetMethodID(env, ticketClass, "<init>", "([B)V"); |
136 if (derValueConstructor == 0) { |
|
137 printf("Couldn't find DerValue constructor\n"); |
|
138 return JNI_ERR; |
|
139 } |
|
140 |
|
141 ticketConstructor = (*env)->GetMethodID(env, ticketClass, "<init>", "(Lsun/security/util/DerValue;)V"); |
|
142 if (ticketConstructor == 0) { |
131 if (ticketConstructor == 0) { |
143 printf("Couldn't find Ticket constructor\n"); |
132 printf("Couldn't find Ticket constructor\n"); |
144 return JNI_ERR; |
133 return JNI_ERR; |
145 } |
134 } |
146 |
135 |
201 return; /* Nothing else we can do */ |
190 return; /* Nothing else we can do */ |
202 } |
191 } |
203 |
192 |
204 if (ticketClass != NULL) { |
193 if (ticketClass != NULL) { |
205 (*env)->DeleteWeakGlobalRef(env,ticketClass); |
194 (*env)->DeleteWeakGlobalRef(env,ticketClass); |
206 } |
|
207 if (derValueClass != NULL) { |
|
208 (*env)->DeleteWeakGlobalRef(env,derValueClass); |
|
209 } |
195 } |
210 if (principalNameClass != NULL) { |
196 if (principalNameClass != NULL) { |
211 (*env)->DeleteWeakGlobalRef(env,principalNameClass); |
197 (*env)->DeleteWeakGlobalRef(env,principalNameClass); |
212 } |
198 } |
213 if (encryptionKeyClass != NULL) { |
199 if (encryptionKeyClass != NULL) { |
419 |
405 |
420 #pragma mark - |
406 #pragma mark - |
421 |
407 |
422 jobject BuildTicket(JNIEnv *env, krb5_data *encodedTicket) |
408 jobject BuildTicket(JNIEnv *env, krb5_data *encodedTicket) |
423 { |
409 { |
424 /* To build a Ticket, we first need to build a DerValue out of the EncodedTicket. |
410 // To build a Ticket, we need to make a byte array out of the EncodedTicket. |
425 * But before we can do that, we need to make a byte array out of the ET. |
411 |
426 */ |
412 jobject ticket; |
427 |
|
428 jobject derValue, ticket; |
|
429 jbyteArray ary; |
413 jbyteArray ary; |
430 |
414 |
431 ary = (*env)->NewByteArray(env, encodedTicket->length); |
415 ary = (*env)->NewByteArray(env, encodedTicket->length); |
432 if ((*env)->ExceptionCheck(env)) { |
416 if ((*env)->ExceptionCheck(env)) { |
433 return (jobject) NULL; |
417 return (jobject) NULL; |
437 if ((*env)->ExceptionCheck(env)) { |
421 if ((*env)->ExceptionCheck(env)) { |
438 (*env)->DeleteLocalRef(env, ary); |
422 (*env)->DeleteLocalRef(env, ary); |
439 return (jobject) NULL; |
423 return (jobject) NULL; |
440 } |
424 } |
441 |
425 |
442 derValue = (*env)->NewObject(env, derValueClass, derValueConstructor, ary); |
426 ticket = (*env)->NewObject(env, ticketClass, ticketConstructor, ary); |
443 if ((*env)->ExceptionCheck(env)) { |
427 if ((*env)->ExceptionCheck(env)) { |
444 (*env)->DeleteLocalRef(env, ary); |
428 (*env)->DeleteLocalRef(env, ary); |
445 return (jobject) NULL; |
429 return (jobject) NULL; |
446 } |
430 } |
447 |
|
448 (*env)->DeleteLocalRef(env, ary); |
431 (*env)->DeleteLocalRef(env, ary); |
449 ticket = (*env)->NewObject(env, ticketClass, ticketConstructor, derValue); |
|
450 if ((*env)->ExceptionCheck(env)) { |
|
451 (*env)->DeleteLocalRef(env, derValue); |
|
452 return (jobject) NULL; |
|
453 } |
|
454 (*env)->DeleteLocalRef(env, derValue); |
|
455 return ticket; |
432 return ticket; |
456 } |
433 } |
457 |
434 |
458 jobject BuildClientPrincipal(JNIEnv *env, krb5_context kcontext, krb5_principal principalName) { |
435 jobject BuildClientPrincipal(JNIEnv *env, krb5_context kcontext, krb5_principal principalName) { |
459 // Get the full principal string. |
436 // Get the full principal string. |