Reviewed-by: Konstantin Kostiuk <kkost...@redhat.com> On Mon, Oct 3, 2022 at 12:54 PM Marc-André Lureau < marcandre.lur...@gmail.com> wrote:
> > > On Mon, Oct 3, 2022 at 1:39 PM Alexander Ivanov < > alexander.iva...@virtuozzo.com> wrote: > >> Move qmp_guest_set_user_password() from __linux__ condition to >> (__linux__ || __FreeBSD__) condition. Add command and arguments >> for password setting in FreeBSD. >> >> Signed-off-by: Alexander Ivanov <alexander.iva...@virtuozzo.com> >> > > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > > >> --- >> qga/commands-posix.c | 35 +++++++++++++++++++++++++---------- >> 1 file changed, 25 insertions(+), 10 deletions(-) >> >> diff --git a/qga/commands-posix.c b/qga/commands-posix.c >> index 88e0d0fe24..f5b9e5c530 100644 >> --- a/qga/commands-posix.c >> +++ b/qga/commands-posix.c >> @@ -2122,7 +2122,9 @@ int64_t >> qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp) >> >> return processed; >> } >> +#endif /* __linux__ */ >> >> +#if defined(__linux__) || defined(__FreeBSD__) >> void qmp_guest_set_user_password(const char *username, >> const char *password, >> bool crypted, >> @@ -2156,10 +2158,15 @@ void qmp_guest_set_user_password(const char >> *username, >> goto out; >> } >> >> +#ifdef __FreeBSD__ >> + chpasswddata = g_strdup(rawpasswddata); >> + passwd_path = g_find_program_in_path("pw"); >> +#else >> chpasswddata = g_strdup_printf("%s:%s\n", username, rawpasswddata); >> - chpasswdlen = strlen(chpasswddata); >> - >> passwd_path = g_find_program_in_path("chpasswd"); >> +#endif >> + >> + chpasswdlen = strlen(chpasswddata); >> >> if (!passwd_path) { >> error_setg(errp, "cannot find 'passwd' program in PATH"); >> @@ -2180,11 +2187,17 @@ void qmp_guest_set_user_password(const char >> *username, >> reopen_fd_to_null(1); >> reopen_fd_to_null(2); >> >> +#ifdef __FreeBSD__ >> + const char *h_arg; >> + h_arg = (crypted) ? "-H" : "-h"; >> + execl(passwd_path, "pw", "usermod", "-n", username, h_arg, "0", >> NULL); >> +#else >> if (crypted) { >> execl(passwd_path, "chpasswd", "-e", NULL); >> } else { >> execl(passwd_path, "chpasswd", NULL); >> } >> +#endif >> _exit(EXIT_FAILURE); >> } else if (pid < 0) { >> error_setg_errno(errp, errno, "failed to create child process"); >> @@ -2227,7 +2240,17 @@ out: >> close(datafd[1]); >> } >> } >> +#else /* __linux__ || __FreeBSD__ */ >> +void qmp_guest_set_user_password(const char *username, >> + const char *password, >> + bool crypted, >> + Error **errp) >> +{ >> + error_setg(errp, QERR_UNSUPPORTED); >> +} >> +#endif /* __linux__ || __FreeBSD__ */ >> >> +#ifdef __linux__ >> static void ga_read_sysfs_file(int dirfd, const char *pathname, char >> *buf, >> int size, Error **errp) >> { >> @@ -2764,14 +2787,6 @@ int64_t >> qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp) >> return -1; >> } >> >> -void qmp_guest_set_user_password(const char *username, >> - const char *password, >> - bool crypted, >> - Error **errp) >> -{ >> - error_setg(errp, QERR_UNSUPPORTED); >> -} >> - >> GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp) >> { >> error_setg(errp, QERR_UNSUPPORTED); >> -- >> 2.34.1 >> >> > > -- > Marc-André Lureau >