Path: utzoo!attcan!uunet!zaphod.mps.ohio-state.edu!usc!ucsd!ucbvax!AVELON.LERC.NASA.GOV!fsfacca From: fsfacca@AVELON.LERC.NASA.GOV (Tony Facca) Newsgroups: comp.sys.sgi Subject: Re: How do I lock the passwd file? Message-ID: <9101091427.AA18040@avelon.lerc.nasa.gov> Date: 9 Jan 91 14:27:27 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 66 > > These scripts (obviously) need to modify the password file /etc/passwd. The > way our system will operate it is quite possible (likely ??) that two or more > people may attempt modification at the same time with erroneous results. > > The man page for passwd(4) suggests that adequate locking MUST be performed > but gives no hint of how. There is a file /etc/.pwd.lock which is presumably > used by the passwd command. > The man page is probably suggesting that YOU enforce a locking scheme if you plan to modify the passwd file. A method which works well for us is: if [lock file exists] then exit else [create the lock file] [make a backup copy of the passwd file] [copy the password file to a temp file] [make modifications to the temp file] [disable interrupts] [replace the password file with the temp file] [remove the lock file] [enable interrupts] endif In C-Shell code: set lockfile = /etc/passwd.lock set tempfile = /etc/passwd.temp set savefile = /etc/passwd.save if (-e $lockfile) then echo "Try again later" exit else cp /dev/null $lockfile cp /etc/passwd $tempfile cp /etc/passwd $savefile [ code to modify the temp file ] # this is the critical section onintr - mv $tempfile /etc/passwd # you may want to check $status here rm $lockfile onintr endif The same thing can be done using the Bourne Shell, I don't know about perl. Be careful that you set the proper umask before you start and that the file modes are read-only. Good Luck! -- ----------------------------------------------------------------------------- Tony Facca | fsfacca@avelon.lerc.nasa.gov | phone: 216-433-8318 ----------------------------------------------------------------------------- You are at Witt's end. Passages lead off in *all* directions.