(root)/
strace-6.5/
src/
syslog.c
       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  }