Update of /cvsroot/cerber/cerb-ng/kcerb In directory sc8-pr-cvs1:/tmp/cvs-serv25223/kcerb Modified Files: Makefile cerb_action.c cerb_desc.c cerb_globals.h cerb_macros.h cerb_rules.c make_operations.sh Added Files: cerb_types.h cerb_types.master Log Message: - Upadated examples. - Added types for syscall's arguments code generator (make_types.sh). - Moved types declarations from cerb_globals.h to cerb_types.h. - Sets file names caching from 1 to 2, this means that all opened files are cached. - MCB_XDEBUG() macro returns for now 0 instead of error number. --- NEW FILE: cerb_types.h --- /* * cerb_types.h - header file for cerb_types.h * * (c) 2002 Pawel Jakub Dawidek <ni...@ga...> * * $Id: cerb_types.h,v 1.1 2002/11/21 00:42:35 dawidek Exp $ * */ #ifndef _CERB_TYPES_H_ #define _CERB_TYPES_H_ /* * Value type placed in scb_val.v_type. */ #define CB_EMPTY_T 0 /* unsupported type */ #define CB_UNKNOWN_T 1 /* unsupported type */ #define CB_STR_T 2 /* char * */ #define CB_STRPTR_T 3 /* char ** */ #define CB_DEF_T 4 /* register_t */ #define CB_DEFPTR_T 5 /* register_t * */ #define CB_UDEF_T 6 /* u_register_t */ #define CB_UDEFPTR_T 7 /* u_register_r * */ #define CB_PTR_T 8 /* some other pointer */ #define CB_MAXTYPE_T 9 /* Maximum number of syscall's arguments */ #define CB_NARGS_G 7 #endif /* _CERB_TYPES_H_ */ --- NEW FILE: cerb_types.master --- # # cerb_types.master - types declarations # # (c) 2002 Pawel Jakub Dawidek <ni...@ga...> # # $Id: cerb_types.master,v 1.1 2002/11/21 00:42:35 dawidek Exp $ # execve STR STRPTR STRPTR open STR DEF DEF link STR STR unlink STR chmod STR DEF chown STR DEF DEF socket DEF DEF DEF bind DEF UNKNOWN DEF Index: Makefile =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/Makefile,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Makefile 19 Nov 2002 10:28:11 -0000 1.12 --- Makefile 21 Nov 2002 00:42:35 -0000 1.13 *************** *** 4,7 **** --- 4,10 ---- sh make_operations.sh + cerb_types.c: + sh make_types.sh + SRCS = vnode_if.h \ cerb_main.c \ *************** *** 30,38 **** cerb_operations.c \ cerb_operations.h \ cerb_sysctl.c CFLAGS = -Wall ! CLEANFILES = cerb_operations.[ch] .if defined(DEBUG) --- 33,43 ---- cerb_operations.c \ cerb_operations.h \ + cerb_types.c \ + cerb_types.h \ cerb_sysctl.c CFLAGS = -Wall ! CLEANFILES = cerb_operations.c cerb_operations.h cerb_types.c .if defined(DEBUG) Index: cerb_action.c =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/cerb_action.c,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** cerb_action.c 19 Nov 2002 10:28:11 -0000 1.35 --- cerb_action.c 21 Nov 2002 00:42:35 -0000 1.36 *************** *** 441,444 **** --- 441,446 ---- uprintf("%s: UNKNOWN\n", __func__); } + + lstr = rstr; /* * Here we just have to test v[i]->v_type, because, if *************** *** 492,500 **** } } else { MCB_XDEBUG(EINVAL, "Invalid argument %u type.", i); } val = v[i]; - lval = rval; } --- 494,502 ---- } + lval = rval; } else { MCB_XDEBUG(EINVAL, "Invalid argument %u type.", i); } val = v[i]; } Index: cerb_desc.c =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/cerb_desc.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** cerb_desc.c 16 Nov 2002 18:44:28 -0000 1.9 --- cerb_desc.c 21 Nov 2002 00:42:35 -0000 1.10 *************** *** 25,29 **** ! u_int ccb_desc_cache = 1; static SLIST_HEAD(, scb_desc) vcb_desc_head; static SLIST_HEAD(, scb_dclose) vcb_dclose_head; --- 25,29 ---- ! u_int ccb_desc_cache = 2; static SLIST_HEAD(, scb_desc) vcb_desc_head; static SLIST_HEAD(, scb_dclose) vcb_dclose_head; Index: cerb_globals.h =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/cerb_globals.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** cerb_globals.h 18 Nov 2002 15:24:07 -0000 1.22 --- cerb_globals.h 21 Nov 2002 00:42:35 -0000 1.23 *************** *** 12,15 **** --- 12,16 ---- #include <sys/types.h> + #include "cerb_types.h" #if defined (_KERNEL) || defined (LISTER) *************** *** 53,69 **** ECB_MAXID_I }; - - /* - * Value type placed in scb_val.v_type. - */ - #define CB_STR_T 0 /* char * */ - #define CB_STRPTR_T 1 /* char ** */ - #define CB_DEF_T 2 /* register_t */ - #define CB_DEFPTR_T 3 /* register_t * */ - #define CB_UDEF_T 4 /* u_register_t */ - #define CB_UDEFPTR_T 5 /* u_register_r * */ - #define CB_PTR_T 6 /* some other pointer (void *) */ - - #define CB_MAXTYPE_T 7 /* --- 54,57 ---- Index: cerb_macros.h =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/cerb_macros.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** cerb_macros.h 18 Nov 2002 15:24:07 -0000 1.7 --- cerb_macros.h 21 Nov 2002 00:42:35 -0000 1.8 *************** *** 50,54 **** uprintf("kcerb:debug:%s:[return=%d]: " fmt "\n", __func__ , \ ret , ## args); \ ! return((ret)); \ } while (0) #else /* DEBUG */ --- 50,54 ---- uprintf("kcerb:debug:%s:[return=%d]: " fmt "\n", __func__ , \ ret , ## args); \ ! return /* ((ret)) */ (0); \ } while (0) #else /* DEBUG */ Index: cerb_rules.c =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/cerb_rules.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** cerb_rules.c 18 Nov 2002 15:24:08 -0000 1.23 --- cerb_rules.c 21 Nov 2002 00:42:35 -0000 1.24 *************** *** 16,19 **** --- 16,20 ---- #include <sys/vnode.h> #include <sys/jail.h> + #include <sys/syscall.h> #include "cerb_globals.h" *************** *** 25,28 **** --- 26,31 ---- + extern u_int tcb_argtype[SYS_MAXSYSCALL + 1][CB_NARGS_G]; + struct scb_tab tcb_tabs[CB_MAXTABS_G]; struct scb_rule *vcb_head; *************** *** 106,110 **** retv->v_id = ECB_CONST_I; - retv->v_type = v->v_type; if (v->v_id == ECB_ARG_I) { --- 109,112 ---- *************** *** 113,127 **** sysent[vcb_syscall].sy_narg, v->v_narg); } retv->v_val = vcb_uap[v->v_narg]; ! if (v->v_type == CB_STR_T || v->v_type == CB_DEFPTR_T || ! v->v_type == CB_UDEFPTR_T || v->v_type == CB_PTR_T || ! v->v_type == CB_STRPTR_T) { if (MCB_CHKADDR(retv->v_ptr)) MCB_XDEBUG(EFAULT, "Invalid argument address."); } ! if (v->v_type == CB_STRPTR_T) { for (i = 0; retv->v_strp[i] != NULL; ++i) { if (MCB_CHKADDR(retv->v_strp[i])) { --- 115,138 ---- sysent[vcb_syscall].sy_narg, v->v_narg); } + if (tcb_argtype[vcb_syscall][0] == CB_EMPTY_T) { + MCB_XDEBUG(EINVAL, "Can't operate on arguments for " + "syscall %u\n", vcb_syscall); + } + if (tcb_argtype[vcb_syscall][v->v_narg] == CB_UNKNOWN_T) { + MCB_XDEBUG(EINVAL, "Can't operate on argument %u for " + "syscall %u\n", v->v_narg, vcb_syscall); + } retv->v_val = vcb_uap[v->v_narg]; + retv->v_type = tcb_argtype[vcb_syscall][v->v_narg]; ! if (retv->v_type == CB_STR_T || retv->v_type == CB_DEFPTR_T || ! retv->v_type == CB_UDEFPTR_T || retv->v_type == CB_PTR_T || ! retv->v_type == CB_STRPTR_T) { if (MCB_CHKADDR(retv->v_ptr)) MCB_XDEBUG(EFAULT, "Invalid argument address."); } ! if (retv->v_type == CB_STRPTR_T) { for (i = 0; retv->v_strp[i] != NULL; ++i) { if (MCB_CHKADDR(retv->v_strp[i])) { *************** *** 131,135 **** } retv->v_size = i; ! } else if (v->v_type == CB_STR_T) { retv->v_size = strlen(retv->v_str) + 1; } else { --- 142,146 ---- } retv->v_size = i; ! } else if (retv->v_type == CB_STR_T) { retv->v_size = strlen(retv->v_str) + 1; } else { Index: make_operations.sh =================================================================== RCS file: /cvsroot/cerber/cerb-ng/kcerb/make_operations.sh,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** make_operations.sh 20 Nov 2002 10:04:47 -0000 1.3 --- make_operations.sh 21 Nov 2002 00:42:35 -0000 1.4 *************** *** 4,8 **** # - kcerb/cerb_operations.c # - kcerb/cerb_operations.h - # - ucerb/operations.c # # (c) 2002 Pawel Jakub Dawidek <ni...@ga...> --- 4,7 ---- *************** *** 19,22 **** --- 18,29 ---- if [ ! -f $master ]; then echo "`basename $0`: $master not exists" > /dev/stderr + exit 1 + fi + if [ ! -f $action_c ]; then + echo "`basename $0`: $action_c not exists" > /dev/stderr + exit 1 + fi + if [ ! -f $action_h ]; then + echo "`basename $0`: $action_h not exists" > /dev/stderr exit 1 fi |