Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package swaylock for openSUSE:Factory checked in at 2026-03-11 20:54:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/swaylock (Old) and /work/SRC/openSUSE:Factory/.swaylock.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "swaylock" Wed Mar 11 20:54:46 2026 rev:15 rq:1338188 version:1.8.5 Changes: -------- --- /work/SRC/openSUSE:Factory/swaylock/swaylock.changes 2025-11-09 21:08:55.081695343 +0100 +++ /work/SRC/openSUSE:Factory/.swaylock.new.8177/swaylock.changes 2026-03-11 20:56:23.096559392 +0100 @@ -1,0 +2,10 @@ +Wed Mar 11 05:17:44 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 1.8.5: + * seat: don't abort on wl_keyboard.keymap_format.no_keymap + * Use bright black rather than black for LOG_DEBUG + * Add short example of config file to man page + * Always set wl_buffer scale + * pam: only send the password once per conversation + +------------------------------------------------------------------- Old: ---- swaylock-1.8.4.obscpio New: ---- swaylock-1.8.5.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ swaylock.spec ++++++ --- /var/tmp/diff_new_pack.bazeIP/_old 2026-03-11 20:56:23.840590088 +0100 +++ /var/tmp/diff_new_pack.bazeIP/_new 2026-03-11 20:56:23.840590088 +0100 @@ -1,7 +1,7 @@ # # spec file for package swaylock # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: swaylock -Version: 1.8.4 +Version: 1.8.5 Release: 0 Summary: Screen locker for Wayland License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.bazeIP/_old 2026-03-11 20:56:23.884591903 +0100 +++ /var/tmp/diff_new_pack.bazeIP/_new 2026-03-11 20:56:23.892592233 +0100 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/swaywm/swaylock.git</param> - <param name="revision">v1.8.4</param> + <param name="revision">v1.8.5</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">disable</param> ++++++ swaylock-1.8.4.obscpio -> swaylock-1.8.5.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/log.c new/swaylock-1.8.5/log.c --- old/swaylock-1.8.4/log.c 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/log.c 2026-03-09 18:00:43.000000000 +0100 @@ -13,7 +13,7 @@ [LOG_SILENT] = "", [LOG_ERROR ] = "\x1B[1;31m", [LOG_INFO ] = "\x1B[1;34m", - [LOG_DEBUG ] = "\x1B[1;30m", + [LOG_DEBUG ] = "\x1B[1;90m", }; void swaylock_log_init(enum log_importance verbosity) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/meson.build new/swaylock-1.8.5/meson.build --- old/swaylock-1.8.4/meson.build 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/meson.build 2026-03-09 18:00:43.000000000 +0100 @@ -1,7 +1,7 @@ project( 'swaylock', 'c', - version: '1.8.4', + version: '1.8.5', license: 'MIT', meson_version: '>=0.59.0', default_options: [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/pam.c new/swaylock-1.8.5/pam.c --- old/swaylock-1.8.4/pam.c 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/pam.c 2026-03-09 18:00:43.000000000 +0100 @@ -10,8 +10,6 @@ #include "password-buffer.h" #include "swaylock.h" -static char *pw_buf = NULL; - void initialize_pw_backend(int argc, char **argv) { if (getuid() != geteuid() || getgid() != getegid()) { swaylock_log(LOG_ERROR, @@ -24,8 +22,14 @@ } } +struct conv_state { + char *password; +}; + static int handle_conversation(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *data) { + struct conv_state *state = data; + /* PAM expects an array of responses, one for each message */ struct pam_response *pam_reply = calloc(num_msg, sizeof(struct pam_response)); @@ -38,11 +42,18 @@ switch (msg[i]->msg_style) { case PAM_PROMPT_ECHO_OFF: case PAM_PROMPT_ECHO_ON: - pam_reply[i].resp = strdup(pw_buf); // PAM clears and frees this + /* workaround pam_systemd_home internal retries: + * https://github.com/systemd/systemd/blob/main/src/home/pam_systemd_home.c#L594-L599 + * if the password has already been rejected once, abort the conversation */ + if (state->password == NULL) { + return PAM_ABORT; + } + pam_reply[i].resp = strdup(state->password); // PAM clears and frees this if (pam_reply[i].resp == NULL) { swaylock_log(LOG_ERROR, "Allocation failed"); return PAM_ABORT; } + state->password = NULL; break; case PAM_ERROR_MSG: case PAM_TEXT_INFO: @@ -71,6 +82,7 @@ } void run_pw_backend_child(void) { + char *pw_buf = NULL; struct passwd *passwd = getpwuid(getuid()); if (!passwd) { swaylock_log_errno(LOG_ERROR, "getpwuid failed"); @@ -79,9 +91,10 @@ char *username = passwd->pw_name; + struct conv_state state = {0}; const struct pam_conv conv = { .conv = handle_conversation, - .appdata_ptr = NULL, + .appdata_ptr = &state, }; pam_handle_t *auth_handle = NULL; if (pam_start("swaylock", username, &conv, &auth_handle) != PAM_SUCCESS) { @@ -101,9 +114,11 @@ break; } + state.password = pw_buf; int pam_status = pam_authenticate(auth_handle, 0); password_buffer_destroy(pw_buf, size); pw_buf = NULL; + state.password = NULL; bool success = pam_status == PAM_SUCCESS; if (!success) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/render.c new/swaylock-1.8.5/render.c --- old/swaylock-1.8.4/render.c 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/render.c 2026-03-09 18:00:43.000000000 +0100 @@ -91,7 +91,6 @@ cairo_restore(cairo); cairo_identity_matrix(cairo); - wl_surface_set_buffer_scale(surface->surface, surface->scale); wl_surface_attach(surface->surface, buffer.buffer, 0, 0); wl_surface_damage_buffer(surface->surface, 0, 0, INT32_MAX, INT32_MAX); need_destroy = true; @@ -100,6 +99,9 @@ surface->last_buffer_height = buffer_height; } + // It is possible for the surface scale to change even if the wl_buffer size hasn't + wl_surface_set_buffer_scale(surface->surface, surface->scale); + render_frame(surface); surface->dirty = false; surface->frame = wl_surface_frame(surface->surface); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/seat.c new/swaylock-1.8.5/seat.c --- old/swaylock-1.8.4/seat.c 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/seat.c 2026-03-09 18:00:43.000000000 +0100 @@ -12,25 +12,33 @@ uint32_t format, int32_t fd, uint32_t size) { struct swaylock_seat *seat = data; struct swaylock_state *state = seat->state; - if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) { - close(fd); - swaylock_log(LOG_ERROR, "Unknown keymap format %d, aborting", format); - exit(1); - } - char *map_shm = mmap(NULL, size - 1, PROT_READ, MAP_PRIVATE, fd, 0); - if (map_shm == MAP_FAILED) { - close(fd); - swaylock_log(LOG_ERROR, "Unable to initialize keymap shm, aborting"); - exit(1); - } - struct xkb_keymap *keymap = xkb_keymap_new_from_buffer( + + struct xkb_keymap *keymap = NULL; + struct xkb_state *xkb_state = NULL; + + switch (format) { + case WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP: + break; + case WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1:; + char *map_shm = mmap(NULL, size - 1, PROT_READ, MAP_PRIVATE, fd, 0); + if (map_shm == MAP_FAILED) { + close(fd); + swaylock_log(LOG_ERROR, "Unable to initialize keymap shm, aborting"); + exit(1); + } + keymap = xkb_keymap_new_from_buffer( state->xkb.context, map_shm, size - 1, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); - munmap(map_shm, size - 1); + assert(keymap); + munmap(map_shm, size - 1); + + xkb_state = xkb_state_new(keymap); + assert(xkb_state); + break; + } + close(fd); - assert(keymap); - struct xkb_state *xkb_state = xkb_state_new(keymap); - assert(xkb_state); + xkb_keymap_unref(state->xkb.keymap); xkb_state_unref(state->xkb.state); state->xkb.keymap = keymap; @@ -59,6 +67,10 @@ uint32_t serial, uint32_t time, uint32_t key, uint32_t _key_state) { struct swaylock_seat *seat = data; struct swaylock_state *state = seat->state; + if (state->xkb.state == NULL) { + return; + } + enum wl_keyboard_key_state key_state = _key_state; xkb_keysym_t sym = xkb_state_key_get_one_sym(state->xkb.state, key + 8); uint32_t keycode = key_state == WL_KEYBOARD_KEY_STATE_PRESSED ? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/swaylock-1.8.4/swaylock.1.scd new/swaylock-1.8.5/swaylock.1.scd --- old/swaylock-1.8.4/swaylock.1.scd 2025-11-06 10:06:57.000000000 +0100 +++ new/swaylock-1.8.5/swaylock.1.scd 2026-03-09 18:00:43.000000000 +0100 @@ -19,7 +19,14 @@ options in the configuration file using the format _long-option=value_. For options such as _ignore-empty-password_, just supply the _long-option_. All leading dashes should be omitted and the equals sign is required for - flags that take an argument. + flags that take an argument. For example: + + ``` + image=/usr/share/backgrounds/sway/Sway_Wallpaper_Blue_768x1024.png + scaling=center + show-failed-attempts + ring-color=#ff00ff + ``` *-d, --debug* Enable debugging output. ++++++ swaylock.obsinfo ++++++ --- /var/tmp/diff_new_pack.bazeIP/_old 2026-03-11 20:56:24.096600650 +0100 +++ /var/tmp/diff_new_pack.bazeIP/_new 2026-03-11 20:56:24.104600980 +0100 @@ -1,5 +1,5 @@ name: swaylock -version: 1.8.4 -mtime: 1762420017 -commit: ed43580a1907ac86b5befb289fe5de03578a62e3 +version: 1.8.5 +mtime: 1773075643 +commit: 1a4c472c11ee0354e5a689e33fad4ecce533ddc3
