PERFORCE change 19877 for review
Robert Watson
rwatson at freebsd.org
Tue Oct 22 15:16:11 GMT 2002
http://perforce.freebsd.org/chv.cgi?CH=19877
Change 19877 by rwatson at rwatson_tislabs on 2002/10/22 08:15:52
Integ trustedbsd base from freebsd main tree: loop back MAC
user api and related cleanups; also, sysinstall and libdisk
fixes. More kirk FFS/UFS snapshot deadlock fixes.
Affected files ...
.. //depot/projects/trustedbsd/base/Makefile.inc1#25 integrate
.. //depot/projects/trustedbsd/base/crypto/heimdal/kadmin/version4.c#4 integrate
.. //depot/projects/trustedbsd/base/gnu/usr.bin/binutils/gdb/kvm-fbsd.c#7 integrate
.. //depot/projects/trustedbsd/base/lib/libc/posix1e/mac.3#2 integrate
.. //depot/projects/trustedbsd/base/lib/libc/posix1e/posix1e.3#3 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/Makefile#3 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/blocks.c#3 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/change.c#4 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/chunk.c#5 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/create_chunk.c#8 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/disk.c#10 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/disklabel.c#3 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/libdisk.3#2 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/libdisk.h#5 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/rules.c#5 integrate
.. //depot/projects/trustedbsd/base/lib/libdisk/write_disk.c#5 integrate
.. //depot/projects/trustedbsd/base/release/doc/en_US.ISO8859-1/hardware/alpha/proc-alpha.sgml#11 integrate
.. //depot/projects/trustedbsd/base/share/man/man4/ip.4#3 integrate
.. //depot/projects/trustedbsd/base/share/man/man7/hier.7#8 integrate
.. //depot/projects/trustedbsd/base/share/man/man9/Makefile#21 integrate
.. //depot/projects/trustedbsd/base/share/man/man9/mac.9#1 branch
.. //depot/projects/trustedbsd/base/sys/alpha/include/psl.h#2 delete
.. //depot/projects/trustedbsd/base/sys/compat/linprocfs/linprocfs.c#11 integrate
.. //depot/projects/trustedbsd/base/sys/ddb/db_ps.c#10 integrate
.. //depot/projects/trustedbsd/base/sys/dev/md/md.c#16 integrate
.. //depot/projects/trustedbsd/base/sys/dev/tx/if_tx.c#5 integrate
.. //depot/projects/trustedbsd/base/sys/dev/tx/if_txreg.h#2 integrate
.. //depot/projects/trustedbsd/base/sys/dev/tx/if_txvar.h#3 integrate
.. //depot/projects/trustedbsd/base/sys/fs/msdosfs/msdosfs_vfsops.c#11 integrate
.. //depot/projects/trustedbsd/base/sys/fs/specfs/spec_vnops.c#14 integrate
.. //depot/projects/trustedbsd/base/sys/kern/init_sysent.c#21 integrate
.. //depot/projects/trustedbsd/base/sys/kern/kern_mac.c#21 integrate
.. //depot/projects/trustedbsd/base/sys/kern/kern_proc.c#24 integrate
.. //depot/projects/trustedbsd/base/sys/kern/subr_disk.c#12 integrate
.. //depot/projects/trustedbsd/base/sys/kern/syscalls.c#21 integrate
.. //depot/projects/trustedbsd/base/sys/kern/syscalls.master#21 integrate
.. //depot/projects/trustedbsd/base/sys/kern/vfs_mount.c#9 integrate
.. //depot/projects/trustedbsd/base/sys/netinet/in.h#11 integrate
.. //depot/projects/trustedbsd/base/sys/netinet/udp_usrreq.c#16 integrate
.. //depot/projects/trustedbsd/base/sys/pci/if_xl.c#10 integrate
.. //depot/projects/trustedbsd/base/sys/pci/if_xlreg.h#4 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_biba/mac_biba.c#13 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_biba/mac_biba.h#3 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_mls/mac_mls.c#12 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_mls/mac_mls.h#3 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_none/mac_none.c#8 integrate
.. //depot/projects/trustedbsd/base/sys/security/mac_test/mac_test.c#8 integrate
.. //depot/projects/trustedbsd/base/sys/sparc64/sparc64/clock.c#4 integrate
.. //depot/projects/trustedbsd/base/sys/sparc64/sparc64/tick.c#5 integrate
.. //depot/projects/trustedbsd/base/sys/sys/_label.h#2 integrate
.. //depot/projects/trustedbsd/base/sys/sys/_types.h#7 integrate
.. //depot/projects/trustedbsd/base/sys/sys/cdefs.h#10 integrate
.. //depot/projects/trustedbsd/base/sys/sys/mac.h#11 integrate
.. //depot/projects/trustedbsd/base/sys/sys/mac_policy.h#12 integrate
.. //depot/projects/trustedbsd/base/sys/sys/proc.h#26 integrate
.. //depot/projects/trustedbsd/base/sys/sys/syscall.h#22 integrate
.. //depot/projects/trustedbsd/base/sys/sys/syscall.mk#22 integrate
.. //depot/projects/trustedbsd/base/sys/sys/sysproto.h#23 integrate
.. //depot/projects/trustedbsd/base/sys/sys/types.h#15 integrate
.. //depot/projects/trustedbsd/base/sys/ufs/ffs/ffs_balloc.c#7 integrate
.. //depot/projects/trustedbsd/base/sys/ufs/ffs/ffs_snapshot.c#14 integrate
.. //depot/projects/trustedbsd/base/sys/vm/uma.h#8 integrate
.. //depot/projects/trustedbsd/base/sys/vm/vm_glue.c#20 integrate
.. //depot/projects/trustedbsd/base/usr.sbin/sysinstall/disks.c#6 integrate
.. //depot/projects/trustedbsd/base/usr.sbin/sysinstall/install.c#10 integrate
.. //depot/projects/trustedbsd/base/usr.sbin/sysinstall/wizard.c#3 integrate
Differences ...
==== //depot/projects/trustedbsd/base/Makefile.inc1#25 (text+ko) ====
@@ -1,5 +1,5 @@
#
-# $FreeBSD: src/Makefile.inc1,v 1.305 2002/10/20 11:18:55 markm Exp $
+# $FreeBSD: src/Makefile.inc1,v 1.306 2002/10/22 08:30:31 ru Exp $
#
# Make command line options:
# -DMAKE_KERBEROS4 to build KerberosIV
@@ -621,7 +621,7 @@
.endif
build-tools:
-.for _tool in bin/csh bin/sh ${_games} gnu/usr.bin/cc/cc_tools ${_fortran} \
+.for _tool in bin/csh bin/sh gnu/usr.bin/cc/cc_tools ${_fortran} \
${_libroken4} ${_libkrb5} lib/libncurses ${_share} \
usr.bin/awk usr.bin/file usr.sbin/sysinstall
${ECHODIR} "===> ${_tool}"; \
==== //depot/projects/trustedbsd/base/crypto/heimdal/kadmin/version4.c#4 (text+ko) ====
@@ -41,7 +41,7 @@
#include <krb_err.h>
#include <kadm_err.h>
-RCSID("$Id: version4.c,v 1.26 2002/09/10 15:20:46 joda Exp $");
+RCSID("$Id: version4.c,v 1.27 2002/10/21 12:35:07 joda Exp $");
#define KADM_NO_OPCODE -1
#define KADM_NO_ENCRYPT -2
@@ -822,6 +822,13 @@
off += _krb5_get_int(msg + off, &rlen, 4);
memset(&authent, 0, sizeof(authent));
authent.length = message.length - rlen - KADM_VERSIZE - 4;
+
+ if(authent.length >= MAX_KTXT_LEN) {
+ krb5_warnx(context, "received bad rlen (%lu)", (unsigned long)rlen);
+ make_you_loose_packet (KADM_LENGTH_ERROR, reply);
+ return;
+ }
+
memcpy(authent.dat, (char*)msg + off, authent.length);
off += authent.length;
==== //depot/projects/trustedbsd/base/gnu/usr.bin/binutils/gdb/kvm-fbsd.c#7 (text+ko) ====
@@ -19,7 +19,7 @@
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/kvm-fbsd.c,v 1.43 2002/10/12 18:08:44 mp Exp $ */
+/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/kvm-fbsd.c,v 1.44 2002/10/21 21:36:36 mp Exp $ */
/*
* This works like "remote" but, you use it like this:
@@ -500,19 +500,78 @@
#ifdef __sparc64__
-/*
-#include "sparc/tm-sp64.h"
-*/
+#define SPARC_INTREG_SIZE 8
+static void
fetch_kcore_registers (struct pcb *pcbp)
{
+ static struct frame top;
+ CORE_ADDR f_addr;
+ int i;
+
+ /* Get the register values out of the sys pcb and store them where
+ `read_register' will find them. */
+ /*
+ * XXX many registers aren't available.
+ * XXX for the non-core case, the registers are stale - they are for
+ * the last context switch to the debugger.
+ * XXX do something with the floating-point registers?
+ */
+ supply_register (SP_REGNUM, (char *)&pcbp->pcb_fp);
+ supply_register (PC_REGNUM, (char *)&pcbp->pcb_pc);
+ f_addr = extract_address (&pcbp->pcb_fp, SPARC_INTREG_SIZE);
+ /* Load the previous frame by hand (XXX) and supply it. */
+ read_memory (f_addr + SPOFF, (char *)&top, sizeof (top));
+ for (i = 0; i < 8; i++)
+ supply_register (i + L0_REGNUM, (char *)&top.fr_local[i]);
+ for (i = 0; i < 8; i++)
+ supply_register (i + I0_REGNUM, (char *)&top.fr_in[i]);
}
-
CORE_ADDR
fbsd_kern_frame_saved_pc (struct frame_info *fi)
{
- return NULL;
+ struct minimal_symbol *sym;
+ CORE_ADDR frame, pc_addr, pc;
+ char *buf;
+
+ buf = alloca (MAX_REGISTER_RAW_SIZE);
+ /* XXX: duplicates fi->extra_info->bottom. */
+ frame = (fi->next != NULL) ? fi->next->frame : read_sp ();
+ pc_addr = frame + offsetof (struct frame, fr_in[7]);
+
+#define READ_PC(pc, a, b) do { \
+ read_memory (a, b, SPARC_INTREG_SIZE); \
+ pc = extract_address (b, SPARC_INTREG_SIZE); \
+} while (0)
+
+ READ_PC (pc, pc_addr, buf);
+
+ sym = lookup_minimal_symbol_by_pc (pc);
+ if (sym != NULL)
+ {
+ if (strncmp (SYMBOL_NAME (sym), "tl0_", 4) == 0 ||
+ strcmp (SYMBOL_NAME (sym), "btext") == 0 ||
+ strcmp (SYMBOL_NAME (sym), "mp_startup") == 0 ||
+ strcmp (SYMBOL_NAME (sym), "fork_trampoline") == 0)
+ {
+ /*
+ * Ugly kluge: user space addresses aren't separated from kernel
+ * ones by range; if encountering a trap from user space, just
+ * return a 0 to stop the trace.
+ * Do the same for entry points of kernel processes to avoid
+ * printing garbage.
+ */
+ pc = 0;
+ }
+ if (strncmp (SYMBOL_NAME (sym), "tl1_", 4) == 0)
+ {
+ pc_addr = fi->frame + sizeof (struct frame) +
+ offsetof (struct trapframe, tf_tpc);
+ READ_PC (pc, pc_addr, buf);
+ }
+ }
+ return (pc);
}
#endif /* __sparc64__ */
==== //depot/projects/trustedbsd/base/lib/libc/posix1e/mac.3#2 (text+ko) ====
@@ -31,7 +31,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libc/posix1e/mac.3,v 1.1 2002/08/02 21:14:42 rwatson Exp $
+.\" $FreeBSD: src/lib/libc/posix1e/mac.3,v 1.2 2002/10/22 01:52:53 rwatson Exp $
.Dd December 21, 2001
.Dt MAC 3
.Sh NAME
@@ -129,7 +129,8 @@
.Xr mac_free 3 ,
.Xr mac_get 3 ,
.Xr mac_set 3 ,
-.Xr mac_text 3
+.Xr mac_text 3 ,
+.Xr mac 9
.Sh STANDARDS
POSIX.1e is described in IEEE POSIX.1e draft 17.
Discussion of the draft
==== //depot/projects/trustedbsd/base/lib/libc/posix1e/posix1e.3#3 (text+ko) ====
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libc/posix1e/posix1e.3,v 1.21 2002/08/09 03:03:08 rwatson Exp $
+.\" $FreeBSD: src/lib/libc/posix1e/posix1e.3,v 1.22 2002/10/22 01:52:53 rwatson Exp $
.\"
.Dd January 17, 2000
.Dt POSIX1E 3
@@ -38,7 +38,7 @@
.In sys/acl.h
.\" .In sys/audit.h
.In sys/capability.h
-.\" .In sys/mac.h
+.In sys/mac.h
.Sh DESCRIPTION
The IEEE POSIX.1e specification never left draft form, but the interfaces
it describes are now widely used despite inherent limitations. Currently,
@@ -97,7 +97,8 @@
.Xr mac 3 ,
.Xr acl 9 ,
.Xr cap 9 ,
-.Xr extattr 9
+.Xr extattr 9 ,
+.Xr mac 9
.Sh STANDARDS
POSIX.1e is described in IEEE POSIX.1e draft 17. Discussion
of the draft continues on the cross-platform POSIX.1e implementation
==== //depot/projects/trustedbsd/base/lib/libdisk/Makefile#3 (text+ko) ====
@@ -1,7 +1,7 @@
-# $FreeBSD: src/lib/libdisk/Makefile,v 1.31 2002/05/13 12:00:45 ru Exp $
+# $FreeBSD: src/lib/libdisk/Makefile,v 1.32 2002/10/22 09:13:02 phk Exp $
LIB= disk
-SRCS= blocks.c disklabel.c chunk.c disk.c change.c \
+SRCS= blocks.c chunk.c disk.c change.c \
create_chunk.c rules.c write_disk.c
INCS= libdisk.h
@@ -14,33 +14,6 @@
NOPIC= yes
MAN= libdisk.3
-MLINKS+= libdisk.3 Open_Disk.3 \
- libdisk.3 Clone_Disk.3 \
- libdisk.3 Free_Disk.3 \
- libdisk.3 Debug_Disk.3 \
- libdisk.3 Set_Bios_Geom.3 \
- libdisk.3 Delete_Chunk.3 \
- libdisk.3 Collapse_Disk.3 \
- libdisk.3 Collapse_Chunk.3 \
- libdisk.3 Create_Chunk.3 \
- libdisk.3 All_FreeBSD.3 \
- libdisk.3 CheckRules.3 \
- libdisk.3 Disk_Names.3 \
- libdisk.3 Set_Boot_Mgr.3 \
- libdisk.3 Set_Boot_Blocks.3 \
- libdisk.3 Write_Disk.3 \
- libdisk.3 Cyl_Aligned.3 \
- libdisk.3 Next_Cyl_Aligned.3 \
- libdisk.3 Prev_Cyl_Aligned.3 \
- libdisk.3 Track_Aligned.3 \
- libdisk.3 Next_Track_Aligned.3 \
- libdisk.3 Prev_Track_Aligned.3 \
- libdisk.3 Create_Chunk_DWIM.3 \
- libdisk.3 MakeDev.3 \
- libdisk.3 MakeDevDisk.3 \
- libdisk.3 ShowChunkFlags.3 \
- libdisk.3 ChunkCanBeRoot.3 \
- libdisk.3 slice_type_name.3
.include <bsd.lib.mk>
==== //depot/projects/trustedbsd/base/lib/libdisk/blocks.c#3 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/blocks.c,v 1.12 2002/03/25 13:49:15 phk Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/blocks.c,v 1.13 2002/10/22 09:13:02 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -35,8 +35,9 @@
}
int
-write_block(int fd, daddr_t block, void *foo, u_long sector_size)
+write_block(int fd, daddr_t block, const void *foo, u_long sector_size)
{
+
if (-1 == lseek(fd, (off_t)block * sector_size, SEEK_SET))
return -1;
if (sector_size != write(fd, foo, sector_size))
==== //depot/projects/trustedbsd/base/lib/libdisk/change.c#4 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/change.c,v 1.21 2002/10/14 13:15:14 nyan Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/change.c,v 1.23 2002/10/22 11:55:27 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -81,7 +81,14 @@
All_FreeBSD(struct disk *d, int force_all)
{
struct chunk *c;
+ int type;
+#ifdef PC98
+ type = 0x494;
+#else
+ type = 0xa5;
+#endif
+
again:
for (c = d->chunks->part; c; c = c->next)
if (c->type != unused) {
@@ -91,19 +98,10 @@
c = d->chunks;
if (force_all) {
Sanitize_Bios_Geom(d);
-#ifdef PC98
- Create_Chunk(d, c->offset, c->size, freebsd, 0x494,
+ Create_Chunk(d, c->offset, c->size, freebsd, type,
CHUNK_FORCE_ALL, "FreeBSD");
-#else
- Create_Chunk(d, c->offset, c->size, freebsd, 0xa5,
- CHUNK_FORCE_ALL);
-#endif
} else {
-#ifdef PC98
- Create_Chunk(d, c->offset, c->size, freebsd, 0x494, 0,
+ Create_Chunk(d, c->offset, c->size, freebsd, type, 0,
"FreeBSD");
-#else
- Create_Chunk(d, c->offset, c->size, freebsd, 0xa5, 0);
-#endif
}
}
==== //depot/projects/trustedbsd/base/lib/libdisk/chunk.c#5 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/chunk.c,v 1.31 2002/03/25 13:49:15 phk Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/chunk.c,v 1.33 2002/10/22 10:51:58 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -18,12 +18,22 @@
#include <err.h>
#include "libdisk.h"
-#define new_chunk() memset(malloc(sizeof(struct chunk)), 0, sizeof(struct chunk))
+static struct chunk *
+new_chunk(void)
+{
+ struct chunk *c;
+
+ c = malloc(sizeof *c);
+ if (c == NULL)
+ err(1, "malloc");
+ memset(c, 0, sizeof *c);
+ return (c);
+}
/* Is c2 completely inside c1 ? */
static int
-Chunk_Inside(struct chunk *c1, struct chunk *c2)
+Chunk_Inside(const struct chunk *c1, const struct chunk *c2)
{
/* if c1 ends before c2 do */
if (c1->end < c2->end)
@@ -34,7 +44,7 @@
return 1;
}
-struct chunk *
+static struct chunk *
Find_Mother_Chunk(struct chunk *chunks, u_long offset, u_long end, chunk_e type)
{
struct chunk *c1,*c2,ct;
@@ -92,7 +102,7 @@
}
struct chunk *
-Clone_Chunk(struct chunk *c1)
+Clone_Chunk(const struct chunk *c1)
{
struct chunk *c2;
@@ -112,14 +122,9 @@
return c2;
}
-int
-#ifdef PC98
+static int
Insert_Chunk(struct chunk *c2, u_long offset, u_long size, const char *name,
chunk_e type, int subtype, u_long flags, const char *sname)
-#else
-Insert_Chunk(struct chunk *c2, u_long offset, u_long size, const char *name,
- chunk_e type, int subtype, u_long flags)
-#endif
{
struct chunk *ct,*cs;
@@ -208,13 +213,8 @@
}
int
-#ifdef PC98
Add_Chunk(struct disk *d, long offset, u_long size, const char *name,
chunk_e type, int subtype, u_long flags, const char *sname)
-#else
-Add_Chunk(struct disk *d, long offset, u_long size, const char *name,
- chunk_e type, int subtype, u_long flags)
-#endif
{
struct chunk *c1,*c2,ct;
u_long end = offset + size - 1;
@@ -233,10 +233,8 @@
c2->offset = c1->offset = offset;
c2->size = c1->size = size;
c2->end = c1->end = end;
-#ifdef PC98
c1->sname = strdup(sname);
c2->sname = strdup("-");
-#endif
c1->name = strdup(name);
c2->name = strdup("-");
c1->type = type;
@@ -303,13 +301,8 @@
size -= offset;
doit:
-#ifdef PC98
return Insert_Chunk(c2, offset, size, name,
type, subtype, flags, sname);
-#else
- return Insert_Chunk(c2, offset, size, name,
- type, subtype, flags);
-#endif
}
}
return __LINE__;
==== //depot/projects/trustedbsd/base/lib/libdisk/create_chunk.c#8 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/create_chunk.c,v 1.69 2002/10/08 12:12:03 nyan Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/create_chunk.c,v 1.72 2002/10/22 10:51:58 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -33,38 +33,7 @@
#include <pwd.h>
#include "libdisk.h"
-static void msgDebug(char *, ...) __printflike(1, 2);
-
-/* Clone these two from sysinstall because we need our own copies
- * due to link order problems with `crunch'. Feh!
- */
static int
-isDebug()
-{
- static int debug = 0; /* Allow debugger to tweak it */
-
- return debug;
-}
-
-/* Write something to the debugging port */
-static void
-msgDebug(char *fmt, ...)
-{
- va_list args;
- char *dbg;
- static int DebugFD = -1;
-
- if (DebugFD == -1)
- DebugFD = open(_PATH_DEV"ttyv1", O_RDWR);
- dbg = (char *)alloca(FILENAME_MAX);
- strcpy(dbg, "DEBUG: ");
- va_start(args, fmt);
- vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args);
- va_end(args);
- write(DebugFD, dbg, strlen(dbg));
-}
-
-int
Fixup_FreeBSD_Names(struct disk *d, struct chunk *c)
{
struct chunk *c1, *c3;
@@ -132,7 +101,7 @@
return 0;
}
-int
+static int
Fixup_Extended_Names(struct disk *d, struct chunk *c)
{
struct chunk *c1;
@@ -155,14 +124,13 @@
Fixup_Names(struct disk *d)
{
struct chunk *c1, *c2;
- int i;
#ifdef __i386__
struct chunk *c3;
int j;
#endif
c1 = d->chunks;
- for(i=1,c2 = c1->part; c2 ; c2 = c2->next) {
+ for(c2 = c1->part; c2 ; c2 = c2->next) {
c2->flags &= ~CHUNK_BSD_COMPAT;
if (c2->type == unused)
continue;
@@ -208,11 +176,7 @@
}
int
-#ifdef PC98
Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subtype, u_long flags, const char *sname)
-#else
-Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subtype, u_long flags)
-#endif
{
int i;
u_long l;
@@ -237,17 +201,13 @@
size -= l;
}
-#ifdef PC98
i = Add_Chunk(d, offset, size, "X", type, subtype, flags, sname);
-#else
- i = Add_Chunk(d, offset, size, "X", type, subtype, flags);
-#endif
Fixup_Names(d);
return i;
}
struct chunk *
-Create_Chunk_DWIM(struct disk *d, struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags)
+Create_Chunk_DWIM(struct disk *d, const struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags)
{
int i;
struct chunk *c1;
@@ -263,11 +223,7 @@
}
return 0;
found:
-#ifdef PC98
i = Add_Chunk(d, offset, size, "X", type, subtype, flags, "-");
-#else
- i = Add_Chunk(d, offset, size, "X", type, subtype, flags);
-#endif
if (i)
return 0;
Fixup_Names(d);
@@ -279,180 +235,14 @@
}
int
-MakeDev(struct chunk *c1, const char *path)
-{
- char *p = c1->name;
- u_long cmaj, min, unit, part, slice;
- char buf[BUFSIZ], buf2[BUFSIZ];
- struct group *grp;
- struct passwd *pwd;
- struct statfs fs;
- uid_t owner;
- gid_t group;
-
- *buf2 = '\0';
- if (isDebug())
- msgDebug("MakeDev: Called with %s on path %s\n", p, path);
- if (!strcmp(p, "X"))
- return 0;
- if (statfs(path, &fs) != 0) {
-#ifdef DEBUG
- warn("statfs(%s) failed\n", path);
-#endif
- return 0;
- }
- if (strcmp(fs.f_fstypename, "devfs") == 0) {
- if (isDebug())
- msgDebug("MakeDev: No need to mknod(2) with DEVFS.\n");
- return 1;
- }
-
- if (!strncmp(p, "ad", 2))
- cmaj = 116, p += 2;
-#ifdef PC98
- else if (!strncmp(p, "wd", 2))
- cmaj = 3, p += 2;
-#endif
- else if (!strncmp(p, "wfd", 3))
- cmaj = 87, p += 3;
- else if (!strncmp(p, "afd", 3))
- cmaj = 118, p += 3;
- else if (!strncmp(p, "fla", 3))
- cmaj = 102, p += 3;
- else if (!strncmp(p, "idad", 4))
- cmaj = 109, p += 4;
- else if (!strncmp(p, "mlxd", 4))
- cmaj = 131, p += 4;
- else if (!strncmp(p, "amrd", 4))
- cmaj = 133, p += 4;
- else if (!strncmp(p, "twed", 4))
- cmaj = 147, p += 4;
- else if (!strncmp(p, "aacd", 4))
- cmaj = 151, p += 4;
- else if (!strncmp(p, "ar", 2)) /* ATA RAID */
- cmaj = 157, p += 2;
- else if (!strncmp(p, "da", 2)) /* CAM support */
- cmaj = 13, p += 2;
- else {
- msgDebug("MakeDev: Unknown major/minor for devtype %s\n", p);
- return 0;
- }
- if (!isdigit(*p)) {
- msgDebug("MakeDev: Invalid disk unit passed: %s\n", p);
- return 0;
- }
- unit = *p - '0';
- p++;
- if (!*p) {
- slice = 1;
- part = 2;
- goto done;
- }
- else if (isdigit(*p)) {
- unit *= 10;
- unit += (*p - '0');
- p++;
- }
-#ifndef __alpha__
- if (*p != 's') {
- msgDebug("MakeDev: `%s' is not a valid slice delimiter\n", p);
- return 0;
- }
- p++;
- if (!isdigit(*p)) {
- msgDebug("MakeDev: `%s' is an invalid slice number\n", p);
- return 0;
- }
- slice = *p - '0';
- p++;
- if (isdigit(*p)) {
- slice *= 10;
- slice += (*p - '0');
- p++;
- }
- slice = slice + 1;
-#else
- slice = 0;
-#endif
- if (!*p) {
- part = 2;
- if(c1->type == freebsd)
- sprintf(buf2, "%sc", c1->name);
- goto done;
- }
- if (*p < 'a' || *p > 'h') {
- msgDebug("MakeDev: `%s' is not a valid partition name.\n", p);
- return 0;
- }
- part = *p - 'a';
- done:
- if (isDebug())
- msgDebug("MakeDev: Unit %lu, Slice %lu, Part %lu\n", unit, slice, part);
- if (unit > 32)
- return 0;
- if (slice > 32)
- return 0;
- if ((pwd = getpwnam("root")) == NULL) {
- if (isDebug())
- msgDebug("MakeDev: Unable to lookup user \"root\", using 0.\n");
- owner = 0;
- } else {
- owner = pwd->pw_uid;
- }
- if ((grp = getgrnam("operator")) == NULL) {
- if (isDebug())
- msgDebug("MakeDev: Unable to lookup group \"operator\", using 5.\n");
- group = 5;
- } else {
- group = grp->gr_gid;
- }
- min = unit * 8 + 65536 * slice + part;
- sprintf(buf, "%s/r%s", path, c1->name);
- unlink(buf);
- if (mknod(buf, S_IFCHR|0640, makedev(cmaj,min)) == -1) {
- msgDebug("mknod of %s returned failure status!\n", buf);
- return 0;
- }
- if (chown(buf, owner, group) == -1) {
- msgDebug("chown of %s returned failure status!\n", buf);
- return 0;
- }
- if (*buf2) {
- sprintf(buf, "%s/r%s", path, buf2);
- unlink(buf);
- if (mknod(buf, S_IFCHR|0640, makedev(cmaj,min)) == -1) {
- msgDebug("mknod of %s returned failure status!\n", buf);
- return 0;
- }
- if (chown(buf, owner, group) == -1) {
- msgDebug("chown of %s returned failure status!\n", buf);
- return 0;
- }
- }
- sprintf(buf, "%s/%s", path, c1->name);
- unlink(buf);
- if (mknod(buf, S_IFCHR|0640, makedev(cmaj,min)) == -1) {
- msgDebug("mknod of %s returned failure status!\n", buf);
- return 0;
- }
- if (chown(buf, owner, group) == -1) {
- msgDebug("chown of %s returned failure status!\n", buf);
- return 0;
- }
- return 1;
-}
-
-int
-MakeDevChunk(struct chunk *c1, const char *path)
+MakeDevChunk(const struct chunk *c1, const char *path)
{
- int i;
- i = MakeDev(c1, path);
if (c1->next)
MakeDevChunk(c1->next, path);
if (c1->part)
MakeDevChunk(c1->part, path);
- return i;
+ return 1;
}
int
==== //depot/projects/trustedbsd/base/lib/libdisk/disk.c#10 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/disk.c,v 1.83 2002/10/20 22:19:37 sam Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/disk.c,v 1.87 2002/10/22 10:51:58 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -400,15 +400,15 @@
* Callback to collect disk-related data.
*/
static int
-assignToDisk(void *arg, XMLToken t, u_int *slice, u_int64_t v)
+assignToDisk(void *arg, XMLToken t, const u_int *slice, u_int64_t v)
{
struct disklabel *dl = (struct disklabel *) arg;
switch ((int) t) {
case XML_FWHEADS:
+ dl->d_ntracks = (u_int32_t) v;
+ case XML_FWSECTORS:
dl->d_nsectors = (u_int32_t) v;
- case XML_FWSECTORS:
- dl->d_ntracks = (u_int32_t) v;
break;
case XML_MEDIASIZE:
/* store this temporarily; it gets moved later */
@@ -471,7 +471,6 @@
struct dos_partition *dp;
void *p;
#endif
- u_long offset = 0;
#ifdef HAVE_GEOM
char *confxml = NULL;
size_t xmlsize;
@@ -612,12 +611,6 @@
continue;
if (!Read_Int32(&dp->dp_size))
continue;
-
- if (dp->dp_typ == DOSPTYP_ONTRACK) {
- d->flags |= DISK_ON_TRACK;
- offset = 63;
- }
-
}
free(p);
#endif
@@ -631,11 +624,7 @@
if (dl.d_ntracks && dl.d_nsectors)
d->bios_cyl = size / (dl.d_ntracks * dl.d_nsectors);
-#ifdef PC98
- if (Add_Chunk(d, -offset, size, name, whole, 0, 0, "-"))
-#else
- if (Add_Chunk(d, -offset, size, name, whole, 0, 0))
-#endif
+ if (Add_Chunk(d, 0, size, name, whole, 0, 0, "-"))
DPRINT(("Failed to add 'whole' chunk"));
#ifdef __i386__
@@ -662,7 +651,6 @@
if (! ds.dss_slices[i].ds_size)
continue;
- ds.dss_slices[i].ds_offset -= offset;
snprintf(sname, sizeof(sname), "%ss%d", name, i - 1);
#ifdef PC98
subtype = ds.dss_slices[i].ds_type |
@@ -707,7 +695,7 @@
ds.dss_slices[i].ds_name))
#else
if (Add_Chunk(d, ds.dss_slices[i].ds_offset,
- ds.dss_slices[i].ds_size, sname, ce, subtype, flags))
+ ds.dss_slices[i].ds_size, sname, ce, subtype, flags, ""))
#endif
DPRINT(("failed to add chunk for slice %d", i - 1));
@@ -770,7 +758,7 @@
0,
ds.dss_slices[i].ds_name) && j != 3)
#else
- 0) && j != 3)
+ 0, "") && j != 3)
#endif
DPRINT((
"Failed to add chunk for partition %c [%lu,%lu]",
@@ -849,7 +837,6 @@
Debug_Disk(struct disk *d)
{
printf("Debug_Disk(%s)", d->name);
- printf(" flags=%lx", d->flags);
#if 0
printf(" real_geom=%lu/%lu/%lu", d->real_cyl, d->real_hd, d->real_sect);
#endif
@@ -887,49 +874,6 @@
free(d);
}
-struct disk *
-Clone_Disk(struct disk *d)
-{
- struct disk *d2;
-
- d2 = (struct disk*) malloc(sizeof *d2);
- if(!d2) return NULL;
- *d2 = *d;
- d2->name = strdup(d2->name);
- d2->chunks = Clone_Chunk(d2->chunks);
-#ifdef PC98
- if(d2->bootipl) {
- d2->bootipl = malloc(d2->bootipl_size);
- memcpy(d2->bootipl, d->bootipl, d2->bootipl_size);
- }
- if(d2->bootmenu) {
- d2->bootmenu = malloc(d2->bootmenu_size);
- memcpy(d2->bootmenu, d->bootmenu, d2->bootmenu_size);
- }
-#else
- if(d2->bootmgr) {
- d2->bootmgr = malloc(d2->bootmgr_size);
- memcpy(d2->bootmgr, d->bootmgr, d2->bootmgr_size);
- }
-#endif
-#if defined(__i386__)
- if(d2->boot1) {
- d2->boot1 = malloc(512);
- memcpy(d2->boot1, d->boot1, 512);
- }
- if(d2->boot2) {
- d2->boot2 = malloc(512 * 15);
- memcpy(d2->boot2, d->boot2, 512 * 15);
- }
-#elif defined(__alpha__)
- if(d2->boot1) {
- d2->boot1 = malloc(512 * 15);
- memcpy(d2->boot1, d->boot1, 512 * 15);
- }
-#endif
- return d2;
-}
-
#if 0
void
Collapse_Disk(struct disk *d)
==== //depot/projects/trustedbsd/base/lib/libdisk/disklabel.c#3 (text+ko) ====
@@ -8,7 +8,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libdisk/disklabel.c,v 1.10 2002/03/25 13:49:15 phk Exp $");
+__FBSDID("$FreeBSD: src/lib/libdisk/disklabel.c,v 1.11 2002/10/22 09:13:02 phk Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -16,17 +16,3 @@
#include <sys/disklabel.h>
#include "libdisk.h"
-struct disklabel *
-read_disklabel(int fd, daddr_t block, u_long sector_size)
-{
- struct disklabel *dp;
-
- dp = (struct disklabel *) read_block(fd, block, sector_size);
- if (dp->d_magic != DISKMAGIC)
- return 0;
- if (dp->d_magic2 != DISKMAGIC)
- return 0;
- if (dkcksum(dp) != 0)
- return 0;
- return dp;
-}
==== //depot/projects/trustedbsd/base/lib/libdisk/libdisk.3#2 (text+ko) ====
@@ -25,14 +25,13 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libdisk/libdisk.3,v 1.26 2001/10/03 03:49:48 bde Exp $
+.\" $FreeBSD: src/lib/libdisk/libdisk.3,v 1.27 2002/10/22 09:13:02 phk Exp $
.\" "
.Dd March 15, 1996
.Dt LIBDISK 3
.Os
.Sh NAME
.Nm Open_Disk ,
-.Nm Clone_Disk ,
.Nm Free_Disk ,
.Nm Debug_Disk ,
.Nm Set_Bios_Geom ,
@@ -56,7 +55,6 @@
>>> TRUNCATED FOR MAIL (1000 lines) <<<
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message
More information about the trustedbsd-cvs
mailing list