static void ks_store(vlc_keystore *p_keystore, const char *const ppsz_values[KEY_MAX], const uint8_t* p_secret, size_t i_secret_len) { assert(vlc_keystore_store(p_keystore, ppsz_values, (const uint8_t *)p_secret, i_secret_len, "libVLC TEST") == VLC_SUCCESS); }
bool vlc_credential_store(vlc_credential *p_credential, vlc_object_t *p_parent) { if (!is_credential_valid(p_credential)) return false; /* Don't need to store again */ if (p_credential->b_from_keystore) return p_credential->b_from_keystore; vlc_keystore *p_keystore; if (p_credential->b_store) { /* Store in permanent keystore */ assert(p_credential->p_keystore != NULL); p_keystore = p_credential->p_keystore; } else { /* Store in memory keystore */ p_keystore = get_memory_keystore(p_parent); } if (p_keystore == NULL) return false; const vlc_url_t *p_url = p_credential->p_url; char *psz_path = NULL; if (protocol_store_path(p_url) && (psz_path = vlc_uri_decode_duplicate(p_url->psz_path)) != NULL) { char *p_slash; if (protocol_is_smb(p_url)) { /* Remove all characters after the first slash (store the share but * not the path) */ p_slash = strchr(psz_path + 1, '/'); } else { /* Remove all characters after the last slash (store the path * without the filename) */ p_slash = strrchr(psz_path + 1, '/'); } if (p_slash && psz_path != p_slash) *p_slash = '\0'; } const char *ppsz_values[KEY_MAX] = { 0 }; ppsz_values[KEY_PROTOCOL] = p_url->psz_protocol; ppsz_values[KEY_USER] = p_credential->psz_username; ppsz_values[KEY_SERVER] = p_url->psz_host; ppsz_values[KEY_PATH] = psz_path; ppsz_values[KEY_REALM] = p_credential->psz_realm; ppsz_values[KEY_AUTHTYPE] = p_credential->psz_authtype; char psz_port[21]; if (protocol_set_port(p_url, psz_port)) ppsz_values[KEY_PORT] = psz_port; char *psz_label; if (asprintf(&psz_label, "LibVLC password for %s://%s%s", p_url->psz_protocol, p_url->psz_host, psz_path ? psz_path : "") == -1) { free(psz_path); return false; } const uint8_t *p_password = (const uint8_t *) (p_credential->psz_password != NULL ? p_credential->psz_password : ""); bool b_ret = vlc_keystore_store(p_keystore, ppsz_values, p_password, -1, psz_label) == VLC_SUCCESS; free(psz_label); free(psz_path); return b_ret; }