]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
CVE-2022-38023 s3:net: add and use net_warn_member_options() helper
authorStefan Metzmacher <metze@samba.org>
Wed, 30 Nov 2022 15:16:05 +0000 (16:16 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 13 Dec 2022 20:37:58 +0000 (21:37 +0100)
This makes sure domain member related 'net' commands print warnings
about unsecure smb.conf options.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15240

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit 1fdf1d55a5dd550bdb16d037b5dc995c33c1a67a)

source3/utils/net.c
source3/utils/net_ads.c
source3/utils/net_dom.c
source3/utils/net_join.c
source3/utils/net_offlinejoin.c
source3/utils/net_proto.h
source3/utils/net_rpc.c
source3/utils/net_util.c

index e1e14743c117b023c51e1e11628c75786c55c491..b96d7f5d9d4804dd3ca6a7e4b8b16bfe333f8b11 100644 (file)
@@ -85,6 +85,8 @@ enum netr_SchannelType get_sec_channel_type(const char *param)
 
 static int net_changetrustpw(struct net_context *c, int argc, const char **argv)
 {
+       net_warn_member_options();
+
        if (net_ads_check_our_domain(c) == 0)
                return net_ads_changetrustpw(c, argc, argv);
 
@@ -112,6 +114,8 @@ static int net_primarytrust_dumpinfo(struct net_context *c, int argc,
                return 1;
        }
 
+       net_warn_member_options();
+
        if (c->opt_stdin) {
                set_line_buffering(stdin);
                set_line_buffering(stdout);
@@ -193,6 +197,8 @@ static int net_changesecretpw(struct net_context *c, int argc,
                return 1;
        }
 
+       net_warn_member_options();
+
        if(c->opt_force) {
                struct secrets_domain_info1 *info = NULL;
                struct secrets_domain_info1_change *prev = NULL;
index c41fb0afe9c9fcd4ab38367a89602449b718b26d..0764b4d53cbd411274fd3fccf40715faaba62982 100644 (file)
@@ -1312,6 +1312,8 @@ static int net_ads_status(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
                return -1;
        }
@@ -1453,6 +1455,8 @@ static NTSTATUS net_ads_join_ok(struct net_context *c)
                return NT_STATUS_ACCESS_DENIED;
        }
 
+       net_warn_member_options();
+
        net_use_krb_machine_account(c);
 
        get_dc_name(lp_workgroup(), lp_realm(), dc_name, &dcip);
@@ -1483,6 +1487,8 @@ int net_ads_testjoin(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        /* Display success or failure */
        status = net_ads_join_ok(c);
        if (!NT_STATUS_IS_OK(status)) {
@@ -1868,6 +1874,8 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
        if (c->display_usage)
                return net_ads_join_usage(c, argc, argv);
 
+       net_warn_member_options();
+
        if (!modify_config) {
 
                werr = check_ads_config();
@@ -2802,6 +2810,8 @@ int net_ads_changetrustpw(struct net_context *c, int argc, const char **argv)
                return -1;
        }
 
+       net_warn_member_options();
+
        net_use_krb_machine_account(c);
 
        use_in_memory_ccache();
@@ -3075,6 +3085,8 @@ static int net_ads_keytab_add(struct net_context *c,
                return 0;
        }
 
+       net_warn_member_options();
+
        d_printf(_("Processing principals to add...\n"));
 
        if (!c->opt_user_specified && c->opt_password == NULL) {
@@ -3119,6 +3131,8 @@ static int net_ads_keytab_create(struct net_context *c, int argc, const char **a
                return 0;
        }
 
+       net_warn_member_options();
+
        if (!c->opt_user_specified && c->opt_password == NULL) {
                net_use_krb_machine_account(c);
        }
index 13e65a93314249fdf3d7cb88465d73ec93bb073a..4b48e1566bc87f55c6673f34fdfedfadeb0d8895 100644 (file)
@@ -154,6 +154,8 @@ static int net_dom_join(struct net_context *c, int argc, const char **argv)
                return net_dom_usage(c, argc, argv);
        }
 
+       net_warn_member_options();
+
        if (c->opt_host) {
                server_name = c->opt_host;
        }
index 1493dff74d7bd4cb800a5ed2467783ae4f546199..f67f08f79a8193b55c279a723fdc75f5fb6d9761 100644 (file)
@@ -39,6 +39,8 @@ int net_join(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        if (net_ads_check_our_domain(c) == 0) {
                if (net_ads_join(c, argc, argv) == 0)
                        return 0;
index ef56ba9fce80df4224e0a1bdbbc8b75cbfff1b23..02c2a48eb14fc1a83bb486e5e9b72b1e7353228c 100644 (file)
@@ -49,6 +49,8 @@ int net_offlinejoin(struct net_context *c, int argc, const char **argv)
                return -1;
        }
 
+       net_warn_member_options();
+
        status = libnetapi_net_init(&c->netapi_ctx);
        if (status != 0) {
                return -1;
index eea7cc9426f08e86301fba1859cdeaf9aca63419..29d4f48f106cc4b4a082bc9bdccc98c3cd0f82d2 100644 (file)
@@ -431,6 +431,8 @@ int net_run_function(struct net_context *c, int argc, const char **argv,
                      const char *whoami, struct functable *table);
 void net_display_usage_from_functable(struct functable *table);
 
+void net_warn_member_options(void);
+
 const char *net_share_type_str(int num_type);
 
 NTSTATUS net_scan_dc(struct net_context *c,
index 279b831f1483f2c1801d2d17f445c54ed98e844d..ff6e3f78e9f0570c48c62fc955672525fb808558 100644 (file)
@@ -377,6 +377,8 @@ static int net_rpc_oldjoin(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        mem_ctx = talloc_init("net_rpc_oldjoin");
        if (!mem_ctx) {
                return -1;
@@ -496,6 +498,8 @@ int net_rpc_testjoin(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        mem_ctx = talloc_init("net_rpc_testjoin");
        if (!mem_ctx) {
                return -1;
@@ -570,6 +574,8 @@ static int net_rpc_join_newstyle(struct net_context *c, int argc, const char **a
                return 0;
        }
 
+       net_warn_member_options();
+
        mem_ctx = talloc_init("net_rpc_join_newstyle");
        if (!mem_ctx) {
                return -1;
@@ -691,6 +697,8 @@ int net_rpc_join(struct net_context *c, int argc, const char **argv)
                return -1;
        }
 
+       net_warn_member_options();
+
        if (strlen(lp_netbios_name()) > 15) {
                d_printf(_("Our netbios name can be at most 15 chars long, "
                           "\"%s\" is %u chars long\n"),
@@ -821,6 +829,8 @@ int net_rpc_info(struct net_context *c, int argc, const char **argv)
                return 0;
        }
 
+       net_warn_member_options();
+
        return run_rpc_command(c, NULL, &ndr_table_samr,
                               NET_FLAGS_PDC, rpc_info_internals,
                               argc, argv);
index 298d9a64dc0c57e9d26b822a1fc872f73e1d296b..f3b7755063bfed23dad910a7934363eeddf02824 100644 (file)
@@ -31,6 +31,7 @@
 #include "libsmb/libsmb.h"
 #include "lib/param/param.h"
 #include "auth/gensec/gensec.h"
+#include "libcli/auth/netlogon_creds_cli.h"
 #include "lib/cmdline/cmdline.h"
 
 NTSTATUS net_rpc_lookup_name(struct net_context *c,
@@ -478,6 +479,19 @@ void net_display_usage_from_functable(struct functable *table)
        }
 }
 
+void net_warn_member_options(void)
+{
+       TALLOC_CTX *frame = talloc_stackframe();
+       struct loadparm_context *lp_ctx = NULL;
+
+       lp_ctx = loadparm_init_s3(frame, loadparm_s3_helpers());
+       if (lp_ctx != NULL) {
+               netlogon_creds_cli_warn_options(lp_ctx);
+       }
+
+       TALLOC_FREE(frame);
+}
+
 const char *net_share_type_str(int num_type)
 {
        switch(num_type) {