Garrett Wollman wrote:
>
> <<On Thu, 16 Nov 2000 15:18:09 +0000, void <[EMAIL PROTECTED]> said:
>
> > I have a similar problem -- every time I make world, perms on /var/mail
> > get set to 775. Mutt considers my mailbox read-only until I change it
> > to 1777.
>
> It is misconfigured (or perhaps just broken). 1777 mode for /var/mail
> is insecure, but was necessary in the mists of ancient past, before
> UNIX learned to do file locking. Unless your mail spool is shared
> over NFS (don't do that), locking is reliable and .lock files should
> never be used or relied upon.
Not the FreeBSD's file locking works anyway.
Here's the results from a test of the below program:
<escaflowne/p6> (81 ~/bin/src): uname -a
FreeBSD escaflowne.el.hazard 4.1.1-STABLE FreeBSD 4.1.1-STABLE #0: Sat
Oct 14 18:59:16 EDT 2000
[EMAIL PROTECTED]:/usr/obj/usr/src/sys/ESCAFLOWNE i386
<escaflowne/p6> (82 ~/bin/src): ./testflock
flock(2) is implemented, but not functional.
And another test:
%kenshin (1 ~): uname -a
IRIX kenshin 6.5 01221642 IP20
%kenshin (2 ~): ./testflock
flock(2) is fully functional.
I hope I'm doing something wrong here, and that flock really does work
on FreeBSD.
#include <sys/file.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <strings.h>
#define TMPFILENAME "/tmp/testflock.out"
#define MESSLEN 8
#define CHILDSTR "Child \n"
#define PARENTSTR "Parent\n"
int main( int argc, char** argv)
{
char message[MESSLEN];
int pid;
int fd;
int foo;
fd = open(TMPFILENAME, O_WRONLY | O_CREAT, 0644);
pid = fork();
if ( pid == 0 )
{
strcpy(message, CHILDSTR);
sleep(1);
}
else
strcpy(message, PARENTSTR);
flock(fd, LOCK_EX);
lseek(fd, 0, SEEK_END);
write(fd, message, MESSLEN - 1);
sleep(2);
lseek(fd, 0, SEEK_END);
write(fd, message, MESSLEN - 1);
flock(fd, LOCK_UN);
close(fd);
if ( pid != 0 )
{
wait(&foo);
/* Test the file, see if flock works */
fd = open(TMPFILENAME, O_RDONLY);
read(fd, (void*)message, MESSLEN - 1); /* Discard first
*/
read(fd, (void*)message, MESSLEN - 1);
if (! strcmp(message, CHILDSTR))
printf("flock(2) is implemented, but not
functional.\n");
else
printf("flock(2) is fully functional.\n");
close(fd);
}
return 0;
}
--
_ _ _ ___ ____ ___ ______________________________________
/ \/ \ | ||_ _|| _ \|___| | Jason Andresen -- [EMAIL PROTECTED]
/ /\/\ \ | | | | | |/ /|_|_ | Views expressed may not reflect those
/_/ \_\|_| |_| |_|\_\|___| | of the Mitre Corporation.
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message