summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorelad <elad@NetBSD.org>2005-12-12 21:47:58 +0000
committerelad <elad@NetBSD.org>2005-12-12 21:47:58 +0000
commita9505be892fdbe2d21143031e9635f3549e7eebf (patch)
treece4b95912d4c1436e46a45c3ff5f50ce00832d88 /sys/dev
parentaa2ac86c1fe7c95cd71d63f50be60867d595867c (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.c38
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);
+}