debug-generator.c revision b5884878a2874447b2a9f07f324a7cd909d96d48
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering This file is part of systemd.
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering Copyright 2014 Lennart Poettering
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering systemd is free software; you can redistribute it and/or modify it
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering under the terms of the GNU Lesser General Public License as published by
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering (at your option) any later version.
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering systemd is distributed in the hope that it will be useful, but
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering Lesser General Public License for more details.
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering You should have received a copy of the GNU Lesser General Public License
7e8d5761ecd4e8bc8f93b1f21861cac2a39a78a1Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const char *arg_dest = "/tmp";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic bool arg_debug_shell = false;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic int parse_proc_cmdline_item(const char *key, const char *value) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek if (streq(key, "systemd.mask")) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("Missing argument for systemd.mask= kernel command line parameter.");
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek n = unit_name_mangle(value, MANGLE_NOGLOB);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek } else if (streq(key, "systemd.wants")) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("Missing argument for systemd.want= kernel command line parameter.");
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek n = unit_name_mangle(value, MANGLE_NOGLOB);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = strv_consume(&arg_wants, n);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek } else if (streq(key, "systemd.debug-shell")) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("Failed to parse systemd.debug-shell= argument '%s', ignoring.", value);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic int generate_mask_symlinks(void) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek p = strjoin(arg_dest, "/", *u, NULL);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek if (symlink("/dev/null", p) < 0) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("Failed to create mask symlink %s: %m", p);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic int generate_wants_symlinks(void) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek _cleanup_free_ char *p = NULL, *f = NULL;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek p = strjoin(arg_dest, "/default.target.wants/", *u, NULL);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek f = strappend(SYSTEM_DATA_UNIT_PATH "/", *u);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("Failed to create wants symlink %s: %m", p);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekint main(int argc, char *argv[]) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_error("This program takes three or no arguments.");
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_set_target(LOG_TARGET_SAFE);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = parse_proc_cmdline(parse_proc_cmdline_item);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek log_warning("Failed to parse kernel command line, ignoring: %s", strerror(-r));
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = strv_extend(&arg_wants, "debug-shell.service");