Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Nov 2000 12:00:49 -0500
From:      "Andresen,Jason R." <jandrese@mitre.org>
To:        Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
Cc:        void <float@firedrake.org>, freebsd-current@FreeBSD.ORG
Subject:   Re: Proper permissons on /var/mail
Message-ID:  <3A1412C1.96608727@mitre.org>
References:  <Pine.BSF.4.21.0011160650180.41866-100000@arnold.neland.dk> <20001116151809.A15312@firedrake.org> <200011161636.LAA83126@khavrinen.lcs.mit.edu>

next in thread | previous in thread | raw e-mail | index | archive | help


Garrett Wollman wrote:
> 
> <<On Thu, 16 Nov 2000 15:18:09 +0000, void <float@firedrake.org> 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    
root@escaflowne.el.hazard:/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 -- jandrese@mitre.org
 / /\/\ \ | | | | | |/ /|_|_  | Views expressed may not reflect those 
/_/    \_\|_| |_| |_|\_\|___| | of the Mitre Corporation.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A1412C1.96608727>