diff options
author | 2009-06-24 13:04:24 +0000 | |
---|---|---|
committer | 2009-06-24 13:04:24 +0000 | |
commit | 9938c24341ec0d5787eacf9556da6c95d2e963b5 (patch) | |
tree | 338609c6dbe43f0d0e36b18c34ccae8292ffb7cb /lib/libkvm | |
parent | Remove extra psignal/wakeup in exit1() which can cause the parent to (diff) | |
download | wireguard-openbsd-9938c24341ec0d5787eacf9556da6c95d2e963b5.tar.xz wireguard-openbsd-9938c24341ec0d5787eacf9556da6c95d2e963b5.zip |
Install ntfs includes and add libkvm (fstat) support. ntfs bits
adapted from NetBSD fstat. OK deraadt@
Diffstat (limited to 'lib/libkvm')
-rw-r--r-- | lib/libkvm/Makefile | 4 | ||||
-rw-r--r-- | lib/libkvm/kvm_file2.c | 15 | ||||
-rw-r--r-- | lib/libkvm/kvm_ntfs.c | 88 | ||||
-rw-r--r-- | lib/libkvm/kvm_private.h | 3 |
4 files changed, 101 insertions, 9 deletions
diff --git a/lib/libkvm/Makefile b/lib/libkvm/Makefile index 5a5c60ada1c..620ba477483 100644 --- a/lib/libkvm/Makefile +++ b/lib/libkvm/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.10 2009/06/20 19:50:05 millert Exp $ +# $OpenBSD: Makefile,v 1.11 2009/06/24 13:04:24 millert Exp $ # $NetBSD: Makefile,v 1.11 1996/03/18 22:33:07 thorpej Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/4/93 @@ -16,7 +16,7 @@ SRCS= kvm_${MACHINE_ARCH}.c .endif SRCS+= kvm.c kvm_file.c kvm_file2.c kvm_getloadavg.c kvm_proc.c \ - kvm_cd9660.c kvm_udf.c + kvm_cd9660.c kvm_udf.c kvm_ntfs.c MAN= kvm.3 kvm_dump.3 kvm_geterr.3 kvm_getfiles.3 kvm_getloadavg.3 \ kvm_getprocs.3 kvm_nlist.3 kvm_open.3 kvm_read.3 diff --git a/lib/libkvm/kvm_file2.c b/lib/libkvm/kvm_file2.c index 8778b63743e..e7e2279b657 100644 --- a/lib/libkvm/kvm_file2.c +++ b/lib/libkvm/kvm_file2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kvm_file2.c,v 1.8 2009/06/20 20:20:43 millert Exp $ */ +/* $OpenBSD: kvm_file2.c,v 1.9 2009/06/24 13:04:24 millert Exp $ */ /* * Copyright (c) 2009 Todd C. Miller <Todd.Miller@courtesan.com> @@ -46,7 +46,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: kvm_file2.c,v 1.8 2009/06/20 20:20:43 millert Exp $"; +static char *rcsid = "$OpenBSD: kvm_file2.c,v 1.9 2009/06/24 13:04:24 millert Exp $"; #endif /* LIBC_SCCS and not lint */ /* @@ -623,8 +623,8 @@ fill_file2(kvm_t *kd, struct kinfo_file2 *kf, struct file *fp, struct vnode *vp, return (0); } -static mode_t -getftype(enum vtype v_type) +mode_t +_kvm_getftype(enum vtype v_type) { mode_t ftype = 0; @@ -732,7 +732,7 @@ msdos_filestat(kvm_t *kd, struct kinfo_file2 *kf, struct vnode *vp) kf->va_fsid = de.de_dev & 0xffff; kf->va_fileid = 0; /* XXX see msdosfs_vptofh() for more info */ - kf->va_mode = (mp.pm_mask & 0777) | getftype(vp->v_type); + kf->va_mode = (mp.pm_mask & 0777) | _kvm_getftype(vp->v_type); kf->va_size = de.de_FileSize; kf->va_rdev = 0; /* msdosfs doesn't support device files */ @@ -753,7 +753,7 @@ nfs_filestat(kvm_t *kd, struct kinfo_file2 *kf, struct vnode *vp) kf->va_fileid = nfsnode.n_vattr.va_fileid; kf->va_size = nfsnode.n_size; kf->va_rdev = nfsnode.n_vattr.va_rdev; - kf->va_mode = (mode_t)nfsnode.n_vattr.va_mode | getftype(vp->v_type); + kf->va_mode = (mode_t)nfsnode.n_vattr.va_mode | _kvm_getftype(vp->v_type); return (0); } @@ -832,6 +832,9 @@ filestat(kvm_t *kd, struct kinfo_file2 *kf, struct vnode *vp) case VT_UDF: ret = _kvm_stat_udf(kd, kf, vp); break; + case VT_NTFS: + ret = _kvm_stat_ntfs(kd, kf, vp); + break; case VT_NON: if (vp->v_flag & VCLONE) ret = spec_filestat(kd, kf, vp); diff --git a/lib/libkvm/kvm_ntfs.c b/lib/libkvm/kvm_ntfs.c new file mode 100644 index 00000000000..fd36f33a8c6 --- /dev/null +++ b/lib/libkvm/kvm_ntfs.c @@ -0,0 +1,88 @@ +/* $OpenBSD: kvm_ntfs.c,v 1.1 2009/06/24 13:04:24 millert Exp $ */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jaromir Dolecek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char *rcsid = "$OpenBSD: kvm_ntfs.c,v 1.1 2009/06/24 13:04:24 millert Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include <sys/param.h> +#include <sys/ucred.h> +#define _KERNEL +#include <sys/mount.h> +#undef _KERNEL +#include <sys/vnode.h> +#include <sys/sysctl.h> + +#include <ntfs/ntfs.h> +#include <ntfs/ntfs_inode.h> + +#include <limits.h> +#include <kvm.h> +#include <db.h> + +#include "kvm_private.h" + +extern mode_t _kvm_getftype(enum vtype); + +int +_kvm_stat_ntfs(kvm_t *kd, struct kinfo_file2 *kf, struct vnode *vp) +{ + struct ntnode ntnode; + struct fnode fn; + struct ntfsmount ntm; + + /* + * To get the ntnode, we have to go in two steps - firstly + * to read appropriate struct fnode and then getting the address + * of ntnode and reading it's contents + */ + if (KREAD(kd, (u_long)VTOF(vp), &fn)) { + _kvm_err(kd, kd->program, "can't read fnode at %p", VTOF(vp)); + return (-1); + } + if (KREAD(kd, (u_long)FTONT(&fn), &ntnode)) { + _kvm_err(kd, kd->program, "can't read ntnode at %p", FTONT(&fn)); + return (-1); + } + if (KREAD(kd, (u_long)ntnode.i_mp, &ntm)) { + _kvm_err(kd, kd->program, "can't read ntfsmount at %p", + ntnode.i_mp); + return (-1); + } + + kf->va_fsid = ntnode.i_dev & 0xffff; + kf->va_fileid = (long)ntnode.i_number; + kf->va_mode = (mode_t)ntm.ntm_mode | _kvm_getftype(vp->v_type); + kf->va_size = fn.f_size; + kf->va_rdev = 0; /* XXX */ + + return (0); +} diff --git a/lib/libkvm/kvm_private.h b/lib/libkvm/kvm_private.h index 8c402320f21..3c6b01e9959 100644 --- a/lib/libkvm/kvm_private.h +++ b/lib/libkvm/kvm_private.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kvm_private.h,v 1.14 2009/06/20 20:20:43 millert Exp $ */ +/* $OpenBSD: kvm_private.h,v 1.15 2009/06/24 13:04:24 millert Exp $ */ /* $NetBSD: kvm_private.h,v 1.7 1996/05/05 04:32:15 gwr Exp $ */ /*- @@ -106,3 +106,4 @@ ssize_t _kvm_pread(kvm_t *, int, void *, size_t, off_t); ssize_t _kvm_pwrite(kvm_t *, int, const void *, size_t, off_t); int _kvm_stat_cd9660(kvm_t *, struct kinfo_file2 *, struct vnode *); int _kvm_stat_udf(kvm_t *, struct kinfo_file2 *, struct vnode *); +int _kvm_stat_ntfs(kvm_t *, struct kinfo_file2 *, struct vnode *); |