krb5conf_test.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. package config
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. const (
  10. krb5Conf = `
  11. [logging]
  12. default = FILE:/var/log/kerberos/krb5libs.log
  13. kdc = FILE:/var/log/kerberos/krb5kdc.log
  14. admin_server = FILE:/var/log/kerberos/kadmind.log
  15. [libdefaults]
  16. default_realm = TEST.GOKRB5 ; comment to be ignored
  17. dns_lookup_realm = false
  18. dns_lookup_kdc = false
  19. #dns_lookup_kdc = true
  20. ;dns_lookup_kdc = true
  21. #dns_lookup_kdc = true
  22. ;dns_lookup_kdc = true
  23. ticket_lifetime = 10h ;comment to be ignored
  24. forwardable = yes #comment to be ignored
  25. default_keytab_name = FILE:/etc/krb5.keytab
  26. default_client_keytab_name = FILE:/home/gokrb5/client.keytab
  27. default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 # comment to be ignored
  28. [realms]
  29. TEST.GOKRB5 = {
  30. kdc = 10.80.88.88:88 #comment to be ignored
  31. kdc = assume.port.num ;comment to be ignored
  32. kdc = some.other.port:1234 # comment to be ignored
  33. kdc = 10.80.88.88*
  34. kdc = 10.1.2.3.4:88
  35. admin_server = 10.80.88.88:749 ; comment to be ignored
  36. default_domain = test.gokrb5
  37. }
  38. EXAMPLE.COM = {
  39. kdc = kerberos.example.com
  40. kdc = kerberos-1.example.com
  41. admin_server = kerberos.example.com
  42. auth_to_local = RULE:[1:$1@$0](.*@EXAMPLE.COM)s/.*//
  43. }
  44. lowercase.org = {
  45. kdc = kerberos.lowercase.org
  46. admin_server = kerberos.lowercase.org
  47. }
  48. [domain_realm]
  49. .test.gokrb5 = TEST.GOKRB5 #comment to be ignored
  50. test.gokrb5 = TEST.GOKRB5 ;comment to be ignored
  51. .example.com = EXAMPLE.COM # comment to be ignored
  52. hostname1.example.com = EXAMPLE.COM ; comment to be ignored
  53. hostname2.example.com = TEST.GOKRB5
  54. .testlowercase.org = lowercase.org
  55. [appdefaults]
  56. pam = {
  57. debug = false
  58. ticket_lifetime = 36000
  59. renew_lifetime = 36000
  60. forwardable = true
  61. krb4_convert = false
  62. }
  63. `
  64. krb5Conf2 = `
  65. [logging]
  66. default = FILE:/var/log/kerberos/krb5libs.log
  67. kdc = FILE:/var/log/kerberos/krb5kdc.log
  68. admin_server = FILE:/var/log/kerberos/kadmind.log
  69. [libdefaults]
  70. noaddresses = true
  71. default_realm = TEST.GOKRB5
  72. dns_lookup_realm = false
  73. dns_lookup_kdc = false
  74. #dns_lookup_kdc = true
  75. ;dns_lookup_kdc = true
  76. #dns_lookup_kdc = true
  77. ;dns_lookup_kdc = true
  78. ticket_lifetime = 10h
  79. forwardable = yes
  80. default_keytab_name = FILE:/etc/krb5.keytab
  81. default_client_keytab_name = FILE:/home/gokrb5/client.keytab
  82. default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  83. [domain_realm]
  84. .test.gokrb5 = TEST.GOKRB5
  85. test.gokrb5 = TEST.GOKRB5
  86. [appdefaults]
  87. pam = {
  88. debug = false
  89. ticket_lifetime = 36000
  90. renew_lifetime = 36000
  91. forwardable = true
  92. krb4_convert = false
  93. }
  94. [realms]
  95. TEST.GOKRB5 = {
  96. kdc = 10.80.88.88:88
  97. kdc = assume.port.num
  98. kdc = some.other.port:1234
  99. kdc = 10.80.88.88*
  100. kdc = 10.1.2.3.4:88
  101. admin_server = 10.80.88.88:749
  102. default_domain = test.gokrb5
  103. }
  104. EXAMPLE.COM = {
  105. kdc = kerberos.example.com
  106. kdc = kerberos-1.example.com
  107. admin_server = kerberos.example.com
  108. }
  109. `
  110. krb5ConfNoBlankLines = `
  111. [logging]
  112. default = FILE:/var/log/kerberos/krb5libs.log
  113. kdc = FILE:/var/log/kerberos/krb5kdc.log
  114. admin_server = FILE:/var/log/kerberos/kadmind.log
  115. [libdefaults]
  116. default_realm = TEST.GOKRB5
  117. dns_lookup_realm = false
  118. dns_lookup_kdc = false
  119. #dns_lookup_kdc = true
  120. ;dns_lookup_kdc = true
  121. #dns_lookup_kdc = true
  122. ;dns_lookup_kdc = true
  123. ticket_lifetime = 10h
  124. forwardable = yes
  125. default_keytab_name = FILE:/etc/krb5.keytab
  126. default_client_keytab_name = FILE:/home/gokrb5/client.keytab
  127. default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  128. [realms]
  129. TEST.GOKRB5 = {
  130. kdc = 10.80.88.88:88
  131. kdc = assume.port.num
  132. kdc = some.other.port:1234
  133. kdc = 10.80.88.88*
  134. kdc = 10.1.2.3.4:88
  135. admin_server = 10.80.88.88:749
  136. default_domain = test.gokrb5
  137. }
  138. EXAMPLE.COM = {
  139. kdc = kerberos.example.com
  140. kdc = kerberos-1.example.com
  141. admin_server = kerberos.example.com
  142. auth_to_local = RULE:[1:$1@$0](.*@EXAMPLE.COM)s/.*//
  143. }
  144. [domain_realm]
  145. .test.gokrb5 = TEST.GOKRB5
  146. test.gokrb5 = TEST.GOKRB5
  147. `
  148. krb5ConfTabs = `
  149. [logging]
  150. default = FILE:/var/log/kerberos/krb5libs.log
  151. kdc = FILE:/var/log/kerberos/krb5kdc.log
  152. admin_server = FILE:/var/log/kerberos/kadmind.log
  153. [libdefaults]
  154. default_realm = TEST.GOKRB5
  155. dns_lookup_realm = false
  156. dns_lookup_kdc = false
  157. #dns_lookup_kdc = true
  158. ;dns_lookup_kdc = true
  159. #dns_lookup_kdc = true
  160. ;dns_lookup_kdc = true
  161. ticket_lifetime = 10h
  162. forwardable = yes
  163. default_keytab_name = FILE:/etc/krb5.keytab
  164. default_client_keytab_name = FILE:/home/gokrb5/client.keytab
  165. default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  166. [realms]
  167. TEST.GOKRB5 = {
  168. kdc = 10.80.88.88:88
  169. kdc = assume.port.num
  170. kdc = some.other.port:1234
  171. kdc = 10.80.88.88*
  172. kdc = 10.1.2.3.4:88
  173. admin_server = 10.80.88.88:749
  174. default_domain = test.gokrb5
  175. }
  176. EXAMPLE.COM = {
  177. kdc = kerberos.example.com
  178. kdc = kerberos-1.example.com
  179. admin_server = kerberos.example.com
  180. auth_to_local = RULE:[1:$1@$0](.*@EXAMPLE.COM)s/.*//
  181. }
  182. [domain_realm]
  183. .test.gokrb5 = TEST.GOKRB5
  184. test.gokrb5 = TEST.GOKRB5
  185. .example.com = EXAMPLE.COM
  186. hostname1.example.com = EXAMPLE.COM
  187. hostname2.example.com = TEST.GOKRB5
  188. [appdefaults]
  189. pam = {
  190. debug = false
  191. ticket_lifetime = 36000
  192. renew_lifetime = 36000
  193. forwardable = true
  194. krb4_convert = false
  195. }`
  196. krb5ConfV4Lines = `
  197. [logging]
  198. default = FILE:/var/log/kerberos/krb5libs.log
  199. kdc = FILE:/var/log/kerberos/krb5kdc.log
  200. admin_server = FILE:/var/log/kerberos/kadmind.log
  201. [libdefaults]
  202. default_realm = TEST.GOKRB5
  203. dns_lookup_realm = false
  204. dns_lookup_kdc = false
  205. #dns_lookup_kdc = true
  206. ;dns_lookup_kdc = true
  207. #dns_lookup_kdc = true
  208. ;dns_lookup_kdc = true
  209. ticket_lifetime = 10h
  210. forwardable = yes
  211. default_keytab_name = FILE:/etc/krb5.keytab
  212. default_client_keytab_name = FILE:/home/gokrb5/client.keytab
  213. default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  214. [realms]
  215. TEST.GOKRB5 = {
  216. kdc = 10.80.88.88:88
  217. kdc = assume.port.num
  218. kdc = some.other.port:1234
  219. kdc = 10.80.88.88*
  220. kdc = 10.1.2.3.4:88
  221. admin_server = 10.80.88.88:749
  222. default_domain = test.gokrb5
  223. v4_name_convert = {
  224. host = {
  225. rcmd = host
  226. }
  227. }
  228. }
  229. EXAMPLE.COM = {
  230. kdc = kerberos.example.com
  231. kdc = kerberos-1.example.com
  232. admin_server = kerberos.example.com
  233. auth_to_local = RULE:[1:$1@$0](.*@EXAMPLE.COM)s/.*//
  234. }
  235. [domain_realm]
  236. .test.gokrb5 = TEST.GOKRB5
  237. test.gokrb5 = TEST.GOKRB5
  238. .example.com = EXAMPLE.COM
  239. hostname1.example.com = EXAMPLE.COM
  240. hostname2.example.com = TEST.GOKRB5
  241. [appdefaults]
  242. pam = {
  243. debug = false
  244. ticket_lifetime = 36000
  245. renew_lifetime = 36000
  246. forwardable = true
  247. krb4_convert = false
  248. }
  249. `
  250. )
  251. func TestLoad(t *testing.T) {
  252. t.Parallel()
  253. cf, _ := ioutil.TempFile(os.TempDir(), "TEST-gokrb5-krb5.conf")
  254. defer os.Remove(cf.Name())
  255. cf.WriteString(krb5Conf)
  256. c, err := Load(cf.Name())
  257. if err != nil {
  258. t.Fatalf("Error loading config: %v", err)
  259. }
  260. assert.Equal(t, "TEST.GOKRB5", c.LibDefaults.DefaultRealm, "[libdefaults] default_realm not as expected")
  261. assert.Equal(t, false, c.LibDefaults.DNSLookupRealm, "[libdefaults] dns_lookup_realm not as expected")
  262. assert.Equal(t, false, c.LibDefaults.DNSLookupKDC, "[libdefaults] dns_lookup_kdc not as expected")
  263. assert.Equal(t, time.Duration(10)*time.Hour, c.LibDefaults.TicketLifetime, "[libdefaults] Ticket lifetime not as expected")
  264. assert.Equal(t, true, c.LibDefaults.Forwardable, "[libdefaults] forwardable not as expected")
  265. assert.Equal(t, "FILE:/etc/krb5.keytab", c.LibDefaults.DefaultKeytabName, "[libdefaults] default_keytab_name not as expected")
  266. assert.Equal(t, "FILE:/home/gokrb5/client.keytab", c.LibDefaults.DefaultClientKeytabName, "[libdefaults] default_client_keytab_name not as expected")
  267. assert.Equal(t, []string{"aes256-cts-hmac-sha1-96", "aes128-cts-hmac-sha1-96"}, c.LibDefaults.DefaultTktEnctypes, "[libdefaults] default_tkt_enctypes not as expected")
  268. assert.Equal(t, 3, len(c.Realms), "Number of realms not as expected")
  269. assert.Equal(t, "TEST.GOKRB5", c.Realms[0].Realm, "[realm] realm name not as expectd")
  270. assert.Equal(t, []string{"10.80.88.88:749"}, c.Realms[0].AdminServer, "[realm] Admin_server not as expectd")
  271. assert.Equal(t, []string{"10.80.88.88:464"}, c.Realms[0].KPasswdServer, "[realm] Kpasswd_server not as expectd")
  272. assert.Equal(t, "test.gokrb5", c.Realms[0].DefaultDomain, "[realm] Default_domain not as expectd")
  273. assert.Equal(t, []string{"10.80.88.88:88", "assume.port.num:88", "some.other.port:1234", "10.80.88.88:88"}, c.Realms[0].KDC, "[realm] Kdc not as expectd")
  274. assert.Equal(t, []string{"kerberos.example.com:88", "kerberos-1.example.com:88"}, c.Realms[1].KDC, "[realm] Kdc not as expectd")
  275. assert.Equal(t, []string{"kerberos.example.com"}, c.Realms[1].AdminServer, "[realm] Admin_server not as expectd")
  276. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm[".test.gokrb5"], "Domain to realm mapping not as expected")
  277. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm["test.gokrb5"], "Domain to realm mapping not as expected")
  278. }
  279. func TestLoadWithV4Lines(t *testing.T) {
  280. t.Parallel()
  281. cf, _ := ioutil.TempFile(os.TempDir(), "TEST-gokrb5-krb5.conf")
  282. defer os.Remove(cf.Name())
  283. cf.WriteString(krb5ConfV4Lines)
  284. c, err := Load(cf.Name())
  285. if err == nil {
  286. t.Fatalf("error should not be nil for config that includes v4 lines")
  287. }
  288. if _, ok := err.(UnsupportedDirective); !ok {
  289. t.Fatalf("error should be of type UnsupportedDirective: %v", err)
  290. }
  291. assert.Equal(t, "TEST.GOKRB5", c.LibDefaults.DefaultRealm, "[libdefaults] default_realm not as expected")
  292. assert.Equal(t, false, c.LibDefaults.DNSLookupRealm, "[libdefaults] dns_lookup_realm not as expected")
  293. assert.Equal(t, false, c.LibDefaults.DNSLookupKDC, "[libdefaults] dns_lookup_kdc not as expected")
  294. assert.Equal(t, time.Duration(10)*time.Hour, c.LibDefaults.TicketLifetime, "[libdefaults] Ticket lifetime not as expected")
  295. assert.Equal(t, true, c.LibDefaults.Forwardable, "[libdefaults] forwardable not as expected")
  296. assert.Equal(t, "FILE:/etc/krb5.keytab", c.LibDefaults.DefaultKeytabName, "[libdefaults] default_keytab_name not as expected")
  297. assert.Equal(t, "FILE:/home/gokrb5/client.keytab", c.LibDefaults.DefaultClientKeytabName, "[libdefaults] default_client_keytab_name not as expected")
  298. assert.Equal(t, []string{"aes256-cts-hmac-sha1-96", "aes128-cts-hmac-sha1-96"}, c.LibDefaults.DefaultTktEnctypes, "[libdefaults] default_tkt_enctypes not as expected")
  299. assert.Equal(t, 2, len(c.Realms), "Number of realms not as expected")
  300. assert.Equal(t, "TEST.GOKRB5", c.Realms[0].Realm, "[realm] realm name not as expectd")
  301. assert.Equal(t, []string{"10.80.88.88:749"}, c.Realms[0].AdminServer, "[realm] Admin_server not as expectd")
  302. assert.Equal(t, []string{"10.80.88.88:464"}, c.Realms[0].KPasswdServer, "[realm] Kpasswd_server not as expectd")
  303. assert.Equal(t, "test.gokrb5", c.Realms[0].DefaultDomain, "[realm] Default_domain not as expectd")
  304. assert.Equal(t, []string{"10.80.88.88:88", "assume.port.num:88", "some.other.port:1234", "10.80.88.88:88"}, c.Realms[0].KDC, "[realm] Kdc not as expectd")
  305. assert.Equal(t, []string{"kerberos.example.com:88", "kerberos-1.example.com:88"}, c.Realms[1].KDC, "[realm] Kdc not as expectd")
  306. assert.Equal(t, []string{"kerberos.example.com"}, c.Realms[1].AdminServer, "[realm] Admin_server not as expectd")
  307. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm[".test.gokrb5"], "Domain to realm mapping not as expected")
  308. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm["test.gokrb5"], "Domain to realm mapping not as expected")
  309. }
  310. func TestLoad2(t *testing.T) {
  311. t.Parallel()
  312. c, err := NewConfigFromString(krb5Conf2)
  313. if err != nil {
  314. t.Fatalf("Error loading config: %v", err)
  315. }
  316. assert.Equal(t, "TEST.GOKRB5", c.LibDefaults.DefaultRealm, "[libdefaults] default_realm not as expected")
  317. assert.Equal(t, false, c.LibDefaults.DNSLookupRealm, "[libdefaults] dns_lookup_realm not as expected")
  318. assert.Equal(t, false, c.LibDefaults.DNSLookupKDC, "[libdefaults] dns_lookup_kdc not as expected")
  319. assert.Equal(t, time.Duration(10)*time.Hour, c.LibDefaults.TicketLifetime, "[libdefaults] Ticket lifetime not as expected")
  320. assert.Equal(t, true, c.LibDefaults.Forwardable, "[libdefaults] forwardable not as expected")
  321. assert.Equal(t, "FILE:/etc/krb5.keytab", c.LibDefaults.DefaultKeytabName, "[libdefaults] default_keytab_name not as expected")
  322. assert.Equal(t, "FILE:/home/gokrb5/client.keytab", c.LibDefaults.DefaultClientKeytabName, "[libdefaults] default_client_keytab_name not as expected")
  323. assert.Equal(t, []string{"aes256-cts-hmac-sha1-96", "aes128-cts-hmac-sha1-96"}, c.LibDefaults.DefaultTktEnctypes, "[libdefaults] default_tkt_enctypes not as expected")
  324. assert.Equal(t, 2, len(c.Realms), "Number of realms not as expected")
  325. assert.Equal(t, "TEST.GOKRB5", c.Realms[0].Realm, "[realm] realm name not as expectd")
  326. assert.Equal(t, []string{"10.80.88.88:749"}, c.Realms[0].AdminServer, "[realm] Admin_server not as expectd")
  327. assert.Equal(t, []string{"10.80.88.88:464"}, c.Realms[0].KPasswdServer, "[realm] Kpasswd_server not as expectd")
  328. assert.Equal(t, "test.gokrb5", c.Realms[0].DefaultDomain, "[realm] Default_domain not as expectd")
  329. assert.Equal(t, []string{"10.80.88.88:88", "assume.port.num:88", "some.other.port:1234", "10.80.88.88:88"}, c.Realms[0].KDC, "[realm] Kdc not as expectd")
  330. assert.Equal(t, []string{"kerberos.example.com:88", "kerberos-1.example.com:88"}, c.Realms[1].KDC, "[realm] Kdc not as expectd")
  331. assert.Equal(t, []string{"kerberos.example.com"}, c.Realms[1].AdminServer, "[realm] Admin_server not as expectd")
  332. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm[".test.gokrb5"], "Domain to realm mapping not as expected")
  333. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm["test.gokrb5"], "Domain to realm mapping not as expected")
  334. assert.True(t, c.LibDefaults.NoAddresses, "No address not set as true")
  335. }
  336. func TestLoadNoBlankLines(t *testing.T) {
  337. t.Parallel()
  338. c, err := NewConfigFromString(krb5ConfNoBlankLines)
  339. if err != nil {
  340. t.Fatalf("Error loading config: %v", err)
  341. }
  342. assert.Equal(t, "TEST.GOKRB5", c.LibDefaults.DefaultRealm, "[libdefaults] default_realm not as expected")
  343. assert.Equal(t, false, c.LibDefaults.DNSLookupRealm, "[libdefaults] dns_lookup_realm not as expected")
  344. assert.Equal(t, false, c.LibDefaults.DNSLookupKDC, "[libdefaults] dns_lookup_kdc not as expected")
  345. assert.Equal(t, time.Duration(10)*time.Hour, c.LibDefaults.TicketLifetime, "[libdefaults] Ticket lifetime not as expected")
  346. assert.Equal(t, true, c.LibDefaults.Forwardable, "[libdefaults] forwardable not as expected")
  347. assert.Equal(t, "FILE:/etc/krb5.keytab", c.LibDefaults.DefaultKeytabName, "[libdefaults] default_keytab_name not as expected")
  348. assert.Equal(t, "FILE:/home/gokrb5/client.keytab", c.LibDefaults.DefaultClientKeytabName, "[libdefaults] default_client_keytab_name not as expected")
  349. assert.Equal(t, []string{"aes256-cts-hmac-sha1-96", "aes128-cts-hmac-sha1-96"}, c.LibDefaults.DefaultTktEnctypes, "[libdefaults] default_tkt_enctypes not as expected")
  350. assert.Equal(t, 2, len(c.Realms), "Number of realms not as expected")
  351. assert.Equal(t, "TEST.GOKRB5", c.Realms[0].Realm, "[realm] realm name not as expectd")
  352. assert.Equal(t, []string{"10.80.88.88:749"}, c.Realms[0].AdminServer, "[realm] Admin_server not as expectd")
  353. assert.Equal(t, []string{"10.80.88.88:464"}, c.Realms[0].KPasswdServer, "[realm] Kpasswd_server not as expectd")
  354. assert.Equal(t, "test.gokrb5", c.Realms[0].DefaultDomain, "[realm] Default_domain not as expectd")
  355. assert.Equal(t, []string{"10.80.88.88:88", "assume.port.num:88", "some.other.port:1234", "10.80.88.88:88"}, c.Realms[0].KDC, "[realm] Kdc not as expectd")
  356. assert.Equal(t, []string{"kerberos.example.com:88", "kerberos-1.example.com:88"}, c.Realms[1].KDC, "[realm] Kdc not as expectd")
  357. assert.Equal(t, []string{"kerberos.example.com"}, c.Realms[1].AdminServer, "[realm] Admin_server not as expectd")
  358. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm[".test.gokrb5"], "Domain to realm mapping not as expected")
  359. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm["test.gokrb5"], "Domain to realm mapping not as expected")
  360. }
  361. func TestLoadTabs(t *testing.T) {
  362. t.Parallel()
  363. cf, _ := ioutil.TempFile(os.TempDir(), "TEST-gokrb5-krb5.conf")
  364. defer os.Remove(cf.Name())
  365. cf.WriteString(krb5ConfTabs)
  366. c, err := Load(cf.Name())
  367. if err != nil {
  368. t.Fatalf("Error loading config: %v", err)
  369. }
  370. assert.Equal(t, "TEST.GOKRB5", c.LibDefaults.DefaultRealm, "[libdefaults] default_realm not as expected")
  371. assert.Equal(t, false, c.LibDefaults.DNSLookupRealm, "[libdefaults] dns_lookup_realm not as expected")
  372. assert.Equal(t, false, c.LibDefaults.DNSLookupKDC, "[libdefaults] dns_lookup_kdc not as expected")
  373. assert.Equal(t, time.Duration(10)*time.Hour, c.LibDefaults.TicketLifetime, "[libdefaults] Ticket lifetime not as expected")
  374. assert.Equal(t, true, c.LibDefaults.Forwardable, "[libdefaults] forwardable not as expected")
  375. assert.Equal(t, "FILE:/etc/krb5.keytab", c.LibDefaults.DefaultKeytabName, "[libdefaults] default_keytab_name not as expected")
  376. assert.Equal(t, "FILE:/home/gokrb5/client.keytab", c.LibDefaults.DefaultClientKeytabName, "[libdefaults] default_client_keytab_name not as expected")
  377. assert.Equal(t, []string{"aes256-cts-hmac-sha1-96", "aes128-cts-hmac-sha1-96"}, c.LibDefaults.DefaultTktEnctypes, "[libdefaults] default_tkt_enctypes not as expected")
  378. assert.Equal(t, 2, len(c.Realms), "Number of realms not as expected")
  379. assert.Equal(t, "TEST.GOKRB5", c.Realms[0].Realm, "[realm] realm name not as expectd")
  380. assert.Equal(t, []string{"10.80.88.88:749"}, c.Realms[0].AdminServer, "[realm] Admin_server not as expectd")
  381. assert.Equal(t, []string{"10.80.88.88:464"}, c.Realms[0].KPasswdServer, "[realm] Kpasswd_server not as expectd")
  382. assert.Equal(t, "test.gokrb5", c.Realms[0].DefaultDomain, "[realm] Default_domain not as expectd")
  383. assert.Equal(t, []string{"10.80.88.88:88", "assume.port.num:88", "some.other.port:1234", "10.80.88.88:88"}, c.Realms[0].KDC, "[realm] Kdc not as expectd")
  384. assert.Equal(t, []string{"kerberos.example.com:88", "kerberos-1.example.com:88"}, c.Realms[1].KDC, "[realm] Kdc not as expectd")
  385. assert.Equal(t, []string{"kerberos.example.com"}, c.Realms[1].AdminServer, "[realm] Admin_server not as expectd")
  386. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm[".test.gokrb5"], "Domain to realm mapping not as expected")
  387. assert.Equal(t, "TEST.GOKRB5", c.DomainRealm["test.gokrb5"], "Domain to realm mapping not as expected")
  388. }
  389. func TestParseDuration(t *testing.T) {
  390. t.Parallel()
  391. // https://web.mit.edu/kerberos/krb5-1.12/doc/basic/date_format.html#duration
  392. hms, _ := time.ParseDuration("12h30m15s")
  393. hm, _ := time.ParseDuration("12h30m")
  394. h, _ := time.ParseDuration("12h")
  395. var tests = []struct {
  396. timeStr string
  397. duration time.Duration
  398. }{
  399. {"100", time.Duration(100) * time.Second},
  400. {"12:30", hm},
  401. {"12:30:15", hms},
  402. {"1d12h30m15s", time.Duration(24)*time.Hour + hms},
  403. {"1d12h30m", time.Duration(24)*time.Hour + hm},
  404. {"1d12h", time.Duration(24)*time.Hour + h},
  405. {"1d", time.Duration(24) * time.Hour},
  406. }
  407. for _, test := range tests {
  408. d, err := parseDuration(test.timeStr)
  409. if err != nil {
  410. t.Errorf("error parsing %s: %v", test.timeStr, err)
  411. }
  412. assert.Equal(t, test.duration, d, "Duration not as expected for: "+test.timeStr)
  413. }
  414. }
  415. func TestResolveRealm(t *testing.T) {
  416. t.Parallel()
  417. c, err := NewConfigFromString(krb5Conf)
  418. if err != nil {
  419. t.Fatalf("Error loading config: %v", err)
  420. }
  421. tests := []struct {
  422. domainName string
  423. want string
  424. }{
  425. {"unknown.com", "TEST.GOKRB5"},
  426. {"hostname1.example.com", "EXAMPLE.COM"},
  427. {"hostname2.example.com", "TEST.GOKRB5"},
  428. {"one.two.three.example.com", "EXAMPLE.COM"},
  429. {".test.gokrb5", "TEST.GOKRB5"},
  430. {"foo.testlowercase.org", "lowercase.org"},
  431. }
  432. for _, tt := range tests {
  433. t.Run(tt.domainName, func(t *testing.T) {
  434. if got := c.ResolveRealm(tt.domainName); got != tt.want {
  435. t.Errorf("config.ResolveRealm() = %v, want %v", got, tt.want)
  436. }
  437. })
  438. }
  439. }