machine-id-setup-main.c revision 92f2f92edcad46ce4098ee26504edca0a1dad68e
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye/***
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye This file is part of systemd.
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye Copyright 2010 Lennart Poettering
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye systemd is free software; you can redistribute it and/or modify it
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye under the terms of the GNU Lesser General Public License as published by
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye the Free Software Foundation; either version 2.1 of the License, or
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye (at your option) any later version.
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye systemd is distributed in the hope that it will be useful, but
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye WITHOUT ANY WARRANTY; without even the implied warranty of
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye Lesser General Public License for more details.
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye You should have received a copy of the GNU Lesser General Public License
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye along with systemd; If not, see <http://www.gnu.org/licenses/>.
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye***/
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include <unistd.h>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include <stdlib.h>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include <stdio.h>
cf1f7b5e81583dfca30972cfef322266a6928e7fKnut Anders Hatlen#include <getopt.h>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include <errno.h>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include "machine-id-setup.h"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include "log.h"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye#include "build.h"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyestatic const char *arg_root = "";
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyestatic int help(void) {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye printf("%s [OPTIONS...]\n\n"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye "Initialize /etc/machine-id from a random source.\n\n"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye " -h --help Show this help\n"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye " --version Show package version\n"
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye " --root Filesystem root\n",
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye program_invocation_short_name);
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye return 0;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye}
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyestatic int parse_argv(int argc, char *argv[]) {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye enum {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye ARG_VERSION = 0x100,
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye ARG_ROOT,
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye };
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye static const struct option options[] = {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye { "help", no_argument, NULL, 'h' },
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye { "version", no_argument, NULL, ARG_VERSION },
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye { "root", required_argument, NULL, ARG_ROOT },
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye {}
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye };
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye int c;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye assert(argc >= 0);
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye assert(argv);
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye while ((c = getopt_long(argc, argv, "hqcv", options, NULL)) >= 0) {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye switch (c) {
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye case 'h':
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye return help();
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye case ARG_VERSION:
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye puts(PACKAGE_STRING);
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye puts(SYSTEMD_FEATURES);
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye return 0;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye case ARG_ROOT:
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye arg_root = optarg;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye break;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye case '?':
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye return -EINVAL;
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye default:
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye assert_not_reached("Unhandled option");
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye }
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye }
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye if (optind < argc) {
0a0811923cbbd2976425db6f4c78eed811c2825bKnut Anders Hatlen help();
b68083650aff0d1663971a216369f651559db2a1Knut Anders Hatlen return -EINVAL;
a07b2874263e3c5f0cd2e83441719415d53059c2Knut Anders Hatlen }
c7eb123c8b2081a261deff3c401fbf92ddba1b58Jorgen Austvik
c7eb123c8b2081a261deff3c401fbf92ddba1b58Jorgen Austvik return 1;
49f592091468eac515dde6139fbc8efa26056b0aJorgen Austvik}
945f4c3c36a15447913781dfb1894b34f2941c57Jorgen Austvik
5a0c5ad4116f5a4dd0dd5a0a4e6d02973cd5eef9Lubos Koscoint main(int argc, char *argv[]) {
780cc7d1b57609ff15fb283201e93cb501ebe9e6Jorgen Austvik int r;
780cc7d1b57609ff15fb283201e93cb501ebe9e6Jorgen Austvik
780cc7d1b57609ff15fb283201e93cb501ebe9e6Jorgen Austvik log_parse_environment();
d3d2404f9a49bf70b124053feabe666f85ef5361Knut Anders Hatlen log_open();
d3d2404f9a49bf70b124053feabe666f85ef5361Knut Anders Hatlen
780cc7d1b57609ff15fb283201e93cb501ebe9e6Jorgen Austvik r = parse_argv(argc, argv);
780cc7d1b57609ff15fb283201e93cb501ebe9e6Jorgen Austvik if (r <= 0)
7b9f9a1761f76744fc3772181877d5e301f122adKnut Anders Hatlen return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
5a0c5ad4116f5a4dd0dd5a0a4e6d02973cd5eef9Lubos Kosco
0466de7c67573e1ce5e0733325c1e5383270f5d5Knut Anders Hatlen return machine_id_setup(arg_root) < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
0466de7c67573e1ce5e0733325c1e5383270f5d5Knut Anders Hatlen}
0466de7c67573e1ce5e0733325c1e5383270f5d5Knut Anders Hatlen