Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Nov 2000 11:46:39 -0600 (CST)
From:      Mike Meyer <mwm@mired.org>
To:        "Andresen,Jason R." <jandrese@mitre.org>
Cc:        Garrett Wollman <wollman@khavrinen.lcs.mit.edu>, void <float@firedrake.org>, freebsd-current@FreeBSD.ORG
Subject:   Re: Proper permissons on /var/mail
Message-ID:  <14868.7551.791920.252398@guru.mired.org>
In-Reply-To: <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> <3A1412C1.96608727@mitre.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Andresen,Jason R. <jandrese@mitre.org> types:
> 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:

I can see at least two problems with the test program.

1) You're locking a shared descriptor. Possibly that should work, but
   it's not a case I normally see. Moving the open after the fork
   makes this behave better.

2) You're depending on a synchronization between the two process, but
   not doing anything to insure it.  The correct test is not that the
   last message was the child string, but that the last two messages
   are the same.

Actually, my first test was to change this to "lock, prompt, write,
unlock, exit", then run it in two windows. The first process pauses -
with the file locked - and the second hangs until the user responds to
the prompt.

	<mike

> <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
> 


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?14868.7551.791920.252398>