fix dns_loopia wildcard certificate
Checks if a subdomain already exists before creating one. The loopia API clears all records for a subdomain when adding it again. Adding TXT-records instead of updating the existing record when using the add method. Wildcard certificates require multiple TXT-records for the same subdomain. Now you can create wildcard certificates using: `acme.sh --issue -d example.com -d '*.example.com' --dns dns_loopia` Double quoting variablespull/2003/head
							parent
							
								
									c9baca7910
								
							
						
					
					
						commit
						40f0238bb7
					
				| 
						 | 
					@ -38,8 +38,8 @@ dns_loopia_add() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _info "Adding record"
 | 
					  _info "Adding record"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _loopia_add_record "$_domain" "$_sub_domain"
 | 
					  _loopia_add_sub_domain "$_domain" "$_sub_domain"
 | 
				
			||||||
  _loopia_update_record "$_domain" "$_sub_domain" "$txtvalue"
 | 
					  _loopia_add_record "$_domain" "$_sub_domain" "$txtvalue"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,6 +96,37 @@ dns_loopia_rm() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
####################  Private functions below ##################################
 | 
					####################  Private functions below ##################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_loopia_get_records() {
 | 
				
			||||||
 | 
					  domain=$1
 | 
				
			||||||
 | 
					  sub_domain=$2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					  <methodCall>
 | 
				
			||||||
 | 
					    <methodName>getZoneRecords</methodName>
 | 
				
			||||||
 | 
					    <params>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					    </params>
 | 
				
			||||||
 | 
					  </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
 | 
				
			||||||
 | 
					  if ! _contains "$response" "<array>"; then
 | 
				
			||||||
 | 
					    _err "Error"
 | 
				
			||||||
 | 
					    return 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_get_root() {
 | 
					_get_root() {
 | 
				
			||||||
  domain=$1
 | 
					  domain=$1
 | 
				
			||||||
  _debug "get root"
 | 
					  _debug "get root"
 | 
				
			||||||
| 
						 | 
					@ -137,14 +168,14 @@ _get_root() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_loopia_update_record() {
 | 
					_loopia_add_record() {
 | 
				
			||||||
  domain=$1
 | 
					  domain=$1
 | 
				
			||||||
  sub_domain=$2
 | 
					  sub_domain=$2
 | 
				
			||||||
  txtval=$3
 | 
					  txtval=$3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
					  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
  <methodCall>
 | 
					  <methodCall>
 | 
				
			||||||
    <methodName>updateZoneRecord</methodName>
 | 
					    <methodName>addZoneRecord</methodName>
 | 
				
			||||||
    <params>
 | 
					    <params>
 | 
				
			||||||
      <param>
 | 
					      <param>
 | 
				
			||||||
        <value><string>%s</string></value>
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
| 
						 | 
					@ -176,10 +207,6 @@ _loopia_update_record() {
 | 
				
			||||||
            <name>rdata</name>
 | 
					            <name>rdata</name>
 | 
				
			||||||
            <value><string>%s</string></value>
 | 
					            <value><string>%s</string></value>
 | 
				
			||||||
          </member>
 | 
					          </member>
 | 
				
			||||||
          <member>
 | 
					 | 
				
			||||||
            <name>record_id</name>
 | 
					 | 
				
			||||||
            <value><int>0</int></value>
 | 
					 | 
				
			||||||
          </member>
 | 
					 | 
				
			||||||
        </struct>
 | 
					        </struct>
 | 
				
			||||||
      </param>
 | 
					      </param>
 | 
				
			||||||
    </params>
 | 
					    </params>
 | 
				
			||||||
| 
						 | 
					@ -194,10 +221,42 @@ _loopia_update_record() {
 | 
				
			||||||
  return 0
 | 
					  return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_loopia_add_record() {
 | 
					_sub_domain_exists() {
 | 
				
			||||||
  domain=$1
 | 
					  domain=$1
 | 
				
			||||||
  sub_domain=$2
 | 
					  sub_domain=$2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					  <methodCall>
 | 
				
			||||||
 | 
					    <methodName>getSubdomains</methodName>
 | 
				
			||||||
 | 
					    <params>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					      <param>
 | 
				
			||||||
 | 
					        <value><string>%s</string></value>
 | 
				
			||||||
 | 
					      </param>
 | 
				
			||||||
 | 
					    </params>
 | 
				
			||||||
 | 
					  </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if _contains "$response" "$sub_domain"; then
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_loopia_add_sub_domain() {
 | 
				
			||||||
 | 
					  domain=$1
 | 
				
			||||||
 | 
					  sub_domain=$2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if _sub_domain_exists "$domain" "$sub_domain"; then
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
					  xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
  <methodCall>
 | 
					  <methodCall>
 | 
				
			||||||
    <methodName>addSubdomain</methodName>
 | 
					    <methodName>addSubdomain</methodName>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue