[vlc-devel] [PATCH v3 01/11] keystore: refactor next order handling

Thomas Guillem thomas at gllm.fr
Tue Dec 22 09:38:05 UTC 2020



On Tue, Dec 22, 2020, at 09:07, Rémi Denis-Courmont wrote:
> Le maanantaina 21. joulukuuta 2020, 19.54.26 EET Thomas Guillem a écrit :
> > The order is now incremented before the processing.
> > 
> > No functional changes, will be used by the next commit.
> > ---
> >  include/vlc_keystore.h |  1 +
> >  src/misc/keystore.c    | 29 ++++++++++++++++++++---------
> >  2 files changed, 21 insertions(+), 9 deletions(-)
> > 
> > diff --git a/include/vlc_keystore.h b/include/vlc_keystore.h
> > index 80262987c28..a5c9e29faa2 100644
> > --- a/include/vlc_keystore.h
> > +++ b/include/vlc_keystore.h
> > @@ -177,6 +177,7 @@ struct vlc_credential
> > 
> >      /* internal */
> >      enum {
> > +        GET_FROM_INIT,
> >          GET_FROM_URL,
> >          GET_FROM_OPTION,
> >          GET_FROM_MEMORY_KEYSTORE,
> 
> This is strange. The caller ought to know if it needs any credentials, or if 
> it needs new credential because the previous ones fail(ed).
> 
> This looks like you are trying to second-guess the caller.

This patch doesn't change the current behavior. vlc_credential is a helper around the keystore. I noticed that all accesses used the same logic. First use the credential from the URL (but it's discouraged with a warning), then from a VLC option ("smb-user", "ftp-user"...), then from the keystore and finally from the dialog until credential is valid or the user cancel it.

> 
> > diff --git a/src/misc/keystore.c b/src/misc/keystore.c
> > index d58e8dea982..31aaf39e9ec 100644
> > --- a/src/misc/keystore.c
> > +++ b/src/misc/keystore.c
> > @@ -351,7 +351,7 @@ vlc_credential_init(vlc_credential *p_credential, const
> > vlc_url_t *p_url) assert(p_credential);
> > 
> >      memset(p_credential, 0, sizeof(*p_credential));
> > -    p_credential->i_get_order = GET_FROM_URL;
> > +    p_credential->i_get_order = GET_FROM_INIT;
> >      p_credential->p_url = p_url;
> >  }
> > 
> > @@ -371,6 +371,19 @@ vlc_credential_clean(vlc_credential *p_credential)
> >      free(p_credential->psz_dialog_password);
> >  }
> > 
> > +static int
> > +credential_get_next_order(vlc_credential *p_credential, vlc_object_t
> > *p_parent) +{
> > +    (void) p_parent;
> > +
> > +    /* DIALOG is the last way to fetch credential, use it until credentials
> > are +     * valid or until the user cancel it */
> > +    if (p_credential->i_get_order == GET_FROM_DIALOG)
> > +        return p_credential->i_get_order;
> > +
> > +    return ++p_credential->i_get_order;
> > +}
> > +
> >  #undef vlc_credential_get
> >  bool
> >  vlc_credential_get(vlc_credential *p_credential, vlc_object_t *p_parent,
> > @@ -401,8 +414,10 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent, * Finally, fetch credential from the dialog (if
> > any). This last will be * repeated until user cancel the dialog. */
> > 
> > -        switch (p_credential->i_get_order)
> > +        switch (credential_get_next_order(p_credential, p_parent))
> >          {
> > +        case GET_FROM_INIT:
> > +            return false;
> >          case GET_FROM_URL:
> >              p_credential->psz_username = p_url->psz_username;
> >              p_credential->psz_password = p_url->psz_password;
> > @@ -412,7 +427,6 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent,
> > 
> >              if (p_url->psz_username && protocol_is_smb(p_url))
> >                  smb_split_domain(p_credential);
> > -            p_credential->i_get_order++;
> >              break;
> > 
> >          case GET_FROM_OPTION:
> > @@ -432,8 +446,6 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent, p_credential->psz_username =
> > p_credential->psz_var_username; if (p_credential->psz_var_password)
> >                  p_credential->psz_password =
> > p_credential->psz_var_password; -
> > -            p_credential->i_get_order++;
> >              break;
> > 
> >          case GET_FROM_MEMORY_KEYSTORE:
> > @@ -441,7 +453,6 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent, vlc_keystore *p_keystore =
> > get_memory_keystore(p_parent); if (p_keystore != NULL)
> >                  credential_find_keystore(p_credential, p_keystore);
> > -            p_credential->i_get_order++;
> >              break;
> >          }
> > 
> > @@ -453,11 +464,8 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent, p_credential->p_keystore =
> > vlc_keystore_create(p_parent); if (p_credential->p_keystore != NULL)
> >                  credential_find_keystore(p_credential,
> > p_credential->p_keystore); -
> > -            p_credential->i_get_order++;
> >              break;
> > 
> > -        default:
> >          case GET_FROM_DIALOG:
> >              if (!psz_dialog_title || !psz_dialog_fmt)
> >                  return false;
> > @@ -496,6 +504,9 @@ vlc_credential_get(vlc_credential *p_credential,
> > vlc_object_t *p_parent, smb_split_domain(p_credential);
> > 
> >              break;
> > +
> > +        default:
> > +            vlc_assert_unreachable();
> >          }
> >      }
> >      return is_credential_valid(p_credential);
> 
> 
> -- 
> レミ・デニ-クールモン
> http://www.remlab.net/
> 
> 
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list