Diff for /embedaddon/mpd/src/console.c between versions 1.1 and 1.1.1.4

version 1.1, 2012/02/21 23:32:47 version 1.1.1.4, 2019/10/22 13:49:55
Line 87 Line 87
  */   */
   
   static const struct confinfo  gConfList[] = {    static const struct confinfo  gConfList[] = {
       { 0,        CONSOLE_AUTH,           "auth"          },
       { 0,        0,                      NULL            },
     };
   
     static const struct confinfo  sConfList[] = {
     { 0,        CONSOLE_LOGGING,        "logging"       },      { 0,        CONSOLE_LOGGING,        "logging"       },
     { 0,        0,                      NULL            },      { 0,        0,                      NULL            },
   };    };
Line 107  ConsoleInit(Console c) Line 112  ConsoleInit(Console c)
   memset(&gConsole, 0, sizeof(gConsole));    memset(&gConsole, 0, sizeof(gConsole));
   ParseAddr(DEFAULT_CONSOLE_IP, &c->addr, ALLOW_IPV4|ALLOW_IPV6);    ParseAddr(DEFAULT_CONSOLE_IP, &c->addr, ALLOW_IPV4|ALLOW_IPV6);
   c->port = DEFAULT_CONSOLE_PORT;    c->port = DEFAULT_CONSOLE_PORT;
     Enable(&c->options, CONSOLE_AUTH);
   
   SLIST_INIT(&c->sessions);    SLIST_INIT(&c->sessions);
       
Line 169  ConsoleClose(Console c) Line 175  ConsoleClose(Console c)
   return 0;    return 0;
 }  }
   
   void
   ConsoleCancelCleanup(void *rwlock)
   {
     pthread_rwlock_t p = (pthread_rwlock_t)rwlock;
   
     RWLOCK_UNLOCK(p);
   }
   
 /*  /*
  * ConsoleStat()   * ConsoleStat()
  */   */
Line 186  ConsoleStat(Context ctx, int ac, char *av[], void *arg Line 200  ConsoleStat(Context ctx, int ac, char *av[], void *arg
   Printf("\tIP-Address    : %s\r\n", u_addrtoa(&c->addr,addrstr,sizeof(addrstr)));    Printf("\tIP-Address    : %s\r\n", u_addrtoa(&c->addr,addrstr,sizeof(addrstr)));
   Printf("\tPort          : %d\r\n", c->port);    Printf("\tPort          : %d\r\n", c->port);
   
     pthread_cleanup_push(ConsoleCancelCleanup, c->lock);
   RWLOCK_RDLOCK(c->lock);    RWLOCK_RDLOCK(c->lock);
   Printf("Active sessions:\r\n");    Printf("Active sessions:\r\n");
   SLIST_FOREACH(s, &c->sessions, next) {    SLIST_FOREACH(s, &c->sessions, next) {
     Printf("\tUsername: %s\tFrom: %s\r\n",      Printf("\tUsername: %s\tFrom: %s\r\n",
         s->user.username, u_addrtoa(&s->peer_addr,addrstr,sizeof(addrstr)));          s->user.username, u_addrtoa(&s->peer_addr,addrstr,sizeof(addrstr)));
   }    }
  RWLOCK_UNLOCK(c->lock);  pthread_cleanup_pop(1);
   
     Printf("Global options:\r\n");
     OptStat(ctx, &c->options, gConfList);
   if (cs) {    if (cs) {
     Printf("This session options:\r\n");      Printf("This session options:\r\n");
    OptStat(ctx, &cs->options, gConfList);    OptStat(ctx, &cs->options, sConfList);
   }    }
   return 0;    return 0;
 }  }
Line 233  ConsoleConnect(int type, void *cookie) Line 250  ConsoleConnect(int type, void *cookie)
   cs->write = ConsoleSessionWrite;    cs->write = ConsoleSessionWrite;
   cs->writev = ConsoleSessionWriteV;    cs->writev = ConsoleSessionWriteV;
   cs->prompt = ConsoleSessionShowPrompt;    cs->prompt = ConsoleSessionShowPrompt;
  cs->state = STATE_USERNAME;  if (!Enabled(&c->options, CONSOLE_AUTH)) {
         cs->state = STATE_AUTHENTIC;
         strcpy(cs->user.username, "root");
         cs->context.priv = 2;
   } else {
         cs->state = STATE_USERNAME;
   }
   cs->context.cs = cs;    cs->context.cs = cs;
   RWLOCK_WRLOCK(c->lock);    RWLOCK_WRLOCK(c->lock);
   SLIST_INSERT_HEAD(&c->sessions, cs, next);    SLIST_INSERT_HEAD(&c->sessions, cs, next);
Line 376  ConsoleSessionReadEvent(int type, void *cookie) Line 399  ConsoleSessionReadEvent(int type, void *cookie)
           goto out;            goto out;
         Perror("CONSOLE: Error while reading");          Perror("CONSOLE: Error while reading");
       } else {        } else {
        if (cs->fd == 0)        if (cs->fd == 0 && isatty(cs->fd))
           goto out;            goto out;
         Log(LG_ERR, ("CONSOLE: Connection closed by peer"));          Log(LG_ERR, ("CONSOLE: Connection closed by peer"));
       }        }
Line 793  ConsoleSetCommand(Context ctx, int ac, char *av[], voi Line 816  ConsoleSetCommand(Context ctx, int ac, char *av[], voi
       break;        break;
   
     case SET_ENABLE:      case SET_ENABLE:
      if (cs)      if (cs) {
        EnableCommand(ac, av, &cs->options, gConfList);        if (strcmp(av[0], "auth") != 0)
             EnableCommand(ac, av, &cs->options, sConfList);
       } else
         EnableCommand(ac, av, &c->options, gConfList);
       break;        break;
   
     case SET_DISABLE:      case SET_DISABLE:
      if (cs)      if (cs) {
        DisableCommand(ac, av, &cs->options, gConfList);        if (strcmp(av[0], "auth") != 0)
             DisableCommand(ac, av, &cs->options, sConfList);
       } else
         DisableCommand(ac, av, &c->options, gConfList);
       break;        break;
   
     case SET_SELF:      case SET_SELF:
Line 885  UserStat(Context ctx, int ac, char *av[], void *arg) Line 914  UserStat(Context ctx, int ac, char *av[], void *arg)
     ConsoleUser         u;      ConsoleUser         u;
   
     Printf("Configured users:\r\n");      Printf("Configured users:\r\n");
       pthread_cleanup_push(ConsoleCancelCleanup, gUsersLock);
     RWLOCK_RDLOCK(gUsersLock);      RWLOCK_RDLOCK(gUsersLock);
     ghash_walk_init(gUsers, &walk);      ghash_walk_init(gUsers, &walk);
     while ((u = ghash_walk_next(gUsers, &walk)) !=  NULL) {      while ((u = ghash_walk_next(gUsers, &walk)) !=  NULL) {
        Printf("\tUsername: %-15s Priv:%s\r\n", u->username,        Printf("\tUsername: %-15s Priv: %s\r\n", u->username,
             ((u->priv == 2)?"admin":((u->priv == 1)?"operator":"user")));              ((u->priv == 2)?"admin":((u->priv == 1)?"operator":"user")));
     }      }
    RWLOCK_UNLOCK(gUsersLock);    pthread_cleanup_pop(1);
   
     return 0;      return 0;
 }  }

Removed from v.1.1  
changed lines
  Added in v.1.1.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>