rfa 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #!/bin/bash
  2. # Config file name
  3. rfa_conf=/etc/repoforge/rfa.conf
  4. # Defaults for rfa.conf
  5. group_gid_min=3000
  6. group_w_prefix=svn_w-
  7. group_r_prefix=svn_r-
  8. repository_root=
  9. repository_link=
  10. # Options
  11. opts_force=0
  12. todo=""
  13. # Echo help information
  14. usage()
  15. {
  16. echo "Usage: "`basename $0`" [options] <command> <parameters>"
  17. echo "Tool for VCS repository administration. Now supports" \
  18. "Subversion only."
  19. printf "Options:\n"
  20. printf "\t-h, --help\n"
  21. printf "\t\tPrint help message.\n"
  22. printf "Commands:\n"
  23. printf "\tadd <repository1> [repository2] ...\n"
  24. printf "\t\tCreate new repository.\n"
  25. printf "\tdel <repository1> [repository2] ...\n"
  26. printf "\t\tDelete existing repository.\n"
  27. printf "\tfixmod <repository1> [repository2] ...\n"
  28. printf "\t\tFix access rights for repository.\n"
  29. printf "\tuseradd <repository> <r/w/rw> <user1> [user2] ...\n"
  30. printf "\t\tSet access rights for user(s) to repository.\n"
  31. printf "\tuserdel <repository> <r/w/rw> <user1> [user2] ...\n"
  32. printf "\t\tRemove access rights for user(s) to repository.\n"
  33. }
  34. group_add()
  35. {
  36. groupadd -K GID_MIN=${group_gid_min} ${group_r_prefix}$1
  37. groupadd -K GID_MIN=${group_gid_min} ${group_w_prefix}$1
  38. }
  39. group_del()
  40. {
  41. groupdel ${group_r_prefix}$1
  42. groupdel ${group_w_prefix}$1
  43. }
  44. svn_add()
  45. {
  46. repository_name=$1
  47. repo_r=${repository_root}/${repository_name}
  48. repo_w=${repository_root}/${repository_name}/${repository_name}
  49. mkdir ${repo_r}
  50. saved_umask=`umask`
  51. umask 002
  52. svnadmin --fs-type=fsfs create ${repo_w}
  53. umask ${saved_umask}
  54. }
  55. svn_fixmod()
  56. {
  57. repository_name=$1
  58. repo_r=${repository_root}/${repository_name}
  59. repo_w=${repository_root}/${repository_name}/${repository_name}
  60. chmod 750 ${repo_r}
  61. chgrp ${group_r_prefix}${repository_name} ${repo_r}
  62. chgrp -R ${group_w_prefix}${repository_name} ${repo_w}
  63. dirs=`find ${repo_w} -type d`
  64. for dir in $dirs; do
  65. chmod g+s $dir
  66. done
  67. chmod -R g+w ${repo_w}
  68. }
  69. svn_del()
  70. {
  71. rm -Rf ${repository_root}/$1
  72. }
  73. link_add()
  74. {
  75. ln -s ${repository_root}/$1/$1 ${repository_link}/$1
  76. }
  77. link_del()
  78. {
  79. rm -f ${repository_link}/$1
  80. }
  81. repository_add()
  82. {
  83. for rep_name in "$@"; do
  84. group_add $rep_name
  85. svn_add $rep_name
  86. svn_fixmod $rep_name
  87. link_add $rep_name
  88. done
  89. }
  90. repository_fixmod()
  91. {
  92. for rep_name in "$@"; do
  93. svn_fixmod $rep_name
  94. done
  95. }
  96. repository_del()
  97. {
  98. for rep_name in "$@"; do
  99. link_del $rep_name
  100. svn_del $rep_name
  101. group_del $rep_name
  102. done
  103. }
  104. user_add()
  105. {
  106. w=0
  107. r=0
  108. repository_name=$1
  109. shift
  110. case "$1" in
  111. r)
  112. r=1
  113. ;;
  114. w)
  115. w=1
  116. ;;
  117. rw|wr)
  118. r=1
  119. w=1
  120. ;;
  121. *)
  122. echo "Illegal parameter $1"
  123. exit -1
  124. ;;
  125. esac
  126. shift
  127. for user_name in "$@"; do
  128. if [ $r -ne 0 ]; then
  129. adduser ${user_name} ${group_r_prefix}${repository_name}
  130. fi
  131. if [ $w -ne 0 ]; then
  132. adduser ${user_name} ${group_w_prefix}${repository_name}
  133. fi
  134. done
  135. }
  136. user_del()
  137. {
  138. w=0
  139. r=0
  140. repository_name=$1
  141. shift
  142. case "$1" in
  143. r)
  144. r=1
  145. ;;
  146. w)
  147. w=1
  148. ;;
  149. rw|wr)
  150. r=1
  151. w=1
  152. ;;
  153. *)
  154. echo "Illegal parameter $1"
  155. exit -1
  156. ;;
  157. esac
  158. shift
  159. for user_name in "$@"; do
  160. if [ $r -ne 0 ]; then
  161. deluser ${user_name} ${group_r_prefix}${repository_name}
  162. fi
  163. if [ $w -ne 0 ]; then
  164. deluser ${user_name} ${group_w_prefix}${repository_name}
  165. fi
  166. done
  167. }
  168. # Parse command line options
  169. cmd_options=$(getopt -o "+hfl:" -l help,force,level -- "$@")
  170. if test "$?" != 0; then
  171. usage
  172. exit 1
  173. fi
  174. eval set -- ${cmd_options}
  175. while test "$1" != "--"; do
  176. case "$1" in
  177. -h|--help)
  178. usage
  179. exit 0
  180. ;;
  181. -f|--force)
  182. opts_force=1
  183. ;;
  184. -l|--level)
  185. shift
  186. level=$1
  187. ;;
  188. *)
  189. ;;
  190. esac
  191. shift
  192. done
  193. shift
  194. . $rfa_conf
  195. if [ $# -lt 1 ]; then
  196. echo "Command is expected"
  197. exit -1
  198. fi
  199. case "$1" in
  200. "help")
  201. usage
  202. exit 0
  203. ;;
  204. "add")
  205. if [ $# -lt 2 ]; then
  206. echo "Repository name is expected"
  207. exit -1
  208. fi
  209. shift
  210. repository_add "$@"
  211. ;;
  212. "fixmod")
  213. if [ $# -lt 2 ]; then
  214. echo "Repository name is expected"
  215. exit -1
  216. fi
  217. shift
  218. repository_fixmod "$@"
  219. ;;
  220. "del")
  221. if [ $# -lt 2 ]; then
  222. echo "Repository name is expected"
  223. exit -1
  224. fi
  225. shift
  226. repository_del "$@"
  227. ;;
  228. "adduser"|"useradd")
  229. if [ $# -lt 4 ]; then
  230. echo "Not enought parameters"
  231. exit -1
  232. fi
  233. shift
  234. user_add "$@"
  235. ;;
  236. "deluser"|"userdel")
  237. if [ $# -lt 4 ]; then
  238. echo "Not enought parameters"
  239. exit -1
  240. fi
  241. shift
  242. user_del "$@"
  243. ;;
  244. *)
  245. echo "Unknown command"
  246. exit -1
  247. ;;
  248. esac
  249. exit 0