OS X Keychain integration osxkeychain.patch

From CDOT Wiki
Revision as of 22:07, 8 February 2007 by Pcvitori (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
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();