CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
posix.cc File Reference
#include "posix.h"
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
#include <inttypes.h>
#include <netinet/in.h>
#include <pthread.h>
#include <pwd.h>
#include <signal.h>
#include <stdint.h>
#include <sys/resource.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/statfs.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/utsname.h>
#include <sys/wait.h>
#include <unistd.h>
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <map>
#include <set>
#include <string>
#include <vector>
#include "util/algorithm.h"
#include "util/concurrency.h"
#include "util/exception.h"
#include "util/fs_traversal.h"
#include "util/logging.h"
#include "util/pipe.h"
#include "util/platform.h"
#include "util/string.h"
Include dependency graph for posix.cc:

Go to the source code of this file.

Classes

class  RemoveTreeHelper
 
struct  ForkFailures
 

Macros

#define __STDC_FORMAT_MACROS
 
#define ST_RDONLY   1
 
#define CVMFS_HAS_STATFS_F_FLAGS
 

Functions

std::string MakeCanonicalPath (const std::string &path)
 
void SplitPath (const std::string &path, std::string *dirname, std::string *filename)
 
std::string GetParentPath (const std::string &path)
 
std::string GetFileName (const std::string &path)
 
bool IsAbsolutePath (const std::string &path)
 
std::string GetAbsolutePath (const std::string &path)
 
bool IsHttpUrl (const std::string &path)
 
FileSystemInfo GetFileSystemInfo (const std::string &path)
 
std::string ReadSymlink (const std::string &path)
 
std::string ResolvePath (const std::string &path)
 
bool IsMountPoint (const std::string &path)
 
void CreateFile (const std::string &path, const int mode, const bool ignore_failure)
 
static std::string MakeShortSocketLink (const std::string &path)
 
static void RemoveShortSocketLink (const std::string &short_path)
 
int MakeSocket (const std::string &path, const int mode)
 
int MakeTcpEndpoint (const std::string &ipv4_address, int portno)
 
int ConnectSocket (const std::string &path)
 
int ConnectTcpEndpoint (const std::string &ipv4_address, int portno)
 
void MakePipe (int pipe_fd[2])
 
void WritePipe (int fd, const void *buf, size_t nbyte)
 
void ReadPipe (int fd, void *buf, size_t nbyte)
 
bool ReadHalfPipe (int fd, void *buf, size_t nbyte, unsigned timeout_ms)
 
void ClosePipe (int pipe_fd[2])
 
bool DiffTree (const std::string &path_a, const std::string &path_b)
 
void Nonblock2Block (int filedes)
 
void Block2Nonblock (int filedes)
 
void SendMsg2Socket (const int fd, const std::string &msg)
 
bool SendFd2Socket (int socket_fd, int passing_fd)
 
int RecvFdFromSocket (int msg_fd)
 
std::string GetHostname ()
 
bool SwitchCredentials (const uid_t uid, const gid_t gid, const bool temporarily)
 
bool FileExists (const std::string &path)
 
int64_t GetFileSize (const std::string &path)
 
bool DirectoryExists (const std::string &path)
 
bool SymlinkExists (const std::string &path)
 
bool SymlinkForced (const std::string &src, const std::string &dest)
 
bool MkdirDeep (const std::string &path, const mode_t mode, bool verify_writable)
 
bool MakeCacheDirectories (const std::string &path, const mode_t mode)
 
int TryLockFile (const std::string &path)
 
int WritePidFile (const std::string &path)
 
int LockFile (const std::string &path)
 
void UnlockFile (const int filedes)
 
FILE * CreateTempFile (const std::string &path_prefix, const int mode, const char *open_flags, std::string *final_path)
 
std::string CreateTempPath (const std::string &path_prefix, const int mode)
 
std::string CreateTempDir (const std::string &path_prefix)
 
std::string GetCurrentWorkingDirectory ()
 
bool RemoveTree (const std::string &path)
 
std::vector< std::string > FindFilesBySuffix (const std::string &dir, const std::string &suffix)
 
std::vector< std::string > FindFilesByPrefix (const std::string &dir, const std::string &prefix)
 
