From a9505be892fdbe2d21143031e9635f3549e7eebf Mon Sep 17 00:00:00 2001 From: elad Date: Mon, 12 Dec 2005 21:47:58 +0000 Subject: Add and document a "query" keyword to veriexecctl. Usage: /sbin/veriexecctl query /path/to/file will print out filename, device, inode, evaluation status, entry flags, fingerprint, and fingerprinting algorithm. --- sys/dev/verified_exec.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'sys/dev') diff --git a/sys/dev/verified_exec.c b/sys/dev/verified_exec.c index b39a783d15c..bdbc405053e 100644 --- a/sys/dev/verified_exec.c +++ b/sys/dev/verified_exec.c @@ -1,4 +1,4 @@ -/* $NetBSD: verified_exec.c,v 1.30 2005/12/12 16:26:33 elad Exp $ */ +/* $NetBSD: verified_exec.c,v 1.31 2005/12/12 21:47:58 elad Exp $ */ /*- * Copyright 2005 Elad Efrat @@ -31,9 +31,9 @@ #include #if defined(__NetBSD__) -__KERNEL_RCSID(0, "$NetBSD: verified_exec.c,v 1.30 2005/12/12 16:26:33 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: verified_exec.c,v 1.31 2005/12/12 21:47:58 elad Exp $"); #else -__RCSID("$Id: verified_exec.c,v 1.30 2005/12/12 16:26:33 elad Exp $\n$NetBSD: verified_exec.c,v 1.30 2005/12/12 16:26:33 elad Exp $"); +__RCSID("$Id: verified_exec.c,v 1.31 2005/12/12 21:47:58 elad Exp $\n$NetBSD: verified_exec.c,v 1.31 2005/12/12 21:47:58 elad Exp $"); #endif #include @@ -179,6 +179,10 @@ veriexecioctl(dev_t dev __unused, u_long cmd, caddr_t data, error = veriexec_delete((struct veriexec_delete_params *)data); break; + case VERIEXEC_QUERY: + error = veriexec_query((struct veriexec_query_params *)data); + break; + default: /* Invalid operation. */ error = ENODEV; @@ -397,3 +401,31 @@ veriexec_delete(struct veriexec_delete_params *params) return (0); } + +int +veriexec_query(struct veriexec_query_params *params) +{ + struct veriexec_hash_entry *vhe; + int error; + + vhe = veriexec_lookup(params->dev, params->ino); + if (vhe == NULL) + return (ENOENT); + + params->type = vhe->type; + params->status = vhe->status; + params->hash_len = vhe->ops->hash_len; + strlcpy(params->fp_type, vhe->ops->type, sizeof(params->fp_type)); + memcpy(params->fp_type, vhe->ops->type, sizeof(params->fp_type)); + error = copyout(params, params->uaddr, sizeof(*params)); + if (error) + return (error); + if (params->fp_bufsize >= vhe->ops->hash_len) { + error = copyout(vhe->fp, params->fp, vhe->ops->hash_len); + if (error) + return (error); + } else + error = ENOMEM; + + return (error); +} -- cgit