1 /*
2 * Copyright (c) 2012-2015 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2014-2021 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 return 0;
41 break;
42
43 case SYSLOG_ACTION_CONSOLE_LEVEL: /* Uses len */
44 tprint_arg_next();
45
46 /* bufp */
47 printaddr64(tcp->u_arg[1]);
48 tprint_arg_next();
49
50 /* len */
51 printxval_ex(syslog_console_levels, len, "LOGLEVEL_???",
52 XLAT_STYLE_VERBOSE | XLAT_STYLE_FMT_D);
53 return RVAL_DECODED;
54
55 default:
56 tprint_arg_next();
57
58 /* bufp */
59 printaddr64(tcp->u_arg[1]);
60 tprint_arg_next();
61
62 /* len */
63 PRINT_VAL_D(len);
64 return RVAL_DECODED;
65 }
66
67 /* syscall exit handler for SYSLOG_ACTION_READ* */
68 tprint_arg_next();
69
70 /* bufp */
71 if (syserror(tcp))
72 printaddr64(tcp->u_arg[1]);
73 else
74 printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
75 tprint_arg_next();
76
77 /* len */
78 PRINT_VAL_D(len);
79
80 return 0;
81 }