message: Fix updating of Keychain passwords on macOS
  Securely stored passwords (i.e. Crowdin OAuth token) could only be
  saved once, but not subsequently updated. Fix keytar::AddPassword() to
  handle this case correctly and update previously stored credentials
  instead of failing with errSecDuplicateItem.
diff: @@ -53,6 +53,30 @@ bool AddPassword(const std::string& service, const std::string& user, const std:
  (UInt32)password.length(),
  password.data(),
  NULL);
  +
  + if (status == errSecDuplicateItem)
  + {
  + SecKeychainItemRef item = NULL;
  + status = SecKeychainFindGenericPassword(NULL,
  + (UInt32)serv.length(),
  + serv.data(),
  + (UInt32)user.length(),
  + user.data(),
  + NULL,
  + NULL,
  + &item);
  + if (status == errSecSuccess)
  + {
  + status = SecKeychainItemModifyContent(item,
  + NULL,
  + (UInt32)password.length(),
  + password.data());
  + }
  +
  + if (item)
  + CFRelease(item);
  + }
  +
  return status == errSecSuccess;
  }
  