• Show log

    Commit

  • Hash : bd270b70
    Author : Carlos Martín Nieto
    Date : 2014-04-18T17:08:10

    cred: tighten username rules
    
    The ssh-specific credentials allow the username to be missing. The idea
    being that the ssh transport will then use the username provided in the
    url, if it's available. There are two main issues with this.
    
    The credential callback already knows what username was provided by the
    url and needs to figure out whether it wants to ask the user for it or
    it can reuse it, so passing NULL as the username means the credential
    callback is suspicious.
    
    The username provided in the url is not in fact used by the
    transport. The only time it even considers it is for the user/pass
    credential, which asserts the existence of a username in its
    constructor. For the ssh-specific ones, it passes in the username stored
    in the credential, which is NULL. The libssh2 macro we use runs strlen()
    against this value (which is no different from what we would be doing
    ourselves), so we then crash.
    
    As the documentation doesn't suggest to leave out the username, assert
    the need for a username in the code, which removes this buggy behavior
    and removes implicit state.
    
    git_cred_has_username() becomes a blacklist of credential types that do
    not have a username. The only one at the moment is the 'default' one,
    which is meant to call up some Microsoft magic.