Isn't it amazing what you find in the manuals?
Michael "Ford" Ditto
ditto at cbmvax.UUCP
Wed Feb 22 13:00:31 AEST 1989
>In article <481 at uncle.UUCP> jbm at uncle.UUCP (John B. Milton) writes:
>> LOCKING(2). I always wondered if the UNIXpc had this one, but I
>>A regular ho-hum user can cause a lot of trouble with this! Consider:
In article <6034 at cbmvax.UUCP> I write:
>I thought locking() only provided advisory locks. Have you actually
>tried those examples?
Yow! I just tried John's locking program and it sure works!
"lock /etc/passwd -z3600" pretty much stops the system!
I wrote a quicky loadable driver to make the locking() system call
require that the affected file be opened with write mode -- at least
this is a bit more secure. It's short enough that I figure it's not
worth a separate article to unix-pc.sources, so here it is,
crossposted.
-=] Ford [=-
"The number of Unix installations (In Real Life: Mike Ditto)
has grown to 10, with more expected." ford at kenobi.cts.com
- The Unix Programmer's Manual, ...!sdcsvax!crash!kenobi!ford
2nd Edition, June, 1972. ditto at cbmvax.commodore.com
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# Install
# lkfx.c
# This archive created: Tue Feb 21 21:51:59 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Install'" '(128 characters)'
if test -f 'Install'
then
echo shar: will not over-write existing file "'Install'"
else
cat << \SHAR_EOF > 'Install'
set -e
/etc/masterupd -a init release lkfx
make lkfx.o
cp lkfx.o /etc/lddrv
cd /etc/lddrv
./lddrv -av lkfx
echo lkfx >> drivers
SHAR_EOF
if test 128 -ne "`wc -c < 'Install'`"
then
echo shar: error transmitting "'Install'" '(should have been 128 characters)'
fi
chmod +x 'Install'
fi # end of overwriting check
echo shar: extracting "'lkfx.c'" '(773 characters)'
if test -f 'lkfx.c'
then
echo shar: will not over-write existing file "'lkfx.c'"
else
cat << \SHAR_EOF > 'lkfx.c'
#define KERNEL
#include <sys/types.h>
#include <sys/conf.h>
#include <sys/user.h>
#include <sys/file.h>
#include <sys/errno.h>
#include <sys/systm.h>
extern int locking();
#define SYS_locking 67
int fakelocking();
lkfxinit()
{
if (sysent[SYS_locking].sy_call != locking)
{
eprintf("lkfxinit: can't install: syscall %d is not `locking'");
u.u_error = EINVAL;
return;
}
sysent[SYS_locking].sy_call = fakelocking;
}
fakelocking()
{
register struct a
{
int fd;
int mode;
off_t size;
} *uap = (struct a *)u.u_ap;
struct file *fp;
if ((fp = getf(uap->fd)) == NULL)
return;
if (!(fp->f_flag & FWRITE))
{
u.u_error = EACCES;
return;
}
locking();
}
lkfxrelease()
{
sysent[SYS_locking].sy_call = locking;
}
SHAR_EOF
if test 773 -ne "`wc -c < 'lkfx.c'`"
then
echo shar: error transmitting "'lkfx.c'" '(should have been 773 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
--
-=] Ford [=-
"The number of Unix installations (In Real Life: Mike Ditto)
has grown to 10, with more expected." ford at kenobi.cts.com
- The Unix Programmer's Manual, ...!sdcsvax!crash!kenobi!ford
2nd Edition, June, 1972. ditto at cbmvax.commodore.com
More information about the Unix-pc.sources
mailing list