Hello ports@,
This updates x11/i3lock from some commmit to 2.9.1. All of jasper@'s
patches were accepted upstream, so there is no need for them.
They did revert an old commit which ended up readding -lpam in the
Makefile, unconditionally, so we still have to patch that out. I will
submit a PR upstream and hopefully the next release will be
patch-free.
OK?
Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/i3lock/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 Makefile
--- Makefile 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ Makefile 9 Jul 2017 15:17:58 -0000
@@ -2,11 +2,11 @@
COMMENT = improved screen locker
+VERSION = 2.9.1
GH_ACCOUNT = i3
GH_PROJECT = i3lock
-# XXX: Remove when upgrading
-GH_COMMIT = 80d4452ec680bcb0e57418f69d44d88ded82047c
-DISTNAME = i3lock-2.9
+GH_TAGNAME = ${VERSION}
+DISTNAME = i3lock-${VERSION}
CATEGORIES = x11
Index: distinfo
===================================================================
RCS file: /cvs/ports/x11/i3lock/distinfo,v
retrieving revision 1.2
diff -u -p -u -p -r1.2 distinfo
--- distinfo 6 May 2017 15:10:18 -0000 1.2
+++ distinfo 9 Jul 2017 15:17:58 -0000
@@ -1,2 +1,2 @@
-SHA256 (i3lock-2.9-80d4452e.tar.gz) =
IrR9TeilPaU6myyezcWpbQhB3iQHNGAR+ycutlEBZRE=
-SIZE (i3lock-2.9-80d4452e.tar.gz) = 23692
+SHA256 (i3lock-2.9.1.tar.gz) = mY50R3gTvJxti9V6lFVBQA996Ny4mE8U1Lb4pSje7/c=
+SIZE (i3lock-2.9.1.tar.gz) = 24108
Index: patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/x11/i3lock/patches/patch-Makefile,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-Makefile
--- patches/patch-Makefile 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ patches/patch-Makefile 9 Jul 2017 15:17:58 -0000
@@ -1,29 +1,11 @@
-$OpenBSD: patch-Makefile,v 1.1.1.1 2017/04/15 12:53:02 jasper Exp $
-
-Add bsd_auth(3) support.
-
---- Makefile.orig Sun Mar 26 15:01:23 2017
-+++ Makefile Fri Apr 14 19:44:10 2017
-@@ -1,4 +1,5 @@
- TOPDIR=$(shell pwd)
-+UNAME=$(shell uname)
-
- INSTALL=install
- PREFIX=/usr
-@@ -16,9 +17,15 @@ CFLAGS += -Wall
+$OpenBSD$
+--- Makefile.orig Sun Jul 9 16:45:41 2017
++++ Makefile Sun Jul 9 16:45:53 2017
+@@ -17,7 +17,6 @@ CFLAGS += -Wall
CPPFLAGS += -D_GNU_SOURCE
- CFLAGS += $(shell $(PKG_CONFIG) --cflags cairo xcb-composite xcb-dpms
xcb-xinerama xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11)
- LIBS += $(shell $(PKG_CONFIG) --libs cairo xcb-composite xcb-dpms
xcb-xinerama xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11)
+ CFLAGS += $(shell $(PKG_CONFIG) --cflags cairo xcb-xinerama xcb-atom
xcb-image xcb-xkb xkbcommon xkbcommon-x11)
+ LIBS += $(shell $(PKG_CONFIG) --libs cairo xcb-xinerama xcb-atom xcb-image
xcb-xkb xkbcommon xkbcommon-x11)
-LIBS += -lpam
LIBS += -lev
LIBS += -lm
-+
-+# OpenBSD lacks PAM, use bsd_auth(3) instead.
-+ifeq ($(UNAME),OpenBSD)
-+ CPPFLAGS += -DUSE_BSDAUTH
-+else
-+ LIBS += -lpam
-+endif
- FILES:=$(wildcard *.c)
- FILES:=$(FILES:.c=.o)
Index: patches/patch-i3lock_c
===================================================================
RCS file: patches/patch-i3lock_c
diff -N patches/patch-i3lock_c
--- patches/patch-i3lock_c 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,231 +0,0 @@
-$OpenBSD: patch-i3lock_c,v 1.1.1.1 2017/04/15 12:53:02 jasper Exp $
-
-Add bsd_auth(3) support.
-
---- i3lock.c.orig Sun Mar 26 15:01:23 2017
-+++ i3lock.c Fri Apr 14 19:42:14 2017
-@@ -18,7 +18,12 @@
- #include <xcb/xkb.h>
- #include <err.h>
- #include <assert.h>
-+#ifdef USE_BSDAUTH
-+#include <login_cap.h>
-+#include <bsd_auth.h>
-+#else
- #include <security/pam_appl.h>
-+#endif
- #include <getopt.h>
- #include <string.h>
- #include <ev.h>
-@@ -29,6 +34,9 @@
- #include <cairo.h>
- #include <cairo/cairo-xcb.h>
-
-+#ifdef __OpenBSD__
-+#include <strings.h> /* explicit_bzero(3) */
-+#endif
- #include "i3lock.h"
- #include "xcb.h"
- #include "cursors.h"
-@@ -49,7 +57,9 @@ char color[7] = "ffffff";
- uint32_t last_resolution[2];
- xcb_window_t win;
- static xcb_cursor_t cursor;
-+#ifndef USE_BSDAUTH
- static pam_handle_t *pam_handle;
-+#endif /* !USE_BSDAUTH */
- int input_position = 0;
- /* Holds the password you enter (in UTF-8). */
- static char password[512];
-@@ -59,11 +69,11 @@ bool unlock_indicator = true;
- char *modifier_string = NULL;
- static bool dont_fork = false;
- struct ev_loop *main_loop;
--static struct ev_timer *clear_pam_wrong_timeout;
-+static struct ev_timer *clear_auth_wrong_timeout;
- static struct ev_timer *clear_indicator_timeout;
- static struct ev_timer *discard_passwd_timeout;
- extern unlock_state_t unlock_state;
--extern pam_state_t pam_state;
-+extern auth_state_t auth_state;
- int failed_attempts = 0;
- bool show_failed_attempts = false;
- bool retry_verification = false;
-@@ -158,6 +168,9 @@ static bool load_compose_table(const char *locale) {
- *
- */
- static void clear_password_memory(void) {
-+#ifdef __OpenBSD__
-+ explicit_bzero(password, strlen(password));
-+#else
- /* A volatile pointer to the password buffer to prevent the compiler from
- * optimizing this out. */
- volatile char *vpassword = password;
-@@ -167,6 +180,7 @@ static void clear_password_memory(void) {
- * compiler from optimizing the calls away, since the value of 'beep'
- * is not known at compile-time. */
- vpassword[c] = c + (int)beep;
-+#endif
- }
-
- ev_timer *start_timer(ev_timer *timer_obj, ev_tstamp timeout, ev_callback_t
callback) {
-@@ -206,13 +220,13 @@ static void finish_input(void) {
- }
-
- /*
-- * Resets pam_state to STATE_PAM_IDLE 2 seconds after an unsuccessful
-+ * Resets auth_state to STATE_AUTH_IDLE 2 seconds after an unsuccessful
- * authentication event.
- *
- */
- static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
- DEBUG("clearing pam wrong\n");
-- pam_state = STATE_PAM_IDLE;
-+ auth_state = STATE_AUTH_IDLE;
- redraw_screen();
-
- /* Clear modifier string. */
-@@ -222,7 +236,7 @@ static void clear_pam_wrong(EV_P_ ev_timer *w, int rev
- }
-
- /* Now free this timeout. */
-- STOP_TIMER(clear_pam_wrong_timeout);
-+ STOP_TIMER(clear_auth_wrong_timeout);
-
- /* retry with input done during pam verification */
- if (retry_verification) {
-@@ -248,11 +262,24 @@ static void discard_passwd_cb(EV_P_ ev_timer *w, int r
- }
-
- static void input_done(void) {
-- STOP_TIMER(clear_pam_wrong_timeout);
-- pam_state = STATE_PAM_VERIFY;
-+ STOP_TIMER(clear_auth_wrong_timeout);
-+ auth_state = STATE_AUTH_VERIFY;
- unlock_state = STATE_STARTED;
- redraw_screen();
-
-+#ifdef USE_BSDAUTH
-+ struct passwd *pw;
-+
-+ if (!(pw = getpwuid(getuid())))
-+ errx(1, "unknown uid %u.", getuid());
-+
-+ if (auth_userokay(pw->pw_name, NULL, NULL, password) != 0) {
-+ DEBUG("successfully authenticated\n");
-+ clear_password_memory();
-+
-+ exit(0);
-+ }
-+#else
- if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
- DEBUG("successfully authenticated\n");
- clear_password_memory();
-@@ -266,12 +293,13 @@ static void input_done(void) {
-
- exit(0);
- }
-+#endif
-
- if (debug_mode)
- fprintf(stderr, "Authentication failure\n");
-
- /* Get state of Caps and Num lock modifiers, to be displayed in
-- * STATE_PAM_WRONG state */
-+ * STATE_AUTH_WRONG state */
- xkb_mod_index_t idx, num_mods;
- const char *mod_name;
-
-@@ -305,7 +333,7 @@ static void input_done(void) {
- }
- }
-
-- pam_state = STATE_PAM_WRONG;
-+ auth_state = STATE_AUTH_WRONG;
- failed_attempts += 1;
- clear_input();
- if (unlock_indicator)
-@@ -314,7 +342,7 @@ static void input_done(void) {
- /* Clear this state after 2 seconds (unless the user enters another
- * password during that time). */
- ev_now_update(main_loop);
-- START_TIMER(clear_pam_wrong_timeout, TSTAMP_N_SECS(2), clear_pam_wrong);
-+ START_TIMER(clear_auth_wrong_timeout, TSTAMP_N_SECS(2), clear_pam_wrong);
-
- /* Cancel the clear_indicator_timeout, it would hide the unlock indicator
- * too early. */
-@@ -393,7 +421,7 @@ static void handle_key_press(xcb_key_press_event_t *ev
- if ((ksym == XKB_KEY_j || ksym == XKB_KEY_m) && !ctrl)
- break;
-
-- if (pam_state == STATE_PAM_WRONG) {
-+ if (auth_state == STATE_AUTH_WRONG) {
- retry_verification = true;
- return;
- }
-@@ -601,6 +629,7 @@ void handle_screen_resize(void) {
- * Callback function for PAM. We only react on password request callbacks.
- *
- */
-+#ifndef USE_BSDAUTH
- static int conv_callback(int num_msg, const struct pam_message **msg,
- struct pam_response **resp, void *appdata_ptr) {
- if (num_msg == 0)
-@@ -627,6 +656,7 @@ static int conv_callback(int num_msg, const struct pam
-
- return 0;
- }
-+#endif /* !USE_BSDAUTH */
-
- /*
- * This callback is only a dummy, see xcb_prepare_cb and xcb_check_cb.
-@@ -782,8 +812,10 @@ int main(int argc, char *argv[]) {
- struct passwd *pw;
- char *username;
- char *image_path = NULL;
-+#ifndef USE_BSDAUTH
- int ret;
- struct pam_conv conv = {conv_callback, NULL};
-+#endif /* !USE_BSDAUTH */
- int curs_choice = CURS_NONE;
- int o;
- int optind = 0;
-@@ -877,17 +909,19 @@ int main(int argc, char *argv[]) {
- * the unlock indicator upon keypresses. */
- srand(time(NULL));
-
-+#ifndef USE_BSDAUTH
- /* Initialize PAM */
- if ((ret = pam_start("i3lock", username, &conv, &pam_handle)) !=
PAM_SUCCESS)
- errx(EXIT_FAILURE, "PAM: %s", pam_strerror(pam_handle, ret));
-
- if ((ret = pam_set_item(pam_handle, PAM_TTY, getenv("DISPLAY"))) !=
PAM_SUCCESS)
- errx(EXIT_FAILURE, "PAM: %s", pam_strerror(pam_handle, ret));
-+#endif /* !USE_BSDAUTH */
-
- /* Using mlock() as non-super-user seems only possible in Linux. Users of
other
- * operating systems should use encrypted swap/no swap (or remove the ifdef
and
- * run i3lock as super-user). */
--#if defined(__linux__)
-+#if defined(__linux__) || defined(__OpenBSD__)
- /* Lock the area where we store the password in memory, we don’t want it
to
- * be swapped to disk. Since Linux 2.6.9, this does not require any
- * privileges, just enough bytes in the RLIMIT_MEMLOCK limit. */
-@@ -985,7 +1019,7 @@ int main(int argc, char *argv[]) {
- cursor = create_cursor(conn, screen, win, curs_choice);
-
- /* Display the "locking…" message while trying to grab the
pointer/keyboard. */
-- pam_state = STATE_PAM_LOCK;
-+ auth_state = STATE_AUTH_LOCK;
- grab_pointer_and_keyboard(conn, screen, cursor);
-
- pid_t pid = fork();
-@@ -1012,7 +1046,7 @@ int main(int argc, char *argv[]) {
- errx(EXIT_FAILURE, "Could not initialize libev. Bad LIBEV_FLAGS?\n");
-
- /* Explicitly call the screen redraw in case "locking…" message was
displayed */
-- pam_state = STATE_PAM_IDLE;
-+ auth_state = STATE_AUTH_IDLE;
- redraw_screen();
-
- struct ev_io *xcb_watcher = calloc(sizeof(struct ev_io), 1);
Index: patches/patch-unlock_indicator_c
===================================================================
RCS file: patches/patch-unlock_indicator_c
diff -N patches/patch-unlock_indicator_c
--- patches/patch-unlock_indicator_c 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,100 +0,0 @@
-$OpenBSD: patch-unlock_indicator_c,v 1.1.1.1 2017/04/15 12:53:02 jasper Exp $
-
-Add bsd_auth(3) support.
-
---- unlock_indicator.c.orig Sun Mar 26 15:01:23 2017
-+++ unlock_indicator.c Fri Apr 14 19:42:14 2017
-@@ -78,7 +78,7 @@ static xcb_visualtype_t *vistype;
- /* Maintain the current unlock/PAM state to draw the appropriate unlock
- * indicator. */
- unlock_state_t unlock_state;
--pam_state_t pam_state;
-+auth_state_t auth_state;
-
- /*
- * Returns the scaling factor of the current screen. E.g., on a 227 DPI
MacBook
-@@ -141,7 +141,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
- }
-
- if (unlock_indicator &&
-- (unlock_state >= STATE_KEY_PRESSED || pam_state > STATE_PAM_IDLE)) {
-+ (unlock_state >= STATE_KEY_PRESSED || auth_state > STATE_AUTH_IDLE)) {
- cairo_scale(ctx, scaling_factor(), scaling_factor());
- /* Draw a (centered) circle with transparent background. */
- cairo_set_line_width(ctx, 10.0);
-@@ -154,12 +154,12 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
-
- /* Use the appropriate color for the different PAM states
- * (currently verifying, wrong password, or default) */
-- switch (pam_state) {
-- case STATE_PAM_VERIFY:
-- case STATE_PAM_LOCK:
-+ switch (auth_state) {
-+ case STATE_AUTH_VERIFY:
-+ case STATE_AUTH_LOCK:
- cairo_set_source_rgba(ctx, 0, 114.0 / 255, 255.0 / 255, 0.75);
- break;
-- case STATE_PAM_WRONG:
-+ case STATE_AUTH_WRONG:
- case STATE_I3LOCK_LOCK_FAILED:
- cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
- break;
-@@ -169,16 +169,16 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
- }
- cairo_fill_preserve(ctx);
-
-- switch (pam_state) {
-- case STATE_PAM_VERIFY:
-- case STATE_PAM_LOCK:
-+ switch (auth_state) {
-+ case STATE_AUTH_VERIFY:
-+ case STATE_AUTH_LOCK:
- cairo_set_source_rgb(ctx, 51.0 / 255, 0, 250.0 / 255);
- break;
-- case STATE_PAM_WRONG:
-+ case STATE_AUTH_WRONG:
- case STATE_I3LOCK_LOCK_FAILED:
- cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
- break;
-- case STATE_PAM_IDLE:
-+ case STATE_AUTH_IDLE:
- cairo_set_source_rgb(ctx, 51.0 / 255, 125.0 / 255, 0);
- break;
- }
-@@ -205,14 +205,14 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
- cairo_set_source_rgb(ctx, 0, 0, 0);
- cairo_select_font_face(ctx, "sans-serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
- cairo_set_font_size(ctx, 28.0);
-- switch (pam_state) {
-- case STATE_PAM_VERIFY:
-+ switch (auth_state) {
-+ case STATE_AUTH_VERIFY:
- text = "verifying…";
- break;
-- case STATE_PAM_LOCK:
-+ case STATE_AUTH_LOCK:
- text = "locking…";
- break;
-- case STATE_PAM_WRONG:
-+ case STATE_AUTH_WRONG:
- text = "wrong!";
- break;
- case STATE_I3LOCK_LOCK_FAILED:
-@@ -245,7 +245,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
- cairo_close_path(ctx);
- }
-
-- if (pam_state == STATE_PAM_WRONG && (modifier_string != NULL)) {
-+ if (auth_state == STATE_AUTH_WRONG && (modifier_string != NULL)) {
- cairo_text_extents_t extents;
- double x, y;
-
-@@ -334,7 +334,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
- *
- */
- void redraw_screen(void) {
-- DEBUG("redraw_screen(unlock_state = %d, pam_state = %d)\n", unlock_state,
pam_state);
-+ DEBUG("redraw_screen(unlock_state = %d, auth_state = %d)\n",
unlock_state, auth_state);
- xcb_pixmap_t bg_pixmap = draw_image(last_resolution);
- xcb_change_window_attributes(conn, win, XCB_CW_BACK_PIXMAP,
(uint32_t[1]){bg_pixmap});
- /* XXX: Possible optimization: Only update the area in the middle of the
Index: patches/patch-unlock_indicator_h
===================================================================
RCS file: patches/patch-unlock_indicator_h
diff -N patches/patch-unlock_indicator_h
--- patches/patch-unlock_indicator_h 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,24 +0,0 @@
-$OpenBSD: patch-unlock_indicator_h,v 1.1.1.1 2017/04/15 12:53:02 jasper Exp $
-
-Add bsd_auth(3) support.
-
---- unlock_indicator.h.orig Sun Mar 26 15:01:23 2017
-+++ unlock_indicator.h Fri Apr 14 19:42:14 2017
-@@ -11,12 +11,12 @@ typedef enum {
- } unlock_state_t;
-
- typedef enum {
-- STATE_PAM_IDLE = 0, /* no PAM interaction at the moment */
-- STATE_PAM_VERIFY = 1, /* currently verifying the password via PAM
*/
-- STATE_PAM_LOCK = 2, /* currently locking the screen */
-- STATE_PAM_WRONG = 3, /* the password was wrong */
-+ STATE_AUTH_IDLE = 0, /* no authenticator interaction at the
moment */
-+ STATE_AUTH_VERIFY = 1, /* currently verifying the password via
authenticator */
-+ STATE_AUTH_LOCK = 2, /* currently locking the screen */
-+ STATE_AUTH_WRONG = 3, /* the password was wrong */
- STATE_I3LOCK_LOCK_FAILED = 4 /* i3lock failed to load */
--} pam_state_t;
-+} auth_state_t;
-
- xcb_pixmap_t draw_image(uint32_t* resolution);
- void redraw_screen(void);
Index: patches/patch-xcb_c
===================================================================
RCS file: patches/patch-xcb_c
diff -N patches/patch-xcb_c
--- patches/patch-xcb_c 15 Apr 2017 12:53:02 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,24 +0,0 @@
-$OpenBSD: patch-xcb_c,v 1.1.1.1 2017/04/15 12:53:02 jasper Exp $
-
-Add bsd_auth(3) support.
-
---- xcb.c.orig Sun Mar 26 15:01:23 2017
-+++ xcb.c Fri Apr 14 19:42:14 2017
-@@ -24,7 +24,7 @@
- #include "cursors.h"
- #include "unlock_indicator.h"
-
--extern pam_state_t pam_state;
-+extern auth_state_t auth_state;
-
- xcb_connection_t *conn;
- xcb_screen_t *screen;
-@@ -262,7 +262,7 @@ void grab_pointer_and_keyboard(xcb_connection_t *conn,
- /* After trying for 10000 times, i3lock will display an error message
- * for 2 sec prior to terminate. */
- if (tries <= 0) {
-- pam_state = STATE_I3LOCK_LOCK_FAILED;
-+ auth_state = STATE_I3LOCK_LOCK_FAILED;
- redraw_screen();
- sleep(1);
- errx(EXIT_FAILURE, "Cannot grab pointer/keyboard");