home: add homectl client tool

This commit is contained in:
Lennart Poettering 2019-07-04 19:06:15 +02:00
parent 70a5db5822
commit 4aa0a8ac3e
5 changed files with 3678 additions and 0 deletions

View File

@ -2089,6 +2089,19 @@ if conf.get('ENABLE_HOMED') == 1
install_rpath : rootlibexecdir,
install : true,
install_dir : rootlibexecdir)
executable('homectl',
homectl_sources,
include_directories : includes,
link_with : [libshared],
dependencies : [threads,
libcrypt,
libopenssl,
libp11kit,
libpwquality],
install_rpath : rootlibexecdir,
install : true,
install_dir : rootbindir)
endif
foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']

3607
src/home/homectl.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,16 @@ systemd_homed_sources = files('''
user-record-util.h
'''.split())
homectl_sources = files('''
home-util.c
home-util.h
homectl.c
pwquality-util.c
pwquality-util.h
user-record-util.c
user-record-util.h
'''.split())
if conf.get('ENABLE_HOMED') == 1
install_data('org.freedesktop.home1.conf',
install_dir : dbuspolicydir)

View File

@ -10,6 +10,7 @@
#include "bus-common-errors.h"
#include "home-util.h"
#include "memory-util.h"
#include "pwquality-util.h"
#include "strv.h"
@ -125,6 +126,47 @@ int quality_check_password(
return 0;
}
#define N_SUGGESTIONS 6
int suggest_passwords(void) {
_cleanup_(pwquality_free_settingsp) pwquality_settings_t *pwq = NULL;
_cleanup_strv_free_erase_ char **suggestions = NULL;
_cleanup_(erase_and_freep) char *joined = NULL;
char buf[PWQ_MAX_ERROR_MESSAGE_LEN];
void *auxerror;
size_t i;
int r;
pwq = pwquality_default_settings();
if (!pwq)
return log_oom();
r = pwquality_read_config(pwq, NULL, &auxerror);
if (r < 0)
log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to read libpwquality configuation, ignoring: %s",
pwquality_strerror(buf, sizeof(buf), r, auxerror));
pwquality_maybe_disable_dictionary(pwq);
suggestions = new0(char*, N_SUGGESTIONS);
if (!suggestions)
return log_oom();
for (i = 0; i < N_SUGGESTIONS; i++) {
r = pwquality_generate(pwq, 64, suggestions + i);
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to generate password, ignoring: %s",
pwquality_strerror(buf, sizeof(buf), r, NULL));
}
joined = strv_join(suggestions, " ");
if (!joined)
return log_oom();
log_info("Password suggestions: %s", joined);
return 0;
}
#else
int quality_check_password(
@ -137,4 +179,8 @@ int quality_check_password(
return 0;
}
int suggest_passwords(void) {
return 0;
}
#endif

View File

@ -5,3 +5,5 @@
#include "user-record.h"
int quality_check_password(UserRecord *hr, UserRecord *secret, sd_bus_error *error);
int suggest_passwords(void);