Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SharePoint Server NTLM and Host Named Site Collections support #2341

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

anghelnicolae
Copy link

Closes #2340

The existing connector only supports host header site collections and only the "sites" managed path, meaning site collections that derive their URL from the web application's URL. SharePoint supports host named site collections which can have any URL, so it doesn't make sense to force the user to only index a particular subset of sites.
For NTLM, since aiohttp doesn't support NTLM authentication the only option with async support is "httpx", so this is what I used.

Checklists

Pre-Review Checklist

  • this PR does NOT contain credentials of any kind, such as API keys or username/passwords (double check config.yml.example)
  • this PR has a meaningful title
  • this PR links to all relevant github issues that it fixes or partially addresses
  • if there is no GH issue, please create it. Each PR should have a link to an issue
  • this PR has a thorough description
  • Covered the changes with automated tests
  • Tested the changes locally
  • Added a label for each target release version (example: v7.13.2, v7.14.0, v8.0.0)
  • Considered corresponding documentation changes
  • Contributed any configuration settings changes to the configuration reference
  • if you added or changed Rich Configurable Fields for a Native Connector, you made a corresponding PR in Kibana

Changes Requiring Extra Attention

  • Security-related changes (encryption, TLS, SSRF, etc)
  • New external service dependencies added.

Release Note

…connector supports Host Named Site Collections.

Added support for NTLM by switching from aiohttp to httpx.
@anghelnicolae anghelnicolae requested a review from a team as a code owner April 4, 2024 13:17
Copy link

cla-checker-service bot commented Apr 4, 2024

💚 CLA has been signed

@seanstory
Copy link
Member

buildkite test this

@seanstory
Copy link
Member

@anghelnicolae thanks for submitting a PR!

First, in order for any contributions from you to be accepted, you'll need to sign Elastic's Contributor Agreement. You can access that here: https://www.elastic.co/contributor-agreement

Next, we'll need to make sure all the tests pass. You can run tests locally with make test, but Buildkite will also run them in the PR. Looking at the changes you made, I expect the tests will fail with your changes and will need some updates.

Before you invest in changing all the tests though, I'd suggest a different approach.

First, for NTLM support, is it possible to use one client (httpx) to handle the authentication, and the existing client to handle everything else? This would limit the blast radius of your change.

Second, handling non-path-based site collections is something we've had reported for Sharepoint Online as well. See: #2112

I'd like to see us address both connectors in a consistent manner. And I think the right way to do that is probably with a new configuration field to indicate what type of site collection identifier you're providing. The change as you've made it would break this connector for all its current users when they upgraded, and that's not going to be acceptable.

@anghelnicolae
Copy link
Author

@seanstory
I did sign the agreement, but only after I submitted the PR.
You're right, I forgot to run the tests. I did now and they fail because of my updates.
I'm not sure I know how to authenticate with one client and do the API requests with another. Is it even a good idea?
For the second issue, you're again right, I'm going to think of a way to handle existing users.

What happens now? Is this PR closed and I submit a new one after I update my code?

@seanstory
Copy link
Member

I did sign the agreement, but only after I submitted the PR.

That's fine! The CLA check is passing now. ✅

I'm not sure I know how to authenticate with one client and do the API requests with another. Is it even a good idea?

Maybe it's not. I don't know a lot about NTLM, so maybe it doesn't make sense. But we've had instances before where you have two instance variables, like (psudocode):

def __init__(self):
  self.oauth_client = OauthClientFactory.getClient()
  token = self.oauth_client.get_token()
  self.client = Client(headers={f"Authorization: {token}"})
  ...

so that you don't have to implement a complex auth flow, but can use an existing library to facilitate getting a lower-level authnetication token that results from that flow. This was the kind of pattern I was suggesting.

For the second issue, you're again right, I'm going to think of a way to handle existing users.

thanks!

What happens now? Is this PR closed and I submit a new one after I update my code?

