[net.micro.pc] PC-Xenix 1 mb file size fix

tsp@wlcrjs.UUCP (Tom Poindexter) (06/28/85)

Some of you using PC-Xenix 1.0 know about the 1mb file size limit
imposed by {ibm,microsoft}.  I have written a small hack around
this.  The attached programs are intended to be the login shell,
invoked at login time.  They really just act as a wedge, setting
a larger ulimit(), and invoking the real shell.  The small trick 
is that the real uid has to be root uid for ulimit to set a 
larger size, so the routine gets the real uid, sets root uid, then
sets the real id after the ulimit call.  Two programs are provided:
bigsh.c as a wedge for /bin/sh, and bigcsh.c as a wedge for /bin/csh.
I didn't bother writting one for vsh.  You probably want to test
this on a single uid first before changing all users.

(this is not in shar format).

Feel free to set the USIZE define to whatever trips your trigger.


Tom Poindexter

-------------------bigsh.c------------------

/*
 *  bigsh.c - sets a larger ulimit (USIZE) and invokes /bin/sh.
 *
 *  use this program as the shell in /etc/passwd.
 *  this program should be installed in /bin: 
 *     cc -i -o bigsh bigsh.c
 *     chmod 4711 bigsh
 *     chown root bigsh; chgrp root bigsh
 *
 *  see bigcsh.c for csh
 */

/* define ulimit size, in 512 byte chunks */
#define USIZE	40960L   /* yields 20mb, who's counting anyway? */

#include <sys/ulimit.h>

main(argc,argv)

int  argc;
char *argv[];

{

  int user;
  long ulimit();

  user = getuid();   /* get real user id */
  setuid(0);         /* set root id for ulimit call */

  ulimit(UL_SFILLIM,USIZE);  /* set the new limit */

  setuid(user);   /* reset the user id */
   
  execl("/bin/sh","-sh",(char *) 0);  /* invoke sh as login shell */

}



-------------------bigcsh.c------------------


/*
 *  bigcsh.c - sets a larger ulimit (USIZE) and invokes /bin/csh.
 *
 *  use this program as the shell in /etc/passwd.
 *  this program should be installed in /bin: 
 *     cc -i -o bigcsh bigcsh.c
 *     chmod 4711 bigcsh
 *     chown root bigcsh; chgrp root bigcsh
 *
 *  see bigsh.c for sh
 */

/* define ulimit size, in 512 byte chunks */
#define USIZE	40960L   /* yields 20mb, who's counting anyway? */

#include <sys/ulimit.h>

main(argc,argv)

int  argc;
char *argv[];

{

  int user;
  long ulimit();

  user = getuid();   /* get real user id */
  setuid(0);         /* set root id for ulimit call */

  ulimit(UL_SFILLIM,USIZE);  /* set the new limit */

  setuid(user);   /* reset the user id */
   
  execl("/bin/csh","-csh",(char *) 0);  /* invoke csh as login shell */

}


---------------------------------------------

-- 
Tom Poindexter	UUCP: ihnp4!wlcrjs!tsp
		Compuserve: 70040,1223
		Source: STW526
		Dialcom: 44:SFP008