#include #include #include #include #include using namespace KWallet; #include "kwallets_rw.h" #include "kwallets_rw.moc" //#include "mytest.h" // char *applName="dcopifacedemo"; char *applName="casaconsole"; QStringList walletList; DCOPDemoWidget *win = new DCOPDemoWidget(); DCOPDemoWidget::DCOPDemoWidget() { if ( !kapp->dcopClient()->isRegistered() ) { kapp->dcopClient()->registerAs( "casaconsole" ); } } DCOPDemoWidget::~DCOPDemoWidget() { for ( QStringList::Iterator walletIter = walletList.begin(); walletIter != walletList.end(); ++walletIter ) { QString walletName = (*walletIter); Wallet::disconnectApplication(walletName,applName); } } int DCOPDemoWidget::ReadKey(Wallet *wallet,QString key, QByteArray *secretVal) { // Read the secret from the entry QByteArray value; if (wallet->readEntry(key, value)==0) { if (value) { *secretVal = value; QDataStream convert(*secretVal, IO_ReadOnly); if (wallet->entryType(key) == 1 ) { // Convert the ByteArray to QString QString passwd; convert >> passwd; } else if (wallet->entryType(key) == 3) { // If the entry is of type "map" // Convert the ByteArray to QMap QMap mapSecret; convert >> mapSecret; // Iterate through each map entry. QMap::Iterator mapIter; QString tempSecret = QString::fromLatin1(""); for ( mapIter = mapSecret.begin(); mapIter != mapSecret.end(); ++mapIter ) { // This logic has to be improved tempSecret.append(mapIter.key().latin1()); tempSecret.append(":"); tempSecret.append(mapIter.data().latin1()); if ((++mapIter) != mapSecret.end()) tempSecret.append(";"); --mapIter; } // Convert the QString to QByteArray QDataStream stream(*secretVal, IO_WriteOnly); stream << tempSecret ; } } else { printf("Could not read the entry..inner IF\n"); return -1; } } else { printf("Could not read the entry Inside wallet->readkey\n"); return -1; } return 0; } extern "C" { struct EnumSecretList *tempEnumSecrets = NULL; //void MyTest(struct EnumSecretList *enumWalletSecrets) void Aggregate(struct EnumSecretList *enumWalletSecrets) { int retVal = 0; tempEnumSecrets = NULL; retVal = win->ReadAllWalletSecrets(&tempEnumSecrets); struct EnumSecretList *iter = tempEnumSecrets; //struct EnumSecretList *head = tempEnumSecrets; /* if (iter == NULL) { printf("Native has given NULLLL\n"); enumWalletSecrets = NULL; return; } */ while (iter != NULL) { /* printf("\n\n**Wallet Name : %s\n",iter->walletName); printf("\t**Folder Name : %s\n",iter->folderName); printf("\t\t**Secret Type : %d\n",iter->entryType); printf("\t\t\t**Secret Value : %s\n",iter->secretVal); */ enumWalletSecrets->walletName = iter->walletName; enumWalletSecrets->folderName = iter->folderName; enumWalletSecrets->secretVal = iter->secretVal; enumWalletSecrets->entryType = iter->entryType; enumWalletSecrets->next = iter->next; iter = iter->next; if (iter != NULL) { enumWalletSecrets = enumWalletSecrets->next ; } else { enumWalletSecrets = NULL; } } /* // Free the list struct EnumSecretList *temp; while (head != NULL) { free(head->walletName); free(head->folderName); free(head->secretVal); //free(head->entryType); temp = head->next; free(head); head = temp; } */ } void FreeList() { struct EnumSecretList *head = tempEnumSecrets; // Free the list struct EnumSecretList *temp; while (head != NULL) { free(head->walletName); free(head->folderName); free(head->secretVal); //free(head->entryType); temp = head->next; free(head); head = temp; } } } int DCOPDemoWidget::ReadAllWalletSecrets(struct EnumSecretList **enumWalletSecrets) { walletList = Wallet::walletList(); for ( QStringList::Iterator walletIter = walletList.begin(); walletIter != walletList.end(); ++walletIter ) { QString walletName = (*walletIter); // printf("The wallet name is %s\n",(*walletIter).latin1()); // Open the wallet Wallet *wallet = NULL; wallet = Wallet::openWallet(walletName,0,Wallet::Synchronous); if (wallet == NULL) { printf("Could not open the wallet\n"); return -1; } // Get the folder list of the wallet QStringList folderList = wallet->folderList(); for ( QStringList::Iterator folderIter = folderList.begin(); folderIter != folderList.end(); ++folderIter) { // printf("\t%s\n",(*folderIter).latin1()); QString folderName = (*folderIter); // Set the current folder if (!(wallet->setFolder(folderName))) { printf("Could not set the folder\n"); return -1; } // Get the list of entries in the folder QStringList entryList = wallet->entryList(); for ( QStringList::Iterator entryIter = entryList.begin(); entryIter != entryList.end(); ++entryIter) { //printf("Entry Name : \t\t%s\n",(*entryIter).latin1()); // Read the secret from the entry QString key = (*entryIter); QByteArray *secretVal = new QByteArray(); if (ReadKey(wallet,key,secretVal) != 0) { printf("Could not read \"%s\"\n",key.latin1()); break; //FIXME } struct EnumSecretList *tempWalletSecrets = (struct EnumSecretList*)malloc(sizeof(struct EnumSecretList)); if (tempWalletSecrets == NULL) { printf("Memory Allocation failure\n"); return -1; } tempWalletSecrets->walletName = (char*)malloc(512); if (tempWalletSecrets->walletName == NULL) { printf("Memory Allocation failure\n"); return -1; } //printf("Wallet Name is %s\n",walletName.latin1()); strcpy(tempWalletSecrets->walletName, walletName.latin1()); tempWalletSecrets->folderName = (char*)malloc(512); if (tempWalletSecrets->folderName == NULL) { printf("Memory Allocation failure\n"); return -1; } // printf("Folder Name is %s\n",folderName.latin1()); strcpy(tempWalletSecrets->folderName, folderName.latin1()); tempWalletSecrets->entryType = wallet->entryType(key); // printf("EntryType is %d\n",wallet->entryType(key)); if (*enumWalletSecrets == NULL) { *enumWalletSecrets = tempWalletSecrets; } else { struct EnumSecretList *iter; for(iter=*enumWalletSecrets; iter->next!=NULL; iter=iter->next); iter->next = tempWalletSecrets; } tempWalletSecrets->next = NULL; QDataStream convert(*secretVal, IO_ReadOnly); QString passwd; convert >> passwd; tempWalletSecrets->secretVal = (char*)malloc(512); if (tempWalletSecrets->secretVal == NULL) { printf("Memory Allocation failure\n"); return -1; } strcpy(tempWalletSecrets->secretVal,key.latin1()); //printf("After strcpy - 1 - key is %s\n",key.latin1()); strcat(tempWalletSecrets->secretVal,"="); //printf("After strcat = \n"); if(passwd) { //printf("Passwd is %s\n",passwd.latin1()); strcat(tempWalletSecrets->secretVal,passwd.latin1()); } // Free memory free(secretVal); // printf("After free\n"); } } // Print all the secrets /* struct EnumSecretList *iter = *enumWalletSecrets; while (iter != NULL) { printf("\n\nWallet Name : %s\n",iter->walletName); printf("\tFolder Name : %s\n",iter->folderName); printf("\t\tSecret Type : %d\n",iter->entryType); printf("\t\t\t Secret Value : %s\n",iter->secretVal); iter = iter->next; } */ } return(0); }