The branch, master has been updated via 504866860df smbd: Modernize DBGs via 48a19c5fbff smbd: Avoid a ZERO_STRUCT with an explicit initialization via f3f5a56c5eb smbd: Fix CID 1508939 Use of 32-bit time_t via 35a7c99d992 rpc_server: Remove a leftover from before str_list_add_printf() via 7653cfa1e62 smbd: Make safe_symlink_target_path() static via 54160736c84 librpc: Fix whitespace via ea634953063 libcli: Avoid a ZERO_STRUCT with a direct initialization via 3c76c3989c9 net: Fix a panic in "net vfs getntacl" via 9ac5f58a264 libndr: Simplify indentation in ndr_print via 898dcd99363 lib: Use metadata_fsp() where appropriate via 39ab4a25c26 smbd: Fix whitespace from 13521f85ad3 s3:auth: Fix Coverity ID 1646934: memory leak in make_pw_chat
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 504866860dffe09f1073d01486eb10342fb7cad3 Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 31 10:27:13 2025 +0200 smbd: Modernize DBGs Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> Autobuild-User(master): Martin Schwenke <mart...@samba.org> Autobuild-Date(master): Sat Jun 14 09:49:16 UTC 2025 on atb-devel-224 commit 48a19c5fbff3cf43ba43d8940c5b77bc025a99fa Author: Volker Lendecke <v...@samba.org> Date: Mon Feb 24 21:04:32 2025 +0100 smbd: Avoid a ZERO_STRUCT with an explicit initialization Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit f3f5a56c5eb53bfd3d78998872249c32f6759618 Author: Volker Lendecke <v...@samba.org> Date: Wed Apr 2 12:30:25 2025 +0200 smbd: Fix CID 1508939 Use of 32-bit time_t This will pop up somewhere else, but this one was easy to fix. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 35a7c99d992a72786bb0684f987d0e926604ade3 Author: Volker Lendecke <v...@samba.org> Date: Sun Mar 23 17:57:37 2025 +0100 rpc_server: Remove a leftover from before str_list_add_printf() Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 7653cfa1e6280ab8270687d858b93a29b2e3f026 Author: Volker Lendecke <v...@samba.org> Date: Sun Mar 30 20:28:11 2025 +0200 smbd: Make safe_symlink_target_path() static Only used once Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 54160736c8482ad06066797d2033cb710caf7059 Author: Volker Lendecke <v...@samba.org> Date: Sun Mar 23 17:03:16 2025 +0100 librpc: Fix whitespace Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit ea63495306372339a885fecbc825599f10c193b1 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 10 09:55:58 2025 +0200 libcli: Avoid a ZERO_STRUCT with a direct initialization Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 3c76c3989c9628a5e4c4e704185f4257620deccd Author: Volker Lendecke <v...@samba.org> Date: Thu Mar 20 17:57:11 2025 +0100 net: Fix a panic in "net vfs getntacl" We have to explicitly free smb_fname, because after openat_pathref_fsp we have a file descriptor around. If we then later talloc_free() the connection_struct, fd_handle_destructor() panics because talloc_free() does not free smb_fname before the connection_struct. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 9ac5f58a264cb889898cc7bfc844192d6fad8139 Author: Volker Lendecke <v...@samba.org> Date: Sat Jun 7 11:34:18 2025 +0200 libndr: Simplify indentation in ndr_print printf can take care of the for-loop Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 898dcd99363d96c45054bb9b7ec2aa9cf26e5d02 Author: Volker Lendecke <v...@samba.org> Date: Sat Jun 7 10:54:56 2025 +0200 lib: Use metadata_fsp() where appropriate Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 39ab4a25c26b8a82a28fe1d4755f875a40f2e365 Author: Volker Lendecke <v...@samba.org> Date: Sat Jun 7 11:05:55 2025 +0200 smbd: Fix whitespace Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Martin Schwenke <mar...@meltin.net> ----------------------------------------------------------------------- Summary of changes: libcli/smb/smbXcli_base.c | 4 +--- librpc/ndr/ndr.c | 31 ++++++++--------------------- librpc/ndr/ndr_dnsp.c | 5 +---- librpc/rpc/binding.c | 46 +++++++++++++++++++++---------------------- librpc/rpc/rpc_common.h | 4 ++-- source3/include/proto.h | 6 ------ source3/lib/adouble.c | 2 +- source3/locking/locking.c | 2 +- source3/rpc_server/rpc_host.c | 5 ----- source3/smbd/filename.c | 12 +++++------ source3/smbd/msdfs.c | 4 ++-- source3/smbd/smb1_reply.c | 2 +- source3/smbd/smb2_trans2.c | 8 ++++---- source3/utils/net_vfs.c | 1 + source4/librpc/ndr/py_xattr.c | 7 ++----- 15 files changed, 53 insertions(+), 86 deletions(-) Changeset truncated at 500 lines: diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index d1e36a3fa1e..bf0ffb83702 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -4485,7 +4485,7 @@ static void smbXcli_negprot_smb1_done(struct tevent_req *subreq) bool server_writeunlock = false; struct GUID server_guid = GUID_zero(); DATA_BLOB server_gss_blob = data_blob_null; - uint8_t server_challenge[8]; + uint8_t server_challenge[8] = {}; char *server_workgroup = NULL; char *server_name = NULL; int server_time_zone = 0; @@ -4505,8 +4505,6 @@ static void smbXcli_negprot_smb1_done(struct tevent_req *subreq) } }; - ZERO_STRUCT(server_challenge); - status = smb1cli_req_recv(subreq, state, &recv_iov, &inhdr, diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 896f682d2c2..082bacc2fa6 100644 --- a/librpc/ndr/ndr.c +++ b/librpc/ndr/ndr.c @@ -305,7 +305,6 @@ _PUBLIC_ void ndr_print_debugc_helper(struct ndr_print *ndr, const char *format, { va_list ap; char *s = NULL; - uint32_t i; int ret; int dbgc_class; @@ -325,11 +324,7 @@ _PUBLIC_ void ndr_print_debugc_helper(struct ndr_print *ndr, const char *format, return; } - for (i=0;i<ndr->depth;i++) { - DEBUGADDC(dbgc_class, 1,(" ")); - } - - DEBUGADDC(dbgc_class, 1,("%s\n", s)); + DEBUGADDC(dbgc_class, 1, ("%*.s\n", 4 * ndr->depth, s)); free(s); } @@ -337,7 +332,6 @@ _PUBLIC_ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, { va_list ap; char *s = NULL; - uint32_t i; int ret; va_start(ap, format); @@ -354,23 +348,16 @@ _PUBLIC_ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, return; } - for (i=0;i<ndr->depth;i++) { - DEBUGADD(1,(" ")); - } - - DEBUGADD(1,("%s\n", s)); + DEBUGADD(1, ("%*.s%s\n", 4 * ndr->depth, "", s)); free(s); } _PUBLIC_ void ndr_print_printf_helper(struct ndr_print *ndr, const char *format, ...) { va_list ap; - uint32_t i; if (!ndr->no_newline) { - for (i=0;i<ndr->depth;i++) { - printf(" "); - } + printf("%*.s", 4 * ndr->depth, ""); } va_start(ap, format); @@ -384,13 +371,12 @@ _PUBLIC_ void ndr_print_printf_helper(struct ndr_print *ndr, const char *format, _PUBLIC_ void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...) { va_list ap; - uint32_t i; if (!ndr->no_newline) { - for (i=0;i<ndr->depth;i++) { - ndr->private_data = talloc_asprintf_append_buffer( - (char *)ndr->private_data, " "); - } + talloc_asprintf_addbuf((char **)&ndr->private_data, + "%*.s", + ndr->depth * 4, + ""); } va_start(ap, format); @@ -398,8 +384,7 @@ _PUBLIC_ void ndr_print_string_helper(struct ndr_print *ndr, const char *format, format, ap); va_end(ap); if (!ndr->no_newline) { - ndr->private_data = talloc_asprintf_append_buffer((char *)ndr->private_data, - "\n"); + talloc_asprintf_addbuf((char **)&ndr->private_data, "\n"); } } diff --git a/librpc/ndr/ndr_dnsp.c b/librpc/ndr/ndr_dnsp.c index 2f218edade4..43efa3466d7 100644 --- a/librpc/ndr/ndr_dnsp.c +++ b/librpc/ndr/ndr_dnsp.c @@ -193,10 +193,7 @@ _PUBLIC_ void ndr_print_dnsp_string_list(struct ndr_print *ndr, const char *name uint32_t i; ndr->no_newline = true; - for (i=0; i<ndr->depth; i++) { - ndr->print(ndr, " "); - } - ndr->print(ndr, "%-25s:", name); + ndr->print(ndr, "%*.s%-25s:", 4 * ndr->depth, "", name); for (i=0; i<list->count; i++) { ndr->print(ndr, " \"%s\"", list->str[i]); } diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c index eaf3430c9d3..e0d66303583 100644 --- a/librpc/rpc/binding.c +++ b/librpc/rpc/binding.c @@ -1,4 +1,4 @@ -/* +/* Unix SMB/CIFS implementation. dcerpc utility functions @@ -55,34 +55,34 @@ static const struct { int num_protocols; enum epm_protocol protseq[MAX_PROTSEQ]; } transports[] = { - { "ncacn_np", NCACN_NP, 3, + { "ncacn_np", NCACN_NP, 3, { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_SMB, EPM_PROTOCOL_NETBIOS }}, - { "ncacn_ip_tcp", NCACN_IP_TCP, 3, - { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_TCP, EPM_PROTOCOL_IP } }, - { "ncacn_http", NCACN_HTTP, 3, - { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_HTTP, EPM_PROTOCOL_IP } }, - { "ncadg_ip_udp", NCACN_IP_UDP, 3, + { "ncacn_ip_tcp", NCACN_IP_TCP, 3, + { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_TCP, EPM_PROTOCOL_IP } }, + { "ncacn_http", NCACN_HTTP, 3, + { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_HTTP, EPM_PROTOCOL_IP } }, + { "ncadg_ip_udp", NCACN_IP_UDP, 3, { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_UDP, EPM_PROTOCOL_IP } }, - { "ncalrpc", NCALRPC, 2, + { "ncalrpc", NCALRPC, 2, { EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_NAMED_PIPE } }, - { "ncacn_unix_stream", NCACN_UNIX_STREAM, 2, + { "ncacn_unix_stream", NCACN_UNIX_STREAM, 2, { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_UNIX_DS } }, - { "ncadg_unix_dgram", NCADG_UNIX_DGRAM, 2, + { "ncadg_unix_dgram", NCADG_UNIX_DGRAM, 2, { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_UNIX_DS } }, - { "ncacn_at_dsp", NCACN_AT_DSP, 3, + { "ncacn_at_dsp", NCACN_AT_DSP, 3, { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_APPLETALK, EPM_PROTOCOL_DSP } }, - { "ncadg_at_ddp", NCADG_AT_DDP, 3, + { "ncadg_at_ddp", NCADG_AT_DDP, 3, { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_APPLETALK, EPM_PROTOCOL_DDP } }, - { "ncacn_vns_ssp", NCACN_VNS_SPP, 3, + { "ncacn_vns_ssp", NCACN_VNS_SPP, 3, { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_STREETTALK, EPM_PROTOCOL_VINES_SPP } }, - { "ncacn_vns_ipc", NCACN_VNS_IPC, 3, + { "ncacn_vns_ipc", NCACN_VNS_IPC, 3, { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_STREETTALK, EPM_PROTOCOL_VINES_IPC }, }, { "ncadg_ipx", NCADG_IPX, 2, { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_IPX }, }, { "ncacn_spx", NCACN_SPX, 3, - /* I guess some MS programmer confused the identifier for - * EPM_PROTOCOL_UUID (0x0D or 13) with the one for + /* I guess some MS programmer confused the identifier for + * EPM_PROTOCOL_UUID (0x0D or 13) with the one for * EPM_PROTOCOL_SPX (0x13) here. -- jelmer*/ { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_UUID }, }, @@ -141,11 +141,11 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor) if (GUID_equal(&syntax.uuid, &ndr_transfer_syntax_ndr.uuid)) { return "NDR"; - } + } if (GUID_equal(&syntax.uuid, &ndr_transfer_syntax_ndr64.uuid)) { return "NDR64"; - } + } return talloc_asprintf( mem_ctx, @@ -153,7 +153,7 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor) GUID_buf_string(&syntax.uuid, &buf), syntax.if_version); } else { /* IPX */ - return talloc_asprintf(mem_ctx, "IPX:%s", + return talloc_asprintf(mem_ctx, "IPX:%s", data_blob_hex_string_upper(mem_ctx, &epm_floor->rhs.uuid.unknown)); } @@ -1092,8 +1092,8 @@ char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor return NULL; } -static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX *mem_ctx, - struct epm_floor *epm_floor, +static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX *mem_ctx, + struct epm_floor *epm_floor, const char *data) { if (data == NULL) { @@ -1182,7 +1182,7 @@ enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot) /* Find a transport that has 'prot' as 4th protocol */ for (i=0;i<ARRAY_SIZE(transports);i++) { - if (transports[i].num_protocols >= 2 && + if (transports[i].num_protocols >= 2 && transports[i].protseq[1] == prot) { return transports[i].transport; } @@ -1200,7 +1200,7 @@ _PUBLIC_ enum dcerpc_transport_t dcerpc_transport_by_tower(const struct epm_towe for (i=0;i<ARRAY_SIZE(transports);i++) { int j; if (transports[i].num_protocols != tower->num_floors - 2) { - continue; + continue; } for (j = 0; j < transports[i].num_protocols && j < MAX_PROTSEQ; j++) { diff --git a/librpc/rpc/rpc_common.h b/librpc/rpc/rpc_common.h index 2ec411653bc..d7559b5fc6f 100644 --- a/librpc/rpc/rpc_common.h +++ b/librpc/rpc/rpc_common.h @@ -43,8 +43,8 @@ struct tstream_context; struct gensec_security; enum dcerpc_transport_t { - NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, - NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, + NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, + NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX, NCACN_INTERNAL }; /** this describes a binding to a particular transport/pipe */ diff --git a/source3/include/proto.h b/source3/include/proto.h index da0d0cb7dfe..9f4ab67ea64 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -668,12 +668,6 @@ struct smb_filename *synthetic_smb_fname(TALLOC_CTX *mem_ctx, const SMB_STRUCT_STAT *psbuf, NTTIME twrp, uint32_t flags); -NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx, - const char *connectpath, - const char *dir, - const char *target, - size_t unparsed, - char **_relative); struct reparse_data_buffer; NTSTATUS filename_convert_dirfsp_nosymlink(TALLOC_CTX *mem_ctx, diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c index f8ae89d670c..9d22dafeb63 100644 --- a/source3/lib/adouble.c +++ b/source3/lib/adouble.c @@ -2697,7 +2697,7 @@ int ad_fset(struct vfs_handle_struct *handle, switch (ad->ad_type) { case ADOUBLE_META: rc = SMB_VFS_NEXT_FSETXATTR(handle, - fsp->base_fsp ? fsp->base_fsp : fsp, + metadata_fsp(fsp), AFPINFO_EA_NETATALK, ad->ad_data, AD_DATASZ_XATTR, 0); diff --git a/source3/locking/locking.c b/source3/locking/locking.c index 9a45424cf3d..cebdb311b4b 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -1,4 +1,4 @@ -/* +/* Unix SMB/CIFS implementation. Locking functions Copyright (C) Andrew Tridgell 1992-2000 diff --git a/source3/rpc_server/rpc_host.c b/source3/rpc_server/rpc_host.c index 5232c5f17fa..b88cdf48cc3 100644 --- a/source3/rpc_server/rpc_host.c +++ b/source3/rpc_server/rpc_host.c @@ -268,11 +268,6 @@ static struct tevent_req *rpc_server_get_endpoints_send( return tevent_req_post(req, ev); } - state->argl = talloc_array(state, char *, 4); - if (tevent_req_nomem(state->argl, req)) { - return tevent_req_post(req, ev); - } - state->argl = str_list_make_empty(state); str_list_add_printf(&state->argl, "%s", rpc_server_exe); str_list_add_printf(&state->argl, "--list-interfaces"); diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index e4234178c0d..6a9d5f99d2a 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -595,12 +595,12 @@ static NTSTATUS filename_convert_normalize_new( return NT_STATUS_OK; } -NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx, - const char *connectpath, - const char *dir, - const char *target, - size_t unparsed, - char **_relative) +static NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx, + const char *connectpath, + const char *dir, + const char *target, + size_t unparsed, + char **_relative) { char *abs_target = NULL; char *abs_target_canon = NULL; diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index d8361fb8060..eb0333d46be 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -288,14 +288,14 @@ static NTSTATUS create_conn_struct_as_root(TALLOC_CTX *ctx, if (!smbd_vfs_init(conn)) { NTSTATUS status = map_nt_error_from_unix(errno); - DEBUG(0,("create_conn_struct: smbd_vfs_init failed.\n")); + DBG_ERR("smbd_vfs_init failed.\n"); conn_free(conn); return status; } /* this must be the first filesystem operation that we do */ if (SMB_VFS_CONNECT(conn, servicename, vfs_user) < 0) { - DEBUG(0,("VFS connect failed!\n")); + DBG_ERR("VFS connect failed!\n"); conn_free(conn); return NT_STATUS_UNSUCCESSFUL; } diff --git a/source3/smbd/smb1_reply.c b/source3/smbd/smb1_reply.c index bba77119c16..83b754f9c77 100644 --- a/source3/smbd/smb1_reply.c +++ b/source3/smbd/smb1_reply.c @@ -1907,7 +1907,7 @@ void reply_open_and_X(struct smb_request *req) #endif int smb_ofun; uint32_t fattr=0; - int mtime=0; + time_t mtime=0; int smb_action = 0; struct files_struct *dirfsp = NULL; files_struct *fsp; diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 0370a8332cd..3483a413335 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -1783,7 +1783,10 @@ NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx, uint32_t mode = 0; char *fname = NULL; struct smb_filename *smb_fname = NULL; - struct smbd_dirptr_lanman2_state state; + struct smbd_dirptr_lanman2_state state = { + .conn = conn, + .info_level = info_level, + }; bool ok; uint64_t last_entry_off = 0; NTSTATUS status; @@ -1792,9 +1795,6 @@ NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx, mangled_names = lp_mangled_names(conn->params); - ZERO_STRUCT(state); - state.conn = conn; - state.info_level = info_level; if (mangled_names != MANGLED_NAMES_NO) { state.check_mangled_names = true; } diff --git a/source3/utils/net_vfs.c b/source3/utils/net_vfs.c index 1cc775f3c4d..8120811676e 100644 --- a/source3/utils/net_vfs.c +++ b/source3/utils/net_vfs.c @@ -278,6 +278,7 @@ static int net_vfs_get_ntacl(struct net_context *net, if (!NT_STATUS_IS_OK(status)) { DBG_ERR("SMB_VFS_CREATE_FILE [%s] failed: %s\n", smb_fname_str_dbg(smb_fname), nt_errstr(status)); + TALLOC_FREE(smb_fname); goto done; } diff --git a/source4/librpc/ndr/py_xattr.c b/source4/librpc/ndr/py_xattr.c index 523c1ab4a19..df134e01a9a 100644 --- a/source4/librpc/ndr/py_xattr.c +++ b/source4/librpc/ndr/py_xattr.c @@ -44,7 +44,7 @@ static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, { va_list ap; char *s = NULL; - int i, ret; + int ret; va_start(ap, format); ret = vasprintf(&s, format, ap); @@ -54,11 +54,8 @@ static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, return; } - for (i=0;i<ndr->depth;i++) { - printf(" "); - } + printf("%*.s\n", 4 * ndr->depth, s); - printf("%s\n", s); free(s); } -- Samba Shared Repository