qga: Add support for user password setting in FreeBSD
Move qmp_guest_set_user_password() from __linux__ condition to (__linux__ || __FreeBSD__) condition. Add command and arguments for password setting in FreeBSD. Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
parent
e40762fcd6
commit
4fd0642e84
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user