Hello ports@, In a previous mail, I was asked to suppress a warning about xmsm lacking suid root. [1]
I patched too much in my #ifndef/#endif to suppress the warning, so the logic ended up assuming that the non SUID root binary can be ran as root, and exec's /usr/libexec/login_passwd as root when attempting a lock. This is incorrect. I narrowed down the #ifndef/#ifdef logic to just include the warning and the failure to lock is now fixed. This also bumps REVISION to 1. Tested on macppc/powerpc, arm64, and amd64. Good to merge? I said this in a previous mail [2], but I think it got overlooked: > Is it possible to backport this to -stable as the bsd-auth patch and > REBOOT_CMD fix breaking bugs in the port? Without these two changes, > the locking mechanism freezes up the xsession and reboot/shutdown/halt > do the same. I have a machine that I run -stable on, and it'd be nice > to have these fixes on that machine. I understand port updates usually > don't get backported to -stable, but would this be a valid enough > exception? Ideally, x11/emwm should be updated in tandem with x11/emwm-utils as they work as a team, so could that be backported as well? Thanks, [1] https://marc.info/?l=openbsd-ports&m=174714900304596&w=2 [2] https://marc.info/?l=openbsd-ports&m=174751603117909&w=2 -- iz (she/her) > i like to say mundane things, > there are too many uninteresting things > that go unnoticed. izder456 (dot) neocities (dot) org
diff --git a/Makefile b/Makefile index 6a5e5822b36..127fceca498 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ COMMENT = session manager and a toolchest-like application launcher V = 1.3 DISTNAME = emwm-utils-src-${V} PKGNAME = emwm-utils-${V} -REVISION = 0 +REVISION = 1 CATEGORIES = x11 HOMEPAGE = https://fastestcode.org/emwm.html diff --git a/patches/patch-src_smmain_c b/patches/patch-src_smmain_c index cf6ad7122bf..32ca62c615b 100644 --- a/patches/patch-src_smmain_c +++ b/patches/patch-src_smmain_c @@ -61,21 +61,18 @@ Index: src/smmain.c memset(pwb,0,strlen(pwb)); XmTextFieldSetString(wpasswd,""); -@@ -988,7 +1009,8 @@ static Boolean set_privileges(Boolean elevate) +@@ -988,10 +1009,13 @@ static Boolean set_privileges(Boolean elevate) if(!initialized){ orig_uid = geteuid(); orig_gid = getegid(); - -+ /* BSD-auth handles authentication, no SUID needed. */ -+#ifndef __OpenBSD__ if(orig_uid != 0){ ++ /* BSD-auth handles authentication, no SUID needed. */ ++#ifndef __OpenBSD__ log_msg("%s must be setuid root to enable " "screen locking capabilities.\n",bin_name); -@@ -996,6 +1018,7 @@ static Boolean set_privileges(Boolean elevate) ++#endif /* __OpenBSD__ */ ++ + initialized = True; can_elevate = False; return False; - } -+#endif /* __OpenBSD__ */ - initialized = True; - can_elevate = True; - } diff --git a/patches/patch-src_smmain_c.orig b/patches/patch-src_smmain_c.orig new file mode 100644 index 00000000000..cf6ad7122bf --- /dev/null +++ b/patches/patch-src_smmain_c.orig @@ -0,0 +1,81 @@ +# For bsd-auth support + +Index: src/smmain.c +--- src/smmain.c.orig ++++ src/smmain.c +@@ -60,6 +60,9 @@ + #if defined(__linux__) || defined(__svr4__) + #include <crypt.h> + #include <shadow.h> ++#elif defined(__OpenBSD__) ++#include <bsd_auth.h> ++#include <login_cap.h> + #endif + #include "smglobal.h" + #include "smconf.h" +@@ -419,6 +422,11 @@ static void lock_screen(void) + app_res.enable_locking = False; + return; + } ++ ++#ifdef __OpenBSD__ ++ /* BSD-auth handles authentication, no password hash check needed */ ++ can_auth = True; ++#else + + if(set_privileges(True)) { + +@@ -441,7 +449,8 @@ static void lock_screen(void) + + set_privileges(False); + } +- ++#endif /* __OpenBSD__ */ ++ + if(!can_auth){ + if(!app_res.silent) XBell(XtDisplay(wshell), 100); + log_msg("Cannot authenticate. Screen locking disabled!\n"); +@@ -861,6 +870,17 @@ static void passwd_enter_cb(Widget w, + char *upw = NULL; + + login = get_login(); ++ ++#ifdef __OpenBSD__ ++ int auth_result = auth_userokay(login, NULL, "auth-xmsm", pwb); ++ if (auth_result) { ++ unlock_screen(); ++ set_unlock_message(NULL); ++ } else { ++ if(!app_res.silent) XBell(XtDisplay(w), 100); ++ set_unlock_message(MSG_NOACCESS); ++ } ++#else + + set_privileges(True); + +@@ -896,6 +916,7 @@ static void passwd_enter_cb(Widget w, + if(!app_res.silent) XBell(XtDisplay(w),100); + set_unlock_message(MSG_NOACCESS); + } ++#endif /* __OpenBSD__ */ + + memset(pwb,0,strlen(pwb)); + XmTextFieldSetString(wpasswd,""); +@@ -988,7 +1009,8 @@ static Boolean set_privileges(Boolean elevate) + if(!initialized){ + orig_uid = geteuid(); + orig_gid = getegid(); +- ++ /* BSD-auth handles authentication, no SUID needed. */ ++#ifndef __OpenBSD__ + if(orig_uid != 0){ + log_msg("%s must be setuid root to enable " + "screen locking capabilities.\n",bin_name); +@@ -996,6 +1018,7 @@ static Boolean set_privileges(Boolean elevate) + can_elevate = False; + return False; + } ++#endif /* __OpenBSD__ */ + initialized = True; + can_elevate = True; + }