{"record":{"id":"fbd3d95b002fc851","repo":"netbirdio/netbird","slug":"service-name-exceeds-maximum-length-of-255-charact","errorCode":null,"errorMessage":"service name exceeds maximum length of 255 characters","messagePattern":"service name exceeds maximum length of 255 characters","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"management/internals/modules/reverseproxy/service/service.go","lineNumber":860,"sourceCode":"\t\tlen(r.AllowedCountries) == 0 && len(r.BlockedCountries) == 0 &&\n\t\tr.CrowdSecMode == \"\" {\n\t\treturn nil\n\t}\n\treturn &proto.AccessRestrictions{\n\t\tAllowedCidrs:     r.AllowedCIDRs,\n\t\tBlockedCidrs:     r.BlockedCIDRs,\n\t\tAllowedCountries: r.AllowedCountries,\n\t\tBlockedCountries: r.BlockedCountries,\n\t\tCrowdsecMode:     r.CrowdSecMode,\n\t}\n}\n\nfunc (s *Service) Validate() error {\n\tif s.Name == \"\" {\n\t\treturn errors.New(\"service name is required\")\n\t}\n\tif len(s.Name) > 255 {\n\t\treturn errors.New(\"service name exceeds maximum length of 255 characters\")\n\t}\n\n\tif len(s.Targets) == 0 {\n\t\treturn errors.New(\"at least one target is required\")\n\t}\n\n\tif s.Mode == \"\" {\n\t\ts.Mode = ModeHTTP\n\t}\n\n\tif err := validateHeaderAuths(s.Auth.HeaderAuths); err != nil {\n\t\treturn err\n\t}\n\tif err := validateAccessRestrictions(&s.Restrictions); err != nil {\n\t\treturn err\n\t}\n\tif err := s.validatePrivateRequirements(); err != nil {\n\t\treturn err","sourceCodeStart":842,"sourceCodeEnd":878,"githubUrl":"https://github.com/netbirdio/netbird/blob/93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c/management/internals/modules/reverseproxy/service/service.go#L842-L878","documentation":"Returned by Service.Validate (management/internals/modules/reverseproxy/service/service.go:860) when Name exceeds 255 characters. The name is stored and referenced by management state and DNS/label derivation, so it is capped at 255 characters; longer names are rejected right after the empty-name check.","triggerScenarios":"Creating/updating a reverse-proxy service with a name longer than 255 bytes, e.g. a generated name (FQDN, description blob, concatenation) pasted or programmatically built without truncation.","commonSituations":"Automation that derives the service name from a hostname plus suffixes; copy-paste of a long sentence; template variables that expand unexpectedly.","solutions":["Shorten the name to at most 255 characters.","When generating names programmatically, truncate with a deterministic cap before submitting.","Prefer short slug-style names; put long descriptions in a description field if available."],"exampleFix":"// before\nname := fmt.Sprintf(\"%s-%s-%s\", fqdn, cluster, notes) // unbounded\n\n// after\nif len(name) > 255 {\n    name = name[:255]\n}\nservice.Name = name","handlingStrategy":"validation","validationCode":"if len(svc.Name) > 255 {\n    return fmt.Errorf(\"service name too long: %d bytes (max 255)\", len(svc.Name))\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Cap generated names deterministically before submission.","Keep names slug-like; store long text elsewhere."],"tags":["go","netbird","management","reverse-proxy","validation","limits"],"backgroundTag":null,"analyzedSha":"93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c","analyzedAt":"2026-08-16T03:09:19.136Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}