std::vector< std::string > FindDirectories (const std::string &parent_dir)
 
bool ListDirectory (const std::string &directory, std::vector< std::string > *names, std::vector< mode_t > *modes)
 
std::string FindExecutable (const std::string &exe)
 
std::string GetUserName ()
 
std::string GetShell ()
 
bool GetUserNameOf (uid_t uid, std::string *username)
 
bool GetUidOf (const std::string &username, uid_t *uid, gid_t *main_gid)
 
bool GetGidOf (const std::string &groupname, gid_t *gid)
 
mode_t GetUmask ()
 
bool AddGroup2Persona (const gid_t gid)
 
std::string GetHomeDirectory ()
 
std::string GetArch ()
 
int SetLimitNoFile (unsigned limit_nofile)
 
void GetLimitNoFile (unsigned *soft_limit, unsigned *hard_limit)
 
std::vector< LsofEntryLsof (const std::string &path)
 
bool ProcessExists (pid_t pid)
 
void BlockSignal (int signum)
 
void WaitForSignal (int signum)
 
int WaitForChild (pid_t pid, const std::vector< int > &sig_ok)
 
bool ExecAsDaemon (const std::vector< std::string > &command_line, pid_t *child_pid)
 
void Daemonize ()
 
bool ExecuteBinary (int *fd_stdin, int *fd_stdout, int *fd_stderr, const std::string &binary_path, const std::vector< std::string > &argv, const bool double_fork, pid_t *child_pid)
 
bool Shell (int *fd_stdin, int *fd_stdout, int *fd_stderr)
 
static bool CloseAllFildesUntilMaxFD (const std::set< int > &preserve_fildes, int max_fd)
 
static bool CloseAllFildesInProcSelfFd (const std::set< int > &preserve_fildes)
 
bool CloseAllFildes (const std::set< int > &preserve_fildes)
 
bool ManagedExec (const std::vector< std::string > &command_line, const std::set< int > &preserve_fildes, const std::map< int, int > &map_fildes, const bool drop_credentials, const bool clear_env, const bool double_fork, pid_t *child_pid)
 
void SafeSleepMs (const unsigned ms)
 
bool SafeWrite (int fd, const void *buf, size_t nbyte)
 
bool SafeWriteV (int fd, struct iovec *iov, unsigned iovcnt)
 
ssize_t SafeRead (int fd, void *buf, size_t nbyte)
 
bool SafeReadToString (int fd, std::string *final_result)
 
bool SafeWriteToFile (const std::string &content, const std::string &path, int mode)
 

Variables

static pthread_mutex_t getumask_mutex = PTHREAD_MUTEX_INITIALIZER
 

Macro Definition Documentation

#define __STDC_FORMAT_MACROS

This file is part of the CernVM File System.

Some common functions.

Definition at line 9 of file posix.cc.

#define CVMFS_HAS_STATFS_F_FLAGS

Definition at line 72 of file posix.cc.

#define ST_RDONLY   1

Definition at line 68 of file posix.cc.

Referenced by GetFileSystemInfo().

Function Documentation

bool AddGroup2Persona ( const gid_t  gid)

Adds gid to the list of supplementary groups

Definition at line 1399 of file posix.cc.

Referenced by main().

Here is the caller graph for this function:

void Block2Nonblock ( int  filedes)

Changes a blocking file descriptor to a non-blocking one.

Definition at line 659 of file posix.cc.

Referenced by Watchdog::GenerateStackTrace(), and PosixQuotaManager::MainCommandServer().

Here is the call graph for this function:

Here is the caller graph for this function:

void BlockSignal ( int  signum)

Blocks a signal for the calling thread.

Definition at line 1571 of file posix.cc.

Referenced by FuseMain().

Here is the call graph for this function:

Here is the caller graph for this function:

bool CloseAllFildes ( const std::set< int > &  preserve_fildes)

Closes all file descriptors except the ones in preserve_fildes. To be used after fork but before exec.

Definition at line 1864 of file posix.cc.

Referenced by PosixQuotaManager::EmptyTrash(), Watchdog::Fork(), and ManagedExec().

