Skip to content

Commit

Permalink
main,syslog: optionally connect to syslog
Browse files Browse the repository at this point in the history
  • Loading branch information
st3r4g committed Mar 1, 2021
1 parent 15da6ea commit bd060e1
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 36 deletions.
43 changes: 27 additions & 16 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#define STR_INT_MAX 16

static const char* default_dbus_socket_path = "/run/dbus/system_bus_socket";
static const char* syslog_path = "/dev/log";
static const char* dummy_machine_id = "00000000000000000000000000000001";

static int launcher_add_listener(sd_bus* bus_controller, int fd_listen) {
Expand Down Expand Up @@ -77,27 +76,29 @@ positional arguments:\n\
\n\
optional arguments:\n\
-d dbus socket path (default: %s)\n\
-l syslog socket path (default: %s)\n\
-s open a syslog connection for dbus-broker\n\
-3 notify readiness on fd 3\n\
-h show this help message and exit\n";

int main(int argc, char* argv[]) {
const char* dbus_socket_path = default_dbus_socket_path;
bool notif = false;
bool syslog = false;

int opt;
while ((opt = getopt(argc, argv, "hd:3")) != -1) {
while ((opt = getopt(argc, argv, "d:hs3")) != -1) {
switch (opt) {
case 'd': dbus_socket_path = optarg; break;
case 's': syslog = true; break;
case '3': check_3_open(); notif = true; break;
default:
printf(usage, default_dbus_socket_path, syslog_path);
printf(usage, default_dbus_socket_path);
return EXIT_FAILURE;
}
}

if (argc <= optind) {
printf(usage, default_dbus_socket_path, syslog_path);
printf(usage, default_dbus_socket_path);
return EXIT_FAILURE;
}

Expand All @@ -106,28 +107,38 @@ int main(int argc, char* argv[]) {
int controller[2];
socketpair(PF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, controller);

//int logfd = syslog_connect_socket(syslog_path);
int logfd = syslog ? syslog_connect_socket() : -1;

pid_t cpid = fork();
if (cpid == 0) {
close(controller[0]);
if (notif) close(3);
char str_log[STR_INT_MAX], str_controller[STR_INT_MAX];
char str_controller[STR_INT_MAX];
snprintf(str_controller, sizeof(str_controller), "%d", controller[1]);
//snprintf(str_log, sizeof(str_log), "%d", logfd);
const char * const argv[] = {
"dbus-broker",
"--controller", str_controller,
//"--log", str_log,
"--machine-id", dummy_machine_id,
NULL};
execvp(broker_path, (char * const *)argv);
if (logfd < 0) {
const char* const cmdline[] = {
"dbus-broker",
"--controller", str_controller,
"--machine-id", dummy_machine_id,
NULL};
execvp(broker_path, (char* const*)cmdline);
} else {
char str_log[STR_INT_MAX];
snprintf(str_log, sizeof(str_log), "%d", logfd);
const char* const cmdline_log[] = {
"dbus-broker",
"--controller", str_controller,
"--machine-id", dummy_machine_id,
"--log", str_log,
NULL};
execvp(broker_path, (char* const*)cmdline_log);
}
perror("Failed to execute dbus-broker");
_exit(EXIT_FAILURE);
/* NOTREACHED */
} else {
close(controller[1]);
//close(logfd);
if (logfd >= 0) close(logfd);
sd_bus* bus_controller;
int r;
r = sd_bus_new(&bus_controller);
Expand Down
39 changes: 20 additions & 19 deletions syslog.c
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
#include "util.h"

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>

static const struct {
short sun_family;
char sun_path[9];
} log_addr = {
AF_UNIX,
"/dev/log"
};

int syslog_connect_socket() {
int log_fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if (log_fd < 0)
return -1;

int syslog_connect_socket(const char* syslog_path) {
struct sockaddr_un addr;
socklen_t addr_size;
int logfd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
memset(&addr, 0, sizeof(struct sockaddr_un));
/* Clear structure */
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, syslog_path,
sizeof(addr.sun_path) - 1);
int r = connect(log_fd, (void *)&log_addr, sizeof log_addr);
if (r < 0) {
close(log_fd);
perror("syslog");
}

addr_size = sizeof(struct sockaddr_un);
int ret = connect(logfd, (struct sockaddr *) &addr,
addr_size);
if (ret == -1)
handle_error("connect");
return logfd;
return r == 0 ? log_fd : -1;
}
2 changes: 1 addition & 1 deletion syslog.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef syslog_h_INCLUDED
#define syslog_h_INCLUDED

int syslog_connect_socket(const char* syslog_path);
int syslog_connect_socket();

#endif // syslog_h_INCLUDED

0 comments on commit bd060e1

Please sign in to comment.