]> granicus.if.org Git - strace/blob - syslog.c
xlat: add BPF_F_TEST_STATE_FREQ to bpf_prog_flags
[strace] / syslog.c
1 /*
2  * Copyright (c) 2012-2015 Dmitry V. Levin <ldv@altlinux.org>
3  * Copyright (c) 2014-2018 The strace developers.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: LGPL-2.1-or-later
7  */
8
9 #include "defs.h"
10
11 #include "xlat/syslog_action_type.h"
12 #include "xlat/syslog_console_levels.h"
13
14 SYS_FUNC(syslog)
15 {
16         int type = tcp->u_arg[0];
17         int len = tcp->u_arg[2];
18
19         if (entering(tcp)) {
20                 /* type */
21                 printxval_ex(syslog_action_type, type, "SYSLOG_ACTION_???",
22                              XLAT_STYLE_VERBOSE | XLAT_STYLE_FMT_D);
23         }
24
25         switch (type) {
26         /* Those commands have bufp and len ignored */
27         case SYSLOG_ACTION_CLOSE:
28         case SYSLOG_ACTION_OPEN:
29         case SYSLOG_ACTION_CLEAR:
30         case SYSLOG_ACTION_CONSOLE_OFF:
31         case SYSLOG_ACTION_CONSOLE_ON:
32         case SYSLOG_ACTION_SIZE_UNREAD:
33         case SYSLOG_ACTION_SIZE_BUFFER:
34                 return RVAL_DECODED;
35
36         case SYSLOG_ACTION_READ:
37         case SYSLOG_ACTION_READ_ALL:
38         case SYSLOG_ACTION_READ_CLEAR:
39                 if (entering(tcp)) {
40                         tprints(", ");
41                         return 0;
42                 }
43                 break;
44
45         case SYSLOG_ACTION_CONSOLE_LEVEL: /* Uses len */
46                 tprints(", ");
47                 printaddr64(tcp->u_arg[1]);
48                 tprints(", ");
49                 printxval_ex(syslog_console_levels, len, "LOGLEVEL_???",
50                              XLAT_STYLE_VERBOSE | XLAT_STYLE_FMT_D);
51                 return RVAL_DECODED;
52
53         default:
54                 tprints(", ");
55                 printaddr64(tcp->u_arg[1]);
56                 tprintf(", %d", len);
57                 return RVAL_DECODED;
58         }
59
60         /* syscall exit handler for SYSLOG_ACTION_READ* */
61
62         /* bufp */
63         if (syserror(tcp))
64                 printaddr64(tcp->u_arg[1]);
65         else
66                 printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
67         /* len */
68         tprintf(", %d", len);
69
70         return 0;
71 }