@@ -318,6 +318,19 @@ static int show_all_names(sd_bus *bus) {
318318 return print_status_info (& info );
319319}
320320
321+ static int get_hostname_based_on_flag (sd_bus * bus ) {
322+ const char * attr ;
323+
324+ if (!!arg_static + !!arg_pretty + !!arg_transient > 1 )
325+ return log_error_errno (SYNTHETIC_ERRNO (EINVAL ),
326+ "Cannot query more than one name type at a time" );
327+
328+ attr = arg_pretty ? "PrettyHostname" :
329+ arg_static ? "StaticHostname" : "Hostname" ;
330+
331+ return get_one_name (bus , attr , NULL );
332+ }
333+
321334static int show_status (int argc , char * * argv , void * userdata ) {
322335 sd_bus * bus = userdata ;
323336 int r ;
@@ -352,22 +365,13 @@ static int show_status(int argc, char **argv, void *userdata) {
352365 return 0 ;
353366 }
354367
355- if (arg_pretty || arg_static || arg_transient ) {
356- const char * attr ;
357-
358- if (!!arg_static + !!arg_pretty + !!arg_transient > 1 )
359- return log_error_errno (SYNTHETIC_ERRNO (EINVAL ),
360- "Cannot query more than one name type at a time" );
361-
362- attr = arg_pretty ? "PrettyHostname" :
363- arg_static ? "StaticHostname" : "Hostname" ;
364-
365- return get_one_name (bus , attr , NULL );
366- }
368+ if (arg_pretty || arg_static || arg_transient )
369+ return get_hostname_based_on_flag (bus );
367370
368371 return show_all_names (bus );
369372}
370373
374+
371375static int set_simple_string_internal (sd_bus * bus , sd_bus_error * error , const char * target , const char * method , const char * value ) {
372376 _cleanup_ (sd_bus_error_free ) sd_bus_error e = SD_BUS_ERROR_NULL ;
373377 int r ;
@@ -481,20 +485,29 @@ static int set_hostname(int argc, char **argv, void *userdata) {
481485 return ret ;
482486}
483487
484- static int set_icon_name (int argc , char * * argv , void * userdata ) {
485- return set_simple_string (userdata , "icon" , "SetIconName" , argv [1 ]);
488+ static int get_or_set_hostname (int argc , char * * argv , void * userdata ) {
489+ return argc == 1 ? get_hostname_based_on_flag (userdata ) :
490+ set_hostname (argc , argv , userdata );
491+ }
492+
493+ static int get_or_set_icon_name (int argc , char * * argv , void * userdata ) {
494+ return argc == 1 ? get_one_name (userdata , "IconName" , NULL ) :
495+ set_simple_string (userdata , "icon" , "SetIconName" , argv [1 ]);
486496}
487497
488- static int set_chassis (int argc , char * * argv , void * userdata ) {
489- return set_simple_string (userdata , "chassis" , "SetChassis" , argv [1 ]);
498+ static int get_or_set_chassis (int argc , char * * argv , void * userdata ) {
499+ return argc == 1 ? get_one_name (userdata , "Chassis" , NULL ) :
500+ set_simple_string (userdata , "chassis" , "SetChassis" , argv [1 ]);
490501}
491502
492- static int set_deployment (int argc , char * * argv , void * userdata ) {
493- return set_simple_string (userdata , "deployment" , "SetDeployment" , argv [1 ]);
503+ static int get_or_set_deployment (int argc , char * * argv , void * userdata ) {
504+ return argc == 1 ? get_one_name (userdata , "Deployment" , NULL ) :
505+ set_simple_string (userdata , "deployment" , "SetDeployment" , argv [1 ]);
494506}
495507
496- static int set_location (int argc , char * * argv , void * userdata ) {
497- return set_simple_string (userdata , "location" , "SetLocation" , argv [1 ]);
508+ static int get_or_set_location (int argc , char * * argv , void * userdata ) {
509+ return argc == 1 ? get_one_name (userdata , "Location" , NULL ) :
510+ set_simple_string (userdata , "location" , "SetLocation" , argv [1 ]);
498511}
499512
500513static int help (void ) {
@@ -509,11 +522,11 @@ static int help(void) {
509522 "%sQuery or change system hostname.%s\n"
510523 "\nCommands:\n"
511524 " status Show current hostname settings\n"
512- " set- hostname NAME Set system hostname\n"
513- " set- icon-name NAME Set icon name for host\n"
514- " set- chassis NAME Set chassis type for host\n"
515- " set- deployment NAME Set deployment environment for host\n"
516- " set- location NAME Set location for host\n"
525+ " hostname [ NAME] Get/set system hostname\n"
526+ " icon-name [ NAME] Get/set icon name for host\n"
527+ " chassis [ NAME] Get/set chassis type for host\n"
528+ " deployment [ NAME] Get/set deployment environment for host\n"
529+ " location [ NAME] Get/set location for host\n"
517530 "\nOptions:\n"
518531 " -h --help Show this help\n"
519532 " --version Show package version\n"
@@ -623,13 +636,18 @@ static int parse_argv(int argc, char *argv[]) {
623636static int hostnamectl_main (sd_bus * bus , int argc , char * argv []) {
624637
625638 static const Verb verbs [] = {
626- { "status" , VERB_ANY , 1 , VERB_DEFAULT , show_status },
627- { "set-hostname" , 2 , 2 , 0 , set_hostname },
628- { "set-icon-name" , 2 , 2 , 0 , set_icon_name },
629- { "set-chassis" , 2 , 2 , 0 , set_chassis },
630- { "set-deployment" , 2 , 2 , 0 , set_deployment },
631- { "set-location" , 2 , 2 , 0 , set_location },
632- { "help" , VERB_ANY , VERB_ANY , 0 , verb_help }, /* Not documented, but supported since it is created. */
639+ { "status" , VERB_ANY , 1 , VERB_DEFAULT , show_status },
640+ { "hostname" , VERB_ANY , 2 , 0 , get_or_set_hostname },
641+ { "set-hostname" , 2 , 2 , 0 , get_or_set_hostname }, /* obsolete */
642+ { "icon-name" , VERB_ANY , 2 , 0 , get_or_set_icon_name },
643+ { "set-icon-name" , 2 , 2 , 0 , get_or_set_icon_name }, /* obsolete */
644+ { "chassis" , VERB_ANY , 2 , 0 , get_or_set_chassis },
645+ { "set-chassis" , 2 , 2 , 0 , get_or_set_chassis }, /* obsolete */
646+ { "deployment" , VERB_ANY , 2 , 0 , get_or_set_deployment },
647+ { "set-deployment" , 2 , 2 , 0 , get_or_set_deployment }, /* obsolete */
648+ { "location" , VERB_ANY , 2 , 0 , get_or_set_location },
649+ { "set-location" , 2 , 2 , 0 , get_or_set_location }, /* obsolete */
650+ { "help" , VERB_ANY , VERB_ANY , 0 , verb_help }, /* Not documented, but supported since it is created. */
633651 {}
634652 };
635653
0 commit comments