Here is the call graph for this function:

Here is the caller graph for this function:

static bool CloseAllFildesInProcSelfFd ( const std::set< int > &  preserve_fildes)
static

Loop through /proc/self/fd and close the listed FDs. Not used on macOS.

Definition at line 1830 of file posix.cc.

Referenced by CloseAllFildes().

Here is the call graph for this function:

Here is the caller graph for this function:

static bool CloseAllFildesUntilMaxFD ( const std::set< int > &  preserve_fildes,
int  max_fd 
)
static

Loop through all possible FDs and close them.

Definition at line 1814 of file posix.cc.

Referenced by CloseAllFildes().

Here is the caller graph for this function:

int ConnectSocket ( const std::string &  path)

Connects to a named socket.

Returns
socket file descriptor on success, -1 else

Definition at line 422 of file posix.cc.

Referenced by CheckConcurrentMount(), ExternalCacheManager::ConnectLocator(), GetExistingFuseFd(), loader::loader_talk::MainReload(), SendCommand(), cvmfs::SendFuseFd(), and publish::SendTalkCommand().

Here is the call graph for this function:

Here is the caller graph for this function:

int ConnectTcpEndpoint ( const std::string &  ipv4_address,
int  portno 
)

Connects to a (remote) TCP server

Definition at line 456 of file posix.cc.

Referenced by ExternalCacheManager::ConnectLocator().

Here is the call graph for this function:

Here is the caller graph for this function:

void CreateFile ( const std::string &  path,
const int  mode,
const bool  ignore_failure 
)

By default PANIC(NULL) on failure

Definition at line 278 of file posix.cc.

Referenced by publish::CmdEnter::CreateUnderlay(), FuseMain(), loader::Reload(), FileSystem::SetupNfsMaps(), and FileSystem::SetupPosixCacheMgr().

Here is the caller graph for this function:

std::string CreateTempDir ( const std::string &  path_prefix)

Create a directory with a unique name.

Definition at line 1055 of file posix.cc.

Referenced by publish::ClearScratch(), GetExistingFuseFd(), publish::CmdEnter::Main(), and MakeShortSocketLink().

Here is the caller graph for this function:

void Daemonize ( )

Makes a daemon. The daemon() call is deprecated on OS X

Definition at line 1685 of file posix.cc.

Referenced by Watchdog::Fork(), FuseMain(), and PosixQuotaManager::MainCacheManager().

Here is the call graph for this function:

Here is the caller graph for this function:

bool DiffTree ( const std::string &  path_a,
const std::string &  path_b 
)

Compares two directory trees on the meta-data level. Returns true iff the trees have identical content.

Definition at line 569 of file posix.cc.

Referenced by DiffTree().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ExecAsDaemon ( const std::vector< std::string > &  command_line,
pid_t *  child_pid 
)

Exec a command as a daemon.

Definition at line 1627 of file posix.cc.

Referenced by PosixQuotaManager::CreateShared().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ExecuteBinary ( int *  fd_stdin,
int *  fd_stdout,
int *  fd_stderr,
const std::string &  binary_path,
const std::vector< std::string > &  argv,
const bool  double_fork,
pid_t *  child_pid 
)

Definition at line 1716 of file posix.cc.

Referenced by Watchdog::GenerateStackTrace(), main(), and Shell().

Here is the call graph for this function:

Here is the caller graph for this function:

bool FileExists ( const std::string &  path)

Checks if the regular file path exists.

Definition at line 803 of file posix.cc.

