Как использовать libbsm/openbsm со Swift5 в macOS?
Я пытаюсь использовать библиотеку libbsm/openbsm и Swift5 в Xcode11.
Зачем? Я не могу нормальноAUDITPIPE_SET_PRESELECT_MODE
.
Могу ли я использовать libbsm/openbsm в Swift?
var mode = AUDITPIPE_PRESELECT_MODE_LOCAL // <- works very well
if ioctl(auditFD, AUDITPIPE_SET_PRESELECT_MODE, &mode) == -1 {
return -1
}
1 ответ
Решение
Я столкнулся с той же проблемой, когда Swift не смог импортировать эти сложные макросы. Куинн "Эскимос!" указал мне в направлении объявления их константами C. Поэтому я создал их в файле ac в своем проекте.
В файле.h я сделал следующее:
#include <stdio.h>
#include <bsm/libbsm.h>
#include <sys/ioctl.h>
#include <security/audit/audit_ioctl.h>
// -- Macros used for creating an auditpipe
extern unsigned long QAUDITPIPE_SET_PRESELECT_MODE;
extern unsigned long QAUDITPIPE_GET_QLIMIT_MAX;
extern unsigned long QAUDITPIPE_SET_QLIMIT;
extern unsigned long QAUDITPIPE_SET_PRESELECT_FLAGS;
extern unsigned long QAUDITPIPE_SET_PRESELECT_NAFLAGS;
// -- End auditpipe macros
И в моем файле.c у меня есть:
unsigned long QAUDITPIPE_SET_PRESELECT_MODE = AUDITPIPE_SET_PRESELECT_MODE;
unsigned long QAUDITPIPE_GET_QLIMIT_MAX = AUDITPIPE_GET_QLIMIT_MAX;
unsigned long QAUDITPIPE_SET_QLIMIT = AUDITPIPE_SET_QLIMIT;
unsigned long QAUDITPIPE_SET_PRESELECT_FLAGS = AUDITPIPE_SET_PRESELECT_FLAGS;
unsigned long QAUDITPIPE_SET_PRESELECT_NAFLAGS = AUDITPIPE_SET_PRESELECT_NAFLAGS;
Итак, теперь я могу просто использовать QAUDITPIPE_SET_PRESELECT_MODE в моем коде Swift. Работает отлично!