Message ID | 20221003093911.1844031-6-alexander.ivanov@virtuozzo.com |
---|---|
State | New |
Headers | show |
Series | qga: Add FreeBSD support | expand |
On Mon, Oct 3, 2022 at 1:39 PM Alexander Ivanov < alexander.ivanov@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.ivanov@virtuozzo.com> > Reviewed-by: Marc-André Lureau <marcandre.lureau@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 > >
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> On Mon, Oct 3, 2022 at 12:54 PM Marc-André Lureau < marcandre.lureau@gmail.com> wrote: > > > On Mon, Oct 3, 2022 at 1:39 PM Alexander Ivanov < > alexander.ivanov@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.ivanov@virtuozzo.com> >> > > Reviewed-by: Marc-André Lureau <marcandre.lureau@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 >
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);
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.ivanov@virtuozzo.com> --- qga/commands-posix.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-)