fix-attrs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/execlineb -P
  2. /bin/export PATH /usr/bin:/bin
  3. /bin/export recfunction "\
  4. foreground { s6-chown -u ${3} -g ${4} -- ${1} }
  5. foreground
  6. {
  7. ifelse { s6-test -d ${1} }
  8. {
  9. if -t { s6-test ! ${6} = "-" }
  10. s6-chmod ${6} ${1}
  11. }
  12. if -t { s6-test ! ${5} = "-" }
  13. s6-chmod ${5} ${1}
  14. }
  15. if -t { if { s6-${2} } s6-test -d ${1} }
  16. forbacktickx -0 subfile
  17. {
  18. backtick -D 0 -n S6_FIX_ATTRS_HIDDEN { printcontenv S6_FIX_ATTRS_HIDDEN }
  19. importas S6_FIX_ATTRS_HIDDEN S6_FIX_ATTRS_HIDDEN
  20. ifelse { s6-test ${S6_FIX_ATTRS_HIDDEN} -eq 0 } { s6-ls -0 ${1} }
  21. s6-ls -0 -a ${1}
  22. }
  23. multisubstitute
  24. {
  25. importas -u subfile subfile
  26. importas recfunction recfunction
  27. }
  28. execlineb -S6 -c ${recfunction} ${1}/${subfile} true ${3} ${4} ${5} ${6}"
  29. # process each line
  30. forstdin -d"\n" -- line
  31. importas -u line line
  32. if { s6-test -n ${line} }
  33. multidefine -0 -Cd" \t" -- ${line} { globex recurse userentry fmode dmode }
  34. # get 'uid' and 'gid'
  35. multidefine -Cd"," -- ${userentry} { account uidgid }
  36. backtick -n envuidgid_opts
  37. {
  38. backtick -n opts
  39. {
  40. ifte { s6-echo -- -D${uidgid} } { s6-echo -- -i }
  41. s6-test -n ${uidgid}
  42. }
  43. importas -u opts opts
  44. ifte { s6-echo -- -nB ${opts} } { s6-echo -- ${opts} }
  45. pipeline { s6-echo ${account} }
  46. if
  47. {
  48. redirfd -w 1 /dev/null
  49. fdmove -c 2 1
  50. s6-grep -- ":"
  51. }
  52. }
  53. importas -u -sCd" \t" envuidgid_opts envuidgid_opts
  54. s6-envuidgid ${envuidgid_opts} ${account}
  55. importas -u uid UID
  56. importas -u gid GID
  57. elglob -0 -- files ${globex}
  58. forx -p -- file { ${files} }
  59. multisubstitute
  60. {
  61. importas -u file file
  62. importas recfunction recfunction
  63. }
  64. execlineb -S6 -c ${recfunction} ${file} ${recurse} ${uid} ${gid} ${fmode} ${dmode}