Adnan RIHAN
1 year ago
No known key found for this signature in database
GPG Key ID: F3306402D4335C63
1 changed files with 130 additions and 0 deletions
@ -0,0 +1,130 @@ |
|||
#!/usr/bin/env sh |
|||
|
|||
# Samba AD DC |
|||
# |
|||
# `samba-tool` binary is necessary. |
|||
# On Debian, it can be installed with `apt-get install samba-common-bin` |
|||
# |
|||
# Then the following environment variable will need to be set: |
|||
# SAMBA_HOST="dc1.example.com" |
|||
# SAMBA_USER="Administrator" |
|||
# SAMBA_PASS="fzaoiv23RGgqg" |
|||
|
|||
# Author: Adnan RIHAN <adnan@rihan.fr> |
|||
# Report Bugs here: https://github.com/acmesh-official/acme.sh/issues/4852 |
|||
# |
|||
######## Public functions ##################### |
|||
# |
|||
# Usage: dns_samba_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" |
|||
|
|||
dns_samba_add() { |
|||
_debug 'Checking if `samba-tool` is available' |
|||
if ! _exists samba-tool; then |
|||
_err "samba-tool could not be found. Please install samba-common-bin" |
|||
return 1 |
|||
fi |
|||
|
|||
fulldomain=$1 |
|||
txtvalue=$2 |
|||
|
|||
SAMBA_HOST="${SAMBA_HOST:-$(_readaccountconf_mutable SAMBA_HOST)}" |
|||
SAMBA_USER="${SAMBA_USER:-$(_readaccountconf_mutable SAMBA_USER)}" |
|||
SAMBA_PASS="${SAMBA_PASS:-$(_readaccountconf_mutable SAMBA_PASS)}" |
|||
|
|||
if [ -z "$SAMBA_HOST" ] || [ -z "$SAMBA_USER" ] || [ -z "$SAMBA_PASS" ]; then |
|||
SAMBA_HOST="" |
|||
SAMBA_USER="" |
|||
SAMBA_PASS="" |
|||
_err "You must specify a Samba host, username and password." |
|||
return 1 |
|||
fi |
|||
|
|||
# save the credentials to the account conf file. |
|||
_saveaccountconf_mutable SAMBA_HOST "$SAMBA_HOST" |
|||
_saveaccountconf_mutable SAMBA_USER "$SAMBA_USER" |
|||
_saveaccountconf_mutable SAMBA_PASS "$SAMBA_PASS" |
|||
|
|||
if ! _get_zone $fulldomain; then |
|||
return 1 |
|||
fi |
|||
|
|||
_debug "Adding \"$_subdomain\" = \"$txtvalue\" to $_zone" |
|||
if ! samba-tool dns add "$SAMBA_HOST" "$_zone" "$_subdomain" TXT "$txtvalue" --username="$SAMBA_USER" --password="$SAMBA_PASS" 2>/dev/null; then |
|||
_err "Couldn't add TXT field" |
|||
return 1 |
|||
fi |
|||
} |
|||
|
|||
# Usage: fulldomain txtvalue |
|||
# Remove the txt record after validation. |
|||
dns_samba_rm() { |
|||
_debug 'Checking if `samba-tool` is available' |
|||
if ! _exists samba-tool; then |
|||
_err "samba-tool could not be found. Please install samba-common-bin" |
|||
exit 1 |
|||
fi |
|||
|
|||
fulldomain=$1 |
|||
txtvalue=$2 |
|||
|
|||
SAMBA_HOST="${SAMBA_HOST:-$(_readaccountconf_mutable SAMBA_HOST)}" |
|||
SAMBA_USER="${SAMBA_USER:-$(_readaccountconf_mutable SAMBA_USER)}" |
|||
SAMBA_PASS="${SAMBA_PASS:-$(_readaccountconf_mutable SAMBA_PASS)}" |
|||
|
|||
if [ -z "$SAMBA_HOST" ] || [ -z "$SAMBA_USER" ] || [ -z "$SAMBA_PASS" ]; then |
|||
SAMBA_HOST="" |
|||
SAMBA_USER="" |
|||
SAMBA_PASS="" |
|||
_err "You must specify a Samba host, username and password." |
|||
return 1 |
|||
fi |
|||
|
|||
# save the credentials to the account conf file. |
|||
_saveaccountconf_mutable SAMBA_HOST "$SAMBA_HOST" |
|||
_saveaccountconf_mutable SAMBA_USER "$SAMBA_USER" |
|||
_saveaccountconf_mutable SAMBA_PASS "$SAMBA_PASS" |
|||
|
|||
if ! _get_zone $fulldomain; then |
|||
return 1 |
|||
fi |
|||
|
|||
_debug "Removing \"$_subdomain\" = \"$txtvalue\" from $_zone" |
|||
if ! samba-tool dns delete "$SAMBA_HOST" "$_zone" "$_subdomain" TXT "$txtvalue" --username="$SAMBA_USER" --password="$SAMBA_PASS" 2>/dev/null; then |
|||
_info "Couldn't remove TXT field, may be non existant. Ignoring error." |
|||
fi |
|||
} |
|||
|
|||
#################### Private functions below ################################## |
|||
|
|||
_get_zone() { |
|||
_fulldomain=$1 |
|||
|
|||
_debug 'Retrieving samba zonelist' |
|||
_subdomain="" |
|||
_zone="" |
|||
if ! _zones=$(samba-tool dns zonelist "$SAMBA_HOST" --username="$SAMBA_USER" --password="$SAMBA_PASS" 2>/dev/null | grep pszZoneName | cut -d: -f2 | sed 's/ //g'); then |
|||
_err "Couldn't contact Samba AD DC host" |
|||
return 1 |
|||
fi |
|||
|
|||
_debug 'Loop in zonelist to find the correct zone:' |
|||
for z in $_zones; do |
|||
_debug " Checking \"$z\" against \"$_fulldomain\"" |
|||
if _endswith "$_fulldomain" ".$z"; then |
|||
_debug " Found! \"$_fulldomain\" ends with \".$z\"" |
|||
_zone=$z |
|||
_subdomain=${fulldomain%.$z} |
|||
break |
|||
elif [ "$_fulldomain" = "$z" ]; then |
|||
_debug " Found! \"$_fulldomain\" == \"$z\"" |
|||
_zone=$z |
|||
_subdomain="@" |
|||
break |
|||
fi |
|||
done |
|||
|
|||
if [ -z "$_zone" ]; then |
|||
_err "Can't find a corresponding zone for this domain" |
|||
return 1 |
|||
fi |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue