/*********************************************************************** * * Copyright (C) 2005-2006 Novell, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; version 2.1 * of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * To contact Novell about this file by physical or electronic mail, * you may find current contact information at www.novell.com. * ***********************************************************************/ #include "com_novell_casa_MiCasa.h" #include #include #include #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL Java_com_novell_casa_MiCasa_jmiCASASetCredential (JNIEnv *env, jobject notused, jint ssFlags, jstring jsAppSecretID, jstring jsSharedSecretID, jint jUsernameType, jstring jsUsername, jstring jsPassword ) { int rcode = 0; SSCS_SECRET_ID_T appSecretId = {0}; SSCS_SECRET_ID_T sharedSecretId = {0}; SSCS_BASIC_CREDENTIAL credential = {0}; const char* utf_string; jboolean isCopy; utf_string = (*env)->GetStringUTFChars(env, jsAppSecretID, &isCopy); sscs_Utf8Strcpy((char*)appSecretId.id, utf_string); appSecretId.len = sscs_Utf8Strlen(utf_string) + 1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env,jsAppSecretID, utf_string); // handle sharedsecretid if (jsSharedSecretID) { utf_string = (*env)->GetStringUTFChars(env, jsSharedSecretID, &isCopy); sscs_Utf8Strcpy((char*)sharedSecretId.id, utf_string); sharedSecretId.len = sscs_Utf8Strlen(utf_string)+1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsSharedSecretID, utf_string); } // setup credential utf_string = (*env)->GetStringUTFChars(env, jsUsername, &isCopy); sscs_Utf8Strcpy((char*)credential.username, utf_string); credential.unLen = sscs_Utf8Strlen(utf_string)+1; credential.unFlags = jUsernameType; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsUsername, utf_string); // password utf_string = (*env)->GetStringUTFChars(env, jsPassword, &isCopy); sscs_Utf8Strcpy((char*)credential.password, utf_string); credential.pwordLen = sscs_Utf8Strlen(utf_string)+1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsPassword, utf_string); // make the call if (jsSharedSecretID) rcode = miCASASetCredential( ssFlags, &appSecretId, &sharedSecretId, jUsernameType, &credential, NULL ); else rcode = miCASASetCredential( ssFlags, &appSecretId, NULL, jUsernameType, &credential, NULL ); return rcode; } /* * Class: com_novell_casa_micasa_SecretStore * Method: jmiCASAGetCredential * Signature: (I[B[BILcom/novell/casa/micasa/Secret;)I */ JNIEXPORT jint JNICALL Java_com_novell_casa_MiCasa_jmiCASAGetCredential (JNIEnv *env, jobject unused, jint ssFlags, jstring jsAppSecretID, jstring jsSharedSecretID, jint jUsernameType, jobject jcred) { int rcode = 0; SSCS_SECRET_ID_T appSecretId = {0}; SSCS_SECRET_ID_T sharedSecretId = {0}; SSCS_BASIC_CREDENTIAL credential = {0}; const char* utf_string; jboolean isCopy; int unType = jUsernameType; utf_string = (*env)->GetStringUTFChars(env, jsAppSecretID, &isCopy); sscs_Utf8Strcpy((char*)appSecretId.id, utf_string); appSecretId.len = sscs_Utf8Strlen(utf_string) + 1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsAppSecretID, utf_string); // handle sharedsecretid if (jsSharedSecretID) { utf_string = (*env)->GetStringUTFChars(env, jsSharedSecretID, &isCopy); sscs_Utf8Strcpy((char*)sharedSecretId.id, utf_string); sharedSecretId.len = sscs_Utf8Strlen(utf_string)+1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsSharedSecretID, utf_string); } // make the call if (jsSharedSecretID) rcode = miCASAGetCredential( ssFlags, &appSecretId, &sharedSecretId, &unType, &credential, NULL ); else rcode = miCASAGetCredential( ssFlags, &appSecretId, NULL, &unType, &credential, NULL ); if (rcode == 0) { // we have a credential jclass theclazz; jmethodID mid; theclazz = (*env)->GetObjectClass(env, jcred); mid = (*env)->GetMethodID(env, theclazz, "setUsername", "(Ljava/lang/String;)V"); if (mid != NULL) { //printf("The Username: %s\r\n", credential.username); jstring jusername = (*env)->NewStringUTF(env, (char *)credential.username); (*env)->CallObjectMethod(env, jcred, mid, jusername); } mid = (*env)->GetMethodID(env, theclazz, "setPassword", "(Ljava/lang/String;)V"); { jstring jpassword = (*env)->NewStringUTF(env, (char *)credential.password); (*env)->CallObjectMethod(env, jcred, mid, jpassword); } } return rcode; } /* * Class: com_novell_casa_micasa_SecretStore * Method: jmiCASARemoveCredential * Signature: (I[B[B)I */ JNIEXPORT jint JNICALL Java_com_novell_casa_MiCasa_jmiCASARemoveCredential (JNIEnv *env, jobject unused, jint ssFlags, jstring jsAppSecretID, jstring jsSharedSecretID) { int rcode = 0; SSCS_SECRET_ID_T appSecretId = {0}; SSCS_SECRET_ID_T sharedSecretId = {0}; const char* utf_string; jboolean isCopy; utf_string = (*env)->GetStringUTFChars(env, jsAppSecretID, &isCopy); sscs_Utf8Strcpy((char*)appSecretId.id, utf_string); appSecretId.len = sscs_Utf8Strlen(utf_string) + 1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsAppSecretID, utf_string); // handle sharedsecretid if (jsSharedSecretID) { utf_string = (*env)->GetStringUTFChars(env, jsSharedSecretID, &isCopy); sscs_Utf8Strcpy((char*)sharedSecretId.id, utf_string); sharedSecretId.len = sscs_Utf8Strlen(utf_string)+1; if (isCopy == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, jsSharedSecretID, utf_string); } // make the call if (jsSharedSecretID) rcode = miCASARemoveCredential( ssFlags, &appSecretId, &sharedSecretId, NULL); else rcode = miCASARemoveCredential( ssFlags, &appSecretId, NULL, NULL); return rcode; } #ifdef __cplusplus } #endif