s3-printing: add move_driver_file_to_download_area().
authorGünther Deschner <gd@samba.org>
Wed, 29 Apr 2009 23:07:31 +0000 (01:07 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 30 Apr 2009 09:22:23 +0000 (11:22 +0200)
Guenther

source3/printing/nt_printing.c

index cfef4fe623ee801c99049c57bedaf24d6a0bb9a1..9508e472be70173e6f29c55a6002177e5817d65a 100644 (file)
@@ -1802,6 +1802,46 @@ static char* ffmt(unsigned char *c){
 
 /****************************************************************************
 ****************************************************************************/
+
+static WERROR move_driver_file_to_download_area(TALLOC_CTX *mem_ctx,
+                                               connection_struct *conn,
+                                               const char *driver_file,
+                                               const char *architecture,
+                                               const char *new_dir,
+                                               uint32_t version)
+{
+       char *old_name = NULL;
+       char *new_name = NULL;
+       SMB_STRUCT_STAT st;
+       NTSTATUS status;
+
+       new_name = talloc_asprintf(mem_ctx, "%s/%s",
+                                  architecture, driver_file);
+       W_ERROR_HAVE_NO_MEMORY(new_name);
+
+       old_name = talloc_asprintf(mem_ctx, "%s/%s",
+                                  new_dir, driver_file);
+       W_ERROR_HAVE_NO_MEMORY(old_name);
+
+       if (version != -1 && (version = file_version_is_newer(conn, new_name, old_name)) > 0) {
+
+               new_name = driver_unix_convert(conn, new_name, &st);
+               W_ERROR_HAVE_NO_MEMORY(new_name);
+
+               status = copy_file(mem_ctx, conn, new_name, old_name,
+                                  OPENX_FILE_EXISTS_TRUNCATE |
+                                  OPENX_FILE_CREATE_IF_NOT_EXIST,
+                                  0, false);
+               if (!NT_STATUS_IS_OK(status)) {
+                       DEBUG(0,("move_driver_file_to_download_area: Unable to rename [%s] to [%s]\n",
+                               new_name, old_name));
+                       return WERR_ACCESS_DENIED;
+               }
+       }
+
+       return WERR_OK;
+}
+
 WERROR move_driver_to_download_area(struct pipes_struct *p,
                                    NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract,
                                    uint32 level, WERROR *perr)