]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/systemctl/systemctl-add-dependency.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #include "bus-locator.h"
5 #include "systemctl-add-dependency.h"
6 #include "systemctl-daemon-reload.h"
7 #include "systemctl-util.h"
10 int add_dependency(int argc
, char *argv
[], void *userdata
) {
11 _cleanup_strv_free_
char **names
= NULL
;
12 _cleanup_free_
char *target
= NULL
;
13 const char *verb
= argv
[0];
14 UnitFileChange
*changes
= NULL
;
22 r
= unit_name_mangle_with_suffix(argv
[1], "as target",
23 arg_quiet
? 0 : UNIT_NAME_MANGLE_WARN
,
26 return log_error_errno(r
, "Failed to mangle unit name: %m");
28 r
= mangle_names("as dependency", strv_skip(argv
, 2), &names
);
32 if (streq(verb
, "add-wants"))
34 else if (streq(verb
, "add-requires"))
37 assert_not_reached("Unknown verb");
39 if (install_client_side()) {
40 r
= unit_file_add_dependency(arg_scope
, unit_file_flags_from_args(), arg_root
, names
, target
, dep
, &changes
, &n_changes
);
41 unit_file_dump_changes(r
, "add dependency on", changes
, n_changes
, arg_quiet
);
46 _cleanup_(sd_bus_message_unrefp
) sd_bus_message
*reply
= NULL
, *m
= NULL
;
47 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
50 r
= acquire_bus(BUS_MANAGER
, &bus
);
54 polkit_agent_open_maybe();
56 r
= bus_message_new_method_call(bus
, &m
, bus_systemd_mgr
, "AddDependencyUnitFiles");
58 return bus_log_create_error(r
);
60 r
= sd_bus_message_append_strv(m
, names
);
62 return bus_log_create_error(r
);
64 r
= sd_bus_message_append(m
, "ssbb", target
, unit_dependency_to_string(dep
), arg_runtime
, arg_force
);
66 return bus_log_create_error(r
);
68 r
= sd_bus_call(bus
, m
, 0, &error
, &reply
);
70 return log_error_errno(r
, "Failed to add dependency: %s", bus_error_message(&error
, r
));
72 r
= bus_deserialize_and_dump_unit_file_changes(reply
, arg_quiet
, &changes
, &n_changes
);
81 r
= daemon_reload(argc
, argv
, userdata
);
85 unit_file_changes_free(changes
, n_changes
);