Diff for /embedaddon/mpd/src/console.c between versions 1.1.1.3 and 1.1.1.5

version 1.1.1.3, 2016/11/01 09:56:12 version 1.1.1.5, 2021/03/17 00:39:23
Line 58 Line 58
   static int            ConsoleUserHashEqual(struct ghash *g, const void *item1,     static int            ConsoleUserHashEqual(struct ghash *g, const void *item1, 
                                 const void *item2);                                  const void *item2);
   static u_int32_t      ConsoleUserHash(struct ghash *g, const void *item);    static u_int32_t      ConsoleUserHash(struct ghash *g, const void *item);
  static int    ConsoleSetCommand(Context ctx, int ac, char *av[], void *arg);  static int    ConsoleSetCommand(Context ctx, int ac, const char *const av[], const void *arg);
   
   
 /*  /*
Line 76 Line 76
         ConsoleSetCommand, NULL, 0, (void *) SET_ENABLE },          ConsoleSetCommand, NULL, 0, (void *) SET_ENABLE },
     { "disable [opt ...]",      "Disable this console option" ,      { "disable [opt ...]",      "Disable this console option" ,
         ConsoleSetCommand, NULL, 0, (void *) SET_DISABLE },          ConsoleSetCommand, NULL, 0, (void *) SET_DISABLE },
    { NULL },    { NULL, NULL, NULL, NULL, 0, NULL },
   };    };
   
   struct ghash          *gUsers;                /* allowed users */    struct ghash          *gUsers;                /* allowed users */
Line 96 Line 96
     { 0,        0,                      NULL            },      { 0,        0,                      NULL            },
   };    };
   
  struct termios gOrigTermiosAttrs;static struct termios gOrigTermiosAttrs;
  int             gOrigFlags;static int            gOrigFlags;
   
 /*  /*
  * ConsoleInit()   * ConsoleInit()
Line 175  ConsoleClose(Console c) Line 175  ConsoleClose(Console c)
   return 0;    return 0;
 }  }
   
   void
   ConsoleCancelCleanup(void *rwlock) NO_THREAD_SAFETY_ANALYSIS
   {
     pthread_rwlock_t p = (pthread_rwlock_t)rwlock;
   
     RWLOCK_UNLOCK(p);
   }
   
 /*  /*
  * ConsoleStat()   * ConsoleStat()
  */   */
   
 int  int
