2013-11-06 08:33:42 +01:00
|
|
|
/***
|
2017-11-18 18:18:16 +01:00
|
|
|
SPDX-License-Identifier: LGPL-2.1+
|
|
|
|
|
2013-11-06 08:33:42 +01:00
|
|
|
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.
|
|
|
|
***/
|
|
|
|
|
2014-01-17 13:43:25 +01:00
|
|
|
LIBSYSTEMD_209 {
|
2013-11-06 08:33:42 +01:00
|
|
|
global:
|
2014-02-19 16:33:09 +01:00
|
|
|
/* sd-journal */
|
|
|
|
sd_journal_print;
|
|
|
|
sd_journal_printv;
|
|
|
|
sd_journal_send;
|
|
|
|
sd_journal_sendv;
|
|
|
|
sd_journal_stream_fd;
|
|
|
|
sd_journal_open;
|
|
|
|
sd_journal_close;
|
|
|
|
sd_journal_previous;
|
|
|
|
sd_journal_next;
|
|
|
|
sd_journal_previous_skip;
|
|
|
|
sd_journal_next_skip;
|
|
|
|
sd_journal_get_realtime_usec;
|
|
|
|
sd_journal_get_monotonic_usec;
|
|
|
|
sd_journal_get_data;
|
|
|
|
sd_journal_enumerate_data;
|
|
|
|
sd_journal_restart_data;
|
|
|
|
sd_journal_add_match;
|
|
|
|
sd_journal_flush_matches;
|
|
|
|
sd_journal_seek_head;
|
|
|
|
sd_journal_seek_tail;
|
|
|
|
sd_journal_seek_monotonic_usec;
|
|
|
|
sd_journal_seek_realtime_usec;
|
|
|
|
sd_journal_seek_cursor;
|
|
|
|
sd_journal_get_cursor;
|
|
|
|
sd_journal_get_fd;
|
|
|
|
sd_journal_process;
|
|
|
|
sd_journal_print_with_location;
|
|
|
|
sd_journal_printv_with_location;
|
|
|
|
sd_journal_send_with_location;
|
|
|
|
sd_journal_sendv_with_location;
|
|
|
|
sd_journal_get_cutoff_realtime_usec;
|
|
|
|
sd_journal_get_cutoff_monotonic_usec;
|
|
|
|
sd_journal_wait;
|
|
|
|
sd_journal_open_directory;
|
|
|
|
sd_journal_add_disjunction;
|
|
|
|
sd_journal_perror;
|
|
|
|
sd_journal_perror_with_location;
|
|
|
|
sd_journal_get_usage;
|
|
|
|
sd_journal_test_cursor;
|
|
|
|
sd_journal_query_unique;
|
|
|
|
sd_journal_enumerate_unique;
|
|
|
|
sd_journal_restart_unique;
|
|
|
|
sd_journal_get_catalog;
|
|
|
|
sd_journal_get_catalog_for_message_id;
|
|
|
|
sd_journal_set_data_threshold;
|
|
|
|
sd_journal_get_data_threshold;
|
|
|
|
sd_journal_reliable_fd;
|
|
|
|
sd_journal_get_events;
|
|
|
|
sd_journal_get_timeout;
|
|
|
|
sd_journal_add_conjunction;
|
|
|
|
sd_journal_open_files;
|
|
|
|
sd_journal_open_container;
|
|
|
|
|
2015-05-11 13:49:29 +02:00
|
|
|
/* sd-daemon */
|
2014-02-18 18:50:11 +01:00
|
|
|
sd_booted;
|
|
|
|
sd_is_fifo;
|
|
|
|
sd_is_mq;
|
|
|
|
sd_is_socket;
|
|
|
|
sd_is_socket_inet;
|
|
|
|
sd_is_socket_unix;
|
|
|
|
sd_is_special;
|
|
|
|
sd_listen_fds;
|
|
|
|
sd_notify;
|
|
|
|
sd_notifyf;
|
|
|
|
sd_watchdog_enabled;
|
|
|
|
|
2014-02-19 16:33:09 +01:00
|
|
|
/* sd-id128 */
|
2014-01-25 22:05:08 +01:00
|
|
|
sd_id128_to_string;
|
|
|
|
sd_id128_from_string;
|
|
|
|
sd_id128_randomize;
|
|
|
|
sd_id128_get_machine;
|
|
|
|
sd_id128_get_boot;
|
|
|
|
|
2014-02-19 16:33:09 +01:00
|
|
|
/* sd-login */
|
2014-01-19 06:12:20 +01:00
|
|
|
sd_get_seats;
|
|
|
|
sd_get_sessions;
|
|
|
|
sd_get_uids;
|
|
|
|
sd_login_monitor_flush;
|
|
|
|
sd_login_monitor_get_fd;
|
|
|
|
sd_login_monitor_new;
|
|
|
|
sd_login_monitor_unref;
|
|
|
|
sd_pid_get_owner_uid;
|
|
|
|
sd_pid_get_session;
|
|
|
|
sd_seat_can_multi_session;
|
|
|
|
sd_seat_get_active;
|
|
|
|
sd_seat_get_sessions;
|
|
|
|
sd_session_get_seat;
|
|
|
|
sd_session_get_uid;
|
|
|
|
sd_session_is_active;
|
|
|
|
sd_uid_get_seats;
|
|
|
|
sd_uid_get_sessions;
|
|
|
|
sd_uid_get_state;
|
|
|
|
sd_uid_is_on_seat;
|
|
|
|
sd_pid_get_unit;
|
|
|
|
sd_session_get_service;
|
|
|
|
sd_session_get_type;
|
|
|
|
sd_session_get_class;
|
|
|
|
sd_session_get_display;
|
|
|
|
sd_session_get_state;
|
|
|
|
sd_seat_can_tty;
|
|
|
|
sd_seat_can_graphical;
|
|
|
|
sd_session_get_tty;
|
|
|
|
sd_login_monitor_get_events;
|
|
|
|
sd_login_monitor_get_timeout;
|
|
|
|
sd_pid_get_user_unit;
|
|
|
|
sd_pid_get_machine_name;
|
|
|
|
sd_get_machine_names;
|
|
|
|
sd_pid_get_slice;
|
|
|
|
sd_session_get_vt;
|
|
|
|
sd_session_is_remote;
|
|
|
|
sd_session_get_remote_user;
|
|
|
|
sd_session_get_remote_host;
|
2014-03-12 20:54:29 +01:00
|
|
|
local:
|
|
|
|
*;
|
|
|
|
};
|
|
|
|
|
|
|
|
LIBSYSTEMD_211 {
|
|
|
|
global:
|
|
|
|
sd_machine_get_class;
|
2014-03-17 18:14:26 +01:00
|
|
|
sd_peer_get_session;
|
|
|
|
sd_peer_get_owner_uid;
|
|
|
|
sd_peer_get_unit;
|
|
|
|
sd_peer_get_user_unit;
|
|
|
|
sd_peer_get_machine_name;
|
|
|
|
sd_peer_get_slice;
|
2014-05-19 02:33:20 +02:00
|
|
|
} LIBSYSTEMD_209;
|
|
|
|
|
|
|
|
LIBSYSTEMD_213 {
|
|
|
|
global:
|
|
|
|
sd_uid_get_display;
|
2014-06-11 15:30:28 +02:00
|
|
|
} LIBSYSTEMD_211;
|
|
|
|
|
|
|
|
LIBSYSTEMD_214 {
|
|
|
|
global:
|
|
|
|
sd_pid_notify;
|
|
|
|
sd_pid_notifyf;
|
|
|
|
} LIBSYSTEMD_213;
|
2014-01-19 06:12:20 +01:00
|
|
|
|
2014-07-11 03:15:21 +02:00
|
|
|
LIBSYSTEMD_216 {
|
|
|
|
global:
|
2014-07-17 01:48:40 +02:00
|
|
|
sd_machine_get_ifindices;
|
2014-07-11 03:15:21 +02:00
|
|
|
} LIBSYSTEMD_214;
|
|
|
|
|
2014-09-20 18:42:29 +02:00
|
|
|
LIBSYSTEMD_217 {
|
|
|
|
global:
|
|
|
|
sd_session_get_desktop;
|
|
|
|
} LIBSYSTEMD_216;
|
|
|
|
|
2015-01-06 00:26:25 +01:00
|
|
|
LIBSYSTEMD_219 {
|
|
|
|
global:
|
|
|
|
sd_pid_notify_with_fds;
|
|
|
|
} LIBSYSTEMD_217;
|
|
|
|
|
2015-04-30 11:58:06 +02:00
|
|
|
LIBSYSTEMD_220 {
|
|
|
|
global:
|
|
|
|
sd_pid_get_user_slice;
|
|
|
|
sd_peer_get_user_slice;
|
|
|
|
} LIBSYSTEMD_219;
|
|
|
|
|
2015-05-22 14:32:51 +02:00
|
|
|
LIBSYSTEMD_221 {
|
2014-06-11 15:30:28 +02:00
|
|
|
global:
|
2014-02-19 16:33:09 +01:00
|
|
|
/* sd-bus */
|
2014-01-27 21:34:54 +01:00
|
|
|
sd_bus_default;
|
2013-11-11 22:00:48 +01:00
|
|
|
sd_bus_default_user;
|
|
|
|
sd_bus_default_system;
|
2014-01-27 21:34:54 +01:00
|
|
|
sd_bus_open;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_open_user;
|
|
|
|
sd_bus_open_system;
|
|
|
|
sd_bus_open_system_remote;
|
2014-12-23 23:38:13 +01:00
|
|
|
sd_bus_open_system_machine;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_new;
|
|
|
|
sd_bus_set_address;
|
|
|
|
sd_bus_set_fd;
|
|
|
|
sd_bus_set_exec;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_get_address;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_set_bus_client;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_is_bus_client;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_set_server;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_is_server;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_set_anonymous;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_is_anonymous;
|
2013-12-10 17:41:39 +01:00
|
|
|
sd_bus_set_trusted;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_is_trusted;
|
2014-03-19 04:17:00 +01:00
|
|
|
sd_bus_set_monitor;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_is_monitor;
|
2014-11-04 16:13:49 +01:00
|
|
|
sd_bus_set_description;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_get_description;
|
|
|
|
sd_bus_negotiate_creds;
|
|
|
|
sd_bus_negotiate_timestamp;
|
|
|
|
sd_bus_negotiate_fds;
|
|
|
|
sd_bus_can_send;
|
|
|
|
sd_bus_get_creds_mask;
|
2015-02-17 20:30:33 +01:00
|
|
|
sd_bus_set_allow_interactive_authorization;
|
|
|
|
sd_bus_get_allow_interactive_authorization;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_start;
|
|
|
|
sd_bus_close;
|
2013-12-20 23:25:43 +01:00
|
|
|
sd_bus_try_close;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_ref;
|
|
|
|
sd_bus_unref;
|
|
|
|
sd_bus_is_open;
|
2014-11-28 16:38:47 +01:00
|
|
|
sd_bus_get_bus_id;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_get_scope;
|
|
|
|
sd_bus_get_tid;
|
2014-10-22 19:17:24 +02:00
|
|
|
sd_bus_get_owner_creds;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_send;
|
2013-11-19 01:23:08 +01:00
|
|
|
sd_bus_send_to;
|
2014-02-10 16:42:52 +01:00
|
|
|
sd_bus_call;
|
|
|
|
sd_bus_call_async;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_get_fd;
|
|
|
|
sd_bus_get_events;
|
|
|
|
sd_bus_get_timeout;
|
|
|
|
sd_bus_process;
|
2014-01-22 20:26:58 +01:00
|
|
|
sd_bus_process_priority;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_wait;
|
|
|
|
sd_bus_flush;
|
2014-05-15 01:15:30 +02:00
|
|
|
sd_bus_get_current_slot;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_get_current_message;
|
|
|
|
sd_bus_get_current_handler;
|
|
|
|
sd_bus_get_current_userdata;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_attach_event;
|
|
|
|
sd_bus_detach_event;
|
2013-11-22 01:21:59 +01:00
|
|
|
sd_bus_get_event;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_add_filter;
|
|
|
|
sd_bus_add_match;
|
|
|
|
sd_bus_add_object;
|
|
|
|
sd_bus_add_fallback;
|
|
|
|
sd_bus_add_object_vtable;
|
|
|
|
sd_bus_add_fallback_vtable;
|
|
|
|
sd_bus_add_node_enumerator;
|
|
|
|
sd_bus_add_object_manager;
|
2014-05-15 01:15:30 +02:00
|
|
|
sd_bus_slot_ref;
|
|
|
|
sd_bus_slot_unref;
|
|
|
|
sd_bus_slot_get_bus;
|
|
|
|
sd_bus_slot_get_userdata;
|
|
|
|
sd_bus_slot_set_userdata;
|
2014-11-04 16:57:38 +01:00
|
|
|
sd_bus_slot_get_description;
|
|
|
|
sd_bus_slot_set_description;
|
2014-05-15 01:15:30 +02:00
|
|
|
sd_bus_slot_get_current_message;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_slot_get_current_handler;
|
|
|
|
sd_bus_slot_get_current_userdata;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_new_signal;
|
|
|
|
sd_bus_message_new_method_call;
|
|
|
|
sd_bus_message_new_method_return;
|
|
|
|
sd_bus_message_new_method_error;
|
|
|
|
sd_bus_message_new_method_errorf;
|
|
|
|
sd_bus_message_new_method_errno;
|
|
|
|
sd_bus_message_new_method_errnof;
|
|
|
|
sd_bus_message_ref;
|
|
|
|
sd_bus_message_unref;
|
|
|
|
sd_bus_message_get_type;
|
2013-12-25 17:46:45 +01:00
|
|
|
sd_bus_message_get_cookie;
|
|
|
|
sd_bus_message_get_reply_cookie;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_message_get_priority;
|
2014-01-22 20:45:05 +01:00
|
|
|
sd_bus_message_get_expect_reply;
|
|
|
|
sd_bus_message_get_auto_start;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_message_get_allow_interactive_authorization;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_get_signature;
|
|
|
|
sd_bus_message_get_path;
|
|
|
|
sd_bus_message_get_interface;
|
|
|
|
sd_bus_message_get_member;
|
|
|
|
sd_bus_message_get_destination;
|
|
|
|
sd_bus_message_get_sender;
|
|
|
|
sd_bus_message_get_error;
|
|
|
|
sd_bus_message_get_errno;
|
2014-01-22 11:25:39 +01:00
|
|
|
sd_bus_message_get_monotonic_usec;
|
|
|
|
sd_bus_message_get_realtime_usec;
|
2014-01-22 10:57:12 +01:00
|
|
|
sd_bus_message_get_seqnum;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_message_get_bus;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_message_get_creds;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_is_signal;
|
|
|
|
sd_bus_message_is_method_call;
|
|
|
|
sd_bus_message_is_method_error;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_message_is_empty;
|
|
|
|
sd_bus_message_has_signature;
|
2014-01-22 20:45:05 +01:00
|
|
|
sd_bus_message_set_expect_reply;
|
|
|
|
sd_bus_message_set_auto_start;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_message_set_allow_interactive_authorization;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_set_destination;
|
2014-01-22 20:01:23 +01:00
|
|
|
sd_bus_message_set_priority;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_append;
|
|
|
|
sd_bus_message_append_basic;
|
|
|
|
sd_bus_message_append_array;
|
|
|
|
sd_bus_message_append_array_space;
|
2013-11-11 16:26:12 +01:00
|
|
|
sd_bus_message_append_array_iovec;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_append_array_memfd;
|
|
|
|
sd_bus_message_append_string_space;
|
2013-11-11 16:26:12 +01:00
|
|
|
sd_bus_message_append_string_iovec;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_message_append_string_memfd;
|
|
|
|
sd_bus_message_append_strv;
|
|
|
|
sd_bus_message_open_container;
|
|
|
|
sd_bus_message_close_container;
|
|
|
|
sd_bus_message_copy;
|
|
|
|
sd_bus_message_read;
|
|
|
|
sd_bus_message_read_basic;
|
|
|
|
sd_bus_message_read_array;
|
|
|
|
sd_bus_message_read_strv;
|
|
|
|
sd_bus_message_skip;
|
|
|
|
sd_bus_message_enter_container;
|
|
|
|
sd_bus_message_exit_container;
|
|
|
|
sd_bus_message_peek_type;
|
|
|
|
sd_bus_message_verify_type;
|
|
|
|
sd_bus_message_at_end;
|
|
|
|
sd_bus_message_rewind;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_get_unique_name;
|
|
|
|
sd_bus_request_name;
|
|
|
|
sd_bus_release_name;
|
|
|
|
sd_bus_list_names;
|
2014-10-22 19:17:24 +02:00
|
|
|
sd_bus_get_name_creds;
|
|
|
|
sd_bus_get_name_machine_id;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_call_method;
|
2015-06-08 10:00:17 +02:00
|
|
|
sd_bus_call_method_async;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_get_property;
|
|
|
|
sd_bus_get_property_trivial;
|
2013-11-07 19:28:54 +01:00
|
|
|
sd_bus_get_property_string;
|
|
|
|
sd_bus_get_property_strv;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_set_property;
|
|
|
|
sd_bus_reply_method_return;
|
|
|
|
sd_bus_reply_method_error;
|
|
|
|
sd_bus_reply_method_errorf;
|
|
|
|
sd_bus_reply_method_errno;
|
|
|
|
sd_bus_reply_method_errnof;
|
|
|
|
sd_bus_emit_signal;
|
|
|
|
sd_bus_emit_properties_changed_strv;
|
|
|
|
sd_bus_emit_properties_changed;
|
|
|
|
sd_bus_emit_interfaces_added_strv;
|
|
|
|
sd_bus_emit_interfaces_added;
|
|
|
|
sd_bus_emit_interfaces_removed_strv;
|
|
|
|
sd_bus_emit_interfaces_removed;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_query_sender_creds;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_query_sender_privilege;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_creds_new_from_pid;
|
|
|
|
sd_bus_creds_ref;
|
|
|
|
sd_bus_creds_unref;
|
|
|
|
sd_bus_creds_get_mask;
|
2015-04-21 00:58:08 +02:00
|
|
|
sd_bus_creds_get_augmented_mask;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_creds_get_pid;
|
2015-04-21 20:58:09 +02:00
|
|
|
sd_bus_creds_get_ppid;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_creds_get_tid;
|
2015-04-30 12:01:19 +02:00
|
|
|
sd_bus_creds_get_uid;
|
|
|
|
sd_bus_creds_get_euid;
|
|
|
|
sd_bus_creds_get_suid;
|
|
|
|
sd_bus_creds_get_fsuid;
|
|
|
|
sd_bus_creds_get_gid;
|
|
|
|
sd_bus_creds_get_egid;
|
|
|
|
sd_bus_creds_get_sgid;
|
|
|
|
sd_bus_creds_get_fsgid;
|
|
|
|
sd_bus_creds_get_supplementary_gids;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_creds_get_comm;
|
|
|
|
sd_bus_creds_get_tid_comm;
|
|
|
|
sd_bus_creds_get_exe;
|
|
|
|
sd_bus_creds_get_cmdline;
|
|
|
|
sd_bus_creds_get_cgroup;
|
|
|
|
sd_bus_creds_get_unit;
|
|
|
|
sd_bus_creds_get_slice;
|
2015-04-30 11:58:06 +02:00
|
|
|
sd_bus_creds_get_user_unit;
|
|
|
|
sd_bus_creds_get_user_slice;
|
2013-11-28 17:50:02 +01:00
|
|
|
sd_bus_creds_get_session;
|
|
|
|
sd_bus_creds_get_owner_uid;
|
|
|
|
sd_bus_creds_has_effective_cap;
|
|
|
|
sd_bus_creds_has_permitted_cap;
|
|
|
|
sd_bus_creds_has_inheritable_cap;
|
|
|
|
sd_bus_creds_has_bounding_cap;
|
|
|
|
sd_bus_creds_get_selinux_context;
|
|
|
|
sd_bus_creds_get_audit_session_id;
|
|
|
|
sd_bus_creds_get_audit_login_uid;
|
2015-04-23 19:43:40 +02:00
|
|
|
sd_bus_creds_get_tty;
|
2013-11-30 04:14:10 +01:00
|
|
|
sd_bus_creds_get_unique_name;
|
|
|
|
sd_bus_creds_get_well_known_names;
|
2014-11-04 16:13:49 +01:00
|
|
|
sd_bus_creds_get_description;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_error_free;
|
|
|
|
sd_bus_error_set;
|
|
|
|
sd_bus_error_setf;
|
|
|
|
sd_bus_error_set_const;
|
|
|
|
sd_bus_error_set_errno;
|
|
|
|
sd_bus_error_set_errnof;
|
2015-02-13 15:34:54 +01:00
|
|
|
sd_bus_error_set_errnofv;
|
2013-11-06 08:33:42 +01:00
|
|
|
sd_bus_error_get_errno;
|
|
|
|
sd_bus_error_copy;
|
|
|
|
sd_bus_error_is_set;
|
|
|
|
sd_bus_error_has_name;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_bus_error_add_map;
|
2014-03-11 19:03:50 +01:00
|
|
|
sd_bus_path_encode;
|
|
|
|
sd_bus_path_decode;
|
2014-03-03 01:33:45 +01:00
|
|
|
sd_bus_track_new;
|
|
|
|
sd_bus_track_ref;
|
|
|
|
sd_bus_track_unref;
|
|
|
|
sd_bus_track_get_bus;
|
2014-05-06 19:15:36 +02:00
|
|
|
sd_bus_track_get_userdata;
|
|
|
|
sd_bus_track_set_userdata;
|
2014-03-03 01:33:45 +01:00
|
|
|
sd_bus_track_add_sender;
|
|
|
|
sd_bus_track_remove_sender;
|
|
|
|
sd_bus_track_add_name;
|
|
|
|
sd_bus_track_remove_name;
|
|
|
|
sd_bus_track_count;
|
|
|
|
sd_bus_track_contains;
|
|
|
|
sd_bus_track_first;
|
|
|
|
sd_bus_track_next;
|
2013-11-21 01:03:26 +01:00
|
|
|
|
2014-02-19 16:33:09 +01:00
|
|
|
/* sd-event */
|
2013-11-11 19:34:13 +01:00
|
|
|
sd_event_default;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_new;
|
|
|
|
sd_event_ref;
|
|
|
|
sd_event_unref;
|
|
|
|
sd_event_add_io;
|
2014-03-24 02:49:09 +01:00
|
|
|
sd_event_add_time;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_add_signal;
|
|
|
|
sd_event_add_child;
|
|
|
|
sd_event_add_defer;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_event_add_post;
|
2013-12-12 22:21:25 +01:00
|
|
|
sd_event_add_exit;
|
2015-01-22 01:59:45 +01:00
|
|
|
sd_event_prepare;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_event_wait;
|
2015-01-22 01:59:45 +01:00
|
|
|
sd_event_dispatch;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_run;
|
|
|
|
sd_event_loop;
|
2013-12-12 22:21:25 +01:00
|
|
|
sd_event_exit;
|
2014-03-24 02:49:09 +01:00
|
|
|
sd_event_now;
|
2014-08-15 21:04:07 +02:00
|
|
|
sd_event_get_fd;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_get_state;
|
2013-11-11 19:34:13 +01:00
|
|
|
sd_event_get_tid;
|
2013-12-12 22:21:25 +01:00
|
|
|
sd_event_get_exit_code;
|
2013-12-11 18:14:52 +01:00
|
|
|
sd_event_set_watchdog;
|
2013-12-13 04:14:25 +01:00
|
|
|
sd_event_get_watchdog;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_source_ref;
|
|
|
|
sd_event_source_unref;
|
2015-05-22 14:32:51 +02:00
|
|
|
sd_event_source_get_event;
|
|
|
|
sd_event_source_get_userdata;
|
|
|
|
sd_event_source_set_userdata;
|
2014-11-04 16:27:05 +01:00
|
|
|
sd_event_source_set_description;
|
|
|
|
sd_event_source_get_description;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_source_set_prepare;
|
|
|
|
sd_event_source_get_pending;
|
|
|
|
sd_event_source_get_priority;
|
|
|
|
sd_event_source_set_priority;
|
|
|
|
sd_event_source_get_enabled;
|
|
|
|
sd_event_source_set_enabled;
|
|
|
|
sd_event_source_get_io_fd;
|
2014-01-04 03:15:00 +01:00
|
|
|
sd_event_source_set_io_fd;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_source_get_io_events;
|
|
|
|
sd_event_source_set_io_events;
|
|
|
|
sd_event_source_get_io_revents;
|
|
|
|
sd_event_source_get_time;
|
|
|
|
sd_event_source_set_time;
|
|
|
|
sd_event_source_set_time_accuracy;
|
|
|
|
sd_event_source_get_time_accuracy;
|
2014-03-24 02:49:09 +01:00
|
|
|
sd_event_source_get_time_clock;
|
2013-11-07 03:20:40 +01:00
|
|
|
sd_event_source_get_signal;
|
|
|
|
sd_event_source_get_child_pid;
|
2015-05-22 14:32:51 +02:00
|
|
|
} LIBSYSTEMD_220;
|
2015-06-21 13:44:35 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_222 {
|
|
|
|
global:
|
|
|
|
/* sd-bus */
|
|
|
|
sd_bus_emit_object_added;
|
|
|
|
sd_bus_emit_object_removed;
|
2015-07-03 19:49:03 +02:00
|
|
|
sd_bus_flush_close_unref;
|
2015-06-21 13:44:35 +02:00
|
|
|
} LIBSYSTEMD_221;
|
2015-09-04 09:54:14 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_226 {
|
|
|
|
global:
|
|
|
|
sd_pid_get_cgroup;
|
|
|
|
sd_peer_get_cgroup;
|
|
|
|
} LIBSYSTEMD_222;
|
2015-09-22 14:13:10 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_227 {
|
|
|
|
global:
|
|
|
|
sd_bus_default_flush_close;
|
2015-09-25 19:05:23 +02:00
|
|
|
sd_bus_path_decode_many;
|
|
|
|
sd_bus_path_encode_many;
|
2015-10-07 17:04:39 +02:00
|
|
|
sd_listen_fds_with_names;
|
2015-09-22 14:13:10 +02:00
|
|
|
} LIBSYSTEMD_226;
|
2016-01-27 18:59:29 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_229 {
|
|
|
|
global:
|
2016-02-01 23:15:54 +01:00
|
|
|
sd_journal_has_runtime_files;
|
|
|
|
sd_journal_has_persistent_files;
|
2016-01-27 18:59:29 +01:00
|
|
|
sd_journal_enumerate_fields;
|
|
|
|
sd_journal_restart_fields;
|
|
|
|
} LIBSYSTEMD_227;
|
2016-04-25 00:31:24 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_230 {
|
|
|
|
global:
|
|
|
|
sd_journal_open_directory_fd;
|
|
|
|
sd_journal_open_files_fd;
|
|
|
|
} LIBSYSTEMD_229;
|
2016-06-30 21:25:07 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_231 {
|
|
|
|
global:
|
|
|
|
sd_event_get_iteration;
|
|
|
|
} LIBSYSTEMD_230;
|
2016-08-15 14:58:09 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_232 {
|
|
|
|
global:
|
|
|
|
sd_bus_track_set_recursive;
|
|
|
|
sd_bus_track_get_recursive;
|
|
|
|
sd_bus_track_count_name;
|
|
|
|
sd_bus_track_count_sender;
|
2016-08-22 17:19:12 +02:00
|
|
|
sd_bus_set_exit_on_disconnect;
|
|
|
|
sd_bus_get_exit_on_disconnect;
|
2016-08-30 23:18:46 +02:00
|
|
|
sd_id128_get_invocation;
|
2016-08-15 14:58:09 +02:00
|
|
|
} LIBSYSTEMD_231;
|
2016-11-17 17:07:46 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_233 {
|
|
|
|
global:
|
|
|
|
sd_id128_get_machine_app_specific;
|
2016-12-14 11:51:26 +01:00
|
|
|
sd_is_socket_sockaddr;
|
2016-11-17 17:07:46 +01:00
|
|
|
} LIBSYSTEMD_232;
|
2017-04-25 09:32:24 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_234 {
|
|
|
|
global:
|
|
|
|
sd_bus_message_appendv;
|
|
|
|
} LIBSYSTEMD_233;
|
2017-10-30 16:08:46 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_236 {
|
|
|
|
global:
|
|
|
|
sd_bus_message_new;
|
|
|
|
sd_bus_message_seal;
|
|
|
|
} LIBSYSTEMD_234;
|
2017-12-15 22:24:52 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_237 {
|
|
|
|
global:
|
|
|
|
sd_bus_set_watch_bind;
|
|
|
|
sd_bus_get_watch_bind;
|
2017-12-18 20:10:13 +01:00
|
|
|
sd_bus_request_name_async;
|
|
|
|
sd_bus_release_name_async;
|
2017-12-18 21:37:03 +01:00
|
|
|
sd_bus_add_match_async;
|
2017-12-18 21:52:50 +01:00
|
|
|
sd_bus_match_signal;
|
|
|
|
sd_bus_match_signal_async;
|
2017-12-19 15:47:09 +01:00
|
|
|
sd_bus_is_ready;
|
2017-12-19 15:50:05 +01:00
|
|
|
sd_bus_set_connected_signal;
|
|
|
|
sd_bus_get_connected_signal;
|
2017-12-20 19:41:06 +01:00
|
|
|
sd_bus_set_sender;
|
|
|
|
sd_bus_get_sender;
|
|
|
|
sd_bus_message_set_sender;
|
2018-01-24 15:45:48 +01:00
|
|
|
sd_event_source_get_io_fd_own;
|
|
|
|
sd_event_source_set_io_fd_own;
|
2017-12-15 22:24:52 +01:00
|
|
|
} LIBSYSTEMD_236;
|
2018-02-13 18:27:05 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_238 {
|
|
|
|
global:
|
|
|
|
sd_bus_get_n_queued_read;
|
|
|
|
sd_bus_get_n_queued_write;
|
|
|
|
} LIBSYSTEMD_237;
|
2018-03-29 16:14:11 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_239 {
|
|
|
|
global:
|
|
|
|
sd_bus_open_with_description;
|
|
|
|
sd_bus_open_user_with_description;
|
|
|
|
sd_bus_open_system_with_description;
|
2018-05-30 16:29:33 +02:00
|
|
|
sd_bus_slot_get_floating;
|
|
|
|
sd_bus_slot_set_floating;
|
2018-06-06 11:07:02 +02:00
|
|
|
sd_bus_slot_get_destroy_callback;
|
|
|
|
sd_bus_slot_set_destroy_callback;
|
2018-06-07 12:29:52 +02:00
|
|
|
sd_bus_track_get_destroy_callback;
|
|
|
|
sd_bus_track_set_destroy_callback;
|
sd-event: add new API for subscribing to inotify events
This adds a new call sd_event_add_inotify() which allows watching for
inotify events on specified paths.
sd-event will try to minimize the number of inotify fds allocated, and
will try to add file watches to the same inotify fd objects as far as
that's possible. Doing this kind of inotify object should optimize
behaviour in programs that watch a limited set of mostly independent
files as in most cases a single inotify object will suffice for watching
all files.
Traditionally, this kind of coalescing logic (i.e. that multiple event
sources are implemented on top of a single inotify object) was very hard
to do, as the inotify API had serious limitations: it only allowed
adding watches by path, and would implicitly merge watches installed on
the same node via different path, without letting the caller know about
whether such merging took place or not.
With the advent of O_PATH this issue can be dealt with to some point:
instead of adding a path to watch to an inotify object with
inotify_add_watch() right away, we can open the path with O_PATH first,
call fstat() on the fd, and check the .st_dev/.st_ino fields of that
against a list of watches we already have in place. If we find one we
know that the inotify_add_watch() will update the watch mask of the
existing watch, otherwise it will create a new watch. To make this
race-free we use inotify_add_watch() on the /proc/self/fd/ path of the
O_PATH fd, instead of the original path, so that we do the checking and
watch updating with guaranteed the same inode.
This approach let's us deal safely with inodes that may appear under
various different paths (due to symlinks, hardlinks, bind mounts, fs
namespaces). However it's not a perfect solution: currently the kernel
has no API for changing the watch mask of an existing watch -- unless
you have a path or fd to the original inode. This means we can "merge"
the watches of the same inode of multiple event sources correctly, but
we cannot "unmerge" it again correctly in many cases, as access to the
original inode might have been lost, due to renames, mount/unmount, or
deletions. We could in theory always keep open an O_PATH fd of the inode
to watch so that we can change the mask anytime we want, but this is
highly problematics, as it would consume too many fds (and in fact the
scarcity of fds is the reason why watch descriptors are a separate
concepts from fds) and would keep the backing mounts busy (wds do not
keep mounts busy, fds do). The current implemented approach to all this:
filter in userspace and accept that the watch mask on some inode might
be higher than necessary due to earlier installed event sources that
might have ceased to exist. This approach while ugly shouldn't be too
bad for most cases as the same inodes are probably wacthed for the same
masks in most implementations.
In order to implement priorities correctly a seperate inotify object is
allocated for each priority that is used. This way we get separate
per-priority event queues, of which we never dequeue more than a few
events at a time.
Fixes: #3982
2018-05-28 16:26:50 +02:00
|
|
|
sd_event_add_inotify;
|
|
|
|
sd_event_source_get_inotify_mask;
|
2018-06-07 12:40:35 +02:00
|
|
|
sd_event_source_set_destroy_callback;
|
|
|
|
sd_event_source_get_destroy_callback;
|
2018-03-29 16:14:11 +02:00
|
|
|
} LIBSYSTEMD_238;
|
2018-06-15 10:18:07 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_240 {
|
2018-09-25 13:58:24 +02:00
|
|
|
global:
|
2018-06-15 10:18:07 +02:00
|
|
|
sd_bus_message_readv;
|
2018-07-13 10:38:47 +02:00
|
|
|
sd_bus_set_method_call_timeout;
|
|
|
|
sd_bus_get_method_call_timeout;
|
2018-09-30 19:59:07 +02:00
|
|
|
|
2018-08-06 18:54:03 +02:00
|
|
|
sd_bus_error_move;
|
|
|
|
|
2018-10-06 18:43:28 +02:00
|
|
|
sd_bus_set_close_on_exit;
|
|
|
|
sd_bus_get_close_on_exit;
|
|
|
|
|
2018-09-30 19:59:07 +02:00
|
|
|
sd_device_ref;
|
|
|
|
sd_device_unref;
|
|
|
|
|
|
|
|
sd_device_new_from_syspath;
|
|
|
|
sd_device_new_from_devnum;
|
|
|
|
sd_device_new_from_subsystem_sysname;
|
|
|
|
sd_device_new_from_device_id;
|
|
|
|
|
|
|
|
sd_device_get_parent;
|
|
|
|
sd_device_get_parent_with_subsystem_devtype;
|
|
|
|
|
|
|
|
sd_device_get_syspath;
|
|
|
|
sd_device_get_subsystem;
|
|
|
|
sd_device_get_devtype;
|
|
|
|
sd_device_get_devnum;
|
|
|
|
sd_device_get_ifindex;
|
|
|
|
sd_device_get_driver;
|
|
|
|
sd_device_get_devpath;
|
|
|
|
sd_device_get_devname;
|
|
|
|
sd_device_get_sysname;
|
|
|
|
sd_device_get_sysnum;
|
|
|
|
|
|
|
|
sd_device_get_is_initialized;
|
|
|
|
sd_device_get_usec_since_initialized;
|
|
|
|
|
|
|
|
sd_device_get_tag_first;
|
|
|
|
sd_device_get_tag_next;
|
|
|
|
sd_device_get_devlink_first;
|
|
|
|
sd_device_get_devlink_next;
|
|
|
|
sd_device_get_property_first;
|
|
|
|
sd_device_get_property_next;
|
|
|
|
sd_device_get_sysattr_first;
|
|
|
|
sd_device_get_sysattr_next;
|
|
|
|
|
|
|
|
sd_device_has_tag;
|
|
|
|
sd_device_get_property_value;
|
|
|
|
sd_device_get_sysattr_value;
|
|
|
|
|
|
|
|
sd_device_set_sysattr_value;
|
|
|
|
|
|
|
|
sd_device_enumerator_new;
|
|
|
|
sd_device_enumerator_ref;
|
|
|
|
sd_device_enumerator_unref;
|
|
|
|
|
|
|
|
sd_device_enumerator_get_device_first;
|
|
|
|
sd_device_enumerator_get_device_next;
|
|
|
|
sd_device_enumerator_get_subsystem_first;
|
|
|
|
sd_device_enumerator_get_subsystem_next;
|
|
|
|
|
|
|
|
sd_device_enumerator_add_match_subsystem;
|
|
|
|
sd_device_enumerator_add_match_sysattr;
|
|
|
|
sd_device_enumerator_add_match_property;
|
|
|
|
sd_device_enumerator_add_match_sysname;
|
|
|
|
sd_device_enumerator_add_match_tag;
|
|
|
|
sd_device_enumerator_add_match_parent;
|
|
|
|
sd_device_enumerator_allow_uninitialized;
|
|
|
|
|
2018-09-30 20:36:51 +02:00
|
|
|
sd_hwdb_ref;
|
|
|
|
sd_hwdb_unref;
|
|
|
|
|
|
|
|
sd_hwdb_new;
|
|
|
|
|
|
|
|
sd_hwdb_get;
|
|
|
|
|
|
|
|
sd_hwdb_seek;
|
|
|
|
sd_hwdb_enumerate;
|
|
|
|
|
2018-10-02 14:25:24 +02:00
|
|
|
sd_id128_get_boot_app_specific;
|
2018-10-08 15:45:52 +02:00
|
|
|
|
|
|
|
sd_device_monitor_new;
|
|
|
|
sd_device_monitor_ref;
|
|
|
|
sd_device_monitor_unref;
|
|
|
|
|
|
|
|
sd_device_monitor_set_receive_buffer_size;
|
|
|
|
sd_device_monitor_attach_event;
|
|
|
|
sd_device_monitor_detach_event;
|
|
|
|
sd_device_monitor_get_event;
|
2018-11-10 14:13:07 +01:00
|
|
|
sd_device_monitor_get_event_source;
|
2018-10-08 15:45:52 +02:00
|
|
|
sd_device_monitor_start;
|
|
|
|
sd_device_monitor_stop;
|
|
|
|
|
|
|
|
sd_device_monitor_filter_add_match_subsystem_devtype;
|
|
|
|
sd_device_monitor_filter_add_match_tag;
|
|
|
|
sd_device_monitor_filter_update;
|
|
|
|
sd_device_monitor_filter_remove;
|
2018-11-03 17:55:28 +01:00
|
|
|
|
|
|
|
sd_event_source_get_floating;
|
|
|
|
sd_event_source_set_floating;
|
2018-06-15 10:18:07 +02:00
|
|
|
} LIBSYSTEMD_239;
|
2019-01-17 15:51:08 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_241 {
|
|
|
|
global:
|
|
|
|
sd_bus_close_unref;
|
|
|
|
} LIBSYSTEMD_240;
|
sd-bus: add symbol to tell linker that new vtable functions are used
In 856ad2a86bd9b3e264a090fcf4b0d05bfaa91030 sd_bus_add_object_vtable() and
sd_bus_add_fallback_vtable() were changed to take an updated sd_bus_vtable[]
array with additional 'features' and 'names' fields in the union.
The commit tried to check whether the old or the new table format is used, by
looking at the vtable[0].x.start.element_size field, on the assumption that the
added fields caused the structure size to grow. Unfortunately, this assumption
was false, and on arm32 (at least), the structure size is unchanged.
In libsystemd we use symbol versioning and a major.minor.patch semantic
versioning of the library name (major equals the number in the so-name). When
systemd-242 was released, the minor number was (correctly) bumped, but this is
not enough, because no new symbols were added or symbol versions changed. This
means that programs compiled with the new systemd headers and library could be
successfully linked to older versions of the library. For example rpm only
looks at the so-name and the list of versioned symbols, completely ignoring the
major.minor numbers in the library name. But the older library does not
understand the new vtable format, and would return -EINVAL after failing the
size check (on those architectures where the structure size did change, i.e.
all 64 bit architectures).
To force new libsystemd (with the functions that take the updated
sd_bus_vtable[] format) to be used, let's pull in a dummy symbol from the table
definition. This is a bit wasteful, because a dummy pointer has to be stored,
but the effect is negligible. In particular, the pointer doesn't even change
the size of the structure because if fits in an unused area in the union.
The number stored in the new unsigned integer is not checked anywhere. If the
symbol exists, we already know we have the new version of the library, so an
additional check would not tell us anything.
An alternative would be to make sd_bus_add_{object,fallback}_vtable() versioned
symbols, using .symver linker annotations. We would provide
sd_bus_add_{object,fallback}_vtable@LIBSYSTEMD_221 (for backwards
compatibility) and e.g. sd_bus_add_{object,fallback}_vtable@@LIBSYSTEMD_242
(the default) with the new implementation. This would work too, but is more
work. We would have to version at least those two functions. And it turns out
that the .symver linker instructions have to located in the same compilation
unit as the function being annotated. We first compile libsystemd.a, and then
link it into libsystemd.so and various other targets, including
libsystemd-shared.so, and the nss modules. If the .symver annotations were
placed next to the function definitions (in bus-object.c), they would influence
all targets that link libsystemd.a, and cause problems, because those functions
should not be exported there. To export them only in libsystemd.so, compilation
would have to be rearranged, so that the functions exported in libsystemd.so
would not be present in libsystemd.a, but a separate compilation unit containg
them and the .symver annotations would be linked solely into libsystemd.so.
This is certainly possible, but more work than the approach in this patch.
856ad2a86bd9b3e264a090fcf4b0d05bfaa91030 has one more issue: it relies on the
undefined fields in sd_bus_vtable[] array to be zeros. But the structure
contains a union, and fields of the union do not have to be zero-initalized by
the compiler. This means that potentially, we could have garbarge values there,
for example when reading the old vtable format definition from the new function
implementation. In practice this should not be an issue at all, because vtable
definitions are static data and are placed in the ro-data section, which is
fully initalized, so we know that those undefined areas will be zero. Things
would be different if somebody defined the vtable array on the heap or on the
stack. Let's just document that they should zero-intialize the unused areas
in this case.
The symbol checking code had to be updated because otherwise gcc warns about a
cast from unsigned to a pointer.
2019-04-18 13:06:41 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_243 {
|
|
|
|
global:
|
|
|
|
sd_bus_object_vtable_format;
|
2019-05-08 14:39:57 +02:00
|
|
|
sd_event_source_disable_unref;
|
sd-bus: add symbol to tell linker that new vtable functions are used
In 856ad2a86bd9b3e264a090fcf4b0d05bfaa91030 sd_bus_add_object_vtable() and
sd_bus_add_fallback_vtable() were changed to take an updated sd_bus_vtable[]
array with additional 'features' and 'names' fields in the union.
The commit tried to check whether the old or the new table format is used, by
looking at the vtable[0].x.start.element_size field, on the assumption that the
added fields caused the structure size to grow. Unfortunately, this assumption
was false, and on arm32 (at least), the structure size is unchanged.
In libsystemd we use symbol versioning and a major.minor.patch semantic
versioning of the library name (major equals the number in the so-name). When
systemd-242 was released, the minor number was (correctly) bumped, but this is
not enough, because no new symbols were added or symbol versions changed. This
means that programs compiled with the new systemd headers and library could be
successfully linked to older versions of the library. For example rpm only
looks at the so-name and the list of versioned symbols, completely ignoring the
major.minor numbers in the library name. But the older library does not
understand the new vtable format, and would return -EINVAL after failing the
size check (on those architectures where the structure size did change, i.e.
all 64 bit architectures).
To force new libsystemd (with the functions that take the updated
sd_bus_vtable[] format) to be used, let's pull in a dummy symbol from the table
definition. This is a bit wasteful, because a dummy pointer has to be stored,
but the effect is negligible. In particular, the pointer doesn't even change
the size of the structure because if fits in an unused area in the union.
The number stored in the new unsigned integer is not checked anywhere. If the
symbol exists, we already know we have the new version of the library, so an
additional check would not tell us anything.
An alternative would be to make sd_bus_add_{object,fallback}_vtable() versioned
symbols, using .symver linker annotations. We would provide
sd_bus_add_{object,fallback}_vtable@LIBSYSTEMD_221 (for backwards
compatibility) and e.g. sd_bus_add_{object,fallback}_vtable@@LIBSYSTEMD_242
(the default) with the new implementation. This would work too, but is more
work. We would have to version at least those two functions. And it turns out
that the .symver linker instructions have to located in the same compilation
unit as the function being annotated. We first compile libsystemd.a, and then
link it into libsystemd.so and various other targets, including
libsystemd-shared.so, and the nss modules. If the .symver annotations were
placed next to the function definitions (in bus-object.c), they would influence
all targets that link libsystemd.a, and cause problems, because those functions
should not be exported there. To export them only in libsystemd.so, compilation
would have to be rearranged, so that the functions exported in libsystemd.so
would not be present in libsystemd.a, but a separate compilation unit containg
them and the .symver annotations would be linked solely into libsystemd.so.
This is certainly possible, but more work than the approach in this patch.
856ad2a86bd9b3e264a090fcf4b0d05bfaa91030 has one more issue: it relies on the
undefined fields in sd_bus_vtable[] array to be zeros. But the structure
contains a union, and fields of the union do not have to be zero-initalized by
the compiler. This means that potentially, we could have garbarge values there,
for example when reading the old vtable format definition from the new function
implementation. In practice this should not be an issue at all, because vtable
definitions are static data and are placed in the ro-data section, which is
fully initalized, so we know that those undefined areas will be zero. Things
would be different if somebody defined the vtable array on the heap or on the
stack. Let's just document that they should zero-intialize the unused areas
in this case.
The symbol checking code had to be updated because otherwise gcc warns about a
cast from unsigned to a pointer.
2019-04-18 13:06:41 +02:00
|
|
|
} LIBSYSTEMD_241;
|
2019-10-30 17:22:49 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_245 {
|
|
|
|
global:
|
2020-02-04 18:39:04 +01:00
|
|
|
sd_bus_enqueue_for_read;
|
2020-01-23 18:42:54 +01:00
|
|
|
sd_bus_message_dump;
|
2019-08-19 20:28:34 +02:00
|
|
|
sd_bus_message_sensitive;
|
2019-10-30 17:22:49 +01:00
|
|
|
sd_event_add_child_pidfd;
|
|
|
|
sd_event_source_get_child_pidfd;
|
|
|
|
sd_event_source_get_child_pidfd_own;
|
|
|
|
sd_event_source_set_child_pidfd_own;
|
|
|
|
sd_event_source_get_child_process_own;
|
|
|
|
sd_event_source_set_child_process_own;
|
|
|
|
sd_event_source_send_child_signal;
|
2019-11-27 12:11:24 +01:00
|
|
|
sd_journal_open_namespace;
|
2019-10-30 17:22:49 +01:00
|
|
|
} LIBSYSTEMD_243;
|
2020-03-23 20:37:47 +01:00
|
|
|
|
|
|
|
LIBSYSTEMD_246 {
|
|
|
|
global:
|
2020-05-24 12:51:51 +02:00
|
|
|
sd_bus_interface_name_is_valid;
|
|
|
|
sd_bus_service_name_is_valid;
|
|
|
|
sd_bus_member_name_is_valid;
|
|
|
|
sd_bus_object_path_is_valid;
|
|
|
|
|
2020-03-31 16:28:01 +02:00
|
|
|
sd_bus_call_methodv;
|
|
|
|
sd_bus_call_method_asyncv;
|
|
|
|
sd_bus_emit_signalv;
|
|
|
|
sd_bus_reply_method_errnofv;
|
|
|
|
sd_bus_reply_method_errorfv;
|
|
|
|
sd_bus_reply_method_returnv;
|
|
|
|
sd_bus_set_propertyv;
|
2020-05-24 12:51:51 +02:00
|
|
|
|
2020-03-23 20:37:47 +01:00
|
|
|
sd_path_lookup;
|
|
|
|
sd_path_lookup_strv;
|
2020-05-28 23:25:51 +02:00
|
|
|
|
|
|
|
sd_notify_barrier;
|
sd-journal: when enumerating, continue even after an inaccessible field
SD_JOURNAL_FOREACH_DATA() and SD_JOURNAL_FOREACH_UNIQUE() would immediately
terminate when a field couldn't be accessed. This can happen for example when a
field is compressed with an unavailable compression format. But it's likely
that this is the wrong thing to do: the caller for example might want to
iterate over the fields but isn't interested in all of them. coredumpctl is
like this: it uses SD_JOURNAL_FOREACH_DATA() but only uses a subset of the
fields.
Add two new functions sd_journal_enumerate_good_data() and
sd_journal_enumerate_good_unique() that retry sd_journal_enumerate_data() and
sd_journal_enumerate_unique() if the return value is something that applies to
a single field: ENOBUS, E2BIG, EOPNOTSUPP.
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1856037.
An alternative would be to make the macros themselves smarter instead of adding
new symbols, and do the looping internally in the macro. I don't like that
approach for two reasons. First, it would embed the logic in the macro, so
recompilation would be required if we decide to update the logic. With the
current version of the patch, recompilation is required to use the new symbols,
but after that, library upgrades are enough. So the current approach is safer
in case further updates are needed. Second, our headers use primitive C, and it
is hard to do the macros without using newer features.
2020-07-17 21:00:12 +02:00
|
|
|
|
|
|
|
sd_journal_enumerate_available_data;
|
|
|
|
sd_journal_enumerate_available_unique;
|
2020-03-23 20:37:47 +01:00
|
|
|
} LIBSYSTEMD_245;
|
2020-07-28 11:17:00 +02:00
|
|
|
|
|
|
|
LIBSYSTEMD_247 {
|
|
|
|
global:
|
|
|
|
sd_event_add_time_relative;
|
|
|
|
sd_event_source_set_time_relative;
|
2020-10-01 22:17:31 +02:00
|
|
|
sd_event_source_get_exit_on_failure;
|
|
|
|
sd_event_source_set_exit_on_failure;
|
2020-08-22 18:24:43 +02:00
|
|
|
|
|
|
|
sd_bus_error_has_names_sentinel;
|
udev: make tags "sticky"
This tries to address the "bind"/"unbind" uevent kernel API breakage, by
changing the semantics of device tags.
Previously, tags would be applied on uevents (and the database entries
they result in) only depending on the immediate context. This means that
if one uevent causes the tag to be set and the next to be unset, this
would immediately effect what apps would see and the database entries
would contain each time. This is problematic however, as tags are a
filtering concept, and if tags vanish then clients won't hence notice
when a device stops being relevant to them since not only the tags
disappear but immediately also the uevents for it are filtered including
the one necessary for the app to notice that the device lost its tag and
hence relevance.
With this change tags become "sticky". If a tag is applied is once
applied to a device it will stay in place forever, until the device is
removed. Tags can never be removed again. This means that an app
watching a specific set of devices by filtering for a tag is guaranteed
to not only see the events where the tag is set but also all follow-up
events where the tags might be removed again.
This change of behaviour is unfortunate, but is required due to the
kernel introducing new "bind" and "unbind" uevents that generally have
the effect that tags and properties disappear and apps hence don't
notice when a device looses relevance to it. "bind"/"unbind" events were
introduced in kernel 4.12, and are now used in more and more subsystems.
The introduction broke userspace widely, and this commit is an attempt
to provide a way for apps to deal with it.
While tags are now "sticky" a new automatic device property
CURRENT_TAGS is introduced (matching the existing TAGS property) that
always reflects the precise set of tags applied on the most recent
events. Thus, when subscribing to devices through tags, all devices that
ever had the tag put on them will be be seen, and by CURRENT_TAGS it may
be checked whether the device right at the moment matches the tag
requirements.
See: #7587 #7018 #8221
2018-12-13 17:55:14 +01:00
|
|
|
|
|
|
|
sd_device_get_current_tag_first;
|
|
|
|
sd_device_get_current_tag_next;
|
|
|
|
sd_device_has_current_tag;
|
2020-09-11 10:41:10 +02:00
|
|
|
sd_device_set_sysattr_valuef;
|
2020-08-28 19:52:36 +02:00
|
|
|
} LIBSYSTEMD_246;
|