src/java.security.jgss/macosx/native/libosxkrb5/nativeccache.c
changeset 58331 e4ce29f6094e
parent 57487 643978a35f6e
child 58618 a95e1f6757c7
equal deleted inserted replaced
58330:de8e08015d51 58331:e4ce29f6094e
    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.