Difference between revisions of "OS X Keychain integration Keychain main.cpp"
(No difference)
|
Latest revision as of 21:06, 8 February 2007
//Authors: Mohammad Tirtashi mo3b.com // Phillip Vitorino philv.com //Last changed: December 9th 2006 //main.cpp #include "keychain.h" // this is just a main to test the keychain class int main () { int rcret = 0; //stores the return value when we a record is retrieved. "-25300" = no such item exists, "0" = a record already exists. int rcsav = 0; //0 = entry saved. anything else = uh oh!. int rcchg = 0; //0 = change successful. anything else = huston we have a problem. SecKeychainItemRef itemRef = NULL; // an instance of a keychain item. char website[11] = "google.com"; // the domain attribute in the keychain item. website[10] = '\0'; char account[4] = "moe"; // the username attribute. account[3] = '\0'; void *retpassword = NULL; //stores the retrieved password from the keychain item UInt32 retpasswordlen = NULL; const void *savpassword = "1337"; //password to be saved const void *savpassword2 = "pstdeni"; char *tempretpass = NULL; keychain *test = keychain::getInstance(); //gets an instance of the keychain object. // attemps to retrieve the password for the first time. if an account exists then the password is retrieved. rcret = test->RetrieveInternetPassword(NULL,10,website,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&retpasswordlen,&retpassword,&itemRef); printf("Account exists: %d", rcret); tempretpass = new char[retpasswordlen]; tempretpass = (char *)retpassword; printf("\nPassword is now: %s", retpassword); // if the account did not exist. if (rcret != 0) { // first we attemp to add a new keychain item. rcsav = test->AddInternetPassword(NULL,10,website, NULL, NULL, 3, account, NULL, NULL , 20, kSecProtocolTypeFTP, 1,4, savpassword, NULL); printf("\nAccount added: %d", rcsav); // if saving the keychain item was successful if (rcsav == 0){ // retrieving password from the keychain item we just added rcret = test->RetrieveInternetPassword(NULL,10,website,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&retpasswordlen,&retpassword,&itemRef); printf("\nAccount exists: %d", rcret); // changing the password tempretpass = new char[retpasswordlen]; tempretpass = (char *)retpassword; printf("\nPassword is now: %s", retpassword); // updating the keychain item with the new password rcchg = test->ChangeInternetPassword(itemRef, 3,account,7,savpassword2); printf("\nPassword changed: %d", rcret); // retrieving the password again to see if it changed. rcret = test->RetrieveInternetPassword(NULL,10,website,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&retpasswordlen,&retpassword,&itemRef); tempretpass = new char[retpasswordlen]; tempretpass = (char *)retpassword; printf("\nPassword is now: %s", retpassword); }else{ printf("\nFailed to add account: %d", rcsav); } }else{ printf("\nAccount existed or : %d", rcret); } //SecKeychainItemFreeContent(NULL, savpassword); if (itemRef) CFRelease(itemRef); delete tempretpass; return 0; }