~ubuntu-branches/ubuntu/saucy/clamav/saucy-backports

« back to all changes in this revision

Viewing changes to .pc/0006-Fix-STAT64-definition-and-add-missing-includes.patch/shared/output.c

  • Committer: Package Import Robot
  • Author(s): Scott Kitterman
  • Date: 2014-07-15 01:08:10 UTC
  • mfrom: (0.35.47 sid)
  • Revision ID: package-import@ubuntu.com-20140715010810-ru66ek4fun2iseba
Tags: 0.98.4+dfsg-2~ubuntu13.10.1
No-change backport to saucy (LP: #1341962)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *  Copyright (C) 2007-2009 Sourcefire, Inc.
3
 
 *
4
 
 *  Authors: Tomasz Kojm
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License version 2 as
8
 
 *  published by the Free Software Foundation.
9
 
 *
10
 
 *  This program is distributed in the hope that it will be useful,
11
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 *  GNU General Public License for more details.
14
 
 *
15
 
 *  You should have received a copy of the GNU General Public License
16
 
 *  along with this program; if not, write to the Free Software
17
 
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 
 *  MA 02110-1301, USA.
19
 
 */
20
 
 
21
 
#if HAVE_CONFIG_H
22
 
#include "clamav-config.h"
23
 
#endif
24
 
 
25
 
#include <stdio.h>
26
 
#include <stdarg.h>
27
 
#include <stdlib.h>
28
 
#include <string.h>
29
 
#include <ctype.h>
30
 
#ifdef HAVE_UNISTD_H
31
 
#include <unistd.h>
32
 
#endif
33
 
#include <fcntl.h>
34
 
#include <time.h>
35
 
#include <sys/stat.h>
36
 
#include <errno.h>
37
 
#ifndef _WIN32
38
 
#include <sys/time.h>
39
 
#include <sys/socket.h>
40
 
#endif
41
 
#if HAVE_SYS_TYPES_H
42
 
#include <sys/types.h>
43
 
#endif
44
 
 
45
 
#ifdef HAVE_SYS_SELECT_H
46
 
#include <sys/select.h>
47
 
#endif
48
 
 
49
 
#if defined(USE_SYSLOG) && !defined(C_AIX)
50
 
#include <syslog.h>
51
 
#endif
52
 
 
53
 
#include "output.h"
54
 
#include "libclamav/others.h"
55
 
#include "libclamav/str.h"
56
 
 
57
 
#ifdef CL_NOTHREADS
58
 
#undef CL_THREAD_SAFE
59
 
#endif
60
 
 
61
 
#ifdef CL_THREAD_SAFE
62
 
#include <pthread.h>
63
 
pthread_mutex_t logg_mutex = PTHREAD_MUTEX_INITIALIZER;
64
 
pthread_mutex_t mdprintf_mutex = PTHREAD_MUTEX_INITIALIZER;
65
 
#endif
66
 
 
67
 
#if defined(C_LINUX) && defined(HAVE_LIBINTL_H)
68
 
#include <libintl.h>
69
 
#include <locale.h>
70
 
 
71
 
#define gettext_noop(s) s
72
 
#define _(s)    gettext(s)
73
 
#define N_(s)   gettext_noop(s)
74
 
 
75
 
#else
76
 
 
77
 
#define _(s)    s
78
 
#define N_(s)   s
79
 
 
80
 
#endif
81
 
 
82
 
FILE *logg_fp = NULL;
83
 
 
84
 
short int logg_verbose = 0, logg_nowarn = 0, logg_lock = 1, logg_time = 0, logg_foreground = 1, logg_noflush = 0, logg_rotate = 0;
85
 
off_t logg_size = 0;
86
 
const char *logg_file = NULL;
87
 
#if defined(USE_SYSLOG) && !defined(C_AIX)
88
 
short logg_syslog;
89
 
#endif
90
 
 
91
 
short int mprintf_disabled = 0, mprintf_verbose = 0, mprintf_quiet = 0,
92
 
          mprintf_stdout = 0, mprintf_nowarn = 0, mprintf_send_timeout = 100;
93
 
 
94
 
#define ARGLEN(args, str, len)                      \
95
 
{                                                   \
96
 
        size_t arglen = 1, i;                       \
97
 
        char *pt;                                   \
98
 
    va_start(args, str);                            \
99
 
    len = strlen(str);                              \
100
 
    for(i = 0; i < len - 1; i++) {                  \
101
 
        if(str[i] == '%') {                         \
102
 
            switch(str[++i]) {                      \
103
 
                case 's':                           \
104
 
                    pt  = va_arg(args, char *);     \
105
 
                    if(pt)                          \
106
 
                        arglen += strlen(pt);       \
107
 
                    break;                          \
108
 
                case 'f':                           \
109
 
                    va_arg(args, double);           \
110
 
                    arglen += 25;                   \
111
 
                    break;                          \
112
 
                case 'l':                           \
113
 
                    va_arg(args, long);             \
114
 
                    arglen += 20;                   \
115
 
                    break;                          \
116
 
                default:                            \
117
 
                    va_arg(args, int);              \
118
 
                    arglen += 10;                   \
119
 
                    break;                          \
120
 
            }                                       \
121
 
        }                                           \
122
 
    }                                               \
123
 
    va_end(args);                                   \
124
 
    len += arglen;                                  \
125
 
}
126
 
 
127
 
int mdprintf(int desc, const char *str, ...)
128
 
{
129
 
        va_list args;
130
 
        char buffer[512], *abuffer = NULL, *buff;
131
 
        int bytes, todo, ret=0;
132
 
        size_t len;
133
 
 
134
 
    ARGLEN(args, str, len);
135
 
    if(len <= sizeof(buffer)) {
136
 
        len = sizeof(buffer);
137
 
        buff = buffer;
138
 
    } else {
139
 
        abuffer = malloc(len);
140
 
        if(!abuffer) {
141
 
            len = sizeof(buffer);
142
 
            buff = buffer;
143
 
        } else {
144
 
            buff = abuffer;
145
 
        }
146
 
    }
147
 
    va_start(args, str);
148
 
    bytes = vsnprintf(buff, len, str, args);
149
 
    va_end(args);
150
 
    buff[len - 1] = 0;
151
 
 
152
 
    if(bytes < 0) {
153
 
        if(len > sizeof(buffer))
154
 
            free(abuffer);
155
 
        return bytes;
156
 
    }
157
 
    if((size_t) bytes >= len)
158
 
        bytes = len - 1;
159
 
 
160
 
    todo = bytes;
161
 
#ifdef CL_THREAD_SAFE
162
 
    /* make sure we don't mix sends from multiple threads,
163
 
     * important for IDSESSION */
164
 
    pthread_mutex_lock(&mdprintf_mutex);
165
 
#endif
166
 
    while (todo > 0) {
167
 
        ret = send(desc, buff, bytes, 0);
168
 
        if (ret < 0) {
169
 
            struct timeval tv;
170
 
            if (errno != EWOULDBLOCK)
171
 
                break;
172
 
            /* didn't send anything yet */
173
 
#ifdef CL_THREAD_SAFE
174
 
            pthread_mutex_unlock(&mdprintf_mutex);
175
 
#endif
176
 
            tv.tv_sec = 0;
177
 
            tv.tv_usec = mprintf_send_timeout*1000;
178
 
            do {
179
 
                fd_set wfds;
180
 
                FD_ZERO(&wfds);
181
 
                FD_SET(desc, &wfds);
182
 
                ret = select(desc+1, NULL, &wfds, NULL, &tv);
183
 
            } while (ret < 0 && errno == EINTR);
184
 
#ifdef CL_THREAD_SAFE
185
 
            pthread_mutex_lock(&mdprintf_mutex);
186
 
#endif
187
 
            if (!ret) {
188
 
                /* timed out */
189
 
                ret = -1;
190
 
                break;
191
 
            }
192
 
        } else {
193
 
            todo -= ret;
194
 
            buff += ret;
195
 
        }
196
 
    }
197
 
#ifdef CL_THREAD_SAFE
198
 
    pthread_mutex_unlock(&mdprintf_mutex);
199
 
#endif
200
 
 
201
 
    if(len > sizeof(buffer))
202
 
        free(abuffer);
203
 
 
204
 
    return ret < 0 ? -1 : bytes;
205
 
}
206
 
 
207
 
static int rename_logg(STATBUF *sb)
208
 
{
209
 
    char *rotate_file;
210
 
    size_t rotate_file_len;
211
 
    time_t t;
212
 
    struct tm tmp;
213
 
 
214
 
    if (!logg_rotate) {
215
 
        if (logg_fp) {
216
 
            fprintf(logg_fp, "Log size = %zu, max = %zu\n", sb->st_size, logg_size);
217
 
            fprintf(logg_fp, "WARNING: Log size limit met but log file rotation turned off. Forcing log file rotation anyways.\n");
218
 
        }
219
 
 
220
 
        logg_rotate = 1;
221
 
    }
222
 
 
223
 
    rotate_file_len = strlen(logg_file) + sizeof("-YYYY-MM-DD_HH:MM:SS");
224
 
    rotate_file = calloc(1, rotate_file_len + 1);
225
 
    if (!rotate_file) {
226
 
        if (logg_fp)
227
 
            fprintf(logg_fp, "Need to rotate log file due to size but ran out of memory.\n");
228
 
 
229
 
        return -1;
230
 
    }
231
 
 
232
 
    t = time(NULL);
233
 
    if (!localtime_r(&t, &tmp)) {
234
 
        if (logg_fp)
235
 
            fprintf(logg_fp, "Need to rotate log file due to size but could not get local time.\n");
236
 
 
237
 
        free(rotate_file);
238
 
        return -1;
239
 
    }
240
 
 
241
 
    strcpy(rotate_file, logg_file);
242
 
    strftime(rotate_file+strlen(rotate_file), rotate_file_len-strlen(rotate_file), "-%Y%m%d_%H%M%S", &tmp);
243
 
 
244
 
    if (logg_fp) {
245
 
        fclose(logg_fp);
246
 
        logg_fp = NULL;
247
 
    }
248
 
 
249
 
    if (rename(logg_file, rotate_file)) {
250
 
        free(rotate_file);
251
 
        return -1;
252
 
    }
253
 
 
254
 
    free(rotate_file);
255
 
    return 0;
256
 
}
257
 
 
258
 
static int logg_open(void)
259
 
{
260
 
    STATBUF sb;
261
 
 
262
 
    if(logg_file)
263
 
        if(logg_size > 0)
264
 
            if(CLAMSTAT(logg_file, &sb) != -1)
265
 
                if(sb.st_size > logg_size)
266
 
                        if (rename_logg(&sb))
267
 
                        return -1;
268
 
 
269
 
    
270
 
    return 0;
271
 
}
272
 
 
273
 
void logg_close(void)
274
 
{
275
 
#if defined(USE_SYSLOG) && !defined(C_AIX)
276
 
    if(logg_syslog)
277
 
        closelog();
278
 
#endif
279
 
 
280
 
#ifdef CL_THREAD_SAFE
281
 
    pthread_mutex_lock(&logg_mutex);
282
 
#endif
283
 
    if(logg_fp) {
284
 
        fclose(logg_fp);
285
 
        logg_fp = NULL;
286
 
    }
287
 
#ifdef CL_THREAD_SAFE
288
 
    pthread_mutex_unlock(&logg_mutex);
289
 
#endif
290
 
}
291
 
 
292
 
/*
293
 
 * legend:
294
 
 *  ! - ERROR:
295
 
 *  ^ - WARNING:
296
 
 *  ~ - normal
297
 
 *  # - normal, not foreground (logfile and syslog only)
298
 
 *  * - verbose
299
 
 *  $ - debug
300
 
 *  none - normal
301
 
 *
302
 
 *      Default  Foreground LogVerbose Debug  Syslog
303
 
 *  !     yes      mprintf     yes      yes   LOG_ERR
304
 
 *  ^     yes      mprintf     yes      yes   LOG_WARNING
305
 
 *  ~     yes      mprintf     yes      yes   LOG_INFO
306
 
 *  #     yes        no        yes      yes   LOG_INFO
307
 
 *  *     no       mprintf     yes      yes   LOG_DEBUG
308
 
 *  $     no       mprintf     no       yes   LOG_DEBUG
309
 
 *  none  yes      mprintf     yes      yes   LOG_INFO
310
 
 */
311
 
int logg(const char *str, ...)
312
 
{
313
 
        va_list args;
314
 
        char buffer[1025], *abuffer = NULL, *buff;
315
 
        time_t currtime;
316
 
        size_t len;
317
 
        mode_t old_umask;
318
 
#ifdef F_WRLCK
319
 
        struct flock fl;
320
 
#endif
321
 
 
322
 
    if ((*str == '$' && logg_verbose < 2) ||
323
 
        (*str == '*' && !logg_verbose))
324
 
        return 0;
325
 
 
326
 
    ARGLEN(args, str, len);
327
 
    if(len <= sizeof(buffer)) {
328
 
        len = sizeof(buffer);
329
 
        buff = buffer;
330
 
    } else {
331
 
        abuffer = malloc(len);
332
 
        if(!abuffer) {
333
 
            len = sizeof(buffer);
334
 
            buff = buffer;
335
 
        } else {
336
 
            buff = abuffer;
337
 
        }
338
 
    }
339
 
    va_start(args, str);
340
 
    vsnprintf(buff, len, str, args);
341
 
    va_end(args);
342
 
    buff[len - 1] = 0;
343
 
 
344
 
#ifdef CL_THREAD_SAFE
345
 
    pthread_mutex_lock(&logg_mutex);
346
 
#endif
347
 
 
348
 
    logg_open();
349
 
 
350
 
    if(!logg_fp && logg_file) {
351
 
        old_umask = umask(0037);
352
 
        if((logg_fp = fopen(logg_file, "at")) == NULL) {
353
 
            umask(old_umask);
354
 
#ifdef CL_THREAD_SAFE
355
 
            pthread_mutex_unlock(&logg_mutex);
356
 
#endif
357
 
            printf("ERROR: Can't open %s in append mode (check permissions!).\n", logg_file);
358
 
            if(len > sizeof(buffer))
359
 
                free(abuffer);
360
 
            return -1;
361
 
        } else umask(old_umask);
362
 
 
363
 
#ifdef F_WRLCK
364
 
        if(logg_lock) {
365
 
            memset(&fl, 0, sizeof(fl));
366
 
            fl.l_type = F_WRLCK;
367
 
            if(fcntl(fileno(logg_fp), F_SETLK, &fl) == -1) {
368
 
#ifdef EOPNOTSUPP
369
 
                if(errno == EOPNOTSUPP)
370
 
                    printf("WARNING: File locking not supported (NFS?)\n");
371
 
                else
372
 
#endif
373
 
                {
374
 
#ifdef CL_THREAD_SAFE
375
 
                    pthread_mutex_unlock(&logg_mutex);
376
 
#endif
377
 
                    printf("ERROR: %s is locked by another process\n", logg_file);
378
 
                    if(len > sizeof(buffer))
379
 
                    free(abuffer);
380
 
                    return -1;
381
 
                }
382
 
            }
383
 
        }
384
 
#endif
385
 
    }
386
 
 
387
 
        if(logg_fp) {
388
 
            char flush = !logg_noflush;
389
 
            /* Need to avoid logging time for verbose messages when logverbose
390
 
               is not set or we get a bunch of timestamps in the log without
391
 
               newlines... */
392
 
            if(logg_time && ((*buff != '*') || logg_verbose)) {
393
 
                char timestr[32];
394
 
                time(&currtime);
395
 
                cli_ctime(&currtime, timestr, sizeof(timestr));
396
 
                /* cut trailing \n */
397
 
                timestr[strlen(timestr)-1] = '\0';
398
 
                fprintf(logg_fp, "%s -> ", timestr);
399
 
            }
400
 
 
401
 
            if(*buff == '!') {
402
 
                fprintf(logg_fp, "ERROR: %s", buff + 1);
403
 
                flush = 1;
404
 
            } else if(*buff == '^') {
405
 
                if(!logg_nowarn)
406
 
                    fprintf(logg_fp, "WARNING: %s", buff + 1);
407
 
                flush = 1;
408
 
            } else if(*buff == '*' || *buff == '$') {
409
 
                    fprintf(logg_fp, "%s", buff + 1);
410
 
            } else if(*buff == '#' || *buff == '~') {
411
 
                fprintf(logg_fp, "%s", buff + 1);
412
 
            } else
413
 
                fprintf(logg_fp, "%s", buff);
414
 
 
415
 
            if (flush)
416
 
                fflush(logg_fp);
417
 
        }
418
 
 
419
 
    if(logg_foreground) {
420
 
        if(buff[0] != '#')
421
 
            mprintf("%s", buff);
422
 
    }
423
 
 
424
 
#if defined(USE_SYSLOG) && !defined(C_AIX)
425
 
    if(logg_syslog) {
426
 
        cli_chomp(buff);
427
 
        if(buff[0] == '!') {
428
 
            syslog(LOG_ERR, "%s", buff + 1);
429
 
        } else if(buff[0] == '^') {
430
 
            if(!logg_nowarn)
431
 
                syslog(LOG_WARNING, "%s", buff + 1);
432
 
        } else if(buff[0] == '*' || buff[0] == '$') {
433
 
            syslog(LOG_DEBUG, "%s", buff + 1);
434
 
        } else if(buff[0] == '#' || buff[0] == '~') {
435
 
            syslog(LOG_INFO, "%s", buff + 1);
436
 
        } else syslog(LOG_INFO, "%s", buff);
437
 
 
438
 
    }
439
 
#endif
440
 
 
441
 
#ifdef CL_THREAD_SAFE
442
 
    pthread_mutex_unlock(&logg_mutex);
443
 
#endif
444
 
 
445
 
    if(len > sizeof(buffer))
446
 
        free(abuffer);
447
 
    return 0;
448
 
}
449
 
 
450
 
void mprintf(const char *str, ...)
451
 
{
452
 
        va_list args;
453
 
        FILE *fd;
454
 
        char buffer[512], *abuffer = NULL, *buff;
455
 
        size_t len;
456
 
 
457
 
 
458
 
    if(mprintf_disabled) 
459
 
        return;
460
 
 
461
 
    fd = stdout;
462
 
 
463
 
/* legend:
464
 
 * ! - error
465
 
 * @ - error with logging
466
 
 * ...
467
 
 */
468
 
 
469
 
/*
470
 
 *             ERROR    WARNING    STANDARD
471
 
 * normal      stderr   stderr     stdout
472
 
 * 
473
 
 * verbose     stderr   stderr     stdout
474
 
 * 
475
 
 * quiet       stderr     no         no
476
 
 */
477
 
 
478
 
    ARGLEN(args, str, len);
479
 
    if(len <= sizeof(buffer)) {
480
 
        len = sizeof(buffer);
481
 
        buff = buffer;
482
 
    } else {
483
 
        abuffer = malloc(len);
484
 
        if(!abuffer) {
485
 
            len = sizeof(buffer);
486
 
            buff = buffer;
487
 
        } else {
488
 
            buff = abuffer;
489
 
        }
490
 
    }
491
 
    va_start(args, str);
492
 
    vsnprintf(buff, len, str, args);
493
 
    va_end(args);
494
 
    buff[len - 1] = 0;
495
 
 
496
 
#ifdef _WIN32
497
 
    do {
498
 
        int tmplen = len + 1;
499
 
        wchar_t *tmpw = malloc(tmplen*sizeof(wchar_t));
500
 
        char *nubuff;
501
 
        if(!tmpw) break;
502
 
        if(!MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, buff, -1, tmpw, tmplen)) {
503
 
            free(tmpw);
504
 
            break;
505
 
        }
506
 
        /* FIXME CHECK IT'S REALLY UTF8 */
507
 
        nubuff = (char *)malloc(tmplen);
508
 
        if(!nubuff) {
509
 
            free(tmpw);
510
 
            break;
511
 
        }
512
 
        if(!WideCharToMultiByte(CP_OEMCP, 0, tmpw, -1, nubuff, tmplen, NULL, NULL)) {
513
 
            free(nubuff);
514
 
            free(tmpw);
515
 
            break;
516
 
        }
517
 
        free(tmpw);
518
 
        if(len > sizeof(buffer))
519
 
            free(abuffer);
520
 
        abuffer = buff = nubuff;
521
 
        len = sizeof(buffer) + 1;
522
 
    } while(0);
523
 
#endif
524
 
    if(buff[0] == '!') {
525
 
       if(!mprintf_stdout)
526
 
           fd = stderr;
527
 
        fprintf(fd, "ERROR: %s", &buff[1]);
528
 
    } else if(buff[0] == '@') {
529
 
       if(!mprintf_stdout)
530
 
           fd = stderr;
531
 
        fprintf(fd, "ERROR: %s", &buff[1]);
532
 
    } else if(!mprintf_quiet) {
533
 
        if(buff[0] == '^') {
534
 
            if(!mprintf_nowarn) {
535
 
                if(!mprintf_stdout)
536
 
                    fd = stderr;
537
 
                fprintf(fd, "WARNING: %s", &buff[1]);
538
 
            }
539
 
        } else if(buff[0] == '*') {
540
 
            if(mprintf_verbose)
541
 
                fprintf(fd, "%s", &buff[1]);
542
 
        } else if(buff[0] == '~') {
543
 
            fprintf(fd, "%s", &buff[1]);
544
 
        } else fprintf(fd, "%s", buff);
545
 
    }
546
 
 
547
 
    if(fd == stdout)
548
 
        fflush(stdout);
549
 
 
550
 
    if(len > sizeof(buffer))
551
 
        free(abuffer);
552
 
}
553
 
 
554
 
