slock-secret-password-2022-10-01-35633d4.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slock-secret-password-2022-10-01-35633d4.diff (1129B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 9855e21..a2020bb 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -10,3 +10,13 @@ static const char *colorname[NUMCOLS] = {
            6  
            7  /* treat a cleared input like a wrong password (color) */
            8  static const int failonclear = 1;
            9 +
           10 +/* length of entires in scom  */
           11 +#define ENTRYLEN 1
           12 +
           13 +static const secretpass scom[ENTRYLEN] = {
           14 +/*         Password                                command */
           15 +        { "shutdown",           "doas poweroff" },
           16 +};
           17 diff --git a/slock.c b/slock.c
           18 index 5ae738c..b92ae4e 100644
           19 --- a/slock.c
           20 +++ b/slock.c
           21 @@ -44,6 +44,11 @@ struct xrandr {
           22          int errbase;
           23  };
           24  
           25 +typedef struct secretpass {
           26 +    char pass[256];
           27 +    char command[256];
           28 +} secretpass;
           29 +
           30  #include "config.h"
           31  
           32  static void
           33 @@ -160,6 +165,13 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
           34                          case XK_Return:
           35                                  passwd[len] = '\0';
           36                                  errno = 0;
           37 +
           38 +                                for (int i = 0; i < ENTRYLEN; i++){
           39 +                                        if (strcmp(scom[i].pass, passwd) == 0){
           40 +                                                system(scom[i].command);
           41 +                                        }
           42 +                                }
           43 +
           44                                  if (!(inputhash = crypt(passwd, hash)))
           45                                          fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
           46                                  else