]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:rpc_server: make use of dcesrv_register_default_auth_types[_machine_principal]()
authorStefan Metzmacher <metze@samba.org>
Wed, 9 Aug 2023 14:41:33 +0000 (16:41 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 17 Oct 2023 19:20:38 +0000 (19:20 +0000)
This mostly matches windows now...

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/rpc_server/rpcd_classic.c
source3/rpc_server/rpcd_epmapper.c
source3/rpc_server/rpcd_lsad.c

index 484ea44122e22d2633e2743ba5fcacec23610687..9766d0a760b6063c69616cf3e0c5461810ee3233 100644 (file)
@@ -80,6 +80,7 @@ static NTSTATUS classic_servers(
 {
        static const struct dcesrv_endpoint_server *ep_servers[7] = { NULL };
        size_t num_servers = ARRAY_SIZE(ep_servers);
+       NTSTATUS status;
        bool ok;
 
        ep_servers[0] = srvsvc_get_ep_server();
@@ -118,6 +119,11 @@ static NTSTATUS classic_servers(
 
        mangle_reset_cache();
 
+       status = dcesrv_register_default_auth_types_machine_principal(dce_ctx);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
        *_ep_servers = ep_servers;
        *_num_ep_servers = num_servers;
        return NT_STATUS_OK;
index 0d5f41a58fea2cd9f533babdbcd83f3a111e1096..9b2cc4f94592c03a5a4d1acfabc2b1e23e7ddfd1 100644 (file)
@@ -55,6 +55,26 @@ static NTSTATUS epmapper_servers(
 {
        static const struct dcesrv_endpoint_server *ep_servers[] = { NULL };
        size_t num_servers = ARRAY_SIZE(ep_servers);
+       NTSTATUS status;
+
+       /*
+        * Windows Server 2022 registers the following auth_types
+        * all with an empty principal name:
+        *
+        *  principle name for proto 9 (spnego) is ''
+        *  principle name for proto 10 (ntlmssp) is ''
+        *  principle name for proto 14 is ''
+        *  principle name for proto 16 (gssapi_krb5) is ''
+        *  principle name for proto 22 is ''
+        *  principle name for proto 30 is ''
+        *  principle name for proto 31 is ''
+        *
+        * We only register what we also support.
+        */
+       status = dcesrv_register_default_auth_types(dce_ctx, "");
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
 
        ep_servers[0] = epmapper_get_ep_server();
 
index 1fe7c681c7c491544c8ecd4ce0b6cb86e0b72405..d00f7049d69476ac2121bf4195203afc0d84247b 100644 (file)
@@ -75,6 +75,7 @@ static NTSTATUS lsad_servers(
 {
        static const struct dcesrv_endpoint_server *ep_servers[4] = { NULL, };
        size_t num_servers = ARRAY_SIZE(ep_servers);
+       NTSTATUS status;
        bool ok;
 
        ep_servers[0] = lsarpc_get_ep_server();
@@ -88,6 +89,11 @@ static NTSTATUS lsad_servers(
                exit(1);
        }
 
+       status = dcesrv_register_default_auth_types_machine_principal(dce_ctx);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
        switch(lp_server_role()) {
        case ROLE_STANDALONE:
        case ROLE_DOMAIN_MEMBER:
@@ -103,6 +109,16 @@ static NTSTATUS lsad_servers(
                num_servers = 0;
                break;
        default:
+               /*
+                * As DC we also register schannel with an
+                * empty principal
+                */
+               status = dcesrv_auth_type_principal_register(dce_ctx,
+                                                            DCERPC_AUTH_TYPE_SCHANNEL,
+                                                            "");
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
                break;
        }