diff options
| author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-10-26 22:38:46 -0400 | 
|---|---|---|
| committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-10-26 22:38:46 -0400 | 
| commit | 3148f99e07e755df26224fea5674f41a13cb78fa (patch) | |
| tree | b239474136126d7e0079d035dbb787a0101722d5 /src/libsystemd-shared/include/systemd-shared | |
| parent | 7e3290b73ee989e73e8bdddd3b1c7643077a9c1e (diff) | |
./tools/notsd-move
Diffstat (limited to 'src/libsystemd-shared/include/systemd-shared')
46 files changed, 2550 insertions, 0 deletions
| diff --git a/src/libsystemd-shared/include/systemd-shared/acl-util.h b/src/libsystemd-shared/include/systemd-shared/acl-util.h new file mode 100644 index 0000000000..8310519aff --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/acl-util.h @@ -0,0 +1,48 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2011 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#ifdef HAVE_ACL + +#include <acl/libacl.h> +#include <stdbool.h> +#include <sys/acl.h> + +#include "systemd-basic/macro.h" + +int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry); +int calc_acl_mask_if_needed(acl_t *acl_p); +int add_base_acls_if_needed(acl_t *acl_p, const char *path); +int acl_search_groups(const char* path, char ***ret_groups); +int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask); +int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl); +int add_acls_for_user(int fd, uid_t uid); + +/* acl_free takes multiple argument types. + * Multiple cleanup functions are necessary. */ +DEFINE_TRIVIAL_CLEANUP_FUNC(acl_t, acl_free); +#define acl_free_charp acl_free +DEFINE_TRIVIAL_CLEANUP_FUNC(char*, acl_free_charp); +#define acl_free_uid_tp acl_free +DEFINE_TRIVIAL_CLEANUP_FUNC(uid_t*, acl_free_uid_tp); +#define acl_free_gid_tp acl_free +DEFINE_TRIVIAL_CLEANUP_FUNC(gid_t*, acl_free_gid_tp); + +#endif diff --git a/src/libsystemd-shared/include/systemd-shared/acpi-fpdt.h b/src/libsystemd-shared/include/systemd-shared/acpi-fpdt.h new file mode 100644 index 0000000000..365dd908bb --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/acpi-fpdt.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Kay Sievers + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/time-util.h" + +int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit); diff --git a/src/libsystemd-shared/include/systemd-shared/apparmor-util.h b/src/libsystemd-shared/include/systemd-shared/apparmor-util.h new file mode 100644 index 0000000000..524f740152 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/apparmor-util.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +bool mac_apparmor_use(void); diff --git a/src/libsystemd-shared/include/systemd-shared/ask-password-api.h b/src/libsystemd-shared/include/systemd-shared/ask-password-api.h new file mode 100644 index 0000000000..cdc18c52ad --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/ask-password-api.h @@ -0,0 +1,38 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/time-util.h" + +typedef enum AskPasswordFlags { +        ASK_PASSWORD_ACCEPT_CACHED = 1, +        ASK_PASSWORD_PUSH_CACHE = 2, +        ASK_PASSWORD_ECHO = 4,                /* show the password literally while reading, instead of "*" */ +        ASK_PASSWORD_SILENT = 8,              /* do no show any password at all while reading */ +        ASK_PASSWORD_NO_TTY = 16, +        ASK_PASSWORD_NO_AGENT = 32, +} AskPasswordFlags; + +int ask_password_tty(const char *message, const char *keyname, usec_t until, AskPasswordFlags flags, const char *flag_file, char **ret); +int ask_password_agent(const char *message, const char *icon, const char *id, const char *keyname, usec_t until, AskPasswordFlags flag, char ***ret); +int ask_password_keyring(const char *keyname, AskPasswordFlags flags, char ***ret); +int ask_password_auto(const char *message, const char *icon, const char *id, const char *keyname, usec_t until, AskPasswordFlags flag, char ***ret); diff --git a/src/libsystemd-shared/include/systemd-shared/base-filesystem.h b/src/libsystemd-shared/include/systemd-shared/base-filesystem.h new file mode 100644 index 0000000000..49599f0a60 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/base-filesystem.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Kay Sievers + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <sys/types.h> + +int base_filesystem_create(const char *root, uid_t uid, gid_t gid); diff --git a/src/libsystemd-shared/include/systemd-shared/boot-timestamps.h b/src/libsystemd-shared/include/systemd-shared/boot-timestamps.h new file mode 100644 index 0000000000..f67d4f25b1 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/boot-timestamps.h @@ -0,0 +1,25 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2012 Lennart Poettering +  Copyright 2013 Kay Sievers + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/time-util.h" + +int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader); diff --git a/src/libsystemd-shared/include/systemd-shared/bus-unit-util.h b/src/libsystemd-shared/include/systemd-shared/bus-unit-util.h new file mode 100644 index 0000000000..b4b68cc5d2 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/bus-unit-util.h @@ -0,0 +1,57 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2016 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <systemd/sd-bus.h> + +#include "install.h" +#include "output-mode.h" + +typedef struct UnitInfo { +        const char *machine; +        const char *id; +        const char *description; +        const char *load_state; +        const char *active_state; +        const char *sub_state; +        const char *following; +        const char *unit_path; +        uint32_t job_id; +        const char *job_type; +        const char *job_path; +} UnitInfo; + +int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u); + +int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignment); + +typedef struct BusWaitForJobs BusWaitForJobs; + +int bus_wait_for_jobs_new(sd_bus *bus, BusWaitForJobs **ret); +void bus_wait_for_jobs_free(BusWaitForJobs *d); +int bus_wait_for_jobs_add(BusWaitForJobs *d, const char *path); +int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet, const char* const* extra_args); +int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet); + +DEFINE_TRIVIAL_CLEANUP_FUNC(BusWaitForJobs*, bus_wait_for_jobs_free); + +int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes); + +int unit_show_processes(sd_bus *bus, const char *unit, const char *cgroup_path, const char *prefix, unsigned n_columns, OutputFlags flags, sd_bus_error *error); diff --git a/src/libsystemd-shared/include/systemd-shared/cgroup-show.h b/src/libsystemd-shared/include/systemd-shared/cgroup-show.h new file mode 100644 index 0000000000..5c1d6e6d98 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/cgroup-show.h @@ -0,0 +1,32 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <sys/types.h> + +#include "logs-show.h" +#include "output-mode.h" + +int show_cgroup_by_path(const char *path, const char *prefix, unsigned columns, OutputFlags flags); +int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned columns, OutputFlags flags); + +int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags); +int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags); diff --git a/src/libsystemd-shared/include/systemd-shared/clean-ipc.h b/src/libsystemd-shared/include/systemd-shared/clean-ipc.h new file mode 100644 index 0000000000..44a83afcf7 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/clean-ipc.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <sys/types.h> + +int clean_ipc(uid_t uid); diff --git a/src/libsystemd-shared/include/systemd-shared/condition.h b/src/libsystemd-shared/include/systemd-shared/condition.h new file mode 100644 index 0000000000..a94705768c --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/condition.h @@ -0,0 +1,94 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <stdio.h> + +#include "systemd-basic/list.h" +#include "systemd-basic/macro.h" + +typedef enum ConditionType { +        CONDITION_ARCHITECTURE, +        CONDITION_VIRTUALIZATION, +        CONDITION_HOST, +        CONDITION_KERNEL_COMMAND_LINE, +        CONDITION_SECURITY, +        CONDITION_CAPABILITY, +        CONDITION_AC_POWER, + +        CONDITION_NEEDS_UPDATE, +        CONDITION_FIRST_BOOT, + +        CONDITION_PATH_EXISTS, +        CONDITION_PATH_EXISTS_GLOB, +        CONDITION_PATH_IS_DIRECTORY, +        CONDITION_PATH_IS_SYMBOLIC_LINK, +        CONDITION_PATH_IS_MOUNT_POINT, +        CONDITION_PATH_IS_READ_WRITE, +        CONDITION_DIRECTORY_NOT_EMPTY, +        CONDITION_FILE_NOT_EMPTY, +        CONDITION_FILE_IS_EXECUTABLE, + +        CONDITION_NULL, + +        _CONDITION_TYPE_MAX, +        _CONDITION_TYPE_INVALID = -1 +} ConditionType; + +typedef enum ConditionResult { +        CONDITION_UNTESTED, +        CONDITION_SUCCEEDED, +        CONDITION_FAILED, +        CONDITION_ERROR, +        _CONDITION_RESULT_MAX, +        _CONDITION_RESULT_INVALID = -1 +} ConditionResult; + +typedef struct Condition { +        ConditionType type:8; + +        bool trigger:1; +        bool negate:1; + +        ConditionResult result:6; + +        char *parameter; + +        LIST_FIELDS(struct Condition, conditions); +} Condition; + +Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate); +void condition_free(Condition *c); +Condition* condition_free_list(Condition *c); + +int condition_test(Condition *c); + +void condition_dump(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); +void condition_dump_list(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); + +const char* condition_type_to_string(ConditionType t) _const_; +ConditionType condition_type_from_string(const char *s) _pure_; + +const char* assert_type_to_string(ConditionType t) _const_; +ConditionType assert_type_from_string(const char *s) _pure_; + +const char* condition_result_to_string(ConditionResult r) _const_; +ConditionResult condition_result_from_string(const char *s) _pure_; diff --git a/src/libsystemd-shared/include/systemd-shared/conf-parser.h b/src/libsystemd-shared/include/systemd-shared/conf-parser.h new file mode 100644 index 0000000000..dfac0a788e --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/conf-parser.h @@ -0,0 +1,229 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <errno.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdio.h> +#include <syslog.h> + +#include "systemd-basic/alloc-util.h" +#include "systemd-basic/log.h" +#include "systemd-basic/macro.h" + +/* An abstract parser for simple, line based, shallow configuration + * files consisting of variable assignments only. */ + +/* Prototype for a parser for a specific configuration setting */ +typedef int (*ConfigParserCallback)(const char *unit, +                                    const char *filename, +                                    unsigned line, +                                    const char *section, +                                    unsigned section_line, +                                    const char *lvalue, +                                    int ltype, +                                    const char *rvalue, +                                    void *data, +                                    void *userdata); + +/* Wraps information for parsing a specific configuration variable, to + * be stored in a simple array */ +typedef struct ConfigTableItem { +        const char *section;            /* Section */ +        const char *lvalue;             /* Name of the variable */ +        ConfigParserCallback parse;     /* Function that is called to parse the variable's value */ +        int ltype;                      /* Distinguish different variables passed to the same callback */ +        void *data;                     /* Where to store the variable's data */ +} ConfigTableItem; + +/* Wraps information for parsing a specific configuration variable, to + * be stored in a gperf perfect hashtable */ +typedef struct ConfigPerfItem { +        const char *section_and_lvalue; /* Section + "." + name of the variable */ +        ConfigParserCallback parse;     /* Function that is called to parse the variable's value */ +        int ltype;                      /* Distinguish different variables passed to the same callback */ +        size_t offset;                  /* Offset where to store data, from the beginning of userdata */ +} ConfigPerfItem; + +/* Prototype for a low-level gperf lookup function */ +typedef const ConfigPerfItem* (*ConfigPerfItemLookup)(const char *section_and_lvalue, unsigned length); + +/* Prototype for a generic high-level lookup function */ +typedef int (*ConfigItemLookup)( +                const void *table, +                const char *section, +                const char *lvalue, +                ConfigParserCallback *func, +                int *ltype, +                void **data, +                void *userdata); + +/* Linear table search implementation of ConfigItemLookup, based on + * ConfigTableItem arrays */ +int config_item_table_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata); + +/* gperf implementation of ConfigItemLookup, based on gperf + * ConfigPerfItem tables */ +int config_item_perf_lookup(const void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata); + +int config_parse(const char *unit, +                 const char *filename, +                 FILE *f, +                 const char *sections,  /* nulstr */ +                 ConfigItemLookup lookup, +                 const void *table, +                 bool relaxed, +                 bool allow_include, +                 bool warn, +                 void *userdata); + +int config_parse_many(const char *conf_file,      /* possibly NULL */ +                      const char *conf_file_dirs, /* nulstr */ +                      const char *sections,       /* nulstr */ +                      ConfigItemLookup lookup, +                      const void *table, +                      bool relaxed, +                      void *userdata); + +/* Generic parsers */ +int config_parse_int(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_unsigned(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_long(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_uint32(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_uint64(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_double(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line,  const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_iec_size(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_si_size(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_iec_uint64(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_bool(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_tristate(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_string(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_path(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_strv(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_sec(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_nsec(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_log_facility(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_log_level(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_signal(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_personality(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_ifname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); + +#define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg)                \ +        int function(const char *unit,                                  \ +                     const char *filename,                              \ +                     unsigned line,                                     \ +                     const char *section,                               \ +                     unsigned section_line,                             \ +                     const char *lvalue,                                \ +                     int ltype,                                         \ +                     const char *rvalue,                                \ +                     void *data,                                        \ +                     void *userdata) {                                  \ +                                                                        \ +                type *i = data, x;                                      \ +                                                                        \ +                assert(filename);                                       \ +                assert(lvalue);                                         \ +                assert(rvalue);                                         \ +                assert(data);                                           \ +                                                                        \ +                if ((x = name##_from_string(rvalue)) < 0) {             \ +                        log_syntax(unit, LOG_ERR, filename, line, -x,   \ +                                   msg ", ignoring: %s", rvalue);       \ +                        return 0;                                       \ +                }                                                       \ +                                                                        \ +                *i = x;                                                 \ +                return 0;                                               \ +        } + +#define DEFINE_CONFIG_PARSE_ENUMV(function,name,type,invalid,msg)              \ +        int function(const char *unit,                                         \ +                     const char *filename,                                     \ +                     unsigned line,                                            \ +                     const char *section,                                      \ +                     unsigned section_line,                                    \ +                     const char *lvalue,                                       \ +                     int ltype,                                                \ +                     const char *rvalue,                                       \ +                     void *data,                                               \ +                     void *userdata) {                                         \ +                                                                               \ +                type **enums = data, x, *ys;                                   \ +                _cleanup_free_ type *xs = NULL;                                \ +                const char *word, *state;                                      \ +                size_t l, i = 0;                                               \ +                                                                               \ +                assert(filename);                                              \ +                assert(lvalue);                                                \ +                assert(rvalue);                                                \ +                assert(data);                                                  \ +                                                                               \ +                xs = new0(type, 1);                                            \ +                if (!xs)                                                       \ +                        return -ENOMEM;                                        \ +                                                                               \ +                *xs = invalid;                                                 \ +                                                                               \ +                FOREACH_WORD(word, l, rvalue, state) {                         \ +                        _cleanup_free_ char *en = NULL;                        \ +                        type *new_xs;                                          \ +                                                                               \ +                        en = strndup(word, l);                                 \ +                        if (!en)                                               \ +                                return -ENOMEM;                                \ +                                                                               \ +                        if ((x = name##_from_string(en)) < 0) {                \ +                                log_syntax(unit, LOG_ERR, filename, line,      \ +                                       -x, msg ", ignoring: %s", en);          \ +                                continue;                                      \ +                        }                                                      \ +                                                                               \ +                        for (ys = xs; x != invalid && *ys != invalid; ys++) {  \ +                                if (*ys == x) {                                \ +                                        log_syntax(unit, LOG_ERR, filename,    \ +                                              line, -x,                        \ +                                              "Duplicate entry, ignoring: %s", \ +                                              en);                             \ +                                        x = invalid;                           \ +                                }                                              \ +                        }                                                      \ +                                                                               \ +                        if (x == invalid)                                      \ +                                continue;                                      \ +                                                                               \ +                        *(xs + i) = x;                                         \ +                        new_xs = realloc(xs, (++i + 1) * sizeof(type));        \ +                        if (new_xs)                                            \ +                                xs = new_xs;                                   \ +                        else                                                   \ +                                return -ENOMEM;                                \ +                                                                               \ +                        *(xs + i) = invalid;                                   \ +                }                                                              \ +                                                                               \ +                free(*enums);                                                  \ +                *enums = xs;                                                   \ +                xs = NULL;                                                     \ +                                                                               \ +                return 0;                                                      \ +        } diff --git a/src/libsystemd-shared/include/systemd-shared/dev-setup.h b/src/libsystemd-shared/include/systemd-shared/dev-setup.h new file mode 100644 index 0000000000..5766a62060 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/dev-setup.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010-2012 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <sys/types.h> + +int dev_setup(const char *prefix, uid_t uid, gid_t gid); diff --git a/src/libsystemd-shared/include/systemd-shared/dns-domain.h b/src/libsystemd-shared/include/systemd-shared/dns-domain.h new file mode 100644 index 0000000000..6a68cbbe9f --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/dns-domain.h @@ -0,0 +1,109 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. + ***/ + +#include <errno.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +#include "systemd-basic/hashmap.h" +#include "systemd-basic/in-addr-util.h" + +/* Length of a single label, with all escaping removed, excluding any trailing dot or NUL byte */ +#define DNS_LABEL_MAX 63 + +/* Worst case length of a single label, with all escaping applied and room for a trailing NUL byte. */ +#define DNS_LABEL_ESCAPED_MAX (DNS_LABEL_MAX*4+1) + +/* Maximum length of a full hostname, consisting of a series of unescaped labels, and no trailing dot or NUL byte */ +#define DNS_HOSTNAME_MAX 253 + +/* Maximum length of a full hostname, on the wire, including the final NUL byte */ +#define DNS_WIRE_FOMAT_HOSTNAME_MAX 255 + +/* Maximum number of labels per valid hostname */ +#define DNS_N_LABELS_MAX 127 + +int dns_label_unescape(const char **name, char *dest, size_t sz); +int dns_label_unescape_suffix(const char *name, const char **label_end, char *dest, size_t sz); +int dns_label_escape(const char *p, size_t l, char *dest, size_t sz); +int dns_label_escape_new(const char *p, size_t l, char **ret); + +static inline int dns_name_parent(const char **name) { +        return dns_label_unescape(name, NULL, DNS_LABEL_MAX); +} + +int dns_label_apply_idna(const char *encoded, size_t encoded_size, char *decoded, size_t decoded_max); +int dns_label_undo_idna(const char *encoded, size_t encoded_size, char *decoded, size_t decoded_max); + +int dns_name_concat(const char *a, const char *b, char **ret); + +static inline int dns_name_normalize(const char *s, char **ret) { +        /* dns_name_concat() normalizes as a side-effect */ +        return dns_name_concat(s, NULL, ret); +} + +static inline int dns_name_is_valid(const char *s) { +        int r; + +        /* dns_name_normalize() verifies as a side effect */ +        r = dns_name_normalize(s, NULL); +        if (r == -EINVAL) +                return 0; +        if (r < 0) +                return r; +        return 1; +} + +void dns_name_hash_func(const void *s, struct siphash *state); +int dns_name_compare_func(const void *a, const void *b); +extern const struct hash_ops dns_name_hash_ops; + +int dns_name_between(const char *a, const char *b, const char *c); +int dns_name_equal(const char *x, const char *y); +int dns_name_endswith(const char *name, const char *suffix); +int dns_name_startswith(const char *name, const char *prefix); + +int dns_name_change_suffix(const char *name, const char *old_suffix, const char *new_suffix, char **ret); + +int dns_name_reverse(int family, const union in_addr_union *a, char **ret); +int dns_name_address(const char *p, int *family, union in_addr_union *a); + +bool dns_name_is_root(const char *name); +bool dns_name_is_single_label(const char *name); + +int dns_name_to_wire_format(const char *domain, uint8_t *buffer, size_t len, bool canonical); + +bool dns_srv_type_is_valid(const char *name); +bool dns_service_name_is_valid(const char *name); + +int dns_service_join(const char *name, const char *type, const char *domain, char **ret); +int dns_service_split(const char *joined, char **name, char **type, char **domain); + +int dns_name_suffix(const char *name, unsigned n_labels, const char **ret); +int dns_name_count_labels(const char *name); + +int dns_name_skip(const char *a, unsigned n_labels, const char **ret); +int dns_name_equal_skip(const char *a, unsigned n_labels, const char *b); + +int dns_name_common_suffix(const char *a, const char *b, const char **ret); + +int dns_name_apply_idna(const char *name, char **ret); diff --git a/src/libsystemd-shared/include/systemd-shared/dropin.h b/src/libsystemd-shared/include/systemd-shared/dropin.h new file mode 100644 index 0000000000..4ce904460d --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/dropin.h @@ -0,0 +1,61 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/hashmap.h" +#include "systemd-basic/macro.h" +#include "systemd-basic/set.h" +#include "systemd-basic/unit-name.h" + +int drop_in_file(const char *dir, const char *unit, unsigned level, +                 const char *name, char **_p, char **_q); + +int write_drop_in(const char *dir, const char *unit, unsigned level, +                  const char *name, const char *data); + +int write_drop_in_format(const char *dir, const char *unit, unsigned level, +                         const char *name, const char *format, ...) _printf_(5, 6); + +/** + * This callback will be called for each directory entry @entry, + * with @filepath being the full path to the entry. + * + * If return value is negative, loop will be aborted. + */ +typedef int (*dependency_consumer_t)(UnitDependency dependency, +                                     const char *entry, +                                     const char* filepath, +                                     void *arg); + +int unit_file_process_dir( +                Set * unit_path_cache, +                const char *unit_path, +                const char *name, +                const char *suffix, +                UnitDependency dependency, +                dependency_consumer_t consumer, +                void *arg, +                char ***strv); + +int unit_file_find_dropin_paths( +                char **lookup_path, +                Set *unit_path_cache, +                Set *names, +                char ***paths); diff --git a/src/libsystemd-shared/include/systemd-shared/efivars.h b/src/libsystemd-shared/include/systemd-shared/efivars.h new file mode 100644 index 0000000000..2bf245607a --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/efivars.h @@ -0,0 +1,131 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +#include <systemd/sd-id128.h> + +#include "systemd-basic/time-util.h" + +#define EFI_VENDOR_LOADER SD_ID128_MAKE(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f) +#define EFI_VENDOR_GLOBAL SD_ID128_MAKE(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c) +#define EFI_VARIABLE_NON_VOLATILE       0x0000000000000001 +#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 +#define EFI_VARIABLE_RUNTIME_ACCESS     0x0000000000000004 + +#ifdef ENABLE_EFI + +bool is_efi_boot(void); +bool is_efi_secure_boot(void); +bool is_efi_secure_boot_setup_mode(void); +int efi_reboot_to_firmware_supported(void); +int efi_get_reboot_to_firmware(void); +int efi_set_reboot_to_firmware(bool value); + +int efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size); +int efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size); +int efi_get_variable_string(sd_id128_t vendor, const char *name, char **p); + +int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active); +int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path); +int efi_remove_boot_option(uint16_t id); +int efi_get_boot_order(uint16_t **order); +int efi_set_boot_order(uint16_t *order, size_t n); +int efi_get_boot_options(uint16_t **options); + +int efi_loader_get_device_part_uuid(sd_id128_t *u); +int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader); + +#else + +static inline bool is_efi_boot(void) { +        return false; +} + +static inline bool is_efi_secure_boot(void) { +        return false; +} + +static inline bool is_efi_secure_boot_setup_mode(void) { +        return false; +} + +static inline int efi_reboot_to_firmware_supported(void) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_reboot_to_firmware(void) { +        return -EOPNOTSUPP; +} + +static inline int efi_set_reboot_to_firmware(bool value) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size) { +        return -EOPNOTSUPP; +} + +static inline int efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_variable_string(sd_id128_t vendor, const char *name, char **p) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active) { +        return -EOPNOTSUPP; +} + +static inline int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path) { +        return -EOPNOTSUPP; +} + +static inline int efi_remove_boot_option(uint16_t id) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_boot_order(uint16_t **order) { +        return -EOPNOTSUPP; +} + +static inline int efi_set_boot_order(uint16_t *order, size_t n) { +        return -EOPNOTSUPP; +} + +static inline int efi_get_boot_options(uint16_t **options) { +        return -EOPNOTSUPP; +} + +static inline int efi_loader_get_device_part_uuid(sd_id128_t *u) { +        return -EOPNOTSUPP; +} + +static inline int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) { +        return -EOPNOTSUPP; +} + +#endif + +char *efi_tilt_backslashes(char *s); diff --git a/src/libsystemd-shared/include/systemd-shared/fdset.h b/src/libsystemd-shared/include/systemd-shared/fdset.h new file mode 100644 index 0000000000..0b2a9926e3 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/fdset.h @@ -0,0 +1,58 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/hashmap.h" +#include "systemd-basic/macro.h" +#include "systemd-basic/set.h" + +typedef struct FDSet FDSet; + +FDSet* fdset_new(void); +FDSet* fdset_free(FDSet *s); + +int fdset_put(FDSet *s, int fd); +int fdset_put_dup(FDSet *s, int fd); + +bool fdset_contains(FDSet *s, int fd); +int fdset_remove(FDSet *s, int fd); + +int fdset_new_array(FDSet **ret, const int *fds, unsigned n_fds); +int fdset_new_fill(FDSet **ret); +int fdset_new_listen_fds(FDSet **ret, bool unset); + +int fdset_cloexec(FDSet *fds, bool b); + +int fdset_close_others(FDSet *fds); + +unsigned fdset_size(FDSet *fds); +bool fdset_isempty(FDSet *fds); + +int fdset_iterate(FDSet *s, Iterator *i); + +int fdset_steal_first(FDSet *fds); + +#define FDSET_FOREACH(fd, fds, i) \ +        for ((i) = ITERATOR_FIRST, (fd) = fdset_iterate((fds), &(i)); (fd) >= 0; (fd) = fdset_iterate((fds), &(i))) + +DEFINE_TRIVIAL_CLEANUP_FUNC(FDSet*, fdset_free); +#define _cleanup_fdset_free_ _cleanup_(fdset_freep) diff --git a/src/libsystemd-shared/include/systemd-shared/fstab-util.h b/src/libsystemd-shared/include/systemd-shared/fstab-util.h new file mode 100644 index 0000000000..3e82d9bb4a --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/fstab-util.h @@ -0,0 +1,52 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2015 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <stddef.h> + +#include "systemd-basic/macro.h" + +bool fstab_is_mount_point(const char *mount); + +int fstab_filter_options(const char *opts, const char *names, const char **namefound, char **value, char **filtered); + +int fstab_extract_values(const char *opts, const char *name, char ***values); + +static inline bool fstab_test_option(const char *opts, const char *names) { +        return !!fstab_filter_options(opts, names, NULL, NULL, NULL); +} + +int fstab_find_pri(const char *options, int *ret); + +static inline bool fstab_test_yes_no_option(const char *opts, const char *yes_no) { +        int r; +        const char *opt; + +        /* If first name given is last, return 1. +         * If second name given is last or neither is found, return 0. */ + +        r = fstab_filter_options(opts, yes_no, &opt, NULL, NULL); +        assert(r >= 0); + +        return opt == yes_no; +} + +char *fstab_node_to_udev_node(const char *p); diff --git a/src/libsystemd-shared/include/systemd-shared/generator.h b/src/libsystemd-shared/include/systemd-shared/generator.h new file mode 100644 index 0000000000..a6017c1b76 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/generator.h @@ -0,0 +1,40 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdio.h> + +int generator_write_fsck_deps( +        FILE *f, +        const char *dir, +        const char *what, +        const char *where, +        const char *type); + +int generator_write_timeouts( +        const char *dir, +        const char *what, +        const char *where, +        const char *opts, +        char **filtered); + +int generator_write_initrd_root_device_deps( +        const char *dir, +        const char *what); diff --git a/src/libsystemd-shared/include/systemd-shared/gpt.h b/src/libsystemd-shared/include/systemd-shared/gpt.h new file mode 100644 index 0000000000..07153b51f4 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/gpt.h @@ -0,0 +1,66 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <endian.h> + +#include <systemd/sd-id128.h> + +/* We only support root disk discovery for x86, x86-64, Itanium and ARM for + * now, since EFI for anything else doesn't really exist, and we only + * care for root partitions on the same disk as the EFI ESP. */ + +#define GPT_ROOT_X86    SD_ID128_MAKE(44,47,95,40,f2,97,41,b2,9a,f7,d1,31,d5,f0,45,8a) +#define GPT_ROOT_X86_64 SD_ID128_MAKE(4f,68,bc,e3,e8,cd,4d,b1,96,e7,fb,ca,f9,84,b7,09) +#define GPT_ROOT_ARM    SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3) +#define GPT_ROOT_ARM_64 SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae) +#define GPT_ROOT_IA64   SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97) + +#define GPT_ESP         SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b) +#define GPT_SWAP        SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f) +#define GPT_HOME        SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15) +#define GPT_SRV         SD_ID128_MAKE(3b,8f,84,25,20,e0,4f,3b,90,7f,1a,25,a7,6f,98,e8) + +#if defined(__x86_64__) +#  define GPT_ROOT_NATIVE GPT_ROOT_X86_64 +#  define GPT_ROOT_SECONDARY GPT_ROOT_X86 +#elif defined(__i386__) +#  define GPT_ROOT_NATIVE GPT_ROOT_X86 +#endif + +#if defined(__ia64__) +#  define GPT_ROOT_NATIVE GPT_ROOT_IA64 +#endif + +#if defined(__aarch64__) && (__BYTE_ORDER != __BIG_ENDIAN) +#  define GPT_ROOT_NATIVE GPT_ROOT_ARM_64 +#  define GPT_ROOT_SECONDARY GPT_ROOT_ARM +#elif defined(__arm__) && (__BYTE_ORDER != __BIG_ENDIAN) +#  define GPT_ROOT_NATIVE GPT_ROOT_ARM +#endif + +/* Flags we recognize on the root, swap, home and srv partitions when + * doing auto-discovery. These happen to be identical to what + * Microsoft defines for its own Basic Data Partitions, but that's + * just because we saw no point in defining any other values here. */ +#define GPT_FLAG_READ_ONLY (1ULL << 60) +#define GPT_FLAG_NO_AUTO (1ULL << 63) + +#define GPT_LINUX_GENERIC SD_ID128_MAKE(0f,c6,3d,af,84,83,47,72,8e,79,3d,69,d8,47,7d,e4) diff --git a/src/libsystemd-shared/include/systemd-shared/ima-util.h b/src/libsystemd-shared/include/systemd-shared/ima-util.h new file mode 100644 index 0000000000..5be94761fd --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/ima-util.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +bool use_ima(void); diff --git a/src/libsystemd-shared/include/systemd-shared/import-util.h b/src/libsystemd-shared/include/systemd-shared/import-util.h new file mode 100644 index 0000000000..a5ceb52b8f --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/import-util.h @@ -0,0 +1,43 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2015 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/macro.h" + +typedef enum ImportVerify { +        IMPORT_VERIFY_NO, +        IMPORT_VERIFY_CHECKSUM, +        IMPORT_VERIFY_SIGNATURE, +        _IMPORT_VERIFY_MAX, +        _IMPORT_VERIFY_INVALID = -1, +} ImportVerify; + +int import_url_last_component(const char *url, char **ret); +int import_url_change_last_component(const char *url, const char *suffix, char **ret); + +const char* import_verify_to_string(ImportVerify v) _const_; +ImportVerify import_verify_from_string(const char *s) _pure_; + +int tar_strip_suffixes(const char *name, char **ret); +int raw_strip_suffixes(const char *name, char **ret); + +int import_assign_pool_quota_and_warn(const char *path); diff --git a/src/libsystemd-shared/include/systemd-shared/initreq.h b/src/libsystemd-shared/include/systemd-shared/initreq.h new file mode 100644 index 0000000000..710037d84b --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/initreq.h @@ -0,0 +1,77 @@ +/* + * initreq.h	Interface to talk to init through /dev/initctl. + * + *		Copyright (C) 1995-2004 Miquel van Smoorenburg + * + *		This library is free software; you can redistribute it and/or + *		modify it under the terms of the GNU Lesser General Public + *		License as published by the Free Software Foundation; either + *		version 2 of the License, or (at your option) any later version. + * + * Version:     @(#)initreq.h  1.28  31-Mar-2004 MvS + * + */ +#ifndef _INITREQ_H +#define _INITREQ_H + +#include <sys/param.h> + +#if defined(__FreeBSD_kernel__) +#  define INIT_FIFO  "/etc/.initctl" +#else +#  define INIT_FIFO  "/dev/initctl" +#endif + +#define INIT_MAGIC 0x03091969 +#define INIT_CMD_START		0 +#define INIT_CMD_RUNLVL		1 +#define INIT_CMD_POWERFAIL	2 +#define INIT_CMD_POWERFAILNOW	3 +#define INIT_CMD_POWEROK	4 +#define INIT_CMD_BSD		5 +#define INIT_CMD_SETENV		6 +#define INIT_CMD_UNSETENV	7 + +#define INIT_CMD_CHANGECONS	12345 + +#ifdef MAXHOSTNAMELEN +#  define INITRQ_HLEN	MAXHOSTNAMELEN +#else +#  define INITRQ_HLEN	64 +#endif + +/* + *	This is what BSD 4.4 uses when talking to init. + *	Linux doesn't use this right now. + */ +struct init_request_bsd { +        char	gen_id[8];		/* Beats me.. telnetd uses "fe" */ +        char	tty_id[16];		/* Tty name minus /dev/tty      */ +        char	host[INITRQ_HLEN];	/* Hostname                     */ +        char	term_type[16];		/* Terminal type                */ +        int	signal;			/* Signal to send               */ +        int	pid;			/* Process to send to           */ +        char	exec_name[128];	        /* Program to execute           */ +        char	reserved[128];		/* For future expansion.        */ +}; + + +/* + *	Because of legacy interfaces, "runlevel" and "sleeptime" + *	aren't in a separate struct in the union. + * + *	The weird sizes are because init expects the whole + *	struct to be 384 bytes. + */ +struct init_request { +        int	magic;			/* Magic number                 */ +        int	cmd;			/* What kind of request         */ +        int	runlevel;		/* Runlevel to change to        */ +        int	sleeptime;		/* Time between TERM and KILL   */ +        union { +                struct init_request_bsd	bsd; +                char			data[368]; +        } i; +}; + +#endif diff --git a/src/libsystemd-shared/include/systemd-shared/install-printf.h b/src/libsystemd-shared/include/systemd-shared/install-printf.h new file mode 100644 index 0000000000..8a570fc265 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/install-printf.h @@ -0,0 +1,24 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "install.h" + +int install_full_printf(UnitFileInstallInfo *i, const char *format, char **ret); diff --git a/src/libsystemd-shared/include/systemd-shared/install.h b/src/libsystemd-shared/include/systemd-shared/install.h new file mode 100644 index 0000000000..52254974c7 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/install.h @@ -0,0 +1,257 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2011 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/hashmap.h" +#include "systemd-basic/macro.h" +#include "systemd-basic/strv.h" +#include "systemd-basic/unit-name.h" + +typedef enum UnitFileChangeType UnitFileChangeType; +typedef enum UnitFilePresetMode UnitFilePresetMode; +typedef enum UnitFileScope UnitFileScope; +typedef enum UnitFileState UnitFileState; +typedef enum UnitFileType UnitFileType; +typedef struct UnitFileChange UnitFileChange; +typedef struct UnitFileInstallInfo UnitFileInstallInfo; +typedef struct UnitFileList UnitFileList; + +#include "path-lookup.h" + +enum UnitFileScope { +        UNIT_FILE_SYSTEM, +        UNIT_FILE_GLOBAL, +        UNIT_FILE_USER, +        _UNIT_FILE_SCOPE_MAX, +        _UNIT_FILE_SCOPE_INVALID = -1 +}; + +enum UnitFileState { +        UNIT_FILE_ENABLED, +        UNIT_FILE_ENABLED_RUNTIME, +        UNIT_FILE_LINKED, +        UNIT_FILE_LINKED_RUNTIME, +        UNIT_FILE_MASKED, +        UNIT_FILE_MASKED_RUNTIME, +        UNIT_FILE_STATIC, +        UNIT_FILE_DISABLED, +        UNIT_FILE_INDIRECT, +        UNIT_FILE_GENERATED, +        UNIT_FILE_TRANSIENT, +        UNIT_FILE_BAD, +        _UNIT_FILE_STATE_MAX, +        _UNIT_FILE_STATE_INVALID = -1 +}; + +enum UnitFilePresetMode { +        UNIT_FILE_PRESET_FULL, +        UNIT_FILE_PRESET_ENABLE_ONLY, +        UNIT_FILE_PRESET_DISABLE_ONLY, +        _UNIT_FILE_PRESET_MAX, +        _UNIT_FILE_PRESET_INVALID = -1 +}; + +enum UnitFileChangeType { +        UNIT_FILE_SYMLINK, +        UNIT_FILE_UNLINK, +        UNIT_FILE_IS_MASKED, +        UNIT_FILE_IS_DANGLING, +        _UNIT_FILE_CHANGE_TYPE_MAX, +        _UNIT_FILE_CHANGE_INVALID = INT_MIN +}; + +/* type can either one of the UnitFileChangeTypes listed above, or a negative error. + * If source is specified, it should be the contents of the path symlink. + * In case of an error, source should be the existing symlink contents or NULL + */ +struct UnitFileChange { +        int type; /* UnitFileChangeType or bust */ +        char *path; +        char *source; +}; + +static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, unsigned n_changes) { +        unsigned i; +        for (i = 0; i < n_changes; i++) +                if (IN_SET(changes[i].type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK)) +                        return true; +        return false; +} + +struct UnitFileList { +        char *path; +        UnitFileState state; +}; + +enum UnitFileType { +        UNIT_FILE_TYPE_REGULAR, +        UNIT_FILE_TYPE_SYMLINK, +        UNIT_FILE_TYPE_MASKED, +        _UNIT_FILE_TYPE_MAX, +        _UNIT_FILE_TYPE_INVALID = -1, +}; + +struct UnitFileInstallInfo { +        char *name; +        char *path; + +        char **aliases; +        char **wanted_by; +        char **required_by; +        char **also; + +        char *default_instance; + +        UnitFileType type; + +        char *symlink_target; +}; + +static inline bool UNIT_FILE_INSTALL_INFO_HAS_RULES(UnitFileInstallInfo *i) { +        assert(i); + +        return !strv_isempty(i->aliases) || +               !strv_isempty(i->wanted_by) || +               !strv_isempty(i->required_by); +} + +static inline bool UNIT_FILE_INSTALL_INFO_HAS_ALSO(UnitFileInstallInfo *i) { +        assert(i); + +        return !strv_isempty(i->also); +} + +bool unit_type_may_alias(UnitType type) _const_; +bool unit_type_may_template(UnitType type) _const_; + +int unit_file_enable( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_disable( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_reenable( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_preset( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                UnitFilePresetMode mode, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_preset_all( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                UnitFilePresetMode mode, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_mask( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_unmask( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_link( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_revert( +                UnitFileScope scope, +                const char *root_dir, +                char **files, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_set_default( +                UnitFileScope scope, +                const char *root_dir, +                const char *file, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); +int unit_file_get_default( +                UnitFileScope scope, +                const char *root_dir, +                char **name); +int unit_file_add_dependency( +                UnitFileScope scope, +                bool runtime, +                const char *root_dir, +                char **files, +                const char *target, +                UnitDependency dep, +                bool force, +                UnitFileChange **changes, +                unsigned *n_changes); + +int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret); +int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name); + +int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns); +Hashmap* unit_file_list_free(Hashmap *h); + +int unit_file_changes_add(UnitFileChange **changes, unsigned *n_changes, UnitFileChangeType type, const char *path, const char *source); +void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes); +void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, unsigned n_changes, bool quiet); + +int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name); + +const char *unit_file_state_to_string(UnitFileState s) _const_; +UnitFileState unit_file_state_from_string(const char *s) _pure_; +/* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */ + +const char *unit_file_change_type_to_string(UnitFileChangeType s) _const_; +UnitFileChangeType unit_file_change_type_from_string(const char *s) _pure_; + +const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_; +UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_; diff --git a/src/libsystemd-shared/include/systemd-shared/logs-show.h b/src/libsystemd-shared/include/systemd-shared/logs-show.h new file mode 100644 index 0000000000..1596a5875a --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/logs-show.h @@ -0,0 +1,71 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2012 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <stddef.h> +#include <stdio.h> +#include <sys/types.h> + +#include <systemd/sd-journal.h> + +#include "systemd-basic/macro.h" +#include "systemd-basic/time-util.h" +#include "systemd-basic/util.h" + +#include "output-mode.h" + +int output_journal( +                FILE *f, +                sd_journal *j, +                OutputMode mode, +                unsigned n_columns, +                OutputFlags flags, +                bool *ellipsized); + +int add_match_this_boot(sd_journal *j, const char *machine); + +int add_matches_for_unit( +                sd_journal *j, +                const char *unit); + +int add_matches_for_user_unit( +                sd_journal *j, +                const char *unit, +                uid_t uid); + +int show_journal_by_unit( +                FILE *f, +                const char *unit, +                OutputMode mode, +                unsigned n_columns, +                usec_t not_before, +                unsigned how_many, +                uid_t uid, +                OutputFlags flags, +                int journal_open_flags, +                bool system_unit, +                bool *ellipsized); + +void json_escape( +                FILE *f, +                const char* p, +                size_t l, +                OutputFlags flags); diff --git a/src/libsystemd-shared/include/systemd-shared/machine-image.h b/src/libsystemd-shared/include/systemd-shared/machine-image.h new file mode 100644 index 0000000000..7c46fd6996 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/machine-image.h @@ -0,0 +1,103 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <stdint.h> + +#include "systemd-basic/hashmap.h" +#include "systemd-basic/lockfile-util.h" +#include "systemd-basic/macro.h" +#include "systemd-basic/path-util.h" +#include "systemd-basic/string-util.h" +#include "systemd-basic/time-util.h" + +typedef enum ImageType { +        IMAGE_DIRECTORY, +        IMAGE_SUBVOLUME, +        IMAGE_RAW, +        _IMAGE_TYPE_MAX, +        _IMAGE_TYPE_INVALID = -1 +} ImageType; + +typedef struct Image { +        ImageType type; +        char *name; +        char *path; +        bool read_only; + +        usec_t crtime; +        usec_t mtime; + +        uint64_t usage; +        uint64_t usage_exclusive; +        uint64_t limit; +        uint64_t limit_exclusive; + +        void *userdata; +} Image; + +Image *image_unref(Image *i); +void image_hashmap_free(Hashmap *map); + +DEFINE_TRIVIAL_CLEANUP_FUNC(Image*, image_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, image_hashmap_free); + +int image_find(const char *name, Image **ret); +int image_discover(Hashmap *map); + +int image_remove(Image *i); +int image_rename(Image *i, const char *new_name); +int image_clone(Image *i, const char *new_name, bool read_only); +int image_read_only(Image *i, bool b); + +const char* image_type_to_string(ImageType t) _const_; +ImageType image_type_from_string(const char *s) _pure_; + +bool image_name_is_valid(const char *s) _pure_; + +int image_path_lock(const char *path, int operation, LockFile *global, LockFile *local); +int image_name_lock(const char *name, int operation, LockFile *ret); + +int image_set_limit(Image *i, uint64_t referenced_max); + +static inline bool IMAGE_IS_HIDDEN(const struct Image *i) { +        assert(i); + +        return i->name && i->name[0] == '.'; +} + +static inline bool IMAGE_IS_VENDOR(const struct Image *i) { +        assert(i); + +        return i->path && path_startswith(i->path, "/usr"); +} + +static inline bool IMAGE_IS_HOST(const struct Image *i) { +        assert(i); + +        if (i->name && streq(i->name, ".host")) +                return true; + +        if (i->path && path_equal(i->path, "/")) +                return true; + +        return false; +} diff --git a/src/libsystemd-shared/include/systemd-shared/machine-pool.h b/src/libsystemd-shared/include/systemd-shared/machine-pool.h new file mode 100644 index 0000000000..fe99b7e0ae --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/machine-pool.h @@ -0,0 +1,30 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2015 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdint.h> + +#include <systemd/sd-bus.h> + +/* Grow the /var/lib/machines directory after each 10MiB written */ +#define GROW_INTERVAL_BYTES (UINT64_C(10) * UINT64_C(1024) * UINT64_C(1024)) + +int setup_machine_directory(uint64_t size, sd_bus_error *error); +int grow_machine_directory(void); diff --git a/src/libsystemd-shared/include/systemd-shared/output-mode.h b/src/libsystemd-shared/include/systemd-shared/output-mode.h new file mode 100644 index 0000000000..2147470bdd --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/output-mode.h @@ -0,0 +1,57 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/macro.h" + +typedef enum OutputMode { +        OUTPUT_SHORT, +        OUTPUT_SHORT_ISO, +        OUTPUT_SHORT_PRECISE, +        OUTPUT_SHORT_MONOTONIC, +        OUTPUT_SHORT_UNIX, +        OUTPUT_VERBOSE, +        OUTPUT_EXPORT, +        OUTPUT_JSON, +        OUTPUT_JSON_PRETTY, +        OUTPUT_JSON_SSE, +        OUTPUT_CAT, +        _OUTPUT_MODE_MAX, +        _OUTPUT_MODE_INVALID = -1 +} OutputMode; + +/* The output flags definitions are shared by the logs and process tree output. Some apply to both, some only to the + * logs output, others only to the process tree output. */ + +typedef enum OutputFlags { +        OUTPUT_SHOW_ALL       = 1 << 0, +        OUTPUT_FOLLOW         = 1 << 1, +        OUTPUT_WARN_CUTOFF    = 1 << 2, +        OUTPUT_FULL_WIDTH     = 1 << 3, +        OUTPUT_COLOR          = 1 << 4, +        OUTPUT_CATALOG        = 1 << 5, +        OUTPUT_BEGIN_NEWLINE  = 1 << 6, +        OUTPUT_UTC            = 1 << 7, +        OUTPUT_KERNEL_THREADS = 1 << 8, +        OUTPUT_NO_HOSTNAME    = 1 << 9, +} OutputFlags; + +const char* output_mode_to_string(OutputMode m) _const_; +OutputMode output_mode_from_string(const char *s) _pure_; diff --git a/src/libsystemd-shared/include/systemd-shared/pager.h b/src/libsystemd-shared/include/systemd-shared/pager.h new file mode 100644 index 0000000000..57bba54d92 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/pager.h @@ -0,0 +1,30 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/macro.h" + +int pager_open(bool no_pager, bool jump_to_end); +void pager_close(void); +bool pager_have(void) _pure_; + +int show_man_page(const char *page, bool null_stdio); diff --git a/src/libsystemd-shared/include/systemd-shared/path-lookup.h b/src/libsystemd-shared/include/systemd-shared/path-lookup.h new file mode 100644 index 0000000000..43179fd9af --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/path-lookup.h @@ -0,0 +1,77 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/macro.h" + +typedef struct LookupPaths LookupPaths; + +#include "install.h" + +typedef enum LookupPathsFlags { +        LOOKUP_PATHS_EXCLUDE_GENERATED = 1, +} LookupPathsFlags; + +struct LookupPaths { +        /* Where we look for unit files. This includes the individual special paths below, but also any vendor +         * supplied, static unit file paths. */ +        char **search_path; + +        /* Where we shall create or remove our installation symlinks, aka "configuration", and where the user/admin +         * shall place his own unit files. */ +        char *persistent_config; +        char *runtime_config; + +        /* Where to place generated unit files (i.e. those a "generator" tool generated). Note the special semantics of +         * this directory: the generators are flushed each time a "systemctl daemon-reload" is issued. The user should +         * not alter these directories directly. */ +        char *generator; +        char *generator_early; +        char *generator_late; + +        /* Where to place transient unit files (i.e. those created dynamically via the bus API). Note the special +         * semantics of this directory: all units created transiently have their unit files removed as the transient +         * unit is unloaded. The user should not alter this directory directly. */ +        char *transient; + +        /* Where the snippets created by "systemctl set-property" are placed. Note that for transient units, the +         * snippets are placed in the transient directory though (see above). The user should not alter this directory +         * directly. */ +        char *persistent_control; +        char *runtime_control; + +        /* The root directory prepended to all items above, or NULL */ +        char *root_dir; +}; + +int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); + +int lookup_paths_reduce(LookupPaths *p); + +int lookup_paths_mkdir_generator(LookupPaths *p); +void lookup_paths_trim_generator(LookupPaths *p); +void lookup_paths_flush_generator(LookupPaths *p); + +void lookup_paths_free(LookupPaths *p); +#define _cleanup_lookup_paths_free_ _cleanup_(lookup_paths_free) + +char **generator_binary_paths(UnitFileScope scope); diff --git a/src/libsystemd-shared/include/systemd-shared/ptyfwd.h b/src/libsystemd-shared/include/systemd-shared/ptyfwd.h new file mode 100644 index 0000000000..ae9ef32d79 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/ptyfwd.h @@ -0,0 +1,48 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010-2013 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include <systemd/sd-event.h> + +#include "systemd-basic/macro.h" + +typedef struct PTYForward PTYForward; + +typedef enum PTYForwardFlags { +        PTY_FORWARD_READ_ONLY = 1, + +        /* Continue reading after hangup? */ +        PTY_FORWARD_IGNORE_VHANGUP = 2, + +        /* Continue reading after hangup but only if we never read anything else? */ +        PTY_FORWARD_IGNORE_INITIAL_VHANGUP = 4, +} PTYForwardFlags; + +int pty_forward_new(sd_event *event, int master, PTYForwardFlags flags, PTYForward **f); +PTYForward *pty_forward_free(PTYForward *f); + +int pty_forward_get_last_char(PTYForward *f, char *ch); + +int pty_forward_set_ignore_vhangup(PTYForward *f, bool ignore_vhangup); +int pty_forward_get_ignore_vhangup(PTYForward *f); + +DEFINE_TRIVIAL_CLEANUP_FUNC(PTYForward*, pty_forward_free); diff --git a/src/libsystemd-shared/include/systemd-shared/resolve-util.h b/src/libsystemd-shared/include/systemd-shared/resolve-util.h new file mode 100644 index 0000000000..2a6173d79a --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/resolve-util.h @@ -0,0 +1,60 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2016 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/macro.h" + +typedef enum ResolveSupport ResolveSupport; +typedef enum DnssecMode DnssecMode; + +enum ResolveSupport { +        RESOLVE_SUPPORT_NO, +        RESOLVE_SUPPORT_YES, +        RESOLVE_SUPPORT_RESOLVE, +        _RESOLVE_SUPPORT_MAX, +        _RESOLVE_SUPPORT_INVALID = -1 +}; + +enum DnssecMode { +        /* No DNSSEC validation is done */ +        DNSSEC_NO, + +        /* Validate locally, if the server knows DO, but if not, +         * don't. Don't trust the AD bit. If the server doesn't do +         * DNSSEC properly, downgrade to non-DNSSEC operation. Of +         * course, we then are vulnerable to a downgrade attack, but +         * that's life and what is configured. */ +        DNSSEC_ALLOW_DOWNGRADE, + +        /* Insist on DNSSEC server support, and rather fail than downgrading. */ +        DNSSEC_YES, + +        _DNSSEC_MODE_MAX, +        _DNSSEC_MODE_INVALID = -1 +}; + +int config_parse_resolve_support(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_dnssec_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); + +const char* resolve_support_to_string(ResolveSupport p) _const_; +ResolveSupport resolve_support_from_string(const char *s) _pure_; + +const char* dnssec_mode_to_string(DnssecMode p) _const_; +DnssecMode dnssec_mode_from_string(const char *s) _pure_; diff --git a/src/libsystemd-shared/include/systemd-shared/seccomp-util.h b/src/libsystemd-shared/include/systemd-shared/seccomp-util.h new file mode 100644 index 0000000000..be33eecb85 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/seccomp-util.h @@ -0,0 +1,35 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <seccomp.h> +#include <stdint.h> + +const char* seccomp_arch_to_string(uint32_t c); +int seccomp_arch_from_string(const char *n, uint32_t *ret); + +int seccomp_add_secondary_archs(scmp_filter_ctx *c); + +typedef struct SystemCallFilterSet { +        const char *set_name; +        const char *value; +} SystemCallFilterSet; + +extern const SystemCallFilterSet syscall_filter_sets[]; diff --git a/src/libsystemd-shared/include/systemd-shared/sleep-config.h b/src/libsystemd-shared/include/systemd-shared/sleep-config.h new file mode 100644 index 0000000000..ad10039ff4 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/sleep-config.h @@ -0,0 +1,26 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +int parse_sleep_config(const char *verb, char ***modes, char ***states); + +int can_sleep(const char *verb); +int can_sleep_disk(char **types); +int can_sleep_state(char **types); diff --git a/src/libsystemd-shared/include/systemd-shared/spawn-ask-password-agent.h b/src/libsystemd-shared/include/systemd-shared/spawn-ask-password-agent.h new file mode 100644 index 0000000000..fb0749b13f --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/spawn-ask-password-agent.h @@ -0,0 +1,23 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2011 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +int ask_password_agent_open(void); +void ask_password_agent_close(void); diff --git a/src/libsystemd-shared/include/systemd-shared/spawn-polkit-agent.h b/src/libsystemd-shared/include/systemd-shared/spawn-polkit-agent.h new file mode 100644 index 0000000000..42b2989ded --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/spawn-polkit-agent.h @@ -0,0 +1,23 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2012 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +int polkit_agent_open(void); +void polkit_agent_close(void); diff --git a/src/libsystemd-shared/include/systemd-shared/specifier.h b/src/libsystemd-shared/include/systemd-shared/specifier.h new file mode 100644 index 0000000000..6b1623ee61 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/specifier.h @@ -0,0 +1,37 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +typedef int (*SpecifierCallback)(char specifier, void *data, void *userdata, char **ret); + +typedef struct Specifier { +        const char specifier; +        const SpecifierCallback lookup; +        void *data; +} Specifier; + +int specifier_printf(const char *text, const Specifier table[], void *userdata, char **ret); + +int specifier_string(char specifier, void *data, void *userdata, char **ret); + +int specifier_machine_id(char specifier, void *data, void *userdata, char **ret); +int specifier_boot_id(char specifier, void *data, void *userdata, char **ret); +int specifier_host_name(char specifier, void *data, void *userdata, char **ret); +int specifier_kernel_release(char specifier, void *data, void *userdata, char **ret); diff --git a/src/libsystemd-shared/include/systemd-shared/switch-root.h b/src/libsystemd-shared/include/systemd-shared/switch-root.h new file mode 100644 index 0000000000..a7a080b3e8 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/switch-root.h @@ -0,0 +1,23 @@ +#pragma once + +#include <stdbool.h> +/*** +  This file is part of systemd. + +  Copyright 2012 Harald Hoyer, Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, unsigned long mountflags); diff --git a/src/libsystemd-shared/include/systemd-shared/sysctl-util.h b/src/libsystemd-shared/include/systemd-shared/sysctl-util.h new file mode 100644 index 0000000000..2decb39f58 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/sysctl-util.h @@ -0,0 +1,25 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2011 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +char *sysctl_normalize(char *s); +int sysctl_read(const char *property, char **value); +int sysctl_write(const char *property, const char *value); + diff --git a/src/libsystemd-shared/include/systemd-shared/test-tables.h b/src/libsystemd-shared/include/systemd-shared/test-tables.h new file mode 100644 index 0000000000..228e510104 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/test-tables.h @@ -0,0 +1,60 @@ +/*** +  This file is part of systemd + +  Copyright 2013 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdio.h> +#include <stdlib.h> + +typedef const char* (*lookup_t)(int); +typedef int (*reverse_t)(const char*); + +static inline void _test_table(const char *name, +                               lookup_t lookup, +                               reverse_t reverse, +                               int size, +                               bool sparse) { +        int i, boring = 0; + +        for (i = -1; i < size + 1; i++) { +                const char* val = lookup(i); +                int rev; + +                if (val) { +                        rev = reverse(val); +                        boring = 0; +                } else { +                        rev = reverse("--no-such--value----"); +                        boring += i >= 0; +                } + +                if (boring < 1 || i == size) +                        printf("%s: %d → %s → %d\n", name, i, val, rev); +                else if (boring == 1) +                        printf("%*s  ...\n", (int) strlen(name), ""); + +                assert_se(!(i >= 0 && i < size ? +                            sparse ? rev != i && rev != -1 : val == NULL || rev != i : +                            val != NULL || rev != -1)); +        } +} + +#define test_table(lower, upper) \ +        _test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, false) + +#define test_table_sparse(lower, upper) \ +        _test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, true) diff --git a/src/libsystemd-shared/include/systemd-shared/tests.h b/src/libsystemd-shared/include/systemd-shared/tests.h new file mode 100644 index 0000000000..93f09013a1 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/tests.h @@ -0,0 +1,22 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2016 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +char* setup_fake_runtime_dir(void); diff --git a/src/libsystemd-shared/include/systemd-shared/udev-util.h b/src/libsystemd-shared/include/systemd-shared/udev-util.h new file mode 100644 index 0000000000..a4cfbf5ba2 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/udev-util.h @@ -0,0 +1,44 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2013 Zbigniew Jędrzejewski-Szmek + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "systemd-basic/util.h" +#include "udev.h" + +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev*, udev_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_device*, udev_device_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_enumerate*, udev_enumerate_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_rules*, udev_rules_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_ctrl*, udev_ctrl_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_ctrl_connection*, udev_ctrl_connection_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_ctrl_msg*, udev_ctrl_msg_unref); +DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_monitor*, udev_monitor_unref); + +#define _cleanup_udev_unref_ _cleanup_(udev_unrefp) +#define _cleanup_udev_device_unref_ _cleanup_(udev_device_unrefp) +#define _cleanup_udev_enumerate_unref_ _cleanup_(udev_enumerate_unrefp) +#define _cleanup_udev_event_unref_ _cleanup_(udev_event_unrefp) +#define _cleanup_udev_rules_unref_ _cleanup_(udev_rules_unrefp) +#define _cleanup_udev_ctrl_unref_ _cleanup_(udev_ctrl_unrefp) +#define _cleanup_udev_ctrl_connection_unref_ _cleanup_(udev_ctrl_connection_unrefp) +#define _cleanup_udev_ctrl_msg_unref_ _cleanup_(udev_ctrl_msg_unrefp) +#define _cleanup_udev_monitor_unref_ _cleanup_(udev_monitor_unrefp) +#define _cleanup_udev_list_cleanup_ _cleanup_(udev_list_cleanup) diff --git a/src/libsystemd-shared/include/systemd-shared/uid-range.h b/src/libsystemd-shared/include/systemd-shared/uid-range.h new file mode 100644 index 0000000000..4044eb4c9c --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/uid-range.h @@ -0,0 +1,33 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2014 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <sys/types.h> + +typedef struct UidRange { +        uid_t start, nr; +} UidRange; + +int uid_range_add(UidRange **p, unsigned *n, uid_t start, uid_t nr); +int uid_range_add_str(UidRange **p, unsigned *n, const char *s); + +int uid_range_next_lower(const UidRange *p, unsigned n, uid_t *uid); +bool uid_range_contains(const UidRange *p, unsigned n, uid_t uid); diff --git a/src/libsystemd-shared/include/systemd-shared/utmp-wtmp.h b/src/libsystemd-shared/include/systemd-shared/utmp-wtmp.h new file mode 100644 index 0000000000..abc9e5dd10 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/utmp-wtmp.h @@ -0,0 +1,74 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2010 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <sys/types.h> + +#include "systemd-basic/time-util.h" +#include "systemd-basic/util.h" + +#ifdef HAVE_UTMP +int utmp_get_runlevel(int *runlevel, int *previous); + +int utmp_put_shutdown(void); +int utmp_put_reboot(usec_t timestamp); +int utmp_put_runlevel(int runlevel, int previous); + +int utmp_put_dead_process(const char *id, pid_t pid, int code, int status); +int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line, int ut_type, const char *user); + +int utmp_wall( +        const char *message, +        const char *username, +        const char *origin_tty, +        bool (*match_tty)(const char *tty, void *userdata), +        void *userdata); + +#else /* HAVE_UTMP */ + +static inline int utmp_get_runlevel(int *runlevel, int *previous) { +        return -ESRCH; +} +static inline int utmp_put_shutdown(void) { +        return 0; +} +static inline int utmp_put_reboot(usec_t timestamp) { +        return 0; +} +static inline int utmp_put_runlevel(int runlevel, int previous) { +        return 0; +} +static inline int utmp_put_dead_process(const char *id, pid_t pid, int code, int status) { +        return 0; +} +static inline int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line, int ut_type, const char *user) { +        return 0; +} +static inline int utmp_wall( +                const char *message, +                const char *username, +                const char *origin_tty, +                bool (*match_tty)(const char *tty, void *userdata), +                void *userdata) { +        return 0; +} + +#endif /* HAVE_UTMP */ diff --git a/src/libsystemd-shared/include/systemd-shared/vlan-util.h b/src/libsystemd-shared/include/systemd-shared/vlan-util.h new file mode 100644 index 0000000000..b7c2f03383 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/vlan-util.h @@ -0,0 +1,35 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2016 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <inttypes.h> +#include <stdbool.h> + +#define VLANID_MAX 4094 +#define VLANID_INVALID UINT16_MAX + +/* Note that we permit VLAN Id 0 here, as that is apparently OK by the Linux kernel */ +static inline bool vlanid_is_valid(uint16_t id) { +        return id <= VLANID_MAX; +} + +int parse_vlanid(const char *p, uint16_t *ret); + +int config_parse_vlanid(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); diff --git a/src/libsystemd-shared/include/systemd-shared/watchdog.h b/src/libsystemd-shared/include/systemd-shared/watchdog.h new file mode 100644 index 0000000000..fd13cce283 --- /dev/null +++ b/src/libsystemd-shared/include/systemd-shared/watchdog.h @@ -0,0 +1,29 @@ +#pragma once + +/*** +  This file is part of systemd. + +  Copyright 2012 Lennart Poettering + +  systemd is free software; you can redistribute it and/or modify it +  under the terms of the GNU Lesser General Public License as published by +  the Free Software Foundation; either version 2.1 of the License, or +  (at your option) any later version. + +  systemd is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. + +  You should have received a copy of the GNU Lesser General Public License +  along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> + +#include "systemd-basic/time-util.h" +#include "systemd-basic/util.h" + +int watchdog_set_timeout(usec_t *usec); +int watchdog_ping(void); +void watchdog_close(bool disarm); | 
