summaryrefslogtreecommitdiff
path: root/source3/printing
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2022-08-02 14:01:59 -0700
committerJeremy Allison <jra@samba.org>2022-08-04 17:09:31 +0000
commitf42b5be412717cdec67d86fe97314d5c0daa4e71 (patch)
tree0306b3ed5589734979e2046462be2c127e60da2e /source3/printing
parent87835c69ccf44ddf422f332caa5f00780634a48a (diff)
downloadsamba-f42b5be412717cdec67d86fe97314d5c0daa4e71.tar.gz
s3: smbd: Add dirfsp return parameter to driver_unix_convert().
Not yet used, but (dirfsp=NULL) value passed to functions called after driver_unix_convert(). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
Diffstat (limited to 'source3/printing')
-rw-r--r--source3/printing/nt_printing.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index dc54a194f65..ec15c070ca6 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -242,7 +242,8 @@ bool nt_printing_init(struct messaging_context *msg_ctx)
static NTSTATUS driver_unix_convert(connection_struct *conn,
const char *old_name,
- struct smb_filename **smb_fname)
+ struct files_struct **pdirfsp,
+ struct smb_filename **psmb_fname)
{
NTSTATUS status;
TALLOC_CTX *ctx = talloc_tos();
@@ -258,7 +259,7 @@ static NTSTATUS driver_unix_convert(connection_struct *conn,
}
trim_string(name,"/","/");
- status = unix_convert(ctx, conn, name, 0, smb_fname, 0);
+ status = unix_convert(ctx, conn, name, 0, psmb_fname, 0);
if (!NT_STATUS_IS_OK(status)) {
return NT_STATUS_NO_MEMORY;
}
@@ -806,6 +807,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
struct smb_filename *smb_fname = NULL;
files_struct *fsp = NULL;
+ struct files_struct *dirfsp = NULL;
SMB_STRUCT_STAT st;
NTSTATUS status;
@@ -816,7 +818,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
old_create_time = (time_t)0;
/* Get file version info (if available) for previous file (if it exists) */
- status = driver_unix_convert(conn, old_file, &smb_fname);
+ status = driver_unix_convert(conn, old_file, &dirfsp, &smb_fname);
if (!NT_STATUS_IS_OK(status)) {
goto error_exit;
}
@@ -830,7 +832,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
status = SMB_VFS_CREATE_FILE(
conn, /* conn */
NULL, /* req */
- NULL, /* dirfsp */
+ dirfsp, /* dirfsp */
smb_fname, /* fname */
FILE_GENERIC_READ, /* access_mask */
FILE_SHARE_READ | FILE_SHARE_WRITE, /* share_access */
@@ -878,7 +880,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
close_file_free(NULL, &fsp, NORMAL_CLOSE);
/* Get file version info (if available) for new file */
- status = driver_unix_convert(conn, new_file, &smb_fname);
+ status = driver_unix_convert(conn, new_file, &dirfsp, &smb_fname);
if (!NT_STATUS_IS_OK(status)) {
goto error_exit;
}
@@ -893,7 +895,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
status = SMB_VFS_CREATE_FILE(
conn, /* conn */
NULL, /* req */
- NULL, /* dirfsp */
+ dirfsp, /* dirfsp */
smb_fname, /* fname */
FILE_GENERIC_READ, /* access_mask */
FILE_SHARE_READ | FILE_SHARE_WRITE, /* share_access */
@@ -992,6 +994,7 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf
NTSTATUS nt_status;
struct smb_filename *smb_fname = NULL;
files_struct *fsp = NULL;
+ struct files_struct *dirfsp = NULL;
struct conn_struct_tos *c = NULL;
connection_struct *conn = NULL;
char *printdollar = NULL;
@@ -1085,7 +1088,10 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf
* We switch to the directory where the driver files are located,
* so only work on the file names
*/
- nt_status = driver_unix_convert(conn, driverpath_in, &smb_fname);
+ nt_status = driver_unix_convert(conn,
+ driverpath_in,
+ &dirfsp,
+ &smb_fname);
if (!NT_STATUS_IS_OK(nt_status)) {
*perr = ntstatus_to_werror(nt_status);
goto error_exit;
@@ -1110,7 +1116,7 @@ static uint32_t get_correct_cversion(const struct auth_session_info *session_inf
nt_status = SMB_VFS_CREATE_FILE(
conn, /* conn */
NULL, /* req */
- NULL, /* dirfsp */
+ dirfsp, /* dirfsp */
smb_fname, /* fname */
FILE_GENERIC_READ, /* access_mask */
FILE_SHARE_READ | FILE_SHARE_WRITE, /* share_access */
@@ -1439,8 +1445,12 @@ static WERROR move_driver_file_to_download_area(TALLOC_CTX *mem_ctx,
}
if (version != -1 && (version = file_version_is_newer(conn, old_name, new_name)) > 0) {
+ struct files_struct *dirfsp = NULL;
- status = driver_unix_convert(conn, old_name, &smb_fname_old);
+ status = driver_unix_convert(conn,
+ old_name,
+ &dirfsp,
+ &smb_fname_old);
if (!NT_STATUS_IS_OK(status)) {
ret = WERR_NOT_ENOUGH_MEMORY;
goto out;
@@ -1489,6 +1499,7 @@ WERROR move_driver_to_download_area(const struct auth_session_info *session_info
struct spoolss_AddDriverInfo3 *driver;
struct spoolss_AddDriverInfo3 converted_driver;
const char *short_architecture;
+ struct files_struct *dirfsp = NULL;
struct smb_filename *smb_dname = NULL;
char *new_dir = NULL;
struct conn_struct_tos *c = NULL;
@@ -1569,7 +1580,7 @@ WERROR move_driver_to_download_area(const struct auth_session_info *session_info
err = WERR_NOT_ENOUGH_MEMORY;
goto err_exit;
}
- nt_status = driver_unix_convert(conn, new_dir, &smb_dname);
+ nt_status = driver_unix_convert(conn, new_dir, &dirfsp, &smb_dname);
if (!NT_STATUS_IS_OK(nt_status)) {
err = WERR_NOT_ENOUGH_MEMORY;
goto err_exit;
@@ -1577,7 +1588,7 @@ WERROR move_driver_to_download_area(const struct auth_session_info *session_info
DEBUG(5,("Creating first directory: %s\n", smb_dname->base_name));
- nt_status = create_directory(conn, NULL, NULL, smb_dname);
+ nt_status = create_directory(conn, NULL, dirfsp, smb_dname);
if (!NT_STATUS_IS_OK(nt_status)
&& !NT_STATUS_EQUAL(nt_status, NT_STATUS_OBJECT_NAME_COLLISION)) {
DEBUG(0, ("failed to create driver destination directory: %s\n",