2

電子メール アドレスを SOA レコード (およびその逆) の RNAME フィールドにマッピングするための既存/標準のアルゴリズムはありますか? dnspythonパッケージを使用していますが、ソース ツリーにこれを処理するものは何もありません。ピリオド「。」があるというエッジケースに遭遇しました。エスケープする必要があるユーザー名で、私が見逃している他のエッジケースがあるかどうか疑問に思っています。 RFC 1035は単に次のように述べています。

このゾーンの責任者のメールボックスを指定する <domain-name>。

1035 を更新する RFC はどれも、 RFC 1183での簡単な言及を除いて、RNAME フィールドを拡張しません。

4

1 に答える 1

2

dnspythonを使用して思いついたものは次のとおりです。

from dns.name import from_text


def email_to_rname(email):
    """Convert standard email address into RNAME field for SOA record.

    >>> email_to_rname('johndoe@example.com')
    <DNS name johndoe.example.com.>
    >>> email_to_rname('john.doe@example.com')
    <DNS name john\.doe.example.com.>
    >>> print email_to_rname('johndoe@example.com')
    johndoe.example.com.
    >>> print email_to_rname('john.doe@example.com')
    john\.doe.example.com.

    """
    username, domain = email.split('@', 1)
    username = username.replace('.', '\\.')  # escape . in username
    return from_text('.'.join((username, domain)))


def rname_to_email(rname):
    """Convert SOA record RNAME field into standard email address.

    >>> rname_to_email(from_text('johndoe.example.com.'))
    'johndoe@example.com'
    >>> rname_to_email(from_text('john\\.doe.example.com.'))
    'john.doe@example.com'
    >>> rname_to_email(email_to_rname('johndoe@example.com'))
    'johndoe@example.com'
    >>> rname_to_email(email_to_rname('john.doe@example.com'))
    'john.doe@example.com'

    """
    labels = list(rname)
    username, domain = labels[0], '.'.join(labels[1:]).rstrip('.')
    username = username.replace('\\.', '.')  # unescape . in username
    return '@'.join((username, domain))
于 2012-08-20T20:45:49.700 に答える