summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2013-11-07 11:30:54 +0100
committerJiří Klimeš <jklimes@redhat.com>2013-11-13 12:19:51 +0100
commit79ac1cf08914d7e83c7fb3f7cde6974a4018d8c3 (patch)
tree14083f798aad579f55a5d5c9df02c5b4be3b9b85
parentd95da820fcb30aff65125c366bef271e8c46f12b (diff)
downloadNetworkManager-79ac1cf08914d7e83c7fb3f7cde6974a4018d8c3.tar.gz
cli: add support for getting/setting hostname to nmcli (rh #1018510)
https://bugzilla.redhat.com/show_bug.cgi?id=1018510
-rw-r--r--cli/src/network-manager.c46
-rw-r--r--man/nmcli.1.in14
2 files changed, 54 insertions, 6 deletions
diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c
index 272543f745..8d59566f58 100644
--- a/cli/src/network-manager.c
+++ b/cli/src/network-manager.c
@@ -93,8 +93,9 @@ usage_general (void)
{
fprintf (stderr,
_("Usage: nmcli general { COMMAND | help }\n\n"
- " COMMAND := { status | permissions | logging }\n\n"
+ " COMMAND := { status | hostname | permissions | logging }\n\n"
" status\n\n"
+ " hostname [<hostname>]\n\n"
" permissions\n\n"
" logging [level <log level>] [domains <log domains>]\n\n"
));
@@ -445,6 +446,19 @@ show_general_logging (NmCli *nmc)
return TRUE;
}
+static void
+save_hostname_cb (NMRemoteSettings *settings, GError *error, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: failed to set hostname: (%d) %s"),
+ error->code, error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ }
+ quit ();
+}
+
/*
* Entry point function for general operations 'nmcli general'
*/
@@ -474,6 +488,35 @@ do_general (NmCli *nmc, int argc, char **argv)
}
show_nm_status (nmc, NULL, NULL);
}
+ else if (matches (*argv, "hostname") == 0) {
+ NMRemoteSettings *rem_settings;
+
+ /* get system settings */
+ if (!(rem_settings = nm_remote_settings_new (NULL))) {
+ g_string_printf (nmc->return_text, _("Error: Could not get system settings."));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ goto finish;
+ }
+
+ if (next_arg (&argc, &argv) != 0) {
+ /* no arguments -> get hostname */
+ char *hostname = NULL;
+
+ g_object_get (rem_settings, NM_REMOTE_SETTINGS_HOSTNAME, &hostname, NULL);
+ if (hostname)
+ printf ("%s\n", hostname);
+ g_free (hostname);
+ } else {
+ /* hostname provided -> set it */
+ const char *hostname = *argv;
+
+ if (next_arg (&argc, &argv) == 0)
+ printf ("Warning: ignoring extra garbage after '%s' hostname\n", hostname);
+
+ nmc->should_wait = TRUE;
+ nm_remote_settings_save_hostname (rem_settings, hostname, save_hostname_cb, nmc);
+ }
+ }
else if (matches (*argv, "permissions") == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
g_string_printf (nmc->return_text, _("Error: %s."), error->message);
@@ -527,7 +570,6 @@ do_general (NmCli *nmc, int argc, char **argv)
finish:
if (error)
g_error_free (error);
- quit ();
return nmc->return_value;
}
diff --git a/man/nmcli.1.in b/man/nmcli.1.in
index df2e74d872..9a2e83afa1 100644
--- a/man/nmcli.1.in
+++ b/man/nmcli.1.in
@@ -21,7 +21,7 @@
.\"
.\" Copyright (C) 2010 - 2013 Red Hat, Inc.
.\"
-.TH NMCLI "1" "31 October 2013"
+.TH NMCLI "1" "7 November 2013"
.SH NAME
nmcli \- command\(hyline tool for controlling NetworkManager
@@ -147,12 +147,12 @@ Show \fInmcli\fP version.
Print help information.
.SS \fIOBJECT\fP
.TP
-.B general \- general NetworkManager status and operations
+.B general \- general \fINetworkManager\fP status and operations
.br
Use this object to show NetworkManager status and permissions. You can also get
-and change NetworkManager logging level and domains.
+and change system hostname, as well as NetworkManager logging level and domains.
.TP
-.SS \fICOMMAND\fP := { status | permissions | logging }
+.SS \fICOMMAND\fP := { status | hostname | permissions | logging }
.sp
.RS
.TP
@@ -161,6 +161,12 @@ and change NetworkManager logging level and domains.
Show overall status of NetworkManager. This is the default action, when no additional
command is provided for \fIgeneral\fP object.
.TP
+.B hostname [<hostname>]
+.br
+Get and change system hostname. With no arguments, this prints currently configured hostname.
+When you pass a hostname, it will be handed over to NetworkManager to be set as a new system
+hostname.
+.TP
.B permissions
.br
Show the permissions a caller has for various authenticated operations that