mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
6.2 KiB

  1. # --- ROCK-COPYRIGHT-NOTE-BEGIN ---
  2. #
  3. # This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  4. # Please add additional copyright information _after_ the line containing
  5. # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
  6. # the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
  7. #
  8. # ROCK Linux: rock-src/package/blindcoder/ezipupdate/mod_ezipupdate.sh
  9. # ROCK Linux is Copyright (C) 1998 - 2005 Clifford Wolf
  10. #
  11. # This program is free software; you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation; either version 2 of the License, or
  14. # (at your option) any later version. A copy of the GNU General Public
  15. # License can be found at Documentation/COPYING.
  16. #
  17. # Many people helped and are helping developing ROCK Linux. Please
  18. # have a look at http://www.rocklinux.org/ and the Documentation/TEAM
  19. # file for details.
  20. #
  21. # --- ROCK-COPYRIGHT-NOTE-END ---
  22. #
  23. # [MAIN] 20 user User and Group management
  24. user_edit_user_change_shell() { # {{{
  25. IFS=: read username haspwd uid gid desc home shell < <( grep ^${1}: /etc/passwd )
  26. cmd="'Do not change' 'shell=${shell}'"
  27. while read validshell ; do
  28. cmd="${cmd} '${validshell}' 'shell=${validshell}'"
  29. done < /etc/shells
  30. eval "gui_menu user_edit_user_change_shell 'Change login shell for ${username}' ${cmd}"
  31. } # }}}
  32. user_edit_user() { # {{{
  33. IFS=: read username haspwd uid gid desc home shell < <( grep ^${1}: /etc/passwd )
  34. read oldline < <( grep ^${1}: /etc/passwd )
  35. run=0
  36. while [ ${run} -eq 0 ] ; do
  37. cmd="'Login: ${username}' 'gui_input \"Enter new login for ${username}\" \"${username}\" username'"
  38. cmd="${cmd} 'Has a password: $( [ -n "${haspwd}" ] && echo "yes" || echo "no" )' 'gui_yesno \"Must ${username} supply a password to login?\" && haspwd=x || unset haspwd'"
  39. cmd="${cmd} 'User ID: ${uid}' 'gui_input \"Enter new user ID for ${username}\" \"${uid}\" uid'"
  40. cmd="${cmd} 'Group ID: ${gid}' 'gui_input \"Enter new primary group ID for ${username}\" \"${gid}\" gid'"
  41. cmd="${cmd} 'Long description: ${desc}' 'gui_input \"Enter new descryption for ${username}\" \"${desc}\" desc'"
  42. cmd="${cmd} 'Home directory: ${home}' 'gui_input \"Enter new home directory for ${username}\" \"${home}\" home'"
  43. cmd="${cmd} 'Shell: ${shell}' 'user_edit_user_change_shell ${username}'"
  44. cmd="${cmd} 'Set new password' 'passwd \"${username}\" ; read -p \"Press -<Return>- to continue\"'"
  45. eval "gui_menu user_edit_user 'Manage account ${username}' ${cmd}"
  46. run=${?}
  47. done
  48. sed -i /etc/passwd -e "s,^${oldline}$,${username}:${haspwd}:${uid}:${gid}:${desc}:${home}:${shell},"
  49. } # }}}
  50. user_add_user() { # {{{
  51. unset username haspwd uid gid desc home shell
  52. while [ -z "${username}" ] ; do
  53. gui_input "Enter new username" "" username || return
  54. if grep -q ^${username}: /etc/passwd ; then
  55. gui_message "Username ${username} already exists!"
  56. unset username
  57. fi
  58. done
  59. gui_yesno "Does ${username} need a password to log in?" && haspwd=x
  60. uid=0
  61. while IFS=: read a a id a ; do
  62. [ ${uid} -lt ${id} ] && uid=${id}
  63. done < <( grep -v ^nobody: /etc/passwd )
  64. uid=$(( ${uid} + 1 ))
  65. gui_input "Enter new User ID" "${uid}" uid || return
  66. IFS=: read a a gid a < <( grep ^users: /etc/group )
  67. gui_input "Enter new Group ID" "${gid:-100}" gid || return
  68. gui_input "Enter new User Description" "" desc || return
  69. gui_input "Enter home directory" "/home/${username}" home || return
  70. gui_input "Enter new shell" "/bin/bash" shell || return
  71. tmp="`mktemp`"
  72. useradd -u "${uid}" -g "${gid}" -p "${haspwd}" -d "${home}" -m -s "${shell}" \
  73. -c "${desc}" "${username}" >${tmp} 2>&1 || \
  74. gui_message "Error creating user: `cat ${tmp}`"
  75. rm "${tmp}"
  76. } # }}}
  77. user_edit_group_members() { # {{{
  78. IFS=: read groupname haspwd gid members < <( grep ^${1}: /etc/group )
  79. run=0
  80. members=" ${members//,/ } "
  81. while [ ${run} -eq 0 ] ; do
  82. cmd=""
  83. while read x ; do
  84. if [[ ${members} == *\ ${x}\ * ]] ; then
  85. cmd="${cmd} '[X] ${x}' 'members=\${members// ${x} / }'"
  86. else
  87. cmd="${cmd} '[ ] ${x}' 'members=\"\${members} ${x} \"'"
  88. fi
  89. done < <( cut -f 1 -d: /etc/passwd )
  90. eval "gui_menu user_edit_group_members 'Manage Members of group ${groupname}' ${cmd}"
  91. run=${?}
  92. done
  93. echo ${members} >&2
  94. } # }}}
  95. user_edit_group() { # {{{
  96. IFS=:, read groupname haspwd gid members < <( grep ^${1}: /etc/group )
  97. read oldline < <( grep ^${1}: /etc/group )
  98. run=0
  99. while [ ${run} -eq 0 ] ; do
  100. cmd="'Group name: ${groupname}' 'gui_input \"Enter new group name\" \"${groupname}\" groupname'"
  101. cmd="${cmd} 'Group ID: ${gid}' 'gui_input \"Enter new group ID\" \"${gid}\" gid'"
  102. memb="${members:0:25}"
  103. [ -n "${members:25}" ] && memb="${memb}..."
  104. cmd="${cmd} 'Members: ${memb}' 'exec 3>&2 ; members=\`user_edit_group_members ${groupname} 2>&1 1>&3\`'"
  105. # fake says this line is unmaintainable. I say it's not. Anyway:
  106. # I modify the variable members from within the function user_edit_group_members
  107. # that's all :)
  108. eval "gui_menu user_edit_group 'Manage group ${groupname}' ${cmd}"
  109. run=${?}
  110. done
  111. sed -i /etc/group -e "s/^${oldline}$/${groupname}:${haspwd}:${gid}:${members// /,}/"
  112. } # }}}
  113. user_add_group() { # {{{
  114. unset groupname gid
  115. while [ -z "${groupname}" ] ; do
  116. gui_input "Enter new Group Name" "" groupname || return
  117. if grep -q "^${groupname}:" /etc/group ; then
  118. gui_message "Group ${groupname} already exists!"
  119. unset groupname
  120. fi
  121. done
  122. gid=0
  123. while IFS=: read a a id a ; do
  124. [ ${gid} -lt ${id} ] && gid=${id}
  125. done < <( grep -v ^nobody: /etc/passwd | grep -v ^nogroup: )
  126. gid=$(( ${gid} + 1 ))
  127. gui_input "Enter new Group ID" "${gid}" gid || return
  128. tmp="`mktemp`"
  129. groupadd -g "${gid}" "${groupname}" > ${tmp} 2>&1 || \
  130. gui_message "Error creating group: `cat ${tmp}`"
  131. rm "${tmp}"
  132. } # }}}
  133. main() { # {{{
  134. run=0
  135. while [ ${run} -eq 0 ] ; do
  136. cmd="'User Managemeint' ''"
  137. while IFS=: read username haspwd uid gid desc home shell ; do
  138. cmd="${cmd} '${desc:-No description} (${username})' 'user_edit_user ${username}'"
  139. done < /etc/passwd
  140. cmd="${cmd} 'Add new user' 'user_add_user' '' ''"
  141. cmd="${cmd} 'Group Management' ''"
  142. while IFS=: read groupname haspwd gid members ; do
  143. cmd="${cmd} '${groupname}' 'user_edit_group ${groupname}'"
  144. done < /etc/group
  145. cmd="${cmd} 'Add new group' 'user_add_group'"
  146. eval "gui_menu user 'User and Group management' ${cmd}"
  147. run=${?}
  148. done
  149. } # }}}