Referenced by publish::CallServerHook(), MountPoint::CheckBlacklists(), swissknife::CommandApplyDirtab::CreateCatalogMarkers(), publish::CheckoutMarker::CreateFrom(), publish::SettingsBuilder::CreateSettingsPublisher(), PosixQuotaManager::CreateShared(), swissknife::CommandInfo::Exists(), swissknife::CommandCheck::Exists(), LocalObjectFetcher< CatalogT, HistoryT, ReflogT >::Fetch(), LocalObjectFetcher< CatalogT, HistoryT, ReflogT >::FetchManifest(), swissknife::CommandApplyDirtab::FilterCandidatesFromGlobResult(), AuthzExternalFetcher::FindHelper(), GetCvmfsBinary(), publish::SettingsKeychain::HasDanglingMasterKeys(), publish::SettingsKeychain::HasDanglingRepositoryKeys(), publish::SettingsKeychain::HasGatewayKey(), publish::SettingsKeychain::HasMasterKeys(), publish::SettingsKeychain::HasRepositoryKeys(), PosixCacheManager::InitCacheDirectory(), swissknife::CommandTag::InitializeEnvironment(), InitializeGarbageCollection(), download::Interrupted(), publish::SyncUnionAufs::IsOpaqueDirectory(), publish::ServerFlagFile::IsSet(), catalog::SimpleCatalogManager::LoadCatalogByHash(), publish::CmdEnter::Main(), swissknife::CommandApplyDirtab::Main(), PosixQuotaManager::MainCacheManager(), PosixQuotaManager::MainCommandServer(), SpecTree::Open(), catalog::Dirtab::Open(), StatisticsDatabase::OpenStandardDB(), upload::S3Uploader::ParseSpoolerDefinition(), upload::LocalUploader::Peek(), swissknife::Peek(), posix_cleanup_path(), posix_do_link(), posix_has_file(), publish::Publisher(), MountPoint::ReloadBlacklists(), FileSystem::SetupNfsMaps(), SslCertificateStore::UseSystemCertificatePath(), and WaitForReload().

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector<std::string> FindDirectories ( const std::string &  parent_dir)

Finds all direct subdirectories under parent_dir (except ., ..). Used, for instance, to parse /etc/cvmfs/repositories.d/<reponoame>

Definition at line 1178 of file posix.cc.

Referenced by publish::SettingsBuilder::GetSingleAlias().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string FindExecutable ( const std::string &  exe)

Looks whether exe is an executable file. If exe is not an absolute path, searches the PATH environment.

Definition at line 1242 of file posix.cc.

Referenced by publish::CmdEnter::MountCvmfs(), and publish::CmdEnter::MountOverlayfs().

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector<std::string> FindFilesByPrefix ( const std::string &  dir,
const std::string &  prefix 
)

Returns ls $dir/$prefixGLOB

Definition at line 1153 of file posix.cc.

Here is the call graph for this function:

std::vector<std::string> FindFilesBySuffix ( const std::string &  dir,
const std::string &  suffix 
)
std::string GetAbsolutePath ( const std::string &  path)

Definition at line 159 of file posix.cc.

Referenced by publish::SyncUnionTarball::Initialize(), and swissknife::CommandFileStats::Run().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string GetArch ( )

Returns the output of uname -m

Definition at line 1444 of file posix.cc.

Referenced by FileSystem::SetupGlobalEnvironmentParams().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string GetCurrentWorkingDirectory ( )

Get the current working directory of the running process

Definition at line 1068 of file posix.cc.

Referenced by CreateMountNamespace(), GetAbsolutePath(), publish::CmdAbort::Main(), publish::CmdEnter::Main(), and Spawn().

Here is the caller graph for this function:

std::string GetFileName ( const std::string &  path)

Gets the file name part of a path.

Definition at line 144 of file posix.cc.

FileSystemInfo GetFileSystemInfo ( const std::string &  path)

Definition at line 179 of file posix.cc.

Referenced by PosixCacheManager::InitCacheDirectory(), publish::CmdCommit::Main(), and publish::CmdTransaction::Main().

Here is the caller graph for this function:

bool GetGidOf ( const std::string &  groupname,
gid_t *  gid 
)

Name -> GID from groups database

Definition at line 1365 of file posix.cc.

Referenced by acl_entry_from_text(), and main().

Here is the caller graph for this function:

std::string GetHomeDirectory ( )

Definition at line 1422 of file posix.cc.

Referenced by publish::CmdEnter::Main().

Here is the caller graph for this function:

std::string GetHostname ( )

Definition at line 762 of file posix.cc.

Referenced by MakeAcquireRequest(), and anonymous_namespace{repository_session.cc}::MakeAcquireRequest().

