#include <pwd.h>
#include <grp.h>
#include <assert.h>
-#include <getopt.h>
-#include <stdbool.h>
#include <linux/limits.h>
#include <sys/epoll.h>
struct socket_config_data {
int permissions;
- bool should_chown;
char path[MAX_CONF_VAL_LEN];
char owner[MAX_CONF_VAL_LEN];
char group[MAX_CONF_VAL_LEN];
struct logger_config_data {
struct buf_params buf_params;
- bool drop_privileges;
list_head logfile_configs;
int is_buffer_enabled[LOG_ID_MAX];
struct buffer_config_data buffers[LOG_ID_MAX];
static void dispatch_event_reader(struct logger *server, struct epoll_event *event);
static void reader_free(struct reader* reader);
static void logger_free(struct logger* l);
-static int parse_args(int argc, char **argv, struct logger_config_data *l);
+static int parse_args(int argc, char **argv, struct buf_params *b);
static int socket_initialize(struct sock_data *sock, struct log_buffer *buffer, service_socket_t service_socket, struct socket_config_data *data);
static void help();
if (sock_fd < 0)
return sock_fd;
- if (data->should_chown) {
- int r = change_owners(data->path, data->owner, data->group);
- if (r < 0) {
- close(sock_fd);
- return r;
- }
+ int r = change_owners(data->path, data->owner, data->group);
+ if (r < 0) {
+ close(sock_fd);
+ return r;
}
init_fd_entity(&sock->fd_entity, dispatch_event_sock, sock);
* @param[out] data Socket init config data
* @param[in] buf_name The name of the buffer the socket belongs to
* @param[in] type The name of the buffer type
- * @param[in] should_chown Whether the socket should change owner
* @return 0 on success, -errno on failure
*/
-int prepare_socket_data(struct log_config *conf, struct socket_config_data *data, char *buf_name, const char *type, bool should_chown)
+int prepare_socket_data(struct log_config *conf, struct socket_config_data *data, char *buf_name, const char *type)
{
char conf_key[MAX_CONF_KEY_LEN];
int r;
strncpy(data->path, path, MAX_CONF_VAL_LEN - 1);
strncpy(data->owner, owner, MAX_CONF_VAL_LEN - 1);
strncpy(data->group, group, MAX_CONF_VAL_LEN - 1);
- data->should_chown = should_chown;
return 0;
}
* @param[in] conf Config database
* @param[out] data Buffer init config data
* @param[in] buf_id Index of the buffer to work with
- * @param[in] should_sockets_chown Whether sockets belonging to the buffer should change owner
* @return 0 on success, -errno on failure
*/
-int prepare_buffer_data(struct log_config *conf, struct buffer_config_data *data, log_id_t buf_id, bool should_sockets_chown)
+int prepare_buffer_data(struct log_config *conf, struct buffer_config_data *data, log_id_t buf_id)
{
char * const buf_name = log_name_by_id(buf_id);
char * validity_check_ptr;
char conf_key[MAX_CONF_KEY_LEN];
int r;
- r = prepare_socket_data(conf, &data->write_socket, buf_name, "write", should_sockets_chown);
+ r = prepare_socket_data(conf, &data->write_socket, buf_name, "write");
if (r < 0)
return r;
- r = prepare_socket_data(conf, &data->ctl_socket, buf_name, "ctl", should_sockets_chown);
+ r = prepare_socket_data(conf, &data->ctl_socket, buf_name, "ctl");
if (r < 0)
return r;
memset(data, 0, sizeof *data);
- int ret = parse_args(argc, argv, data);
+ int ret = parse_args(argc, argv, &data->buf_params);
if (ret != 0) {
help();
return ret;
for (log_id_t buf_id = 0; buf_id < LOG_ID_MAX; ++buf_id) {
if (data->is_buffer_enabled[buf_id]) {
- ret = prepare_buffer_data(&conf, data->buffers + buf_id, buf_id, data->drop_privileges);
+ ret = prepare_buffer_data(&conf, data->buffers + buf_id, buf_id);
if (ret < 0)
goto end;
}
* @details Parses execution parameters of the program
* @param[in] argc Argument count
* @param[in] argv Argument values
- * @param[out] l Configuration for the logger server
+ * @param[out] b Buffering parameters
* @return 0 or 1 on success, else -errno. Nonzero if the program is to close.
*/
-static int parse_args(int argc, char **argv, struct logger_config_data *l)
+static int parse_args(int argc, char **argv, struct buf_params *b)
{
- assert(l);
-
int option;
- struct buf_params *const b = &l->buf_params;
- l->drop_privileges = true;
b->time = BUF_PARAM_TIME_DEFAULT;
b->bytes = BUF_PARAM_BYTES_DEFAULT;
- static const struct option long_options[] = {
- {"no-drop-privileges", no_argument, NULL, 0},
- {0}
- };
- while ((option = getopt_long(argc, argv, "hb:t:", long_options, NULL)) != -1) {
+ while ((option = getopt(argc, argv, "hb:t:")) != -1) {
switch (option) {
- case 0:
- l->drop_privileges = false;
- break;
case 't':
if (!isdigit(optarg[0]))
return -EINVAL;
{
sd_notify(0, "READY=1");
- if (data->drop_privileges) {
- int r = reset_self_privileges();
- if (r < 0)
- return r;
- }
+ int r = reset_self_privileges();
+ if (r < 0)
+ return r;
//create files after resetting self privileges
list_foreach(data->logfile_configs, server, parse_logfile_config);