[vlc-commits] keychain: Store secret as pure binary data

David Fuhrmann git at videolan.org
Thu Sep 20 20:37:02 CEST 2018


vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Thu Sep 20 20:34:08 2018 +0200| [e0fd6bbe9e649cfaeac7ca6df6c7d89ac2471e7f] | committer: David Fuhrmann

keychain: Store secret as pure binary data

This allows to store binary data additionally to string passwords.
This change will lead to a needed update of all credentials stored
with previous versions of VLC.

closes #20790

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e0fd6bbe9e649cfaeac7ca6df6c7d89ac2471e7f
---

 modules/keystore/keychain.m | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/modules/keystore/keychain.m b/modules/keystore/keychain.m
index 8eec53ba09..63336be554 100644
--- a/modules/keystore/keychain.m
+++ b/modules/keystore/keychain.m
@@ -293,6 +293,8 @@ static int Store(vlc_keystore *p_keystore,
         return VLC_EGENERIC;
     }
 
+    msg_Dbg(p_keystore, "Store keychain entry for server %s", ppsz_values[KEY_SERVER]);
+
     NSMutableDictionary *query = nil;
     NSMutableDictionary *searchQuery = CreateQuery(p_keystore);
 
@@ -307,7 +309,7 @@ static int Store(vlc_keystore *p_keystore,
     /* search */
     status = SecItemCopyMatching((__bridge CFDictionaryRef)searchQuery, &result);
     /* create storage unit */
-    NSData *secretData = [[NSString stringWithFormat:@"%s", p_secret] dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *secretData = [NSData dataWithBytes:p_secret length:i_secret_len];
 
     if (status == errSecSuccess) {
         msg_Dbg(p_keystore, "the item was already known to keychain, so it will be updated");
@@ -350,6 +352,8 @@ static unsigned int Find(vlc_keystore *p_keystore,
     NSMutableDictionary *baseLookupQuery = CreateQuery(p_keystore);
     OSStatus status;
 
+    msg_Dbg(p_keystore, "Lookup keychain entry for server %s", ppsz_values[KEY_SERVER]);
+
     /* set attributes */
     SetAttributesForQuery(ppsz_values, baseLookupQuery, NULL);
 
@@ -401,13 +405,7 @@ static unsigned int Find(vlc_keystore *p_keystore,
         }
 
         NSData *secretData = (__bridge_transfer NSData *)secretResult;
-        NSUInteger secretDataLength = secretData.length;
-
-        /* we need to do some padding here, as string is expected to be 0 terminated */
-        uint8_t *paddedSecretData = calloc(1, secretDataLength + 1);
-        memcpy(paddedSecretData, secretData.bytes, secretDataLength);
-        vlc_keystore_entry_set_secret(p_entry, paddedSecretData, secretDataLength + 1);
-        free(paddedSecretData);
+        vlc_keystore_entry_set_secret(p_entry, secretData.bytes, secretData.length);
     }
 
     *pp_entries = p_entries;



More information about the vlc-commits mailing list