From 317139a316a30e35ce489a242334f73b1d8a4b82 Mon Sep 17 00:00:00 2001 From: Jakub Palacky Date: Wed, 11 Sep 2024 14:36:40 +0200 Subject: [PATCH] util/virutil: Use readpassphrase when libbsd is available When libbsd is available, use the preferred readpassphrase() function isntead of getpass() as the getpass() function has been marked as obsolete and shouldnt be used Signed-off-by: Jakub Palacky Signed-off-by: Michal Privoznik Reviewed-by: Michal Privoznik --- meson.build | 6 ++++++ src/util/meson.build | 1 + src/util/virutil.c | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/meson.build b/meson.build index 297fbfae48..4c6e5a088e 100644 --- a/meson.build +++ b/meson.build @@ -954,6 +954,11 @@ if blkid_dep.found() conf.set('WITH_BLKID', 1) endif +libbsd_dep = dependency('libbsd', required: false) +if libbsd_dep.found() + conf.set('WITH_LIBBSD', 1) +endif + capng_dep = dependency('libcap-ng', required: get_option('capng')) if capng_dep.found() conf.set('WITH_CAPNG', 1) @@ -2335,6 +2340,7 @@ libs_summary = { 'dlopen': dlopen_dep.found(), 'fuse': fuse_dep.found(), 'glusterfs': glusterfs_dep.found(), + 'libbsd': libbsd_dep.found(), 'libiscsi': libiscsi_dep.found(), 'libkvm': libkvm_dep.found(), 'libnbd': libnbd_dep.found(), diff --git a/src/util/meson.build b/src/util/meson.build index 896c795150..54db542957 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -194,6 +194,7 @@ virt_util_lib = static_library( devmapper_dep, gnutls_dep, intl_dep, + libbsd_dep, libm_dep, libnl_dep, libutil_dep, diff --git a/src/util/virutil.c b/src/util/virutil.c index 6c89a48e51..bf6008fdfb 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -31,6 +31,10 @@ # include #endif /* WIN32 */ +#ifdef WITH_LIBBSD +# include +#endif + #ifdef __linux__ # include #endif @@ -1773,6 +1777,19 @@ char *virGetPassword(void) } return g_string_free(pw, FALSE); +#elif WITH_LIBBSD /* !WIN32 */ +# ifndef PASS_MAX +# define PASS_MAX 1024 +# endif + char *pass = NULL; + g_autofree char *buffer = g_new0(char, PASS_MAX); + + pass = readpassphrase("", buffer, PASS_MAX, 0); + if (pass == NULL) { + return NULL; + } + + return g_steal_pointer(&buffer); #else /* !WIN32 */ return g_strdup(getpass("")); #endif /* ! WIN32 */ -- 2.47.2