$OpenBSD: patch-panels_user-accounts_user-utils_c,v 1.5 2021/05/13 09:49:28 ajacoutot Exp $

No utmpx on OpenBSD

XXX implement username syntax validation
We are only checking if the username exists, not if it's valid.

Index: panels/user-accounts/user-utils.c
--- panels/user-accounts/user-utils.c.orig
+++ panels/user-accounts/user-utils.c
@@ -26,7 +26,7 @@
 #include <sys/wait.h>
 #include <limits.h>
 #include <unistd.h>
-#include <utmpx.h>
+#include <utmp.h>
 #include <pwd.h>
 
 #ifdef __FreeBSD__
@@ -341,7 +341,7 @@ clear_entry_validation_error (GtkEntry *entry)
 gsize
 get_username_max_length (void)
 {
-        return sizeof (((struct utmpx *)NULL)->ut_user);
+        return sizeof (((struct utmp *)NULL)->ut_name);
 }
 
 gboolean
@@ -405,6 +405,10 @@ is_valid_username_data_free (isValidUsernameData *data
 #define E_SUCCESS EX_OK
 #define E_BAD_ARG EX_DATAERR
 #define E_NOTFOUND EX_NOUSER
+#elif defined __OpenBSD__
+#define E_SUCCESS 0
+#define E_BAD_ARG 127
+#define E_NOTFOUND 1
 #else
 /* Taken from usermod.c in shadow-utils. */
 #define E_SUCCESS 0
@@ -490,6 +494,11 @@ is_valid_username_async (const gchar *username,
         argv[2] = "-n";
         argv[3] = data->username;
         argv[4] = NULL;
+#elif defined __OpenBSD__
+        argv[0] = "/usr/sbin/userinfo";
+        argv[1] = "--";
+        argv[2] = data->username;
+        argv[3] = NULL;
 #else
         /* "usermod --login" is meant to be used to change a username, but the
          * exit codes can be safely abused to check the validity of username.
