domain.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #!/usr/bin/env bash
  2. if [ -z "${DOMAIN_DC}" ] || [ -z "${DOMAIN_EMAIL}" ]; then
  3. echo 'You must have env variables set of:
  4. DOMAIN_DC="dc=corp,dc=example,dc=com"
  5. DOMAIN_EMAIL="example.com"
  6. '
  7. exit
  8. fi
  9. #--------------------------------------------
  10. function usage() {
  11. echo '
  12. Usage:
  13. domain info
  14. domain ldapinfo
  15. domain groups
  16. domain group <group>
  17. domain users
  18. domain user <user>
  19. domain create-group <group>
  20. domain delete-group <group>
  21. domain create-user <user>
  22. domain delete-user <user>
  23. domain change-password <user>
  24. domain edit <user or group>
  25. domain set-user-ssh-key <user> <pubkey>
  26. domain set-user-photo-from-file <user> <"$(base64 -w0 /path/to/img)>">
  27. domain set-user-photo-from-url <user> <url>
  28. domain add-user-to-group <user> <group>
  29. domain remove-user-from-group <user> <group>
  30. domain update-ip <domain> <controller> <oldip> <newip>
  31. domain flush-cache
  32. domain reload-config
  33. domain db-check-and-fix
  34. ';
  35. }
  36. case "${1}" in
  37. info)
  38. wbinfo -D "$(wbinfo --own-domain)"
  39. ;;
  40. ldapinfo)
  41. ldapsearch -b "${DOMAIN_DC}"
  42. ;;
  43. edit)
  44. ldbedit -H /var/lib/samba/private/sam.ldb "samaccountname=${2}"
  45. ;;
  46. groups)
  47. wbinfo -g
  48. ;;
  49. group)
  50. echo ""
  51. echo "Info"
  52. echo "----"
  53. wbinfo --group-info "${2}"
  54. echo ""
  55. echo "Members"
  56. echo "-------"
  57. samba-tool group listmembers "${2}"
  58. echo ""
  59. ;;
  60. users)
  61. #samba-tool user list
  62. wbinfo -u
  63. ;;
  64. user)
  65. echo ""
  66. echo "User:"
  67. echo "-----"
  68. wbinfo -i "${2}"
  69. echo ""
  70. echo "Groups:"
  71. echo "-----"
  72. GL=$(wbinfo -r "${2}" | sed 's/\r//g')
  73. for G in ${GL}; do
  74. wbinfo --gid-info "${G}"
  75. done
  76. echo ""
  77. ;;
  78. create-group)
  79. samba-tool group add "${2}"
  80. ;;
  81. delete-group)
  82. samba-tool group delete "${2}"
  83. ;;
  84. create-user)
  85. echo -n "Firstname: "
  86. read F
  87. echo -n "Lastname: "
  88. read L
  89. E="${2}@${DOMAIN_EMAIL}"
  90. samba-tool user create "${2}" --surname "${L}" --given-name "${F}" --mail-address "${E}"
  91. samba-tool user setexpiry "${2}" --noexpiry
  92. ;;
  93. delete-user)
  94. samba-tool user delete "${2}"
  95. ;;
  96. change-password)
  97. samba-tool user setpassword "${2}"
  98. ;;
  99. add-user-to-group)
  100. samba-tool group addmembers "${3}" "${2}" --object-types=user
  101. ;;
  102. remove-user-from-group)
  103. samba-tool group removemembers "${3}" "${2}" --object-types=user
  104. ;;
  105. update-ip)
  106. samba-tool dns update 127.0.0.1 ${2} ${3} A ${4} ${5} -U administrator
  107. samba-tool dns update 127.0.0.1 ${2} @ A ${4} ${5} -U administrator
  108. ;;
  109. flush-cache)
  110. net cache flush
  111. ;;
  112. reload-config)
  113. if [ -f /etc/samba/external/smb.conf ]; then
  114. cp -f /etc/samba/external/smb.conf /etc/samba/smb.conf
  115. fi
  116. net cache flush
  117. ;;
  118. db-check-and-fix)
  119. samba-tool dbcheck --cross-ncs --fix --yes
  120. ;;
  121. set-user-ssh-key)
  122. DN=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | grep ^dn: |sed 's/^dn: //g')
  123. CURKEY=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | { grep ^sshPublicKey: || true; })
  124. if [ -z "${CURKEY}" ]; then
  125. MOD="dn: ${DN}
  126. changetype: modify
  127. add: objectClass
  128. objectClass: ldapPublicKey"
  129. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  130. MOD="dn: ${DN}
  131. changetype: modify
  132. add: sshPublicKey
  133. sshPublicKey: ${3}"
  134. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  135. else
  136. MOD="dn: ${DN}
  137. changetype: modify
  138. replace: sshPublicKey
  139. sshPublicKey: ${3}"
  140. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  141. fi
  142. ;;
  143. set-user-photo-from-file)
  144. DN=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | grep ^dn: |sed 's/^dn: //g')
  145. CURPHOTO=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | { grep ^jpegPhoto: || true; })
  146. if [ -z "${CURPHOTO}" ]; then
  147. MOD="dn: ${DN}
  148. changetype: modify
  149. add: jpegPhoto
  150. jpegPhoto::${3}"
  151. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  152. else
  153. MOD="dn: ${DN}
  154. changetype: modify
  155. replace: jpegPhoto
  156. jpegPhoto::${3}"
  157. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  158. fi
  159. ;;
  160. set-user-photo-from-url)
  161. DN=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | grep ^dn: |sed 's/^dn: //g')
  162. CURPHOTO=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | { grep ^jpegPhoto: || true; })
  163. B64=$(curl -s "${3}" |base64 -w0)
  164. if [ -z "${CURPHOTO}" ]; then
  165. MOD="dn: ${DN}
  166. changetype: modify
  167. add: jpegPhoto
  168. jpegPhoto::${B64}"
  169. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  170. else
  171. MOD="dn: ${DN}
  172. changetype: modify
  173. replace: jpegPhoto
  174. jpegPhoto::${B64}"
  175. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  176. fi
  177. ;;
  178. *)
  179. usage;
  180. esac