@@ -71,8 +71,14 @@ func modifyChange(change *endpoint.Endpoint) {
7171func getStackitRecordSetPayload (change * endpoint.Endpoint ) stackitdnsclient.CreateRecordSetPayload {
7272 records := make ([]stackitdnsclient.RecordPayload , len (change .Targets ))
7373 for i := range change .Targets {
74+ content := change .Targets [i ]
75+
76+ if change .RecordType == "TXT" {
77+ content = formatTXTContent (content )
78+ }
79+
7480 records [i ] = stackitdnsclient.RecordPayload {
75- Content : change . Targets [ i ] ,
81+ Content : content ,
7682 }
7783 }
7884
@@ -88,8 +94,14 @@ func getStackitRecordSetPayload(change *endpoint.Endpoint) stackitdnsclient.Crea
8894func getStackitPartialUpdateRecordSetPayload (change * endpoint.Endpoint ) stackitdnsclient.PartialUpdateRecordSetPayload {
8995 records := make ([]stackitdnsclient.RecordPayload , len (change .Targets ))
9096 for i := range change .Targets {
97+ content := change .Targets [i ]
98+
99+ if change .RecordType == "TXT" {
100+ content = formatTXTContent (content )
101+ }
102+
91103 records [i ] = stackitdnsclient.RecordPayload {
92- Content : change . Targets [ i ] ,
104+ Content : content ,
93105 }
94106 }
95107
@@ -126,3 +138,33 @@ func safeTTLToInt32(ttl endpoint.TTL) *int32 {
126138
127139 return & v
128140}
141+
142+ // formatTXTContent splits long TXT records into 255-character chunks separated by spaces
143+ func formatTXTContent (content string ) string {
144+ cleanContent := strings .Trim (content , "\" " )
145+
146+ if len (cleanContent ) <= 255 {
147+ return `"` + cleanContent + `"`
148+ }
149+
150+ var chunks []string
151+ for i := 0 ; i < len (cleanContent ); i += 255 {
152+ end := i + 255
153+ if end > len (cleanContent ) {
154+ end = len (cleanContent )
155+ }
156+ chunks = append (chunks , `"` + cleanContent [i :end ]+ `"` )
157+ }
158+
159+ return strings .Join (chunks , " " )
160+ }
161+
162+ // unformatTXTContent reverses the DNS chunking and quoting process
163+ func unformatTXTContent (content string ) string {
164+ if ! strings .HasPrefix (content , "\" " ) || ! strings .HasSuffix (content , "\" " ) {
165+ return content
166+ }
167+
168+ trimmed := content [1 : len (content )- 1 ]
169+ return strings .ReplaceAll (trimmed , `" "` , "" )
170+ }
0 commit comments