home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / rfs / part5 < prev    next >
Encoding:
Internet Message Format  |  1986-11-30  |  60.1 KB

  1. Subject: RFS: remote file system (part 5 of 7)
  2. Newsgroups: mod.sources
  3. Approved: jpn@panda.UUCP
  4.  
  5. Mod.sources:  Volume 3, Issue 81
  6. Submitted by: tektronix!tekcrl!toddb
  7.  
  8. #!/bin/sh
  9. #
  10. # RFS, a kernel-resident remote file system.  Shar 5 of 7
  11. #
  12. #
  13. # This is a shell archive, meaning:
  14. # 1. Remove everything above the #!/bin/sh line.
  15. # 2. Save the resulting text in a file.
  16. # 3. Execute the file with /bin/sh (not csh) to create the files:
  17. #    remote/usr.sys.PYR2.5/h/errno.h.diff
  18. #    remote/usr.sys.VAX4.2/h/param.h.diff
  19. #    remote/usr.sys.VAX4.3/h/param.h.diff
  20. #    remote/usr.sys.PYR2.5/h/param.h.diff
  21. #    remote/usr.sys.PYR2.5/h/user.h.diff
  22. #    remote/usr.sys.PYR2.5/sys
  23. #    remote/usr.sys.PYR2.5/sys/init_sysent.c.diff
  24. #    remote/usr.sys.PYR2.5/sys/kern_exec.c.diff
  25. #    remote/usr.sys.PYR2.5/sys/kern_exit.c.diff
  26. #    remote/usr.sys.PYR2.5/sys/kern_trap.c.diff
  27. #    remote/usr.sys.PYR2.5/sys/sys_inode.c.diff
  28. #    remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff
  29. #    remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff
  30. #    remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff
  31. #    remote/usr.sys.VAX4.2
  32. #    remote/usr.sys.VAX4.2/conf
  33. #    remote/usr.sys.VAX4.3/conf/files.diff
  34. #    remote/usr.sys.VAX4.2/conf/files.diff
  35. #    remote/usr.sys.VAX4.2/conf/makefile.vax.diff
  36. #    remote/usr.sys.VAX4.2/h
  37. #    remote/usr.sys.VAX4.3/h/errno.h.diff
  38. #    remote/usr.sys.VAX4.2/h/errno.h.diff
  39. #    remote/usr.sys.VAX4.2/h/user.h.diff
  40. #    remote/usr.sys.VAX4.2/machine
  41. #    remote/usr.sys.VAX4.2/machine/trap.c.diff
  42. #    remote/usr.sys.VAX4.2/sys
  43. #    remote/usr.sys.VAX4.2/sys/init_sysent.c.diff
  44. #    remote/usr.sys.VAX4.2/sys/kern_exec.c.diff
  45. #    remote/usr.sys.VAX4.2/sys/kern_exit.c.diff
  46. #    remote/usr.sys.VAX4.2/sys/sys_inode.c.diff
  47. #    remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff
  48. #    remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff
  49. #    remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff
  50. #    remote/usr.sys.VAX4.3
  51. #    remote/usr.sys.VAX4.3/conf
  52. #    remote/usr.sys.VAX4.3/conf/Makefile.vax.diff
  53. #    remote/usr.sys.VAX4.3/conf/makefile.vax.diff
  54. #    remote/usr.sys.VAX4.3/h
  55. #    remote/usr.sys.VAX4.3/h/user.h.diff
  56. #    remote/usr.sys.VAX4.3/machine
  57. #    remote/usr.sys.VAX4.3/machine/trap.c.diff
  58. #    remote/usr.sys.VAX4.3/sys
  59. #    remote/usr.sys.VAX4.3/sys/init_sysent.c.diff
  60. #
  61. # remote/usr.sys.PYR2.5/sys
  62. #
  63. mkdir remote/usr.sys.PYR2.5/sys
  64. chmod 775 remote/usr.sys.PYR2.5/sys
  65. #
  66. # remote/usr.sys.VAX4.2
  67. #
  68. mkdir remote/usr.sys.VAX4.2
  69. chmod 775 remote/usr.sys.VAX4.2
  70. #
  71. # remote/usr.sys.VAX4.2/conf
  72. #
  73. mkdir remote/usr.sys.VAX4.2/conf
  74. chmod 775 remote/usr.sys.VAX4.2/conf
  75. #
  76. # remote/usr.sys.VAX4.2/h
  77. #
  78. mkdir remote/usr.sys.VAX4.2/h
  79. chmod 775 remote/usr.sys.VAX4.2/h
  80. #
  81. # remote/usr.sys.VAX4.2/machine
  82. #
  83. mkdir remote/usr.sys.VAX4.2/machine
  84. chmod 775 remote/usr.sys.VAX4.2/machine
  85. #
  86. # remote/usr.sys.VAX4.2/sys
  87. #
  88. mkdir remote/usr.sys.VAX4.2/sys
  89. chmod 775 remote/usr.sys.VAX4.2/sys
  90. #
  91. # remote/usr.sys.VAX4.3
  92. #
  93. mkdir remote/usr.sys.VAX4.3
  94. chmod 775 remote/usr.sys.VAX4.3
  95. #
  96. # remote/usr.sys.VAX4.3/conf
  97. #
  98. mkdir remote/usr.sys.VAX4.3/conf
  99. chmod 775 remote/usr.sys.VAX4.3/conf
  100. #
  101. # remote/usr.sys.VAX4.3/h
  102. #
  103. mkdir remote/usr.sys.VAX4.3/h
  104. chmod 775 remote/usr.sys.VAX4.3/h
  105. #
  106. # remote/usr.sys.VAX4.3/machine
  107. #
  108. mkdir remote/usr.sys.VAX4.3/machine
  109. chmod 775 remote/usr.sys.VAX4.3/machine
  110. #
  111. # remote/usr.sys.VAX4.3/sys
  112. #
  113. mkdir remote/usr.sys.VAX4.3/sys
  114. chmod 775 remote/usr.sys.VAX4.3/sys
  115. #
  116. # remote/usr.sys.PYR2.5/h/errno.h.diff
  117. #
  118. if [ -f remote/usr.sys.PYR2.5/h/errno.h.diff ]; then 
  119.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/h/errno.h.diff or ^C to quit' 
  120.     read ans 
  121.     rm -f remote/usr.sys.PYR2.5/h/errno.h.diff 
  122. fi 
  123.  
  124. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/h/errno.h.diff
  125. XThese changes add three new error numbers for the sake of RFS.
  126. X***************
  127. X*** 90,95
  128. X  #define    EUSERS        68        /* Too many users */
  129. X  #define    EDQUOT        69        /* Disc quota exceeded */
  130. X  
  131. X  
  132. X  /*-----------------System V unique errno's----------------------*/
  133. X  #define    ENOMSG    100    /* No message of desired type        */
  134. X
  135. X--- 90,99 -----
  136. X  #define    EUSERS        68        /* Too many users */
  137. X  #define    EDQUOT        69        /* Disc quota exceeded */
  138. X  
  139. X+ /* remote fs stuff */
  140. X+ #define EISREMOTE    70        /* file is on a remote system */
  141. X+ #define ETOOMANYREMOTE    71        /* too many remote file systems */
  142. X+ #define    ENOREMOTEFS    72        /* no remote file system */
  143. X  
  144. X  /*-----------------System V unique errno's----------------------*/
  145. X  #define    ENOMSG    100    /* No message of desired type        */
  146. SHAREOF
  147. chmod 664 remote/usr.sys.PYR2.5/h/errno.h.diff
  148. #
  149. # remote/usr.sys.PYR2.5/h/param.h.diff
  150. #
  151. if [ -f remote/usr.sys.PYR2.5/h/param.h.diff ]; then 
  152.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/h/param.h.diff or ^C to quit' 
  153.     read ans 
  154.     rm -f remote/usr.sys.PYR2.5/h/param.h.diff 
  155. fi 
  156.  
  157. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/h/param.h.diff
  158. XThis addition defines NREMOTE, the number of remote mount points.
  159. X***************
  160. X*** 26,27
  161. X   * Machine-independent constants
  162. X   */
  163. X
  164. X--- 26,30 -----
  165. X   * Machine-independent constants
  166. X   */
  167. X+ #ifdef REMOTEFS
  168. X+ #define    NREMOTE    8        /* number of remote file systems */
  169. X+ #endif REMOTEFS
  170. SHAREOF
  171. chmod 664 remote/usr.sys.PYR2.5/h/param.h.diff
  172. if [ -f remote/usr.sys.VAX4.2/h/param.h.diff ]; then 
  173.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/h/param.h.diff or ^C to quit' 
  174.     read ans 
  175.     rm -rf remote/usr.sys.VAX4.2/h/param.h.diff 
  176. fi
  177. ln remote/usr.sys.PYR2.5/h/param.h.diff remote/usr.sys.VAX4.2/h/param.h.diff
  178. if [ -f remote/usr.sys.VAX4.3/h/param.h.diff ]; then 
  179.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/h/param.h.diff or ^C to quit' 
  180.     read ans 
  181.     rm -rf remote/usr.sys.VAX4.3/h/param.h.diff 
  182. fi
  183. ln remote/usr.sys.PYR2.5/h/param.h.diff remote/usr.sys.VAX4.3/h/param.h.diff
  184. #
  185. # remote/usr.sys.PYR2.5/h/user.h.diff
  186. #
  187. if [ -f remote/usr.sys.PYR2.5/h/user.h.diff ]; then 
  188.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/h/user.h.diff or ^C to quit' 
  189.     read ans 
  190.     rm -f remote/usr.sys.PYR2.5/h/user.h.diff 
  191. fi 
  192.  
  193. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/h/user.h.diff
  194. XThese changes keep track of the per-process RFS information.
  195. X***************
  196. X*** 169,174
  197. X          dev_t nc_dev;        /* dev of cached directory */
  198. X          time_t nc_time;        /* time stamp for cache entry */
  199. X      } u_ncache;
  200. X      int    u_stack[1];
  201. X  };
  202. X  
  203. X
  204. X--- 169,184 -----
  205. X          dev_t nc_dev;        /* dev of cached directory */
  206. X          time_t nc_time;        /* time stamp for cache entry */
  207. X      } u_ncache;
  208. X+ #ifdef REMOTEFS
  209. X+     short    u_rmtoffset[2];        /* path offset for local segment */
  210. X+     short    u_rmtcdir;        /* system # of remote current dir */
  211. X+     long    u_rmtsys;        /* room for 32 systems */
  212. X+                     /* one bit for each remote system */
  213. X+ #ifdef pyr /* Pyramid */
  214. X+     int    u_ap;
  215. X+ #define        u_arg    u_ap
  216. X+ #endif pyr
  217. X+ #endif REMOTEFS
  218. X      int    u_stack[1];
  219. X  };
  220. X  
  221. SHAREOF
  222. chmod 664 remote/usr.sys.PYR2.5/h/user.h.diff
  223. #
  224. # remote/usr.sys.PYR2.5/sys/init_sysent.c.diff
  225. #
  226. if [ -f remote/usr.sys.PYR2.5/sys/init_sysent.c.diff ]; then 
  227.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/init_sysent.c.diff or ^C to quit' 
  228.     read ans 
  229.     rm -f remote/usr.sys.PYR2.5/sys/init_sysent.c.diff 
  230. fi 
  231.  
  232. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/init_sysent.c.diff
  233. XThese two changes add in the new RFS systems calls, remoteon(), remoteoff()
  234. Xand  remotename().  If the second hunk fails, then you have some system
  235. Xcall numbers that are not in standard Pyramid 2.5.
  236. X***************
  237. X*** 124,129
  238. X   */
  239. X  int    setuniverse(), ugetcsbase();
  240. X  
  241. X  /* BEGIN JUNK */
  242. X  int    profil();        /* 'cuz sys calls are interruptible */
  243. X  int    vhangup();        /* should just do in exit() */
  244. X
  245. X--- 124,138 -----
  246. X   */
  247. X  int    setuniverse(), ugetcsbase();
  248. X  
  249. X+ #ifdef REMOTEFS
  250. X+ /*
  251. X+  * remote file sys stuff (toddb@du)
  252. X+  */
  253. X+ int    remoteon(),
  254. X+     remoteoff(),
  255. X+     remotename();
  256. X+ #endif REMOTEFS
  257. X+ 
  258. X  /* BEGIN JUNK */
  259. X  int    profil();        /* 'cuz sys calls are interruptible */
  260. X  int    vhangup();        /* should just do in exit() */
  261. X***************
  262. X*** 324,329
  263. X  #endif NSA
  264. X      { setprocesshost, 1},    /* 166 = setprocesshost */
  265. X      { getprocesshost, 1},    /* 167 = getprocesshost */
  266. X  };
  267. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  268. X  
  269. X
  270. X--- 333,347 -----
  271. X  #endif NSA
  272. X      { setprocesshost, 1},    /* 166 = setprocesshost */
  273. X      { getprocesshost, 1},    /* 167 = getprocesshost */
  274. X+ #ifdef REMOTEFS
  275. X+     { remoteon, 4 },    /* 168 = remoteon */
  276. X+     { remoteoff, 1 },    /* 169 = remoteoff */
  277. X+     { remotename, 5 },    /* 170 = remotename */
  278. X+ #else REMOTEFS
  279. X+     { nosys, 0},        /* 168 = reserved for REMOTEFS */
  280. X+     { nosys, 0},        /* 169 = reserved for REMOTEFS */
  281. X+     { nosys, 0},        /* 170 = reserved for REMOTEFS */
  282. X+ #endif REMOTEFS
  283. X  };
  284. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  285. X  
  286. SHAREOF
  287. chmod 664 remote/usr.sys.PYR2.5/sys/init_sysent.c.diff
  288. #
  289. # remote/usr.sys.PYR2.5/sys/kern_exec.c.diff
  290. #
  291. if [ -f remote/usr.sys.PYR2.5/sys/kern_exec.c.diff ]; then 
  292.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/kern_exec.c.diff or ^C to quit' 
  293.     read ans 
  294.     rm -f remote/usr.sys.PYR2.5/sys/kern_exec.c.diff 
  295. fi 
  296.  
  297. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/kern_exec.c.diff
  298. XThe following changes implement local execution of an object file that
  299. Xlives on another host.
  300. X***************
  301. X*** 58,63
  302. X  #include "../h/cmap.h"
  303. X  #include "../h/vmmac.h"
  304. X  #include "../h/debug.h"
  305. X  
  306. X  int  *swapstack();
  307. X  
  308. X
  309. X--- 58,69 -----
  310. X  #include "../h/cmap.h"
  311. X  #include "../h/vmmac.h"
  312. X  #include "../h/debug.h"
  313. X+ #ifdef REMOTEFS
  314. X+ /*
  315. X+  * needed only if EISREMOTE isn't in /usr/include/errno.h
  316. X+  */
  317. X+ #include "../h/errno.h"
  318. X+ #endif REMOTEFS
  319. X  
  320. X  int  *swapstack();
  321. X  
  322. X***************
  323. X*** 76,81
  324. X      register char *cp;
  325. X      register struct buf *bp;
  326. X      register int na, ne, ucp, ap, c, i;
  327. X      register int indir, uid, gid;
  328. X      register char *sharg;
  329. X      register struct inode *ip;
  330. X
  331. X--- 82,93 -----
  332. X      register char *cp;
  333. X      register struct buf *bp;
  334. X      register int na, ne, ucp, ap, c, i;
  335. X+ #ifdef REMOTEFS
  336. X+     register int indir;
  337. X+     int uid, gid; /* have to take address */
  338. X+     struct inode *ip; /* have to take address */
  339. X+     int    remote = -1;
  340. X+ #else REMOTEFS
  341. X      register int indir, uid, gid;
  342. X      register struct inode *ip;
  343. X  #endif REMOTEFS
  344. X***************
  345. X*** 77,83
  346. X      register struct buf *bp;
  347. X      register int na, ne, ucp, ap, c, i;
  348. X      register int indir, uid, gid;
  349. X-     register char *sharg;
  350. X      register struct inode *ip;
  351. X      register swblk_t bno;
  352. X      char cfname[MAXNAMLEN + 1];
  353. X
  354. X--- 89,94 -----
  355. X      int    remote = -1;
  356. X  #else REMOTEFS
  357. X      register int indir, uid, gid;
  358. X      register struct inode *ip;
  359. X  #endif REMOTEFS
  360. X      register char *sharg;
  361. X***************
  362. X*** 79,84
  363. X      register int indir, uid, gid;
  364. X      register char *sharg;
  365. X      register struct inode *ip;
  366. X      register swblk_t bno;
  367. X      char cfname[MAXNAMLEN + 1];
  368. X      char cfarg[SHSIZE];
  369. X
  370. X--- 90,97 -----
  371. X  #else REMOTEFS
  372. X      register int indir, uid, gid;
  373. X      register struct inode *ip;
  374. X+ #endif REMOTEFS
  375. X+     register char *sharg;
  376. X      register swblk_t bno;
  377. X      char cfname[MAXNAMLEN + 1];
  378. X      char cfarg[SHSIZE];
  379. X***************
  380. X*** 105,110
  381. X   *    (7) do a ret
  382. X   */
  383. X      if ((ip = namei(uchar, LOOKUP, 1)) == NULL)
  384. X          return;
  385. X      sysVinfo.sV_sysexec++;
  386. X      bno = 0;
  387. X
  388. X--- 118,128 -----
  389. X   *    (7) do a ret
  390. X   */
  391. X      if ((ip = namei(uchar, LOOKUP, 1)) == NULL)
  392. X+ #ifdef REMOTEFS
  393. X+         if (u.u_error == EISREMOTE)
  394. X+             remote = remote_execinfo(&ip, &uid, &gid, fname);
  395. X+     if (u.u_error)
  396. X+ #endif REMOTEFS
  397. X          return;
  398. X      sysVinfo.sV_sysexec++;
  399. X      bno = 0;
  400. X***************
  401. X*** 110,115
  402. X      bno = 0;
  403. X      bp = 0;
  404. X      indir = 0;
  405. X      uid = u.u_uid;
  406. X      gid = u.u_gid;
  407. X      if (ip->i_mode & ISUID)
  408. X
  409. X--- 128,136 -----
  410. X      bno = 0;
  411. X      bp = 0;
  412. X      indir = 0;
  413. X+ #ifdef REMOTEFS
  414. X+ if (remote < 0) {
  415. X+ #endif REMOTEFS
  416. X      uid = u.u_uid;
  417. X      gid = u.u_gid;
  418. X      if (ip->i_mode & ISUID)
  419. X***************
  420. X*** 148,153
  421. X      if (u.u_error)
  422. X          goto bad;
  423. X      u.u_count = resid;
  424. X  #ifndef lint
  425. X      if (resid > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) &&
  426. X          u.u_exdata.ux_shell[0] != '#') {
  427. X
  428. X--- 169,180 -----
  429. X      if (u.u_error)
  430. X          goto bad;
  431. X      u.u_count = resid;
  432. X+ #ifdef REMOTEFS
  433. X+ }
  434. X+ 
  435. X+ remote_again:
  436. X+ 
  437. X+ #endif REMOTEFS
  438. X  #ifndef lint
  439. X      if (resid > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) &&
  440. X          u.u_exdata.ux_shell[0] != '#') {
  441. X***************
  442. X*** 224,229
  443. X              (unsigned)(u.u_dent.d_namlen + 1));
  444. X          cfname[MAXCOMLEN] = 0;
  445. X          indir = 1;
  446. X          iput(ip);
  447. X          /* Security hole fix: don't allow SUID-root exec'able
  448. X             scripts whose name starts with '-'.... allows
  449. X
  450. X--- 251,259 -----
  451. X              (unsigned)(u.u_dent.d_namlen + 1));
  452. X          cfname[MAXCOMLEN] = 0;
  453. X          indir = 1;
  454. X+ #ifdef REMOTEFS
  455. X+         if (remote < 0)
  456. X+ #endif REMOTEFS
  457. X          iput(ip);
  458. X          /* Security hole fix: don't allow SUID-root exec'able
  459. X             scripts whose name starts with '-'.... allows
  460. X***************
  461. X*** 233,238
  462. X              return;
  463. X          }
  464. X          ip = namei(schar, LOOKUP, 1);
  465. X          if (ip == NULL)
  466. X              return;
  467. X          goto again;
  468. X
  469. X--- 263,280 -----
  470. X              return;
  471. X          }
  472. X          ip = namei(schar, LOOKUP, 1);
  473. X+ #ifdef REMOTEFS
  474. X+         if (ip == NULL) {
  475. X+             if (u.u_error == EISREMOTE)
  476. X+                 remote = remote_execinfo(&ip, 0, 0, 0);
  477. X+             if (u.u_error)
  478. X+                 return;
  479. X+             if (ip == NULL)
  480. X+                 goto remote_again;
  481. X+         }
  482. X+         else
  483. X+             remote = -1;
  484. X+ #else REMOTEFS
  485. X          if (ip == NULL)
  486. X              return;
  487. X  #endif REMOTEFS
  488. X***************
  489. X*** 235,240
  490. X          ip = namei(schar, LOOKUP, 1);
  491. X          if (ip == NULL)
  492. X              return;
  493. X          goto again;
  494. X      }
  495. X  
  496. X
  497. X--- 277,283 -----
  498. X  #else REMOTEFS
  499. X          if (ip == NULL)
  500. X              return;
  501. X+ #endif REMOTEFS
  502. X          goto again;
  503. X      }
  504. X  
  505. X***************
  506. X*** 332,337
  507. X          bcopy((caddr_t)cfname, (caddr_t)u.u_dent.d_name,
  508. X              (unsigned)(u.u_dent.d_namlen + 1));
  509. X      }
  510. X      getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid);
  511. X      if (u.u_error) {
  512. X  badarg:
  513. X
  514. X--- 375,383 -----
  515. X          bcopy((caddr_t)cfname, (caddr_t)u.u_dent.d_name,
  516. X              (unsigned)(u.u_dent.d_namlen + 1));
  517. X      }
  518. X+ #ifdef REMOTEFS
  519. X+     getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid, remote);
  520. X+ #else REMOTEFS
  521. X      getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid);
  522. X  #endif REMOTEFS
  523. X      if (u.u_error) {
  524. X***************
  525. X*** 333,338
  526. X              (unsigned)(u.u_dent.d_namlen + 1));
  527. X      }
  528. X      getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid);
  529. X      if (u.u_error) {
  530. X  badarg:
  531. X          for (c = 0; c < nc; c += CLSIZE*PAGSIZ) {
  532. X
  533. X--- 379,385 -----
  534. X      getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid, remote);
  535. X  #else REMOTEFS
  536. X      getxfile(ip, (int)(nc + (na+4)*NBPW), uid, gid);
  537. X+ #endif REMOTEFS
  538. X      if (u.u_error) {
  539. X  badarg:
  540. X          for (c = 0; c < nc; c += CLSIZE*PAGSIZ) {
  541. X***************
  542. X*** 627,632
  543. X   * Set up page tables and other structures for the process to be
  544. X   * executed, and read in from the file.
  545. X   */
  546. X  getxfile(ip, nargc, uid, gid)
  547. X      register struct inode *ip;
  548. X  {
  549. X
  550. X--- 674,682 -----
  551. X   * Set up page tables and other structures for the process to be
  552. X   * executed, and read in from the file.
  553. X   */
  554. X+ #ifdef REMOTEFS
  555. X+ getxfile(ip, nargc, uid, gid, remote)
  556. X+ #else REMOTEFS
  557. X  getxfile(ip, nargc, uid, gid)
  558. X  #endif REMOTEFS
  559. X      register struct inode *ip;
  560. X***************
  561. X*** 628,633
  562. X   * executed, and read in from the file.
  563. X   */
  564. X  getxfile(ip, nargc, uid, gid)
  565. X      register struct inode *ip;
  566. X  {
  567. X      register size_t ts, ds, uss, css;
  568. X
  569. X--- 678,684 -----
  570. X  getxfile(ip, nargc, uid, gid, remote)
  571. X  #else REMOTEFS
  572. X  getxfile(ip, nargc, uid, gid)
  573. X+ #endif REMOTEFS
  574. X      register struct inode *ip;
  575. X  {
  576. X      register size_t ts, ds, uss, css;
  577. X***************
  578. X*** 632,637
  579. X  {
  580. X      register size_t ts, ds, uss, css;
  581. X      register int pagi;
  582. X      register struct proc *p;
  583. X      register struct file *fp;
  584. X      register int flag;        /* used to keep proc flags */
  585. X
  586. X--- 683,691 -----
  587. X  {
  588. X      register size_t ts, ds, uss, css;
  589. X      register int pagi;
  590. X+ #ifdef REMOTEFS
  591. X+     register int    oldtextsize;
  592. X+ #endif REMOTEFS
  593. X      register struct proc *p;
  594. X      register struct file *fp;
  595. X      register int flag;        /* used to keep proc flags */
  596. X***************
  597. X*** 650,655
  598. X          pagi = SPAGI;
  599. X      else
  600. X          pagi = 0;
  601. X      if (u.u_exdata.ux_tsize!=0 && (ip->i_xflag&ITEXTFILE)==0 &&
  602. X                          ip->i_count!=1) {
  603. X          SPINLOCK(&file_lock);
  604. X
  605. X--- 704,720 -----
  606. X          pagi = SPAGI;
  607. X      else
  608. X          pagi = 0;
  609. X+ #ifdef REMOTEFS
  610. X+     if (remote >= 0) {
  611. X+         /*
  612. X+          * Prevent xalloc() from making a shared or paged text.
  613. X+          */
  614. X+         pagi = 0;
  615. X+         oldtextsize = u.u_exdata.ux_tsize;
  616. X+         u.u_exdata.ux_dsize += u.u_exdata.ux_tsize;
  617. X+         u.u_exdata.ux_tsize = 0;
  618. X+     }
  619. X+ #endif REMOTEFS
  620. X      if (u.u_exdata.ux_tsize!=0 && (ip->i_xflag&ITEXTFILE)==0 &&
  621. X                          ip->i_count!=1) {
  622. X          SPINLOCK(&file_lock);
  623. X***************
  624. X*** 802,807
  625. X       * Read in the data segment if we are not going to page in this
  626. X       * process.
  627. X       */
  628. X      if (pagi == 0) {
  629. X          u.u_error =
  630. X              rdwri(UIO_READ, ip,
  631. X
  632. X--- 867,877 -----
  633. X       * Read in the data segment if we are not going to page in this
  634. X       * process.
  635. X       */
  636. X+ #ifdef REMOTEFS
  637. X+     if (remote >= 0)
  638. X+         u.u_error = remote_execread(remote, oldtextsize);
  639. X+     else
  640. X+ #endif REMOTEFS
  641. X      if (pagi == 0) {
  642. X          u.u_error =
  643. X              rdwri(UIO_READ, ip,
  644. SHAREOF
  645. chmod 664 remote/usr.sys.PYR2.5/sys/kern_exec.c.diff
  646. #
  647. # remote/usr.sys.PYR2.5/sys/kern_exit.c.diff
  648. #
  649. if [ -f remote/usr.sys.PYR2.5/sys/kern_exit.c.diff ]; then 
  650.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/kern_exit.c.diff or ^C to quit' 
  651.     read ans 
  652.     rm -f remote/usr.sys.PYR2.5/sys/kern_exit.c.diff 
  653. fi 
  654.  
  655. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/kern_exit.c.diff
  656. XThe following changes ensure that upon exit, a process notifies any remote
  657. Xservers that may know about him, that he is indeed dead.
  658. X***************
  659. X*** 59,64
  660. X  #include "../h/quota.h"
  661. X  #include "../h/cmap.h"
  662. X  #include "../h/text.h"
  663. X  
  664. X  /*
  665. X   * Exit system call: pass back caller's arg
  666. X
  667. X--- 59,67 -----
  668. X  #include "../h/quota.h"
  669. X  #include "../h/cmap.h"
  670. X  #include "../h/text.h"
  671. X+ #ifdef REMOTEFS
  672. X+ #include "../remote/remotefs.h"
  673. X+ #endif REMOTEFS
  674. X  
  675. X  /*
  676. X   * Exit system call: pass back caller's arg
  677. X***************
  678. X*** 99,104
  679. X      vmsizmon();
  680. X  #endif
  681. X      p = u.u_procp;
  682. X  
  683. X      gpid = p->p_gpid;
  684. X      /*
  685. X
  686. X--- 102,114 -----
  687. X      vmsizmon();
  688. X  #endif
  689. X      p = u.u_procp;
  690. X+ #ifdef REMOTEFS
  691. X+     /*
  692. X+      * First, release our server.
  693. X+      */
  694. X+     if (p->p_flag & SREMOTE)
  695. X+         remote_exit();
  696. X+ #endif REMOTEFS
  697. X  
  698. X      gpid = p->p_gpid;
  699. X      /*
  700. SHAREOF
  701. chmod 664 remote/usr.sys.PYR2.5/sys/kern_exit.c.diff
  702. #
  703. # remote/usr.sys.PYR2.5/sys/kern_trap.c.diff
  704. #
  705. if [ -f remote/usr.sys.PYR2.5/sys/kern_trap.c.diff ]; then 
  706.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/kern_trap.c.diff or ^C to quit' 
  707.     read ans 
  708.     rm -f remote/usr.sys.PYR2.5/sys/kern_trap.c.diff 
  709. fi 
  710.  
  711. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/kern_trap.c.diff
  712. XThese changes enable syscall() to start up a remote version of a system
  713. Xcall if the normal system call fails with error == EISREMOTE.
  714. X***************
  715. X*** 47,52
  716. X  #include "../h/vmmac.h"
  717. X  #include "../h/vmmeter.h"
  718. X  #include "../h/debug.h"
  719. X  
  720. X  extern int kernstrt;
  721. X  #define    USER    040        /* user-mode flag added to type */
  722. X
  723. X--- 47,59 -----
  724. X  #include "../h/vmmac.h"
  725. X  #include "../h/vmmeter.h"
  726. X  #include "../h/debug.h"
  727. X+ #ifdef REMOTEFS
  728. X+ #include "../remote/remotefs.h"
  729. X+ /*
  730. X+  * needed only if EISREMOTE isn't in /usr/include/errno.h
  731. X+  */
  732. X+ #include "../h/errno.h"
  733. X+ #endif REMOTEFS
  734. X  
  735. X  extern int kernstrt;
  736. X  #define    USER    040        /* user-mode flag added to type */
  737. X***************
  738. X*** 395,400
  739. X      register long syst_sec, syst_usec;
  740. X      register int s;
  741. X      register int onslave = 0;
  742. X  
  743. X      SETGR9();    /* for dual cpu, put mastercpu into gr9 */
  744. X      spl0();        /* move up to system base priority level */
  745. X
  746. X--- 402,411 -----
  747. X      register long syst_sec, syst_usec;
  748. X      register int s;
  749. X      register int onslave = 0;
  750. X+ #ifdef REMOTEFS
  751. X+     extern u_char remote_sysmap[];
  752. X+     register int rmt_syscall, runremote, rmtcalled, rmtcnt;
  753. X+ #endif REMOTEFS
  754. X  
  755. X      SETGR9();    /* for dual cpu, put mastercpu into gr9 */
  756. X      spl0();        /* move up to system base priority level */
  757. X***************
  758. X*** 418,424
  759. X          if (u.u_error == 0 && u.u_eosys == JUSTRETURN)
  760. X              u.u_error = EINTR;
  761. X      } else {
  762. X!         (*(callproc->sy_call))(arg1, arg2, arg3, arg4, arg5, arg6);
  763. X      }
  764. X  
  765. X      if (u.u_eosys != RESTARTSYS)
  766. X
  767. X--- 429,461 -----
  768. X          if (u.u_error == 0 && u.u_eosys == JUSTRETURN)
  769. X              u.u_error = EINTR;
  770. X      } else {
  771. X! #ifdef REMOTEFS
  772. X!         if (index < 512) {
  773. X!             rmt_syscall = remote_sysmap[ index ];
  774. X!             rmtcalled = FALSE;
  775. X!             rmtcnt = 0;
  776. X! 
  777. X!             u.u_eosys = JUSTRETURN;
  778. X!             while (! rmtcalled) {
  779. X!                 runremote = (rmt_syscall != RSYS_nosys
  780. X!                         && u.u_procp->p_flag & SREMOTE);
  781. X!                 if (runremote)
  782. X!                     rmtcalled = remote_startup(rmtcnt,
  783. X!                         rmt_syscall, arg1, arg2, arg3,
  784. X!                         arg4, arg5, arg6);
  785. X!                 if (! rmtcalled) {
  786. X!                     (*callproc->sy_call)(arg1, arg2, arg3,
  787. X!                         arg4, arg5, arg6);
  788. X!                     if (u.u_error != EISREMOTE)
  789. X!                         rmtcalled = TRUE;
  790. X!                     else
  791. X!                         rmtcnt++;
  792. X!                 }
  793. X!             }
  794. X!         } else
  795. X! #endif REMOTEFS
  796. X!             (*(callproc->sy_call))(arg1, arg2, arg3,
  797. X!                 arg4, arg5, arg6);
  798. X      }
  799. X  
  800. X      if (u.u_eosys != RESTARTSYS)
  801. SHAREOF
  802. chmod 664 remote/usr.sys.PYR2.5/sys/kern_trap.c.diff
  803. #
  804. # remote/usr.sys.PYR2.5/sys/sys_inode.c.diff
  805. #
  806. if [ -f remote/usr.sys.PYR2.5/sys/sys_inode.c.diff ]; then 
  807.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/sys_inode.c.diff or ^C to quit' 
  808.     read ans 
  809.     rm -f remote/usr.sys.PYR2.5/sys/sys_inode.c.diff 
  810. fi 
  811.  
  812. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/sys_inode.c.diff
  813. XThis change repairs a semantic change in ino_close() that assumes
  814. Xthe only other file descriptor type is DTYPE_SOCKET.  If patch tells
  815. Xyou
  816. X    Reversed (or previously applied) patch detected!
  817. XThen you already have the fix and you must undo what patch does.
  818. X***************
  819. X*** 516,522
  820. X      for (ffp = file; ffp < fileNFILE; ffp++) {
  821. X          if (ffp == fp)
  822. X              continue;
  823. X!         if (ffp->f_type == DTYPE_SOCKET)        /* XXX */
  824. X              continue;
  825. X          if (ffp->f_count && (ip = (struct inode *)ffp->f_data) &&
  826. X              ip->i_rdev == dev && (ip->i_mode&IFMT) == mode)
  827. X
  828. X--- 516,522 -----
  829. X      for (ffp = file; ffp < fileNFILE; ffp++) {
  830. X          if (ffp == fp)
  831. X              continue;
  832. X!         if (ffp->f_type != DTYPE_INODE)    /* semantic fix (toddb@du) */
  833. X              continue;
  834. X          if (ffp->f_count && (ip = (struct inode *)ffp->f_data) &&
  835. X              ip->i_rdev == dev && (ip->i_mode&IFMT) == mode)
  836. SHAREOF
  837. chmod 664 remote/usr.sys.PYR2.5/sys/sys_inode.c.diff
  838. #
  839. # remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff
  840. #
  841. if [ -f remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff ]; then 
  842.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff or ^C to quit' 
  843.     read ans 
  844.     rm -f remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff 
  845. fi 
  846.  
  847. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff
  848. XThese changes are the primary hook into the operating system for detecting
  849. Xa "remote" file.
  850. X***************
  851. X*** 145,150
  852. X      unsigned hash;            /* value of name hash for entry */
  853. X      union nchash *nhp;        /* cache chain head for entry */
  854. X      int isdotdot;            /* != 0 if current name is ".." */
  855. X  
  856. X      sysVinfo.sV_namei++;
  857. X      lockparent = flag & LOCKPARENT;
  858. X
  859. X--- 145,153 -----
  860. X      unsigned hash;            /* value of name hash for entry */
  861. X      union nchash *nhp;        /* cache chain head for entry */
  862. X      int isdotdot;            /* != 0 if current name is ".." */
  863. X+ #ifdef REMOTEFS
  864. X+     long    remote;
  865. X+ #endif REMOTEFS
  866. X  
  867. X      sysVinfo.sV_namei++;
  868. X      lockparent = flag & LOCKPARENT;
  869. X***************
  870. X*** 189,194
  871. X       * Check accessiblity of directory.
  872. X       */
  873. X      if ((dp->i_mode&IFMT) != IFDIR) {
  874. X          u.u_error = ENOTDIR;
  875. X          goto bad;
  876. X      }
  877. X
  878. X--- 192,214 -----
  879. X       * Check accessiblity of directory.
  880. X       */
  881. X      if ((dp->i_mode&IFMT) != IFDIR) {
  882. X+ #ifdef REMOTEFS
  883. X+         remote = isremote(dp, cp, nbp->b_un.b_addr);
  884. X+ 
  885. X+         /*
  886. X+          * If it is really local, then start again at the root.
  887. X+          */
  888. X+         if (remote < 0) {
  889. X+             iput(dp);
  890. X+             dp = rootdir;
  891. X+             ilockx(dp);
  892. X+             dp->i_count++;
  893. X+             fs = dp->i_fs;
  894. X+             cp = nbp->b_un.b_addr;
  895. X+             goto dirloop2;
  896. X+         }
  897. X+         else if (! remote)
  898. X+ #endif REMOTEFS
  899. X          u.u_error = ENOTDIR;
  900. X          goto bad;
  901. X      }
  902. X***************
  903. X*** 604,609
  904. X                      u.u_error = EPERM;
  905. X                      goto bad;
  906. X                  }
  907. X              }
  908. X          }
  909. X  #ifdef NSA
  910. X
  911. X--- 624,640 -----
  912. X                      u.u_error = EPERM;
  913. X                      goto bad;
  914. X                  }
  915. X+ #ifdef REMOTEFS
  916. X+                 /*
  917. X+                  * don't allow anyone to remove a remote mount
  918. X+                  * point.
  919. X+                  */
  920. X+                 if (rmt_host(dp, &i)) {
  921. X+                     iput(u.u_pdir);
  922. X+                     u.u_error = EBUSY;
  923. X+                     goto bad;
  924. X+                 }
  925. X+ #endif REMOTEFS
  926. X              }
  927. X          }
  928. X  #ifdef NSA
  929. X***************
  930. X*** 786,791
  931. X  
  932. X          if (len + pathlen >= MAXPATHLEN - 1 ||
  933. X              ++nlink > MAXSYMLINKS) {
  934. X              u.u_error = ELOOP;
  935. X              goto bad2;
  936. X          }
  937. X
  938. X--- 817,824 -----
  939. X  
  940. X          if (len + pathlen >= MAXPATHLEN - 1 ||
  941. X              ++nlink > MAXSYMLINKS) {
  942. X+             printf("nlink=%d,len=%d,pathlen=%d:LOOP\n",
  943. X+                 nlink, len, pathlen);
  944. X              u.u_error = ELOOP;
  945. X              goto bad2;
  946. X          }
  947. SHAREOF
  948. chmod 664 remote/usr.sys.PYR2.5/sys/ufs_nami.c.diff
  949. #
  950. # remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff
  951. #
  952. if [ -f remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff ]; then 
  953.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff or ^C to quit' 
  954.     read ans 
  955.     rm -f remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff 
  956. fi 
  957.  
  958. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff
  959. XThese changes modify chdirec(), which is called by chroot() and chdir(),
  960. Xso that you can be allowed to do a chdir() to a remote mount point.
  961. XIn addition, the changes ensure that we adjust internal pointers when doing
  962. Xa chdir() OUT of a remote mount point.
  963. X***************
  964. X*** 104,109
  965. X      register struct inode **ipp;
  966. X  {
  967. X      register struct inode *ip;
  968. X  
  969. X      ip = namei(uchar, LOOKUP, 1);
  970. X      if (ip == NULL)
  971. X
  972. X--- 104,112 -----
  973. X      register struct inode **ipp;
  974. X  {
  975. X      register struct inode *ip;
  976. X+ #ifdef REMOTEFS
  977. X+     int    i;
  978. X+ #endif REMOTEFS
  979. X  
  980. X      ip = namei(uchar, LOOKUP, 1);
  981. X      if (ip == NULL)
  982. X***************
  983. X*** 109,114
  984. X      if (ip == NULL)
  985. X          return;
  986. X      if ((ip->i_mode&IFMT) != IFDIR) {
  987. X          u.u_error = ENOTDIR;
  988. X          goto bad;
  989. X      }
  990. X
  991. X--- 112,123 -----
  992. X      if (ip == NULL)
  993. X          return;
  994. X      if ((ip->i_mode&IFMT) != IFDIR) {
  995. X+ #ifdef REMOTEFS
  996. X+         if (rmt_hostdir(ip, &i) != NULL)
  997. X+             u.u_error = remotechdir(i);
  998. X+         else
  999. X+             u.u_error = ENOTDIR;
  1000. X+ #else REMOTEFS
  1001. X          u.u_error = ENOTDIR;
  1002. X  #endif REMOTEFS
  1003. X          goto bad;
  1004. X***************
  1005. X*** 110,115
  1006. X          return;
  1007. X      if ((ip->i_mode&IFMT) != IFDIR) {
  1008. X          u.u_error = ENOTDIR;
  1009. X          goto bad;
  1010. X      }
  1011. X      if (access(ip, IEXEC))
  1012. X
  1013. X--- 119,125 -----
  1014. X              u.u_error = ENOTDIR;
  1015. X  #else REMOTEFS
  1016. X          u.u_error = ENOTDIR;
  1017. X+ #endif REMOTEFS
  1018. X          goto bad;
  1019. X      }
  1020. X      if (access(ip, IEXEC))
  1021. X***************
  1022. X*** 114,119
  1023. X      }
  1024. X      if (access(ip, IEXEC))
  1025. X          goto bad;
  1026. X      iunlock(ip);
  1027. X      if (*ipp)
  1028. X          irele(*ipp);
  1029. X
  1030. X--- 124,132 -----
  1031. X      }
  1032. X      if (access(ip, IEXEC))
  1033. X          goto bad;
  1034. X+ #ifdef REMOTEFS
  1035. X+     remotechdir(-1);
  1036. X+ #endif REMOTEFS
  1037. X      iunlock(ip);
  1038. X      if (*ipp)
  1039. X          irele(*ipp);
  1040. SHAREOF
  1041. chmod 664 remote/usr.sys.PYR2.5/sys/ufs_syscalls.c.diff
  1042. #
  1043. # remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff
  1044. #
  1045. if [ -f remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff ]; then 
  1046.     echo -n 'Hit <return> to overwrite remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff or ^C to quit' 
  1047.     read ans 
  1048.     rm -f remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff 
  1049. fi 
  1050.  
  1051. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff
  1052. XThese changes Fix a bug in soreceive() that caused infinite loop if a
  1053. Xpacket was received while doing uiomove() and the MSG_PEEK flag was set.
  1054. XIf you have this fix, then patch will tell you:
  1055. X
  1056. X        Reversed (or previously applied) patch detected!
  1057. X
  1058. XIf it does, you should just reinstall your original uipc_socket.c.
  1059. XIf you have a different version of the fix or another modification that
  1060. Xaffects this code, then patch will tell you that "Hunk #1 failed"; you
  1061. Xmust install the patch by hand.
  1062. X***************
  1063. X*** 659,665
  1064. X          error =
  1065. X              uiomove(mtod(m, caddr_t) + moff, (int)len, UIO_READ, uio);
  1066. X          s = splnet();
  1067. X!         if (len == m->m_len) {
  1068. X              eor = (int)m->m_act;
  1069. X              if (flags & MSG_PEEK)
  1070. X                  m = m->m_next;
  1071. X
  1072. X--- 659,665 -----
  1073. X          error =
  1074. X              uiomove(mtod(m, caddr_t) + moff, (int)len, UIO_READ, uio);
  1075. X          s = splnet();
  1076. X!         if (moff+len == m->m_len) { /* infinite loop fix (toddb@du) */
  1077. X              eor = (int)m->m_act;
  1078. X              if (flags & MSG_PEEK)
  1079. X                  m = m->m_next;
  1080. SHAREOF
  1081. chmod 664 remote/usr.sys.PYR2.5/sys/uipc_socket.c.diff
  1082. #
  1083. # remote/usr.sys.VAX4.2/conf/files.diff
  1084. #
  1085. if [ -f remote/usr.sys.VAX4.2/conf/files.diff ]; then 
  1086.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/conf/files.diff or ^C to quit' 
  1087.     read ans 
  1088.     rm -f remote/usr.sys.VAX4.2/conf/files.diff 
  1089. fi 
  1090.  
  1091. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/conf/files.diff
  1092. XThe files added here identify the RFS source code.
  1093. X***************
  1094. X*** 107,108
  1095. X  sys/vm_swp.c        standard
  1096. X  sys/vm_text.c        standard
  1097. X
  1098. X--- 107,118 -----
  1099. X  sys/vm_swp.c        standard
  1100. X  sys/vm_text.c        standard
  1101. X+ remote/rmt_data.c    optional remotefs
  1102. X+ remote/rmt_exec.c    optional remotefs
  1103. X+ remote/rmt_final.c    optional remotefs
  1104. X+ remote/rmt_general.c    optional remotefs
  1105. X+ remote/rmt_generic.c    optional remotefs
  1106. X+ remote/rmt_io.c        optional remotefs
  1107. X+ remote/rmt_subr.c    optional remotefs
  1108. X+ remote/rmt_syscall1.c    optional remotefs
  1109. X+ remote/rmt_syscall2.c    optional remotefs
  1110. X+ remote/rmt_syscall3.c    optional remotefs
  1111. SHAREOF
  1112. chmod 664 remote/usr.sys.VAX4.2/conf/files.diff
  1113. if [ -f remote/usr.sys.VAX4.3/conf/files.diff ]; then 
  1114.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/conf/files.diff or ^C to quit' 
  1115.     read ans 
  1116.     rm -rf remote/usr.sys.VAX4.3/conf/files.diff 
  1117. fi
  1118. ln remote/usr.sys.VAX4.2/conf/files.diff remote/usr.sys.VAX4.3/conf/files.diff
  1119. #
  1120. # remote/usr.sys.VAX4.2/conf/makefile.vax.diff
  1121. #
  1122. if [ -f remote/usr.sys.VAX4.2/conf/makefile.vax.diff ]; then 
  1123.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/conf/makefile.vax.diff or ^C to quit' 
  1124.     read ans 
  1125.     rm -f remote/usr.sys.VAX4.2/conf/makefile.vax.diff 
  1126. fi 
  1127.  
  1128. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/conf/makefile.vax.diff
  1129. XThis change teaches the makefile how to make rmt_data.c from
  1130. X../remote/remotefs.h, ../remote/rmt_data_template and ../sys/init_sysent.c.
  1131. X***************
  1132. X*** 166,168
  1133. X  
  1134. X  %RULES
  1135. X  
  1136. X
  1137. X--- 166,175 -----
  1138. X  
  1139. X+ ../remote/rmt_data.c: ../remote/rmt_data_template ../remote/remotefs.h \
  1140. X+     ../sys/init_sysent.c
  1141. X+     cat ../remote/rmt_data_template > ../remote/nrmt_data.c
  1142. X+     /lib/cpp ${CFLAGS} ../sys/init_sysent.c | sh ../remote/remote_mkdata \
  1143. X+         ../remote/remotefs.h >> ../remote/nrmt_data.c
  1144. X+     mv ../remote/nrmt_data.c ../remote/rmt_data.c
  1145. X+ 
  1146. X  %RULES
  1147. X  
  1148. SHAREOF
  1149. chmod 664 remote/usr.sys.VAX4.2/conf/makefile.vax.diff
  1150. #
  1151. # remote/usr.sys.VAX4.2/h/errno.h.diff
  1152. #
  1153. if [ -f remote/usr.sys.VAX4.2/h/errno.h.diff ]; then 
  1154.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/h/errno.h.diff or ^C to quit' 
  1155.     read ans 
  1156.     rm -f remote/usr.sys.VAX4.2/h/errno.h.diff 
  1157. fi 
  1158.  
  1159. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/h/errno.h.diff
  1160. XThese changes add three new error numbers for the sake of RFS.
  1161. X***************
  1162. X*** 94,96
  1163. X  #define    EPROCLIM    67        /* Too many processes */
  1164. X  #define    EUSERS        68        /* Too many users */
  1165. X  #define    EDQUOT        69        /* Disc quota exceeded */
  1166. X
  1167. X--- 94,101 -----
  1168. X  #define    EPROCLIM    67        /* Too many processes */
  1169. X  #define    EUSERS        68        /* Too many users */
  1170. X  #define    EDQUOT        69        /* Disc quota exceeded */
  1171. X+ 
  1172. X+ /* remote fs stuff */
  1173. X+ #define EISREMOTE    70        /* file is on a remote system */
  1174. X+ #define ETOOMANYREMOTE    71        /* too many remote file systems */
  1175. X+ #define    ENOREMOTEFS    72        /* no remote file system */
  1176. SHAREOF
  1177. chmod 664 remote/usr.sys.VAX4.2/h/errno.h.diff
  1178. if [ -f remote/usr.sys.VAX4.3/h/errno.h.diff ]; then 
  1179.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/h/errno.h.diff or ^C to quit' 
  1180.     read ans 
  1181.     rm -rf remote/usr.sys.VAX4.3/h/errno.h.diff 
  1182. fi
  1183. ln remote/usr.sys.VAX4.2/h/errno.h.diff remote/usr.sys.VAX4.3/h/errno.h.diff
  1184. #
  1185. # remote/usr.sys.VAX4.2/h/user.h.diff
  1186. #
  1187. if [ -f remote/usr.sys.VAX4.2/h/user.h.diff ]; then 
  1188.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/h/user.h.diff or ^C to quit' 
  1189.     read ans 
  1190.     rm -f remote/usr.sys.VAX4.2/h/user.h.diff 
  1191. fi 
  1192.  
  1193. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/h/user.h.diff
  1194. XThese changes keep track of the per-process RFS information.
  1195. X***************
  1196. X*** 140,145
  1197. X          unsigned pr_off;    /* pc offset */
  1198. X          unsigned pr_scale;    /* pc scaling */
  1199. X      } u_prof;
  1200. X      int    u_stack[1];
  1201. X  };
  1202. X  
  1203. X
  1204. X--- 140,155 -----
  1205. X          unsigned pr_off;    /* pc offset */
  1206. X          unsigned pr_scale;    /* pc scaling */
  1207. X      } u_prof;
  1208. X+ #ifdef REMOTEFS
  1209. X+     short    u_rmtoffset[2];        /* path offset for local segment */
  1210. X+     short    u_rmtcdir;        /* system # of remote current dir */
  1211. X+     long    u_rmtsys;        /* room for 32 systems */
  1212. X+                     /* one bit for each remote system */
  1213. X+ #ifdef pyr /* Pyramid */
  1214. X+     int    *u.u_ap;
  1215. X+ #define        u_arg    u_ap
  1216. X+ #endif pyr
  1217. X+ #endif REMOTEFS
  1218. X      int    u_stack[1];
  1219. X  };
  1220. X  
  1221. SHAREOF
  1222. chmod 664 remote/usr.sys.VAX4.2/h/user.h.diff
  1223. #
  1224. # remote/usr.sys.VAX4.2/machine/trap.c.diff
  1225. #
  1226. if [ -f remote/usr.sys.VAX4.2/machine/trap.c.diff ]; then 
  1227.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/machine/trap.c.diff or ^C to quit' 
  1228.     read ans 
  1229.     rm -f remote/usr.sys.VAX4.2/machine/trap.c.diff 
  1230. fi 
  1231.  
  1232. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/machine/trap.c.diff
  1233. XThese changes enable syscall() to start up a remote version of a system
  1234. Xcall if the normal system call fails with error == EISREMOTE.
  1235. X***************
  1236. X*** 25,30
  1237. X  #ifdef SYSCALLTRACE
  1238. X  #include "../sys/syscalls.c"
  1239. X  #endif
  1240. X  
  1241. X  #include "../vax/mtpr.h"
  1242. X  
  1243. X
  1244. X--- 25,37 -----
  1245. X  #ifdef SYSCALLTRACE
  1246. X  #include "../sys/syscalls.c"
  1247. X  #endif
  1248. X+ #ifdef REMOTEFS
  1249. X+ #include "../remote/remotefs.h"
  1250. X+ /*
  1251. X+  * needed only if EISREMOTE isn't in /usr/include/errno.h
  1252. X+  */
  1253. X+ #include "../h/errno.h"
  1254. X+ #endif REMOTEFS
  1255. X  
  1256. X  #include "../vax/mtpr.h"
  1257. X  
  1258. X***************
  1259. X*** 193,198
  1260. X      register struct proc *p;
  1261. X      int opc;
  1262. X      struct timeval syst;
  1263. X  
  1264. X      syst = u.u_ru.ru_stime;
  1265. X      if (!USERMODE(locr0[PS]))
  1266. X
  1267. X--- 200,214 -----
  1268. X      register struct proc *p;
  1269. X      int opc;
  1270. X      struct timeval syst;
  1271. X+ #ifdef REMOTEFS
  1272. X+     /*
  1273. X+      * It is imperative that these declarations come after other register
  1274. X+      * declarations, because the (standard) code below depends upon the
  1275. X+      * order of allocation.
  1276. X+      */
  1277. X+     extern u_char remote_sysmap[];
  1278. X+     register long rmt_syscall, runremote, rmt_called, rmt_cnt;
  1279. X+ #endif REMOTEFS
  1280. X  
  1281. X      syst = u.u_ru.ru_stime;
  1282. X      if (!USERMODE(locr0[PS]))
  1283. X***************
  1284. X*** 233,238
  1285. X          if (u.u_error == 0 && u.u_eosys == JUSTRETURN)
  1286. X              u.u_error = EINTR;
  1287. X      } else {
  1288. X          u.u_eosys = JUSTRETURN;
  1289. X  #ifdef SYSCALLTRACE
  1290. X          if (syscalltrace) {
  1291. X
  1292. X--- 249,258 -----
  1293. X          if (u.u_error == 0 && u.u_eosys == JUSTRETURN)
  1294. X              u.u_error = EINTR;
  1295. X      } else {
  1296. X+ #ifdef REMOTEFS
  1297. X+         rmt_syscall = remote_sysmap[ code ];
  1298. X+         rmt_called = FALSE;
  1299. X+         rmt_cnt = 0;
  1300. X          u.u_eosys = JUSTRETURN;
  1301. X          while (! rmt_called) {
  1302. X              runremote = (rmt_syscall != RSYS_nosys
  1303. X***************
  1304. X*** 234,239
  1305. X              u.u_error = EINTR;
  1306. X      } else {
  1307. X          u.u_eosys = JUSTRETURN;
  1308. X  #ifdef SYSCALLTRACE
  1309. X          if (syscalltrace) {
  1310. X              register int i;
  1311. X
  1312. X--- 254,275 -----
  1313. X          rmt_called = FALSE;
  1314. X          rmt_cnt = 0;
  1315. X          u.u_eosys = JUSTRETURN;
  1316. X+         while (! rmt_called) {
  1317. X+             runremote = (rmt_syscall != RSYS_nosys
  1318. X+                     && u.u_procp->p_flag & SREMOTE);
  1319. X+             if (runremote)
  1320. X+                 rmt_called = remote_startup(rmt_cnt,
  1321. X+                     rmt_syscall);
  1322. X+             if (! rmt_called) {
  1323. X+                 (*callp->sy_call)();
  1324. X+                 if (u.u_error != EISREMOTE)
  1325. X+                     rmt_called = TRUE;
  1326. X+                 else
  1327. X+                     rmt_cnt++;
  1328. X+             }
  1329. X+         }
  1330. X+ #else REMOTEFS
  1331. X+         u.u_eosys = JUSTRETURN;
  1332. X  #ifdef SYSCALLTRACE
  1333. X          if (syscalltrace) {
  1334. X              register int i;
  1335. X***************
  1336. X*** 254,259
  1337. X          }
  1338. X  #endif
  1339. X          (*(callp->sy_call))();
  1340. X      }
  1341. X      locr0[PS] &= ~PSL_C;
  1342. X      if (u.u_eosys == RESTARTSYS)
  1343. X
  1344. X--- 290,296 -----
  1345. X          }
  1346. X  #endif
  1347. X          (*(callp->sy_call))();
  1348. X+ #endif REMOTEFS
  1349. X      }
  1350. X      locr0[PS] &= ~PSL_C;
  1351. X      if (u.u_eosys == RESTARTSYS)
  1352. SHAREOF
  1353. chmod 664 remote/usr.sys.VAX4.2/machine/trap.c.diff
  1354. #
  1355. # remote/usr.sys.VAX4.2/sys/init_sysent.c.diff
  1356. #
  1357. if [ -f remote/usr.sys.VAX4.2/sys/init_sysent.c.diff ]; then 
  1358.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/init_sysent.c.diff or ^C to quit' 
  1359.     read ans 
  1360.     rm -f remote/usr.sys.VAX4.2/sys/init_sysent.c.diff 
  1361. fi 
  1362.  
  1363. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/init_sysent.c.diff
  1364. XThese two changes add in the new RFS systems calls, remoteon(), remoteoff()
  1365. Xand  remotename().  If the second hunk fails, then you have some system
  1366. Xcall numbers that are not in standard 4.2BSD.
  1367. X***************
  1368. X*** 99,99
  1369. X  /* BEGIN JUNK */
  1370. X
  1371. X--- 99,107 -----
  1372. X+ #ifdef REMOTEFS
  1373. X+ /*
  1374. X+  * remote file sys stuff (toddb@du)
  1375. X+  */
  1376. X+ int    remoteon(),        /* remote file sys stuff */
  1377. X+     remoteoff(),
  1378. X+     remotename();
  1379. X+ #endif REMOTEFS
  1380. X  /* BEGIN JUNK */
  1381. X***************
  1382. X*** 270,274
  1383. X      2, setquota,            /* 148 = quota */
  1384. X      4, qquota,            /* 149 = qquota */
  1385. X      3, getsockname,            /* 150 = getsockname */
  1386. X  };
  1387. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  1388. X
  1389. X--- 278,291 -----
  1390. X      2, setquota,            /* 148 = quota */
  1391. X      4, qquota,            /* 149 = qquota */
  1392. X      3, getsockname,            /* 150 = getsockname */
  1393. X+ #ifdef REMOTEFS
  1394. X+     4, remoteon,            /* 151 = remoteon */
  1395. X+     1, remoteoff,            /* 152 = remoteoff */
  1396. X+     4, remotename,            /* 153 = remotename */
  1397. X+ #else REMOTEFS
  1398. X+     0, nosys,            /* 151 = nosys */
  1399. X+     0, nosys,            /* 152 = nosys */
  1400. X+     0, nosys,            /* 153 = nosys */
  1401. X+ #endif REMOTEFS
  1402. X  };
  1403. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  1404. SHAREOF
  1405. chmod 664 remote/usr.sys.VAX4.2/sys/init_sysent.c.diff
  1406. #
  1407. # remote/usr.sys.VAX4.2/sys/kern_exec.c.diff
  1408. #
  1409. if [ -f remote/usr.sys.VAX4.2/sys/kern_exec.c.diff ]; then 
  1410.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/kern_exec.c.diff or ^C to quit' 
  1411.     read ans 
  1412.     rm -f remote/usr.sys.VAX4.2/sys/kern_exec.c.diff 
  1413. fi 
  1414.  
  1415. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/kern_exec.c.diff
  1416. XThe following changes implement local execution of an object file that
  1417. Xlives on another host.
  1418. X***************
  1419. X*** 28,33
  1420. X  #include "../h/uio.h"
  1421. X  #include "../h/nami.h"
  1422. X  #include "../h/acct.h"
  1423. X  
  1424. X  #ifdef vax
  1425. X  #include "../vax/mtpr.h"
  1426. X
  1427. X--- 28,39 -----
  1428. X  #include "../h/uio.h"
  1429. X  #include "../h/nami.h"
  1430. X  #include "../h/acct.h"
  1431. X+ #ifdef REMOTEFS
  1432. X+ /*
  1433. X+  * needed only if EISREMOTE isn't in /usr/include/errno.h
  1434. X+  */
  1435. X+ #include "../h/errno.h"
  1436. X+ #endif REMOTEFS
  1437. X  
  1438. X  #ifdef vax
  1439. X  #include "../vax/mtpr.h"
  1440. X***************
  1441. X*** 57,62
  1442. X      int na, ne, ucp, ap, c;
  1443. X      int indir, uid, gid;
  1444. X      char *sharg;
  1445. X      struct inode *ip;
  1446. X      swblk_t bno;
  1447. X      char cfname[MAXCOMLEN + 1];
  1448. X
  1449. X--- 63,72 -----
  1450. X      int na, ne, ucp, ap, c;
  1451. X      int indir, uid, gid;
  1452. X      char *sharg;
  1453. X+ #ifdef REMOTEFS
  1454. X+     struct inode *ip; /* have to take address */
  1455. X+     int    remote = -1;
  1456. X+ #else REMOTEFS
  1457. X      struct inode *ip;
  1458. X  #endif REMOTEFS
  1459. X      swblk_t bno;
  1460. X***************
  1461. X*** 58,63
  1462. X      int indir, uid, gid;
  1463. X      char *sharg;
  1464. X      struct inode *ip;
  1465. X      swblk_t bno;
  1466. X      char cfname[MAXCOMLEN + 1];
  1467. X      char cfarg[SHSIZE];
  1468. X
  1469. X--- 68,74 -----
  1470. X      int    remote = -1;
  1471. X  #else REMOTEFS
  1472. X      struct inode *ip;
  1473. X+ #endif REMOTEFS
  1474. X      swblk_t bno;
  1475. X      char cfname[MAXCOMLEN + 1];
  1476. X      char cfarg[SHSIZE];
  1477. X***************
  1478. X*** 64,69
  1479. X      int resid;
  1480. X  
  1481. X      if ((ip = namei(uchar, LOOKUP, 1)) == NULL)
  1482. X          return;
  1483. X      bno = 0;
  1484. X      bp = 0;
  1485. X
  1486. X--- 75,86 -----
  1487. X      int resid;
  1488. X  
  1489. X      if ((ip = namei(uchar, LOOKUP, 1)) == NULL)
  1490. X+ #ifdef REMOTEFS
  1491. X+         if (u.u_error == EISREMOTE)
  1492. X+             remote = remote_execinfo(&ip, &uid, &gid,
  1493. X+                 ((struct execa *)u.u_ap)->fname);
  1494. X+     if (u.u_error)
  1495. X+ #endif REMOTEFS
  1496. X          return;
  1497. X      bno = 0;
  1498. X      bp = 0;
  1499. X***************
  1500. X*** 68,73
  1501. X      bno = 0;
  1502. X      bp = 0;
  1503. X      indir = 0;
  1504. X      uid = u.u_uid;
  1505. X      gid = u.u_gid;
  1506. X      if (ip->i_mode & ISUID)
  1507. X
  1508. X--- 85,93 -----
  1509. X      bno = 0;
  1510. X      bp = 0;
  1511. X      indir = 0;
  1512. X+ #ifdef REMOTEFS
  1513. X+ if (remote < 0) {
  1514. X+ #endif REMOTEFS
  1515. X      uid = u.u_uid;
  1516. X      gid = u.u_gid;
  1517. X      if (ip->i_mode & ISUID)
  1518. X***************
  1519. X*** 106,111
  1520. X      if (u.u_error)
  1521. X          goto bad;
  1522. X      u.u_count = resid;
  1523. X  #ifndef lint
  1524. X      if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) &&
  1525. X          u.u_exdata.ux_shell[0] != '#') {
  1526. X
  1527. X--- 126,137 -----
  1528. X      if (u.u_error)
  1529. X          goto bad;
  1530. X      u.u_count = resid;
  1531. X+ #ifdef REMOTEFS
  1532. X+ }
  1533. X+ 
  1534. X+ remote_again:
  1535. X+ 
  1536. X+ #endif REMOTEFS
  1537. X  #ifndef lint
  1538. X      if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) &&
  1539. X          u.u_exdata.ux_shell[0] != '#') {
  1540. X***************
  1541. X*** 171,176
  1542. X              (unsigned)(u.u_dent.d_namlen + 1));
  1543. X          cfname[MAXCOMLEN] = 0;
  1544. X          indir = 1;
  1545. X          iput(ip);
  1546. X          ip = namei(schar, LOOKUP, 1);
  1547. X          if (ip == NULL)
  1548. X
  1549. X--- 197,205 -----
  1550. X              (unsigned)(u.u_dent.d_namlen + 1));
  1551. X          cfname[MAXCOMLEN] = 0;
  1552. X          indir = 1;
  1553. X+ #ifdef REMOTEFS
  1554. X+         if (remote < 0)
  1555. X+ #endif REMOTEFS
  1556. X          iput(ip);
  1557. X          ip = namei(schar, LOOKUP, 1);
  1558. X  #ifdef REMOTEFS
  1559. X***************
  1560. X*** 173,178
  1561. X          indir = 1;
  1562. X          iput(ip);
  1563. X          ip = namei(schar, LOOKUP, 1);
  1564. X          if (ip == NULL)
  1565. X              return;
  1566. X          goto again;
  1567. X
  1568. X--- 202,219 -----
  1569. X  #endif REMOTEFS
  1570. X          iput(ip);
  1571. X          ip = namei(schar, LOOKUP, 1);
  1572. X+ #ifdef REMOTEFS
  1573. X+         if (ip == NULL) {
  1574. X+             if (u.u_error == EISREMOTE)
  1575. X+                 remote = remote_execinfo(&ip, 0, 0, 0);
  1576. X+             if (u.u_error)
  1577. X+                 return;
  1578. X+             if (ip == NULL)
  1579. X+                 goto remote_again;
  1580. X+         }
  1581. X+         else
  1582. X+             remote = -1;
  1583. X+ #else REMOTEFS
  1584. X          if (ip == NULL)
  1585. X              return;
  1586. X  #endif REMOTEFS
  1587. X***************
  1588. X*** 175,180
  1589. X          ip = namei(schar, LOOKUP, 1);
  1590. X          if (ip == NULL)
  1591. X              return;
  1592. X          goto again;
  1593. X      }
  1594. X  
  1595. X
  1596. X--- 216,222 -----
  1597. X  #else REMOTEFS
  1598. X          if (ip == NULL)
  1599. X              return;
  1600. X+ #endif REMOTEFS
  1601. X          goto again;
  1602. X      }
  1603. X  
  1604. X***************
  1605. X*** 244,249
  1606. X          bcopy((caddr_t)cfname, (caddr_t)u.u_dent.d_name,
  1607. X              (unsigned)(u.u_dent.d_namlen + 1));
  1608. X      }
  1609. X      getxfile(ip, nc + (na+4)*NBPW, uid, gid);
  1610. X      if (u.u_error) {
  1611. X  badarg:
  1612. X
  1613. X--- 286,294 -----
  1614. X          bcopy((caddr_t)cfname, (caddr_t)u.u_dent.d_name,
  1615. X              (unsigned)(u.u_dent.d_namlen + 1));
  1616. X      }
  1617. X+ #ifdef REMOTEFS
  1618. X+     getxfile(ip, nc + (na+4)*NBPW, uid, gid, remote);
  1619. X+ #else REMOTEFS
  1620. X      getxfile(ip, nc + (na+4)*NBPW, uid, gid);
  1621. X  #endif REMOTEFS
  1622. X      if (u.u_error) {
  1623. X***************
  1624. X*** 245,250
  1625. X              (unsigned)(u.u_dent.d_namlen + 1));
  1626. X      }
  1627. X      getxfile(ip, nc + (na+4)*NBPW, uid, gid);
  1628. X      if (u.u_error) {
  1629. X  badarg:
  1630. X          for (c = 0; c < nc; c += CLSIZE*NBPG) {
  1631. X
  1632. X--- 290,296 -----
  1633. X      getxfile(ip, nc + (na+4)*NBPW, uid, gid, remote);
  1634. X  #else REMOTEFS
  1635. X      getxfile(ip, nc + (na+4)*NBPW, uid, gid);
  1636. X+ #endif REMOTEFS
  1637. X      if (u.u_error) {
  1638. X  badarg:
  1639. X          for (c = 0; c < nc; c += CLSIZE*NBPG) {
  1640. X***************
  1641. X*** 303,308
  1642. X  /*
  1643. X   * Read in and set up memory for executed file.
  1644. X   */
  1645. X  getxfile(ip, nargc, uid, gid)
  1646. X      register struct inode *ip;
  1647. X      int nargc, uid, gid;
  1648. X
  1649. X--- 349,357 -----
  1650. X  /*
  1651. X   * Read in and set up memory for executed file.
  1652. X   */
  1653. X+ #ifdef REMOTEFS
  1654. X+ getxfile(ip, nargc, uid, gid, remote)
  1655. X+ #else REMOTEFS
  1656. X  getxfile(ip, nargc, uid, gid)
  1657. X  #endif REMOTEFS
  1658. X      register struct inode *ip;
  1659. X***************
  1660. X*** 304,309
  1661. X   * Read in and set up memory for executed file.
  1662. X   */
  1663. X  getxfile(ip, nargc, uid, gid)
  1664. X      register struct inode *ip;
  1665. X      int nargc, uid, gid;
  1666. X  {
  1667. X
  1668. X--- 353,359 -----
  1669. X  getxfile(ip, nargc, uid, gid, remote)
  1670. X  #else REMOTEFS
  1671. X  getxfile(ip, nargc, uid, gid)
  1672. X+ #endif REMOTEFS
  1673. X      register struct inode *ip;
  1674. X      int nargc, uid, gid;
  1675. X  {
  1676. X***************
  1677. X*** 309,314
  1678. X  {
  1679. X      register size_t ts, ds, ss;
  1680. X      int pagi;
  1681. X  
  1682. X      if (u.u_exdata.ux_mag == 0413)
  1683. X          pagi = SPAGI;
  1684. X
  1685. X--- 359,367 -----
  1686. X  {
  1687. X      register size_t ts, ds, ss;
  1688. X      int pagi;
  1689. X+ #ifdef REMOTEFS
  1690. X+     int    oldtextsize;
  1691. X+ #endif REMOTEFS
  1692. X  
  1693. X      if (u.u_exdata.ux_mag == 0413)
  1694. X          pagi = SPAGI;
  1695. X***************
  1696. X*** 314,319
  1697. X          pagi = SPAGI;
  1698. X      else
  1699. X          pagi = 0;
  1700. X      if (u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 &&
  1701. X          ip->i_count!=1) {
  1702. X          register struct file *fp;
  1703. X
  1704. X--- 367,383 -----
  1705. X          pagi = SPAGI;
  1706. X      else
  1707. X          pagi = 0;
  1708. X+ #ifdef REMOTEFS
  1709. X+     if (remote >= 0) {
  1710. X+         /*
  1711. X+          * Prevent xalloc() from making a shared or paged text.
  1712. X+          */
  1713. X+         pagi = 0;
  1714. X+         oldtextsize = u.u_exdata.ux_tsize;
  1715. X+         u.u_exdata.ux_dsize += u.u_exdata.ux_tsize;
  1716. X+         u.u_exdata.ux_tsize = 0;
  1717. X+     }
  1718. X+ #endif REMOTEFS
  1719. X      if (u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 &&
  1720. X          ip->i_count!=1) {
  1721. X          register struct file *fp;
  1722. X***************
  1723. X*** 370,375
  1724. X      u.u_smap = u.u_csmap;
  1725. X      vgetvm(ts, ds, ss);
  1726. X  
  1727. X      if (pagi == 0)
  1728. X          u.u_error =
  1729. X              rdwri(UIO_READ, ip,
  1730. X
  1731. X--- 434,444 -----
  1732. X      u.u_smap = u.u_csmap;
  1733. X      vgetvm(ts, ds, ss);
  1734. X  
  1735. X+ #ifdef REMOTEFS
  1736. X+     if (remote >= 0)
  1737. X+         u.u_error = remote_execread(remote, oldtextsize);
  1738. X+     else
  1739. X+ #endif REMOTEFS
  1740. X      if (pagi == 0)
  1741. X          u.u_error =
  1742. X              rdwri(UIO_READ, ip,
  1743. SHAREOF
  1744. chmod 664 remote/usr.sys.VAX4.2/sys/kern_exec.c.diff
  1745. #
  1746. # remote/usr.sys.VAX4.2/sys/kern_exit.c.diff
  1747. #
  1748. if [ -f remote/usr.sys.VAX4.2/sys/kern_exit.c.diff ]; then 
  1749.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/kern_exit.c.diff or ^C to quit' 
  1750.     read ans 
  1751.     rm -f remote/usr.sys.VAX4.2/sys/kern_exit.c.diff 
  1752. fi 
  1753.  
  1754. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/kern_exit.c.diff
  1755. XThe following changes ensure that upon exit, a process notifies any remote
  1756. Xservers that may know about him, that he is indeed dead.
  1757. X***************
  1758. X*** 33,38
  1759. X  #include "../h/file.h"
  1760. X  #include "../h/mbuf.h"
  1761. X  #include "../h/inode.h"
  1762. X  
  1763. X  /*
  1764. X   * Exit system call: pass back caller's arg
  1765. X
  1766. X--- 33,41 -----
  1767. X  #include "../h/file.h"
  1768. X  #include "../h/mbuf.h"
  1769. X  #include "../h/inode.h"
  1770. X+ #ifdef REMOTEFS
  1771. X+ #include "../remote/remotefs.h"
  1772. X+ #endif REMOTEFS
  1773. X  
  1774. X  /*
  1775. X   * Exit system call: pass back caller's arg
  1776. X***************
  1777. X*** 66,71
  1778. X      vmsizmon();
  1779. X  #endif
  1780. X      p = u.u_procp;
  1781. X      p->p_flag &= ~(STRC|SULOCK);
  1782. X      p->p_flag |= SWEXIT;
  1783. X      p->p_sigignore = ~0;
  1784. X
  1785. X--- 69,81 -----
  1786. X      vmsizmon();
  1787. X  #endif
  1788. X      p = u.u_procp;
  1789. X+ #ifdef REMOTEFS
  1790. X+     /*
  1791. X+      * First, release our server.
  1792. X+      */
  1793. X+     if (p->p_flag & SREMOTE)
  1794. X+         remote_exit();
  1795. X+ #endif REMOTEFS
  1796. X      p->p_flag &= ~(STRC|SULOCK);
  1797. X      p->p_flag |= SWEXIT;
  1798. X      p->p_sigignore = ~0;
  1799. SHAREOF
  1800. chmod 664 remote/usr.sys.VAX4.2/sys/kern_exit.c.diff
  1801. #
  1802. # remote/usr.sys.VAX4.2/sys/sys_inode.c.diff
  1803. #
  1804. if [ -f remote/usr.sys.VAX4.2/sys/sys_inode.c.diff ]; then 
  1805.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/sys_inode.c.diff or ^C to quit' 
  1806.     read ans 
  1807.     rm -f remote/usr.sys.VAX4.2/sys/sys_inode.c.diff 
  1808. fi 
  1809.  
  1810. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/sys_inode.c.diff
  1811. XThis change repairs a semantic change in ino_close() that assumes
  1812. Xthe only other file descriptor type is DTYPE_SOCKET.  If patch tells
  1813. Xyou
  1814. X    Reversed (or previously applied) patch detected!
  1815. XThen you already have the fix and you must undo what patch does.
  1816. X
  1817. X***************
  1818. X*** 351,357
  1819. X       * two different inodes.
  1820. X       */
  1821. X      for (fp = file; fp < fileNFILE; fp++) {
  1822. X!         if (fp->f_type == DTYPE_SOCKET)        /* XXX */
  1823. X              continue;
  1824. X          if (fp->f_count && (ip = (struct inode *)fp->f_data) &&
  1825. X              ip->i_rdev == dev && (ip->i_mode&IFMT) == mode)
  1826. X
  1827. X--- 351,357 -----
  1828. X       * two different inodes.
  1829. X       */
  1830. X      for (fp = file; fp < fileNFILE; fp++) {
  1831. X!         if (fp->f_type != DTYPE_INODE)    /* XXX */
  1832. X              continue;
  1833. X          if (fp->f_count && (ip = (struct inode *)fp->f_data) &&
  1834. X              ip->i_rdev == dev && (ip->i_mode&IFMT) == mode)
  1835. SHAREOF
  1836. chmod 664 remote/usr.sys.VAX4.2/sys/sys_inode.c.diff
  1837. #
  1838. # remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff
  1839. #
  1840. if [ -f remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff ]; then 
  1841.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff or ^C to quit' 
  1842.     read ans 
  1843.     rm -f remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff 
  1844. fi 
  1845.  
  1846. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff
  1847. XThese changes are the primary hook into the operating system for detecting
  1848. Xa "remote" file.
  1849. X***************
  1850. X*** 97,102
  1851. X      struct inode *pdp;        /* saved dp during symlink work */
  1852. X      int i;
  1853. X      int lockparent;
  1854. X  
  1855. X      lockparent = flag & LOCKPARENT;
  1856. X      flag &= ~LOCKPARENT;
  1857. X
  1858. X--- 97,105 -----
  1859. X      struct inode *pdp;        /* saved dp during symlink work */
  1860. X      int i;
  1861. X      int lockparent;
  1862. X+ #ifdef REMOTEFS
  1863. X+     long    remote;
  1864. X+ #endif REMOTEFS
  1865. X  
  1866. X      lockparent = flag & LOCKPARENT;
  1867. X      flag &= ~LOCKPARENT;
  1868. X***************
  1869. X*** 145,150
  1870. X       * Check accessiblity of directory.
  1871. X       */
  1872. X      if ((dp->i_mode&IFMT) != IFDIR) {
  1873. X          u.u_error = ENOTDIR;
  1874. X          goto bad;
  1875. X      }
  1876. X
  1877. X--- 148,169 -----
  1878. X       * Check accessiblity of directory.
  1879. X       */
  1880. X      if ((dp->i_mode&IFMT) != IFDIR) {
  1881. X+ #ifdef REMOTEFS
  1882. X+         remote = isremote(dp, cp, nbp->b_un.b_addr);
  1883. X+         /*
  1884. X+          * If it is really local, then start again at the root.
  1885. X+          */
  1886. X+         if (remote < 0) {
  1887. X+             iput(dp);
  1888. X+             dp = rootdir;
  1889. X+             ilock(dp);
  1890. X+             dp->i_count++;
  1891. X+             fs = dp->i_fs;
  1892. X+             cp = nbp->b_un.b_addr;
  1893. X+             goto dirloop2;
  1894. X+         }
  1895. X+         else if (! remote)
  1896. X+ #endif REMOTEFS
  1897. X          u.u_error = ENOTDIR;
  1898. X          goto bad;
  1899. X      }
  1900. X***************
  1901. X*** 382,387
  1902. X                      iput(u.u_pdir);
  1903. X                      goto bad;
  1904. X                  }
  1905. X              }
  1906. X          }
  1907. X          brelse(nbp);
  1908. X
  1909. X--- 401,417 -----
  1910. X                      iput(u.u_pdir);
  1911. X                      goto bad;
  1912. X                  }
  1913. X+ #ifdef REMOTEFS
  1914. X+                 /*
  1915. X+                  * don't allow anyone to remove a remote mount
  1916. X+                  * point.
  1917. X+                  */
  1918. X+                 if (rmt_host(dp, &i)) {
  1919. X+                     iput(u.u_pdir);
  1920. X+                     u.u_error = EBUSY;
  1921. X+                     goto bad;
  1922. X+                 }
  1923. X+ #endif REMOTEFS
  1924. X              }
  1925. X          }
  1926. X          brelse(nbp);
  1927. SHAREOF
  1928. chmod 664 remote/usr.sys.VAX4.2/sys/ufs_nami.c.diff
  1929. #
  1930. # remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff
  1931. #
  1932. if [ -f remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff ]; then 
  1933.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff or ^C to quit' 
  1934.     read ans 
  1935.     rm -f remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff 
  1936. fi 
  1937.  
  1938. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff
  1939. XThese changes modify chdirec(), which is called by chroot() and chdir(),
  1940. Xso that you can be allowed to do a chdir() to a remote mount point.
  1941. XIn addition, the changes ensure that we adjust internal pointers when doing
  1942. Xa chdir() OUT of a remote mount point.
  1943. X
  1944. X***************
  1945. X*** 67,72
  1946. X  chdirec(ipp)
  1947. X      register struct inode **ipp;
  1948. X  {
  1949. X      register struct inode *ip;
  1950. X      struct a {
  1951. X          char    *fname;
  1952. X
  1953. X--- 67,75 -----
  1954. X  chdirec(ipp)
  1955. X      register struct inode **ipp;
  1956. X  {
  1957. X+ #ifdef REMOTEFS
  1958. X+     int    i;
  1959. X+ #endif REMOTEFS
  1960. X      register struct inode *ip;
  1961. X      struct a {
  1962. X          char    *fname;
  1963. X***************
  1964. X*** 76,81
  1965. X      if (ip == NULL)
  1966. X          return;
  1967. X      if ((ip->i_mode&IFMT) != IFDIR) {
  1968. X          u.u_error = ENOTDIR;
  1969. X          goto bad;
  1970. X      }
  1971. X
  1972. X--- 79,89 -----
  1973. X      if (ip == NULL)
  1974. X          return;
  1975. X      if ((ip->i_mode&IFMT) != IFDIR) {
  1976. X+ #ifdef REMOTEFS
  1977. X+         if (rmt_hostdir(ip, &i) != NULL)
  1978. X+             u.u_error = remotechdir(i);
  1979. X+         else
  1980. X+ #endif REMOTEFS
  1981. X          u.u_error = ENOTDIR;
  1982. X          goto bad;
  1983. X      }
  1984. X***************
  1985. X*** 81,86
  1986. X      }
  1987. X      if (access(ip, IEXEC))
  1988. X          goto bad;
  1989. X      iunlock(ip);
  1990. X      if (*ipp)
  1991. X          irele(*ipp);
  1992. X
  1993. X--- 89,97 -----
  1994. X      }
  1995. X      if (access(ip, IEXEC))
  1996. X          goto bad;
  1997. X+ #ifdef REMOTEFS
  1998. X+     remotechdir(-1);
  1999. X+ #endif REMOTEFS
  2000. X      iunlock(ip);
  2001. X      if (*ipp)
  2002. X          irele(*ipp);
  2003. SHAREOF
  2004. chmod 664 remote/usr.sys.VAX4.2/sys/ufs_syscalls.c.diff
  2005. #
  2006. # remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff
  2007. #
  2008. if [ -f remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff ]; then 
  2009.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff or ^C to quit' 
  2010.     read ans 
  2011.     rm -f remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff 
  2012. fi 
  2013.  
  2014. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff
  2015. XThese changes Fix a bug in soreceive() that caused infinite loop if a
  2016. Xpacket was received while doing uiomove() and the MSG_PEEK flag was set.
  2017. XIf you have this fix, then patch will tell you:
  2018. X
  2019. X    Reversed (or previously applied) patch detected!
  2020. X
  2021. XIf it does, you should just reinstall your original uipc_socket.c.
  2022. XIf you have a different version of the fix or another modification that
  2023. Xaffects this code, then patch will tell you that "Hunk #1 failed"; you
  2024. Xmust install the patch by hand.
  2025. X
  2026. X***************
  2027. X*** 546,552
  2028. X          error =
  2029. X              uiomove(mtod(m, caddr_t) + moff, (int)len, UIO_READ, uio);
  2030. X          s = splnet();
  2031. X!         if (len == m->m_len) {
  2032. X              eor = (int)m->m_act;
  2033. X              if (flags & MSG_PEEK)
  2034. X                  m = m->m_next;
  2035. X
  2036. X--- 550,556 -----
  2037. X          error =
  2038. X              uiomove(mtod(m, caddr_t) + moff, (int)len, UIO_READ, uio);
  2039. X          s = splnet();
  2040. X!         if (moff+len == m->m_len) {
  2041. X              eor = (int)m->m_act;
  2042. X              if (flags & MSG_PEEK)
  2043. X                  m = m->m_next;
  2044. SHAREOF
  2045. chmod 664 remote/usr.sys.VAX4.2/sys/uipc_socket.c.diff
  2046. #
  2047. # remote/usr.sys.VAX4.3/conf/Makefile.vax.diff
  2048. #
  2049. if [ -f remote/usr.sys.VAX4.3/conf/Makefile.vax.diff ]; then 
  2050.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.3/conf/Makefile.vax.diff or ^C to quit' 
  2051.     read ans 
  2052.     rm -f remote/usr.sys.VAX4.3/conf/Makefile.vax.diff 
  2053. fi 
  2054.  
  2055. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.3/conf/Makefile.vax.diff
  2056. XThis change teaches the Makefile how to make remote/rmt_data.c from
  2057. Xsys/init_sysent.c and remote/rmt_data_template.
  2058. X***************
  2059. X*** 145,150
  2060. X  param.o: param.c Makefile
  2061. X      ${CC} -c ${CFLAGS} ${PARAM} param.c
  2062. X  
  2063. X  %RULES
  2064. X  
  2065. X  # DO NOT DELETE THIS LINE -- make depend uses it
  2066. X
  2067. X--- 145,157 -----
  2068. X  param.o: param.c Makefile
  2069. X      ${CC} -c ${CFLAGS} ${PARAM} param.c
  2070. X  
  2071. X+ ../remote/rmt_data.c: ../remote/rmt_data_template ../remote/remotefs.h \
  2072. X+     ../sys/init_sysent.c
  2073. X+     cat ../remote/rmt_data_template > ../remote/nrmt_data.c
  2074. X+     /lib/cpp ${CFLAGS} ../sys/init_sysent.c | sh ../remote/remote_mkdata \
  2075. X+         ../remote/remotefs.h >> ../remote/nrmt_data.c
  2076. X+     mv ../remote/nrmt_data.c ../remote/rmt_data.c
  2077. X+ 
  2078. X  %RULES
  2079. X  
  2080. X  # DO NOT DELETE THIS LINE -- make depend uses it
  2081. SHAREOF
  2082. chmod 664 remote/usr.sys.VAX4.3/conf/Makefile.vax.diff
  2083. #
  2084. # remote/usr.sys.VAX4.3/conf/makefile.vax.diff
  2085. #
  2086. if [ -f remote/usr.sys.VAX4.3/conf/makefile.vax.diff ]; then 
  2087.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.3/conf/makefile.vax.diff or ^C to quit' 
  2088.     read ans 
  2089.     rm -f remote/usr.sys.VAX4.3/conf/makefile.vax.diff 
  2090. fi 
  2091.  
  2092. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.3/conf/makefile.vax.diff
  2093. XThis change teaches the Makefile how to make remote/rmt_data.c from
  2094. Xsys/init_sysent.c and remote/rmt_data_template.
  2095. X***************
  2096. X*** 145,150
  2097. X  param.o: param.c makefile
  2098. X      ${CC} -c ${CFLAGS} ${PARAM} param.c
  2099. X  
  2100. X  %RULES
  2101. X  
  2102. X  # DO NOT DELETE THIS LINE -- make depend uses it
  2103. X
  2104. X--- 145,157 -----
  2105. X  param.o: param.c Makefile
  2106. X      ${CC} -c ${CFLAGS} ${PARAM} param.c
  2107. X  
  2108. X+ ../remote/rmt_data.c: ../remote/rmt_data_template ../remote/remotefs.h \
  2109. X+     ../sys/init_sysent.c
  2110. X+     cat ../remote/rmt_data_template > ../remote/nrmt_data.c
  2111. X+     /lib/cpp ${CFLAGS} ../sys/init_sysent.c | sh ../remote/remote_mkdata \
  2112. X+         ../remote/remotefs.h >> ../remote/nrmt_data.c
  2113. X+     mv ../remote/nrmt_data.c ../remote/rmt_data.c
  2114. X+ 
  2115. X  %RULES
  2116. X  
  2117. X  # DO NOT DELETE THIS LINE -- make depend uses it
  2118. SHAREOF
  2119. chmod 664 remote/usr.sys.VAX4.3/conf/makefile.vax.diff
  2120. #
  2121. # remote/usr.sys.VAX4.3/h/user.h.diff
  2122. #
  2123. if [ -f remote/usr.sys.VAX4.3/h/user.h.diff ]; then 
  2124.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.3/h/user.h.diff or ^C to quit' 
  2125.     read ans 
  2126.     rm -f remote/usr.sys.VAX4.3/h/user.h.diff 
  2127. fi 
  2128.  
  2129. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.3/h/user.h.diff
  2130. XThese changes keep track of the per-process RFS information.
  2131. X***************
  2132. X*** 121,126
  2133. X      } u_ncache;
  2134. X      struct    nameidata u_nd;
  2135. X  
  2136. X      int    u_stack[1];
  2137. X  };
  2138. X  
  2139. X
  2140. X--- 121,137 -----
  2141. X      } u_ncache;
  2142. X      struct    nameidata u_nd;
  2143. X  
  2144. X+ #ifdef REMOTEFS
  2145. X+     short    u_rmtoffset[2];        /* path offset for local segment */
  2146. X+     short    u_rmtcdir;        /* system # of remote current dir */
  2147. X+     long    u_rmtsys;        /* room for 32 systems */
  2148. X+                     /* one bit for each remote system */
  2149. X+ #ifdef pyr /* Pyramid */
  2150. X+     int    *u.u_ap;
  2151. X+ #define        u_arg    u_ap
  2152. X+ #endif pyr
  2153. X+ #endif REMOTEFS
  2154. X+ 
  2155. X      int    u_stack[1];
  2156. X  };
  2157. X  
  2158. SHAREOF
  2159. chmod 664 remote/usr.sys.VAX4.3/h/user.h.diff
  2160. #
  2161. # remote/usr.sys.VAX4.3/machine/trap.c.diff
  2162. #
  2163. if [ -f remote/usr.sys.VAX4.3/machine/trap.c.diff ]; then 
  2164.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.3/machine/trap.c.diff or ^C to quit' 
  2165.     read ans 
  2166.     rm -f remote/usr.sys.VAX4.3/machine/trap.c.diff 
  2167. fi 
  2168.  
  2169. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.3/machine/trap.c.diff
  2170. XThese changes enable syscall() to start up a remote version of a system
  2171. Xcall if the normal system call fails with error == EISREMOTE.
  2172. X***************
  2173. X*** 23,28
  2174. X  #ifdef SYSCALLTRACE
  2175. X  #include "../sys/syscalls.c"
  2176. X  #endif
  2177. X  
  2178. X  #include "mtpr.h"
  2179. X  
  2180. X
  2181. X--- 23,35 -----
  2182. X  #ifdef SYSCALLTRACE
  2183. X  #include "../sys/syscalls.c"
  2184. X  #endif
  2185. X+ #ifdef REMOTEFS
  2186. X+ #include "../remote/remotefs.h"
  2187. X+ /*
  2188. X+  * needed only if EISREMOTE isn't in /usr/include/errno.h
  2189. X+  */
  2190. X+ #include "../h/errno.h"
  2191. X+ #endif REMOTEFS
  2192. X  
  2193. X  #include "mtpr.h"
  2194. X  
  2195. X***************
  2196. X*** 191,196
  2197. X      register struct proc *p;
  2198. X      int opc;
  2199. X      struct timeval syst;
  2200. X  
  2201. X      syst = u.u_ru.ru_stime;
  2202. X      if (!USERMODE(locr0[PS]))
  2203. X
  2204. X--- 198,212 -----
  2205. X      register struct proc *p;
  2206. X      int opc;
  2207. X      struct timeval syst;
  2208. X+ #ifdef REMOTEFS
  2209. X+     /*
  2210. X+      * It is imperative that these declarations come after other register
  2211. X+      * declarations, because the (standard) code below depends upon the
  2212. X+      * order of allocation.
  2213. X+      */
  2214. X+     extern u_char remote_sysmap[];
  2215. X+     register long rmt_syscall, runremote, rmt_called, rmt_cnt;
  2216. X+ #endif REMOTEFS
  2217. X  
  2218. X      syst = u.u_ru.ru_stime;
  2219. X      if (!USERMODE(locr0[PS]))
  2220. X***************
  2221. X*** 223,228
  2222. X          if (u.u_error == 0 && u.u_eosys != RESTARTSYS)
  2223. X              u.u_error = EINTR;
  2224. X      } else {
  2225. X          u.u_eosys = NORMALRETURN;
  2226. X  #ifdef SYSCALLTRACE
  2227. X          if (syscalltrace) {
  2228. X
  2229. X--- 239,248 -----
  2230. X          if (u.u_error == 0 && u.u_eosys != RESTARTSYS)
  2231. X              u.u_error = EINTR;
  2232. X      } else {
  2233. X+ #ifdef REMOTEFS
  2234. X+         rmt_syscall = remote_sysmap[ code ];
  2235. X+         rmt_called = FALSE;
  2236. X+         rmt_cnt = 0;
  2237. X          u.u_eosys = NORMALRETURN;
  2238. X          while (! rmt_called) {
  2239. X              runremote = (rmt_syscall != RSYS_nosys
  2240. X***************
  2241. X*** 224,229
  2242. X              u.u_error = EINTR;
  2243. X      } else {
  2244. X          u.u_eosys = NORMALRETURN;
  2245. X  #ifdef SYSCALLTRACE
  2246. X          if (syscalltrace) {
  2247. X              register int i;
  2248. X
  2249. X--- 244,265 -----
  2250. X          rmt_called = FALSE;
  2251. X          rmt_cnt = 0;
  2252. X          u.u_eosys = NORMALRETURN;
  2253. X+         while (! rmt_called) {
  2254. X+             runremote = (rmt_syscall != RSYS_nosys
  2255. X+                     && u.u_procp->p_flag & SREMOTE);
  2256. X+             if (runremote)
  2257. X+                 rmt_called = remote_startup(rmt_cnt,
  2258. X+                     rmt_syscall);
  2259. X+             if (! rmt_called) {
  2260. X+                 (*callp->sy_call)();
  2261. X+                 if (u.u_error != EISREMOTE)
  2262. X+                     rmt_called = TRUE;
  2263. X+                 else
  2264. X+                     rmt_cnt++;
  2265. X+             }
  2266. X+         }
  2267. X+ #else REMOTEFS
  2268. X+         u.u_eosys = NORMALRETURN;
  2269. X  #ifdef SYSCALLTRACE
  2270. X          if (syscalltrace) {
  2271. X              register int i;
  2272. X***************
  2273. X*** 244,249
  2274. X          }
  2275. X  #endif
  2276. X          (*(callp->sy_call))();
  2277. X      }
  2278. X      if (u.u_eosys == NORMALRETURN) {
  2279. X          if (u.u_error) {
  2280. X
  2281. X--- 280,286 -----
  2282. X          }
  2283. X  #endif
  2284. X          (*(callp->sy_call))();
  2285. X+ #endif REMOTEFS
  2286. X      }
  2287. X      if (u.u_eosys == NORMALRETURN) {
  2288. X          if (u.u_error) {
  2289. SHAREOF
  2290. chmod 664 remote/usr.sys.VAX4.3/machine/trap.c.diff
  2291. #
  2292. # remote/usr.sys.VAX4.3/sys/init_sysent.c.diff
  2293. #
  2294. if [ -f remote/usr.sys.VAX4.3/sys/init_sysent.c.diff ]; then 
  2295.     echo -n 'Hit <return> to overwrite remote/usr.sys.VAX4.3/sys/init_sysent.c.diff or ^C to quit' 
  2296.     read ans 
  2297.     rm -f remote/usr.sys.VAX4.3/sys/init_sysent.c.diff 
  2298. fi 
  2299.  
  2300. sed -e 's/^.//' << \SHAREOF > remote/usr.sys.VAX4.3/sys/init_sysent.c.diff
  2301. XThese two changes add in the new RFS systems calls, remoteon(), remoteoff()
  2302. Xand  remotename().  If the second hunk fails, then you have some system
  2303. Xcall numbers that are not in standard 4.2BSD.
  2304. X***************
  2305. X*** 95,100
  2306. X  #define    compat(n, name)    0, nosys
  2307. X  #endif
  2308. X  
  2309. X  /* BEGIN JUNK */
  2310. X  #ifdef vax
  2311. X  int    resuba();
  2312. X
  2313. X--- 95,108 -----
  2314. X  #define    compat(n, name)    0, nosys
  2315. X  #endif
  2316. X  
  2317. X+ #ifdef REMOTEFS
  2318. X+ /*
  2319. X+  * remote file sys stuff (toddb@du)
  2320. X+  */
  2321. X+ int    remoteon(),        /* remote file sys stuff */
  2322. X+     remoteoff(),
  2323. X+     remotename();
  2324. X+ #endif REMOTEFS
  2325. X  /* BEGIN JUNK */
  2326. X  #ifdef vax
  2327. X  int    resuba();
  2328. X***************
  2329. X*** 269,274
  2330. X      2, setquota,            /* 148 = quota */
  2331. X      4, qquota,            /* 149 = qquota */
  2332. X      3, getsockname,            /* 150 = getsockname */
  2333. X      0, nosys,            /* 151 = nosys */
  2334. X      0, nosys,            /* 152 = nosys */
  2335. X      0, nosys,            /* 153 = nosys */
  2336. X
  2337. X--- 277,287 -----
  2338. X      2, setquota,            /* 148 = quota */
  2339. X      4, qquota,            /* 149 = qquota */
  2340. X      3, getsockname,            /* 150 = getsockname */
  2341. X+ #ifdef REMOTEFS
  2342. X+     4, remoteon,            /* 151 = remoteon */
  2343. X+     1, remoteoff,            /* 152 = remoteoff */
  2344. X+     4, remotename,            /* 153 = remotename */
  2345. X+ #else REMOTEFS
  2346. X      0, nosys,            /* 151 = nosys */
  2347. X      0, nosys,            /* 152 = nosys */
  2348. X      0, nosys,            /* 153 = nosys */
  2349. X***************
  2350. X*** 272,277
  2351. X      0, nosys,            /* 151 = nosys */
  2352. X      0, nosys,            /* 152 = nosys */
  2353. X      0, nosys,            /* 153 = nosys */
  2354. X      0, nosys,            /* 154 = nosys */
  2355. X  };
  2356. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  2357. X
  2358. X--- 285,291 -----
  2359. X      0, nosys,            /* 151 = nosys */
  2360. X      0, nosys,            /* 152 = nosys */
  2361. X      0, nosys,            /* 153 = nosys */
  2362. X+ #endif REMOTEFS
  2363. X      0, nosys,            /* 154 = nosys */
  2364. X  };
  2365. X  int    nsysent = sizeof (sysent) / sizeof (sysent[0]);
  2366. SHAREOF
  2367. chmod 664 remote/usr.sys.VAX4.3/sys/init_sysent.c.diff
  2368.  
  2369.