I'll leave that up to you. If you want to iterate on this PR, it's fine to leave this open. You can move it to a "draft" state and then let us know when you feel it's ready for a review.

Alternatively, if you'd rather start over from scratch, we can close this. And it's not a 1-way door, we can always re-open a closed PR later.

@artem-shelkovnikov
Copy link
Member

Re: NTLM - is it a setting in Sharepoint Server, that you can use only one or the other? Or is it still possible to access Sharepoint Server with basic auth even if NTLM is enabled?

Copy link
Member

@artem-shelkovnikov artem-shelkovnikov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've also left a couple questions to better understand your change :)

@@ -35,13 +35,13 @@
SELECTED_FIELDS = "WikiField, Modified,Id,GUID,File,Folder"

URLS = {
PING: "{host_url}{parent_site_url}_api/web/webs",
SITES: "{host_url}{parent_site_url}/_api/web/webs?$skip={skip}&$top={top}",
LISTS: "{host_url}{parent_site_url}/_api/web/lists?$skip={skip}&$top={top}&$expand=RootFolder&$filter=(Hidden eq false)",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the difference between Hidden and NoCrawl? Do we want both to be eq false?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the field that SharePoint Search uses to decide, so I thought it would be a better approach. The results are very similar.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the connector is also used by other customers, it should not break their flows - if it's not identical, we need to be very very careful.

I'd leave it as is if it works for you, if not we can see and make this a configurable option via configurable fields.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed back to Hidden, but will add this option in a different pull request.

@@ -483,6 +478,7 @@ def get_default_configuration(cls):
"label": "Comma-separated list of SharePoint site collections to index",
"order": 4,
"type": "list",
"required": False
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why make it false? Empty value will be treated like "index only root site"?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is my mistake, I am planning to add a configuration checkbox that allows the connector to try to get the list of sites from SharePoint Search, making this field optional.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see - it's possible, but I'd advice to make it in a separate PR so that we could review it better. Large PRs with multiple features tend to take a lot of time to review, fix and merge

for collection in self.sharepoint_client.site_collections_path:
server_relative_url.append(collection)
for collection in self.sharepoint_client.site_collections:
server_relative_url.append(f"{collection}")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this change? Collection is a string, why stringify again?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be fixed.

):
server_relative_url.append(site_data["ServerRelativeUrl"])
server_relative_url.append(site_data["Url"])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rename server_relative_url to server_url cause it's not relative any more