Here is the call graph for this function:

Here is the caller graph for this function:

void GetLimitNoFile ( unsigned *  soft_limit,
unsigned *  hard_limit 
)

Get the file descriptor limits

Definition at line 1478 of file posix.cc.

Referenced by CheckMaxOpenFiles(), MountPoint::CreateCatalogManager(), and FuseMain().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string GetParentPath ( const std::string &  path)

Gets the directory part of a path.

Definition at line 131 of file posix.cc.

std::string GetShell ( )

Definition at line 1298 of file posix.cc.

Referenced by publish::CmdEnter::Main().

Here is the caller graph for this function:

bool GetUidOf ( const std::string &  username,
uid_t *  uid,
gid_t *  main_gid 
)

Name -> UID from passwd database

Definition at line 1342 of file posix.cc.

Referenced by acl_entry_from_text(), main(), publish::SettingsPublisher::SetOwner(), and MountPoint::SetupBehavior().

Here is the caller graph for this function:

mode_t GetUmask ( )

read the current umask of this process Note: umask query is guarded by a global mutex. Hence, always use this function and beware of scalability bottlenecks

Definition at line 1388 of file posix.cc.

std::string GetUserName ( )

Definition at line 1280 of file posix.cc.

Referenced by publish::CmdMkfs::Main().

Here is the caller graph for this function:

bool GetUserNameOf ( uid_t  uid,
std::string *  username 
)

UID -> Name from passwd database

Definition at line 1319 of file posix.cc.

Referenced by publish::CmdAbort::Main().

Here is the caller graph for this function:

bool IsAbsolutePath ( const std::string &  path)

Definition at line 154 of file posix.cc.

Referenced by GetAbsolutePath().

Here is the caller graph for this function:

bool IsMountPoint ( const std::string &  path)

Definition at line 264 of file posix.cc.

Referenced by main().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ListDirectory ( const std::string &  directory,
std::vector< std::string > *  names,
std::vector< mode_t > *  modes 
)

Finds all files and direct subdirectories under directory (except ., ..).

Definition at line 1207 of file posix.cc.

Referenced by publish::ClearScratch(), publish::CmdEnter::CreateUnderlay(), and Lsof().

Here is the call graph for this function:

Here is the caller graph for this function:

int LockFile ( const std::string &  path)

Locks file path, blocks if file is already locked. Creates path if required.

Returns
file descriptor, -1 on error

Definition at line 980 of file posix.cc.

Referenced by CheckConcurrentMount(), PosixQuotaManager::CreateShared(), PosixQuotaManager::InitDatabase(), FileSystem::LockWorkspace(), and PosixQuotaManager::MainCacheManager().

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector<LsofEntry> Lsof ( const std::string &  path)

Searches for open file descriptors on the subtree starting at path. For the time being works only on Linux, not on macOS.

Definition at line 1497 of file posix.cc.

Referenced by publish::CmdLsof::Main(), and publish::CmdAbort::Main().

Here is the call graph for this function:

Here is the caller graph for this function:

bool MakeCacheDirectories ( const std::string &  path,
const mode_t  mode 
)

Creates the "hash cache" directory structure in path.

Definition at line 890 of file posix.cc.

Referenced by upload::LocalUploader::Create(), FuseMain(), PosixCacheManager::InitCacheDirectory(), main(), and catalog::SimpleCatalogManager::SimpleCatalogManager().

Here is the call graph for this function:

Here is the caller graph for this function:

static std::string MakeShortSocketLink ( const std::string &  path)
static

Symlinks /tmp/cvmfs.XYZ/l –> ParentPath(path) to make it shorter

Definition at line 295 of file posix.cc.

Referenced by ConnectSocket(), and MakeSocket().

Here is the call graph for this function:

Here is the caller graph for this function:

int MakeSocket ( const std::string &  path,
const int  mode 
)

Creates and binds to a named socket.

Definition at line 327 of file posix.cc.

Referenced by TalkManager::Create(), GetExistingFuseFd(), loader::loader_talk::Init(), and CachePlugin::Listen().

