1 /* 2 * Copyright (c) 1991, 1992 Paul Kranenburg <pk (at) cs.few.eur.nl> 3 * Copyright (c) 1993 Branko Lankester <branko (at) hacktic.nl> 4 * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs (at) world.std.com> 5 * Copyright (c) 1996-1999 Wichert Akkerman <wichert (at) cistron.nl> 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. The name of the author may not be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 30 * $Id$ 31 */ 32 33 #include "defs.h" 34 35 #ifdef HAVE_ANDROID_OS 36 #undef __unused 37 #include <linux/socket.h> 38 #endif 39 40 #ifdef LINUX 41 #define _LINUX_SOCKET_H 42 #define _LINUX_FS_H 43 44 #define MS_RDONLY 1 /* Mount read-only */ 45 #define MS_NOSUID 2 /* Ignore suid and sgid bits */ 46 #define MS_NODEV 4 /* Disallow access to device special files */ 47 #define MS_NOEXEC 8 /* Disallow program execution */ 48 #define MS_SYNCHRONOUS 16 /* Writes are synced at once */ 49 #define MS_REMOUNT 32 /* Alter flags of a mounted FS */ 50 #define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */ 51 #define MS_DIRSYNC 128 /* Directory modifications are synchronous */ 52 #define MS_NOATIME 1024 /* Do not update access times. */ 53 #define MS_NODIRATIME 2048 /* Do not update directory access times */ 54 #define MS_BIND 4096 55 #define MS_MOVE 8192 56 #define MS_REC 16384 57 #define MS_SILENT 32768 58 #define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ 59 #define MS_UNBINDABLE (1<<17) /* change to unbindable */ 60 #define MS_PRIVATE (1<<18) /* change to private */ 61 #define MS_SLAVE (1<<19) /* change to slave */ 62 #define MS_SHARED (1<<20) /* change to shared */ 63 #define MS_RELATIME (1<<21) 64 #define MS_KERNMOUNT (1<<22) 65 #define MS_I_VERSION (1<<23) 66 #define MS_STRICTATIME (1<<24) 67 #define MS_BORN (1<<29) 68 #define MS_ACTIVE (1<<30) 69 #define MS_NOUSER (1<<31) 70 #define MS_MGC_VAL 0xc0ed0000 /* Magic flag number */ 71 #define MS_MGC_MSK 0xffff0000 /* Magic flag mask */ 72 73 #include <sys/socket.h> 74 #include <netinet/in.h> 75 #include <arpa/inet.h> 76 77 #include <sys/syscall.h> 78 79 #ifdef HAVE_LINUX_CAPABILITY_H 80 #include <linux/capability.h> 81 #endif 82 83 #ifdef HAVE_ASM_CACHECTL_H 84 #include <asm/cachectl.h> 85 #endif 86 87 #ifdef HAVE_LINUX_USTNAME_H 88 #include <linux/utsname.h> 89 #endif 90 91 #ifdef MIPS 92 #include <asm/sysmips.h> 93 #endif 94 95 #include <linux/sysctl.h> 96 97 static const struct xlat mount_flags[] = { 98 { MS_MGC_VAL, "MS_MGC_VAL" }, 99 { MS_RDONLY, "MS_RDONLY" }, 100 { MS_NOSUID, "MS_NOSUID" }, 101 { MS_NODEV, "MS_NODEV" }, 102 { MS_NOEXEC, "MS_NOEXEC" }, 103 { MS_SYNCHRONOUS,"MS_SYNCHRONOUS"}, 104 { MS_REMOUNT, "MS_REMOUNT" }, 105 { MS_RELATIME, "MS_RELATIME" }, 106 { MS_KERNMOUNT, "MS_KERNMOUNT" }, 107 { MS_I_VERSION, "MS_I_VERSION" }, 108 { MS_STRICTATIME,"MS_STRICTATIME"}, 109 { MS_BORN, "MS_BORN" }, 110 { MS_MANDLOCK, "MS_MANDLOCK" }, 111 { MS_NOATIME, "MS_NOATIME" }, 112 { MS_NODIRATIME,"MS_NODIRATIME" }, 113 { MS_BIND, "MS_BIND" }, 114 { MS_MOVE, "MS_MOVE" }, 115 { MS_REC, "MS_REC" }, 116 { MS_SILENT, "MS_SILENT" }, 117 { MS_POSIXACL, "MS_POSIXACL" }, 118 { MS_UNBINDABLE,"MS_UNBINDABLE" }, 119 { MS_PRIVATE, "MS_PRIVATE" }, 120 { MS_SLAVE, "MS_SLAVE" }, 121 { MS_SHARED, "MS_SHARED" }, 122 { MS_ACTIVE, "MS_ACTIVE" }, 123 { MS_NOUSER, "MS_NOUSER" }, 124 { 0, NULL }, 125 }; 126 127 int 128 sys_mount(struct tcb *tcp) 129 { 130 if (entering(tcp)) { 131 int ignore_type = 0, ignore_data = 0; 132 unsigned long flags = tcp->u_arg[3]; 133 134 /* Discard magic */ 135 if ((flags & MS_MGC_MSK) == MS_MGC_VAL) 136 flags &= ~MS_MGC_MSK; 137 138 if (flags & MS_REMOUNT) 139 ignore_type = 1; 140 else if (flags & (MS_BIND | MS_MOVE)) 141 ignore_type = ignore_data = 1; 142 143 printpath(tcp, tcp->u_arg[0]); 144 tprintf(", "); 145 146 printpath(tcp, tcp->u_arg[1]); 147 tprintf(", "); 148 149 if (ignore_type && tcp->u_arg[2]) 150 tprintf("%#lx", tcp->u_arg[2]); 151 else 152 printstr(tcp, tcp->u_arg[2], -1); 153 tprintf(", "); 154 155 printflags(mount_flags, tcp->u_arg[3], "MS_???"); 156 tprintf(", "); 157 158 if (ignore_data && tcp->u_arg[4]) 159 tprintf("%#lx", tcp->u_arg[4]); 160 else 161 printstr(tcp, tcp->u_arg[4], -1); 162 } 163 return 0; 164 } 165 166 #define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */ 167 #define MNT_DETACH 0x00000002 /* Just detach from the tree */ 168 #define MNT_EXPIRE 0x00000004 /* Mark for expiry */ 169 170 static const struct xlat umount_flags[] = { 171 { MNT_FORCE, "MNT_FORCE" }, 172 { MNT_DETACH, "MNT_DETACH" }, 173 { MNT_EXPIRE, "MNT_EXPIRE" }, 174 { 0, NULL }, 175 }; 176 177 int 178 sys_umount2(struct tcb *tcp) 179 { 180 if (entering(tcp)) { 181 printstr(tcp, tcp->u_arg[0], -1); 182 tprintf(", "); 183 printflags(umount_flags, tcp->u_arg[1], "MNT_???"); 184 } 185 return 0; 186 } 187 188 /* These are not macros, but enums. We just copy the values by hand 189 from Linux 2.6.9 here. */ 190 static const struct xlat personality_options[] = { 191 { 0, "PER_LINUX" }, 192 { 0x00800000, "PER_LINUX_32BIT"}, 193 { 0x04100001, "PER_SVR4" }, 194 { 0x05000002, "PER_SVR3" }, 195 { 0x07000003, "PER_SCOSVR3" }, 196 { 0x06000003, "PER_OSR5" }, 197 { 0x05000004, "PER_WYSEV386" }, 198 { 0x04000005, "PER_ISCR4" }, 199 { 0x00000006, "PER_BSD" }, 200 { 0x04000006, "PER_SUNOS" }, 201 { 0x05000007, "PER_XENIX" }, 202 { 0x00000008, "PER_LINUX32" }, 203 { 0x08000008, "PER_LINUX32_3GB"}, 204 { 0x04000009, "PER_IRIX32" }, 205 { 0x0400000a, "PER_IRIXN32" }, 206 { 0x0400000b, "PER_IRIX64" }, 207 { 0x0000000c, "PER_RISCOS" }, 208 { 0x0400000d, "PER_SOLARIS" }, 209 { 0x0410000e, "PER_UW7" }, 210 { 0x0000000f, "PER_OSF4" }, 211 { 0x00000010, "PER_HPUX" }, 212 { 0, NULL }, 213 }; 214 215 int 216 sys_personality(tcp) 217 struct tcb *tcp; 218 { 219 if (entering(tcp)) 220 printxval(personality_options, tcp->u_arg[0], "PER_???"); 221 return 0; 222 } 223 224 #include <linux/reboot.h> 225 static const struct xlat bootflags1[] = { 226 { LINUX_REBOOT_MAGIC1, "LINUX_REBOOT_MAGIC1" }, 227 { 0, NULL }, 228 }; 229 230 static const struct xlat bootflags2[] = { 231 { LINUX_REBOOT_MAGIC2, "LINUX_REBOOT_MAGIC2" }, 232 { LINUX_REBOOT_MAGIC2A, "LINUX_REBOOT_MAGIC2A" }, 233 { LINUX_REBOOT_MAGIC2B, "LINUX_REBOOT_MAGIC2B" }, 234 { 0, NULL }, 235 }; 236 237 static const struct xlat bootflags3[] = { 238 { LINUX_REBOOT_CMD_CAD_OFF, "LINUX_REBOOT_CMD_CAD_OFF" }, 239 { LINUX_REBOOT_CMD_RESTART, "LINUX_REBOOT_CMD_RESTART" }, 240 { LINUX_REBOOT_CMD_HALT, "LINUX_REBOOT_CMD_HALT" }, 241 { LINUX_REBOOT_CMD_CAD_ON, "LINUX_REBOOT_CMD_CAD_ON" }, 242 { LINUX_REBOOT_CMD_POWER_OFF, "LINUX_REBOOT_CMD_POWER_OFF" }, 243 { LINUX_REBOOT_CMD_RESTART2, "LINUX_REBOOT_CMD_RESTART2" }, 244 { 0, NULL }, 245 }; 246 247 int 248 sys_reboot(tcp) 249 struct tcb *tcp; 250 { 251 if (entering(tcp)) { 252 printflags(bootflags1, tcp->u_arg[0], "LINUX_REBOOT_MAGIC_???"); 253 tprintf(", "); 254 printflags(bootflags2, tcp->u_arg[1], "LINUX_REBOOT_MAGIC_???"); 255 tprintf(", "); 256 printflags(bootflags3, tcp->u_arg[2], "LINUX_REBOOT_CMD_???"); 257 if (tcp->u_arg[2] == LINUX_REBOOT_CMD_RESTART2) { 258 tprintf(", "); 259 printstr(tcp, tcp->u_arg[3], -1); 260 } 261 } 262 return 0; 263 } 264 265 #ifdef M68K 266 static const struct xlat cacheflush_scope[] = { 267 #ifdef FLUSH_SCOPE_LINE 268 { FLUSH_SCOPE_LINE, "FLUSH_SCOPE_LINE" }, 269 #endif 270 #ifdef FLUSH_SCOPE_PAGE 271 { FLUSH_SCOPE_PAGE, "FLUSH_SCOPE_PAGE" }, 272 #endif 273 #ifdef FLUSH_SCOPE_ALL 274 { FLUSH_SCOPE_ALL, "FLUSH_SCOPE_ALL" }, 275 #endif 276 { 0, NULL }, 277 }; 278 279 static const struct xlat cacheflush_flags[] = { 280 #ifdef FLUSH_CACHE_BOTH 281 { FLUSH_CACHE_BOTH, "FLUSH_CACHE_BOTH" }, 282 #endif 283 #ifdef FLUSH_CACHE_DATA 284 { FLUSH_CACHE_DATA, "FLUSH_CACHE_DATA" }, 285 #endif 286 #ifdef FLUSH_CACHE_INSN 287 { FLUSH_CACHE_INSN, "FLUSH_CACHE_INSN" }, 288 #endif 289 { 0, NULL }, 290 }; 291 292 int 293 sys_cacheflush(tcp) 294 struct tcb *tcp; 295 { 296 if (entering(tcp)) { 297 /* addr */ 298 tprintf("%#lx, ", tcp->u_arg[0]); 299 /* scope */ 300 printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???"); 301 tprintf(", "); 302 /* flags */ 303 printflags(cacheflush_flags, tcp->u_arg[2], "FLUSH_CACHE_???"); 304 /* len */ 305 tprintf(", %lu", tcp->u_arg[3]); 306 } 307 return 0; 308 } 309 #endif /* M68K */ 310 311 #ifdef BFIN 312 313 #include <bfin_sram.h> 314 315 static const struct xlat sram_alloc_flags[] = { 316 { L1_INST_SRAM, "L1_INST_SRAM" }, 317 { L1_DATA_A_SRAM, "L1_DATA_A_SRAM" }, 318 { L1_DATA_B_SRAM, "L1_DATA_B_SRAM" }, 319 { L1_DATA_SRAM, "L1_DATA_SRAM" }, 320 { L2_SRAM, "L2_SRAM" }, 321 { 0, NULL }, 322 }; 323 324 int 325 sys_sram_alloc(struct tcb *tcp) 326 { 327 if (entering(tcp)) { 328 /* size */ 329 tprintf("%lu, ", tcp->u_arg[0]); 330 /* flags */ 331 printxval(sram_alloc_flags, tcp->u_arg[1], "???_SRAM"); 332 } 333 return 1; 334 } 335 336 #include <asm/cachectl.h> 337 338 static const struct xlat cacheflush_flags[] = { 339 { ICACHE, "ICACHE" }, 340 { DCACHE, "DCACHE" }, 341 { BCACHE, "BCACHE" }, 342 { 0, NULL }, 343 }; 344 345 int 346 sys_cacheflush(struct tcb *tcp) 347 { 348 if (entering(tcp)) { 349 /* start addr */ 350 tprintf("%#lx, ", tcp->u_arg[0]); 351 /* length */ 352 tprintf("%ld, ", tcp->u_arg[1]); 353 /* flags */ 354 printxval(cacheflush_flags, tcp->u_arg[1], "?CACHE"); 355 } 356 return 0; 357 } 358 359 #endif 360 361 #ifdef SH 362 static const struct xlat cacheflush_flags[] = { 363 #ifdef CACHEFLUSH_D_INVAL 364 { CACHEFLUSH_D_INVAL, "CACHEFLUSH_D_INVAL" }, 365 #endif 366 #ifdef CACHEFLUSH_D_WB 367 { CACHEFLUSH_D_WB, "CACHEFLUSH_D_WB" }, 368 #endif 369 #ifdef CACHEFLUSH_D_PURGE 370 { CACHEFLUSH_D_PURGE, "CACHEFLUSH_D_PURGE" }, 371 #endif 372 #ifdef CACHEFLUSH_I 373 { CACHEFLUSH_I, "CACHEFLUSH_I" }, 374 #endif 375 { 0, NULL }, 376 }; 377 378 int 379 sys_cacheflush(struct tcb *tcp) 380 { 381 if (entering(tcp)) { 382 /* addr */ 383 tprintf("%#lx, ", tcp->u_arg[0]); 384 /* len */ 385 tprintf("%lu, ", tcp->u_arg[1]); 386 /* flags */ 387 printflags(cacheflush_flags, tcp->u_arg[2], "CACHEFLUSH_???"); 388 } 389 return 0; 390 } 391 #endif /* SH */ 392 393 #endif /* LINUX */ 394 395 #ifdef SUNOS4 396 397 #include <sys/reboot.h> 398 #define NFSCLIENT 399 #define LOFS 400 #define RFS 401 #define PCFS 402 #include <sys/mount.h> 403 #include <sys/socket.h> 404 #include <nfs/export.h> 405 #include <rpc/types.h> 406 #include <rpc/auth.h> 407 408 /*ARGSUSED*/ 409 int 410 sys_sync(tcp) 411 struct tcb *tcp; 412 { 413 return 0; 414 } 415 416 static const struct xlat bootflags[] = { 417 { RB_AUTOBOOT, "RB_AUTOBOOT" }, /* for system auto-booting itself */ 418 { RB_ASKNAME, "RB_ASKNAME" }, /* ask for file name to reboot from */ 419 { RB_SINGLE, "RB_SINGLE" }, /* reboot to single user only */ 420 { RB_NOSYNC, "RB_NOSYNC" }, /* dont sync before reboot */ 421 { RB_HALT, "RB_HALT" }, /* don't reboot, just halt */ 422 { RB_INITNAME, "RB_INITNAME" }, /* name given for /etc/init */ 423 { RB_NOBOOTRC, "RB_NOBOOTRC" }, /* don't run /etc/rc.boot */ 424 { RB_DEBUG, "RB_DEBUG" }, /* being run under debugger */ 425 { RB_DUMP, "RB_DUMP" }, /* dump system core */ 426 { RB_WRITABLE, "RB_WRITABLE" }, /* mount root read/write */ 427 { RB_STRING, "RB_STRING" }, /* pass boot args to prom monitor */ 428 { 0, NULL }, 429 }; 430 431 int 432 sys_reboot(tcp) 433 struct tcb *tcp; 434 { 435 if (entering(tcp)) { 436 printflags(bootflags, tcp->u_arg[0], "RB_???"); 437 if (tcp->u_arg[0] & RB_STRING) { 438 printstr(tcp, tcp->u_arg[1], -1); 439 } 440 } 441 return 0; 442 } 443 444 int 445 sys_sysacct(tcp) 446 struct tcb *tcp; 447 { 448 if (entering(tcp)) { 449 printstr(tcp, tcp->u_arg[0], -1); 450 } 451 return 0; 452 } 453 454 int 455 sys_swapon(tcp) 456 struct tcb *tcp; 457 { 458 if (entering(tcp)) { 459 printstr(tcp, tcp->u_arg[0], -1); 460 } 461 return 0; 462 } 463 464 int 465 sys_nfs_svc(tcp) 466 struct tcb *tcp; 467 { 468 if (entering(tcp)) { 469 printsock(tcp, tcp->u_arg[0]); 470 } 471 return 0; 472 } 473 474 static const struct xlat mountflags[] = { 475 { M_RDONLY, "M_RDONLY" }, 476 { M_NOSUID, "M_NOSUID" }, 477 { M_NEWTYPE, "M_NEWTYPE" }, 478 { M_GRPID, "M_GRPID" }, 479 #ifdef M_REMOUNT 480 { M_REMOUNT, "M_REMOUNT" }, 481 #endif 482 #ifdef M_NOSUB 483 { M_NOSUB, "M_NOSUB" }, 484 #endif 485 #ifdef M_MULTI 486 { M_MULTI, "M_MULTI" }, 487 #endif 488 #ifdef M_SYS5 489 { M_SYS5, "M_SYS5" }, 490 #endif 491 { 0, NULL }, 492 }; 493 494 static const struct xlat nfsflags[] = { 495 { NFSMNT_SOFT, "NFSMNT_SOFT" }, 496 { NFSMNT_WSIZE, "NFSMNT_WSIZE" }, 497 { NFSMNT_RSIZE, "NFSMNT_RSIZE" }, 498 { NFSMNT_TIMEO, "NFSMNT_TIMEO" }, 499 { NFSMNT_RETRANS, "NFSMNT_RETRANS" }, 500 { NFSMNT_HOSTNAME, "NFSMNT_HOSTNAME" }, 501 { NFSMNT_INT, "NFSMNT_INT" }, 502 { NFSMNT_NOAC, "NFSMNT_NOAC" }, 503 { NFSMNT_ACREGMIN, "NFSMNT_ACREGMIN" }, 504 { NFSMNT_ACREGMAX, "NFSMNT_ACREGMAX" }, 505 { NFSMNT_ACDIRMIN, "NFSMNT_ACDIRMIN" }, 506 { NFSMNT_ACDIRMAX, "NFSMNT_ACDIRMAX" }, 507 #ifdef NFSMNT_SECURE 508 { NFSMNT_SECURE, "NFSMNT_SECURE" }, 509 #endif 510 #ifdef NFSMNT_NOCTO 511 { NFSMNT_NOCTO, "NFSMNT_NOCTO" }, 512 #endif 513 #ifdef NFSMNT_POSIX 514 { NFSMNT_POSIX, "NFSMNT_POSIX" }, 515 #endif 516 { 0, NULL }, 517 }; 518 519 int 520 sys_mount(tcp) 521 struct tcb *tcp; 522 { 523 char type[4]; 524 525 if (entering(tcp)) { 526 if (!(tcp->u_arg[2] & M_NEWTYPE) || umovestr(tcp, 527 tcp->u_arg[0], sizeof type, type) < 0) { 528 tprintf("OLDTYPE:#%lx", tcp->u_arg[0]); 529 } else { 530 tprintf("\"%s\", ", type); 531 } 532 printstr(tcp, tcp->u_arg[1], -1); 533 tprintf(", "); 534 printflags(mountflags, tcp->u_arg[2] & ~M_NEWTYPE, "M_???"); 535 tprintf(", "); 536 537 if (strcmp(type, "4.2") == 0) { 538 struct ufs_args a; 539 if (umove(tcp, tcp->u_arg[3], &a) < 0) 540 return 0; 541 printstr(tcp, (int)a.fspec, -1); 542 } else if (strcmp(type, "lo") == 0) { 543 struct lo_args a; 544 if (umove(tcp, tcp->u_arg[3], &a) < 0) 545 return 0; 546 printstr(tcp, (int)a.fsdir, -1); 547 } else if (strcmp(type, "nfs") == 0) { 548 struct nfs_args a; 549 if (umove(tcp, tcp->u_arg[3], &a) < 0) 550 return 0; 551 tprintf("["); 552 printsock(tcp, (int) a.addr); 553 tprintf(", "); 554 printflags(nfsflags, a.flags, "NFSMNT_???"); 555 tprintf(", ws:%u,rs:%u,to:%u,re:%u,", 556 a.wsize, a.rsize, a.timeo, a.retrans); 557 if (a.flags & NFSMNT_HOSTNAME && a.hostname) 558 printstr(tcp, (int)a.hostname, -1); 559 else 560 tprintf("%#lx", (unsigned long) a.hostname); 561 tprintf(",reg-min:%u,max:%u,dir-min:%u,max:%u,", 562 a.acregmin, a.acregmax, a.acdirmin, a.acdirmax); 563 if ((a.flags & NFSMNT_SECURE) && a.netname) 564 printstr(tcp, (int) a.netname, -1); 565 else 566 tprintf("%#lx", (unsigned long) a.netname); 567 tprintf("]"); 568 } else if (strcmp(type, "rfs") == 0) { 569 struct rfs_args a; 570 struct token t; 571 if (umove(tcp, tcp->u_arg[3], &a) < 0) 572 return 0; 573 tprintf("["); 574 printstr(tcp, (int)a.rmtfs, -1); 575 if (umove(tcp, (int)a.token, &t) < 0) 576 return 0; 577 tprintf(", %u, %s]", t.t_id, t.t_uname); 578 } else if (strcmp(type, "pcfs") == 0) { 579 struct pc_args a; 580 if (umove(tcp, tcp->u_arg[3], &a) < 0) 581 return 0; 582 printstr(tcp, (int)a.fspec, -1); 583 } 584 } 585 return 0; 586 } 587 588 int 589 sys_unmount(tcp) 590 struct tcb *tcp; 591 { 592 if (entering(tcp)) { 593 printstr(tcp, tcp->u_arg[0], -1); 594 } 595 return 0; 596 } 597 598 int 599 sys_umount(tcp) 600 struct tcb *tcp; 601 { 602 return sys_unmount(tcp); 603 } 604 605 int 606 sys_auditsys(tcp) 607 struct tcb *tcp; 608 { 609 /* XXX - no information available */ 610 return printargs(tcp); 611 } 612 613 static const struct xlat ex_auth_flags[] = { 614 { AUTH_UNIX, "AUTH_UNIX" }, 615 { AUTH_DES, "AUTH_DES" }, 616 { 0, NULL }, 617 }; 618 619 int 620 sys_exportfs(tcp) 621 struct tcb *tcp; 622 { 623 struct export e; 624 int i; 625 626 if (entering(tcp)) { 627 printstr(tcp, tcp->u_arg[0], -1); 628 if (umove(tcp, tcp->u_arg[1], &e) < 0) { 629 tprintf("%#lx", tcp->u_arg[1]); 630 return 0; 631 } 632 tprintf("{fl:%u, anon:%u, ", e.ex_flags, e.ex_anon); 633 printxval(ex_auth_flags, e.ex_auth, "AUTH_???"); 634 tprintf(", roots:["); 635 if (e.ex_auth == AUTH_UNIX) { 636 for (i=0; i<e.ex_u.exunix.rootaddrs.naddrs; i++) { 637 printsock(tcp, 638 (int)&e.ex_u.exunix.rootaddrs.addrvec[i]); 639 } 640 tprintf("], writers:["); 641 for (i=0; i<e.ex_writeaddrs.naddrs; i++) { 642 printsock(tcp, 643 (int)&e.ex_writeaddrs.addrvec[i]); 644 } 645 tprintf("]"); 646 } else { 647 for (i=0; i<e.ex_u.exdes.nnames; i++) { 648 printsock(tcp, 649 (int)&e.ex_u.exdes.rootnames[i]); 650 tprintf(", "); 651 } 652 tprintf("], window:%u", e.ex_u.exdes.window); 653 } 654 tprintf("}"); 655 } 656 return 0; 657 } 658 659 static const struct xlat sysconflimits[] = { 660 #ifdef _SC_ARG_MAX 661 { _SC_ARG_MAX, "_SC_ARG_MAX" }, /* space for argv & envp */ 662 #endif 663 #ifdef _SC_CHILD_MAX 664 { _SC_CHILD_MAX, "_SC_CHILD_MAX" }, /* maximum children per process??? */ 665 #endif 666 #ifdef _SC_CLK_TCK 667 { _SC_CLK_TCK, "_SC_CLK_TCK" }, /* clock ticks/sec */ 668 #endif 669 #ifdef _SC_NGROUPS_MAX 670 { _SC_NGROUPS_MAX, "_SC_NGROUPS_MAX" }, /* number of groups if multple supp. */ 671 #endif 672 #ifdef _SC_OPEN_MAX 673 { _SC_OPEN_MAX, "_SC_OPEN_MAX" }, /* max open files per process */ 674 #endif 675 #ifdef _SC_JOB_CONTROL 676 { _SC_JOB_CONTROL, "_SC_JOB_CONTROL" }, /* do we have job control */ 677 #endif 678 #ifdef _SC_SAVED_IDS 679 { _SC_SAVED_IDS, "_SC_SAVED_IDS" }, /* do we have saved uid/gids */ 680 #endif 681 #ifdef _SC_VERSION 682 { _SC_VERSION, "_SC_VERSION" }, /* POSIX version supported */ 683 #endif 684 { 0, NULL }, 685 }; 686 687 int 688 sys_sysconf(tcp) 689 struct tcb *tcp; 690 { 691 if (entering(tcp)) { 692 printxval(sysconflimits, tcp->u_arg[0], "_SC_???"); 693 } 694 return 0; 695 } 696 697 #endif /* SUNOS4 */ 698 699 #if defined(SUNOS4) || defined(FREEBSD) 700 static const struct xlat pathconflimits[] = { 701 #ifdef _PC_LINK_MAX 702 { _PC_LINK_MAX, "_PC_LINK_MAX" }, /* max links to file/dir */ 703 #endif 704 #ifdef _PC_MAX_CANON 705 { _PC_MAX_CANON, "_PC_MAX_CANON" }, /* max line length */ 706 #endif 707 #ifdef _PC_MAX_INPUT 708 { _PC_MAX_INPUT, "_PC_MAX_INPUT" }, /* max "packet" to a tty device */ 709 #endif 710 #ifdef _PC_NAME_MAX 711 { _PC_NAME_MAX, "_PC_NAME_MAX" }, /* max pathname component length */ 712 #endif 713 #ifdef _PC_PATH_MAX 714 { _PC_PATH_MAX, "_PC_PATH_MAX" }, /* max pathname length */ 715 #endif 716 #ifdef _PC_PIPE_BUF 717 { _PC_PIPE_BUF, "_PC_PIPE_BUF" }, /* size of a pipe */ 718 #endif 719 #ifdef _PC_CHOWN_RESTRICTED 720 { _PC_CHOWN_RESTRICTED, "_PC_CHOWN_RESTRICTED" }, /* can we give away files */ 721 #endif 722 #ifdef _PC_NO_TRUNC 723 { _PC_NO_TRUNC, "_PC_NO_TRUNC" }, /* trunc or error on >NAME_MAX */ 724 #endif 725 #ifdef _PC_VDISABLE 726 { _PC_VDISABLE, "_PC_VDISABLE" }, /* best char to shut off tty c_cc */ 727 #endif 728 { 0, NULL }, 729 }; 730 731 732 int 733 sys_pathconf(tcp) 734 struct tcb *tcp; 735 { 736 if (entering(tcp)) { 737 printstr(tcp, tcp->u_arg[0], -1); 738 tprintf(", "); 739 printxval(pathconflimits, tcp->u_arg[1], "_PC_???"); 740 } 741 return 0; 742 } 743 744 int 745 sys_fpathconf(tcp) 746 struct tcb *tcp; 747 { 748 if (entering(tcp)) { 749 tprintf("%lu, ", tcp->u_arg[0]); 750 printxval(pathconflimits, tcp->u_arg[1], "_PC_???"); 751 } 752 return 0; 753 } 754 755 #endif /* SUNOS4 || FREEBSD */ 756 757 #ifdef SVR4 758 759 #ifdef HAVE_SYS_SYSCONFIG_H 760 #include <sys/sysconfig.h> 761 #endif /* HAVE_SYS_SYSCONFIG_H */ 762 763 #include <sys/mount.h> 764 #include <sys/systeminfo.h> 765 #include <sys/utsname.h> 766 767 static const struct xlat sysconfig_options[] = { 768 #ifdef _CONFIG_NGROUPS 769 { _CONFIG_NGROUPS, "_CONFIG_NGROUPS" }, 770 #endif 771 #ifdef _CONFIG_CHILD_MAX 772 { _CONFIG_CHILD_MAX, "_CONFIG_CHILD_MAX" }, 773 #endif 774 #ifdef _CONFIG_OPEN_FILES 775 { _CONFIG_OPEN_FILES, "_CONFIG_OPEN_FILES" }, 776 #endif 777 #ifdef _CONFIG_POSIX_VER 778 { _CONFIG_POSIX_VER, "_CONFIG_POSIX_VER" }, 779 #endif 780 #ifdef _CONFIG_PAGESIZE 781 { _CONFIG_PAGESIZE, "_CONFIG_PAGESIZE" }, 782 #endif 783 #ifdef _CONFIG_CLK_TCK 784 { _CONFIG_CLK_TCK, "_CONFIG_CLK_TCK" }, 785 #endif 786 #ifdef _CONFIG_XOPEN_VER 787 { _CONFIG_XOPEN_VER, "_CONFIG_XOPEN_VER" }, 788 #endif 789 #ifdef _CONFIG_PROF_TCK 790 { _CONFIG_PROF_TCK, "_CONFIG_PROF_TCK" }, 791 #endif 792 #ifdef _CONFIG_NPROC_CONF 793 { _CONFIG_NPROC_CONF, "_CONFIG_NPROC_CONF" }, 794 #endif 795 #ifdef _CONFIG_NPROC_ONLN 796 { _CONFIG_NPROC_ONLN, "_CONFIG_NPROC_ONLN" }, 797 #endif 798 #ifdef _CONFIG_AIO_LISTIO_MAX 799 { _CONFIG_AIO_LISTIO_MAX, "_CONFIG_AIO_LISTIO_MAX" }, 800 #endif 801 #ifdef _CONFIG_AIO_MAX 802 { _CONFIG_AIO_MAX, "_CONFIG_AIO_MAX" }, 803 #endif 804 #ifdef _CONFIG_AIO_PRIO_DELTA_MAX 805 { _CONFIG_AIO_PRIO_DELTA_MAX, "_CONFIG_AIO_PRIO_DELTA_MAX" }, 806 #endif 807 #ifdef _CONFIG_CONFIG_DELAYTIMER_MAX 808 { _CONFIG_DELAYTIMER_MAX, "_CONFIG_DELAYTIMER_MAX" }, 809 #endif 810 #ifdef _CONFIG_MQ_OPEN_MAX 811 { _CONFIG_MQ_OPEN_MAX, "_CONFIG_MQ_OPEN_MAX" }, 812 #endif 813 #ifdef _CONFIG_MQ_PRIO_MAX 814 { _CONFIG_MQ_PRIO_MAX, "_CONFIG_MQ_PRIO_MAX" }, 815 #endif 816 #ifdef _CONFIG_RTSIG_MAX 817 { _CONFIG_RTSIG_MAX, "_CONFIG_RTSIG_MAX" }, 818 #endif 819 #ifdef _CONFIG_SEM_NSEMS_MAX 820 { _CONFIG_SEM_NSEMS_MAX, "_CONFIG_SEM_NSEMS_MAX" }, 821 #endif 822 #ifdef _CONFIG_SEM_VALUE_MAX 823 { _CONFIG_SEM_VALUE_MAX, "_CONFIG_SEM_VALUE_MAX" }, 824 #endif 825 #ifdef _CONFIG_SIGQUEUE_MAX 826 { _CONFIG_SIGQUEUE_MAX, "_CONFIG_SIGQUEUE_MAX" }, 827 #endif 828 #ifdef _CONFIG_SIGRT_MIN 829 { _CONFIG_SIGRT_MIN, "_CONFIG_SIGRT_MIN" }, 830 #endif 831 #ifdef _CONFIG_SIGRT_MAX 832 { _CONFIG_SIGRT_MAX, "_CONFIG_SIGRT_MAX" }, 833 #endif 834 #ifdef _CONFIG_TIMER_MAX 835 { _CONFIG_TIMER_MAX, "_CONFIG_TIMER_MAX" }, 836 #endif 837 #ifdef _CONFIG_CONFIG_PHYS_PAGES 838 { _CONFIG_PHYS_PAGES, "_CONFIG_PHYS_PAGES" }, 839 #endif 840 #ifdef _CONFIG_AVPHYS_PAGES 841 { _CONFIG_AVPHYS_PAGES, "_CONFIG_AVPHYS_PAGES" }, 842 #endif 843 { 0, NULL }, 844 }; 845 846 int 847 sys_sysconfig(tcp) 848 struct tcb *tcp; 849 { 850 if (entering(tcp)) 851 printxval(sysconfig_options, tcp->u_arg[0], "_CONFIG_???"); 852 return 0; 853 } 854 855 static const struct xlat sysinfo_options[] = { 856 { SI_SYSNAME, "SI_SYSNAME" }, 857 { SI_HOSTNAME, "SI_HOSTNAME" }, 858 { SI_RELEASE, "SI_RELEASE" }, 859 { SI_VERSION, "SI_VERSION" }, 860 { SI_MACHINE, "SI_MACHINE" }, 861 { SI_ARCHITECTURE, "SI_ARCHITECTURE" }, 862 { SI_HW_SERIAL, "SI_HW_SERIAL" }, 863 { SI_HW_PROVIDER, "SI_HW_PROVIDER" }, 864 { SI_SRPC_DOMAIN, "SI_SRPC_DOMAIN" }, 865 #ifdef SI_SET_HOSTNAME 866 { SI_SET_HOSTNAME, "SI_SET_HOSTNAME" }, 867 #endif 868 #ifdef SI_SET_SRPC_DOMAIN 869 { SI_SET_SRPC_DOMAIN, "SI_SET_SRPC_DOMAIN" }, 870 #endif 871 #ifdef SI_SET_KERB_REALM 872 { SI_SET_KERB_REALM, "SI_SET_KERB_REALM" }, 873 #endif 874 #ifdef SI_KERB_REALM 875 { SI_KERB_REALM, "SI_KERB_REALM" }, 876 #endif 877 { 0, NULL }, 878 }; 879 880 int 881 sys_sysinfo(tcp) 882 struct tcb *tcp; 883 { 884 if (entering(tcp)) { 885 printxval(sysinfo_options, tcp->u_arg[0], "SI_???"); 886 tprintf(", "); 887 } 888 else { 889 /* Technically some calls write values. So what. */ 890 if (syserror(tcp)) 891 tprintf("%#lx", tcp->u_arg[1]); 892 else 893 printpath(tcp, tcp->u_arg[1]); 894 tprintf(", %lu", tcp->u_arg[2]); 895 } 896 return 0; 897 } 898 899 #ifdef MIPS 900 901 #include <sys/syssgi.h> 902 903 static const struct xlat syssgi_options[] = { 904 { SGI_SYSID, "SGI_SYSID" }, 905 #ifdef SGI_RDUBLK 906 { SGI_RDUBLK, "SGI_RDUBLK" }, 907 #endif 908 { SGI_TUNE, "SGI_TUNE" }, 909 { SGI_IDBG, "SGI_IDBG" }, 910 { SGI_INVENT, "SGI_INVENT" }, 911 { SGI_RDNAME, "SGI_RDNAME" }, 912 { SGI_SETLED, "SGI_SETLED" }, 913 { SGI_SETNVRAM, "SGI_SETNVRAM" }, 914 { SGI_GETNVRAM, "SGI_GETNVRAM" }, 915 { SGI_QUERY_FTIMER, "SGI_QUERY_FTIMER" }, 916 { SGI_QUERY_CYCLECNTR, "SGI_QUERY_CYCLECNTR" }, 917 { SGI_PROCSZ, "SGI_PROCSZ" }, 918 { SGI_SIGACTION, "SGI_SIGACTION" }, 919 { SGI_SIGPENDING, "SGI_SIGPENDING" }, 920 { SGI_SIGPROCMASK, "SGI_SIGPROCMASK" }, 921 { SGI_SIGSUSPEND, "SGI_SIGSUSPEND" }, 922 { SGI_SETSID, "SGI_SETSID" }, 923 { SGI_SETPGID, "SGI_SETPGID" }, 924 { SGI_SYSCONF, "SGI_SYSCONF" }, 925 { SGI_WAIT4, "SGI_WAIT4" }, 926 { SGI_PATHCONF, "SGI_PATHCONF" }, 927 { SGI_READB, "SGI_READB" }, 928 { SGI_WRITEB, "SGI_WRITEB" }, 929 { SGI_SETGROUPS, "SGI_SETGROUPS" }, 930 { SGI_GETGROUPS, "SGI_GETGROUPS" }, 931 { SGI_SETTIMEOFDAY, "SGI_SETTIMEOFDAY" }, 932 { SGI_SETTIMETRIM, "SGI_SETTIMETRIM" }, 933 { SGI_GETTIMETRIM, "SGI_GETTIMETRIM" }, 934 { SGI_SPROFIL, "SGI_SPROFIL" }, 935 { SGI_RUSAGE, "SGI_RUSAGE" }, 936 { SGI_SIGSTACK, "SGI_SIGSTACK" }, 937 { SGI_SIGSTATUS, "SGI_SIGSTATUS" }, 938 { SGI_NETPROC, "SGI_NETPROC" }, 939 { SGI_SIGALTSTACK, "SGI_SIGALTSTACK" }, 940 { SGI_BDFLUSHCNT, "SGI_BDFLUSHCNT" }, 941 { SGI_SSYNC, "SGI_SSYNC" }, 942 { SGI_NFSCNVT, "SGI_NFSCNVT" }, 943 { SGI_GETPGID, "SGI_GETPGID" }, 944 { SGI_GETSID, "SGI_GETSID" }, 945 { SGI_IOPROBE, "SGI_IOPROBE" }, 946 { SGI_CONFIG, "SGI_CONFIG" }, 947 { SGI_ELFMAP, "SGI_ELFMAP" }, 948 { SGI_MCONFIG, "SGI_MCONFIG" }, 949 { SGI_GETPLABEL, "SGI_GETPLABEL" }, 950 { SGI_SETPLABEL, "SGI_SETPLABEL" }, 951 { SGI_GETLABEL, "SGI_GETLABEL" }, 952 { SGI_SETLABEL, "SGI_SETLABEL" }, 953 { SGI_SATREAD, "SGI_SATREAD" }, 954 { SGI_SATWRITE, "SGI_SATWRITE" }, 955 { SGI_SATCTL, "SGI_SATCTL" }, 956 { SGI_LOADATTR, "SGI_LOADATTR" }, 957 { SGI_UNLOADATTR, "SGI_UNLOADATTR" }, 958 #ifdef SGI_RECVLMSG 959 { SGI_RECVLMSG, "SGI_RECVLMSG" }, 960 #endif 961 { SGI_PLANGMOUNT, "SGI_PLANGMOUNT" }, 962 { SGI_GETPSOACL, "SGI_GETPSOACL" }, 963 { SGI_SETPSOACL, "SGI_SETPSOACL" }, 964 #ifdef SGI_EAG_GET_ATTR 965 { SGI_EAG_GET_ATTR, "SGI_EAG_GET_ATTR" }, 966 #endif 967 #ifdef SGI_EAG_SET_ATTR 968 { SGI_EAG_SET_ATTR, "SGI_EAG_SET_ATTR" }, 969 #endif 970 #ifdef SGI_EAG_GET_PROCATTR 971 { SGI_EAG_GET_PROCATTR, "SGI_EAG_GET_PROCATTR" }, 972 #endif 973 #ifdef SGI_EAG_SET_PROCATTR 974 { SGI_EAG_SET_PROCATTR, "SGI_EAG_SET_PROCATTR" }, 975 #endif 976 #ifdef SGI_FREVOKE 977 { SGI_FREVOKE, "SGI_FREVOKE" }, 978 #endif 979 #ifdef SGI_SBE_GET_INFO 980 { SGI_SBE_GET_INFO, "SGI_SBE_GET_INFO" }, 981 #endif 982 #ifdef SGI_SBE_CLR_INFO 983 { SGI_SBE_CLR_INFO, "SGI_SBE_CLR_INFO" }, 984 #endif 985 { SGI_RMI_FIXECC, "SGI_RMI_FIXECC" }, 986 { SGI_R4K_CERRS, "SGI_R4K_CERRS" }, 987 { SGI_GET_EVCONF, "SGI_GET_EVCONF" }, 988 { SGI_MPCWAROFF, "SGI_MPCWAROFF" }, 989 { SGI_SET_AUTOPWRON, "SGI_SET_AUTOPWRON" }, 990 { SGI_SPIPE, "SGI_SPIPE" }, 991 { SGI_SYMTAB, "SGI_SYMTAB" }, 992 #ifdef SGI_SET_FPDEBUG 993 { SGI_SET_FPDEBUG, "SGI_SET_FPDEBUG" }, 994 #endif 995 #ifdef SGI_SET_FP_PRECISE 996 { SGI_SET_FP_PRECISE, "SGI_SET_FP_PRECISE" }, 997 #endif 998 { SGI_TOSSTSAVE, "SGI_TOSSTSAVE" }, 999 { SGI_FDHI, "SGI_FDHI" }, 1000 #ifdef SGI_SET_CONFIG_SMM 1001 { SGI_SET_CONFIG_SMM, "SGI_SET_CONFIG_SMM" }, 1002 #endif 1003 #ifdef SGI_SET_FP_PRESERVE 1004 { SGI_SET_FP_PRESERVE, "SGI_SET_FP_PRESERVE" }, 1005 #endif 1006 { SGI_MINRSS, "SGI_MINRSS" }, 1007 #ifdef SGI_GRIO 1008 { SGI_GRIO, "SGI_GRIO" }, 1009 #endif 1010 #ifdef SGI_XLV_SET_TAB 1011 { SGI_XLV_SET_TAB, "SGI_XLV_SET_TAB" }, 1012 #endif 1013 #ifdef SGI_XLV_GET_TAB 1014 { SGI_XLV_GET_TAB, "SGI_XLV_GET_TAB" }, 1015 #endif 1016 #ifdef SGI_GET_FP_PRECISE 1017 { SGI_GET_FP_PRECISE, "SGI_GET_FP_PRECISE" }, 1018 #endif 1019 #ifdef SGI_GET_CONFIG_SMM 1020 { SGI_GET_CONFIG_SMM, "SGI_GET_CONFIG_SMM" }, 1021 #endif 1022 #ifdef SGI_FP_IMPRECISE_SUPP 1023 { SGI_FP_IMPRECISE_SUPP,"SGI_FP_IMPRECISE_SUPP" }, 1024 #endif 1025 #ifdef SGI_CONFIG_NSMM_SUPP 1026 { SGI_CONFIG_NSMM_SUPP, "SGI_CONFIG_NSMM_SUPP" }, 1027 #endif 1028 #ifdef SGI_RT_TSTAMP_CREATE 1029 { SGI_RT_TSTAMP_CREATE, "SGI_RT_TSTAMP_CREATE" }, 1030 #endif 1031 #ifdef SGI_RT_TSTAMP_DELETE 1032 { SGI_RT_TSTAMP_DELETE, "SGI_RT_TSTAMP_DELETE" }, 1033 #endif 1034 #ifdef SGI_RT_TSTAMP_START 1035 { SGI_RT_TSTAMP_START, "SGI_RT_TSTAMP_START" }, 1036 #endif 1037 #ifdef SGI_RT_TSTAMP_STOP 1038 { SGI_RT_TSTAMP_STOP, "SGI_RT_TSTAMP_STOP" }, 1039 #endif 1040 #ifdef SGI_RT_TSTAMP_ADDR 1041 { SGI_RT_TSTAMP_ADDR, "SGI_RT_TSTAMP_ADDR" }, 1042 #endif 1043 #ifdef SGI_RT_TSTAMP_MASK 1044 { SGI_RT_TSTAMP_MASK, "SGI_RT_TSTAMP_MASK" }, 1045 #endif 1046 #ifdef SGI_RT_TSTAMP_EOB_MODE 1047 { SGI_RT_TSTAMP_EOB_MODE,"SGI_RT_TSTAMP_EOB_MODE"}, 1048 #endif 1049 #ifdef SGI_USE_FP_BCOPY 1050 { SGI_USE_FP_BCOPY, "SGI_USE_FP_BCOPY" }, 1051 #endif 1052 #ifdef SGI_GET_UST 1053 { SGI_GET_UST, "SGI_GET_UST" }, 1054 #endif 1055 #ifdef SGI_SPECULATIVE_EXEC 1056 { SGI_SPECULATIVE_EXEC, "SGI_SPECULATIVE_EXEC" }, 1057 #endif 1058 #ifdef SGI_XLV_NEXT_RQST 1059 { SGI_XLV_NEXT_RQST, "SGI_XLV_NEXT_RQST" }, 1060 #endif 1061 #ifdef SGI_XLV_ATTR_CURSOR 1062 { SGI_XLV_ATTR_CURSOR, "SGI_XLV_ATTR_CURSOR" }, 1063 #endif 1064 #ifdef SGI_XLV_ATTR_GET 1065 { SGI_XLV_ATTR_GET, "SGI_XLV_ATTR_GET" }, 1066 #endif 1067 #ifdef SGI_XLV_ATTR_SET 1068 { SGI_XLV_ATTR_SET, "SGI_XLV_ATTR_SET" }, 1069 #endif 1070 #ifdef SGI_BTOOLSIZE 1071 { SGI_BTOOLSIZE, "SGI_BTOOLSIZE" }, 1072 #endif 1073 #ifdef SGI_BTOOLGET 1074 { SGI_BTOOLGET, "SGI_BTOOLGET" }, 1075 #endif 1076 #ifdef SGI_BTOOLREINIT 1077 { SGI_BTOOLREINIT, "SGI_BTOOLREINIT" }, 1078 #endif 1079 #ifdef SGI_CREATE_UUID 1080 { SGI_CREATE_UUID, "SGI_CREATE_UUID" }, 1081 #endif 1082 #ifdef SGI_NOFPE 1083 { SGI_NOFPE, "SGI_NOFPE" }, 1084 #endif 1085 #ifdef SGI_OLD_SOFTFP 1086 { SGI_OLD_SOFTFP, "SGI_OLD_SOFTFP" }, 1087 #endif 1088 #ifdef SGI_FS_INUMBERS 1089 { SGI_FS_INUMBERS, "SGI_FS_INUMBERS" }, 1090 #endif 1091 #ifdef SGI_FS_BULKSTAT 1092 { SGI_FS_BULKSTAT, "SGI_FS_BULKSTAT" }, 1093 #endif 1094 #ifdef SGI_RT_TSTAMP_WAIT 1095 { SGI_RT_TSTAMP_WAIT, "SGI_RT_TSTAMP_WAIT" }, 1096 #endif 1097 #ifdef SGI_RT_TSTAMP_UPDATE 1098 { SGI_RT_TSTAMP_UPDATE, "SGI_RT_TSTAMP_UPDATE" }, 1099 #endif 1100 #ifdef SGI_PATH_TO_HANDLE 1101 { SGI_PATH_TO_HANDLE, "SGI_PATH_TO_HANDLE" }, 1102 #endif 1103 #ifdef SGI_PATH_TO_FSHANDLE 1104 { SGI_PATH_TO_FSHANDLE, "SGI_PATH_TO_FSHANDLE" }, 1105 #endif 1106 #ifdef SGI_FD_TO_HANDLE 1107 { SGI_FD_TO_HANDLE, "SGI_FD_TO_HANDLE" }, 1108 #endif 1109 #ifdef SGI_OPEN_BY_HANDLE 1110 { SGI_OPEN_BY_HANDLE, "SGI_OPEN_BY_HANDLE" }, 1111 #endif 1112 #ifdef SGI_READLINK_BY_HANDLE 1113 { SGI_READLINK_BY_HANDLE,"SGI_READLINK_BY_HANDLE"}, 1114 #endif 1115 #ifdef SGI_READ_DANGID 1116 { SGI_READ_DANGID, "SGI_READ_DANGID" }, 1117 #endif 1118 #ifdef SGI_CONST 1119 { SGI_CONST, "SGI_CONST" }, 1120 #endif 1121 #ifdef SGI_XFS_FSOPERATIONS 1122 { SGI_XFS_FSOPERATIONS, "SGI_XFS_FSOPERATIONS" }, 1123 #endif 1124 #ifdef SGI_SETASH 1125 { SGI_SETASH, "SGI_SETASH" }, 1126 #endif 1127 #ifdef SGI_GETASH 1128 { SGI_GETASH, "SGI_GETASH" }, 1129 #endif 1130 #ifdef SGI_SETPRID 1131 { SGI_SETPRID, "SGI_SETPRID" }, 1132 #endif 1133 #ifdef SGI_GETPRID 1134 { SGI_GETPRID, "SGI_GETPRID" }, 1135 #endif 1136 #ifdef SGI_SETSPINFO 1137 { SGI_SETSPINFO, "SGI_SETSPINFO" }, 1138 #endif 1139 #ifdef SGI_GETSPINFO 1140 { SGI_GETSPINFO, "SGI_GETSPINFO" }, 1141 #endif 1142 #ifdef SGI_SHAREII 1143 { SGI_SHAREII, "SGI_SHAREII" }, 1144 #endif 1145 #ifdef SGI_NEWARRAYSESS 1146 { SGI_NEWARRAYSESS, "SGI_NEWARRAYSESS" }, 1147 #endif 1148 #ifdef SGI_GETDFLTPRID 1149 { SGI_GETDFLTPRID, "SGI_GETDFLTPRID" }, 1150 #endif 1151 #ifdef SGI_SET_DISMISSED_EXC_CNT 1152 { SGI_SET_DISMISSED_EXC_CNT,"SGI_SET_DISMISSED_EXC_CNT" }, 1153 #endif 1154 #ifdef SGI_GET_DISMISSED_EXC_CNT 1155 { SGI_GET_DISMISSED_EXC_CNT,"SGI_GET_DISMISSED_EXC_CNT" }, 1156 #endif 1157 #ifdef SGI_CYCLECNTR_SIZE 1158 { SGI_CYCLECNTR_SIZE, "SGI_CYCLECNTR_SIZE" }, 1159 #endif 1160 #ifdef SGI_QUERY_FASTTIMER 1161 { SGI_QUERY_FASTTIMER, "SGI_QUERY_FASTTIMER" }, 1162 #endif 1163 #ifdef SGI_PIDSINASH 1164 { SGI_PIDSINASH, "SGI_PIDSINASH" }, 1165 #endif 1166 #ifdef SGI_ULI 1167 { SGI_ULI, "SGI_ULI" }, 1168 #endif 1169 #ifdef SGI_LPG_SHMGET 1170 { SGI_LPG_SHMGET, "SGI_LPG_SHMGET" }, 1171 #endif 1172 #ifdef SGI_LPG_MAP 1173 { SGI_LPG_MAP, "SGI_LPG_MAP" }, 1174 #endif 1175 #ifdef SGI_CACHEFS_SYS 1176 { SGI_CACHEFS_SYS, "SGI_CACHEFS_SYS" }, 1177 #endif 1178 #ifdef SGI_NFSNOTIFY 1179 { SGI_NFSNOTIFY, "SGI_NFSNOTIFY" }, 1180 #endif 1181 #ifdef SGI_LOCKDSYS 1182 { SGI_LOCKDSYS, "SGI_LOCKDSYS" }, 1183 #endif 1184 #ifdef SGI_EVENTCTR 1185 { SGI_EVENTCTR, "SGI_EVENTCTR" }, 1186 #endif 1187 #ifdef SGI_GETPRUSAGE 1188 { SGI_GETPRUSAGE, "SGI_GETPRUSAGE" }, 1189 #endif 1190 #ifdef SGI_PROCMASK_LOCATION 1191 { SGI_PROCMASK_LOCATION,"SGI_PROCMASK_LOCATION" }, 1192 #endif 1193 #ifdef SGI_UNUSED 1194 { SGI_UNUSED, "SGI_UNUSED" }, 1195 #endif 1196 #ifdef SGI_CKPT_SYS 1197 { SGI_CKPT_SYS, "SGI_CKPT_SYS" }, 1198 #endif 1199 #ifdef SGI_CKPT_SYS 1200 { SGI_CKPT_SYS, "SGI_CKPT_SYS" }, 1201 #endif 1202 #ifdef SGI_GETGRPPID 1203 { SGI_GETGRPPID, "SGI_GETGRPPID" }, 1204 #endif 1205 #ifdef SGI_GETSESPID 1206 { SGI_GETSESPID, "SGI_GETSESPID" }, 1207 #endif 1208 #ifdef SGI_ENUMASHS 1209 { SGI_ENUMASHS, "SGI_ENUMASHS" }, 1210 #endif 1211 #ifdef SGI_SETASMACHID 1212 { SGI_SETASMACHID, "SGI_SETASMACHID" }, 1213 #endif 1214 #ifdef SGI_GETASMACHID 1215 { SGI_GETASMACHID, "SGI_GETASMACHID" }, 1216 #endif 1217 #ifdef SGI_GETARSESS 1218 { SGI_GETARSESS, "SGI_GETARSESS" }, 1219 #endif 1220 #ifdef SGI_JOINARRAYSESS 1221 { SGI_JOINARRAYSESS, "SGI_JOINARRAYSESS" }, 1222 #endif 1223 #ifdef SGI_SPROC_KILL 1224 { SGI_SPROC_KILL, "SGI_SPROC_KILL" }, 1225 #endif 1226 #ifdef SGI_DBA_CONFIG 1227 { SGI_DBA_CONFIG, "SGI_DBA_CONFIG" }, 1228 #endif 1229 #ifdef SGI_RELEASE_NAME 1230 { SGI_RELEASE_NAME, "SGI_RELEASE_NAME" }, 1231 #endif 1232 #ifdef SGI_SYNCH_CACHE_HANDLER 1233 { SGI_SYNCH_CACHE_HANDLER,"SGI_SYNCH_CACHE_HANDLER"}, 1234 #endif 1235 #ifdef SGI_SWASH_INIT 1236 { SGI_SWASH_INIT, "SGI_SWASH_INIT" }, 1237 #endif 1238 #ifdef SGI_NUMA_MIGR_PAGE 1239 { SGI_NUMA_MIGR_PAGE, "SGI_NUMA_MIGR_PAGE" }, 1240 #endif 1241 #ifdef SGI_NUMA_MIGR_PAGE_ALT 1242 { SGI_NUMA_MIGR_PAGE_ALT,"SGI_NUMA_MIGR_PAGE_ALT"}, 1243 #endif 1244 #ifdef SGI_KAIO_USERINIT 1245 { SGI_KAIO_USERINIT, "SGI_KAIO_USERINIT" }, 1246 #endif 1247 #ifdef SGI_KAIO_READ 1248 { SGI_KAIO_READ, "SGI_KAIO_READ" }, 1249 #endif 1250 #ifdef SGI_KAIO_WRITE 1251 { SGI_KAIO_WRITE, "SGI_KAIO_WRITE" }, 1252 #endif 1253 #ifdef SGI_KAIO_SUSPEND 1254 { SGI_KAIO_SUSPEND, "SGI_KAIO_SUSPEND" }, 1255 #endif 1256 #ifdef SGI_KAIO_STATS 1257 { SGI_KAIO_STATS, "SGI_KAIO_STATS" }, 1258 #endif 1259 #ifdef SGI_INITIAL_PT_SPROC 1260 { SGI_INITIAL_PT_SPROC, "SGI_INITIAL_PT_SPROC" }, 1261 #endif 1262 { 0, NULL }, 1263 }; 1264 1265 int 1266 sys_syssgi(tcp) 1267 struct tcb *tcp; 1268 { 1269 int i; 1270 1271 if (entering(tcp)) { 1272 printxval(syssgi_options, tcp->u_arg[0], "SGI_???"); 1273 switch (tcp->u_arg[0]) { 1274 default: 1275 for (i = 1; i < tcp->u_nargs; i++) 1276 tprintf(", %#lx", tcp->u_arg[i]); 1277 break; 1278 } 1279 } 1280 return 0; 1281 } 1282 1283 #include <sys/types.h> 1284 #include <rpc/rpc.h> 1285 struct cred; 1286 struct uio; 1287 #include <sys/fsid.h> 1288 #include <sys/vnode.h> 1289 #include <sys/fs/nfs.h> 1290 #include <sys/fs/nfs_clnt.h> 1291 1292 static const struct xlat mount_flags[] = { 1293 { MS_RDONLY, "MS_RDONLY" }, 1294 { MS_FSS, "MS_FSS" }, 1295 { MS_DATA, "MS_DATA" }, 1296 { MS_NOSUID, "MS_NOSUID" }, 1297 { MS_REMOUNT, "MS_REMOUNT" }, 1298 { MS_NOTRUNC, "MS_NOTRUNC" }, 1299 { MS_GRPID, "MS_GRPID" }, 1300 { MS_NODEV, "MS_NODEV" }, 1301 { MS_BEFORE, "MS_BEFORE" }, 1302 { MS_AFTER, "MS_AFTER" }, 1303 { 0, NULL }, 1304 }; 1305 1306 static const struct xlat nfs_flags[] = { 1307 { NFSMNT_SOFT, "NFSMNT_SOFT" }, 1308 { NFSMNT_WSIZE, "NFSMNT_WSIZE" }, 1309 { NFSMNT_RSIZE, "NFSMNT_RSIZE" }, 1310 { NFSMNT_TIMEO, "NFSMNT_TIMEO" }, 1311 { NFSMNT_RETRANS, "NFSMNT_RETRANS" }, 1312 { NFSMNT_HOSTNAME, "NFSMNT_HOSTNAME" }, 1313 #ifdef NFSMNT_NOINT /* IRIX 6 */ 1314 { NFSMNT_NOINT, "NFSMNT_NOINT" }, 1315 #endif 1316 #ifdef NFSMNT_INT /* IRIX 5 */ 1317 { NFSMNT_INT, "NFSMNT_INT" }, 1318 #endif 1319 { NFSMNT_NOAC, "NFSMNT_NOAC" }, 1320 { NFSMNT_ACREGMIN, "NFSMNT_ACREGMIN" }, 1321 { NFSMNT_ACREGMAX, "NFSMNT_ACREGMAX" }, 1322 { NFSMNT_ACDIRMIN, "NFSMNT_ACDIRMIN" }, 1323 { NFSMNT_ACDIRMAX, "NFSMNT_ACDIRMAX" }, 1324 { NFSMNT_PRIVATE, "NFSMNT_PRIVATE" }, 1325 { NFSMNT_SYMTTL, "NFSMNT_SYMTTL" }, 1326 { NFSMNT_LOOPBACK, "NFSMNT_LOOPBACK" }, 1327 { NFSMNT_BASETYPE, "NFSMNT_BASETYPE" }, 1328 { NFSMNT_NAMEMAX, "NFSMNT_NAMEMAX" }, 1329 #ifdef NFSMNT_SHORTUID /* IRIX 6 */ 1330 { NFSMNT_SHORTUID, "NFSMNT_SHORTUID" }, 1331 #endif 1332 #ifdef NFSMNT_ASYNCNLM /* IRIX 6 */ 1333 { NFSMNT_ASYNCNLM, "NFSMNT_ASYNCNLM" }, 1334 #endif 1335 { 0, NULL }, 1336 }; 1337 1338 int 1339 sys_mount(tcp) 1340 struct tcb *tcp; 1341 { 1342 if (entering(tcp)) { 1343 printpath(tcp, tcp->u_arg[0]); 1344 tprintf(", "); 1345 printpath(tcp, tcp->u_arg[1]); 1346 tprintf(", "); 1347 printflags(mount_flags, tcp->u_arg[2], "MS_???"); 1348 if (tcp->u_arg[2] & (MS_FSS | MS_DATA)) { 1349 tprintf(", "); 1350 tprintf("%ld", tcp->u_arg[3]); 1351 } 1352 if (tcp->u_arg[2] & MS_DATA) { 1353 int nfs_type = sysfs(GETFSIND, FSID_NFS); 1354 1355 tprintf(", "); 1356 if (tcp->u_arg[3] == nfs_type) { 1357 struct nfs_args args; 1358 if (umove(tcp, tcp->u_arg[4], &args) < 0) 1359 tprintf("%#lx", tcp->u_arg[4]); 1360 else { 1361 tprintf("addr="); 1362 printsock(tcp, (int) args.addr); 1363 tprintf(", flags="); 1364 printflags(nfs_flags, args.flags, "NFSMNT_???"); 1365 tprintf(", hostname="); 1366 printstr(tcp, (int) args.hostname, -1); 1367 tprintf(", ...}"); 1368 } 1369 } 1370 else 1371 tprintf("%#lx", tcp->u_arg[4]); 1372 tprintf(", %ld", tcp->u_arg[5]); 1373 } 1374 } 1375 return 0; 1376 } 1377 1378 #else /* !MIPS */ 1379 1380 #if UNIXWARE 1381 1382 #include <sys/types.h> 1383 #include <sys/fstyp.h> 1384 #include <sys/mount.h> 1385 #include <sys/xti.h> 1386 1387 #define NFSCLIENT 1 1388 #include <nfs/mount.h> 1389 1390 #include <sys/fs/vx_ioctl.h> 1391 1392 static const struct xlat mount_flags[] = { 1393 { MS_RDONLY, "MS_RDONLY" }, 1394 { MS_FSS, "MS_FSS" }, 1395 { MS_DATA, "MS_DATA" }, 1396 { MS_HADBAD, "MS_HADBAD" }, 1397 { MS_NOSUID, "MS_NOSUID" }, 1398 { MS_REMOUNT, "MS_REMOUNT" }, 1399 { MS_NOTRUNC, "MS_NOTRUNC" }, 1400 { MS_SOFTMNT, "MS_SOFTMNT" }, 1401 { MS_SYSSPACE, "MS_SYSSPACE" }, 1402 { 0, NULL }, 1403 }; 1404 1405 #ifdef VX_MS_MASK 1406 static const struct xlat vxfs_flags[] = { 1407 { VX_MS_NOLOG, "VX_MS_NOLOG" }, 1408 { VX_MS_BLKCLEAR, "VX_MS_BLKCLEAR" }, 1409 { VX_MS_SNAPSHOT, "VX_MS_SNAPSHOT" }, 1410 { VX_MS_NODATAINLOG, "VX_MS_NODATAINLOG" }, 1411 { VX_MS_DELAYLOG, "VX_MS_DELAYLOG" }, 1412 { VX_MS_TMPLOG, "VX_MS_TMPLOG" }, 1413 { VX_MS_FILESET, "VX_MS_FILESET" }, 1414 1415 { VX_MS_CACHE_DIRECT, "VX_MS_CACHE_DIRECT" }, 1416 { VX_MS_CACHE_DSYNC, "VX_MS_CACHE_DSYNC" }, 1417 { VX_MS_CACHE_CLOSESYNC,"VX_MS_CACHE_CLOSESYNC" }, 1418 { VX_MS_CACHE_TMPCACHE, "VX_MS_CACHE_TMPCACHE" }, 1419 1420 { VX_MS_OSYNC_DIRECT, "VX_MS_OSYNC_DIRECT" }, 1421 { VX_MS_OSYNC_DSYNC, "VX_MS_OSYNC_DSYNC" }, 1422 { VX_MS_OSYNC_CLOSESYNC,"VX_MS_OSYNC_CLOSESYNC" }, 1423 { VX_MS_OSYNC_DELAY, "VX_MS_OSYNC_DELAY" }, 1424 { 0, NULL, }, 1425 }; 1426 #endif 1427 1428 static const struct xlat nfs_flags[] = { 1429 { NFSMNT_SOFT, "NFSMNT_SOFT" }, 1430 { NFSMNT_WSIZE, "NFSMNT_WSIZE" }, 1431 { NFSMNT_RSIZE, "NFSMNT_RSIZE" }, 1432 { NFSMNT_TIMEO, "NFSMNT_TIMEO" }, 1433 { NFSMNT_RETRANS, "NFSMNT_RETRANS" }, 1434 { NFSMNT_HOSTNAME, "NFSMNT_HOSTNAME" }, 1435 { NFSMNT_INT, "NFSMNT_INT" }, 1436 { NFSMNT_NOAC, "NFSMNT_NOAC" }, 1437 { NFSMNT_ACREGMIN, "NFSMNT_ACREGMIN" }, 1438 { NFSMNT_ACREGMAX, "NFSMNT_ACREGMAX" }, 1439 { NFSMNT_ACDIRMIN, "NFSMNT_ACDIRMIN" }, 1440 { NFSMNT_ACDIRMAX, "NFSMNT_ACDIRMAX" }, 1441 { NFSMNT_SECURE, "NFSMNT_SECURE" }, 1442 { NFSMNT_NOCTO, "NFSMNT_NOCTO" }, 1443 { NFSMNT_GRPID, "NFSMNT_GRPID" }, 1444 { NFSMNT_RPCTIMESYNC, "NFSMNT_RPCTIMESYNC" }, 1445 { NFSMNT_LWPSMAX, "NFSMNT_LWPSMAX" }, 1446 { 0, NULL }, 1447 }; 1448 1449 int 1450 sys_mount(tcp) 1451 struct tcb *tcp; 1452 { 1453 if (entering(tcp)) { 1454 char fstyp [FSTYPSZ]; 1455 printpath(tcp, tcp->u_arg[0]); 1456 tprintf(", "); 1457 printpath(tcp, tcp->u_arg[1]); 1458 tprintf(", "); 1459 printflags(mount_flags, tcp->u_arg[2], "MS_???"); 1460 /* The doc sez that the file system type is given as a 1461 fsindex, and we should use sysfs to work out the name. 1462 This appears to be untrue for UW. Maybe it's untrue 1463 for all SVR4's? */ 1464 if (tcp->u_arg[2] & (MS_FSS | MS_DATA)) { 1465 if (umovestr(tcp, tcp->u_arg[3], FSTYPSZ, fstyp) < 0) { 1466 *fstyp = 0; 1467 tprintf(", %ld", tcp->u_arg[3]); 1468 } 1469 else 1470 tprintf(", \"%s\"", fstyp); 1471 } 1472 if (tcp->u_arg[2] & MS_DATA) { 1473 tprintf(", "); 1474 #ifdef VX_MS_MASK 1475 /* On UW7 they don't give us the defines and structs 1476 we need to see what is going on. Bummer. */ 1477 if (strcmp (fstyp, "vxfs") == 0) { 1478 struct vx_mountargs5 args; 1479 if (umove(tcp, tcp->u_arg[4], &args) < 0) 1480 tprintf("%#lx", tcp->u_arg[4]); 1481 else { 1482 tprintf("{ flags="); 1483 printflags(vxfs_flags, args.mflags, "VX_MS_???"); 1484 if (args.mflags & VX_MS_SNAPSHOT) { 1485 tprintf (", snapof="); 1486 printstr (tcp, 1487 (long) args.primaryspec, 1488 -1); 1489 if (args.snapsize > 0) 1490 tprintf (", snapsize=%ld", args.snapsize); 1491 } 1492 tprintf(" }"); 1493 } 1494 } 1495 else 1496 #endif 1497 if (strcmp (fstyp, "specfs") == 0) { 1498 tprintf ("dev="); 1499 printstr (tcp, tcp->u_arg[4], -1); 1500 } 1501 else 1502 if (strcmp (fstyp, "nfs") == 0) { 1503 struct nfs_args args; 1504 if (umove(tcp, tcp->u_arg[4], &args) < 0) 1505 tprintf("%#lx", tcp->u_arg[4]); 1506 else { 1507 struct netbuf addr; 1508 tprintf("{ addr="); 1509 if (umove (tcp, (int) args.addr, &addr) < 0) { 1510 tprintf ("%#lx", (long) args.addr); 1511 } 1512 else { 1513 printsock(tcp, (int) addr.buf, addr.len); 1514 } 1515 tprintf(", flags="); 1516 printflags(nfs_flags, args.flags, "NFSMNT_???"); 1517 tprintf(", hostname="); 1518 printstr(tcp, (int) args.hostname, -1); 1519 tprintf(", ...}"); 1520 } 1521 } 1522 else 1523 tprintf("%#lx", tcp->u_arg[4]); 1524 tprintf(", %ld", tcp->u_arg[5]); 1525 } 1526 } 1527 return 0; 1528 } 1529 1530 #else /* !UNIXWARE */ 1531 1532 int 1533 sys_mount(tcp) 1534 struct tcb *tcp; 1535 { 1536 if (entering(tcp)) { 1537 printpath(tcp, tcp->u_arg[0]); 1538 tprintf(", "); 1539 printpath(tcp, tcp->u_arg[1]); 1540 tprintf(", ..."); 1541 } 1542 return 0; 1543 } 1544 #endif /* !UNIXWARE */ 1545 1546 #endif /* !MIPS */ 1547 1548 #endif /* SVR4 */ 1549 1550 #ifdef SYS_capget 1551 1552 static const struct xlat capabilities[] = { 1553 { 1<<CAP_CHOWN, "CAP_CHOWN" }, 1554 { 1<<CAP_DAC_OVERRIDE, "CAP_DAC_OVERRIDE"}, 1555 { 1<<CAP_DAC_READ_SEARCH,"CAP_DAC_READ_SEARCH"}, 1556 { 1<<CAP_FOWNER, "CAP_FOWNER" }, 1557 { 1<<CAP_FSETID, "CAP_FSETID" }, 1558 { 1<<CAP_KILL, "CAP_KILL" }, 1559 { 1<<CAP_SETGID, "CAP_SETGID" }, 1560 { 1<<CAP_SETUID, "CAP_SETUID" }, 1561 { 1<<CAP_SETPCAP, "CAP_SETPCAP" }, 1562 { 1<<CAP_LINUX_IMMUTABLE,"CAP_LINUX_IMMUTABLE"}, 1563 { 1<<CAP_NET_BIND_SERVICE,"CAP_NET_BIND_SERVICE"}, 1564 { 1<<CAP_NET_BROADCAST, "CAP_NET_BROADCAST"}, 1565 { 1<<CAP_NET_ADMIN, "CAP_NET_ADMIN" }, 1566 { 1<<CAP_NET_RAW, "CAP_NET_RAW" }, 1567 { 1<<CAP_IPC_LOCK, "CAP_IPC_LOCK" }, 1568 { 1<<CAP_IPC_OWNER, "CAP_IPC_OWNER" }, 1569 { 1<<CAP_SYS_MODULE, "CAP_SYS_MODULE"}, 1570 { 1<<CAP_SYS_RAWIO, "CAP_SYS_RAWIO" }, 1571 { 1<<CAP_SYS_CHROOT, "CAP_SYS_CHROOT"}, 1572 { 1<<CAP_SYS_PTRACE, "CAP_SYS_PTRACE"}, 1573 { 1<<CAP_SYS_PACCT, "CAP_SYS_PACCT" }, 1574 { 1<<CAP_SYS_ADMIN, "CAP_SYS_ADMIN" }, 1575 { 1<<CAP_SYS_BOOT, "CAP_SYS_BOOT" }, 1576 { 1<<CAP_SYS_NICE, "CAP_SYS_NICE" }, 1577 { 1<<CAP_SYS_RESOURCE, "CAP_SYS_RESOURCE"}, 1578 { 1<<CAP_SYS_TIME, "CAP_SYS_TIME" }, 1579 { 1<<CAP_SYS_TTY_CONFIG,"CAP_SYS_TTY_CONFIG"}, 1580 #ifdef CAP_MKNOD 1581 { 1<<CAP_MKNOD, "CAP_MKNOD" }, 1582 #endif 1583 #ifdef CAP_LEASE 1584 { 1<<CAP_LEASE, "CAP_LEASE" }, 1585 #endif 1586 #ifdef CAP_AUDIT_WRITE 1587 { 1<<CAP_AUDIT_WRITE, "CAP_AUDIT_WRITE"}, 1588 #endif 1589 #ifdef CAP_AUDIT_CONTROL 1590 { 1<<CAP_AUDIT_CONTROL, "CAP_AUDIT_CONTROL"}, 1591 #endif 1592 #ifdef CAP_SETFCAP 1593 { 1<<CAP_SETFCAP, "CAP_SETFCAP" }, 1594 #endif 1595 { 0, NULL }, 1596 }; 1597 1598 1599 int 1600 sys_capget(tcp) 1601 struct tcb *tcp; 1602 { 1603 static cap_user_header_t arg0 = NULL; 1604 static cap_user_data_t arg1 = NULL; 1605 1606 if(!entering(tcp)) { 1607 if (!arg0) { 1608 if ((arg0 = malloc(sizeof(*arg0))) == NULL) { 1609 fprintf(stderr, "out of memory\n"); 1610 tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]); 1611 return -1; 1612 } 1613 } 1614 if (!arg1) { 1615 if ((arg1 = malloc(sizeof(*arg1))) == NULL) { 1616 fprintf(stderr, "out of memory\n"); 1617 tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]); 1618 return -1; 1619 } 1620 } 1621 1622 if (!tcp->u_arg[0]) 1623 tprintf("NULL"); 1624 else if (!verbose(tcp)) 1625 tprintf("%#lx", tcp->u_arg[0]); 1626 else if (umoven(tcp, tcp->u_arg[0], sizeof(*arg0), (char *) arg0) < 0) 1627 tprintf("???"); 1628 else { 1629 tprintf("%#x, %d", arg0->version, arg0->pid); 1630 } 1631 tprintf(", "); 1632 if (!tcp->u_arg[1]) 1633 tprintf("NULL"); 1634 else if (!verbose(tcp)) 1635 tprintf("%#lx", tcp->u_arg[1]); 1636 else if (umoven(tcp, tcp->u_arg[1], sizeof(*arg1), (char *) arg1) < 0) 1637 tprintf("???"); 1638 else { 1639 tprintf("{"); 1640 printflags(capabilities, arg1->effective, "CAP_???"); 1641 tprintf(", "); 1642 printflags(capabilities, arg1->permitted, "CAP_???"); 1643 tprintf(", "); 1644 printflags(capabilities, arg1->inheritable, "CAP_???"); 1645 tprintf("}"); 1646 } 1647 } 1648 return 0; 1649 } 1650 1651 int 1652 sys_capset(tcp) 1653 struct tcb *tcp; 1654 { 1655 static cap_user_header_t arg0 = NULL; 1656 static cap_user_data_t arg1 = NULL; 1657 1658 if(entering(tcp)) { 1659 if (!arg0) { 1660 if ((arg0 = malloc(sizeof(*arg0))) == NULL) { 1661 fprintf(stderr, "out of memory\n"); 1662 tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]); 1663 return -1; 1664 } 1665 } 1666 if (!arg1) { 1667 if ((arg1 = malloc(sizeof(*arg1))) == NULL) { 1668 fprintf(stderr, "out of memory\n"); 1669 tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]); 1670 return -1; 1671 } 1672 } 1673 1674 if (!tcp->u_arg[0]) 1675 tprintf("NULL"); 1676 else if (!verbose(tcp)) 1677 tprintf("%#lx", tcp->u_arg[0]); 1678 else if (umoven(tcp, tcp->u_arg[0], sizeof(*arg0), (char *) arg0) < 0) 1679 tprintf("???"); 1680 else { 1681 tprintf("%#x, %d", arg0->version, arg0->pid); 1682 } 1683 tprintf(", "); 1684 if (!tcp->u_arg[1]) 1685 tprintf("NULL"); 1686 else if (!verbose(tcp)) 1687 tprintf("%#lx", tcp->u_arg[1]); 1688 else if (umoven(tcp, tcp->u_arg[1], sizeof(*arg1), (char *) arg1) < 0) 1689 tprintf("???"); 1690 else { 1691 tprintf("{"); 1692 printflags(capabilities, arg1->effective, "CAP_???"); 1693 tprintf(", "); 1694 printflags(capabilities, arg1->permitted, "CAP_???"); 1695 tprintf(", "); 1696 printflags(capabilities, arg1->inheritable, "CAP_???"); 1697 tprintf("}"); 1698 } 1699 } 1700 return 0; 1701 } 1702 1703 #else 1704 1705 int sys_capget(tcp) 1706 struct tcb *tcp; 1707 { 1708 return printargs(tcp); 1709 } 1710 1711 int sys_capset(tcp) 1712 struct tcb *tcp; 1713 { 1714 return printargs(tcp); 1715 } 1716 1717 #endif 1718 1719 #ifdef LINUX 1720 /* Linux 2.6.18+ headers removed CTL_PROC enum. */ 1721 # define CTL_PROC 4 1722 # define CTL_CPU 10 /* older headers lack */ 1723 static const struct xlat sysctl_root[] = { 1724 { CTL_KERN, "CTL_KERN" }, 1725 { CTL_VM, "CTL_VM" }, 1726 { CTL_NET, "CTL_NET" }, 1727 { CTL_PROC, "CTL_PROC" }, 1728 { CTL_FS, "CTL_FS" }, 1729 { CTL_DEBUG, "CTL_DEBUG" }, 1730 { CTL_DEV, "CTL_DEV" }, 1731 { CTL_BUS, "CTL_BUS" }, 1732 { CTL_ABI, "CTL_ABI" }, 1733 { CTL_CPU, "CTL_CPU" }, 1734 { 0, NULL } 1735 }; 1736 1737 static const struct xlat sysctl_kern[] = { 1738 { KERN_OSTYPE, "KERN_OSTYPE" }, 1739 { KERN_OSRELEASE, "KERN_OSRELEASE" }, 1740 { KERN_OSREV, "KERN_OSREV" }, 1741 { KERN_VERSION, "KERN_VERSION" }, 1742 { KERN_SECUREMASK, "KERN_SECUREMASK" }, 1743 { KERN_PROF, "KERN_PROF" }, 1744 { KERN_NODENAME, "KERN_NODENAME" }, 1745 { KERN_DOMAINNAME, "KERN_DOMAINNAME" }, 1746 #ifdef KERN_SECURELVL 1747 { KERN_SECURELVL, "KERN_SECURELVL" }, 1748 #endif 1749 { KERN_PANIC, "KERN_PANIC" }, 1750 #ifdef KERN_REALROOTDEV 1751 { KERN_REALROOTDEV, "KERN_REALROOTDEV" }, 1752 #endif 1753 #ifdef KERN_JAVA_INTERPRETER 1754 { KERN_JAVA_INTERPRETER, "KERN_JAVA_INTERPRETER" }, 1755 #endif 1756 #ifdef KERN_JAVA_APPLETVIEWER 1757 { KERN_JAVA_APPLETVIEWER, "KERN_JAVA_APPLETVIEWER" }, 1758 #endif 1759 { KERN_SPARC_REBOOT, "KERN_SPARC_REBOOT" }, 1760 { KERN_CTLALTDEL, "KERN_CTLALTDEL" }, 1761 { KERN_PRINTK, "KERN_PRINTK" }, 1762 { KERN_NAMETRANS, "KERN_NAMETRANS" }, 1763 { KERN_PPC_HTABRECLAIM, "KERN_PPC_HTABRECLAIM" }, 1764 { KERN_PPC_ZEROPAGED, "KERN_PPC_ZEROPAGED" }, 1765 { KERN_PPC_POWERSAVE_NAP, "KERN_PPC_POWERSAVE_NAP" }, 1766 { KERN_MODPROBE, "KERN_MODPROBE" }, 1767 { KERN_SG_BIG_BUFF, "KERN_SG_BIG_BUFF" }, 1768 { KERN_ACCT, "KERN_ACCT" }, 1769 { KERN_PPC_L2CR, "KERN_PPC_L2CR" }, 1770 { KERN_RTSIGNR, "KERN_RTSIGNR" }, 1771 { KERN_RTSIGMAX, "KERN_RTSIGMAX" }, 1772 { KERN_SHMMAX, "KERN_SHMMAX" }, 1773 { KERN_MSGMAX, "KERN_MSGMAX" }, 1774 { KERN_MSGMNB, "KERN_MSGMNB" }, 1775 { KERN_MSGPOOL, "KERN_MSGPOOL" }, 1776 { 0, NULL } 1777 }; 1778 1779 static const struct xlat sysctl_vm[] = { 1780 #ifdef VM_SWAPCTL 1781 { VM_SWAPCTL, "VM_SWAPCTL" }, 1782 #endif 1783 #ifdef VM_UNUSED1 1784 { VM_UNUSED1, "VM_UNUSED1" }, 1785 #endif 1786 #ifdef VM_SWAPOUT 1787 { VM_SWAPOUT, "VM_SWAPOUT" }, 1788 #endif 1789 #ifdef VM_UNUSED2 1790 { VM_UNUSED2, "VM_UNUSED2" }, 1791 #endif 1792 #ifdef VM_FREEPG 1793 { VM_FREEPG, "VM_FREEPG" }, 1794 #endif 1795 #ifdef VM_UNUSED3 1796 { VM_UNUSED3, "VM_UNUSED3" }, 1797 #endif 1798 #ifdef VM_BDFLUSH 1799 { VM_BDFLUSH, "VM_BDFLUSH" }, 1800 #endif 1801 #ifdef VM_UNUSED4 1802 { VM_UNUSED4, "VM_UNUSED4" }, 1803 #endif 1804 { VM_OVERCOMMIT_MEMORY, "VM_OVERCOMMIT_MEMORY" }, 1805 #ifdef VM_BUFFERMEM 1806 { VM_BUFFERMEM, "VM_BUFFERMEM" }, 1807 #endif 1808 #ifdef VM_UNUSED5 1809 { VM_UNUSED5, "VM_UNUSED5" }, 1810 #endif 1811 #ifdef VM_PAGECACHE 1812 { VM_PAGECACHE, "VM_PAGECACHE" }, 1813 #endif 1814 #ifdef VM_UNUSED7 1815 { VM_UNUSED7, "VM_UNUSED7" }, 1816 #endif 1817 #ifdef VM_PAGERDAEMON 1818 { VM_PAGERDAEMON, "VM_PAGERDAEMON" }, 1819 #endif 1820 #ifdef VM_UNUSED8 1821 { VM_UNUSED8, "VM_UNUSED8" }, 1822 #endif 1823 #ifdef VM_PGT_CACHE 1824 { VM_PGT_CACHE, "VM_PGT_CACHE" }, 1825 #endif 1826 #ifdef VM_UNUSED9 1827 { VM_UNUSED9, "VM_UNUSED9" }, 1828 #endif 1829 { VM_PAGE_CLUSTER, "VM_PAGE_CLUSTER" }, 1830 { 0, NULL }, 1831 }; 1832 1833 static const struct xlat sysctl_net[] = { 1834 { NET_CORE, "NET_CORE" }, 1835 { NET_ETHER, "NET_ETHER" }, 1836 { NET_802, "NET_802" }, 1837 { NET_UNIX, "NET_UNIX" }, 1838 { NET_IPV4, "NET_IPV4" }, 1839 { NET_IPX, "NET_IPX" }, 1840 { NET_ATALK, "NET_ATALK" }, 1841 { NET_NETROM, "NET_NETROM" }, 1842 { NET_AX25, "NET_AX25" }, 1843 { NET_BRIDGE, "NET_BRIDGE" }, 1844 { NET_ROSE, "NET_ROSE" }, 1845 { NET_IPV6, "NET_IPV6" }, 1846 { NET_X25, "NET_X25" }, 1847 { NET_TR, "NET_TR" }, 1848 { NET_DECNET, "NET_DECNET" }, 1849 { 0, NULL } 1850 }; 1851 1852 static const struct xlat sysctl_net_core[] = { 1853 { NET_CORE_WMEM_MAX, "NET_CORE_WMEM_MAX" }, 1854 { NET_CORE_RMEM_MAX, "NET_CORE_RMEM_MAX" }, 1855 { NET_CORE_WMEM_DEFAULT, "NET_CORE_WMEM_DEFAULT" }, 1856 { NET_CORE_RMEM_DEFAULT, "NET_CORE_RMEM_DEFAULT" }, 1857 { NET_CORE_MAX_BACKLOG, "NET_CORE_MAX_BACKLOG" }, 1858 { NET_CORE_FASTROUTE, "NET_CORE_FASTROUTE" }, 1859 { NET_CORE_MSG_COST, "NET_CORE_MSG_COST" }, 1860 { NET_CORE_MSG_BURST, "NET_CORE_MSG_BURST" }, 1861 { NET_CORE_OPTMEM_MAX, "NET_CORE_OPTMEM_MAX" }, 1862 { 0, NULL } 1863 }; 1864 1865 static const struct xlat sysctl_net_unix[] = { 1866 { NET_UNIX_DESTROY_DELAY, "NET_UNIX_DESTROY_DELAY" }, 1867 { NET_UNIX_DELETE_DELAY, "NET_UNIX_DELETE_DELAY" }, 1868 { 0, NULL } 1869 }; 1870 1871 static const struct xlat sysctl_net_ipv4[] = { 1872 { NET_IPV4_FORWARD, "NET_IPV4_FORWARD" }, 1873 { NET_IPV4_DYNADDR, "NET_IPV4_DYNADDR" }, 1874 { NET_IPV4_CONF, "NET_IPV4_CONF" }, 1875 { NET_IPV4_NEIGH, "NET_IPV4_NEIGH" }, 1876 { NET_IPV4_ROUTE, "NET_IPV4_ROUTE" }, 1877 { NET_IPV4_FIB_HASH, "NET_IPV4_FIB_HASH" }, 1878 { NET_IPV4_TCP_TIMESTAMPS, "NET_IPV4_TCP_TIMESTAMPS" }, 1879 { NET_IPV4_TCP_WINDOW_SCALING, "NET_IPV4_TCP_WINDOW_SCALING" }, 1880 { NET_IPV4_TCP_SACK, "NET_IPV4_TCP_SACK" }, 1881 { NET_IPV4_TCP_RETRANS_COLLAPSE, "NET_IPV4_TCP_RETRANS_COLLAPSE" }, 1882 { NET_IPV4_DEFAULT_TTL, "NET_IPV4_DEFAULT_TTL" }, 1883 { NET_IPV4_AUTOCONFIG, "NET_IPV4_AUTOCONFIG" }, 1884 { NET_IPV4_NO_PMTU_DISC, "NET_IPV4_NO_PMTU_DISC" }, 1885 { NET_IPV4_TCP_SYN_RETRIES, "NET_IPV4_TCP_SYN_RETRIES" }, 1886 { NET_IPV4_IPFRAG_HIGH_THRESH, "NET_IPV4_IPFRAG_HIGH_THRESH" }, 1887 { NET_IPV4_IPFRAG_LOW_THRESH, "NET_IPV4_IPFRAG_LOW_THRESH" }, 1888 { NET_IPV4_IPFRAG_TIME, "NET_IPV4_IPFRAG_TIME" }, 1889 { NET_IPV4_TCP_MAX_KA_PROBES, "NET_IPV4_TCP_MAX_KA_PROBES" }, 1890 { NET_IPV4_TCP_KEEPALIVE_TIME, "NET_IPV4_TCP_KEEPALIVE_TIME" }, 1891 { NET_IPV4_TCP_KEEPALIVE_PROBES, "NET_IPV4_TCP_KEEPALIVE_PROBES" }, 1892 { NET_IPV4_TCP_RETRIES1, "NET_IPV4_TCP_RETRIES1" }, 1893 { NET_IPV4_TCP_RETRIES2, "NET_IPV4_TCP_RETRIES2" }, 1894 { NET_IPV4_TCP_FIN_TIMEOUT, "NET_IPV4_TCP_FIN_TIMEOUT" }, 1895 { NET_IPV4_IP_MASQ_DEBUG, "NET_IPV4_IP_MASQ_DEBUG" }, 1896 { NET_TCP_SYNCOOKIES, "NET_TCP_SYNCOOKIES" }, 1897 { NET_TCP_STDURG, "NET_TCP_STDURG" }, 1898 { NET_TCP_RFC1337, "NET_TCP_RFC1337" }, 1899 { NET_TCP_SYN_TAILDROP, "NET_TCP_SYN_TAILDROP" }, 1900 { NET_TCP_MAX_SYN_BACKLOG, "NET_TCP_MAX_SYN_BACKLOG" }, 1901 { NET_IPV4_LOCAL_PORT_RANGE, "NET_IPV4_LOCAL_PORT_RANGE" }, 1902 { NET_IPV4_ICMP_ECHO_IGNORE_ALL, "NET_IPV4_ICMP_ECHO_IGNORE_ALL" }, 1903 { NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, "NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS" }, 1904 { NET_IPV4_ICMP_SOURCEQUENCH_RATE, "NET_IPV4_ICMP_SOURCEQUENCH_RATE" }, 1905 { NET_IPV4_ICMP_DESTUNREACH_RATE, "NET_IPV4_ICMP_DESTUNREACH_RATE" }, 1906 { NET_IPV4_ICMP_TIMEEXCEED_RATE, "NET_IPV4_ICMP_TIMEEXCEED_RATE" }, 1907 { NET_IPV4_ICMP_PARAMPROB_RATE, "NET_IPV4_ICMP_PARAMPROB_RATE" }, 1908 { NET_IPV4_ICMP_ECHOREPLY_RATE, "NET_IPV4_ICMP_ECHOREPLY_RATE" }, 1909 { NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES, "NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES" }, 1910 { NET_IPV4_IGMP_MAX_MEMBERSHIPS, "NET_IPV4_IGMP_MAX_MEMBERSHIPS" }, 1911 { 0, NULL } 1912 }; 1913 1914 static const struct xlat sysctl_net_ipv4_route[] = { 1915 { NET_IPV4_ROUTE_FLUSH, "NET_IPV4_ROUTE_FLUSH" }, 1916 { NET_IPV4_ROUTE_MIN_DELAY, "NET_IPV4_ROUTE_MIN_DELAY" }, 1917 { NET_IPV4_ROUTE_MAX_DELAY, "NET_IPV4_ROUTE_MAX_DELAY" }, 1918 { NET_IPV4_ROUTE_GC_THRESH, "NET_IPV4_ROUTE_GC_THRESH" }, 1919 { NET_IPV4_ROUTE_MAX_SIZE, "NET_IPV4_ROUTE_MAX_SIZE" }, 1920 { NET_IPV4_ROUTE_GC_MIN_INTERVAL, "NET_IPV4_ROUTE_GC_MIN_INTERVAL" }, 1921 { NET_IPV4_ROUTE_GC_TIMEOUT, "NET_IPV4_ROUTE_GC_TIMEOUT" }, 1922 { NET_IPV4_ROUTE_GC_INTERVAL, "NET_IPV4_ROUTE_GC_INTERVAL" }, 1923 { NET_IPV4_ROUTE_REDIRECT_LOAD, "NET_IPV4_ROUTE_REDIRECT_LOAD" }, 1924 { NET_IPV4_ROUTE_REDIRECT_NUMBER, "NET_IPV4_ROUTE_REDIRECT_NUMBER" }, 1925 { NET_IPV4_ROUTE_REDIRECT_SILENCE, "NET_IPV4_ROUTE_REDIRECT_SILENCE" }, 1926 { NET_IPV4_ROUTE_ERROR_COST, "NET_IPV4_ROUTE_ERROR_COST" }, 1927 { NET_IPV4_ROUTE_ERROR_BURST, "NET_IPV4_ROUTE_ERROR_BURST" }, 1928 { NET_IPV4_ROUTE_GC_ELASTICITY, "NET_IPV4_ROUTE_GC_ELASTICITY" }, 1929 { 0, NULL } 1930 }; 1931 1932 static const struct xlat sysctl_net_ipv4_conf[] = { 1933 { NET_IPV4_CONF_FORWARDING, "NET_IPV4_CONF_FORWARDING" }, 1934 { NET_IPV4_CONF_MC_FORWARDING, "NET_IPV4_CONF_MC_FORWARDING" }, 1935 { NET_IPV4_CONF_PROXY_ARP, "NET_IPV4_CONF_PROXY_ARP" }, 1936 { NET_IPV4_CONF_ACCEPT_REDIRECTS, "NET_IPV4_CONF_ACCEPT_REDIRECTS" }, 1937 { NET_IPV4_CONF_SECURE_REDIRECTS, "NET_IPV4_CONF_SECURE_REDIRECTS" }, 1938 { NET_IPV4_CONF_SEND_REDIRECTS, "NET_IPV4_CONF_SEND_REDIRECTS" }, 1939 { NET_IPV4_CONF_SHARED_MEDIA, "NET_IPV4_CONF_SHARED_MEDIA" }, 1940 { NET_IPV4_CONF_RP_FILTER, "NET_IPV4_CONF_RP_FILTER" }, 1941 { NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE, "NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE" }, 1942 { NET_IPV4_CONF_BOOTP_RELAY, "NET_IPV4_CONF_BOOTP_RELAY" }, 1943 { NET_IPV4_CONF_LOG_MARTIANS, "NET_IPV4_CONF_LOG_MARTIANS" }, 1944 { 0, NULL } 1945 }; 1946 1947 static const struct xlat sysctl_net_ipv6[] = { 1948 { NET_IPV6_CONF, "NET_IPV6_CONF" }, 1949 { NET_IPV6_NEIGH, "NET_IPV6_NEIGH" }, 1950 { NET_IPV6_ROUTE, "NET_IPV6_ROUTE" }, 1951 { 0, NULL } 1952 }; 1953 1954 static const struct xlat sysctl_net_ipv6_route[] = { 1955 { NET_IPV6_ROUTE_FLUSH, "NET_IPV6_ROUTE_FLUSH" }, 1956 { NET_IPV6_ROUTE_GC_THRESH, "NET_IPV6_ROUTE_GC_THRESH" }, 1957 { NET_IPV6_ROUTE_MAX_SIZE, "NET_IPV6_ROUTE_MAX_SIZE" }, 1958 { NET_IPV6_ROUTE_GC_MIN_INTERVAL, "NET_IPV6_ROUTE_GC_MIN_INTERVAL" }, 1959 { NET_IPV6_ROUTE_GC_TIMEOUT, "NET_IPV6_ROUTE_GC_TIMEOUT" }, 1960 { NET_IPV6_ROUTE_GC_INTERVAL, "NET_IPV6_ROUTE_GC_INTERVAL" }, 1961 { NET_IPV6_ROUTE_GC_ELASTICITY, "NET_IPV6_ROUTE_GC_ELASTICITY" }, 1962 { 0, NULL } 1963 }; 1964 1965 int 1966 sys_sysctl(tcp) 1967 struct tcb *tcp; 1968 { 1969 struct __sysctl_args info; 1970 int *name; 1971 unsigned long size; 1972 1973 if (umove (tcp, tcp->u_arg[0], &info) < 0) 1974 return printargs(tcp); 1975 1976 size = sizeof (int) * (unsigned long) info.nlen; 1977 name = (size / sizeof (int) != info.nlen) ? NULL : malloc (size); 1978 if (name == NULL || 1979 umoven(tcp, (unsigned long) info.name, size, (char *) name) < 0) { 1980 free(name); 1981 if (entering(tcp)) 1982 tprintf("{%p, %d, %p, %p, %p, %Zu}", 1983 info.name, info.nlen, info.oldval, 1984 info.oldlenp, info.newval, info.newlen); 1985 return 0; 1986 } 1987 1988 if (entering(tcp)) { 1989 int cnt = 0, max_cnt; 1990 1991 tprintf("{{"); 1992 1993 if (info.nlen == 0) 1994 goto out; 1995 printxval(sysctl_root, name[0], "CTL_???"); 1996 ++cnt; 1997 1998 if (info.nlen == 1) 1999 goto out; 2000 switch (name[0]) { 2001 case CTL_KERN: 2002 tprintf(", "); 2003 printxval(sysctl_kern, name[1], "KERN_???"); 2004 ++cnt; 2005 break; 2006 case CTL_VM: 2007 tprintf(", "); 2008 printxval(sysctl_vm, name[1], "VM_???"); 2009 ++cnt; 2010 break; 2011 case CTL_NET: 2012 tprintf(", "); 2013 printxval(sysctl_net, name[1], "NET_???"); 2014 ++cnt; 2015 2016 if (info.nlen == 2) 2017 goto out; 2018 switch (name[1]) { 2019 case NET_CORE: 2020 tprintf(", "); 2021 printxval(sysctl_net_core, name[2], 2022 "NET_CORE_???"); 2023 break; 2024 case NET_UNIX: 2025 tprintf(", "); 2026 printxval(sysctl_net_unix, name[2], 2027 "NET_UNIX_???"); 2028 break; 2029 case NET_IPV4: 2030 tprintf(", "); 2031 printxval(sysctl_net_ipv4, name[2], 2032 "NET_IPV4_???"); 2033 2034 if (info.nlen == 3) 2035 goto out; 2036 switch (name[2]) { 2037 case NET_IPV4_ROUTE: 2038 tprintf(", "); 2039 printxval(sysctl_net_ipv4_route, 2040 name[3], 2041 "NET_IPV4_ROUTE_???"); 2042 break; 2043 case NET_IPV4_CONF: 2044 tprintf(", "); 2045 printxval(sysctl_net_ipv4_conf, 2046 name[3], 2047 "NET_IPV4_CONF_???"); 2048 break; 2049 default: 2050 goto out; 2051 } 2052 break; 2053 case NET_IPV6: 2054 tprintf(", "); 2055 printxval(sysctl_net_ipv6, name[2], 2056 "NET_IPV6_???"); 2057 2058 if (info.nlen == 3) 2059 goto out; 2060 switch (name[2]) { 2061 case NET_IPV6_ROUTE: 2062 tprintf(", "); 2063 printxval(sysctl_net_ipv6_route, 2064 name[3], 2065 "NET_IPV6_ROUTE_???"); 2066 break; 2067 default: 2068 goto out; 2069 } 2070 break; 2071 default: 2072 goto out; 2073 } 2074 break; 2075 default: 2076 goto out; 2077 } 2078 out: 2079 max_cnt = info.nlen; 2080 if (abbrev(tcp) && max_cnt > max_strlen) 2081 max_cnt = max_strlen; 2082 while (cnt < max_cnt) 2083 tprintf(", %x", name[cnt++]); 2084 if (cnt < info.nlen) 2085 tprintf(", ..."); 2086 tprintf("}, %d, ", info.nlen); 2087 } else { 2088 size_t oldlen; 2089 if (umove(tcp, (size_t)info.oldlenp, &oldlen) >= 0 2090 && info.nlen >= 2 2091 && ((name[0] == CTL_KERN 2092 && (name[1] == KERN_OSRELEASE 2093 || name[1] == KERN_OSTYPE 2094 #ifdef KERN_JAVA_INTERPRETER 2095 || name[1] == KERN_JAVA_INTERPRETER 2096 #endif 2097 #ifdef KERN_JAVA_APPLETVIEWER 2098 || name[1] == KERN_JAVA_APPLETVIEWER 2099 #endif 2100 )))) { 2101 printpath(tcp, (size_t)info.oldval); 2102 tprintf(", %Zu, ", oldlen); 2103 if (info.newval == 0) 2104 tprintf("NULL"); 2105 else if (syserror(tcp)) 2106 tprintf("%p", info.newval); 2107 else 2108 printpath(tcp, (size_t)info.newval); 2109 tprintf(", %Zd", info.newlen); 2110 } else { 2111 tprintf("%p, %Zd, %p, %Zd", info.oldval, oldlen, 2112 info.newval, info.newlen); 2113 } 2114 tprintf("}"); 2115 } 2116 2117 free(name); 2118 return 0; 2119 } 2120 #else 2121 int sys_sysctl(tcp) 2122 struct tcb *tcp; 2123 { 2124 return printargs(tcp); 2125 } 2126 #endif 2127 2128 #ifdef FREEBSD 2129 #include <sys/sysctl.h> 2130 2131 int sys___sysctl(tcp) 2132 struct tcb *tcp; 2133 { 2134 int qoid[CTL_MAXNAME+2]; 2135 char ctl[1024]; 2136 size_t len; 2137 int i, numeric; 2138 2139 if (entering(tcp)) { 2140 if (tcp->u_arg[1] < 0 || tcp->u_arg[1] > CTL_MAXNAME || 2141 (umoven(tcp, tcp->u_arg[0], tcp->u_arg[1] * sizeof(int), 2142 (char *) (qoid + 2)) < 0)) 2143 tprintf("[...], "); 2144 else { 2145 /* Use sysctl to ask the name of the current MIB 2146 This uses the undocumented "Staff-functions" used 2147 by the sysctl program. See kern_sysctl.c for 2148 details. */ 2149 qoid[0] = 0; /* sysctl */ 2150 qoid[1] = 1; /* name */ 2151 i = sizeof(ctl); 2152 tprintf("["); 2153 if (sysctl(qoid, tcp->u_arg[1] + 2, ctl, &i, 0, 0) >= 0) { 2154 numeric = !abbrev(tcp); 2155 tprintf("%s%s", ctl, numeric ? ", " : ""); 2156 } else 2157 numeric = 1; 2158 if (numeric) { 2159 for (i = 0; i < tcp->u_arg[1]; i++) 2160 tprintf("%s%d", i ? "." : "", qoid[i + 2]); 2161 } 2162 tprintf("], "); 2163 tprintf("%lu, ", tcp->u_arg[1]); 2164 } 2165 } else { 2166 if (!syserror(tcp) && (umove(tcp, tcp->u_arg[3], &len) >= 0)) { 2167 printstr(tcp, tcp->u_arg[2], len); 2168 tprintf(", [%u], ", len); 2169 } else 2170 tprintf("%#lx, %#lx, ", tcp->u_arg[2], tcp->u_arg[3]); 2171 printstr(tcp, tcp->u_arg[4], tcp->u_arg[5]); 2172 tprintf(", %lu", tcp->u_arg[5]); 2173 } 2174 return 0; 2175 } 2176 #endif 2177 2178 #if UNIXWARE >= 2 2179 2180 #include <sys/ksym.h> 2181 #include <sys/elf.h> 2182 2183 static const struct xlat ksym_flags[] = { 2184 { STT_NOTYPE, "STT_NOTYPE" }, 2185 { STT_FUNC, "STT_FUNC" }, 2186 { STT_OBJECT, "STT_OBJECT" }, 2187 { 0, NULL }, 2188 }; 2189 2190 int 2191 sys_getksym(tcp) 2192 struct tcb *tcp; 2193 { 2194 if (entering (tcp)) { 2195 printstr(tcp, tcp->u_arg[0], -1); 2196 tprintf(", "); 2197 } 2198 else { 2199 if (syserror(tcp)) { 2200 tprintf("%#lx, %#lx", 2201 tcp->u_arg[1], tcp->u_arg[2]); 2202 } 2203 else { 2204 int val; 2205 printnum (tcp, tcp->u_arg[1], "%#lx"); 2206 tprintf(", "); 2207 if (umove(tcp, tcp->u_arg[2], &val) < 0) { 2208 tprintf("%#lx", tcp->u_arg[2]); 2209 } 2210 else { 2211 tprintf("["); 2212 printxval (ksym_flags, val, "STT_???"); 2213 tprintf("]"); 2214 } 2215 } 2216 } 2217 2218 return 0; 2219 } 2220 2221 #ifdef HAVE_SYS_NSCSYS_H 2222 2223 struct cred; 2224 #include <sys/nscsys.h> 2225 2226 static const struct xlat ssi_cmd [] = { 2227 { SSISYS_BADOP, "SSISYS_BADOP" }, 2228 { SSISYS_LDLVL_INIT,"SSISYS_LDLVL_INIT"}, 2229 { SSISYS_LDLVL_GETVEC,"SSISYS_LDLVL_GETVEC"}, 2230 { SSISYS_LDLVL_PUTVEC,"SSISYS_LDLVL_PUTVEC"}, 2231 { SSISYS_LDLVL_PUTRCMDS,"SSISYS_LDLVL_PUTRCMDS"}, 2232 { SSISYS_LDLVL_SETREXEC,"SSISYS_LDLVL_SETREXEC"}, 2233 { SSISYS_CMS_CLUSTERID,"SSISYS_CMS_CLUSTERID"}, 2234 { SSISYS_CFS_STATVFS,"SSISYS_CFS_STATVFS"}, 2235 { SSISYS_NODE_GETNUM,"SSISYS_NODE_GETNUM"}, 2236 { SSISYS_NODE_TABLE,"SSISYS_NODE_TABLE"}, 2237 { SSISYS_NODE_DOWN,"SSISYS_NODE_DOWN"}, 2238 { SSISYS_RECLAIM_CHILD,"SSISYS_RECLAIM_CHILD"}, 2239 { SSISYS_IPC_GETINFO,"SSISYS_IPC_GETINFO"}, 2240 { SSISYS_ICS_TEST,"SSISYS_ICS_TEST"}, 2241 { SSISYS_NODE_PID,"SSISYS_NODE_PID"}, 2242 { SSISYS_ISLOCAL,"SSISYS_ISLOCAL"}, 2243 { SSISYS_CFS_ISSTACKED,"SSISYS_CFS_ISSTACKED"}, 2244 { SSISYS_DNET_SYNC,"SSISYS_DNET_SYNC"}, 2245 { SSISYS_CFS_WAIT_MODE,"SSISYS_CFS_WAIT_MODE"}, 2246 { SSISYS_CFS_UMOUNT,"SSISYS_CFS_UMOUNT"}, 2247 { SSISYS_LLSTAT,"SSISYS_LLSTAT" }, 2248 { SSISYS_LTS_PERFTEST,"SSISYS_LTS_PERFTEST"}, 2249 { SSISYS_LTS_CONFIG,"SSISYS_LTS_CONFIG"}, 2250 { SSISYS_SNET_PERFTEST,"SSISYS_SNET_PERFTEST"}, 2251 { SSISYS_IGNORE_HALFUP,"SSISYS_IGNORE_HALFUP"}, 2252 { SSISYS_NODE_ROOTDEV,"SSISYS_NODE_ROOTDEV"}, 2253 { SSISYS_GET_PRIMARY,"SSISYS_GET_PRIMARY"}, 2254 { SSISYS_GET_SECONDARY,"SSISYS_GET_SECONDARY"}, 2255 { SSISYS_GET_ROOTDISK,"SSISYS_GET_ROOTDISK"}, 2256 { SSISYS_CLUSTERNODE_NUM,"SSISYS_CLUSTERNODE_NUM"}, 2257 { SSISYS_CLUSTER_MEMBERSHIP,"SSISYS_CLUSTER_MEMBERSHIP"}, 2258 { SSISYS_CLUSTER_DETAILEDTRANS,"SSISYS_CLUSTER_DETAILEDTRANS"}, 2259 { SSISYS_CLUSTERNODE_INFO,"SSISYS_CLUSTERNODE_INFO"}, 2260 { SSISYS_CLUSTERNODE_SETINFO,"SSISYS_CLUSTERNODE_SETINFO"}, 2261 { SSISYS_CLUSTERNODE_AVAIL,"SSISYS_CLUSTERNODE_AVAIL"}, 2262 { SSISYS_CLUSTER_MAXNODES,"SSISYS_CLUSTER_MAXNODES"}, 2263 { SSISYS_SET_MEMPRIO,"SSISYS_SET_MEMPRIO"}, 2264 { SSISYS_GET_USERS,"SSISYS_GET_USERS"}, 2265 { SSISYS_FORCE_ROOT_NODE,"SSISYS_FORCE_ROOT_NODE"}, 2266 { SSISYS_CVIP_SET,"SSISYS_CVIP_SET"}, 2267 { SSISYS_CVIP_GET,"SSISYS_CVIP_GET"}, 2268 { SSISYS_GET_NODE_COUNTS,"SSISYS_GET_NODE_COUNTS"}, 2269 { SSISYS_GET_TRANSPORT,"SSISYS_GET_TRANSPORT"}, 2270 { 0, NULL }, 2271 }; 2272 2273 int sys_ssisys (tcp) 2274 struct tcb *tcp; 2275 { 2276 struct ssisys_iovec iov; 2277 cls_nodeinfo_args_t cni; 2278 clusternode_info_t info; 2279 2280 if (entering (tcp)) { 2281 ts_reclaim_child_inargs_t trc; 2282 if (tcp->u_arg[1] != sizeof iov || 2283 umove (tcp, tcp->u_arg[0], &iov) < 0) 2284 { 2285 tprintf ("%#lx, %ld", tcp->u_arg[0], tcp->u_arg[1]); 2286 return 0; 2287 } 2288 tprintf ("{id="); 2289 printxval(ssi_cmd, iov.tio_id.id_cmd, "SSISYS_???"); 2290 tprintf (":%d", iov.tio_id.id_ver); 2291 switch (iov.tio_id.id_cmd) { 2292 case SSISYS_RECLAIM_CHILD: 2293 if (iov.tio_udatainlen != sizeof trc || 2294 umove (tcp, (long) iov.tio_udatain, &trc) < 0) 2295 goto bad; 2296 tprintf (", in={pid=%ld, start=%ld}", 2297 trc.trc_pid, trc.trc_start); 2298 break; 2299 case SSISYS_CLUSTERNODE_INFO: 2300 if (iov.tio_udatainlen != sizeof cni || 2301 umove (tcp, (long) iov.tio_udatain, &cni) < 0) 2302 goto bad; 2303 tprintf (", in={node=%ld, len=%d}", 2304 cni.nodenum, cni.info_len); 2305 break; 2306 default: 2307 bad: 2308 if (iov.tio_udatainlen) { 2309 tprintf (", in=[/* %d bytes */]", 2310 iov.tio_udatainlen); 2311 } 2312 } 2313 } 2314 else { 2315 if (tcp->u_arg[1] != sizeof iov || 2316 umove (tcp, tcp->u_arg[0], &iov) < 0) 2317 goto done; 2318 switch (iov.tio_id.id_cmd) { 2319 case SSISYS_CLUSTERNODE_INFO: 2320 if (iov.tio_udatainlen != sizeof cni || 2321 umove (tcp, (long) iov.tio_udatain, &cni) < 0) 2322 goto bad_out; 2323 if (cni.info_len != sizeof info || 2324 iov.tio_udataoutlen != sizeof &info || 2325 umove (tcp, (long) iov.tio_udataout, &info) < 0) 2326 goto bad_out; 2327 tprintf (", out={node=%ld, cpus=%d, online=%d}", 2328 info.node_num, info.node_totalcpus, 2329 info.node_onlinecpus); 2330 break; 2331 2332 default: 2333 bad_out: 2334 if (iov.tio_udataoutlen) { 2335 tprintf (", out=[/* %d bytes */]", 2336 iov.tio_udataoutlen); 2337 } 2338 } 2339 done: 2340 tprintf ("}, %ld", tcp->u_arg[1]); 2341 } 2342 return 0; 2343 } 2344 2345 #endif 2346 2347 #endif /* UNIXWARE > 2 */ 2348 2349 #ifdef MIPS 2350 2351 #ifndef __NEW_UTS_LEN 2352 #define __NEW_UTS_LEN 64 2353 #endif 2354 2355 static const struct xlat sysmips_operations[] = { 2356 { SETNAME, "SETNAME" }, 2357 { FLUSH_CACHE, "FLUSH_CACHE" }, 2358 { MIPS_FIXADE, "MIPS_FIXADE" }, 2359 { MIPS_RDNVRAM, "MIPS_RDNVRAM" }, 2360 { MIPS_ATOMIC_SET, "MIPS_ATOMIC_SET" }, 2361 { 0, NULL } 2362 }; 2363 2364 int sys_sysmips(tcp) 2365 struct tcb *tcp; 2366 { 2367 if (entering(tcp)) { 2368 printxval(sysmips_operations, tcp->u_arg[0], "???"); 2369 if (!verbose(tcp)) { 2370 tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); 2371 } else if (tcp->u_arg[0]==SETNAME) { 2372 char nodename[__NEW_UTS_LEN + 1]; 2373 if (umovestr(tcp, tcp->u_arg[1], (__NEW_UTS_LEN + 1), nodename) < 0) 2374 tprintf(", %#lx", tcp->u_arg[1]); 2375 else 2376 tprintf(", \"%s\"", nodename); 2377 } else if (tcp->u_arg[0] == MIPS_ATOMIC_SET) { 2378 tprintf(", %#lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]); 2379 } else if (tcp->u_arg[0] == MIPS_FIXADE) { 2380 tprintf(", 0x%lx", tcp->u_arg[1]); 2381 } else { 2382 tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); 2383 } 2384 } 2385 2386 return 0; 2387 } 2388 2389 #endif /* MIPS */ 2390