Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Eugene Grosbein                      2:5006/1       26 Oct 2006  22:22:36
 To : Valentin Davydov
 Subject : Re: syslog protocol
 -------------------------------------------------------------------------------- 
 
 26 окт 2006, четверг, в 17:19 KRAST, Valentin Davydov написал(а):
 
  >>Вопрос: допустимы ли в syslog-сообщениях нулевые коды?
  VD> RTFS! Я тут надысь читал и офигевал.
  >>Если нет, есть смысл пинать девелоперов свича, благо они русскоязычные
  >>(да, свич на 'L'). Если да, то придется чинить syslog и PR рисовать.
  VD> Перепиши его на авке ;-)
 
 Да пропатчить syslogd чтобы его printline() принимал длину буфера
 лишним аргументом, смотрел конец строки не по нулю и
 на месте нуля рисовал ^@ это минутное дело, полтора килобайта diff.
 Оно уже у меня работает в тестовом режиме, а вообще надо конечно
 чинить коммутатор...
 
 - --- syslogd.c.orig  Thu Oct 26 16:19:39 2006
 +++ syslogd.c  Thu Oct 26 19:13:26 2006
 @@ -311,7 +311,7 @@
  static void  log_deadchild(pid_t, int, const char *);
  static void  markit(void);
  static int   skip_message(const char *, const char *, int);
 -static void  printline(const char *, char *);
 +static void  printline(const char *, char *, int);
  static void  printsys(char *);
  static int   p_open(const char *, pid_t *);
  static void  readklog(void);
 @@ -580,7 +580,7 @@
               hname = cvthname((struct sockaddr *)&frominet);
               unmapped((struct sockaddr *)&frominet);
               if (validate((struct sockaddr *)&frominet, hname))
 -              printline(hname, line);
 +              printline(hname, line, l);
            } else if (l < 0 && errno != EINTR)
               logerror("recvfrom inet");
           }
 @@ -593,7 +593,7 @@
               (struct sockaddr *)&fromunix, &len);
           if (l > 0) {
            line[l] = '\0';
 -          printline(LocalHostName, line);
 +          printline(LocalHostName, line, l);
           } else if (l < 0 && errno != EINTR)
            logerror("recvfrom unix");
        }
 @@ -645,7 +645,7 @@
   * on the appropriate log files.
   */
  static void
 -printline(const char *hname, char *msg)
 +printline(const char *hname, char *msg, int l)
  {
    char *p, *q;
    long n;
 @@ -676,14 +676,14 @@
  
    q = line;
  
 -  while ((c = (unsigned char)*p++) != '\0' &&
 +  while (((c = (unsigned char)*p++), p < msg + l)  &&
        q < &line[sizeof(line) - 4]) {
       if ((c & 0x80) && c < 0xA0) {
        c &= 0x7F;
        *q++ = 'M';
        *q++ = '-';
       }
 -     if (isascii(c) && iscntrl(c)) {
 +     if ((isascii(c) && iscntrl(c)) || c == '\0') {
        if (c == '\n') {
           *q++ = ' ';
        } else if (c == '\t') {
 
 Eugene
 -- 
 Hароду - чтоб не вздумал бунтовать! -
 Мы тоже разрешили воровать.
 Пусть лучше сам ворует потихоньку,
 Чем с воровскою властью враждовать!..
 --- slrn/0.9.8.0 (FreeBSD)
  * Origin: Svyaz Service JSC (2:5006/1@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: syslog protocol   Eugene Grosbein   26 Oct 2006 22:22:36 
Архивное /ru.unix.bsd/26093b0fcc4af.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional