The branch, master has been updated via 313ef6a82a3 rpc_client: cli_winreg_spoolss.h references spoolss structs via 263e6e06bd0 nmbd: Fix socket cleanup in make_subnet() via 7d25dfa6c10 nmbd: Fix CID 1474439: Incorrect expression via a4235cdad27 vfs_ceph: Fix CID 1474440: Null pointer dereferences via a90d45979e5 printing: Align a few integer types via c93fc0baf1d printing: Remove "else" branches, reduce indentation via ebd5322e633 printing: Fix typos via 49d0268f73c printing: Remove code to upgrade from before b0909cfa14f via 656a3d2e48a printing: Passing a fn pointer does not need "&" via 249b0e32022 libcli: Add file specific access flags to sddl via 2e608468595 winbindd: Fix a startup race with allocate_gid via 4288319770b dosmode: retry reading dos attributes as root for unreadable files from 293ab5f20ca ldb: bump version to 2.4.0, in order to be used for Samba 4.15
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 313ef6a82a3fc357703e3fe239e48117517c2c2a Author: Volker Lendecke <v...@samba.org> Date: Tue Mar 23 14:34:21 2021 +0100 rpc_client: cli_winreg_spoolss.h references spoolss structs Add required includes Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Wed Mar 24 21:28:48 UTC 2021 on sn-devel-184 commit 263e6e06bd023c0c3de6d48cc41448e7e7ffee4c Author: Volker Lendecke <v...@samba.org> Date: Tue Mar 23 11:58:58 2021 +0100 nmbd: Fix socket cleanup in make_subnet() We can have -errno in the in those variables Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 7d25dfa6c1005041a416cc23012c1d38dc8effe2 Author: Volker Lendecke <v...@samba.org> Date: Tue Mar 23 11:58:19 2021 +0100 nmbd: Fix CID 1474439: Incorrect expression Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit a4235cdad276640c45eedf0fb5611209400ec6af Author: Volker Lendecke <v...@samba.org> Date: Tue Mar 23 11:55:43 2021 +0100 vfs_ceph: Fix CID 1474440: Null pointer dereferences Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit a90d45979e5aba1a0cc6826203eb5aaca9bb1c7c Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 22 17:16:06 2021 +0100 printing: Align a few integer types Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit c93fc0baf1ddede09f5be0b9c181230b7b9c54db Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 22 17:12:40 2021 +0100 printing: Remove "else" branches, reduce indentation Best reviewed with "git show -b" Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit ebd5322e6333a2f04d7fae1f89510cbcea0d5909 Author: Volker Lendecke <v...@samba.org> Date: Sun Mar 21 09:45:13 2021 +0100 printing: Fix typos Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 49d0268f73c59d570888df4535ab086f8bd46755 Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 22 16:35:38 2021 +0100 printing: Remove code to upgrade from before b0909cfa14f I think even back then "printing.tdb" would have just been a stale tdb that would have been better handled externally. It might have been a product requirement back then, but I think a startup script and not core code might have been a better choice to handle this. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 656a3d2e48a5e49680dc12de9fb010ac06229b8a Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 22 16:11:21 2021 +0100 printing: Passing a fn pointer does not need "&" Just looked a bit weird and different from all other fn pointer references in Samba. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 249b0e32022ec925c3ebbe5efc7be9b53a0e134e Author: Volker Lendecke <v...@samba.org> Date: Mon Mar 22 14:43:54 2021 +0100 libcli: Add file specific access flags to sddl See https://docs.microsoft.com/en-us/windows/win32/secauthz/ace-strings for reference. We can only use them for decoding, many of our tests depend on our string representation of the flags. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 2e608468595d748f506a059811231c5572976157 Author: Volker Lendecke <v...@samba.org> Date: Tue Mar 23 15:13:55 2021 +0100 winbindd: Fix a startup race with allocate_gid If you try to allocate a GID before winbind is fully set up, idmap_child_handle() is still NULL. Add the required wb_parent_idmap_setup_send()/recv() to allocate_gid(). Bug: https://bugzilla.samba.org/show_bug.cgi?id=14678 RN: Fix a crash in winbind when allocate-gid is called early Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 4288319770bc1bde28b1e9ac4bb287e29853378d Author: Björn Jacke <b...@sernet.de> Date: Thu Mar 4 19:37:37 2021 +0100 dosmode: retry reading dos attributes as root for unreadable files if there are files that the user can't access, he is still allowed to read the dos attributes information, so we need to try reading them as root also. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14654 Signed-off-by: Bjoern Jacke <bja...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: libcli/security/sddl.c | 12 ++- source3/modules/vfs_ceph.c | 2 +- source3/nmbd/nmbd_subnetdb.c | 10 +- source3/printing/nt_printing.c | 148 ++++++++++++++-------------- source3/printing/pcap.c | 2 +- source3/printing/print_generic.c | 2 +- source3/printing/printing.c | 7 -- source3/printing/queue_process.c | 16 +-- source3/rpc_client/cli_winreg_spoolss.h | 3 + source3/rpc_server/spoolss/srv_spoolss_nt.c | 2 +- source3/smbd/dosmode.c | 13 +++ source3/winbindd/winbindd_allocate_gid.c | 43 +++++++- 12 files changed, 157 insertions(+), 103 deletions(-) Changeset truncated at 500 lines: diff --git a/libcli/security/sddl.c b/libcli/security/sddl.c index ec8cc98e10a..47223515a62 100644 --- a/libcli/security/sddl.c +++ b/libcli/security/sddl.c @@ -203,6 +203,14 @@ static const struct flag_map ace_access_mask[] = { { NULL, 0 } }; +static const struct flag_map decode_ace_access_mask[] = { + { "FA", FILE_ALL_ACCESS }, + { "FR", FILE_GENERIC_READ }, + { "FW", FILE_GENERIC_WRITE }, + { "FX", FILE_GENERIC_EXECUTE }, + { NULL, 0 }, +}; + /* decode an ACE return true on success, false on failure @@ -245,7 +253,9 @@ static bool sddl_decode_ace(TALLOC_CTX *mem_ctx, struct security_ace *ace, char if (strncmp(tok[2], "0x", 2) == 0) { ace->access_mask = strtol(tok[2], NULL, 16); } else { - if (!sddl_map_flags(ace_access_mask, tok[2], &v, NULL)) { + if (!sddl_map_flags(ace_access_mask, tok[2], &v, NULL) && + !sddl_map_flags( + decode_ace_access_mask, tok[2], &v, NULL)) { return false; } ace->access_mask = v; diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index e371090c95d..038258a1d8d 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1408,7 +1408,7 @@ static NTSTATUS cephwrap_create_dfs_pathat(struct vfs_handle_struct *handle, out: DBG_DEBUG("[CEPH] create_dfs_pathat(%s) = %s\n", - full_fname->base_name, + full_fname != NULL ? full_fname->base_name : "", nt_errstr(status)); TALLOC_FREE(frame); diff --git a/source3/nmbd/nmbd_subnetdb.c b/source3/nmbd/nmbd_subnetdb.c index 38c6db69b3d..983369f0c6f 100644 --- a/source3/nmbd/nmbd_subnetdb.c +++ b/source3/nmbd/nmbd_subnetdb.c @@ -155,7 +155,7 @@ static struct subnet_record *make_subnet(const char *name, enum subnet_type type "interface %s for port %d: %s\n", inet_ntoa(myip), DGRAM_PORT, - strerror(-dgram_sock)); + strerror(-dgram_bcast)); goto failed; } set_socket_options(dgram_bcast, "SO_BROADCAST"); @@ -196,16 +196,16 @@ static struct subnet_record *make_subnet(const char *name, enum subnet_type type failed: SAFE_FREE(subrec); - if (nmb_sock != -1) { + if (nmb_sock >= 0) { close(nmb_sock); } - if (nmb_bcast != -1) { + if (nmb_bcast >= 0) { close(nmb_bcast); } - if (dgram_sock != -1) { + if (dgram_sock >= 0) { close(dgram_sock); } - if (dgram_bcast != -1) { + if (dgram_bcast >= 0) { close(dgram_bcast); } return NULL; diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index e9253093ae2..65b66130a9b 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -66,7 +66,8 @@ const struct generic_mapping job_generic_mapping = { static bool print_driver_directories_init(void) { - int service, i; + int service; + size_t i; char *driver_path; bool ok; TALLOC_CTX *mem_ctx = talloc_stackframe(); @@ -864,24 +865,26 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr ret = 1; goto done; - } else { - ret = get_file_version(fsp, old_file, &old_major, &old_minor); - if (ret == -1) { - goto error_exit; - } + } - if (!ret) { - DEBUG(6,("file_version_is_newer: Version info not found [%s], use mod time\n", - old_file)); - use_version = false; - if (SMB_VFS_FSTAT(fsp, &st) == -1) { - goto error_exit; - } - old_create_time = convert_timespec_to_time_t(st.st_ex_mtime); - DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", - (long)old_create_time)); + ret = get_file_version(fsp, old_file, &old_major, &old_minor); + if (ret == -1) { + goto error_exit; + } + + if (!ret) { + DEBUG(6,("file_version_is_newer: Version info not found [%s], " + "use mod time\n", + old_file)); + use_version = false; + if (SMB_VFS_FSTAT(fsp, &st) == -1) { + goto error_exit; } + old_create_time = convert_timespec_to_time_t(st.st_ex_mtime); + DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", + (long)old_create_time)); } + close_file(NULL, fsp, NORMAL_CLOSE); fsp = NULL; @@ -923,24 +926,26 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr "errno = %d\n", smb_fname_str_dbg(smb_fname), errno)); goto error_exit; - } else { - ret = get_file_version(fsp, new_file, &new_major, &new_minor); - if (ret == -1) { - goto error_exit; - } + } - if (!ret) { - DEBUG(6,("file_version_is_newer: Version info not found [%s], use mod time\n", - new_file)); - use_version = false; - if (SMB_VFS_FSTAT(fsp, &st) == -1) { - goto error_exit; - } - new_create_time = convert_timespec_to_time_t(st.st_ex_mtime); - DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", - (long)new_create_time)); + ret = get_file_version(fsp, new_file, &new_major, &new_minor); + if (ret == -1) { + goto error_exit; + } + + if (!ret) { + DEBUG(6,("file_version_is_newer: Version info not found [%s], " + "use mod time\n", + new_file)); + use_version = false; + if (SMB_VFS_FSTAT(fsp, &st) == -1) { + goto error_exit; } + new_create_time = convert_timespec_to_time_t(st.st_ex_mtime); + DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", + (long)new_create_time)); } + close_file(NULL, fsp, NORMAL_CLOSE); fsp = NULL; @@ -1004,6 +1009,8 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf char *printdollar_path = NULL; char *working_dir = NULL; int printdollar_snum; + uint32_t major, minor; + int ret; *perr = WERR_INVALID_PARAMETER; @@ -1134,49 +1141,45 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf "%d\n", smb_fname_str_dbg(smb_fname), errno)); *perr = WERR_ACCESS_DENIED; goto error_exit; - } else { - uint32_t major; - uint32_t minor; - int ret; + } - ret = get_file_version(fsp, smb_fname->base_name, &major, &minor); - if (ret == -1) { - *perr = WERR_INVALID_PARAMETER; - goto error_exit; - } else if (!ret) { - DEBUG(6,("get_correct_cversion: Version info not " - "found [%s]\n", - smb_fname_str_dbg(smb_fname))); - *perr = WERR_INVALID_PARAMETER; - goto error_exit; - } + ret = get_file_version(fsp, smb_fname->base_name, &major, &minor); + if (ret == -1) { + *perr = WERR_INVALID_PARAMETER; + goto error_exit; + } else if (!ret) { + DEBUG(6,("get_correct_cversion: Version info not " + "found [%s]\n", + smb_fname_str_dbg(smb_fname))); + *perr = WERR_INVALID_PARAMETER; + goto error_exit; + } - /* - * This is a Microsoft'ism. See references in MSDN to VER_FILEVERSION - * for more details. Version in this case is not just the version of the - * file, but the version in the sense of kernal mode (2) vs. user mode - * (3) drivers. Other bits of the version fields are the version info. - * JRR 010716 - */ - cversion = major & 0x0000ffff; - switch (cversion) { - case 2: /* WinNT drivers */ - case 3: /* Win2K drivers */ - break; - - default: - DEBUG(6,("get_correct_cversion: cversion " - "invalid [%s] cversion = %d\n", - smb_fname_str_dbg(smb_fname), - cversion)); - goto error_exit; - } + /* + * This is a Microsoft'ism. See references in MSDN to VER_FILEVERSION + * for more details. Version in this case is not just the version of the + * file, but the version in the sense of kernal mode (2) vs. user mode + * (3) drivers. Other bits of the version fields are the version info. + * JRR 010716 + */ + cversion = major & 0x0000ffff; + switch (cversion) { + case 2: /* WinNT drivers */ + case 3: /* Win2K drivers */ + break; - DEBUG(10,("get_correct_cversion: Version info found [%s] major" - " = 0x%x minor = 0x%x\n", - smb_fname_str_dbg(smb_fname), major, minor)); + default: + DEBUG(6,("get_correct_cversion: cversion " + "invalid [%s] cversion = %d\n", + smb_fname_str_dbg(smb_fname), + cversion)); + goto error_exit; } + DEBUG(10,("get_correct_cversion: Version info found [%s] major" + " = 0x%x minor = 0x%x\n", + smb_fname_str_dbg(smb_fname), major, minor)); + DEBUG(10,("get_correct_cversion: Driver file [%s] cversion = %d\n", smb_fname_str_dbg(smb_fname), cversion)); *perr = WERR_OK; @@ -1957,11 +1960,10 @@ bool printer_driver_files_in_use(TALLOC_CTX *mem_ctx, struct dcerpc_binding_handle *b, struct spoolss_DriverInfo8 *info) { - int i; uint32_t version; struct spoolss_DriverInfo8 *driver; bool in_use = false; - uint32_t num_drivers; + uint32_t i, num_drivers; const char **drivers; WERROR result; @@ -2215,7 +2217,7 @@ jfm: I should use this comment for the text file to explain void map_printer_permissions(struct security_descriptor *sd) { - int i; + uint32_t i; for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) { se_map_generic(&sd->dacl->aces[i].access_mask, @@ -2225,7 +2227,7 @@ void map_printer_permissions(struct security_descriptor *sd) void map_job_permissions(struct security_descriptor *sd) { - int i; + uint32_t i; for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) { se_map_generic(&sd->dacl->aces[i].access_mask, diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c index d348c658fd4..732637260fb 100644 --- a/source3/printing/pcap.c +++ b/source3/printing/pcap.c @@ -144,7 +144,7 @@ void pcap_cache_reload(struct tevent_context *ev, return; } - /* only go looking if no printcap name supplied */ + /* only go looking if a printcap name is supplied */ if (pcap_name == NULL || *pcap_name == 0) { DEBUG(0, ("No printcap file name configured!\n")); return; diff --git a/source3/printing/print_generic.c b/source3/printing/print_generic.c index 0059fad23c5..075382780d4 100644 --- a/source3/printing/print_generic.c +++ b/source3/printing/print_generic.c @@ -164,7 +164,7 @@ static int generic_queue_get(const char *printer_name, print_queue_struct *queue = NULL; /* never do substitution when running the 'lpq command' since we can't - get it rigt when using the background update daemon. Make the caller + get it right when using the background update daemon. Make the caller do it before passing off the command string to us here. */ print_run_command(-1, printer_name, False, lpq_command, &fd, NULL); diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 403db853559..6c13a5e74fb 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -74,13 +74,6 @@ bool print_backend_init(struct messaging_context *msg_ctx) return false; } - print_cache_path = cache_path(talloc_tos(), "printing.tdb"); - if (print_cache_path == NULL) { - return false; - } - unlink(print_cache_path); - TALLOC_FREE(print_cache_path); - /* handle a Samba upgrade */ for (snum = 0; snum < services; snum++) { diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index 5938fd2a262..3cd53d8f39d 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -76,7 +76,7 @@ static void delete_and_reload_printers_full(struct tevent_context *ev, DEBUG(3, ("reload_printers: " "Could not create system session_info\n")); /* can't remove stale printers before we - * are fully initilized */ + * are fully initialized */ return; } @@ -145,7 +145,7 @@ static void reload_pcap_change_notify(struct tevent_context *ev, * newly added printers get default values created in the registry. * * This will block the process for some time (~1 sec per printer), but - * it doesn't block smbd's servering clients. + * it doesn't block smbd's serving clients. */ delete_and_reload_printers_full(ev, msg_ctx); @@ -165,7 +165,7 @@ static bool print_queue_housekeeping(const struct timeval *now, void *pvt) state = talloc_get_type_abort(pvt, struct bq_state); DEBUG(5, ("print queue housekeeping\n")); - pcap_cache_reload(state->ev, state->msg, &reload_pcap_change_notify); + pcap_cache_reload(state->ev, state->msg, reload_pcap_change_notify); return true; } @@ -240,7 +240,7 @@ static void bq_sig_hup_handler(struct tevent_context *ev, DEBUG(1, ("Reloading pcap cache after SIGHUP\n")); pcap_cache_reload(state->ev, state->msg, - &reload_pcap_change_notify); + reload_pcap_change_notify); printing_subsystem_queue_tasks(state); bq_reopen_logs(NULL); } @@ -298,7 +298,7 @@ static void bq_smb_conf_updated(struct messaging_context *msg_ctx, DEBUG(10,("smb_conf_updated: Got message saying smb.conf was " "updated. Reloading.\n")); change_to_root_user(); - pcap_cache_reload(state->ev, msg_ctx, &reload_pcap_change_notify); + pcap_cache_reload(state->ev, msg_ctx, reload_pcap_change_notify); printing_subsystem_queue_tasks(state); } @@ -418,7 +418,7 @@ pid_t start_background_queue(struct tevent_context *ev, smb_panic("tevent_add_fd() failed for pause_pipe"); } - pcap_cache_reload(ev, msg_ctx, &reload_pcap_change_notify); + pcap_cache_reload(ev, msg_ctx, reload_pcap_change_notify); DEBUG(5,("start_background_queue: background LPQ thread waiting for messages\n")); ret = tevent_loop_wait(ev); @@ -471,7 +471,7 @@ bool printing_subsystem_init(struct tevent_context *ev_ctx, /* Publish nt printers, this requires a working winreg pipe */ pcap_cache_reload(ev_ctx, msg_ctx, - &delete_and_reload_printers_full); + delete_and_reload_printers_full); return ret; } @@ -499,5 +499,5 @@ void printing_subsystem_update(struct tevent_context *ev_ctx, } pcap_cache_reload(ev_ctx, msg_ctx, - &delete_and_reload_printers_full); + delete_and_reload_printers_full); } diff --git a/source3/rpc_client/cli_winreg_spoolss.h b/source3/rpc_client/cli_winreg_spoolss.h index 1bd2746e6f4..0dc1126a042 100644 --- a/source3/rpc_client/cli_winreg_spoolss.h +++ b/source3/rpc_client/cli_winreg_spoolss.h @@ -22,6 +22,9 @@ #ifndef _RPC_CLIENT_CLI_WINREG_SPOOLSS_H_ #define _RPC_CLIENT_CLI_WINREG_SPOOLSS_H_ +#include "replace.h" +#include "librpc/gen_ndr/spoolss.h" + struct dcerpc_binding_handle; enum spoolss_PrinterInfo2Mask { diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index d20c19d5271..c60f91b5581 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -1096,7 +1096,7 @@ static void construct_info_data(struct spoolss_Notify *info_data, uint16_t field, int id); /*********************************************************************** - Send a change notication message on all handles which have a call + Send a change notifation message on all handles which have a call back registered **********************************************************************/ diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 15676e00851..aaa0924cb9d 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -382,6 +382,19 @@ NTSTATUS fget_ea_dos_attribute(struct files_struct *fsp, SAMBA_XATTR_DOS_ATTRIB, attrstr, sizeof(attrstr)); + if (sizeret == -1 && ( errno == EPERM || errno == EACCES )) { + /* we may also retrieve dos attribs for unreadable files, this + is why we'll retry as root. We don't use root in the first + run because in cases like NFS, root might have even less + rights than the real user + */ + become_root(); + sizeret = SMB_VFS_FGETXATTR(fsp->base_fsp ? fsp->base_fsp : fsp, + SAMBA_XATTR_DOS_ATTRIB, + attrstr, + sizeof(attrstr)); + unbecome_root(); + } if (sizeret == -1) { DBG_INFO("Cannot get attribute " "from EA on file %s: Error = %s\n", diff --git a/source3/winbindd/winbindd_allocate_gid.c b/source3/winbindd/winbindd_allocate_gid.c index 85aa1369473..2841d96e5f9 100644 --- a/source3/winbindd/winbindd_allocate_gid.c +++ b/source3/winbindd/winbindd_allocate_gid.c @@ -22,9 +22,11 @@ #include "librpc/gen_ndr/ndr_winbind_c.h" struct winbindd_allocate_gid_state { + struct tevent_context *ev; uint64_t gid; }; +static void winbindd_allocate_gid_initialized(struct tevent_req *subreq); static void winbindd_allocate_gid_done(struct tevent_req *subreq); struct tevent_req *winbindd_allocate_gid_send(TALLOC_CTX *mem_ctx, @@ -34,25 +36,56 @@ struct tevent_req *winbindd_allocate_gid_send(TALLOC_CTX *mem_ctx, { struct tevent_req *req, *subreq; struct winbindd_allocate_gid_state *state; - struct dcerpc_binding_handle *child_binding_handle = NULL; req = tevent_req_create(mem_ctx, &state, struct winbindd_allocate_gid_state); if (req == NULL) { return NULL; } + state->ev = ev; DEBUG(3, ("allocate_gid\n")); + subreq = wb_parent_idmap_setup_send(state, ev); -- Samba Shared Repository