diff options
| author | elad <elad@NetBSD.org> | 2005-12-12 21:47:58 +0000 |
|---|---|---|
| committer | elad <elad@NetBSD.org> | 2005-12-12 21:47:58 +0000 |
| commit | a9505be892fdbe2d21143031e9635f3549e7eebf (patch) | |
| tree | ce4b95912d4c1436e46a45c3ff5f50ce00832d88 /sys/dev | |
| parent | aa2ac86c1fe7c95cd71d63f50be60867d595867c (diff) | |
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.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/verified_exec.c | 38 |
1 files changed, 35 insertions, 3 deletions
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 <elad@bsd.org.il> @@ -31,9 +31,9 @@ #include <sys/cdefs.h> #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 <sys/param.h> @@ -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); +} |
