Skip to content

Commit

Permalink
add password support via Caleb C.
Browse files Browse the repository at this point in the history
  • Loading branch information
cconlon committed Sep 27, 2012
1 parent cc69c7c commit 303ff69
Show file tree
Hide file tree
Showing 3 changed files with 252 additions and 56 deletions.
31 changes: 20 additions & 11 deletions jni/kinit/kinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,7 @@ kinit_prompter(
num_prompts, prompts);
return rc;
#else
// Credit: Caleb Callaway
//ref: http://www.iam.ubc.ca/guides/javatut99/native1.1/implementing/method.html
//ref: http://stackoverflow.com/questions/992836/how-to-access-the-java-method-in-a-c-application
//ref: http://docs.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html#wp9502
Expand Down Expand Up @@ -629,15 +630,18 @@ kinit_prompter(
banner_string = (*jni_env)->NewStringUTF(jni_env, banner);

prompt_class = (*jni_env)->FindClass(jni_env, "edu/mit/kerberos/Prompt");
prompt_constructor_id = (*jni_env)->GetMethodID(jni_env, prompt_class, "<init>", "(Ljava/lang/String;Z)V");
prompt_array = (*jni_env)->NewObjectArray(jni_env, num_prompts, prompt_class, NULL);
prompt_constructor_id = (*jni_env)->GetMethodID(jni_env,
prompt_class, "<init>", "(Ljava/lang/String;Z)V");
prompt_array = (*jni_env)->NewObjectArray(jni_env,
num_prompts, prompt_class, NULL);

for(i = 0; i < num_prompts; i++)
{
prompt_text = (*jni_env)->NewStringUTF(jni_env, prompts[i].prompt);
is_hidden = (jboolean)prompts[i].hidden;

prompt = (*jni_env)->NewObject(jni_env, prompt_class, prompt_constructor_id, prompt_text, is_hidden);
prompt = (*jni_env)->NewObject(jni_env, prompt_class,
prompt_constructor_id, prompt_text, is_hidden);
(*jni_env)->SetObjectArrayElement(jni_env, prompt_array, i, prompt);
}

Expand All @@ -646,16 +650,17 @@ kinit_prompter(
(*jni_env)->GetMethodID(jni_env, calling_class, "kinitPrompter",
"(Ljava/lang/String;Ljava/lang/String;[Ledu/mit/kerberos/Prompt;)[Ljava/lang/String;");

//make the call
result_array = (*jni_env)->CallObjectMethod(jni_env, class_obj, prompter_method_id,
name_string, banner_string, prompt_array);
// make the call
result_array = (*jni_env)->CallObjectMethod(jni_env, class_obj,
prompter_method_id, name_string, banner_string, prompt_array);

if (result_array == NULL)
return KRB5_LIBOS_CANTREADPWD;

for(i = 0; i < num_prompts; i++)
{
result = (jstring)(*jni_env)->GetObjectArrayElement(jni_env, result_array, i);
result = (jstring)(*jni_env)->GetObjectArrayElement(jni_env,
result_array, i);

if (result == NULL)
{
Expand All @@ -671,15 +676,19 @@ kinit_prompter(
return KRB5_LIBOS_CANTREADPWD;
}

//construct result
snprintf(prompts[i].reply->data, prompts[i].reply->length, "%s", native_result);
// construct result
snprintf(prompts[i].reply->data, prompts[i].reply->length, "%s",
native_result);
prompts[i].reply->length = strlen(native_result);

//snprintf duplicates the string, so it is safe to release here
// snprintf duplicates the string, so it is safe to release here
(*jni_env)->ReleaseStringUTFChars(jni_env, result, native_result);
}

return 0;
#endif

#endif /* ANDROID */

}

static int
Expand Down
219 changes: 195 additions & 24 deletions res/layout/main.xml
Original file line number Diff line number Diff line change
@@ -1,33 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="match_parent" android:orientation="vertical" android:weightSum="1">
<TextView android:id="@+id/textView1" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="10px" android:paddingLeft="5px" android:layout_marginBottom="10px" android:text="Enter Principal Name:" android:textSize="6pt"></TextView>
<EditText android:id="@+id/editText1" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_marginLeft="5px" android:layout_marginRight="5px">
android:layout_height="wrap_content" >

<LinearLayout android:id="@+id/linearLayout1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:weightSum="1">

<!-- Enter your principal name -->
<TextView android:id="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="10px"
android:paddingLeft="5px"
android:layout_marginBottom="10px"
android:text="Enter Principal Name:"
android:textSize="6pt" >
</TextView>
<EditText android:id="@+id/editText1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginLeft="5px"
android:layout_marginRight="5px" >
<requestFocus></requestFocus>
</EditText>
<TextView android:id="@+id/password_label" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="10px" android:paddingLeft="5px" android:layout_marginBottom="10px" android:text="Enter Password:" android:textSize="6pt"></TextView>
<EditText android:id="@+id/password" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_marginLeft="5px" android:layout_marginRight="5px"></EditText>
<TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Defaults:" android:textSize="5pt" android:id="@+id/textView2" android:textAppearance="?android:attr/textAppearanceSmall" android:paddingLeft="5px" android:textStyle="bold"></TextView>
<TextView android:id="@+id/textView3" android:textAppearance="?android:attr/textAppearanceSmall" android:text="conf file: /data/local/kerberos/krb5.conf" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="5px" android:textSize="4.5pt"></TextView>
<TextView android:id="@+id/textView4" android:textAppearance="?android:attr/textAppearanceSmall" android:text="keytab file: /data/local/kerberos/krb5.keytab" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="5px" android:textSize="4.5pt"></TextView>
<TextView android:id="@+id/textView5" android:textAppearance="?android:attr/textAppearanceSmall" android:text="ccache: /data/local/kerberos/ccache/krb5cc_[uid]" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="5px" android:textSize="4.5pt"></TextView>
<TextView android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="4.5pt" android:paddingLeft="5px" android:text="Server settings: KerberosAppActivity.java"></TextView>
<LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:layout_width="match_parent" android:weightSum="1">
<Button android:id="@+id/button1" android:layout_marginTop="10px" android:layout_marginLeft="5px" android:text="kinit" android:layout_height="32dp" android:layout_width="120px" android:textSize="5pt"></Button>
<Button android:layout_marginTop="10px" android:id="@+id/btnList" android:text="klist" android:layout_height="32dp" android:layout_width="100px" android:layout_weight="0.47" android:textSize="5pt"></Button>
<Button android:text="kvno" android:layout_marginTop="10px" android:id="@+id/btnVno" android:layout_height="32dp" android:layout_width="100px" android:layout_weight="0.45" android:textSize="5pt"></Button>
<Button android:layout_marginTop="10px" android:id="@+id/btnDestroy" android:text="kdestroy" android:layout_height="32dp" android:layout_width="wrap_content" android:textSize="5pt"></Button>

<!-- Password / keytab entry -->
<LinearLayout android:id="@+id/toggleLayout"
android:layout_height="wrap_content"
android:layout_width="match_parent" >
<TextView android:id="@+id/toggleText"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="20px"
android:paddingLeft="5px"
android:layout_marginBottom="10px"
android:text="AUTH Method:"
android:textSize="6pt" >
</TextView>
<RadioGroup android:id="@+id/authGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton android:id="@+id/radio_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12dip"
android:checked="true"
android:text="Password" />
<RadioButton android:id="@+id/radio_keytab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12dip"
android:text="Keytab" />
</RadioGroup>
</LinearLayout>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout3" android:orientation="vertical">
<Button android:text="Start Client App" android:layout_height="match_parent" android:layout_marginBottom="5px" android:layout_marginLeft="4px" android:layout_width="315dp" android:textStyle="bold" android:id="@+id/startButton"></Button>
<TextView android:id="@+id/password_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="0px"
android:paddingLeft="5px"
android:layout_marginBottom="10px"
android:text="Enter Password:"
android:textSize="6pt" >
</TextView>
<EditText android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginLeft="5px"
android:layout_marginRight="5px"
android:password="true" >
</EditText>
<TextView android:id="@+id/keytab_label"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="keytab file: /data/local/kerberos/krb5.keytab"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingLeft="5px"
android:layout_marginTop="0px"
android:layout_marginBottom="10px"
android:textSize="4.5pt" >
</TextView>
<View android:layout_width="fill_parent"
android:layout_height="1dip"
android:layout_marginTop="15px"
android:layout_marginBottom="10px"
android:background="#CCCCCC" />

<!-- list default file locations -->
<TextView android:id="@+id/textView2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Defaults:"
android:textSize="5pt"
android:textAppearance="?android:attr/textAppearanceSmall"
android:paddingLeft="5px"
android:textStyle="bold" >
</TextView>
<TextView android:id="@+id/textView3"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="conf file: /data/local/kerberos/krb5.conf"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingLeft="5px"
android:textSize="4.5pt" >
</TextView>
<TextView android:id="@+id/textView5"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="ccache: /data/local/kerberos/ccache/krb5cc_[uid]"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingLeft="5px"
android:textSize="4.5pt" >
</TextView>
<TextView android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="4.5pt"
android:paddingLeft="5px"
android:text="Server settings: KerberosAppActivity.java" >
</TextView>

<!-- first row of buttons (kinit, klist, kvno, kdestroy -->
<LinearLayout android:id="@+id/linearLayout2"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:weightSum="1" >
<Button android:id="@+id/button1"
android:layout_marginTop="10px"
android:layout_marginLeft="5px"
android:text="kinit"
android:layout_height="32dp"
android:layout_width="120px"
android:textSize="5pt" >
</Button>
<Button android:id="@+id/btnList"
android:layout_marginTop="10px"
android:text="klist"
android:layout_height="32dp"
android:layout_width="100px"
android:layout_weight="0.47"
android:textSize="5pt" >
</Button>
<Button android:id="@+id/btnVno"
android:text="kvno"
android:layout_marginTop="10px"
android:layout_height="32dp"
android:layout_width="100px"
android:layout_weight="0.45"
android:textSize="5pt" >
</Button>
<Button android:id="@+id/btnDestroy"
android:layout_marginTop="10px"
android:text="kdestroy"
android:layout_height="32dp"
android:layout_width="wrap_content"
android:textSize="5pt" >
</Button>
</LinearLayout>

<!-- second button row (Start Client App) -->
<LinearLayout android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button android:id="@+id/startButton"
android:text="Start Client App"
android:layout_height="match_parent"
android:layout_marginBottom="5px"
android:layout_marginLeft="4px"
android:layout_width="315dp"
android:textStyle="bold" >
</Button>
</LinearLayout>
<FrameLayout android:id="@+id/frameLayout1" android:layout_width="match_parent" android:background="#cccccc" android:paddingTop="10px" android:paddingLeft="5px" android:layout_marginLeft="10px" android:layout_marginRight="10px" android:layout_height="234dp">
<TextView android:id="@+id/textView" android:text="" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textColor="#000" android:scrollbars="vertical" android:textSize="2pt"></TextView>

<!-- output text box -->
<FrameLayout android:id="@+id/frameLayout1"
android:layout_width="match_parent"
android:background="#cccccc"
android:paddingTop="10px"
android:paddingLeft="5px"
android:layout_marginLeft="10px"
android:layout_marginRight="10px"
android:layout_height="234dp" >
<TextView android:id="@+id/textView"
android:text=""
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:textColor="#000"
android:scrollbars="vertical"
android:textSize="2pt" >
</TextView>
</FrameLayout>

</LinearLayout>

</LinearLayout>
</ScrollView>
Loading

0 comments on commit 303ff69

Please sign in to comment.