Here is the call graph for this function:

Here is the caller graph for this function:

int MakeTcpEndpoint ( const std::string &  ipv4_address,
int  portno 
)

Creates and binds a TCP/IPv4 socket. An empty address binds to the "any" address.

Definition at line 384 of file posix.cc.

Referenced by CachePlugin::Listen().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ManagedExec ( const std::vector< std::string > &  command_line,
const std::set< int > &  preserve_fildes,
const std::map< int, int > &  map_fildes,
const bool  drop_credentials,
const bool  clear_env,
const bool  double_fork,
pid_t *  child_pid 
)

Execve to the given command line, preserving the given file descriptors. If stdin, stdout, stderr should be preserved, add 0, 1, 2. File descriptors from the parent process can also be mapped to the new process (dup2) using map_fildes. Can be useful for stdout/in/err redirection. NOTE: The destination fildes have to be preserved! Does a double fork to detach child. The command_line parameter contains the binary at index 0 and the arguments in the rest of the vector. Using the optional parameter *pid it is possible to retrieve the process ID of the spawned process.

Definition at line 1896 of file posix.cc.

Referenced by publish::CallServerHook(), PosixQuotaManager::CreateShared(), ExecuteBinary(), publish::CmdEnter::Main(), publish::CmdEnter::MountCvmfs(), publish::CmdEnter::MountOverlayfs(), publish::RunSuidHelper(), and ExternalCacheManager::SpawnPlugin().

Here is the call graph for this function:

Here is the caller graph for this function:

void Nonblock2Block ( int  filedes)

Changes a non-blocking file descriptor to a blocking one.

Definition at line 648 of file posix.cc.

Referenced by PosixQuotaManager::BindReturnPipe(), PosixQuotaManager::CreateShared(), PosixQuotaManager::MainCacheManager(), and PosixQuotaManager::MakeReturnPipe().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ProcessExists ( pid_t  pid)

Definition at line 1559 of file posix.cc.

Referenced by publish::CmdEnter::CleanupSession().

Here is the call graph for this function:

Here is the caller graph for this function:

bool ReadHalfPipe ( int  fd,
void *  buf,
size_t  nbyte,
unsigned  timeout_ms 
)

Reads from a pipe where writer's end is not yet necessarily connected

Definition at line 520 of file posix.cc.

Referenced by PosixQuotaManager::GetPid(), PosixQuotaManager::ManagedReadHalfPipe(), PosixQuotaManager::SetSharedLimit(), and file_watcher::FileWatcher::Spawn().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string ReadSymlink ( const std::string &  path)

Definition at line 221 of file posix.cc.

Referenced by Lsof().

Here is the caller graph for this function:

int RecvFdFromSocket ( int  msg_fd)

Returns the file descriptor that has been sent with SendFd2Socket. The msg_fd file descriptor needs to come from a call to accept() on the socket where the passing file descriptor has been sent to. Returns -errno on error.

Definition at line 720 of file posix.cc.

Referenced by GetExistingFuseFd().

Here is the call graph for this function:

Here is the caller graph for this function:

static void RemoveShortSocketLink ( const std::string &  short_path)
static

Definition at line 317 of file posix.cc.

Referenced by ConnectSocket(), and MakeSocket().

Here is the call graph for this function:

Here is the caller graph for this function:

bool RemoveTree ( const std::string &  path)

Does rm -rf on path.

Definition at line 1101 of file posix.cc.

Referenced by publish::CmdEnter::CleanupSession(), NfsMapsLeveldb::Create(), and RaiiTempDir::~RaiiTempDir().

Here is the call graph for this function:

Here is the caller graph for this function:

std::string ResolvePath ( const std::string &  path)

Follow all symlinks if possible. Equivalent to readlink --canonicalize-missing

Definition at line 237 of file posix.cc.

Here is the call graph for this function:

ssize_t SafeRead ( int  fd,
void *  buf,
size_t  nbyte 
)
bool SafeReadToString ( int  fd,
std::string *  final_result 
)

Pull file contents into a string

Definition at line 2117 of file posix.cc.