@@ -844,3 +840,13 @@ async def download_func(self, response_data):
it instead contains a key with bytes in its response.
"""
yield bytes(response_data, "utf-8")

async def chunked_download_func(self, download_func):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why have a different function implementation here?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because the one in source.py assumes it's receiving a aiohttp response object (response.content.iter_chunked), which is not the case when using httpx.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah makes sense, thanks for the explanation!

@anghelnicolae anghelnicolae marked this pull request as draft April 4, 2024 16:22
@anghelnicolae
Copy link
Author

Re: NTLM - is it a setting in Sharepoint Server, that you can use only one or the other? Or is it still possible to access Sharepoint Server with basic auth even if NTLM is enabled?

In IIS, under the site hosting the SharePoint web application that you're targeting, there is an "Authentication" setting. This setting allows multiple authentication methods to be available for the site: Anonymous, ASP.NET Impersonation, Basic, Forms, Windows. Basic Authentication is by default disabled and rightfully so. To answer your question, yes, it's possible to access SharePoint with both Basic and NTLM(Windows) at the same time.

@artem-shelkovnikov
Copy link
Member

In IIS, under the site hosting the SharePoint web application that you're targeting, there is an "Authentication" setting. This setting allows multiple authentication methods to be available for the site: Anonymous, ASP.NET Impersonation, Basic, Forms, Windows. Basic Authentication is by default disabled and rightfully so. To answer your question, yes, it's possible to access SharePoint with both Basic and NTLM(Windows) at the same time.

I see. From what I understood NTLM is relatively popular, so we can have it here. If you don't severely need it, I'd skip it TBH. If you need it, we can make it configurable via configurable field - user chooses type of auth and in the connector we instantiate the client based on chosen auth method. I checked aiohttp with NTLM and there indeed is no simple way to make it work.

We'll look into httpx package, but from the first glance it seems okay - my only concern that their version is 0.x - will need to spend a bit of time to see how mature the package is.

@anghelnicolae
Copy link
Author

In IIS, under the site hosting the SharePoint web application that you're targeting, there is an "Authentication" setting. This setting allows multiple authentication methods to be available for the site: Anonymous, ASP.NET Impersonation, Basic, Forms, Windows. Basic Authentication is by default disabled and rightfully so. To answer your question, yes, it's possible to access SharePoint with both Basic and NTLM(Windows) at the same time.

I see. From what I understood NTLM is relatively popular, so we can have it here. If you don't severely need it, I'd skip it TBH. If you need it, we can make it configurable via configurable field - user chooses type of auth and in the connector we instantiate the client based on chosen auth method. I checked aiohttp with NTLM and there indeed is no simple way to make it work.

We'll look into httpx package, but from the first glance it seems okay - my only concern that their version is 0.x - will need to spend a bit of time to see how mature the package is.

I'm going to be indexing farms that I have no control over, so they won't have Basic Authentication enabled. So I really need it.

@artem-shelkovnikov
Copy link
Member

I'm going to be indexing farms that I have no control over, so they won't have Basic Authentication enabled. So I really need it.

Makes sense. In this case we will need to:

  1. Make a configurable field here that is a dropdown (example). Default value should be "basic".
  2. Change the code so that it would use authentication from the configuration field you've added

Added option to select between Basic and NTLM authentication
Other changes suggested by the Elasticsearch team
@anghelnicolae
Copy link
Author

I've addressed most of the recommendations, but I haven't modified the tests yet. Can you take a look and let me know if it's OK now?

@artem-shelkovnikov
Copy link
Member

Hi @anghelnicolae,

I've skimmed through the changes and they look good to me.

I will give some manual testing this week and get back to you as soon as possible!

@seanstory
Copy link
Member

buildkite test this

@seanstory
Copy link
Member

☝️ checking to make sure the unit tests still pass.

I'd also love to see some unit tests added for these changes.

@seanstory
Copy link
Member

@anghelnicolae I'm not sure if you can see our buildkite CI. In case you can't, the tests are not currently passing.

The current test output
FAIL Required test coverage of 92% not reached. Total coverage: 91.51%
=========================== short test summary info ============================
FAILED tests/sources/test_sharepoint_server.py::test_get_drive_items - TypeError: SharepointServerClient.get_drive_items() missing 2 required positional arguments: 'site_relative_url' and 'list_relative_url'
FAILED tests/sources/test_sharepoint_server.py::test_prepare_list_items_doc - TypeError: SharepointServerDataSource.format_list_item() missing 2 required positional arguments: 'site_url' and 'site_relative_url'
FAILED tests/sources/test_sharepoint_server.py::test_get_list_items - TypeError: SharepointServerClient.get_list_items() missing 2 required positional arguments: 'site_relative_url' and 'list_relative_url'
FAILED tests/sources/test_sharepoint_server.py::test_get_docs_drive_items_for_web_pages - assert 0 == 2
 +  where 0 = len([])
FAILED tests/sources/test_sharepoint_server.py::test_get_content_with_content_extraction - AssertionError: assert None == {'_id': 1, '_timestamp': '2022-06-20T10:37:44Z', 'body': 'This is a dummy sharepoint body response'}
FAILED tests/sources/test_sharepoint_server.py::test_get_docs_drive_items - assert 0 == 2
 +  where 0 = len([])
FAILED tests/sources/test_sharepoint_server.py::test_api_call_successfully - KeyError: 'site_collections'
FAILED tests/sources/test_sharepoint_server.py::test_get_list_items_with_extension_only - TypeError: SharepointServerClient.get_list_items() missing 2 required positional arguments: 'site_relative_url' and 'list_relative_url'
FAILED tests/sources/test_sharepoint_server.py::test_get_docs_list_items - assert 0 == 2
 +  where 0 = len([])
FAILED tests/sources/test_sharepoint_server.py::test_get_docs_list_items_when_relativeurl_is_not_none - assert 0 == 2
 +  where 0 = len([])
FAILED tests/sources/test_sharepoint_server.py::test_get_docs_when_no_site_available
FAILED tests/sources/test_sharepoint_server.py::test_close_with_client_session - AttributeError: 'ClientSession' object has no attribute 'aclose'. Did you mean: 'close'?
FAILED tests/sources/test_sharepoint_server.py::test_prepare_drive_items_doc - TypeError: SharepointServerDataSource.format_drive_item() missing 2 required positional arguments: 'site_url' and 'site_relative_url'
FAILED tests/sources/test_sharepoint_server.py::test_get_content - AssertionError: assert None == {'_attachment': 'VGhpcyBpcyBhIGR1bW15IHNoYXJlcG9pbnQgYm9keSByZXNwb25zZQ==', '_id': 1, '_timestamp': '2022-06-20T10:37:44Z'}
FAILED tests/sources/test_sharepoint_server.py::test_get_list_items_with_no_extension - TypeError: SharepointServerClient.get_list_items() missing 2 required positional arguments: 'site_relative_url' and 'list_relative_url'
================= 15 failed, 1935 passed in 194.42s (0:03:14) ==================
make: *** [Makefile:59: test] Error 1
🚨 Error: The command exited with status 2

You can run the tests locally with make bin/pytest test

You will also need to get the linter to pass. Usually this can be done automagically with make autoformat, but you can check if there are linting errors with make lint.

Eventually we'll also need to get the integration tests (ftests) to pass. You can run this with make ftest NAME=sharepoint_server. These tests can be harder to get working, and may require changes to the test fixtures here: https://github.com/elastic/connectors/tree/main/tests/sources/fixtures/sharepoint_server.

@anghelnicolae
Copy link
Author

@anghelnicolae I'm not sure if you can see our buildkite CI. In case you can't, the tests are not currently passing.

The current test output
You can run the tests locally with make bin/pytest test

You will also need to get the linter to pass. Usually this can be done automagically with make autoformat, but you can check if there are linting errors with make lint.

Eventually we'll also need to get the integration tests (ftests) to pass. You can run this with make ftest NAME=sharepoint_server. These tests can be harder to get working, and may require changes to the test fixtures here: https://github.com/elastic/connectors/tree/main/tests/sources/fixtures/sharepoint_server.

Hi @seanstory,
Yes, I know the tests aren't working yet, I wanted to make sure you guys are OK with my changes before making further updates. I've tested the changes on my SharePoint environment and everything works fine.

Copy link
Member

@artem-shelkovnikov artem-shelkovnikov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at it and testing a bit it looks like everything is good - you're using a great approach, now fixing tests/linters is next step, after that we'll do some testing on a real instance and will be happy to merge this change!

@@ -462,54 +489,65 @@ def get_default_configuration(cls):
dictionary: Default configuration.
"""
return {
"authentication":{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need "display": "dropdown" here to make it an actual dropdown - now it looks like a textfield

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in next commit.

@anghelnicolae
Copy link
Author

Looking at it and testing a bit it looks like everything is good - you're using a great approach, now fixing tests/linters is next step, after that we'll do some testing on a real instance and will be happy to merge this change!

On it. I'll let you know when I finish.

@anghelnicolae
Copy link
Author

I've finished updating the tests. I also ran the autoformatter.

@artem-shelkovnikov
Copy link
Member

Buildkite test this

@artem-shelkovnikov
Copy link
Member

Hey @anghelnicolae!

I ran the build and see that linter is not happy about connectors/sources/sharepoint_server.py file, can you check it?

Additionally, our functional tests broke with the change - likely due to the changes in configuration that you've added. You can run functional tests with make ftest NAME=sharepoint_server and see the error. Likely you will need to update https://github.com/elastic/connectors/blob/main/tests/sources/fixtures/sharepoint_server/connector.json file to change the connector configuration to fit the new configuration schema.

Let me know if any of these steps are not clear, and I'll be happy to guide you :)

@artem-shelkovnikov
Copy link
Member

Buildkite test this

@artem-shelkovnikov
Copy link
Member

@anghelnicolae I see that CI is still red, have the functional test ran successfully for you?

@anghelnicolae
Copy link
Author

anghelnicolae commented Apr 30, 2024

@anghelnicolae I see that CI is still red, have the functional test ran successfully for you?

No, but they don't really try to run, so I'm probably missing something in my environment. I fixed the obvious errors from the previous run, but I have no clue what to do next. All this is pretty difficult for someone who's never worked with Python or Linux before. It would be a very good idea for someone to write some documentation about how to setup a development environment.

These are the errors I'm getting when trying to run the functional tests:
`

None

  • /home/nicolae/Git/connectors/tests/../bin/fake-kibana --index-name search-sharepoint_server --service-type sharepoint_server --config-file sharepoint_server/config.yml --connector-definition sharepoint_server/connector.json --debug
    [FMWK][14:03:10][INFO] Loading config from sharepoint_server/config.yml
    [KBN-FAKE][14:03:10][INFO] Loaded connector definition from sharepoint_server/connector.json
    Traceback (most recent call last):
    File "/home/nicolae/Git/connectors/tests/../bin/fake-kibana", line 33, in <module>
    sys.exit(load_entry_point('elasticsearch-connectors', 'console_scripts', 'fake-kibana')())
    File "/home/nicolae/Git/connectors/connectors/kibana.py", line 250, in main
    asyncio.run(
    File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
    File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
    File "/home/nicolae/Git/connectors/connectors/kibana.py", line 53, in prepare
    await es.ensure_ingest_pipeline_exists(
    File "/home/nicolae/Git/connectors/connectors/es/management_client.py", line 159, in ensure_ingest_pipeline_exists
    await self._retrier.execute_with_retry(
    File "/home/nicolae/Git/connectors/connectors/es/client.py", line 226, in execute_with_retry
    result = await func()
    File "/home/nicolae/Git/connectors/lib/python3.10/site-packages/elasticsearch/_async/client/ingest.py", line 148, in get_pipeline
    return await self.perform_request( # type: ignore[return-value]
    File "/home/nicolae/Git/connectors/lib/python3.10/site-packages/elasticsearch/_async/client/_base.py", line 389, in perform_request
    return await self._client.perform_request(
    File "/home/nicolae/Git/connectors/lib/python3.10/site-packages/elasticsearch/_async/client/_base.py", line 285, in perform_request
    meta, resp_body = await self.transport.perform_request(
    File "/home/nicolae/Git/connectors/lib/python3.10/site-packages/elastic_transport/_async_transport.py", line 258, in perform_request
    resp = await node.perform_request(
    File "/home/nicolae/Git/connectors/lib/python3.10/site-packages/elastic_transport/_node/_http_aiohttp.py", line 218, in perform_request
    raise err from None
    elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: ClientConnectorError(Cannot connect to host localhost:9200 ssl:default [Connect call failed ('127.0.0.1', 9200)]))
    Unclosed client session
    client_session: <aiohttp.client.ClientSession object at 0x7ea5863ceef0>
    make: *** [Makefile:65: ftest] Error 1
`

Any chance you guys can pick up the process from here?

@artem-shelkovnikov
Copy link
Member

Sure I'll give it a look, should be a straightforward fix

Comment on lines +42 to +43
PING: "{site_url}/_api/web/webs",
SITE: "{parent_site_url}/_api/web",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity - why did SITE url changed from _api/web/webs to _api/web?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It didn't change, it's an addition similar to SITES. I need to get the whole SPWeb object for the current site and all it's subsites in order to access the relative and full URLs of the sites.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah okay, can you send an example jsob object that it returns if possible for our functional tests?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So a full response looks like this:
{ "d":{ "AllowRssFeeds":true, "AlternateCssUrl":"", "AppInstanceId":"00000000-0000-0000-0000-000000000000", "Configuration":0, "Created":"2023-10-24T00:24:36", "CurrentChangeToken":{ "__metadata":{ "type":"SP.ChangeToken" }, "StringValue":"1;2;cc594a12-3ded-451a-b868-40ccec07d354;638495628235200000;40440" }, "CustomMasterUrl":"/_catalogs/masterpage/seattle.master", "Description":"Portal Home", "DesignPackageId":"00000000-0000-0000-0000-000000000000", "DocumentLibraryCalloutOfficeWebAppPreviewersDisabled":false, "EnableMinimalDownload":true, "HeaderEmphasis":0, "HorizontalQuickLaunch":false, "Id":"cc594a12-3ded-451a-b868-40ccec07d354", "IsMultilingual":false, "Language":1033, "LastItemModifiedDate":"2024-04-24T13:40:24Z", "LastItemUserModifiedDate":"2024-04-24T11:33:33Z", "MasterUrl":"/_catalogs/masterpage/seattle.master", "NoCrawl":false, "OverwriteTranslationsOnChange":false, "ResourcePath":{ "__metadata":{ "type":"SP.ResourcePath" }, "DecodedUrl":"https://nsp1" }, "QuickLaunchEnabled":true, "RecycleBinEnabled":true, "ServerRelativeUrl":"/", "SiteLogoUrl":null, "SyndicationEnabled":true, "Title":"Portal Home", "TreeViewEnabled":false, "UIVersion":15, "UIVersionConfigurationEnabled":false, "Url":"https://nsp1", "WebTemplate":"STS", "WelcomePage":"SitePages/Home.aspx" } }

But you only care about a few of these, plus some other values that will be useful in the future:

{ "d":{ "Created":"2023-10-24T00:24:36", "Description":"Portal Home", "Id":"cc594a12-3ded-451a-b868-40ccec07d354", "Language":1033, "LastItemModifiedDate":"2024-04-24T13:40:24Z", "NoCrawl":false, "ServerRelativeUrl":"/", "Title":"Portal Home", "Url":"https://nsp1", "WebTemplate":"STS", "WelcomePage":"SitePages/Home.aspx", "HasUniqueRoleAssignments":false } }

@artem-shelkovnikov
Copy link
Member

@anghelnicolae I was able to fix the functional tests and pushed here: #2475

However, I see a merge conflict too - do you think you can fix the merge conflicts in this PR and I fix the functional tests further after?

@anghelnicolae
Copy link
Author

@anghelnicolae I was able to fix the functional tests and pushed here: #2475

However, I see a merge conflict too - do you think you can fix the merge conflicts in this PR and I fix the functional tests further after?

I see 3 merge conflicts, I will try to do it tomorrow. Thanks for fixing the functional tests, can you tell me what I need to do to run the tests?

@artem-shelkovnikov
Copy link
Member

@anghelnicolae I will need your full run log to tell you what went wrong (ones you sent before did not include data from the start of the run).

My theory was that you did not have docker daemon launched so elasticsearch failed to start. Can you check that docker is running locally? If it's not the case, can you share the logs from the moment you started running the test?

@anghelnicolae
Copy link
Author

Unfortunately my company has got me working on something else so I can't finish this process. Sorry for that.

@artem-shelkovnikov
Copy link
Member

Thanks for the heads up, @anghelnicolae!

I'll raise it with the team and we'll see what to do with this PR next (a lot of good work, just need to rebase it on top of the current main)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

SharePoint Server connector doesn't support Host Named Site Collections and NTLM authentication
3 participants