755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering This file is part of systemd.
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering Copyright 2012 Lennart Poettering
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering systemd is free software; you can redistribute it and/or modify it
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering under the terms of the GNU Lesser General Public License as published by
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering (at your option) any later version.
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering systemd is distributed in the hope that it will be useful, but
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering Lesser General Public License for more details.
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering You should have received a copy of the GNU Lesser General Public License
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering printf("%s [OPTIONS...] {COMMAND} ...\n\n"
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering "Execute process with stdout/stderr connected to the journal.\n\n"
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering " -h --help Show this help\n"
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering " --version Show package version\n"
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering " -t --identifier=STRING Set syslog identifier\n"
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering " -p --priority=PRIORITY Set priority value (0..7)\n"
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek " --level-prefix=BOOL Control whether level prefix shall be parsed\n"
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek , program_invocation_short_name);
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poetteringstatic int parse_argv(int argc, char *argv[]) {
9aac0b2c19c558b853da7a6d67a0929b2d44dee4Lennart Poettering { "version", no_argument, NULL, ARG_VERSION },
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering { "identifier", required_argument, NULL, 't' },
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering { "priority", required_argument, NULL, 'p' },
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering { "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0)
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering arg_priority = log_level_from_string(optarg);
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering log_error("Failed to parse priority value.");
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering return log_error_errno(k, "Failed to parse level prefix value.");
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering _cleanup_close_ int fd = -1, saved_stderr = -1;
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering fd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix);
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering r = log_error_errno(fd, "Failed to create stream fd: %m");
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering saved_stderr = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 3);
76ef789d264f9eb7d7624b994aa6eead1dacfac4Lennart Poettering r = log_error_errno(errno, "Failed to duplicate fd: %m");
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering (void) execl("/bin/cat", "/bin/cat", NULL);
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering (void) execvp(argv[optind], argv + optind);
755a02c6800246e7e293897d0594fe7e7531ba59Lennart Poettering /* Let's try to restore a working stderr, so we can print the error message */
939c173f60c4cc1e2ce8cbf014910b13c53358bbLennart Poettering (void) dup3(saved_stderr, STDERR_FILENO, 0);
da927ba997d68401563b927f92e6e40e021a8e5cMichal Schmidt log_error_errno(r, "Failed to execute process: %m");