Programación correcta. Como modificar /etc/passwd/ adecuadamente.

Roberto Jimeno jimeno@pc6.politicas.unam.mx
Mon, 9 Feb 1998 13:56:05 -0600


	¿Cual es la manera _correcta_ de que un programa lea o escriba
en /etc/passwd?

	Esta duda se debe a lo siguiente:

	Estoy terminando de escribir un programa (para labores de
mantenimiento de mis usuarios) que lee tanto /etc/group como
/etc/passwd y algunos directorios y archivos debajo de /home/; y tras
hacer algunas verificaciones y modificaciones en los homes de los
usuarios, modifica información en dos de los campos de la tabla de
passwords de algunos de los usuarios.

	Por lo pronto escribí ese programita en perl y la manera en
que modifico la tabla de passwords es:

	1.- Leo todo lo que necesito y lo pongo en una estructura en
memoria.
	2.- Hago todas las modificaciones que necesito en memoria.
	3.- Vacio esa estructura a una archivo temporal que será la
futura tabla de passwords, ya con todas las modificaciones incluidas.
	4.- Renombro (muevo, o como quieran llamarle) ese archivo
temporal para que ahora se llama /etc/passwd

	Este esquema ha funcionado bien, pero se que tiene fallas, y
una de las más importantes es la de que cuando el programa está
corriendo, pasan varios minutos entre los pasos 1.- y 4.- y si en ese
periódo alguno de los usuarios usa los comandos passwd o chfn para
cambiar su información en la tabla de passwords, entonces esos cambios
se pierden al renombrar el "nuevo" /etc/passwd.

	¿La manera correcta de hacer esto es usar locks?,
	¿Deberían esos locks ser solo para escritura, o también para
lectura?,
	¿Debería ese programa verificar que el usuario no esté en
sesión (o impedir que el usuario esté en sesión) para atreverse a leer
y modificar el archivo?,
	¿Como debo escribirlo en linux de modo que mi código sea lo
más portable que se pueda?,
	¿Que puedo leer al respecto (de preferencia algo más light o
más "to the point" que el de R. Stevens: "Esential UNIX programming")?

							Muchas gracias.
-- 
-------------------------------------------------------------------------------
Roberto Jimeno.       From The Cher-Speak Dictionary for the totally clueless:
loa.die (LO DE), n. 1. drug abusers. 2. acquaintances who you might party with but wouldn't want to be one of.