chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core/load-fragment: safe_close() protects errno
[elogind.git]
/
src
/
core
/
execute.c
diff --git
a/src/core/execute.c
b/src/core/execute.c
index 874cdc7efee2730e12c09063920cc54b10c3ec3c..39ec5adbbe44f2783691945a7816c0dd0f393424 100644
(file)
--- a/
src/core/execute.c
+++ b/
src/core/execute.c
@@
-19,8
+19,6
@@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <assert.h>
-#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
@@
-29,19
+27,11
@@
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/prctl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/prctl.h>
-#include <linux/sched.h>
-#include <sys/types.h>
#include <sys/stat.h>
#include <grp.h>
#include <sys/stat.h>
#include <grp.h>
-#include <pwd.h>
-#include <sys/mount.h>
-#include <linux/fs.h>
-#include <linux/oom.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <glob.h>
#include <sys/personality.h>
#include <glob.h>
#include <sys/personality.h>
-#include <libgen.h>
-#undef basename
#ifdef HAVE_PAM
#include <security/pam_appl.h>
#ifdef HAVE_PAM
#include <security/pam_appl.h>
@@
-82,12
+72,14
@@
#include "errno-list.h"
#include "af-list.h"
#include "mkdir.h"
#include "errno-list.h"
#include "af-list.h"
#include "mkdir.h"
-#include "apparmor-util.h"
#include "smack-util.h"
#include "bus-endpoint.h"
#include "smack-util.h"
#include "bus-endpoint.h"
-#include "label.h"
#include "cap-list.h"
#include "cap-list.h"
+#ifdef HAVE_APPARMOR
+#include "apparmor-util.h"
+#endif
+
#ifdef HAVE_SECCOMP
#include "seccomp-util.h"
#endif
#ifdef HAVE_SECCOMP
#include "seccomp-util.h"
#endif
@@
-1526,7
+1518,7
@@
static int exec_child(
return -ENOMEM;
}
return -ENOMEM;
}
- r = mkdir_safe(p, context->runtime_directory_mode, uid, gid);
+ r = mkdir_safe
_label
(p, context->runtime_directory_mode, uid, gid);
if (r < 0) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return r;
if (r < 0) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return r;
@@
-1619,7
+1611,8
@@
static int exec_child(
return -errno;
}
return -errno;
}
- if (chdir(context->working_directory ? context->working_directory : "/") < 0) {
+ if (chdir(context->working_directory ?: "/") < 0 &&
+ !context->working_directory_missing_ok) {
*exit_status = EXIT_CHDIR;
return -errno;
}
*exit_status = EXIT_CHDIR;
return -errno;
}
@@
-1627,13
+1620,14
@@
static int exec_child(
_cleanup_free_ char *d = NULL;
if (asprintf(&d, "%s/%s",
_cleanup_free_ char *d = NULL;
if (asprintf(&d, "%s/%s",
- context->root_directory ?
context->root_directory
: "",
- context->working_directory ?
context->working_directory
: "") < 0) {
+ context->root_directory ?: "",
+ context->working_directory ?: "") < 0) {
*exit_status = EXIT_MEMORY;
return -ENOMEM;
}
*exit_status = EXIT_MEMORY;
return -ENOMEM;
}
- if (chdir(d) < 0) {
+ if (chdir(d) < 0 &&
+ !context->working_directory_missing_ok) {
*exit_status = EXIT_CHDIR;
return -errno;
}
*exit_status = EXIT_CHDIR;
return -errno;
}