Hi cwm users,

In converting this to use getline(3) over fgetln(3), I'm asking the question if
this (imho) mis-feature belongs in a window manager. I've hinted at wanting to
remove it in the past but there was opposition.  As a compromise, we could just
leave the 'ssh>' menu available, but it will not be pre-populated (nor
auto-completed) by what's in ~/.ssh/known_hosts; just type in the
host/ip/whatever at the menu prompt. cwm(1) does a very rudimentary pass at
parsing the known_hosts file, and there's no reason to hoist code from ssh(1)
just to get auto-completion in a window manager menu.

Below is the minimal code part in kbfunc_menu_ssh().

Preferably, I'd like to remove the whole ssh menu, but can live with the below
if it's useful to others.

Thoughts?

Thanks,
Okan

Index: kbfunc.c
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/kbfunc.c,v
retrieving revision 1.145
diff -u -p -r1.145 kbfunc.c
--- kbfunc.c    9 May 2017 13:40:18 -0000       1.145
+++ kbfunc.c    6 Jul 2017 19:36:13 -0000
@@ -462,50 +462,16 @@ kbfunc_menu_ssh(void *ctx, struct cargs 
        struct cmd_ctx          *cmd;
        struct menu             *mi;
        struct menu_q            menuq;
-       FILE                    *fp;
-       char                    *buf, *lbuf, *p;
-       char                     hostbuf[HOST_NAME_MAX+1];
        char                     path[PATH_MAX];
        int                      l;
-       size_t                   len;
 
        TAILQ_FOREACH(cmd, &Conf.cmdq, entry) {
                if (strcmp(cmd->name, "term") == 0)
                        break;
        }
-       TAILQ_INIT(&menuq);
 
-       if ((fp = fopen(Conf.known_hosts, "r")) == NULL) {
-               warn("%s: %s", __func__, Conf.known_hosts);
-               goto menu;
-       }
+       TAILQ_INIT(&menuq);
 
-       lbuf = NULL;
-       while ((buf = fgetln(fp, &len))) {
-               if (buf[len - 1] == '\n')
-                       buf[len - 1] = '\0';
-               else {
-                       /* EOF without EOL, copy and add the NUL */
-                       lbuf = xmalloc(len + 1);
-                       (void)memcpy(lbuf, buf, len);
-                       lbuf[len] = '\0';
-                       buf = lbuf;
-               }
-               /* skip hashed hosts */
-               if (strncmp(buf, HASH_MARKER, strlen(HASH_MARKER)) == 0)
-                       continue;
-               for (p = buf; *p != ',' && *p != ' ' && p != buf + len; p++) {
-                       /* do nothing */
-               }
-               /* ignore badness */
-               if (p - buf + 1 > sizeof(hostbuf))
-                       continue;
-               (void)strlcpy(hostbuf, buf, p - buf + 1);
-               menuq_add(&menuq, NULL, "%s", hostbuf);
-       }
-       free(lbuf);
-       (void)fclose(fp);
-menu:
        if ((mi = menu_filter(sc, &menuq, "ssh", NULL, (CWM_MENU_DUMMY),
            search_match_text, search_print_text)) != NULL) {
                if (mi->text[0] == '\0')

Reply via email to