From a1a81cab227a7606b7dbb6463a9f857255b51141 Mon Sep 17 00:00:00 2001 From: Axel Kittenberger Date: Tue, 16 Nov 2010 12:03:33 +0000 Subject: [PATCH] --- examples/lgforce.lua | 81 ++++++++++++++++++++++++++++++++++++++++++++ lsyncd.lua | 2 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 examples/lgforce.lua diff --git a/examples/lgforce.lua b/examples/lgforce.lua new file mode 100644 index 0000000..39fc2d1 --- /dev/null +++ b/examples/lgforce.lua @@ -0,0 +1,81 @@ +----- +-- User configuration file for lsyncd. +-- +-- This example uses refers to a problem in unix. +-- +-- You have a shared directory for a set of users and you want +-- to ensure all users have read and write permissions on all +-- files in there. Unfortunally sometimes users mess with their +-- umask, and create files in there that are not read/write/deleteable +-- by others. Usually this involves frequent handfixes by a sysadmin, +-- or a cron job that recursively chmods/chowns the whole directory. +-- +-- This is another approach to use lsyncd to continously fix permissions. +-- +-- One second after a file is created/modified it checks for its permissions +-- and forces group permissions on it. +-- +-- This is example regards more the handcraft of bash scripting than lsyncd. +-- An alternative to this would be to load a Lua-Posix library and do the +-- permission changes right within the onAction handlers. + +-- forces this group +fgroup = "axel" + +command = +-- checks if the group is the one enforced and sets them if not +[[ +perm=`stat -c %A ^sourcePathname` +if [ `stat -c %G ^sourcePathname` != ]]..fgroup..[[ ]; then + /bin/chgrp ]]..fgroup..[[ ^sourcePathname || /bin/true; +fi +]] .. + +-- checks if the group permissions are rw and sets them +[[ +if [ `expr match $perm "....rw"` == 0 ]; then + /bin/chmod g+rw ^sourcePathname || /bin/true; +fi +]] .. + +-- and forces the executable bit for directories. +[[ +if [ -d ^sourcePathname ]; then + if [ `expr match $perm "......x"` == 0 ]; then + /bin/chmod g+x ^^sourcePathname || /bin/true; + fi +fi +]] + +-- on startup recursevily sets all group ownerships +-- all group permission to rw for all +-- and to executable for directories +-- +-- the hash in the first line is important, otherwise due to the starting +-- slash, syncd will think its a call to the binary /bin/chgrp only +-- instead of a bash script. +-- +startup = +[[# +/bin/chgrp -R ]]..fgroup..[[ ^source || /bin/true && +/bin/chmod -R g+rw ^source || /bin/true && +/usr/bin/find ^source -type d | xargs chmod g+x +]] + + +----- +-- for testing purposes. uses bash command to hold local dirs in sync. +-- +gforce = { + maxProcesses = 99, + delay = 1, + onStartup = startup, + onAttrib = command, + onCreate = command, + onModify = command, + -- does nothing on moves, they won change permissions. + onMove = true, +} + +sync{gforce, source="/path/to/share"} + diff --git a/lsyncd.lua b/lsyncd.lua index 016af70..3d9731e 100644 --- a/lsyncd.lua +++ b/lsyncd.lua @@ -1659,7 +1659,7 @@ local functionWriter = (function() local a = {{true, iv}} -- goes through all translates for _, v in ipairs(transVars) do - ai = 1 + local ai = 1 while ai <= #a do if a[ai][1] then local pre, post =