[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Mar 24 21:29:01 UTC 2021


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 <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Mar 24 21:28:48 UTC 2021 on sn-devel-184

commit 263e6e06bd023c0c3de6d48cc41448e7e7ffee4c
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7d25dfa6c1005041a416cc23012c1d38dc8effe2
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Mar 23 11:58:19 2021 +0100

    nmbd: Fix CID 1474439: Incorrect expression
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a4235cdad276640c45eedf0fb5611209400ec6af
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Mar 23 11:55:43 2021 +0100

    vfs_ceph: Fix CID 1474440: Null pointer dereferences
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a90d45979e5aba1a0cc6826203eb5aaca9bb1c7c
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 22 17:16:06 2021 +0100

    printing: Align a few integer types
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c93fc0baf1ddede09f5be0b9c181230b7b9c54db
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ebd5322e6333a2f04d7fae1f89510cbcea0d5909
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 21 09:45:13 2021 +0100

    printing: Fix typos
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 49d0268f73c59d570888df4535ab086f8bd46755
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 656a3d2e48a5e49680dc12de9fb010ac06229b8a
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 249b0e32022ec925c3ebbe5efc7be9b53a0e134e
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2e608468595d748f506a059811231c5572976157
Author: Volker Lendecke <vl at 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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4288319770bc1bde28b1e9ac4bb287e29853378d
Author: Björn Jacke <bj at 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 <bjacke at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at 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



More information about the samba-cvs mailing list