slock-custom-password-1.5.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slock-custom-password-1.5.diff (4440B)
       ---
            1 diff --git a/Makefile b/Makefile
            2 index b20fd4e..bbbf83f 100644
            3 --- a/Makefile
            4 +++ b/Makefile
            5 @@ -6,17 +6,18 @@ include config.mk
            6  SRC = slock.c ${COMPATSRC}
            7  OBJ = ${SRC:.c=.o}
            8  
            9 -all: options slock
           10 +all: options clean slock
           11  
           12  options:
           13          @echo slock build options:
           14          @echo "CFLAGS   = ${CFLAGS}"
           15          @echo "LDFLAGS  = ${LDFLAGS}"
           16          @echo "CC       = ${CC}"
           17 +        @echo "DEFINES  = ${DEFINES}"
           18  
           19  .c.o:
           20          @echo CC $<
           21 -        @${CC} -c ${CFLAGS} $<
           22 +        @${CC} -c ${CFLAGS} ${DEFINES} $<
           23  
           24  ${OBJ}: config.h config.mk arg.h util.h
           25  
           26 @@ -25,6 +26,10 @@ config.h:
           27          @cp config.def.h $@
           28  
           29  slock: ${OBJ}
           30 +        @if [ -z ${PW} ]; then \
           31 +            echo "Define password when running make! Example: 'make PW=xyz'"; \
           32 +            exit 1; \
           33 +        fi
           34          @echo CC -o $@
           35          @${CC} -o $@ ${OBJ} ${LDFLAGS}
           36  
           37 @@ -41,7 +46,7 @@ dist: clean
           38          @gzip slock-${VERSION}.tar
           39          @rm -rf slock-${VERSION}
           40  
           41 -install: all
           42 +install: options slock
           43          @echo installing executable file to ${DESTDIR}${PREFIX}/bin
           44          @mkdir -p ${DESTDIR}${PREFIX}/bin
           45          @cp -f slock ${DESTDIR}${PREFIX}/bin
           46 diff --git a/config.mk b/config.mk
           47 index 1e1ca45..75ee770 100644
           48 --- a/config.mk
           49 +++ b/config.mk
           50 @@ -12,16 +12,15 @@ X11LIB = /usr/X11R6/lib
           51  
           52  # includes and libs
           53  INCS = -I. -I/usr/include -I${X11INC}
           54 -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr
           55 +LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr
           56  
           57  # flags
           58  CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
           59  CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
           60  LDFLAGS = -s ${LIBS}
           61 +DEFINES += -DPW=\"${PW}\"
           62  COMPATSRC = explicit_bzero.c
           63  
           64 -# On OpenBSD and Darwin remove -lcrypt from LIBS
           65 -#LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr
           66  # On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS
           67  # On NetBSD add -D_NETBSD_SOURCE to CPPFLAGS
           68  #CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_NETBSD_SOURCE
           69 diff --git a/slock.c b/slock.c
           70 index 5ae738c..b78e14a 100644
           71 --- a/slock.c
           72 +++ b/slock.c
           73 @@ -83,53 +83,11 @@ dontkillme(void)
           74  }
           75  #endif
           76  
           77 -static const char *
           78 -gethash(void)
           79 -{
           80 -        const char *hash;
           81 -        struct passwd *pw;
           82 -
           83 -        /* Check if the current user has a password entry */
           84 -        errno = 0;
           85 -        if (!(pw = getpwuid(getuid()))) {
           86 -                if (errno)
           87 -                        die("slock: getpwuid: %s\n", strerror(errno));
           88 -                else
           89 -                        die("slock: cannot retrieve password entry\n");
           90 -        }
           91 -        hash = pw->pw_passwd;
           92 -
           93 -#if HAVE_SHADOW_H
           94 -        if (!strcmp(hash, "x")) {
           95 -                struct spwd *sp;
           96 -                if (!(sp = getspnam(pw->pw_name)))
           97 -                        die("slock: getspnam: cannot retrieve shadow entry. "
           98 -                            "Make sure to suid or sgid slock.\n");
           99 -                hash = sp->sp_pwdp;
          100 -        }
          101 -#else
          102 -        if (!strcmp(hash, "*")) {
          103 -#ifdef __OpenBSD__
          104 -                if (!(pw = getpwuid_shadow(getuid())))
          105 -                        die("slock: getpwnam_shadow: cannot retrieve shadow entry. "
          106 -                            "Make sure to suid or sgid slock.\n");
          107 -                hash = pw->pw_passwd;
          108 -#else
          109 -                die("slock: getpwuid: cannot retrieve shadow entry. "
          110 -                    "Make sure to suid or sgid slock.\n");
          111 -#endif /* __OpenBSD__ */
          112 -        }
          113 -#endif /* HAVE_SHADOW_H */
          114 -
          115 -        return hash;
          116 -}
          117 -
          118  static void
          119 -readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
          120 -       const char *hash)
          121 +readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens)
          122  {
          123          XRRScreenChangeNotifyEvent *rre;
          124 -        char buf[32], passwd[256], *inputhash;
          125 +        char buf[32], passwd[256];
          126          int num, screen, running, failure, oldc;
          127          unsigned int len, color;
          128          KeySym ksym;
          129 @@ -159,11 +117,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
          130                          switch (ksym) {
          131                          case XK_Return:
          132                                  passwd[len] = '\0';
          133 -                                errno = 0;
          134 -                                if (!(inputhash = crypt(passwd, hash)))
          135 -                                        fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
          136 -                                else
          137 -                                        running = !!strcmp(inputhash, hash);
          138 +                                running = !!strcmp(passwd, PW );
          139                                  if (running) {
          140                                          XBell(dpy, 100);
          141                                          failure = 1;
          142 @@ -311,7 +265,6 @@ main(int argc, char **argv) {
          143          struct group *grp;
          144          uid_t duid;
          145          gid_t dgid;
          146 -        const char *hash;
          147          Display *dpy;
          148          int s, nlocks, nscreens;
          149  
          150 @@ -339,10 +292,7 @@ main(int argc, char **argv) {
          151          dontkillme();
          152  #endif
          153  
          154 -        hash = gethash();
          155          errno = 0;
          156 -        if (!crypt("", hash))
          157 -                die("slock: crypt: %s\n", strerror(errno));
          158  
          159          if (!(dpy = XOpenDisplay(NULL)))
          160                  die("slock: cannot open display\n");
          161 @@ -389,7 +339,7 @@ main(int argc, char **argv) {
          162          }
          163  
          164          /* everything is now blank. Wait for the correct password */
          165 -        readpw(dpy, &rr, locks, nscreens, hash);
          166 +        readpw(dpy, &rr, locks, nscreens);
          167  
          168          return 0;
          169  }