1
0

domain.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 add-user-to-group <user> <group>
  27. domain remove-user-from-group <user> <group>
  28. domain update-ip <domain> <controller> <oldip> <newip>
  29. domain flush-cache
  30. domain reload-config
  31. domain db-check-and-fix
  32. ';
  33. }
  34. case "${1}" in
  35. info)
  36. wbinfo -D CORP
  37. ;;
  38. ldapinfo)
  39. ldapsearch -b "${DOMAIN_DC}"
  40. ;;
  41. edit)
  42. ldbedit -H /var/lib/samba/private/sam.ldb "samaccountname=${2}"
  43. ;;
  44. groups)
  45. wbinfo -g
  46. ;;
  47. group)
  48. echo ""
  49. echo "Info"
  50. echo "----"
  51. wbinfo --group-info "${2}"
  52. echo ""
  53. echo "Members"
  54. echo "-------"
  55. samba-tool group listmembers "${2}"
  56. echo ""
  57. ;;
  58. users)
  59. #samba-tool user list
  60. wbinfo -u
  61. ;;
  62. user)
  63. echo ""
  64. echo "User:"
  65. echo "-----"
  66. wbinfo -i "${2}"
  67. echo ""
  68. echo "Groups:"
  69. echo "-----"
  70. GL=$(wbinfo -r "${2}" | sed 's/\r//g')
  71. for G in ${GL}; do
  72. wbinfo --gid-info "${G}"
  73. done
  74. echo ""
  75. ;;
  76. create-group)
  77. samba-tool group add "${2}"
  78. ;;
  79. delete-group)
  80. samba-tool group delete "${2}"
  81. ;;
  82. create-user)
  83. echo -n "Firstname: "
  84. read F
  85. echo -n "Lastname: "
  86. read L
  87. E="${2}@${DOMAIN_EMAIL}"
  88. samba-tool user create "${2}" --surname "${L}" --given-name "${F}" --mail-address "${E}"
  89. samba-tool user setexpiry "${2}" --noexpiry
  90. ;;
  91. delete-user)
  92. samba-tool user delete "${2}"
  93. ;;
  94. change-password)
  95. samba-tool user setpassword "${2}"
  96. ;;
  97. add-user-to-group)
  98. samba-tool group addmembers "${3}" "${2}"
  99. ;;
  100. remove-user-from-group)
  101. samba-tool group removemembers "${3}" "${2}"
  102. ;;
  103. update-ip)
  104. samba-tool dns update 127.0.0.1 ${2} ${3} A ${4} ${5} -U administrator
  105. samba-tool dns update 127.0.0.1 ${2} @ A ${4} ${5} -U administrator
  106. ;;
  107. flush-cache)
  108. net cache flush
  109. ;;
  110. reload-config)
  111. if [ -f /etc/samba/external/smb.conf ]; then
  112. cp -f /etc/samba/external/smb.conf /etc/samba/smb.conf
  113. fi
  114. net cache flush
  115. ;;
  116. db-check-and-fix)
  117. samba-tool dbcheck --cross-ncs --fix --yes
  118. ;;
  119. set-user-ssh-key)
  120. DN=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | grep ^dn: |sed 's/^dn: //g')
  121. CURKEY=$(ldbedit -H /var/lib/samba/private/sam.ldb -e cat "samaccountname=${2}" | { grep ^sshPublicKey: || true; })
  122. if [ -z "${CURKEY}" ]; then
  123. MOD="dn: ${DN}
  124. changetype: modify
  125. add: objectClass
  126. objectClass: ldapPublicKey"
  127. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  128. MOD="dn: ${DN}
  129. changetype: modify
  130. add: sshPublicKey
  131. sshPublicKey: ${3}"
  132. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  133. else
  134. MOD="dn: ${DN}
  135. changetype: modify
  136. replace: sshPublicKey
  137. sshPublicKey: ${3}"
  138. echo "${MOD}" | ldbmodify -H /var/lib/samba/private/sam.ldb
  139. fi
  140. ;;
  141. *)
  142. usage;
  143. esac