Как использовать libbsm / openbsm со Swift5 в macOS? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь использовать библиотеку 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 Ответ

0 голосов
/ 04 июня 2020

Я столкнулся с той же проблемой, когда Swift не смог импортировать эти сложные макросы. Куинн "Эскимос!" указал мне в сторону объявления их как констант c. Поэтому я создал их в файле c в моем проекте.

В файле .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. Отлично работает!

...