1 use std
::os
::unix
::io
::RawFd
;
3 use anyhow
::{bail, format_err, Error}
;
5 use proxmox
::tools
::fd
::Fd
;
10 pub use environment
::*;
16 pub use command_socket
::*;
19 pub use file_logger
::{FileLogger, FileLogOptions}
;
22 pub use api_config
::ApiConfig
;
29 impl From
<Error
> for AuthError
{
30 fn from(err
: Error
) -> Self {
31 AuthError
::Generic(err
)
38 headers
: &http
::HeaderMap
,
39 method
: &hyper
::Method
,
40 ) -> Result
<String
, AuthError
>;
43 static mut SHUTDOWN_REQUESTED
: bool
= false;
45 pub fn request_shutdown() {
47 SHUTDOWN_REQUESTED
= true;
49 crate::server_shutdown();
53 pub fn shutdown_requested() -> bool
{
54 unsafe { SHUTDOWN_REQUESTED }
57 pub fn fail_on_shutdown() -> Result
<(), Error
> {
58 if shutdown_requested() {
59 bail
!("Server shutdown requested - aborting task");
64 /// Helper to set/clear the FD_CLOEXEC flag on file descriptors
65 pub fn fd_change_cloexec(fd
: RawFd
, on
: bool
) -> Result
<(), Error
> {
66 use nix
::fcntl
::{fcntl, FdFlag, F_GETFD, F_SETFD}
;
67 let mut flags
= FdFlag
::from_bits(fcntl(fd
, F_GETFD
)?
)
68 .ok_or_else(|| format_err
!("unhandled file flags"))?
; // nix crate is stupid this way...
69 flags
.set(FdFlag
::FD_CLOEXEC
, on
);
70 fcntl(fd
, F_SETFD(flags
))?
;
74 /// safe wrapper for `nix::sys::socket::socketpair` defaulting to `O_CLOEXEC` and guarding the file
76 pub fn socketpair() -> Result
<(Fd
, Fd
), Error
> {
78 let (pa
, pb
) = socket
::socketpair(
79 socket
::AddressFamily
::Unix
,
80 socket
::SockType
::Stream
,
82 socket
::SockFlag
::SOCK_CLOEXEC
,