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;
|
return processed;
|
||||||
}
|
}
|
||||||
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(__FreeBSD__)
|
||||||
void qmp_guest_set_user_password(const char *username,
|
void qmp_guest_set_user_password(const char *username,
|
||||||
const char *password,
|
const char *password,
|
||||||
bool crypted,
|
bool crypted,
|
||||||
|
@ -2156,10 +2158,15 @@ void qmp_guest_set_user_password(const char *username,
|
||||||
goto out;
|
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);
|
chpasswddata = g_strdup_printf("%s:%s\n", username, rawpasswddata);
|
||||||
chpasswdlen = strlen(chpasswddata);
|
|
||||||
|
|
||||||
passwd_path = g_find_program_in_path("chpasswd");
|
passwd_path = g_find_program_in_path("chpasswd");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
chpasswdlen = strlen(chpasswddata);
|
||||||
|
|
||||||
if (!passwd_path) {
|
if (!passwd_path) {
|
||||||
error_setg(errp, "cannot find 'passwd' program in 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(1);
|
||||||
reopen_fd_to_null(2);
|
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) {
|
if (crypted) {
|
||||||
execl(passwd_path, "chpasswd", "-e", NULL);
|
execl(passwd_path, "chpasswd", "-e", NULL);
|
||||||
} else {
|
} else {
|
||||||
execl(passwd_path, "chpasswd", NULL);
|
execl(passwd_path, "chpasswd", NULL);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
} else if (pid < 0) {
|
} else if (pid < 0) {
|
||||||
error_setg_errno(errp, errno, "failed to create child process");
|
error_setg_errno(errp, errno, "failed to create child process");
|
||||||
|
@ -2227,7 +2240,17 @@ out:
|
||||||
close(datafd[1]);
|
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,
|
static void ga_read_sysfs_file(int dirfd, const char *pathname, char *buf,
|
||||||
int size, Error **errp)
|
int size, Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -2764,14 +2787,6 @@ int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
|
||||||
return -1;
|
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)
|
GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
|
||||||
{
|
{
|
||||||
error_setg(errp, QERR_UNSUPPORTED);
|
error_setg(errp, QERR_UNSUPPORTED);
|
||||||
|
|
Loading…
Reference in New Issue