From: Jakub Palacky Date: Wed, 11 Sep 2024 12:36:40 +0000 (+0200) Subject: util/virutil: Use readpassphrase when libbsd is available X-Git-Tag: v10.8.0-rc1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=317139a316a30e35ce489a242334f73b1d8a4b82;p=thirdparty%2Flibvirt.git 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 --- 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 */