summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | merge: analysis support for bare repositoriesRobert Coup2019-06-101-3/+0
| | |/ | |/|
* | | Merge pull request #5104 from rcoup/patch-1Patrick Steinhardt2019-06-131-0/+26
|\ \ \ | |_|/ |/| | Add memleak check docs
| * | Add memleak check docsRobert Coup2019-06-121-0/+26
| | | | | | | | | | | | Document how to run it locally on macOS & Linux
* | | Merge pull request #5098 from pks-t/pks/clar-data-drivenEdward Thomson2019-06-112-82/+86
|\ \ \ | | | | | | | | Data-driven tests
| * | | tests: object: consolidate cache testsPatrick Steinhardt2019-06-071-68/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The object::cache test module has two tests that do nearly the same thing: given a cache limit, load a certain set of objects and verify if those objects have been cached or not. Convert those tests to the new data-driven initializers to demonstrate how these are to be used. Furthermore, add some additional test data. This conversion is mainly done to show this new facility.
| * | | tests: allow for simple data-driven testsPatrick Steinhardt2019-06-071-14/+29
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Right now, we're not able to use data-driven tests at all. E.g. given a set of tests which we'd like to repeat with different test data, one has to hand-write any outer loop that iterates over the test data and then call each of the test functions. Next to being bothersome, this also has the downside that error reporting is quite lacking, as one never knows which test data actually produced failures. So let's implement the ability to re-run complete test modules with changing test data. To retain backwards compatibility and enable trivial addition of new runs with changed test data, we simply extend clar's generate.py. Instead of scanning for a single `_initialize` function, each test module may now implement multiple `_initialize_foo` functions. The generated test harness will then run all test functions for each of the provided initializer functions, making it possible to provide different test data inside of each of the initializer functions. Example: ``` void test_git_example__initialize_with_nonbare_repo(void) { g_repo = cl_git_sandbox_init("testrepo"); } void test_git_example__initialize_with_bare_repo(void) { g_repo = cl_git_sandbox_init("testrepo.git"); } void test_git_example__cleanup(void) { cl_git_sandbox_cleanup(); } void test_git_example__test1(void) { test1(); } void test_git_example__test2(void) { test2(); } ``` Executing this test module will cause the following output: ``` $ ./libgit2_clar -sgit::example git::example (with nonbare repo).. git::example (with bare repo).. ```
* | | Merge pull request #5107 from pks-t/pks/sha1dc-updateEdward Thomson2019-06-111-3/+14
|\ \ \ | | | | | | | | sha1dc: update to fix endianess issues on AIX/HP-UX
| * | | sha1dc: update to fix endianess issues on AIX/HP-UXPatrick Steinhardt2019-06-111-3/+14
| |/ / | | | | | | | | | | | | | | | | | | Update our copy of sha1dc to the upstream commit 855827c (Detect endianess on HP-UX, 2019-05-09). Changes include fixes to endian detection on AIX and HP-UX systems as well as a define that allows us to force aligned access, which we're not using yet.
* | | Merge pull request #5052 from libgit2/ethomson/netrefactorEdward Thomson2019-06-1142-914/+5957
|\ \ \ | |_|/ |/| | Add NTLM support for HTTP(s) servers and proxies
| * | http: free auth context on failureethomson/netrefactorEdward Thomson2019-06-101-50/+63
| | | | | | | | | | | | | | | | | | | | | When we send HTTP credentials but the server rejects them, tear down the authentication context so that we can start fresh. To maintain this state, additionally move all of the authentication handling into `on_auth_required`.
| * | http: reconnect to proxy on connection closeEdward Thomson2019-06-101-3/+15
| | | | | | | | | | | | | | | | | | When we're issuing a CONNECT to a proxy, we expect to keep-alive to the proxy. However, during authentication negotiations, the proxy may close the connection. Reconnect if the server closes the connection.
| * | http: allow server to drop a keepalive connectionEdward Thomson2019-06-101-0/+15
| | | | | | | | | | | | | | | | | | | | | When we have a keep-alive connection to the server, that server may legally drop the connection for any reason once a successful request and response has occurred. It's common for servers to drop the connection after some amount of time or number of requests have occurred.
| * | http: stop on server EOFEdward Thomson2019-06-101-2/+12
| | | | | | | | | | | | | | | | | | | | | | | | We stop the read loop when we have read all the data. We should also consider the server's feelings. If the server hangs up on us, we need to stop our read loop. Otherwise, we'll try to read from the server - and fail - ad infinitum.
| * | ci: test NTLM proxy authentication on UnixEdward Thomson2019-06-101-4/+22
| | |
| * | http: teach auth mechanisms about connection affinityEdward Thomson2019-06-105-1/+7
| | | | | | | | | | | | | | | | | | Instead of using `is_complete` to decide whether we have connection or request affinity for authentication mechanisms, set a boolean on the mechanism definition itself.
| * | http: maintain authentication across connectionsEdward Thomson2019-06-101-6/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For request-based authentication mechanisms (Basic, Digest) we should keep the authentication context alive across socket connections, since the authentication headers must be transmitted with every request. However, we should continue to remove authentication contexts for mechanisms with connection affinity (NTLM, Negotiate) since we need to reauthenticate for every socket connection.
| * | http: simplify authentication mechanismsEdward Thomson2019-06-101-166/+156
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hold an individual authentication context instead of trying to maintain all the contexts; we can select the preferred context during the initial negotiation. Subsequent authentication steps will re-use the chosen authentication (until such time as it's rejected) instead of trying to manage multiple contexts when all but one will never be used (since we can only authenticate with a single mechanism at a time.) Also, when we're given a 401 or 407 in the middle of challenge/response handling, short-circuit immediately without incrementing the retry count. The multi-step authentication is expected, and not a "retry" and should not be penalized as such. This means that we don't need to keep the contexts around and ensures that we do not unnecessarily fail for too many retries when we have challenge/response auth on a proxy and a server and potentially redirects in play as well.
| * | http: don't set the header in the auth tokenEdward Thomson2019-06-105-21/+25
| | |
| * | http: don't reset replay count after connectionEdward Thomson2019-06-101-1/+0
| | | | | | | | | | | | | | | | | | A "connection" to a server is transient, and we may reconnect to a server in the midst of authentication failures (if the remote indicates that we should, via `Connection: close`) or in a redirect.
| * | http: provide an NTLM authentication providerEdward Thomson2019-06-105-0/+262
| | |
| * | ntlm: add ntlmclient as a dependencyEdward Thomson2019-06-1021-0/+4469
| | | | | | | | | | | | Include https://github.com/ethomson/ntlmclient as a dependency.
| * | http: validate server's authentication typesEdward Thomson2019-06-101-42/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ensure that the server supports the particular credential type that we're specifying. Previously we considered credential types as an input to an auth mechanism - since the HTTP transport only supported default credentials (via negotiate) and username/password credentials (via basic), this worked. However, if we are to add another mechanism that uses username/password credentials, we'll need to be careful to identify the types that are accepted.
| * | http: consume body on proxy auth failureEdward Thomson2019-06-101-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We must always consume the full parser body if we're going to keep-alive. So in the authentication failure case, continue advancing the http message parser until it's complete, then we can retry the connection. Not doing so would mean that we have to tear the connection down and start over. Advancing through fully (even though we don't use the data) will ensure that we can retry a connection with keep-alive.
| * | http: always consume body on auth failureEdward Thomson2019-06-101-26/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we get an authentication failure, we must consume the entire body of the response. If we only read half of the body (on the assumption that we can ignore the rest) then we will never complete the parsing of the message. This means that we will never set the complete flag, and our replay must actually tear down the connection and try again. This is particularly problematic for stateful authentication mechanisms (SPNEGO, NTLM) that require that we keep the connection alive. Note that the prior code is only a problem when the 401 that we are parsing is too large to be read in a single chunked read from the http parser. But now we will continue to invoke the http parser until we've got a complete message in the authentication failed scenario. Note that we need not do anything with the message, so when we get an authentication failed, we'll stop adding data to our buffer, we'll simply loop in the parser and let it advance its internal state.
| * | http: don't realloc the requestEdward Thomson2019-06-101-33/+29
| | |
| * | transports: add an `is_complete` function for authEdward Thomson2019-06-103-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some authentication mechanisms (like HTTP Basic and Digest) have a one-step mechanism to create credentials, but there are more complex mechanisms like NTLM and Negotiate that require challenge/response after negotiation, requiring several round-trips. Add an `is_complete` function to know when they have round-tripped enough to be a single authentication and should now either have succeeded or failed to authenticate.
| * | http: examine keepalive status at message endEdward Thomson2019-06-101-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We cannot examine the keep-alive status of the http parser in `http_connect`; it's too late and the critical information about whether keep-alive is supported has been destroyed. Per the documentation for `http_should_keep_alive`: > If http_should_keep_alive() in the on_headers_complete or > on_message_complete callback returns 0, then this should be > the last message on the connection. Query then and set the state.
| * | http: increase the replay countEdward Thomson2019-06-102-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Increase the permissible replay count; with multiple-step authentication schemes (NTLM, Negotiate), proxy authentication and redirects, we need to be mindful of the number of steps it takes to get connected. 7 seems high but can be exhausted quickly with just a single authentication failure over a redirected multi-state authentication pipeline.
| * | ci: enable all proxy testsEdward Thomson2019-06-101-1/+1
| | |
| * | ci: enable SKIP_OFFLINE_TESTS for windowsEdward Thomson2019-06-101-5/+7
| | |
| * | ci: test NTLM proxy authentication on WindowsEdward Thomson2019-06-101-4/+19
| | | | | | | | | | | | | | | Update our CI tests to start a proxy that requires NTLM authentication; ensure that our WIndows HTTP client can speak NTLM.
| * | http: support https for proxiesEdward Thomson2019-06-101-8/+1
| | |
| * | winhttp: support default credentials for proxiesEdward Thomson2019-06-102-189/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We did not properly support default credentials for proxies, only for destination servers. Refactor the credential handling to support sending either username/password _or_ default credentials to either the proxy or the destination server. This actually shares the authentication logic between proxy servers and destination servers. Due to copy/pasta drift over time, they had diverged. Now they share a common logic which is: first, use credentials specified in the URL (if there were any), treating empty username and password (ie, "http://:@foo.com/") as default credentials, for compatibility with git. Next, call the credential callbacks. Finally, fallback to WinHTTP compatibility layers using built-in authentication like we always have. Allowing default credentials for proxies requires moving the security level downgrade into the credential setting routines themselves. We will update our security level to "high" by default which means that we will never send default credentials without prompting. (A lower setting, like the WinHTTP default of "medium" would allow WinHTTP to handle credentials for us, despite what a user may have requested with their structures.) Now we start with "high" and downgrade to "low" only after a user has explicitly requested default credentials.
| * | network: don't add arbitrary url rulesEdward Thomson2019-06-101-6/+0
| | | | | | | | | | | | | | | There's no reason a git repository couldn't be at the root of a server, and URLs should have an implicit path of '/' when one is not specified.
| * | net: rename gitno_connection_data to git_net_urlEdward Thomson2019-06-1014-480/+587
|/ / | | | | | | | | | | | | | | | | | | "Connection data" is an imprecise and largely incorrect name; these structures are actually parsed URLs. Provide a parser that takes a URL string and produces a URL structure (if it is valid). Separate the HTTP redirect handling logic from URL parsing, keeping a `gitno_connection_data_handle_redirect` whose only job is redirect handling logic and does not parse URLs itself.
* | Merge pull request #5102 from libgit2/ethomson/callback_namesEdward Thomson2019-06-106-13/+43
|\ \ | | | | | | Callback type names should be suffixed with `_cb`
| * | trace: suffix the callbacks with `_cb`ethomson/callback_namesEdward Thomson2019-06-104-5/+20
| | | | | | | | | | | | | | | The trace logging callbacks should match the other callback naming conventions, using the `_cb` suffix instead of a `_callback` suffix.
| * | credentials: suffix the callbacks with `_cb`Edward Thomson2019-06-103-8/+23
| |/ | | | | | | | | The credential callbacks should match the other callback naming conventions, using the `_cb` suffix instead of a `_callback` suffix.
* | Merge pull request #5099 from pks-t/pks/tests-fix-symlink-outside-sandboxEdward Thomson2019-06-101-1/+5
|\ \ | |/ |/| tests: checkout: fix symlink.git being created outside of sandbox
| * tests: checkout: fix symlink.git being created outside of sandboxPatrick Steinhardt2019-06-071-1/+5
|/ | | | | | | | | The function `populate_symlink_workdir` creates a new "symlink.git" repository with a relative path "../symlink.git". As the current working directory is the sandbox, the new repository will be created just outside of the sandbox. Fix this by using `clar_sandbox_path`.
* Merge pull request #5095 from pks-t/pks/ignore-escaped-trailing-spaceEdward Thomson2019-06-062-3/+65
|\ | | | | ignore: handle escaped trailing whitespace
| * ignore: handle escaped trailing whitespacePatrick Steinhardt2019-06-062-2/+50
| | | | | | | | | | | | | | | | | | | | The gitignore's pattern format specifies that "Trailing spaces are ignored unless they are quoted with backslash ("\")". We do not honor this currently and will treat a pattern "foo\ " as if it was "foo\" only and a pattern "foo\ \ " as "foo\ \". Fix our code to handle those special cases and add tests to avoid regressions.
| * attr_file: refactor stripping of trailing spacesPatrick Steinhardt2019-06-061-3/+17
| | | | | | | | | | | | | | | | | | | | | | The stripping of trailing spaces currently happens as part of `git_attr_fnmatch__parse`. As we aren't currently parsing trailing whitespaces correct in case they're escaped, we'll have to change that code, though. To make actual behavioural change easier to review, refactor the code up-front by pulling it out into its own function that is expected to retain the exact same functionality as before. Like this, the fix will be trivial to apply.
* | Merge pull request #5074 from libgit2/ethomson/ignore_leading_slashEdward Thomson2019-06-062-1/+26
|\ \ | |/ |/| Ignore: only treat one leading slash as a root identifier
| * ignore: only skip first leading slashethomson/ignore_leading_slashEdward Thomson2019-05-191-1/+2
| | | | | | | | | | | | | | For compatibility with git, only skip the first leading slash in an ignore file. That is: `/a.txt` indicates to ignore a file named `a.txt` at the root. However `//b.txt` does not indicate that a file named `b.txt` at the root should be ignored.
| * ignore: test multiple leading slashesEdward Thomson2019-05-191-0/+24
| |
* | Merge pull request #5094 from libgit2/ethomson/auth_failureEdward Thomson2019-06-051-1/+1
|\ \ | | | | | | online tests: use gitlab for auth failures
| * | online tests: use gitlab for auth failuresethomson/auth_failureEdward Thomson2019-06-051-1/+1
|/ / | | | | | | | | | | | | | | GitHub recently changed their behavior from returning 401s for private or nonexistent repositories on a clone to returning 404s. For our tests that require an auth failure (and 401), move to GitLab to request a missing repository. This lets us continue to test our auth failure case, at least until they decide to mimic that decision.
* | Merge pull request #5076 from libgit2/ethomson/ignore_spacesEdward Thomson2019-06-056-11/+1342
|\ \ | | | | | | Ignore files: don't ignore whitespace
| * | attr: ensure regular attr files can have whitespaceethomson/ignore_spacesEdward Thomson2019-05-243-7/+33
| | | | | | | | | | | | | | | | | | Unlike ignore files, gitattribute files can have flexible whitespace at the beginning of the line. Ensure that by adding new ignore rules that we have not impeded correct parsing of attribute files.