Referenced by publish::SyncMediator::Add(), notify::DoPublish(), publish::ExitShell(), signature::SignatureManager::LoadBlacklist(), swissknife::Ingest::Main(), publish::CmdEnter::Main(), swissknife::CommandSync::Main(), gateway::ReadKeys(), and download::ResolveProxyDescription().

Here is the call graph for this function:

Here is the caller graph for this function:

bool SafeWrite ( int  fd,
const void *  buf,
size_t  nbyte 
)
bool SafeWriteToFile ( const std::string &  content,
const std::string &  path,
int  mode 
)
bool SafeWriteV ( int  fd,
struct iovec *  iov,
unsigned  iovcnt 
)

The contents of the iov vector might be modified by the function.

Definition at line 2054 of file posix.cc.

Referenced by CacheTransport::SendData().

Here is the call graph for this function:

Here is the caller graph for this function:

bool SendFd2Socket ( int  socket_fd,
int  passing_fd 
)

Sends the file descriptor passing_fd to the socket socket_fd. Can be used to transfer an open file descriptor from one process to another. Use ConnectSocket() to get the socket_fd.

Definition at line 680 of file posix.cc.

Referenced by cvmfs::SendFuseFd().

Here is the caller graph for this function:

void SendMsg2Socket ( const int  fd,
const std::string &  msg 
)

Drops the characters of string to a socket. It doesn't matter if the other side has hung up.

Definition at line 671 of file posix.cc.

Referenced by CheckConcurrentMount(), FreeSavedState(), CacheManager::FreeState(), GetExistingFuseFd(), loader::loader_talk::MainTalk(), MaintenanceMode(), loader::Reload(), CacheManager::RestoreState(), RestoreState(), CacheManager::SaveState(), and SaveState().

Here is the caller graph for this function:

int SetLimitNoFile ( unsigned  limit_nofile)

Sets soft and hard limit for maximum number of open file descriptors. Returns 0 on success, -1 on failure, -2 if running under valgrind.

Definition at line 1456 of file posix.cc.

Referenced by FuseMain(), and LibGlobals::Initialize().

Here is the caller graph for this function:

bool Shell ( int *  fd_stdin,
int *  fd_stdout,
int *  fd_stderr 
)

Opens /bin/sh and provides file descriptors to write into stdin and read from stdout. Quit shell simply by closing stderr, stdout, and stdin.

Definition at line 1769 of file posix.cc.

Referenced by BashOptionsManager::ParsePath().

Here is the call graph for this function:

Here is the caller graph for this function:

void SplitPath ( const std::string &  path,
std::string *  dirname,
std::string *  filename 
)

Return both the file and directory name for a given path.

NOTE: If only a filename is given, the directory is returned as "."

Definition at line 114 of file posix.cc.

Referenced by catalog::WritableCatalogManager::Clone(), publish::SyncUnionTarball::CreateDirectories(), publish::SyncUnionTarball::ProcessArchiveEntry(), swissknife::CommandGraft::Publish(), and publish::SyncUnionTarball::Traverse().

Here is the caller graph for this function:

bool SwitchCredentials ( const uid_t  uid,
const gid_t  gid,
const bool  temporarily 
)

set(e){g/u}id wrapper.

Definition at line 773 of file posix.cc.

Referenced by FuseMain(), Watchdog::GenerateStackTrace(), publish::CmdAbort::Main(), publish::CmdCommit::Main(), publish::CmdTransaction::Main(), ManagedExec(), SwitchCredentials(), and auto_umount::UmountOnCrash().

Here is the call graph for this function:

Here is the caller graph for this function:

bool SymlinkExists ( const std::string &  path)

Checks if the symlink file path exists.

Definition at line 833 of file posix.cc.

Referenced by CheckNamespaceFeatures(), swissknife::CommandCheck::Exists(), GetCvmfsBinary(), posix_cleanup_path(), ResolvePath(), and SslCertificateStore::UseSystemCertificatePath().

Here is the call graph for this function:

Here is the caller graph for this function:

bool SymlinkForced ( const std::string &  src,
const std::string &  dest 
)

