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