struct facstruct {
555
 
    const char *name;
556
 
    int code;
557
 
};
558
 
 
559
 
#if defined(USE_SYSLOG) && !defined(C_AIX)
560
 
static const struct facstruct facilitymap[] = {
561
 
#ifdef LOG_AUTH
562
 
    { "LOG_AUTH",       LOG_AUTH },
563
 
#endif
564
 
#ifdef LOG_AUTHPRIV
565
 
    { "LOG_AUTHPRIV",   LOG_AUTHPRIV },
566
 
#endif
567
 
#ifdef LOG_CRON
568
 
    { "LOG_CRON",       LOG_CRON },
569
 
#endif
570
 
#ifdef LOG_DAEMON
571
 
    { "LOG_DAEMON",     LOG_DAEMON },
572
 
#endif
573
 
#ifdef LOG_FTP
574
 
    { "LOG_FTP",        LOG_FTP },
575
 
#endif
576
 
#ifdef LOG_KERN
577
 
    { "LOG_KERN",       LOG_KERN },
578
 
#endif
579
 
#ifdef LOG_LPR
580
 
    { "LOG_LPR",        LOG_LPR },
581
 
#endif
582
 
#ifdef LOG_MAIL
583
 
    { "LOG_MAIL",       LOG_MAIL },
584
 
#endif
585
 
#ifdef LOG_NEWS
586
 
    { "LOG_NEWS",       LOG_NEWS },
587
 
#endif
588
 
#ifdef LOG_AUTH
589
 
    { "LOG_AUTH",       LOG_AUTH },
590
 
#endif
591
 
#ifdef LOG_SYSLOG
592
 
    { "LOG_SYSLOG",     LOG_SYSLOG },
593
 
#endif
594
 
#ifdef LOG_USER
595
 
    { "LOG_USER",       LOG_USER },
596
 
#endif
597
 
#ifdef LOG_UUCP
598
 
    { "LOG_UUCP",       LOG_UUCP },
599
 
#endif
600
 
#ifdef LOG_LOCAL0
601
 
    { "LOG_LOCAL0",     LOG_LOCAL0 },
602
 
#endif
603
 
#ifdef LOG_LOCAL1
604
 
    { "LOG_LOCAL1",     LOG_LOCAL1 },
605
 
#endif
606
 
#ifdef LOG_LOCAL2
607
 
    { "LOG_LOCAL2",     LOG_LOCAL2 },
608
 
#endif
609
 
#ifdef LOG_LOCAL3
610
 
    { "LOG_LOCAL3",     LOG_LOCAL3 },
611
 
#endif
612
 
#ifdef LOG_LOCAL4
613
 
    { "LOG_LOCAL4",     LOG_LOCAL4 },
614
 
#endif
615
 
#ifdef LOG_LOCAL5
616
 
    { "LOG_LOCAL5",     LOG_LOCAL5 },
617
 
#endif
618
 
#ifdef LOG_LOCAL6
619
 
    { "LOG_LOCAL6",     LOG_LOCAL6 },
620
 
#endif
621
 
#ifdef LOG_LOCAL7
622
 
    { "LOG_LOCAL7",     LOG_LOCAL7 },
623
 
#endif
624
 
    { NULL,             -1 }
625
 
};
626
 
 
627
 
int logg_facility(const char *name)
628
 
{
629
 
        int i;
630
 
 
631
 
    for(i = 0; facilitymap[i].name; i++)
632
 
        if(!strcmp(facilitymap[i].name, name))
633
 
            return facilitymap[i].code;
634
 
 
635
 
    return -1;
636
 
}
637
 
#endif