mirror of
https://github.com/swaywm/sway.git
synced 2025-11-22 06:59:48 -05:00
Fix build on FreeBSD
- Make sure CMake always finds absolute paths for Cairo, Pango and GdkPixbuf - Add forgotten json-c include path to swaymsg/CMakeLists.txt - Disable -Werror because of assert warnings - Add correct /proc/pid/file path for FreeBSD - Use libepoll-shim on FreeBSD - Only use Linux capabilities on, well, Linux
This commit is contained in:
parent
d93e53fd4b
commit
da26d69cb1
11 changed files with 127 additions and 103 deletions
|
|
@ -55,9 +55,12 @@ target_link_libraries(sway
|
|||
${PANGO_LIBRARIES}
|
||||
${JSONC_LIBRARIES}
|
||||
m
|
||||
cap
|
||||
)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
|
||||
target_link_libraries(sway cap)
|
||||
endif (CMAKE_SYSTEM_NAME STREQUAL Linux)
|
||||
|
||||
install(
|
||||
TARGETS sway
|
||||
RUNTIME
|
||||
|
|
|
|||
|
|
@ -126,6 +126,8 @@ struct sockaddr_un *ipc_user_sockaddr(void) {
|
|||
}
|
||||
|
||||
static pid_t get_client_pid(int client_fd) {
|
||||
// FreeBSD supports getting uid/gid, but not pid
|
||||
#ifdef __linux__
|
||||
struct ucred ucred;
|
||||
socklen_t len = sizeof(struct ucred);
|
||||
|
||||
|
|
@ -134,6 +136,9 @@ static pid_t get_client_pid(int client_fd) {
|
|||
}
|
||||
|
||||
return ucred.pid;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
int ipc_handle_connection(int fd, uint32_t mask, void *data) {
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ static void security_sanity_check() {
|
|||
sway_log(L_ERROR,
|
||||
"!! DANGER !! /proc is not available - sway CANNOT enforce security rules!");
|
||||
}
|
||||
#ifdef __linux__
|
||||
cap_flag_value_t v;
|
||||
cap_t cap = cap_get_proc();
|
||||
if (!cap || cap_get_flag(cap, CAP_SYS_PTRACE, CAP_PERMITTED, &v) != 0 || v != CAP_SET) {
|
||||
|
|
@ -161,6 +162,7 @@ static void security_sanity_check() {
|
|||
if (cap) {
|
||||
cap_free(cap);
|
||||
}
|
||||
#endif
|
||||
if (!stat(SYSCONFDIR "/sway", &s)) {
|
||||
if (s.st_uid != 0 || s.st_gid != 0
|
||||
|| (s.st_mode & S_IWGRP) || (s.st_mode & S_IWOTH)) {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,11 @@ struct command_policy *alloc_command_policy(const char *command) {
|
|||
}
|
||||
|
||||
enum secure_feature get_feature_policy(pid_t pid) {
|
||||
#ifdef __FreeBSD__
|
||||
const char *fmt = "/proc/%d/file";
|
||||
#else
|
||||
const char *fmt = "/proc/%d/exe";
|
||||
#endif
|
||||
int pathlen = snprintf(NULL, 0, fmt, pid);
|
||||
char *path = malloc(pathlen + 1);
|
||||
snprintf(path, pathlen + 1, fmt, pid);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue