Added back KLL test programs
authorAlexandra Ellwood <lxs@mit.edu>
Fri, 17 Oct 2008 18:15:25 +0000 (18:15 +0000)
committerAlexandra Ellwood <lxs@mit.edu>
Fri, 17 Oct 2008 18:15:25 +0000 (18:15 +0000)
ticket: new

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20886 dc483132-0cff-0310-8789-dd5450dbe970

src/kim/test/test_kll.c [new file with mode: 0644]
src/kim/test/test_kll_terminal.c [new file with mode: 0644]

diff --git a/src/kim/test/test_kll.c b/src/kim/test/test_kll.c
new file mode 100644 (file)
index 0000000..fbc4737
--- /dev/null
@@ -0,0 +1,544 @@
+#include <Kerberos/Kerberos.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <stdarg.h>
+#include <time.h>
+
+/* Prototypes */
+void Initialize(void);
+void TestErrorHandling (void);
+void TestHighLevelAPI (void);
+void TestKLPrincipal (void);
+void TestKerberosRealms (void);
+void TestLoginOptions (void);
+char* TimeToString (char* timeString, long t);
+void TestApplicationOptions (void);
+void MyKerberosLoginIdleCallback (
+                                  KLRefCon                     inAppData);
+
+int main(void)
+{
+    KLTime t;
+    KLStatus err;
+    
+    /* force use of UI */
+    fclose (stdin);
+    
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    
+    err = KLLastChangedTime(&t);
+    printf ("KLLastChangedTime returned %d (err = %d)\n", t, err);
+    
+    TestKLPrincipal ();
+    TestLoginOptions ();
+    TestApplicationOptions ();
+    TestErrorHandling ();
+    TestKerberosRealms ();
+    TestHighLevelAPI ();
+    
+    err = KLLastChangedTime(&t);
+    printf ("KLLastChangedTime returned %d (err = %d)\n", t, err);
+    
+    return 0;  
+}
+
+void TestErrorHandling (void)
+{
+    long err;
+    char*      errorString;
+    
+    err = KLGetErrorString (KRB5KRB_AP_ERR_BAD_INTEGRITY, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klCredentialsBadAddressErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klCacheDoesNotExistErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klPasswordMismatchErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klInsecurePasswordErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klPasswordChangeFailedErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+        
+    err = KLGetErrorString (klCantContactServerErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+    
+    err = KLGetErrorString (klCantDisplayUIErr, &errorString);
+    printf ("KLGetErrorString() returned %s (err = %ld)\n", errorString, err);       
+}
+
+void TestHighLevelAPI (void)
+{
+    KLStatus err;
+    KLPrincipal        inPrincipal, outPrincipal, outPrincipal2;
+    char *outCredCacheName, *outCredCacheName2;
+    KLTime     expirationTime;
+    char*      principalString;
+    char       timeString[256];
+    KLBoolean  valid;
+    
+    err = KLCreatePrincipalFromTriplet ("grail", "", "TESTV5-KERBEROS-1.3.1", &inPrincipal);
+    printf ("KLCreatePrincipalFromTriplet(grail@TESTV5-KERBEROS-1.3.1) (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLAcquireNewInitialTicketsWithPassword (inPrincipal, NULL, "liarg", &outCredCacheName);
+        if (err != klNoErr) {
+            printf ("KLAcquireNewInitialTicketsWithPassword() returned err = %d\n", err);
+        } else {
+            printf ("KLAcquireNewInitialTicketsWithPassword() returned '%s'\n", outCredCacheName);
+            KLDisposeString (outCredCacheName);
+        }
+        KLDisposePrincipal (inPrincipal);
+    }
+    exit (1);
+    
+    err = KLCreatePrincipalFromTriplet ("nobody", "", "TEST-KERBEROS-1.3.1", &inPrincipal);
+    printf ("KLCreatePrincipalFromTriplet(nobody@TEST-KERBEROS-1.3.1) (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLAcquireNewInitialTicketsWithPassword (inPrincipal, NULL, "ydobon", &outCredCacheName);
+        if (err != klNoErr) {
+            printf ("KLAcquireNewInitialTicketsWithPassword() returned err = %d\n", err);
+        } else {
+            printf ("KLAcquireNewInitialTicketsWithPassword() returned '%s'\n", outCredCacheName);
+            KLDisposeString (outCredCacheName);
+        }
+        KLDisposePrincipal (inPrincipal);
+    }
+    
+    err = KLAcquireNewInitialTickets (NULL, NULL, &inPrincipal, &outCredCacheName);
+    printf ("KLAcquireNewInitialTickets() (err = %d)\n", err);
+    if (err == klNoErr) {
+        KLDisposeString (outCredCacheName);
+        err = KLAcquireInitialTickets (inPrincipal, NULL, &outPrincipal, &outCredCacheName);
+        printf ("KLAcquireInitialTickets() (err = %d)\n", err);
+        if (err == klNoErr) {
+            KLDisposeString (outCredCacheName);
+            KLDisposePrincipal (outPrincipal);
+        }
+        KLDisposePrincipal (inPrincipal);
+    }
+    
+    err = KLSetDefaultLoginOption (loginOption_LoginName, "testname", 3);
+    printf ("KLSetDefaultLoginOption(loginOption_LoginName) to testname (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLSetDefaultLoginOption (loginOption_LoginInstance, "testinstance", 6);
+        printf ("KLSetDefaultLoginOption(loginOption_LoginInstance) to testinstance (err = %d)\n", err);
+    }
+    
+    err = KLAcquireNewInitialTickets (NULL, NULL, &inPrincipal, &outCredCacheName);
+    printf ("KLAcquireNewInitialTickets() (err = %d)\n", err);
+    if (err == klNoErr) {
+        KLDisposeString (outCredCacheName);
+        KLDisposePrincipal (inPrincipal);
+    }
+    
+    // Principal == NULL
+    while (KLAcquireNewInitialTickets (NULL, NULL, &outPrincipal, &outCredCacheName) == klNoErr) {
+        err = KLTicketExpirationTime (outPrincipal, kerberosVersion_All, &expirationTime);
+        err = KLCacheHasValidTickets (outPrincipal, kerberosVersion_All, &valid, &outPrincipal2, &outCredCacheName2);
+        if (err == klNoErr) {
+            err = KLGetStringFromPrincipal (outPrincipal2, kerberosVersion_V4, &principalString);
+            if (err == klNoErr) {
+                printf ("KLGetStringFromPrincipal returned string '%s'\n", principalString);
+                KLDisposeString (principalString);
+            }
+            KLDisposePrincipal (outPrincipal2);
+            KLDisposeString (outCredCacheName2);
+            err = KLCacheHasValidTickets (outPrincipal, kerberosVersion_All, &valid, NULL, NULL);
+            if (err != klNoErr) {
+                printf ("KLCacheHasValidTickets returned error = %d\n", err);
+            }
+        }
+        err = KLCacheHasValidTickets (outPrincipal, kerberosVersion_All, &valid, NULL, NULL);
+        KLDisposeString (outCredCacheName);
+        KLDisposePrincipal (outPrincipal);
+    }
+    
+    err = KLAcquireNewInitialTickets (NULL, NULL, &outPrincipal, &outCredCacheName);
+    if (err == klNoErr) {
+        KLDisposeString (outCredCacheName);
+        KLDisposePrincipal (outPrincipal);
+    }
+    
+    
+    err = KLCreatePrincipalFromTriplet ("nobody", "", "TEST-KERBEROS-1.3.1", &inPrincipal);
+    printf ("KLCreatePrincipalFromTriplet(nobody@TEST-KERBEROS-1.3.1) (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLAcquireNewInitialTickets (inPrincipal, NULL, &outPrincipal, &outCredCacheName);
+        printf ("KLAcquireNewInitialTickets(nobody@TEST-KERBEROS-1.3.1) (err = %d)\n", err);
+        if (err == klNoErr) {
+            KLDisposeString (outCredCacheName);
+            KLDisposePrincipal (outPrincipal);
+        }
+        err = KLDestroyTickets (inPrincipal);
+        
+        KLDisposePrincipal (inPrincipal);
+    }
+    
+    err = KLCreatePrincipalFromTriplet ("nobody", "", "TEST-KERBEROS-1.3.1", &inPrincipal);
+    printf ("KLCreatePrincipalFromTriplet(nobody@TEST-KERBEROS-1.3.1) (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLAcquireInitialTickets (inPrincipal, NULL, &outPrincipal, &outCredCacheName);
+        printf ("KLAcquireInitialTickets(nobody@TEST-KERBEROS-1.3.1) (err = %d)\n", err);
+        if (err == klNoErr) {
+            KLDisposeString (outCredCacheName);
+            KLDisposePrincipal (outPrincipal);
+        }
+        
+        err = KLAcquireNewInitialTickets (inPrincipal, NULL, &outPrincipal, &outCredCacheName);
+        if (err == klNoErr) {
+            err = KLGetStringFromPrincipal (outPrincipal, kerberosVersion_V5, &principalString);
+            if (err == klNoErr) {
+                err = KLTicketExpirationTime (outPrincipal, kerberosVersion_All, &expirationTime);
+                printf ("Tickets for principal '%s' expire on %s\n",
+                        principalString, TimeToString(timeString, expirationTime));
+                
+                KLDisposeString (principalString);
+            }
+            KLDisposeString (outCredCacheName);
+            KLDisposePrincipal (outPrincipal);
+        }
+        
+        err = KLChangePassword (inPrincipal);
+        printf ("KLChangePassword() (err = %d)\n", err);
+        
+        err = KLDestroyTickets (inPrincipal);
+        printf ("KLDestroyTickets() (err = %d)\n", err);
+        
+        KLDisposePrincipal (inPrincipal);
+    }
+    
+}
+
+
+void TestKLPrincipal (void)
+{
+    KLStatus err = klNoErr;
+    KLPrincipal extraLongPrincipal = NULL;
+    KLPrincipal        principal = NULL;
+    KLPrincipal adminPrincipal = NULL;
+    KLPrincipal adminPrincipalV4 = NULL;
+    KLPrincipal adminPrincipalV5 = NULL;
+    char *principalString = NULL;
+    char *user = NULL;
+    char *instance = NULL;
+    char *realm = NULL;
+    
+    printf ("Entering TestKLPrincipal()\n");
+    printf ("----------------------------------------------------------------\n");
+    
+    err = KLCreatePrincipalFromString ("thisprincipalnameislongerthanissupportedbyKerberos4@TEST-KERBEROS-1.3.1",
+                                       kerberosVersion_V5, &extraLongPrincipal);
+    printf ("KLCreatePrincipalFromString "
+            "('thisprincipalnameislongerthanissupportedbyKerberos4@TEST-KERBEROS-1.3.1') "
+            "(err = %s)\n", error_message(err));
+    
+    printf ("----------------------------------------------------------------\n");
+    
+    err = KLCreatePrincipalFromTriplet ("nobody", "", "TEST-KERBEROS-1.3.1", &principal);
+    printf ("KLCreatePrincipalFromTriplet ('nobody' '' 'TEST-KERBEROS-1.3.1') (err = %s)\n",
+            error_message(err));
+    
+    if (err == klNoErr) {
+        err = KLGetStringFromPrincipal (principal, kerberosVersion_V5, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody@TEST-KERBEROS-1.3.1, v5) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody@TEST-KERBEROS-1.3.1, v5) returned (err = %s)\n", error_message(err));
+        }
+        
+        err = KLGetStringFromPrincipal (principal, kerberosVersion_V4, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody@TEST-KERBEROS-1.3.1, v4) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody@TEST-KERBEROS-1.3.1, v4) returned (err = %s)\n", error_message(err));
+        }
+        
+        err = KLGetTripletFromPrincipal (principal, &user, &instance, &realm);
+        if (err == klNoErr) {
+            printf ("KLGetTripletFromPrincipal (nobody@TEST-KERBEROS-1.3.1) returned triplet %s' '%s' '%s'\n",
+                    user, instance, realm);
+            KLDisposeString (user);
+            KLDisposeString (instance);
+            KLDisposeString (realm);
+        } else {
+            printf ("KLGetTripletFromPrincipal(nobody@TEST-KERBEROS-1.3.1) returned (err = %s)\n", error_message(err));
+        }            
+    }
+    
+    printf ("----------------------------------------------------------------\n");
+    
+    err = KLCreatePrincipalFromTriplet ("nobody", "admin", "TEST-KERBEROS-1.3.1", &adminPrincipal);
+    printf ("KLCreatePrincipalFromTriplet ('nobody' 'admin' 'TEST-KERBEROS-1.3.1') (err = %d)\n", err);
+    
+    if (err == klNoErr) {
+        err = KLGetStringFromPrincipal (adminPrincipal, kerberosVersion_V5, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody/admin@TEST-KERBEROS-1.3.1, v5) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody/admin@TEST-KERBEROS-1.3.1, v5) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetStringFromPrincipal (adminPrincipal, kerberosVersion_V4, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody/admin@TEST-KERBEROS-1.3.1, v4) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody/admin@TEST-KERBEROS-1.3.1, v4) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetTripletFromPrincipal (adminPrincipal, &user, &instance, &realm);
+        if (err == klNoErr) {
+            printf ("KLGetTripletFromPrincipal (nobody/admin@TEST-KERBEROS-1.3.1) returned triplet %s' '%s' '%s'\n",
+                    user, instance, realm);
+            KLDisposeString (user);
+            KLDisposeString (instance);
+            KLDisposeString (realm);
+        } else {
+            printf ("KLGetTripletFromPrincipal(lxs/admin@TEST-KERBEROS-1.3.1) returned (err = %d)\n", err);
+        }
+    }
+    
+    printf ("----------------------------------------------------------------\n");
+    
+    err = KLCreatePrincipalFromString ("nobody/root@TEST-KERBEROS-1.3.1", kerberosVersion_V5, &adminPrincipalV5);
+    printf ("KLCreatePrincipalFromString ('nobody/root@TEST-KERBEROS-1.3.1', v5) (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLGetStringFromPrincipal (adminPrincipalV5, kerberosVersion_V5, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody/root@TEST-KERBEROS-1.3.1, v5) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody/root@TEST-KERBEROS-1.3.1, v5) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetStringFromPrincipal (adminPrincipalV5, kerberosVersion_V4, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody/admin@TEST-KERBEROS-1.3.1, v4) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody/admin@TEST-KERBEROS-1.3.1, v4) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetTripletFromPrincipal (adminPrincipalV5, &user, &instance, &realm);
+        if (err == klNoErr) {
+            printf ("KLGetTripletFromPrincipal (nobody/admin@TEST-KERBEROS-1.3.1) returned triplet %s' '%s' '%s'\n",
+                    user, instance, realm);
+            KLDisposeString (user);
+            KLDisposeString (instance);
+            KLDisposeString (realm);
+        } else {
+            printf ("KLGetTripletFromPrincipal(nobody/admin@TEST-KERBEROS-1.3.1) returned (err = %d)\n", err);
+        }
+    }
+    
+    printf ("----------------------------------------------------------------\n");
+    
+    err = KLCreatePrincipalFromString ("nobody.admin@TEST-KERBEROS-1.3.1", kerberosVersion_V4, &adminPrincipalV4);
+    printf ("KLCreatePrincipalFromString ('nobody.admin@TEST-KERBEROS-1.3.1') (err = %d)\n", err);
+    if (err == klNoErr) {
+        err = KLGetStringFromPrincipal (adminPrincipalV4, kerberosVersion_V5, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody.admin@TEST-KERBEROS-1.3.1, v5) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody.admin@TEST-KERBEROS-1.3.1, v5) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetStringFromPrincipal (adminPrincipalV4, kerberosVersion_V4, &principalString);
+        if (err == klNoErr) {
+            printf ("KLGetStringFromPrincipal (nobody.admin@TEST-KERBEROS-1.3.1, v4) returned string '%s'\n", principalString);
+            KLDisposeString (principalString);
+        } else {
+            printf ("KLGetStringFromPrincipal(nobody.admin@TEST-KERBEROS-1.3.1, v4) returned (err = %d)\n", err);
+        }
+        
+        err = KLGetTripletFromPrincipal (adminPrincipalV4, &user, &instance, &realm);
+        if (err == klNoErr) {
+            printf ("KLGetTripletFromPrincipal (nobody.admin@TEST-KERBEROS-1.3.1) returned triplet %s' '%s' '%s'\n",
+                    user, instance, realm);
+            KLDisposeString (user);
+            KLDisposeString (instance);
+            KLDisposeString (realm);
+        } else {
+            printf ("KLGetTripletFromPrincipal(nobody.admin@TEST-KERBEROS-1.3.1) returned (err = %d)\n", err);
+        }
+    }
+    
+    printf ("----------------------------------------------------------------\n");
+    
+    if (adminPrincipalV4 != NULL && adminPrincipalV5 != NULL) {
+        KLBoolean equivalent;
+        
+        err = KLComparePrincipal (adminPrincipalV5, adminPrincipalV4, &equivalent);
+        if (err == klNoErr) {
+            printf ("KLComparePrincipal %s comparing nobody/admin@TEST-KERBEROS-1.3.1 and nobody.admin@TEST-KERBEROS-1.3.1\n",
+                    equivalent ? "passed" : "FAILED");
+        } else {
+            printf ("KLComparePrincipal returned (err = %d)\n", err);
+        }
+    }
+    
+    if (principal != NULL && adminPrincipalV5 != NULL) {
+        KLBoolean equivalent;
+        
+        err = KLComparePrincipal (principal, adminPrincipalV4, &equivalent);
+        if (err == klNoErr) {
+            printf ("KLComparePrincipal %s comparing nobody@TEST-KERBEROS-1.3.1 and nobody.admin@TEST-KERBEROS-1.3.1\n",
+                    equivalent ? "FAILED" : "passed");
+        } else {
+            printf ("KLComparePrincipal returned (err = %d)\n", err);
+        }
+    }
+    
+    if (principal != NULL && adminPrincipalV5 != NULL) {
+        KLBoolean equivalent;
+        
+        err = KLComparePrincipal (principal, adminPrincipalV5, &equivalent);
+        if (err == klNoErr) {
+            printf ("KLComparePrincipal %s comparing nobody@TEST-KERBEROS-1.3.1 and nobody/admin@TEST-KERBEROS-1.3.1\n",
+                    equivalent ? "FAILED" : "passed");
+        } else {
+            printf ("KLComparePrincipal returned (err = %d)\n", err);
+        }
+    }
+    
+    if (adminPrincipal != NULL && adminPrincipalV5 != NULL) {
+        KLBoolean equivalent;
+        
+        err = KLComparePrincipal (adminPrincipalV5, principal, &equivalent);
+        if (err == klNoErr) {
+            printf ("KLComparePrincipal %s comparing nobody/admin@TEST-KERBEROS-1.3.1 and nobody@TEST-KERBEROS-1.3.1\n",
+                    equivalent ? "FAILED" : "passed");
+        } else {
+            printf ("KLComparePrincipal returned (err = %d)\n", err);
+        }
+    }
+    
+    printf ("----------------------------------------------------------------\n\n");
+    
+    if (extraLongPrincipal != NULL) KLDisposePrincipal (extraLongPrincipal);
+    if (adminPrincipalV5   != NULL) KLDisposePrincipal (adminPrincipalV5);
+    if (adminPrincipalV4   != NULL) KLDisposePrincipal (adminPrincipalV4);
+    if (adminPrincipal     != NULL) KLDisposePrincipal (adminPrincipal);
+    if (principal          != NULL) KLDisposePrincipal (principal);
+}
+
+
+void TestApplicationOptions (void)
+{
+    KLSetIdleCallback (MyKerberosLoginIdleCallback, 101);
+}
+
+void TestKerberosRealms (void)
+{
+    printf ("About to test Kerberos realms\n");
+    KLRemoveAllKerberosRealms ();
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLInsertKerberosRealm (realmList_End, "FOO");
+    KLInsertKerberosRealm (realmList_End, "BAR");
+    KLInsertKerberosRealm (realmList_End, "BAZ");
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLInsertKerberosRealm (realmList_End, "FOO");
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLSetKerberosRealm (0, "QUUX");
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLRemoveKerberosRealm (0);
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLSetKerberosRealm (2, "TEST-KERBEROS-1.3.1");
+    KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    
+    KLRemoveAllKerberosRealms ();
+    KLInsertKerberosRealm (realmList_End, "TEST-KERBEROS-1.3.1");
+    KLInsertKerberosRealm (realmList_End, "TEST-KERBEROS-1.0.6");
+    KLInsertKerberosRealm (realmList_End, "TESTV5-KERBEROS-1.0.6");
+    KLInsertKerberosRealm (realmList_End, "TEST-KERBEROS-1.1.1");
+    KLInsertKerberosRealm (realmList_End, "TESTV5-KERBEROS-1.1.1");
+    KLInsertKerberosRealm (realmList_End, "TEST-KERBEROS-1.2.0");
+    KLInsertKerberosRealm (realmList_End, "TESTV5-KERBEROS-1.2.0");
+    KLInsertKerberosRealm (realmList_End, "TEST-HEIMDAL-0.3D");
+    KLInsertKerberosRealm (realmList_End, "TESTV5-HEIMDAL-0.3D");
+    KLInsertKerberosRealm (realmList_End, "TEST-KTH-KRB-1.1");
+}      
+
+
+void TestLoginOptions (void)
+{
+    KLBoolean optionSetting;
+    KLStatus err = klNoErr;
+    KLLifetime lifetime;
+    
+    lifetime = 10*60;
+    KLSetDefaultLoginOption(loginOption_MinimalTicketLifetime, &lifetime, sizeof(KLLifetime));
+    
+    lifetime = 8*60*60;
+    KLSetDefaultLoginOption(loginOption_MaximalTicketLifetime, &lifetime, sizeof(KLLifetime));
+    
+    lifetime = 8*60*60;
+    KLSetDefaultLoginOption(loginOption_DefaultTicketLifetime, &lifetime, sizeof(KLLifetime));
+        
+    optionSetting = FALSE;
+    KLSetDefaultLoginOption(loginOption_DefaultForwardableTicket, &optionSetting, sizeof(optionSetting));
+    
+    optionSetting = TRUE;
+    KLSetDefaultLoginOption(loginOption_RememberPrincipal, &optionSetting, sizeof(optionSetting));
+    
+    optionSetting = TRUE;
+    err = KLSetDefaultLoginOption(loginOption_RememberExtras, &optionSetting, sizeof(optionSetting));
+    
+    if (err == klNoErr) {
+        KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+        optionSetting = TRUE;
+        KLAcquireNewInitialTickets (NULL, NULL, NULL, NULL);
+    }
+}
+
+
+/* Lame date formatting stolen from CCacheDump, like ctime but with no \n */
+
+static const char *day_name[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
+
+static const char *month_name[] = {"January", "February", "March","April","May","June",
+"July", "August",  "September", "October", "November","December"};
+
+char* TimeToString (char* timeString, long t)
+{
+    /* we come in in 1970 time */
+    time_t timer = (time_t) t;
+    struct tm tm;
+    
+    tm = *localtime (&timer);
+    
+    sprintf(timeString, "%.3s %.3s%3d %.2d:%.2d:%.2d %d",
+            day_name[tm.tm_wday],
+            month_name[tm.tm_mon],
+            tm.tm_mday,
+            tm.tm_hour,
+            tm.tm_min,
+            tm.tm_sec,
+            tm.tm_year + 1900);
+    
+    return timeString;
+}
+
+
+void MyKerberosLoginIdleCallback (KLRefCon inAppData)
+{
+    syslog (LOG_ALERT, "App got callback while waiting for Mach IPC (appData == %d)\n", inAppData);
+    //    KLCancelAllDialogs ();
+}
+
diff --git a/src/kim/test/test_kll_terminal.c b/src/kim/test/test_kll_terminal.c
new file mode 100644 (file)
index 0000000..9c22625
--- /dev/null
@@ -0,0 +1,39 @@
+#include <Kerberos/Kerberos.h>
+
+
+
+int main (void) 
+{
+    KLStatus           err;
+    KLPrincipal                principal;
+    char                       *principalName;
+    char                       *cacheName;
+    
+    printf ("Testing KLAcquireNewTickets (nil)...\n");
+
+    err = KLAcquireNewTickets (nil, &principal, &cacheName);
+    if (err == klNoErr) {
+        err = KLGetStringFromPrincipal (principal, kerberosVersion_V5, &principalName);
+        if (err == klNoErr) {
+            printf ("Got tickets for '%s' in cache '%s'\n", principalName, cacheName);
+            KLDisposeString (principalName);
+        } else {
+            printf ("KLGetStringFromPrincipal() returned (err = %ld)\n", err); 
+        }
+        KLDisposeString (cacheName);
+        
+        printf ("Testing KLChangePassword (principal)...\n");
+        
+        err = KLChangePassword (principal);
+        if (err != klNoErr) {
+            printf ("KLChangePassword() returned (err = %ld)\n", err);
+        }
+        
+        KLDisposePrincipal (principal);
+    } else {
+        printf ("KLAcquireNewTickets() returned (err = %ld)\n", err);
+    }
+    
+    printf ("All done testing!\n");  
+    return 0;  
+}
\ No newline at end of file