Equivalent of ln -sf $src $dest

Definition at line 842 of file posix.cc.

Referenced by publish::CmdEnter::CreateUnderlay(), publish::CmdEnter::Main(), and upload::LocalUploader::PlaceBootstrappingShortcut().

Here is the caller graph for this function:

int TryLockFile ( const std::string &  path)

Tries to locks file path, return an error if file is already locked. Creates path if required.

Returns
file descriptor, -1 on error, -2 if it would block

Definition at line 922 of file posix.cc.

Referenced by CachePlugin::Listen(), FileSystem::LockWorkspace(), and publish::ServerLockFile::TryLock().

Here is the caller graph for this function:

void UnlockFile ( const int  filedes)
int WaitForChild ( pid_t  pid,
const std::vector< int > &  sig_ok 
)

Returns -1 if the child crashed or the exit code otherwise.

Parameters
pidProcess identifier.
sig_okList of signals that are still considered a successful termination.

Definition at line 1601 of file posix.cc.

Referenced by publish::CallServerHook(), publish::CmdEnter::Main(), publish::CmdEnter::MountCvmfs(), publish::CmdEnter::MountOverlayfs(), and publish::RunSuidHelper().

Here is the call graph for this function:

Here is the caller graph for this function:

void WaitForSignal ( int  signum)

Waits for a signal. The signal should be blocked before for all threads. Threads inherit their parent's signal mask.

Definition at line 1586 of file posix.cc.

Referenced by loader::Reload().

Here is the call graph for this function:

Here is the caller graph for this function:

int WritePidFile ( const std::string &  path)

Tries to write the process id in a /var/run/progname.pid like file. Returns the same as TryLockFile.

Returns
file descriptor, -1 on error, -2 if it would block

Definition at line 944 of file posix.cc.

Here is the call graph for this function:

void WritePipe ( int  fd,
const void *  buf,
size_t  nbyte 
)

Writes to a pipe should always succeed.

Definition at line 496 of file posix.cc.

Referenced by CachePlugin::AskToDetach(), publish::CallServerHook(), PosixQuotaManager::Cleanup(), PosixQuotaManager::DoInsert(), PosixQuotaManager::DoList(), PosixQuotaManager::GetCleanupRate(), PosixQuotaManager::GetLimits(), PosixQuotaManager::GetPid(), PosixQuotaManager::GetProtocolRevision(), PosixQuotaManager::GetSharedStatus(), shrinkwrap::handle_file(), swissknife::CommandPull::Main(), PosixQuotaManager::MainCacheManager(), PosixQuotaManager::MainCommandServer(), loader::loader_talk::MainReload(), CachePlugin::NotifySupervisor(), upload::S3Uploader::OnReqComplete(), BashOptionsManager::ParsePath(), PosixQuotaManager::Pin(), swissknife::CommandPull::Pull(), s3fanout::S3FanoutManager::PushCompletedJob(), s3fanout::S3FanoutManager::PushNewJob(), PosixQuotaManager::RegisterBackChannel(), PosixQuotaManager::Remove(), file_watcher::FileWatcherInotify::RunEventLoop(), SendCommand(), publish::SendTalkCommand(), FuseRemounter::SetAlarm(), PosixQuotaManager::SetSharedLimit(), cvmfs::Fetcher::SignalWaitingThreads(), file_watcher::FileWatcher::Stop(), shrinkwrap::SyncInit(), CachePlugin::Terminate(), PosixQuotaManager::Touch(), PosixQuotaManager::Unpin(), PosixQuotaManager::UnregisterBackChannel(), quota::UnregisterListener(), Pipe< kPipeWatchdog >::Write(), glue::DentryTracker::~DentryTracker(), FuseRemounter::~FuseRemounter(), PosixQuotaManager::~PosixQuotaManager(), s3fanout::S3FanoutManager::~S3FanoutManager(), and perf::TelemetryAggregator::~TelemetryAggregator().

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

pthread_mutex_t getumask_mutex = PTHREAD_MUTEX_INITIALIZER
static

Definition at line 92 of file posix.cc.

Referenced by GetUmask().