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

Reply via email to