ConsoleStat(Context ctx, int ac, char *av[], void *arg)ConsoleStat(Context ctx, int ac, const char *const av[], const void *arg)
     NO_THREAD_SAFETY_ANALYSIS
 {  {
   Console               c = &gConsole;    Console               c = &gConsole;
   ConsoleSession        s;    ConsoleSession        s;
   ConsoleSession        cs = ctx->cs;    ConsoleSession        cs = ctx->cs;
   char                  addrstr[INET6_ADDRSTRLEN];    char                  addrstr[INET6_ADDRSTRLEN];
   
     (void)ac;
     (void)av;
     (void)arg;
   
   Printf("Configuration:\r\n");    Printf("Configuration:\r\n");
   Printf("\tState         : %s\r\n", c->fd ? "OPENED" : "CLOSED");    Printf("\tState         : %s\r\n", c->fd ? "OPENED" : "CLOSED");
   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");    Printf("Global options:\r\n");
   OptStat(ctx, &c->options, gConfList);    OptStat(ctx, &c->options, gConfList);
Line 225  ConsoleConnect(int type, void *cookie) Line 239  ConsoleConnect(int type, void *cookie)
           "\xFF\xFD\x01";       /* DO echo */            "\xFF\xFD\x01";       /* DO echo */
   char                  addrstr[INET6_ADDRSTRLEN];    char                  addrstr[INET6_ADDRSTRLEN];
   struct sockaddr_storage ss;    struct sockaddr_storage ss;
  
   (void)type;  
   Log(LG_CONSOLE, ("CONSOLE: Connect"));    Log(LG_CONSOLE, ("CONSOLE: Connect"));
   cs = Malloc(MB_CONS, sizeof(*cs));    cs = Malloc(MB_CONS, sizeof(*cs));
   if ((cs->fd = TcpAcceptConnection(c->fd, &ss, FALSE)) < 0)     if ((cs->fd = TcpAcceptConnection(c->fd, &ss, FALSE)) < 0) 
Line 383  ConsoleSessionReadEvent(int type, void *cookie) Line 398  ConsoleSessionReadEvent(int type, void *cookie)
   char                  *av_copy[MAX_CONSOLE_ARGS];    char                  *av_copy[MAX_CONSOLE_ARGS];
   char                  addrstr[INET6_ADDRSTRLEN];    char                  addrstr[INET6_ADDRSTRLEN];
   
     (void)type;
   while(1) {    while(1) {
     if ((n = read(cs->fd, &c, 1)) <= 0) {      if ((n = read(cs->fd, &c, 1)) <= 0) {
       if (n < 0) {        if (n < 0) {
Line 603  success: Line 619  success:
             cs->context.lnk ? cs->context.lnk->name :              cs->context.lnk ? cs->context.lnk->name :
                 (cs->context.bund? cs->context.bund->name : ""),                   (cs->context.bund? cs->context.bund->name : ""), 
             cs->user.username, cs->cmd));              cs->user.username, cs->cmd));
        DoCommand(&cs->context, ac, av, NULL, 0);        DoCommand(&cs->context, ac, (const char *const *)av, NULL, 0);
       } else {        } else {
        HelpCommand(&cs->context, ac, av, NULL);        HelpCommand(&cs->context, ac, (const char *const *)av, NULL);
       }        }
       FreeArgs(ac, av_copy);        FreeArgs(ac, av_copy);
       if (cs->exit)        if (cs->exit)
Line 710  StdConsoleSessionWrite(ConsoleSession cs, const char * Line 726  StdConsoleSessionWrite(ConsoleSession cs, const char *
 static void   static void 
 StdConsoleSessionWriteV(ConsoleSession cs, const char *fmt, va_list vl)  StdConsoleSessionWriteV(ConsoleSession cs, const char *fmt, va_list vl)
 {  {
       (void)cs;
     vprintf(fmt, vl);      vprintf(fmt, vl);
     fflush(stdout);      fflush(stdout);
 }  }
Line 756  ConsoleSessionShowPrompt(ConsoleSession cs) Line 773  ConsoleSessionShowPrompt(ConsoleSession cs)
 static u_int32_t  static u_int32_t
 ConsoleUserHash(struct ghash *g, const void *item)  ConsoleUserHash(struct ghash *g, const void *item)
 {  {
  ConsoleUser u = (ConsoleUser) item;  const struct console_user *u = (const struct console_user *) item;
  u_char *s = (u_char *) u->username;  const u_char *s = (const u_char *) u->username;
   u_int32_t hash = 0x811c9dc5;    u_int32_t hash = 0x811c9dc5;
   
     (void)g;
   while (*s) {    while (*s) {
     hash += (hash<<1) + (hash<<4) + (hash<<7) + (hash<<8) + (hash<<24);      hash += (hash<<1) + (hash<<4) + (hash<<7) + (hash<<8) + (hash<<24);
     /* xor the bottom with the current octet */      /* xor the bottom with the current octet */
Line 776  ConsoleUserHash(struct ghash *g, const void *item) Line 794  ConsoleUserHash(struct ghash *g, const void *item)
 static int  static int
 ConsoleUserHashEqual(struct ghash *g, const void *item1, const void *item2)  ConsoleUserHashEqual(struct ghash *g, const void *item1, const void *item2)
 {  {
  ConsoleUser u1 = (ConsoleUser) item1;  const struct console_user *u1 = (const struct console_user *) item1;
  ConsoleUser u2 = (ConsoleUser) item2;  const struct console_user *u2 = (const struct console_user *) item2;
   
     (void)g;
   if (u1 && u2)    if (u1 && u2)
     return (strcmp(u1->username, u2->username) == 0);      return (strcmp(u1->username, u2->username) == 0);
   else    else
Line 790  ConsoleUserHashEqual(struct ghash *g, const void *item Line 809  ConsoleUserHashEqual(struct ghash *g, const void *item
  */   */
   
 static int  static int
ConsoleSetCommand(Context ctx, int ac, char *av[], void *arg) ConsoleSetCommand(Context ctx, int ac, const char *const av[], const void *arg) 
 {  {
   Console               c = &gConsole;    Console               c = &gConsole;
   ConsoleSession        cs = ctx->cs;    ConsoleSession        cs = ctx->cs;
Line 865  ConsoleShutdown(Console c) Line 884  ConsoleShutdown(Console c)
  */   */
   
 int  int
UserCommand(Context ctx, int ac, char *av[], void *arg) UserCommand(Context ctx, int ac, const char *const av[], const void *arg) 
 {  {
     ConsoleUser         u;      ConsoleUser         u;
   
       (void)arg;
       (void)ctx;
   
     if (ac < 2 || ac > 3)       if (ac < 2 || ac > 3) 
         return(-1);          return(-1);
   
Line 899  UserCommand(Context ctx, int ac, char *av[], void *arg Line 921  UserCommand(Context ctx, int ac, char *av[], void *arg
  */   */
   
 int  int
UserStat(Context ctx, int ac, char *av[], void *arg)UserStat(Context ctx, int ac, const char *const av[], const void *arg)
     NO_THREAD_SAFETY_ANALYSIS
 {  {
     struct ghash_walk   walk;      struct ghash_walk   walk;
     ConsoleUser         u;      ConsoleUser         u;
   
       (void)ac;
       (void)av;
       (void)arg;
   
     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.1.3  
changed lines
  Added in v.1.1.1.5


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