[vlc-commits] vlc_credential: always store and compare port numbers
Thomas Guillem
git at videolan.org
Fri Feb 26 10:59:17 CET 2016
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Feb 25 19:11:08 2016 +0100| [03265729bbfbd28bccbb1eda0e10f60ea85edb74] | committer: Thomas Guillem
vlc_credential: always store and compare port numbers
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=03265729bbfbd28bccbb1eda0e10f60ea85edb74
---
src/misc/keystore.c | 41 +++++++++++++++++++++++++----------------
1 file changed, 25 insertions(+), 16 deletions(-)
diff --git a/src/misc/keystore.c b/src/misc/keystore.c
index 6f31eb2..c7a072e 100644
--- a/src/misc/keystore.c
+++ b/src/misc/keystore.c
@@ -206,7 +206,7 @@ is_credential_valid(vlc_credential *p_credential)
static struct
{
const char * psz_protocol;
- unsigned int i_port;
+ uint16_t i_port;
} protocol_default_ports [] = {
{ "rtsp", 80 },
{ "http", 80 },
@@ -218,15 +218,29 @@ static struct
/* Don't store a port if it's the default one */
static bool
-protocol_is_default_port(const vlc_url_t *p_url)
+protocol_set_port(const vlc_url_t *p_url, char *psz_port)
{
- for (unsigned int i = 0; i < sizeof(protocol_default_ports)
- / sizeof(*protocol_default_ports); ++i)
+ int i_port = -1;
+
+ if (p_url->i_port != 0 && p_url->i_port <= UINT16_MAX)
+ i_port = p_url->i_port;
+ else
+ {
+ for (unsigned int i = 0; i < sizeof(protocol_default_ports)
+ / sizeof(*protocol_default_ports); ++i)
+ {
+ if (strcasecmp(p_url->psz_protocol,
+ protocol_default_ports[i].psz_protocol) == 0)
+ {
+ i_port = protocol_default_ports[i].i_port;
+ break;
+ }
+ }
+ }
+ if (i_port != -1)
{
- if (p_url->i_port == protocol_default_ports[i].i_port
- && strcasecmp(p_url->psz_protocol,
- protocol_default_ports[i].psz_protocol) == 0)
- return true;
+ sprintf(psz_port, "%u", (uint16_t) i_port);
+ return true;
}
return false;
}
@@ -277,11 +291,8 @@ credential_find_keystore(vlc_credential *p_credential, vlc_keystore *p_keystore)
ppsz_values[KEY_REALM] = p_credential->psz_realm;
ppsz_values[KEY_AUTHTYPE] = p_credential->psz_authtype;
char psz_port[21];
- if (p_url->i_port > 0 && !protocol_is_default_port(p_url))
- {
- sprintf(psz_port, "%u", p_url->i_port);
+ if (protocol_set_port(p_url, psz_port))
ppsz_values[KEY_PORT] = psz_port;
- }
vlc_keystore_entry *p_entries;
unsigned int i_entries_count;
@@ -299,6 +310,7 @@ credential_find_keystore(vlc_credential *p_credential, vlc_keystore *p_keystore)
if (p_credential->i_entries_count > 0)
{
vlc_keystore_entry *p_entry;
+
if (protocol_store_path(p_url))
p_entry = find_closest_path(p_credential->p_entries,
p_credential->i_entries_count,
@@ -535,11 +547,8 @@ vlc_credential_store(vlc_credential *p_credential, vlc_object_t *p_parent)
ppsz_values[KEY_AUTHTYPE] = p_credential->psz_authtype;
char psz_port[21];
- if (p_url->i_port > 0 && !protocol_is_default_port(p_url))
- {
- sprintf(psz_port, "%u", p_url->i_port);
+ 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",
More information about the vlc-commits
mailing list