use proxmox::tools::fd::fd_change_cloexec from proxmox 0.15.3
Depend on proxmox 0.15.3 Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
This commit is contained in:
		| @ -95,7 +95,7 @@ zstd = { version = "0.6", features = [ "bindgen" ] } | |||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| pxar = { version = "0.10.1", features = [ "tokio-io" ] } | pxar = { version = "0.10.1", features = [ "tokio-io" ] } | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0", features = [ "sortable-macro" ] } | proxmox = { version = "0.15.3", features = [ "sortable-macro" ] } | ||||||
| proxmox-http = { version = "0.5.4", features = [ "client", "http-helpers", "websocket" ] } | proxmox-http = { version = "0.5.4", features = [ "client", "http-helpers", "websocket" ] } | ||||||
| proxmox-io = "1" | proxmox-io = "1" | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ openssl = "0.10" | |||||||
| regex = "1.2" | regex = "1.2" | ||||||
| serde = { version = "1.0", features = ["derive"] } | serde = { version = "1.0", features = ["derive"] } | ||||||
|  |  | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-lang = "1.0.0" | proxmox-lang = "1.0.0" | ||||||
| proxmox-schema = { version = "1.0.1", features = [ "api-macro" ] } | proxmox-schema = { version = "1.0.1", features = [ "api-macro" ] } | ||||||
| proxmox-time = "1.1" | proxmox-time = "1.1" | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ tower-service = "0.3.0" | |||||||
| xdg = "2.2" | xdg = "2.2" | ||||||
|  |  | ||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-fuse = "0.1.1" | proxmox-fuse = "0.1.1" | ||||||
| proxmox-http = { version = "0.5.4", features = [ "client", "http-helpers", "websocket" ] } | proxmox-http = { version = "0.5.4", features = [ "client", "http-helpers", "websocket" ] } | ||||||
| proxmox-io = { version = "1", features = [ "tokio" ] } | proxmox-io = { version = "1", features = [ "tokio" ] } | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ regex = "1.2" | |||||||
| serde = { version = "1.0", features = ["derive"] } | serde = { version = "1.0", features = ["derive"] } | ||||||
| serde_json = "1.0" | serde_json = "1.0" | ||||||
|  |  | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
| proxmox-router = { version = "1.1", default-features = false } | proxmox-router = { version = "1.1", default-features = false } | ||||||
| proxmox-schema = "1" | proxmox-schema = "1" | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ zstd = { version = "0.6", features = [ "bindgen" ] } | |||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| pxar = "0.10.1" | pxar = "0.10.1" | ||||||
|  |  | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-borrow = "1" | proxmox-borrow = "1" | ||||||
| proxmox-io = "1" | proxmox-io = "1" | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ bitflags = "1.2.1" | |||||||
| regex = "1.2" | regex = "1.2" | ||||||
| udev = "0.4" | udev = "0.4" | ||||||
|  |  | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-io = "1" | proxmox-io = "1" | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
| # api-macro is only used by the binaries, so maybe we should split them out | # api-macro is only used by the binaries, so maybe we should split them out | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ url = "2.1" | |||||||
| walkdir = "2" | walkdir = "2" | ||||||
| zstd = { version = "0.6", features = [ "bindgen" ] } | zstd = { version = "0.6", features = [ "bindgen" ] } | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0", default-features = false, features = [ "tokio" ] } | proxmox = { version = "0.15.3", default-features = false, features = [ "tokio" ] } | ||||||
| proxmox-borrow = "1" | proxmox-borrow = "1" | ||||||
| proxmox-io = { version = "1", features = [ "tokio" ] } | proxmox-io = { version = "1", features = [ "tokio" ] } | ||||||
| proxmox-lang = { version = "1" } | proxmox-lang = { version = "1" } | ||||||
|  | |||||||
| @ -1,14 +0,0 @@ | |||||||
| //! Raw file descriptor related utilities. |  | ||||||
|  |  | ||||||
| use std::os::unix::io::RawFd; |  | ||||||
|  |  | ||||||
| use anyhow::Error; |  | ||||||
| use nix::fcntl::{fcntl, FdFlag, F_GETFD, F_SETFD}; |  | ||||||
|  |  | ||||||
| /// Change the `O_CLOEXEC` flag of an existing file descriptor. |  | ||||||
| pub fn fd_change_cloexec(fd: RawFd, on: bool) -> Result<(), Error> { |  | ||||||
|     let mut flags = unsafe { FdFlag::from_bits_unchecked(fcntl(fd, F_GETFD)?) }; |  | ||||||
|     flags.set(FdFlag::FD_CLOEXEC, on); |  | ||||||
|     fcntl(fd, F_SETFD(flags))?; |  | ||||||
|     Ok(()) |  | ||||||
| } |  | ||||||
| @ -7,7 +7,6 @@ pub mod compression; | |||||||
| pub mod crypt; | pub mod crypt; | ||||||
| pub mod crypt_config; | pub mod crypt_config; | ||||||
| pub mod format; | pub mod format; | ||||||
| pub mod fd; |  | ||||||
| pub mod fs; | pub mod fs; | ||||||
| pub mod io; | pub mod io; | ||||||
| pub mod json; | pub mod json; | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ zstd = { version = "0.6", features = [ "bindgen" ] } | |||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| pxar = { version = "0.10.1", features = [ "tokio-io" ] } | pxar = { version = "0.10.1", features = [ "tokio-io" ] } | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0", features = [ "sortable-macro" ] } | proxmox = { version = "0.15.3", features = [ "sortable-macro" ] } | ||||||
| proxmox-router = { version = "1.1", features = [ "cli" ] } | proxmox-router = { version = "1.1", features = [ "cli" ] } | ||||||
| proxmox-schema = { version = "1", features = [ "api-macro" ] } | proxmox-schema = { version = "1", features = [ "api-macro" ] } | ||||||
| proxmox-time = "1" | proxmox-time = "1" | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ tokio = { version = "1.6", features = [ "io-std", "rt", "rt-multi-thread", "time | |||||||
|  |  | ||||||
| pxar = { version = "0.10.1", features = [ "tokio-io" ] } | pxar = { version = "0.10.1", features = [ "tokio-io" ] } | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0" } | proxmox = { version = "0.15.3" } | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
| proxmox-router = { version = "1.1", features = [ "cli" ] } | proxmox-router = { version = "1.1", features = [ "cli" ] } | ||||||
| proxmox-schema = { version = "1", features = [ "api-macro" ] } | proxmox-schema = { version = "1", features = [ "api-macro" ] } | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ use nix::sys::signal::{kill, Signal}; | |||||||
| use nix::unistd::Pid; | use nix::unistd::Pid; | ||||||
|  |  | ||||||
| use proxmox::tools::fs::{create_path, file_read_string, make_tmp_file, CreateOptions}; | use proxmox::tools::fs::{create_path, file_read_string, make_tmp_file, CreateOptions}; | ||||||
|  | use proxmox::tools::fd::fd_change_cloexec; | ||||||
|  |  | ||||||
| use pbs_client::{VsockClient, DEFAULT_VSOCK_PORT}; | use pbs_client::{VsockClient, DEFAULT_VSOCK_PORT}; | ||||||
|  |  | ||||||
| @ -86,7 +87,7 @@ async fn create_temp_initramfs(ticket: &str, debug: bool) -> Result<(File, Strin | |||||||
|     let (tmp_file, tmp_path) = |     let (tmp_file, tmp_path) = | ||||||
|         make_tmp_file("/tmp/file-restore-qemu.initramfs.tmp", CreateOptions::new())?; |         make_tmp_file("/tmp/file-restore-qemu.initramfs.tmp", CreateOptions::new())?; | ||||||
|     nix::unistd::unlink(&tmp_path)?; |     nix::unistd::unlink(&tmp_path)?; | ||||||
|     pbs_tools::fd::fd_change_cloexec(tmp_file.as_raw_fd(), false)?; |     fd_change_cloexec(tmp_file.as_raw_fd(), false)?; | ||||||
|  |  | ||||||
|     let initramfs = if debug { |     let initramfs = if debug { | ||||||
|         pbs_buildcfg::PROXMOX_BACKUP_INITRAMFS_DBG_FN |         pbs_buildcfg::PROXMOX_BACKUP_INITRAMFS_DBG_FN | ||||||
| @ -142,7 +143,7 @@ pub async fn start_vm( | |||||||
|     let pid; |     let pid; | ||||||
|     let (mut pid_file, pid_path) = make_tmp_file("/tmp/file-restore-qemu.pid.tmp", CreateOptions::new())?; |     let (mut pid_file, pid_path) = make_tmp_file("/tmp/file-restore-qemu.pid.tmp", CreateOptions::new())?; | ||||||
|     nix::unistd::unlink(&pid_path)?; |     nix::unistd::unlink(&pid_path)?; | ||||||
|     pbs_tools::fd::fd_change_cloexec(pid_file.as_raw_fd(), false)?; |     fd_change_cloexec(pid_file.as_raw_fd(), false)?; | ||||||
|  |  | ||||||
|     let (_ramfs_pid, ramfs_path) = create_temp_initramfs(ticket, debug).await?; |     let (_ramfs_pid, ramfs_path) = create_temp_initramfs(ticket, debug).await?; | ||||||
|  |  | ||||||
| @ -159,7 +160,7 @@ pub async fn start_vm( | |||||||
|         .append(true) |         .append(true) | ||||||
|         .create_new(true) |         .create_new(true) | ||||||
|         .open(logfile)?; |         .open(logfile)?; | ||||||
|     pbs_tools::fd::fd_change_cloexec(logfd.as_raw_fd(), false)?; |     fd_change_cloexec(logfd.as_raw_fd(), false)?; | ||||||
|  |  | ||||||
|     // preface log file with start timestamp so one can see how long QEMU took to start |     // preface log file with start timestamp so one can see how long QEMU took to start | ||||||
|     writeln!(logfd, "[{}] PBS file restore VM log", { |     writeln!(logfd, "[{}] PBS file restore VM log", { | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ tokio-openssl = "0.6.1" | |||||||
| tower-service = "0.3.0" | tower-service = "0.3.0" | ||||||
| url = "2.1" | url = "2.1" | ||||||
|  |  | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-io = "1" | proxmox-io = "1" | ||||||
| proxmox-lang = "1" | proxmox-lang = "1" | ||||||
| proxmox-http = { version = "0.5.0", features = [ "client" ] } | proxmox-http = { version = "0.5.0", features = [ "client" ] } | ||||||
|  | |||||||
| @ -13,11 +13,9 @@ use anyhow::{bail, format_err, Error}; | |||||||
| use futures::future::{self, Either}; | use futures::future::{self, Either}; | ||||||
| use nix::unistd::{fork, ForkResult}; | use nix::unistd::{fork, ForkResult}; | ||||||
|  |  | ||||||
| use proxmox::tools::fd::Fd; | use proxmox::tools::fd::{fd_change_cloexec, Fd}; | ||||||
| use proxmox_io::{ReadExt, WriteExt}; | use proxmox_io::{ReadExt, WriteExt}; | ||||||
|  |  | ||||||
| use pbs_tools::fd::fd_change_cloexec; |  | ||||||
|  |  | ||||||
| // Unfortunately FnBox is nightly-only and Box<FnOnce> is unusable, so just use Box<Fn>... | // Unfortunately FnBox is nightly-only and Box<FnOnce> is unusable, so just use Box<Fn>... | ||||||
| type BoxedStoreFunc = Box<dyn FnMut() -> Result<String, Error> + UnwindSafe + Send>; | type BoxedStoreFunc = Box<dyn FnMut() -> Result<String, Error> + UnwindSafe + Send>; | ||||||
|  |  | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ tokio-util = { version = "0.6", features = [ "codec", "io" ] } | |||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| pxar = { version = "0.10.1", features = [ "tokio-io" ] } | pxar = { version = "0.10.1", features = [ "tokio-io" ] } | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0", features = [ "sortable-macro" ] } | proxmox = { version = "0.15.3", features = [ "sortable-macro" ] } | ||||||
| proxmox-router = { version = "1.1", features = [ "cli" ] } | proxmox-router = { version = "1.1", features = [ "cli" ] } | ||||||
| proxmox-schema = { version = "1", features = [ "api-macro" ] } | proxmox-schema = { version = "1", features = [ "api-macro" ] } | ||||||
| proxmox-time = "1" | proxmox-time = "1" | ||||||
|  | |||||||
| @ -19,6 +19,6 @@ serde = { version = "1.0", features = ["derive"] } | |||||||
| serde_json = "1.0" | serde_json = "1.0" | ||||||
| serde_cbor = "0.11.1" | serde_cbor = "0.11.1" | ||||||
|  |  | ||||||
| proxmox = { version = "0.15.0" } | proxmox = { version = "0.15.3" } | ||||||
| proxmox-time = "1" | proxmox-time = "1" | ||||||
| proxmox-schema = { version = "1", features = [ "api-macro" ] } | proxmox-schema = { version = "1", features = [ "api-macro" ] } | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ serde_json = "1.0" | |||||||
| tokio = { version = "1.6", features = [ "rt", "rt-multi-thread" ] } | tokio = { version = "1.6", features = [ "rt", "rt-multi-thread" ] } | ||||||
|  |  | ||||||
| pathpatterns = "0.1.2" | pathpatterns = "0.1.2" | ||||||
| proxmox = "0.15.0" | proxmox = "0.15.3" | ||||||
| proxmox-schema = { version = "1", features = [ "api-macro" ] } | proxmox-schema = { version = "1", features = [ "api-macro" ] } | ||||||
| proxmox-router = "1.1" | proxmox-router = "1.1" | ||||||
| pxar = { version = "0.10.1", features = [ "tokio-io" ] } | pxar = { version = "0.10.1", features = [ "tokio-io" ] } | ||||||
|  | |||||||
| @ -13,6 +13,8 @@ use serde_json::{json, Value}; | |||||||
| use tokio::io::{AsyncBufReadExt, BufReader}; | use tokio::io::{AsyncBufReadExt, BufReader}; | ||||||
|  |  | ||||||
| use proxmox::{identity, sortable}; | use proxmox::{identity, sortable}; | ||||||
|  | use proxmox::tools::fd::fd_change_cloexec; | ||||||
|  |  | ||||||
| use proxmox_router::{ | use proxmox_router::{ | ||||||
|     ApiHandler, ApiMethod, ApiResponseFuture, Permission, RpcEnvironment, Router, SubdirMap, |     ApiHandler, ApiMethod, ApiResponseFuture, Permission, RpcEnvironment, Router, SubdirMap, | ||||||
| }; | }; | ||||||
| @ -152,7 +154,7 @@ async fn termproxy(cmd: Option<String>, rpcenv: &mut dyn RpcEnvironment) -> Resu | |||||||
|         move |worker| async move { |         move |worker| async move { | ||||||
|             // move inside the worker so that it survives and does not close the port |             // move inside the worker so that it survives and does not close the port | ||||||
|             // remove CLOEXEC from listenere so that we can reuse it in termproxy |             // remove CLOEXEC from listenere so that we can reuse it in termproxy | ||||||
|             pbs_tools::fd::fd_change_cloexec(listener.as_raw_fd(), false)?; |             fd_change_cloexec(listener.as_raw_fd(), false)?; | ||||||
|  |  | ||||||
|             let mut arguments: Vec<&str> = Vec::new(); |             let mut arguments: Vec<&str> = Vec::new(); | ||||||
|             let fd_string = listener.as_raw_fd().to_string(); |             let fd_string = listener.as_raw_fd().to_string(); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user