From 3beff89fd108e060dd1b671e70e19984191fc951 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 10 Nov 2021 20:18:07 +0100 Subject: [PATCH 1/8] source3: move lib/substitute.c functions out of proto.h BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 25043ebb2e6f74592e802f78d327f844e615a442) --- source3/auth/auth_generic.c | 1 + source3/auth/auth_ntlmssp.c | 1 + source3/auth/auth_util.c | 1 + source3/include/proto.h | 33 ----------- source3/lib/substitute.c | 1 + source3/lib/substitute.h | 63 +++++++++++++++++++++ source3/modules/vfs_expand_msdfs.c | 1 + source3/modules/vfs_full_audit.c | 1 + source3/modules/vfs_recycle.c | 1 + source3/modules/vfs_unityed_media.c | 1 + source3/modules/vfs_virusfilter_utils.c | 1 + source3/nmbd/nmbd.c | 1 + source3/nmbd/nmbd_synclists.c | 1 + source3/param/loadparm.c | 1 + source3/passdb/passdb.c | 1 + source3/passdb/pdb_ldap.c | 1 + source3/printing/print_generic.c | 1 + source3/printing/printing.c | 1 + source3/rpc_server/lsa/srv_lsa_nt.c | 1 + source3/rpc_server/netlogon/srv_netlog_nt.c | 1 + source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 1 + source3/smbd/ipc.c | 1 + source3/smbd/lanman.c | 1 + source3/smbd/message.c | 1 + source3/smbd/msdfs.c | 1 + source3/smbd/process.c | 1 + source3/smbd/reply.c | 1 + source3/smbd/server.c | 1 + source3/smbd/service.c | 1 + source3/smbd/sesssetup.c | 1 + source3/smbd/share_access.c | 1 + source3/smbd/smb2_server.c | 1 + source3/smbd/smb2_sesssetup.c | 1 + source3/smbd/trans2.c | 1 + source3/smbd/uid.c | 1 + source3/torture/torture.c | 1 + source3/utils/net_sam.c | 1 + source3/winbindd/wb_getpwsid.c | 1 + source3/winbindd/winbindd.c | 1 + 39 files changed, 100 insertions(+), 33 deletions(-) create mode 100644 source3/lib/substitute.h diff --git a/source3/auth/auth_generic.c b/source3/auth/auth_generic.c index fc7a7549e8e5..ff51307e43a1 100644 --- a/source3/auth/auth_generic.c +++ b/source3/auth/auth_generic.c @@ -36,6 +36,7 @@ #include "auth/credentials/credentials.h" #include "lib/param/loadparm.h" #include "librpc/gen_ndr/dcerpc.h" +#include "source3/lib/substitute.h" static NTSTATUS auth3_generate_session_info_pac(struct auth4_context *auth_ctx, TALLOC_CTX *mem_ctx, diff --git a/source3/auth/auth_ntlmssp.c b/source3/auth/auth_ntlmssp.c index 676aa9d892c4..f2deca09aa68 100644 --- a/source3/auth/auth_ntlmssp.c +++ b/source3/auth/auth_ntlmssp.c @@ -25,6 +25,7 @@ #include "auth.h" #include "libcli/security/security.h" #include "lib/util/tevent_ntstatus.h" +#include "source3/lib/substitute.h" NTSTATUS auth3_generate_session_info(struct auth4_context *auth_context, TALLOC_CTX *mem_ctx, diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index dec854d85c34..4527dedc49d9 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -38,6 +38,7 @@ #include "rpc_client/util_netlogon.h" #include "source4/auth/auth.h" #include "auth/auth_util.h" +#include "source3/lib/substitute.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_AUTH diff --git a/source3/include/proto.h b/source3/include/proto.h index eb45179aebbb..a96c2c8d1102 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -139,39 +139,6 @@ int smbrun_no_sanitize(const char *cmd, int *outfd, char * const *env); int smbrun(const char *cmd, int *outfd, char * const *env); int smbrunsecret(const char *cmd, const char *secret); -/* The following definitions come from lib/substitute.c */ - -bool set_local_machine_name(const char *local_name, bool perm); -const char *get_local_machine_name(void); -bool set_remote_machine_name(const char *remote_name, bool perm); -const char *get_remote_machine_name(void); -void sub_set_smb_name(const char *name); -void set_current_user_info(const char *smb_name, const char *unix_name, - const char *domain); -void sub_set_socket_ids(const char *peeraddr, const char *peername, - const char *sockaddr); -const char *get_current_username(void); -void standard_sub_basic(const char *smb_name, const char *domain_name, - char *str, size_t len); -char *talloc_sub_basic(TALLOC_CTX *mem_ctx, const char *smb_name, - const char *domain_name, const char *str); -char *talloc_sub_specified(TALLOC_CTX *mem_ctx, - const char *input_string, - const char *username, - const char *grpname, - const char *domain, - uid_t uid, - gid_t gid); -char *talloc_sub_advanced(TALLOC_CTX *mem_ctx, - const char *servicename, const char *user, - const char *connectpath, gid_t gid, - const char *str); -char *talloc_sub_full(TALLOC_CTX *mem_ctx, - const char *servicename, const char *user, - const char *connectpath, gid_t gid, - const char *smb_name, const char *domain_name, - const char *str); - /* The following definitions come from lib/sysquotas.c */ int sys_get_quota(const char *path, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp); diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index b98a0acf1cbd..a941b89f82a6 100644 --- a/source3/lib/substitute.c +++ b/source3/lib/substitute.c @@ -20,6 +20,7 @@ #include "includes.h" +#include "substitute.h" #include "system/passwd.h" #include "secrets.h" #include "auth.h" diff --git a/source3/lib/substitute.h b/source3/lib/substitute.h new file mode 100644 index 000000000000..2056d163dd7d --- /dev/null +++ b/source3/lib/substitute.h @@ -0,0 +1,63 @@ +/* + Unix SMB/CIFS implementation. + string substitution functions + Copyright (C) Andrew Tridgell 1992-2000 + Copyright (C) Gerald Carter 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef SUBSTITUTE_H +#define SUBSTITUTE_H + +bool set_local_machine_name(const char *local_name, bool perm); +const char *get_local_machine_name(void); +bool set_remote_machine_name(const char *remote_name, bool perm); +const char *get_remote_machine_name(void); +void sub_set_socket_ids(const char *peeraddr, const char *peername, + const char *sockaddr); +void set_current_user_info(const char *smb_name, + const char *unix_name, + const char *domain); +const char *get_current_username(void); +void standard_sub_basic(const char *smb_name, + const char *domain_name, + char *str, + size_t len); +char *talloc_sub_basic(TALLOC_CTX *mem_ctx, + const char *smb_name, + const char *domain_name, + const char *str); +char *talloc_sub_specified(TALLOC_CTX *mem_ctx, + const char *input_string, + const char *username, + const char *grpname, + const char *domain, + uid_t uid, + gid_t gid); +char *talloc_sub_advanced(TALLOC_CTX *ctx, + const char *servicename, + const char *user, + const char *connectpath, + gid_t gid, + const char *str); +char *talloc_sub_full(TALLOC_CTX *ctx, + const char *servicename, + const char *user, + const char *connectpath, + gid_t gid, + const char *smb_name, + const char *domain_name, + const char *str); +#endif diff --git a/source3/modules/vfs_expand_msdfs.c b/source3/modules/vfs_expand_msdfs.c index 34e7051dca5f..fe3c6f47462c 100644 --- a/source3/modules/vfs_expand_msdfs.c +++ b/source3/modules/vfs_expand_msdfs.c @@ -25,6 +25,7 @@ #include "auth.h" #include "../lib/tsocket/tsocket.h" #include "msdfs.h" +#include "source3/lib/substitute.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_VFS diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c index ceda99d4568a..c8dbc8c07bbc 100644 --- a/source3/modules/vfs_full_audit.c +++ b/source3/modules/vfs_full_audit.c @@ -73,6 +73,7 @@ #include "passdb/machine_sid.h" #include "lib/util/tevent_ntstatus.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" static int vfs_full_audit_debug_level = DBGC_VFS; diff --git a/source3/modules/vfs_recycle.c b/source3/modules/vfs_recycle.c index 1c18f232c32f..7cbc938a57cd 100644 --- a/source3/modules/vfs_recycle.c +++ b/source3/modules/vfs_recycle.c @@ -27,6 +27,7 @@ #include "system/filesys.h" #include "../librpc/gen_ndr/ndr_netlogon.h" #include "auth.h" +#include "source3/lib/substitute.h" #define ALLOC_CHECK(ptr, label) do { if ((ptr) == NULL) { DEBUG(0, ("recycle.bin: out of memory!\n")); errno = ENOMEM; goto label; } } while(0) diff --git a/source3/modules/vfs_unityed_media.c b/source3/modules/vfs_unityed_media.c index 62a1456b9963..fbd4d968172a 100644 --- a/source3/modules/vfs_unityed_media.c +++ b/source3/modules/vfs_unityed_media.c @@ -62,6 +62,7 @@ #include "../lib/tsocket/tsocket.h" #include "lib/util/smb_strtox.h" #include +#include "source3/lib/substitute.h" #define UM_PARAM_TYPE_NAME "unityed_media" diff --git a/source3/modules/vfs_virusfilter_utils.c b/source3/modules/vfs_virusfilter_utils.c index c7f8089ffc73..b8b44eb203b9 100644 --- a/source3/modules/vfs_virusfilter_utils.c +++ b/source3/modules/vfs_virusfilter_utils.c @@ -25,6 +25,7 @@ struct iovec; #include "lib/util/iov_buf.h" #include #include "lib/tsocket/tsocket.h" +#include "source3/lib/substitute.h" int virusfilter_debug_class = DBGC_VFS; diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index 44121e9915ca..7470897587ea 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -29,6 +29,7 @@ #include "util_cluster.h" #include "lib/gencache.h" #include "lib/global_contexts.h" +#include "source3/lib/substitute.h" int ClientNMB = -1; int ClientDGRAM = -1; diff --git a/source3/nmbd/nmbd_synclists.c b/source3/nmbd/nmbd_synclists.c index a65cbb87e0e2..d291927fbc88 100644 --- a/source3/nmbd/nmbd_synclists.c +++ b/source3/nmbd/nmbd_synclists.c @@ -33,6 +33,7 @@ #include "libsmb/clirap.h" #include "../libcli/smb/smbXcli_base.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" struct sync_record { struct sync_record *next, *prev; diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index f54c08cc4a51..b56fd20e410c 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -76,6 +76,7 @@ #include "lib/crypto/gnutls_helpers.h" #include "lib/util/string_wrappers.h" #include "auth/credentials/credentials.h" +#include "source3/lib/substitute.h" #ifdef HAVE_SYS_SYSCTL_H #include diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 068c5a5ea70c..863f260ea902 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -33,6 +33,7 @@ #include "auth/credentials/credentials.h" #include "lib/param/param.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_PASSDB diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index e6d8a84c60fa..93da28b19414 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -56,6 +56,7 @@ #include "lib/util_sid_passdb.h" #include "lib/util/smb_strtox.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_PASSDB diff --git a/source3/printing/print_generic.c b/source3/printing/print_generic.c index 743c311bbd5f..8798a4cf34a3 100644 --- a/source3/printing/print_generic.c +++ b/source3/printing/print_generic.c @@ -20,6 +20,7 @@ #include "includes.h" #include "printing.h" #include "smbd/proto.h" +#include "source3/lib/substitute.h" extern userdom_struct current_user_info; diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 499334df03f0..67d798fbb214 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -40,6 +40,7 @@ #include "lib/util/string_wrappers.h" #include "lib/global_contexts.h" #include "source3/printing/rap_jobid.h" +#include "source3/lib/substitute.h" extern userdom_struct current_user_info; diff --git a/source3/rpc_server/lsa/srv_lsa_nt.c b/source3/rpc_server/lsa/srv_lsa_nt.c index 36774be3e32c..81d4129224d3 100644 --- a/source3/rpc_server/lsa/srv_lsa_nt.c +++ b/source3/rpc_server/lsa/srv_lsa_nt.c @@ -53,6 +53,7 @@ #include "librpc/rpc/dcesrv_core.h" #include "librpc/rpc/dcerpc_helper.h" #include "lib/param/loadparm.h" +#include "source3/lib/substitute.h" #include "lib/crypto/gnutls_helpers.h" #include diff --git a/source3/rpc_server/netlogon/srv_netlog_nt.c b/source3/rpc_server/netlogon/srv_netlog_nt.c index eaacd8dbc6ab..2906fa3f30f9 100644 --- a/source3/rpc_server/netlogon/srv_netlog_nt.c +++ b/source3/rpc_server/netlogon/srv_netlog_nt.c @@ -49,6 +49,7 @@ #include "lib/param/param.h" #include "libsmb/dsgetdcname.h" #include "lib/util/util_str_escape.h" +#include "source3/lib/substitute.h" extern userdom_struct current_user_info; diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c index 8576e9d2ce24..fc27a459634b 100644 --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c @@ -42,6 +42,7 @@ #include "messages.h" #include "serverid.h" #include "lib/global_contexts.h" +#include "source3/lib/substitute.h" extern const struct generic_mapping file_generic_mapping; diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c index f1c8ea0c2ed4..cf3b7c91c221 100644 --- a/source3/smbd/ipc.c +++ b/source3/smbd/ipc.c @@ -29,6 +29,7 @@ #include "smbd/globals.h" #include "smbprofile.h" #include "rpc_server/srv_pipe_hnd.h" +#include "source3/lib/substitute.h" #define NERR_notsupported 50 diff --git a/source3/smbd/lanman.c b/source3/smbd/lanman.c index 9194113e7686..eb8148753b90 100644 --- a/source3/smbd/lanman.c +++ b/source3/smbd/lanman.c @@ -45,6 +45,7 @@ #include "rpc_server/rpc_ncacn_np.h" #include "lib/util/string_wrappers.h" #include "source3/printing/rap_jobid.h" +#include "source3/lib/substitute.h" #ifdef CHECK_TYPES #undef CHECK_TYPES diff --git a/source3/smbd/message.c b/source3/smbd/message.c index b97289468893..7185bec1289e 100644 --- a/source3/smbd/message.c +++ b/source3/smbd/message.c @@ -27,6 +27,7 @@ #include "smbd/smbd.h" #include "smbd/globals.h" #include "smbprofile.h" +#include "source3/lib/substitute.h" extern userdom_struct current_user_info; diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index 995ed815d908..fd002e98071e 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -34,6 +34,7 @@ #include "librpc/gen_ndr/ndr_dfsblobs.h" #include "lib/tsocket/tsocket.h" #include "lib/global_contexts.h" +#include "source3/lib/substitute.h" /********************************************************************** Parse a DFS pathname of the form \hostname\service\reqpath diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 03409742752d..5015c143a042 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -46,6 +46,7 @@ #include "libcli/smb/smbXcli_base.h" #include "lib/util/time_basic.h" #include "smb1_utils.h" +#include "source3/lib/substitute.h" /* Internal message queue for deferred opens. */ struct pending_message_list { diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 042e7f2329eb..f85d1122a076 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -50,6 +50,7 @@ #include "libcli/smb/smb2_posix.h" #include "lib/util/string_wrappers.h" #include "source3/printing/rap_jobid.h" +#include "source3/lib/substitute.h" /**************************************************************************** Ensure we check the path in *exactly* the same way as W2K for a findfirst/findnext diff --git a/source3/smbd/server.c b/source3/smbd/server.c index d7f5b4b73c0f..d02ff1bd8834 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -60,6 +60,7 @@ #include "rpc_server/fssd.h" #include "rpc_server/mdssd.h" #include "lib/global_contexts.h" +#include "source3/lib/substitute.h" #ifdef CLUSTER_SUPPORT #include "ctdb_protocol.h" diff --git a/source3/smbd/service.c b/source3/smbd/service.c index afdea38b0161..ef7c14d92d0e 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -34,6 +34,7 @@ #include "lib/afs/afs_funcs.h" #include "lib/util_path.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" bool canonicalize_connect_path(connection_struct *conn) { diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 2bd527ce80e4..1705b8920b6c 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -34,6 +34,7 @@ #include "auth/gensec/gensec.h" #include "../libcli/smb/smb_signing.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" /**************************************************************************** Add the standard 'Samba' signature to the end of the session setup. diff --git a/source3/smbd/share_access.c b/source3/smbd/share_access.c index debe4fc6385c..c44c4bd8c694 100644 --- a/source3/smbd/share_access.c +++ b/source3/smbd/share_access.c @@ -23,6 +23,7 @@ #include "../libcli/security/security.h" #include "passdb/lookup_sid.h" #include "auth.h" +#include "source3/lib/substitute.h" /* * We dropped NIS support in 2021, but need to keep configs working. diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index f359db0729d8..f6b376e5a07a 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -33,6 +33,7 @@ #include "lib/util/iov_buf.h" #include "auth.h" #include "libcli/smb/smbXcli_base.h" +#include "source3/lib/substitute.h" #if defined(LINUX) /* SIOCOUTQ TIOCOUTQ are the same */ diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index 38049e8535f2..14b806bc007d 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -28,6 +28,7 @@ #include "../lib/tsocket/tsocket.h" #include "../libcli/security/security.h" #include "../lib/util/tevent_ntstatus.h" +#include "source3/lib/substitute.h" #include "lib/crypto/gnutls_helpers.h" #include diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index cd6b61429c54..a86ac3228e35 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -45,6 +45,7 @@ #include "smb1_utils.h" #include "libcli/smb/smb2_posix.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" #define DIR_ENTRY_SAFETY_MARGIN 4096 diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index b0d7f21c200f..52918c4f1819 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -26,6 +26,7 @@ #include "passdb/lookup_sid.h" #include "auth.h" #include "../auth/auth_util.h" +#include "source3/lib/substitute.h" /* what user is current? */ extern struct current_user current_user; diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 79a9c65073c9..d3e0e3cf095b 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -51,6 +51,7 @@ #include "lib/param/param.h" #include "auth/gensec/gensec.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" #include #include diff --git a/source3/utils/net_sam.c b/source3/utils/net_sam.c index 6a2c6c861f9e..17cc47b2ddd1 100644 --- a/source3/utils/net_sam.c +++ b/source3/utils/net_sam.c @@ -33,6 +33,7 @@ #include "idmap.h" #include "lib/util/smb_strtox.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" /* * Set a user's data diff --git a/source3/winbindd/wb_getpwsid.c b/source3/winbindd/wb_getpwsid.c index fb0351ec2010..7f168bdda7a5 100644 --- a/source3/winbindd/wb_getpwsid.c +++ b/source3/winbindd/wb_getpwsid.c @@ -22,6 +22,7 @@ #include "librpc/gen_ndr/ndr_winbind_c.h" #include "../libcli/security/security.h" #include "lib/util/string_wrappers.h" +#include "source3/lib/substitute.h" struct wb_getpwsid_state { struct tevent_context *ev; diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 25d8b7230101..290454619a4f 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -51,6 +51,7 @@ #include "lib/gencache.h" #include "rpc_server/rpc_config.h" #include "lib/global_contexts.h" +#include "source3/lib/substitute.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND -- 2.33.1 From 5fe62833469385a7234362deaf056f9117942659 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Thu, 11 Nov 2021 05:23:09 +0100 Subject: [PATCH 2/8] samba-bgqd: fix startup and logging Let samba-bgqd use the new POPT_COMMON_DAEMON infrastructure. The calls to setup_logging() can safely be removed as this is already taken care of by samba_cmdline_init(). To avoid a logfile basename of ".log" when using "%m", we add a call to set_remote_machine_name(). BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 54f54fc2627acbf5fac5e1fa86ab9f743741f3c4) --- source3/printing/samba-bgqd.c | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/source3/printing/samba-bgqd.c b/source3/printing/samba-bgqd.c index 8ac6ec525b26..2cd6a8e007ac 100644 --- a/source3/printing/samba-bgqd.c +++ b/source3/printing/samba-bgqd.c @@ -40,6 +40,7 @@ #include "source3/lib/util_procid.h" #include "source3/auth/proto.h" #include "source3/printing/queue_process.h" +#include "source3/lib/substitute.h" static void watch_handler(struct tevent_req *req) { @@ -235,6 +236,7 @@ static int closeall_except_fd_params( int main(int argc, const char *argv[]) { + struct samba_cmdline_daemon_cfg *cmdline_daemon_cfg = NULL; const struct loadparm_substitution *lp_sub = loadparm_s3_global_substitution(); const char *progname = getprogname(); @@ -245,8 +247,6 @@ int main(int argc, const char *argv[]) struct tevent_req *watch_req = NULL; struct tevent_signal *sigterm_handler = NULL; struct bq_state *bq = NULL; - int foreground = 0; - int no_process_group = 0; int log_stdout = 0; int ready_signal_fd = -1; int watch_fd = -1; @@ -259,21 +259,7 @@ int main(int argc, const char *argv[]) struct poptOption long_options[] = { POPT_AUTOHELP POPT_COMMON_SAMBA - { - .longName = "foreground", - .shortName = 'F', - .argInfo = POPT_ARG_NONE, - .arg = &foreground, - .descrip = "Run daemon in foreground " - "(for daemontools, etc.)", - }, - { - .longName = "no-process-group", - .shortName = '\0', - .argInfo = POPT_ARG_NONE, - .arg = &no_process_group, - .descrip = "Don't create a new process group" , - }, + POPT_COMMON_DAEMON /* * File descriptor to write the PID of the helper @@ -311,6 +297,7 @@ int main(int argc, const char *argv[]) frame = talloc_stackframe(); umask(0); + set_remote_machine_name("smbd-bgqd", true); ok = samba_cmdline_init(frame, SAMBA_CMDLINE_CONFIG_SERVER, @@ -320,6 +307,8 @@ int main(int argc, const char *argv[]) exit(ENOMEM); } + cmdline_daemon_cfg = samba_cmdline_get_daemon_cfg(); + pc = samba_popt_get_context(progname, argc, argv, @@ -340,16 +329,12 @@ int main(int argc, const char *argv[]) log_stdout = (debug_get_log_type() == DEBUG_STDOUT); - if (foreground) { + if (!cmdline_daemon_cfg->fork) { daemon_status(progname, "Starting process ... "); } else { - become_daemon(true, no_process_group, log_stdout); - } - - if (log_stdout) { - setup_logging(progname, DEBUG_STDOUT); - } else { - setup_logging(progname, DEBUG_FILE); + become_daemon(true, + cmdline_daemon_cfg->no_process_group, + log_stdout); } BlockSignals(true, SIGPIPE); -- 2.33.1 From 732c15981edd6393d3860b65715e188ed6f403fb Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 10 Nov 2021 18:27:08 +0100 Subject: [PATCH 3/8] winbindd: remove is_default_dyn_LOGFILEBASE() logic Handling of -l commandline parameter is already implemented by lib/cmdline/. is_default_dyn_LOGFILEBASE() == true is the default case and this causes us to temporarily overwrite the configured logfile with LOGFILEBASE/log.winbindd until winbindd_reload_services_file() restores it. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 117d45df47a1f3206bc38aaeaa11f2b327e43530) --- source3/winbindd/winbindd.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 290454619a4f..58c5ffbced47 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -1717,15 +1717,6 @@ int main(int argc, const char **argv) poptFreeContext(pc); - if (is_default_dyn_LOGFILEBASE()) { - char *lfile = NULL; - if (asprintf(&lfile,"%s/log.winbindd", - get_dyn_LOGFILEBASE()) > 0) { - lp_set_logfile(lfile); - SAFE_FREE(lfile); - } - } - reopen_logs(); DEBUG(0,("winbindd version %s started.\n", samba_version_string())); -- 2.33.1 From cc96aa2c698a2bff0504a497ae7d7c85fe121645 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 10 Nov 2021 14:13:11 +0100 Subject: [PATCH 4/8] lib/debug: fix fd check before dup'ing to stderr Before I added per-class logfile and we had only one fd for the logfile the code looked like this: /* Take over stderr to catch output into logs */ if (state.fd > 0) { if (dup2(state.fd, 2) == -1) { /* Close stderr too, if dup2 can't point it - at the logfile. There really isn't much that can be done on such a fundamental failure... */ close_low_fd(2); } } In the current code the equivalent to state.fd is dbgc_config[DBGC_ALL].fd. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 948a82bd2651e73e4e669a89dc77ba93abbb9b2f) --- lib/util/debug.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/util/debug.c b/lib/util/debug.c index 4fd176792273..b271608621ae 100644 --- a/lib/util/debug.c +++ b/lib/util/debug.c @@ -1125,7 +1125,6 @@ bool reopen_logs_internal(void) { struct debug_backend *b = NULL; mode_t oldumask; - int new_fd = 0; size_t i; bool ok; @@ -1190,7 +1189,7 @@ bool reopen_logs_internal(void) * If log file was opened or created successfully, take over stderr to * catch output into logs. */ - if (new_fd != -1) { + if (dbgc_config[DBGC_ALL].fd > 0) { if (dup2(dbgc_config[DBGC_ALL].fd, 2) == -1) { /* Close stderr too, if dup2 can't point it - at the logfile. There really isn't much -- 2.33.1 From 85a843fb4f02e09cf6222e7851376c5071d78689 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Mon, 8 Nov 2021 19:41:50 +0100 Subject: [PATCH 5/8] lib/debug: in debug_set_logfile() call reopen_logs_internal() This simplifies the logging API for callers that typically would want to set logging by just setup_logging() once without bothering that typically configuration is loaded (via some lpcfg_load*() or lp_load*() varient) which will only then pick up the configured logfile from smb.conf without actually applying the new logifle to the logging subsytem. Therefor our daemons will additionally call reopen_logs() explicitly in their startup code after config is loaded, eg setup_logging(getprogname(), DEBUG_FILE); ... lpcfg_load(lp_ctx, config_file); ... reopen_logs(); By calling reopen_logs_internal() implicitly from debug_set_logfile() there's no need to call reopen_logs() explicitly anymore to apply the logfile. As reopen_logs() will also apply other logging configuration options, we have to keep the explicit calls in the daemon code. But at least this allows consistent logging setup wrt to the logfile in the new cmdline library. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit fa9d9974d068897d35539e5316f606a15e8b38de) --- lib/util/debug.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/util/debug.c b/lib/util/debug.c index b271608621ae..171b5e150088 100644 --- a/lib/util/debug.c +++ b/lib/util/debug.c @@ -1018,6 +1018,8 @@ void debug_set_logfile(const char *name) } TALLOC_FREE(dbgc_config[DBGC_ALL].logfile); dbgc_config[DBGC_ALL].logfile = talloc_strdup(NULL, name); + + reopen_logs_internal(); } static void debug_close_fd(int fd) -- 2.33.1 From c30fab12c606ee862dc0e6ee5dd887960636f702 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Mon, 8 Nov 2021 12:08:47 +0100 Subject: [PATCH 6/8] lib/cmdline: fix indentation s/whitespace/tab/ BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 120a598e53173aacc0994318223bdac33dac4fbd) --- lib/cmdline/cmdline_s3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cmdline/cmdline_s3.c b/lib/cmdline/cmdline_s3.c index 1f8d9ed5eb50..639d403aed3a 100644 --- a/lib/cmdline/cmdline_s3.c +++ b/lib/cmdline/cmdline_s3.c @@ -55,7 +55,7 @@ static bool _samba_cmdline_load_config_s3(void) case SAMBA_CMDLINE_CONFIG_CLIENT: ok = lp_load_client(config_file); break; - case SAMBA_CMDLINE_CONFIG_SERVER: + case SAMBA_CMDLINE_CONFIG_SERVER: { const struct samba_cmdline_daemon_cfg *cmdline_daemon_cfg = samba_cmdline_get_daemon_cfg(); -- 2.33.1 From 8be9f23a8b289fa244f503ecb33940dde77fb394 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Mon, 8 Nov 2021 12:09:16 +0100 Subject: [PATCH 7/8] lib/cmdline: remember config_type in samba_cmdline_init() BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider (cherry picked from commit 97592f16bfb8590efbd2ed31fc9883d747ec650f) --- lib/cmdline/cmdline_s4.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/cmdline/cmdline_s4.c b/lib/cmdline/cmdline_s4.c index 61c1b96ba8d6..6ef6f59db498 100644 --- a/lib/cmdline/cmdline_s4.c +++ b/lib/cmdline/cmdline_s4.c @@ -25,6 +25,7 @@ #include "cmdline_private.h" static bool _require_smbconf; +static enum samba_cmdline_config_type _config_type; static bool _samba_cmdline_load_config_s4(void) { @@ -81,6 +82,7 @@ bool samba_cmdline_init(TALLOC_CTX *mem_ctx, return false; } _require_smbconf = require_smbconf; + _config_type = config_type; creds = cli_credentials_init(mem_ctx); if (creds == NULL) { -- 2.33.1 From d0ab3b74dba8541c033b0ba48e098f3dc20eba71 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Mon, 8 Nov 2021 12:09:43 +0100 Subject: [PATCH 8/8] lib/cmdline: setup default file logging for servers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BUG: https://bugzilla.samba.org/show_bug.cgi?id=14897 RN: samba process doesn't log to logfile Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider Autobuild-User(master): Ralph Böhme Autobuild-Date(master): Thu Nov 11 14:42:13 UTC 2021 on sn-devel-184 (cherry picked from commit 06ed4ccba6cfe08aef061866f98b1d1da26682b8) --- lib/cmdline/cmdline_s4.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/cmdline/cmdline_s4.c b/lib/cmdline/cmdline_s4.c index 6ef6f59db498..29e9f34bbe24 100644 --- a/lib/cmdline/cmdline_s4.c +++ b/lib/cmdline/cmdline_s4.c @@ -44,6 +44,20 @@ static bool _samba_cmdline_load_config_s4(void) } } + switch (_config_type) { + case SAMBA_CMDLINE_CONFIG_SERVER: { + const struct samba_cmdline_daemon_cfg *cmdline_daemon_cfg = + samba_cmdline_get_daemon_cfg(); + + if (!cmdline_daemon_cfg->interactive) { + setup_logging(getprogname(), DEBUG_FILE); + } + break; + } + default: + break; + } + config_file = get_dyn_CONFIGFILE(); ok = lpcfg_load(lp_ctx, config_file); if (!ok) { -- 2.33.1