Moving micasa 1.5 trunk to Novell forge.
This commit is contained in:
389
c_adlib/ad_kw/native/kwallets_rw.cpp
Normal file
389
c_adlib/ad_kw/native/kwallets_rw.cpp
Normal file
@@ -0,0 +1,389 @@
|
||||
#include<stdio.h>
|
||||
#include <kapp.h>
|
||||
#include <kcmdlineargs.h>
|
||||
#include<kwallet.h>
|
||||
#include <dcopclient.h>
|
||||
|
||||
|
||||
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<QString,QString> mapSecret;
|
||||
convert >> mapSecret;
|
||||
|
||||
// Iterate through each map entry.
|
||||
QMap<QString,QString>::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)
|
||||
{
|
||||
|
||||
printf("inside natiove agg");
|
||||
int retVal = 0;
|
||||
// struct EnumSecretList *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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user