Changes

Jump to: navigation, search

OS X Keychain integration osxkeychain.patch

6,319 bytes added, 22:07, 8 February 2007
no edit summary
<pre>
Index: mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.cpp
===================================================================
--- mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.cpp (revision 17)
+++ mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.cpp (revision 19)
@@ -222,6 +222,7 @@

nsPasswordManager::~nsPasswordManager()
{
+ delete inst;
}


@@ -2114,3 +2115,70 @@
getter_Copies(str));
aResult.Assign(str);
}
+
+int nsPasswordManager::ChangeInternetPassword (SecKeychainItemRef itemRef, int accountNameLength, const char *accountName, int passwordLength, const void *passwordData) {
+
+ int rc = 0;
+
+ if (accountName && passwordData) {
+
+ SecKeychainAttribute attrs[] = {{ kSecAccountItemAttr, accountNameLength, (char *)accountName }};
+
+ const SecKeychainAttributeList attributes = { sizeof(attrs) / sizeof(attrs[0]), attrs };
+ rc = SecKeychainItemModifyAttributesAndData (itemRef, &attributes, passwordLength, passwordData);
+
+ } else {
+
+ rc = SecKeychainItemModifyAttributesAndData (itemRef, NULL, passwordLength, passwordData);
+
+ }
+
+ return rc;
+
+}
+
+int nsPasswordManager::RetrieveInternetPassword (
+ SecKeychainRef keychain/* a reference to the keychain where the entry will be added to. If NULL then the default keychain is used. */,
+ int serverNameLength, const char *serverName, int securityDomainLength,
+ const char *securityDomain,int pathLength,
+ const char *path, int port, SecProtocolType protocol, SecAuthenticationType authenticationType,
+ UInt32 *passwordLength, void **passwordData,SecKeychainItemRef *itemRef){
+
+ int rc = 0;
+ rc = SecKeychainFindInternetPassword (keychain, serverNameLength, serverName, securityDomainLength,securityDomain,
+ NULL, NULL, pathLength, path, port, protocol, authenticationType, passwordLength, passwordData, itemRef);
+
+ return rc;
+
+ }
+
+ int nsPasswordManager::AddInternetPassword (
+ SecKeychainRef keychain/* a reference to the keychain where the entry will be added to. If NULL then the default keychain is used. */,
+ int serverNameLength, const char *serverName /* eg. www.google.com */,
+ int securityDomainLength, const char *securityDomain,
+ int accountNameLength, const char *accountName /* username */, int pathLength,
+ const char *path /* the path to the login form eg. www.google.com'/dir' */,
+ int port /* the port by which the connection is made to the server: 80,443. etc... etc... */,
+ SecProtocolType protocol /* protocol type (ftp, http and so on) */
+ /* http://developer.apple.com/documentation/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/c_ref/SecProtocolType */,
+ SecAuthenticationType authenticationType /* authentication type idetifier */
+ /* http://developer.apple.com/documentation/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/c_ref/SecAuthenticationType */,
+ int passwordLength, const void *passwordData /* A pointer to a buffer containing the password data to be stored in the keychain */,
+ SecKeychainItemRef *itemRef /* a reference to a keychain item */) {
+ int rc = 0;
+ rc = SecKeychainAddInternetPassword (keychain , serverNameLength, serverName, securityDomainLength,
+ securityDomain, accountNameLength, accountName, pathLength, path, port, protocol, authenticationType,
+ passwordLength, passwordData, itemRef);
+
+ return rc;
+}
+
+nsPasswordManager* nsPasswordManager::getInstance(){
+ if (inst == NULL) {
+ inst = new nsPasswordManager;
+ }
+ return inst;
+
+}
+
+nsPasswordManager* nsPasswordManager::inst = NULL;
Index: mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.h
===================================================================
--- mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.h (revision 17)
+++ mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.h (revision 19)
@@ -49,6 +49,10 @@
#include "nsIPrefBranch.h"
#include "nsIPromptFactory.h"

+#include <CoreFoundation.h>
+#include <Security.h>
+#include <CoreServices.h>
+
/* 360565c4-2ef3-4f6a-bab9-94cca891b2a7 */
#define NS_PASSWORDMANAGER_CID \
{0x360565c4, 0x2ef3, 0x4f6a, {0xba, 0xb9, 0x94, 0xcc, 0xa8, 0x91, 0xb2, 0xa7}}
@@ -136,8 +140,23 @@
nsIAutoCompleteResult* aPreviousResult,
nsIDOMHTMLInputElement* aElement,
nsIAutoCompleteResult** aResult);
+
+ int AddInternetPassword (SecKeychainRef keychain, int serverNameLength, const char *serverName, int securityDomainLength,
+ const char *securityDomain, int accountNameLength, const char *accountName, int pathLength,
+ const char *path, int port, SecProtocolType protocol, SecAuthenticationType authenticationType,
+ int passwordLength, const void *passwordData, SecKeychainItemRef *itemRef);
+
+ int RetrieveInternetPassword (SecKeychainRef keychain, int serverNameLength, const char *serverName, int securityDomainLength,
+ const char *securityDomain,int pathLength,
+ const char *path, int port, SecProtocolType protocol, SecAuthenticationType authenticationType,
+ UInt32 *passwordLength, void **passwordData,SecKeychainItemRef *itemRef);
+
+ int ChangeInternetPassword (SecKeychainItemRef itemRef, int accountNameLength, const char *accountName,
+ int passwordLength, const void *passwordData);
+ static nsPasswordManager* getInstance();

</pre>
1
edit

Navigation menu