summaryrefslogtreecommitdiff
path: root/sys-auth/docker_auth
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /sys-auth/docker_auth
reinit the tree, so we can have metadata
Diffstat (limited to 'sys-auth/docker_auth')
-rw-r--r--sys-auth/docker_auth/Manifest39
-rw-r--r--sys-auth/docker_auth/docker_auth-1.3-r1.ebuild88
-rw-r--r--sys-auth/docker_auth/docker_auth-1.3.ebuild87
-rw-r--r--sys-auth/docker_auth/files/docker_auth-ldap-cacert.patch67
-rw-r--r--sys-auth/docker_auth/files/docker_auth-ldap-group-support-1.patch394
-rw-r--r--sys-auth/docker_auth/files/docker_auth-ldap-group-support.patch363
-rw-r--r--sys-auth/docker_auth/files/docker_auth.confd2
-rw-r--r--sys-auth/docker_auth/files/docker_auth.initd19
-rw-r--r--sys-auth/docker_auth/files/docker_auth.logrotated8
-rw-r--r--sys-auth/docker_auth/files/version.go6
-rw-r--r--sys-auth/docker_auth/metadata.xml11
11 files changed, 1084 insertions, 0 deletions
diff --git a/sys-auth/docker_auth/Manifest b/sys-auth/docker_auth/Manifest
new file mode 100644
index 000000000000..29aecdb15624
--- /dev/null
+++ b/sys-auth/docker_auth/Manifest
@@ -0,0 +1,39 @@
+AUX docker_auth-ldap-cacert.patch 2806 SHA256 127856a7fcf291bb601fcdab614c9cca798c27c63d7720860a0663246376bb56 SHA512 ae86f8d2adae073fae30753c054627a737ddbd05dd94107a65abe2935043a14a9eaf5987a83f06a5b7f827862a8df3510554f34f34693d5e97d77008d7da3b97 WHIRLPOOL 15c2e26d8c820dfc2a3b8ecd3401941b90aec0e07e8d9a94f5f5dc4e94d02acaf5e3010c9c441b6c28535e19a87f12d735c8f702305d26c6b13aba318bf13d28
+AUX docker_auth-ldap-group-support-1.patch 13612 SHA256 dd31f20fc0399b55051dcef092e48ca4f8893f49e27ad39a126be5cafaefecad SHA512 3479435540fd371ef2b294261e2d7196f4ee92e5621178e25c8ee240c066c49a2a846abae860b3baba5bac4e8787e0795b33a7bd1fb6689aa9961acdbd728a16 WHIRLPOOL 04e09fa8b89bbb4cc688b72bd68a3d7aa96812f912ca964729511b6703addd5c526dfdbebc40139bf65a33150a5151151dfe6f6213515568ffa5613df9c2f6d3
+AUX docker_auth-ldap-group-support.patch 12531 SHA256 7fafbb573b90f83dbbf4cf46e0fc122091b47152ac911b9893ac043e91aca876 SHA512 d6a8b77879ba27ca9adb7e9e3ae4adae87c2e08353df37c9638a1103104ff901c8051453df1474e42afe9f12907a40baf67c76e8d57f359fadfe3cbb3a0a6fda WHIRLPOOL 6b2ec797d670117156f4908fef6975c388ed7ed854abb55b818d819442e7517589a2e4501edfd1d6979d71efc0f8f333d827ae5aa01a7e9818e9c566b91f2a2d
+AUX docker_auth.confd 71 SHA256 da3c02eb19987d5625da03cb7f204fe4417841d60e8ee8db9ad4e2003c617f3f SHA512 b089b5ea299b701c3e0ed682e59e87e3f1fe1af4f097f21be80ed2e33c8dd021b9dca0c4310ab453518310306af3c7f2c084a4d17db1504cf1f392dcc993d337 WHIRLPOOL 08d053a2bd228d12013e4cae278de09db55232d1ce5ffbd50115b8d5037989ba0f577e12e89a098b2d23864a85d7a7c8d8be13c204321eeef6d3d1fd1a15048a
+AUX docker_auth.initd 596 SHA256 522673b1d321d5132bca3a41fc45861a6406f66b782eb88c44a88161817a68e2 SHA512 11dd3d6c3a947571a719b3fcb76a4fe75af4ee1d1b8957f4b0b3b7ee14cefec7acca9fb52e438b185651c38519e820ab0016d439405652f419399c823e74579c WHIRLPOOL 9e80bd4cb72b72eaac7471d40715431efb4f6a131ddf9c73b51edf68fcdd0f40182afb6fb76c297e8ad025afae4728d34ea42416160e51fa4f1cbecec1bc1f24
+AUX docker_auth.logrotated 109 SHA256 17771449221de7e126ab6141527d77fd6760114ad6aae6321cabe6e984e6796b SHA512 b2b93aa327b4023481b9524649fe2be4b1ccf97f88b76969b8ab23b9a852627db92426fd0286a875c06555f51c0a61e50b789646acffdbd7916b7be3580d8751 WHIRLPOOL a75271f4e045ef990efd0bf76114a48fdc7fd0481433a53dc5d821194e954168d7ea630cc0a0cc15ed39f972cc4b6fdce6f8de5bdbc1aaf89c6ff70fb790fa8f
+AUX version.go 71 SHA256 c80ddddeaec08f04b669e28fcc4d206f9bfa834243166e4f7c2a73e5e00227b7 SHA512 48f7727bda3a0e59f33235d8e343beca581f153ceaa227eaa65bd783d05c06f1c598c764743ef41910fd72a2309e7069bddc5f57f89700f2f88536bfe3100d79 WHIRLPOOL acf5d8e154510277b097c73401be5da3bbb7e3f70d120150f479775fdcc852e8bd89e249fb7fb1d9069a159f9650a72d20fcd878710d313fb841f4a3f0c99b4b
+DIST docker_auth-1.3.tar.gz 48970 SHA256 6279ca7c4428b46117f96c303114562b17bbe2337b5da82e5c2fc894d411fe86 SHA512 c0964a643d0269b2c7c4a1a747b421dfea8d8c42e3812a6b0dc2fa989e9e81fd6d6fd34672b19ea4472bf05be53bdd4d1c343fd241eab55d9b3496b47b3fa0c8 WHIRLPOOL 58793aef915358e7e4084745553d8b83ad53d87a20689358407d43a6e4150aa4a41d0aa19586e35b72523885aabedd416ad532633dd920b21d74345c38f3c35e
+DIST github.com-GoogleCloudPlatform-gcloud-golang-bbf380d59635bf267fc8a8df03d6d261c448ee3c.tar.gz 1082782 SHA256 5aa3ca04f524b22b9970a91a575d2e31d501dcceee56b7577a2615eaff1918e3 SHA512 d4b8f145a5007668d7b67ea63ffc221d4b56b76bfabfc7ba7b8182ca579edeca707638b4d81746ea1d7ae30915358028d026e17524e1e49a14d3f70c0efb85c2 WHIRLPOOL d3b366fceb3a1c52a7512691c4789e0c380e73843495487b8adb9708d5fe2c21480d7488cf6d3d3a46bbcac931f55853a546cafb76b78f60177e0a099e1dfb9f
+DIST github.com-cesanta-glog-22eb27a0ae192b290b25537b8e876556fc25129c.tar.gz 20273 SHA256 9960f3d916d6dba8e745cccc6fdef3982f57b6034321cb29d2df8c7ddb2d41d0 SHA512 3c4b757fc0d0e45382b1ef0180eea2f0429e8c7ecac0089fca79bc717f6c0a04918b91a144ca78331178cc914b808b40596c6a6e214157d2f812858be31c13d6 WHIRLPOOL f4d4abff55e1704d53efb52072405199e6d10b72aaf4abe5b9fe0b2255014da311f3f5d95ba69d1e4faed74511d0641658562eb46ae6279a417b4ac40dc92971
+DIST github.com-dchest-uniuri-8902c56451e9b58ff940bbe5fec35d5f9c04584a.tar.gz 2471 SHA256 f0e76f66c27b485fb8fd76ed0da635bf34751714487a16931f07bf1b1986b30f SHA512 70421b526e3040a49e63be6c892de2953b4f9ecdb01b148eb2bab3814f610a8c39bd98aad858cbaf9dcf621b52ee9ef952f0cdcdc6eca77da8ebf80dbbf1c04c WHIRLPOOL 63b97e4c3aa3b0275d3e2cd8f4fcdc523da62abba89b177c4f2a228bd7237fe719804e24616c082a41a2fef421ec3ed86be399cc207265675931a1e4cb73e050
+DIST github.com-deckarep-golang-set-fc8930a5e645572ee00bf66358ed3414f3c13b90.tar.gz 11814 SHA256 3d7de16db3e4f53349fc35fa538f14ef6f9a1286b8eeb39b95cc1050d43eee3d SHA512 4ac5a5a8985e7bda13d272854f68ad41feb435ab2fb835ca47a63db49211311f502273355f2d9e0c4bd264d8cd6438d077f0eae7b0c6aecadde93c766bd69513 WHIRLPOOL efe7302aa62737b55376760296055e6befc058565841d95fdee99469c4a3d2a3ffe2a8daf564780b4652c9a828ecc81bf7b45473792ad1aa39e2fc80d5626d43
+DIST github.com-docker-distribution-0700fa570d7bcc1b3e46ee127c4489fd25f4daa3.tar.gz 1609656 SHA256 c295f3bf74b0d6c4ab241f2e7ba38c0f95a03ca062319f54cd7870dbd09f9d14 SHA512 b155225d711c5bdca3246ad2a5cfd41a3cee9144cd30d90dde0407d3cc8c1aa20e6957016959424bd55e21b2a9332629a62294d09799ccb2626eb5136455e1b8 WHIRLPOOL 498df040f58e5f3218eaf67acfc7c15850c2fff93a154117e9d01b1b5203648bccf1690deb91eb68ffeb466bc4ed7962e80a4e46c9599e9381d16a4e8718c3a7
+DIST github.com-docker-libtrust-aabc10ec26b754e797f9028f4589c5b7bd90dc20.tar.gz 39352 SHA256 a3cb5fd53b4eb0ef259f039d0d10e237c8fff86993f9335959cf233956f0c065 SHA512 31d5a613807764c03d3356ee134bf384eca7953d4113e35d8fcce322611c25b444dd07904eb34c86c7e951529040c33fa821a56a687260e9298f900c7907e83b WHIRLPOOL 0b1cd73ba1ca2858324d6bc7f862bb794480d908250b8e05b3b28ff06837420e3b71107d040d3dfdda031cbcb72d0d0a3e934406a06d0e21c9a69708363b8f92
+DIST github.com-facebookgo-clock-600d898af40aa09a7a93ecb9265d87b0504b6f03.tar.gz 6382 SHA256 363140ddedf035ef012e0b17a35d32210f51b7f160c3fb0e89d08aa83d1870e0 SHA512 023741d93573d53471d1ec10a47c2a0034ecd0e0db35440b50bc7085ddd94e9cd5d0388586a25b060b50a1b9e442d4974a931b3f5d14aa1710629f19ad4acf8f WHIRLPOOL 2dd3fce28c58fb16998449d47433b3e0f726ef74323b116d60c4cfffeb9dac57320602883ab1b620b4ae9099e88f398dc34463f389008e8cfeff457db9b22c5d
+DIST github.com-facebookgo-httpdown-a3b1354551a26449fbe05f5d855937f6e7acbd71.tar.gz 9729 SHA256 c34330738c168a17a7720bd32fb00311005bd8c0d6bb5d6690bb2e73a81386ca SHA512 1958e337e1fd896227dd4a2eb551ffe92ffe12a25acdc422ad14c6234eb5e080a6f537f73175c2246768978803edf5fd9425925880546746e996e51a232bc7bd WHIRLPOOL 2234ea870430e3e35771550add39542f84522f656193f14b794dedca0a4c3a537513d8a6b686265e814d528e3c9139fc125f3584531a24bc3862f724e36b43ce
+DIST github.com-facebookgo-stats-1b76add642e42c6ffba7211ad7b3939ce654526e.tar.gz 5658 SHA256 9b22019e41b13c2e84dbe887689897ecc0b5a1b2410bca0454eebc83166cadc6 SHA512 12a0b172c956592c7ea1db3a8a0bda5ba80b215d938ecee1c0fa492bd04f3f896efeadeac192c5d1d57031e10d5c95578e441cbba0df080f4c4a1852de7d36fe WHIRLPOOL 211e6238c0ee34dd7d41e7b812a927f3d88e073bfde1e922795adcaf87032287913c8e59571ca412baea1a5818cbd49c2d4825c4db24244f6d3ee4e54a908430
+DIST github.com-fsnotify-fsnotify-629574ca2a5df945712d3079857300b5e4da0236.tar.gz 29588 SHA256 efa6568b01943ef1bcb3311c2371d300925fdde8fa4746673fefb703b572da2f SHA512 eaadede8a6fe231ea1f66755899891e288b5a69c2f74c1f11854b5060f471591f291a5394490a80864fc8d24181ada8a454c9b91ad04988021b5029298dd411b WHIRLPOOL 6727fe1af62b01f0f7c4b2dd38d4c0598d0e6da6df4cd63a7638377685840d640538d814f5a02ee56d16819c24e74e84dd6680af0eb47d158fbaa7eedc0e3a7f
+DIST github.com-go-asn1-ber-asn1-ber-4e86f4367175e39f69d9358a5f17b4dda270378d.tar.gz 12329 SHA256 f6462804a4336e9ba814c9d6bd8b4caf632abc4e3a966a0201847a780c06076e SHA512 fbba36ee6fd0d33558d4f13b6327a1385bde914c1c40954da19039bb55dc10d0166a1dd7a8650cb9776f2aad6f03ad110fd550a49e9c934446d23cd8eb3279fb WHIRLPOOL 54c5af35f9bd79c6b553a516526ceb928c97bfcdcf037d737c9f5ffa39c3cd2d4667e28f0af0d4a44e003432a575ad79a51827949d33cc1d8154badbae4888b3
+DIST github.com-go-ldap-ldap-13cedcf58a1ea124045dea529a66c849d3444c8e.tar.gz 36378 SHA256 624fa69738c3b768fc39fe68dfc84aee19ec969340396e85ca70ab717d1285d2 SHA512 3d4265b36e77b77357dd4f3f757bcdcb2dd4fc677ec83a33ee125d48ca19431075b0ab8087a4cb7d0a5027b1c2ea6ca516003c81b4d7df55de9c54ec6dc248fa WHIRLPOOL 448cb863e7888dc509e9b7d530b79f65fdd084b1f8c3673deb69fedeaf24e785786d0c7bb0b02816c62bd8b2faa85b7026701aa5de74c241b1fe889909d0b216
+DIST github.com-go-mgo-mgo-3f83fa5005286a7fe593b055f0d7771a7dce4655.tar.gz 376880 SHA256 6c97700204a9078a08bb0e67e8519c5f3a8c892b0401244a17bc2c0838410b9f SHA512 f0e7948d4672d29d3d0a741961ff8a75d30c556e157698118a32de10e2af8eb2ae6a61feea1c93aff313596d285a048a70dae7339c66760ebb91a1aecfb05845 WHIRLPOOL b95f88c8c023434b058426d8c8e5e230a1a4b6ba2bd701a0a078bfd774f861fcbff24fd08af6ed067fd3ea168854eec8c15708baf5275cb5c1e9ccce61d738c6
+DIST github.com-go-yaml-yaml-a3f3340b5840cee44f372bddb5880fcbc419b46a.tar.gz 60814 SHA256 0904953c06aa32c6691cec2390437f7d4d62c71f37d72f50d110a6577c87963b SHA512 184a0e658a4eac3b867533cd0e494bd84db94fbe10e8df0d0b755c7ffc95bc99e2f84c0157183ca74cdc79289a85dcf7f1dea8a4c89a253565baf473b3627eae WHIRLPOOL c9113048502f65a4036bbfbd4f072b27b41f68547e682d1e1496ae73c65c30b1470061d1f99d17e6b4a373e59e07568b460ad5396eb4b1f16079da077aa8382f
+DIST github.com-golang-crypto-e1a4589e7d3ea14a3352255d04b6f1a418845e5e.tar.gz 1336856 SHA256 28950420102f0dc290b84a52f06bc5b12a0a2b411b1b4fe216ba4ffe3ec3754e SHA512 c22fc86fbc22d6ec8157f89c075f07db8b72bf63ff97e06c907f555bf865cb77414c4fa2b9974407e43fa4f74b77710d3be9d2646f929fcfd5269b0ffc379914 WHIRLPOOL c85d338f87f5c418009497308ba28bd805769cb5350835dca35f77cce7ce456afe9cbcd66d9db3aea77e3eab0ed228260f7ec2e6825632624d9c80556ed15fbf
+DIST github.com-golang-net-859d1a86bb617c0c20d154590c3c5d3fcb670b07.tar.gz 920336 SHA256 6ca476b72c2b53b181fc32015651b385f565079d8395a28176bf8be168e8a1d2 SHA512 49ccb64c9b675460d12ea6d0456bb1124a92d56e70b04398d14b33dd5879c4e188dcc3e6c79c1aa6f491507f854911a9298fbc61aed60cbdab0205b6995bb4a3 WHIRLPOOL 6995b918f17d4930c246c6796febf09eab7c2777f649565cc4cfc03b770577dbd6a01a8824ba3dde555001cf814e27dd8b886de466e7f5fec1cdbd1791dbc225
+DIST github.com-golang-oauth2-13449ad91cb26cb47661c1b080790392170385fd.tar.gz 38610 SHA256 37eb1785d9f7ed65cf65440f539212afd79542557e87210d6dac0ab1a3bf6dc4 SHA512 9301e42d43ff421f85949b1fd7e60baa183842b0d128c0f4895708c30a91e4e614032a08dda03c2564b41251037c453f95aa21fe1876672e033c83890a96d660 WHIRLPOOL 26cb7db13df1acad3f1e3bd06e0cbac01af3f24c094bd3105179ee3d949a52ccd5666d6860434ae97ed2f1111e8c23f37adfb4d1d5463e5ac94fed6162cb7cfa
+DIST github.com-golang-protobuf-11b8df160996e00fd4b55cbaafb3d84ec6d50fa8.tar.gz 267933 SHA256 327b39ec814a097e18944d161a115990d0bcedd76a4c28d5aad236425278acd5 SHA512 7b6ac268d15fc5e2c07a22784565466abca6257deef90183bab45e1935c915dbebe5560e6583d76b2ba8b58fa22b0c07f5f512c188b6503ebbf47937f844afe9 WHIRLPOOL 8691fdcb7d99993fce6eae79a0bb127161d74c5dfe3d98a4f1b9559e605365bf8753ab506d2b7c691e88ec1bb56d30f31e1ac169e65cb0489b80e70f12b2e1ee
+DIST github.com-golang-snappy-553a641470496b2327abcac10b36396bd98e45c9.tar.gz 62076 SHA256 2ddf0f394a8b5a83942ac351cff5c04f936e6bd6e6cecc73ce6145b9bfd4c6e7 SHA512 a324c8a7687e820f6b322930a054d1e7fc4c37bb66a95d473ef2a67fed703de90e8cc3072273ad2f9c681b1cf7ec1acc0ee9dc735ab593e23eea5cde96eea8a6 WHIRLPOOL cd942c31b7b6d084190030383c0342fbb64baada50f93f07d0cb36c412515f3f528301336d6b0f310b34181acc1f2532bad2b6eddfca245ae0d02e1cffee0656
+DIST github.com-golang-sys-493114f68206f85e7e333beccfabc11e98cba8dd.tar.gz 677040 SHA256 c1f049684c7f44d3542393bcc4f9b51ba5317d324b35fe32cce36f5a39bf2280 SHA512 efebe04d03a37e06ddacc0bbb1c7c35ac6590dd1e2e4d8c3da38f36ecab53a2e488a8e042e7d39a14c1163bf033ebb42e72c4760a0d0acf3aae0ae3fb3355dbc WHIRLPOOL 6e5e3eb016dbf6eb98e730be4642f2cbb82b25d192e0b32558f14caa0598afdb919c821532e23a6ca7d95b94f0ae83754588c79db37fee52c36ea47e36ebb0d5
+DIST github.com-golang-text-ab5ac5f9a8deb4855a60fab02bc61a4ec770bd49.tar.gz 4618514 SHA256 23ff39aa309dcc1062af4f3f341634cca73a46915ef0c7b326546ce44764ab0b SHA512 d3231ceb80f5bb379bd6e9a717c1f16451dfd58f32de221020df5a92d3a686ca85b56120db88a93ac49e9a93aff472658c251de91c5fa6b5fe8d1d4b614dd615 WHIRLPOOL 4dfaeb243e22b316f7b6f25832d5b6f9d578c1c1035345adc6cc44fd07f45a530b9d4c6d7e101509081e81b15b3f8a082c5d49ad527400f6bb3d9c8173d9ceee
+DIST github.com-google-go-genproto-595979c8a7bf586b2d293fb42246bf91a0b893d9.tar.gz 988349 SHA256 e75295c57cc5f8b2be1f13a496bf9aa4bb223fcbf81415eb48240f0bd2e3516e SHA512 1cfcc16d9eb8d6414e943d7a62ea6606527b34135e8baa905f92e1e4f438f245d9cc4db9711c9b191b979bab6eef404adb84c2c85fd2af2c91bc0d8e89a7b1cf WHIRLPOOL 5c5b0019d4cede329a940bb413b14f414634cfe722bb69c49ef84bd203ec70d45e8efef21d065fc4aefb48a792d9bcbae8179c03ab704a7ffe980b859dbe413e
+DIST github.com-google-google-api-go-client-39c3dd417c5a443607650f18e829ad308da08dd2.tar.gz 6388385 SHA256 33a6f85f6a4b2bef1f9c33ddd6f285181200b43f13eba4a191fce2d39efff448 SHA512 5d5d66abff2bad1a758e0a9cd9b12b9d9d2f02df8b9eb6ff0b38ae505808c1a6e78eb46ee0516b92ab04e1241aac827287b2dc050adf84c867168e0b441864ba WHIRLPOOL 0bdc487c8540cdb3615e8e4500602af650acb217b4706eb82efe35a32f674d09da2504b2f864a4eb4849b4e320c7185eb47616dac796b8d767a896d72efd6274
+DIST github.com-googleapis-gax-go-8c160ca1523d8eea3932fbaa494c8964b7724aa8.tar.gz 10165 SHA256 99f92860387ee6b28a4822ac8b67cec6018956850ab3fc325801e85aaf56af3b SHA512 94f00cef5d586dc6b1893bcd1f6ccee22c13888859e4e2e87c9a0dd30ace0011be4e172a5346d22165f1a4b6e637070ad1da808dcc89103a0323094c09d76aa3 WHIRLPOOL 5b2b7977fcf73d3605929a02ab0d9c63a3025d5f6f43928339a3da49372bcf1b84712cf364b49738696a10bf69ee69e086853d24f232d63ab0260b12d770f54d
+DIST github.com-grpc-grpc-go-35170916ff58e89ae03f52e778228e18207e0e02.tar.gz 315740 SHA256 8077270001a7583e3d4eb886d6e9aad8f99729e845110ad524bfc290ac0f70fe SHA512 8c30f7641cb2cbbf274af90579b5e60370e85b1052b6206d02a395d69aa9a545d66fdb732e7636e3b326451be0f88bbf180c690835b39adb4c63d1dd67fc8c6a WHIRLPOOL bfa1c3cda2108c9227edbd8a34cb979f9fd16fcf2207a7484cab428f9c6a41e8117a513f22b3f0ba7f1133736dc72fb45512c74de3c54247fa63935eb566bc1e
+DIST github.com-schwarmco-go-cartesian-product-c2c0aca869a6cbf51e017ce148b949d9dee09bc3.tar.gz 2433 SHA256 1ffd1dd3254758b78020c1cc035a8ba97f9984192911b9101ac8d4f1a3644c45 SHA512 a1767b2c5c6340cb2649d63beac11571ec3c9b2c98011234d5a51eb337d221ea411e517660ae966fd4f582ffef18b088d7125d29ba271bece8b51254dcac940b WHIRLPOOL 2ddcbfab394c646b268cd699bb1adcebb502e4b63f60a76a8ac289b4f82db8090ce46a3fdfd75108931f59ddaea564410b5b6df27f969a4f9c536962df71fd0a
+DIST github.com-syndtr-goleveldb-3c5717caf1475fd25964109a0fc640bd150fce43.tar.gz 137276 SHA256 ca10398b8db38de682325b8af51a9013380d42c4a66809c7a32eb2c26943453a SHA512 bac364a68737f5faed9ec052d47db01dc4aa0eca4ef786a43766b844ff27d8d9f87a94159a17c58745dd4ba002a9a83cd091ab2561a61d01b0a672a82002c1d4 WHIRLPOOL 7a72edccbfaed15dd7ffef987024e27cd292e62feb03318999088d9343368726d597e373203896e6eda68a1bd4d6501b44c3a9cf2705768e14e9462814f588ca
+EBUILD docker_auth-1.3-r1.ebuild 3746 SHA256 4965d3430b9d32ce7559045e7a4d713cd8060897327f403a7deb5fbd58cd96ab SHA512 2cea02068ed914d28a131393eedc26ffed49c90985bcaa3c43d14080413f52f818fb91091b9571ae7e8c2a3337c216fbf1fc2fa0e70a0da22bd3d91b9c7ea25b WHIRLPOOL 7c019c58e480846b9a0bb83fcba078c523f19ebb60f9fce4cc4c9178c286a0568ba65f76f31900a9cce5d496e797082b21879728a6bf751671cb5cc5ebcee1e8
+EBUILD docker_auth-1.3.ebuild 3698 SHA256 e41a406a9100b274df9ee420db9aa9a7116da9e8631f4073afed7628866c20f2 SHA512 9282483ebb49b51dd4ca22a1090b4a41147c016c5423442d70787167de9845e5ab58e919ab217f838f364c97c6c411dd1dd0bc7e1e451b006037f3b9001e309a WHIRLPOOL 7e1f700566097bb24cc6a634ed613e58dd8f9a7ecd9adb312f271b8f600ed22a058396ec7e452d029ac6f9fd847da394c10d35fb3ab99547e1a90ce9c8df6aa6
+MISC ChangeLog 787 SHA256 780953bd3e21b7ee9dc54fb274932a5a5792d6e7533cf53f53af10959d6444c9 SHA512 848faf97f797abff43904b0322e713373d983e25bff0f8c986e345a429c1ced8889de2b4478475bbdb7f7e3a878db1ff98545c9c1a896f06d8f650eea1fa0126 WHIRLPOOL 56646e2d79c6f9c3059aeea7cde431577082f9a2b0c129fb292c6ab26ba4f50cd23f8548db8d3b129bec6d5f019a920a35bd13b6916e8aca6692f1c461a1b0c5
+MISC metadata.xml 329 SHA256 260246368fd36ceaf0d76b12ba5b59de6c1096bc81c00a89f0debfa8100a6ff9 SHA512 83a99677c1de5a527b72abdb632ea1ea0b0be3fedac28b6c20efb7b76999b0024e6d0a072e9b28b5458b79be14df1293b4f6a314448f5e41965ce4f2e9c65904 WHIRLPOOL a5abf828e8c1ae0723e1187948255e4773c0b10f1d4ba956196209e60b16d96f6acbd44179a5fcef2ea1caed8dd192ba5374340a6f4fbeda1559f0713c3743e6
diff --git a/sys-auth/docker_auth/docker_auth-1.3-r1.ebuild b/sys-auth/docker_auth/docker_auth-1.3-r1.ebuild
new file mode 100644
index 000000000000..ebeaf7fa15ef
--- /dev/null
+++ b/sys-auth/docker_auth/docker_auth-1.3-r1.ebuild
@@ -0,0 +1,88 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+EGO_PN="github.com/cesanta/docker_auth"
+
+EGO_VENDOR=(
+ "github.com/dchest/uniuri 8902c56451e9b58ff940bbe5fec35d5f9c04584a"
+ "github.com/deckarep/golang-set fc8930a5e645572ee00bf66358ed3414f3c13b90"
+ "github.com/docker/distribution 0700fa570d7bcc1b3e46ee127c4489fd25f4daa3"
+ "github.com/docker/libtrust aabc10ec26b754e797f9028f4589c5b7bd90dc20"
+ "github.com/facebookgo/httpdown a3b1354551a26449fbe05f5d855937f6e7acbd71"
+ "github.com/facebookgo/clock 600d898af40aa09a7a93ecb9265d87b0504b6f03"
+ "github.com/facebookgo/stats 1b76add642e42c6ffba7211ad7b3939ce654526e"
+ "github.com/go-ldap/ldap 13cedcf58a1ea124045dea529a66c849d3444c8e"
+ "github.com/cesanta/glog 22eb27a0ae192b290b25537b8e876556fc25129c"
+ "github.com/schwarmco/go-cartesian-product c2c0aca869a6cbf51e017ce148b949d9dee09bc3"
+ "github.com/syndtr/goleveldb 3c5717caf1475fd25964109a0fc640bd150fce43"
+ "github.com/golang/snappy 553a641470496b2327abcac10b36396bd98e45c9"
+ "gopkg.in/asn1-ber.v1 4e86f4367175e39f69d9358a5f17b4dda270378d github.com/go-asn1-ber/asn1-ber"
+ "gopkg.in/fsnotify.v1 629574ca2a5df945712d3079857300b5e4da0236 github.com/fsnotify/fsnotify"
+ "gopkg.in/mgo.v2 3f83fa5005286a7fe593b055f0d7771a7dce4655 github.com/go-mgo/mgo"
+ "gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a github.com/go-yaml/yaml"
+ "golang.org/x/crypto e1a4589e7d3ea14a3352255d04b6f1a418845e5e github.com/golang/crypto"
+ "golang.org/x/sys 493114f68206f85e7e333beccfabc11e98cba8dd github.com/golang/sys"
+ "golang.org/x/net 859d1a86bb617c0c20d154590c3c5d3fcb670b07 github.com/golang/net"
+ "google.golang.org/api 39c3dd417c5a443607650f18e829ad308da08dd2 github.com/google/google-api-go-client"
+ "google.golang.org/grpc 35170916ff58e89ae03f52e778228e18207e0e02 github.com/grpc/grpc-go"
+ "github.com/golang/protobuf 11b8df160996e00fd4b55cbaafb3d84ec6d50fa8"
+ "golang.org/x/oauth2 13449ad91cb26cb47661c1b080790392170385fd github.com/golang/oauth2"
+ "cloud.google.com/go bbf380d59635bf267fc8a8df03d6d261c448ee3c github.com/GoogleCloudPlatform/gcloud-golang"
+ "golang.org/x/text ab5ac5f9a8deb4855a60fab02bc61a4ec770bd49 github.com/golang/text"
+ "github.com/googleapis/gax-go 8c160ca1523d8eea3932fbaa494c8964b7724aa8"
+ "google.golang.org/genproto 595979c8a7bf586b2d293fb42246bf91a0b893d9 github.com/google/go-genproto"
+ )
+
+inherit user golang-build golang-vcs-snapshot
+EGIT_COMMIT="2cd3699dab4e44a239db136a52734dab25897bee"
+SHORT_COMMIT=${EGIT_COMMIT:0:7}
+SRC_URI="https://${EGO_PN}/archive/${PV}.tar.gz -> ${P}.tar.gz
+ ${EGO_VENDOR_URI}"
+KEYWORDS="~amd64"
+
+DESCRIPTION="Docker Registry 2 authentication server"
+HOMEPAGE="https://github.com/cesanta/docker_auth"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+RESTRICT="test"
+
+pkg_setup() {
+ enewgroup ${PN}
+ enewuser ${PN} -1 -1 /dev/null ${PN}
+}
+
+src_prepare() {
+ default
+ pushd src/${EGO_PN}
+ eapply "${FILESDIR}/${PN}-ldap-group-support-1.patch"
+ eapply "${FILESDIR}/${PN}-ldap-cacert.patch"
+ cp "${FILESDIR}/version.go" auth_server/version.go || die
+ sed -i -e "s/{version}/${PV}/" -e "s/{build_id}/${SHORT_COMMIT}/" auth_server/version.go || die
+ popd || die
+}
+
+src_compile() {
+ pushd src/${EGO_PN}/auth_server || die
+ GOPATH="${WORKDIR}/${P}" go build -o "bin/auth_server" || die
+ popd || die
+}
+
+src_install() {
+ pushd src/${EGO_PN} || die
+ dodoc README.md docs/Backend_MongoDB.md
+ insinto /usr/share/${PF}
+ doins -r examples
+ insinto /etc/docker_auth/
+ newins examples/reference.yml config.yml.example
+ dobin auth_server/bin/auth_server
+ popd || die
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}"/${PN}.logrotated ${PN}
+ keepdir /var/log/docker_auth
+}
diff --git a/sys-auth/docker_auth/docker_auth-1.3.ebuild b/sys-auth/docker_auth/docker_auth-1.3.ebuild
new file mode 100644
index 000000000000..1bd472fae307
--- /dev/null
+++ b/sys-auth/docker_auth/docker_auth-1.3.ebuild
@@ -0,0 +1,87 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+EGO_PN="github.com/cesanta/docker_auth"
+
+EGO_VENDOR=(
+ "github.com/dchest/uniuri 8902c56451e9b58ff940bbe5fec35d5f9c04584a"
+ "github.com/deckarep/golang-set fc8930a5e645572ee00bf66358ed3414f3c13b90"
+ "github.com/docker/distribution 0700fa570d7bcc1b3e46ee127c4489fd25f4daa3"
+ "github.com/docker/libtrust aabc10ec26b754e797f9028f4589c5b7bd90dc20"
+ "github.com/facebookgo/httpdown a3b1354551a26449fbe05f5d855937f6e7acbd71"
+ "github.com/facebookgo/clock 600d898af40aa09a7a93ecb9265d87b0504b6f03"
+ "github.com/facebookgo/stats 1b76add642e42c6ffba7211ad7b3939ce654526e"
+ "github.com/go-ldap/ldap 13cedcf58a1ea124045dea529a66c849d3444c8e"
+ "github.com/cesanta/glog 22eb27a0ae192b290b25537b8e876556fc25129c"
+ "github.com/schwarmco/go-cartesian-product c2c0aca869a6cbf51e017ce148b949d9dee09bc3"
+ "github.com/syndtr/goleveldb 3c5717caf1475fd25964109a0fc640bd150fce43"
+ "github.com/golang/snappy 553a641470496b2327abcac10b36396bd98e45c9"
+ "gopkg.in/asn1-ber.v1 4e86f4367175e39f69d9358a5f17b4dda270378d github.com/go-asn1-ber/asn1-ber"
+ "gopkg.in/fsnotify.v1 629574ca2a5df945712d3079857300b5e4da0236 github.com/fsnotify/fsnotify"
+ "gopkg.in/mgo.v2 3f83fa5005286a7fe593b055f0d7771a7dce4655 github.com/go-mgo/mgo"
+ "gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a github.com/go-yaml/yaml"
+ "golang.org/x/crypto e1a4589e7d3ea14a3352255d04b6f1a418845e5e github.com/golang/crypto"
+ "golang.org/x/sys 493114f68206f85e7e333beccfabc11e98cba8dd github.com/golang/sys"
+ "golang.org/x/net 859d1a86bb617c0c20d154590c3c5d3fcb670b07 github.com/golang/net"
+ "google.golang.org/api 39c3dd417c5a443607650f18e829ad308da08dd2 github.com/google/google-api-go-client"
+ "google.golang.org/grpc 35170916ff58e89ae03f52e778228e18207e0e02 github.com/grpc/grpc-go"
+ "github.com/golang/protobuf 11b8df160996e00fd4b55cbaafb3d84ec6d50fa8"
+ "golang.org/x/oauth2 13449ad91cb26cb47661c1b080790392170385fd github.com/golang/oauth2"
+ "cloud.google.com/go bbf380d59635bf267fc8a8df03d6d261c448ee3c github.com/GoogleCloudPlatform/gcloud-golang"
+ "golang.org/x/text ab5ac5f9a8deb4855a60fab02bc61a4ec770bd49 github.com/golang/text"
+ "github.com/googleapis/gax-go 8c160ca1523d8eea3932fbaa494c8964b7724aa8"
+ "google.golang.org/genproto 595979c8a7bf586b2d293fb42246bf91a0b893d9 github.com/google/go-genproto"
+ )
+
+inherit user golang-build golang-vcs-snapshot
+EGIT_COMMIT="2cd3699dab4e44a239db136a52734dab25897bee"
+SHORT_COMMIT=${EGIT_COMMIT:0:7}
+SRC_URI="https://${EGO_PN}/archive/${PV}.tar.gz -> ${P}.tar.gz
+ ${EGO_VENDOR_URI}"
+KEYWORDS="~amd64"
+
+DESCRIPTION="Docker Registry 2 authentication server"
+HOMEPAGE="https://github.com/cesanta/docker_auth"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+RESTRICT="test"
+
+pkg_setup() {
+ enewgroup ${PN}
+ enewuser ${PN} -1 -1 /dev/null ${PN}
+}
+
+src_prepare() {
+ default
+ pushd src/${EGO_PN}
+ eapply "${FILESDIR}/${PN}-ldap-group-support.patch"
+ cp "${FILESDIR}/version.go" auth_server/version.go || die
+ sed -i -e "s/{version}/${PV}/" -e "s/{build_id}/${SHORT_COMMIT}/" auth_server/version.go || die
+ popd || die
+}
+
+src_compile() {
+ pushd src/${EGO_PN}/auth_server || die
+ GOPATH="${WORKDIR}/${P}" go build -o "bin/auth_server" || die
+ popd || die
+}
+
+src_install() {
+ pushd src/${EGO_PN} || die
+ dodoc README.md docs/Backend_MongoDB.md
+ insinto /usr/share/${PF}
+ doins -r examples
+ insinto /etc/docker_auth/
+ newins examples/reference.yml config.yml.example
+ dobin auth_server/bin/auth_server
+ popd || die
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}"/${PN}.logrotated ${PN}
+ keepdir /var/log/docker_auth
+}
diff --git a/sys-auth/docker_auth/files/docker_auth-ldap-cacert.patch b/sys-auth/docker_auth/files/docker_auth-ldap-cacert.patch
new file mode 100644
index 000000000000..e43e9e6ca889
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth-ldap-cacert.patch
@@ -0,0 +1,67 @@
+From 5505de31a91aea88e0cf623ec8edfd928b5432a7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Manuel=20R=C3=BCger?= <mrueg@gentoo.org>
+Date: Mon, 18 Sep 2017 14:02:38 +0200
+Subject: [PATCH] Set custom CA certificate for ldap cert verification
+
+Code taken from: https://github.com/hashicorp/go-rootcerts/blob/master/rootcerts.go
+Original author: Paul Hinze <phinze@phinze.com>
+---
+ auth_server/authn/ldap_auth.go | 17 ++++++++++++++++-
+ examples/reference.yml | 2 ++
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index 3bdf7c3..a3425ed 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -19,6 +19,7 @@ package authn
+ import (
+ "bytes"
+ "crypto/tls"
++ "crypto/x509"
+ "fmt"
+ "io/ioutil"
+ "strings"
+@@ -31,6 +32,7 @@ type LDAPAuthConfig struct {
+ Addr string `yaml:"addr,omitempty"`
+ TLS string `yaml:"tls,omitempty"`
+ InsecureTLSSkipVerify bool `yaml:"insecure_tls_skip_verify,omitempty"`
++ CACertificate string `yaml:"ca_certificate,omitempty"`
+ Base string `yaml:"base,omitempty"`
+ Filter string `yaml:"filter,omitempty"`
+ BindDN string `yaml:"bind_dn,omitempty"`
+@@ -140,7 +142,20 @@ func (la *LDAPAuth) ldapConnection() (*ldap.Conn, error) {
+ tlsConfig := &tls.Config{InsecureSkipVerify: true}
+ if !la.config.InsecureTLSSkipVerify {
+ addr := strings.Split(la.config.Addr, ":")
+- tlsConfig = &tls.Config{InsecureSkipVerify: false, ServerName: addr[0]}
++ if la.config.CACertificate != "" {
++ pool := x509.NewCertPool()
++ pem, err := ioutil.ReadFile(la.config.CACertificate)
++ if err != nil {
++ return nil, fmt.Errorf("Error loading CA File: %s", err)
++ }
++ ok := pool.AppendCertsFromPEM(pem)
++ if !ok {
++ return nil, fmt.Errorf("Error loading CA File: Couldn't parse PEM in: %s", la.config.CACertificate)
++ }
++ tlsConfig = &tls.Config{InsecureSkipVerify: false, ServerName: addr[0], RootCAs: pool}
++ } else {
++ tlsConfig = &tls.Config{InsecureSkipVerify: false, ServerName: addr[0]}
++ }
+ }
+
+ if la.config.TLS == "" || la.config.TLS == "none" || la.config.TLS == "starttls" {
+diff --git a/examples/reference.yml b/examples/reference.yml
+index 3090978..769cc91 100644
+--- a/examples/reference.yml
++++ b/examples/reference.yml
+@@ -131,6 +131,8 @@ ldap_auth:
+ tls: always
+ # set to true to allow insecure tls
+ insecure_tls_skip_verify: false
++ # set this to specify the ca certificate path
++ ca_cert:
+ # In case bind DN and password is required for querying user information,
+ # specify them here. Plain text password is read from the file.
+ bind_dn:
diff --git a/sys-auth/docker_auth/files/docker_auth-ldap-group-support-1.patch b/sys-auth/docker_auth/files/docker_auth-ldap-group-support-1.patch
new file mode 100644
index 000000000000..f9e98f410c8a
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth-ldap-group-support-1.patch
@@ -0,0 +1,394 @@
+From 4a33badac6b74617dfe3797a716a6907cf018b27 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Mon, 27 Feb 2017 19:09:52 +1300
+Subject: [PATCH 1/4] Initial proof of concept mapping memberOf CN to the label
+ groups #63
+
+---
+ auth_server/authn/ldap_auth.go | 73 ++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 60 insertions(+), 13 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index f8fc08f..42f5ad0 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -17,7 +17,6 @@
+ package authn
+
+ import (
+- "bytes"
+ "crypto/tls"
+ "fmt"
+ "io/ioutil"
+@@ -71,10 +70,20 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ account = la.escapeAccountInput(account)
+
+ filter := la.getFilter(account)
+- accountEntryDN, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &[]string{})
++
++ // dnAndGroupAttr := []string{"DN"} // example of no groups mapping attribute
++ groupAttribute := "memberOf"
++ dnAndGroupAttr := []string{"DN", groupAttribute}
++
++ entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &dnAndGroupAttr)
+ if uSearchErr != nil {
+ return false, nil, uSearchErr
+ }
++ if len(entryAttrMap) < 1 || entryAttrMap["DN"] == nil || len(entryAttrMap["DN"]) != 1 {
++ return false, nil, NoMatch // User does not exist
++ }
++
++ accountEntryDN := entryAttrMap["DN"][0]
+ if accountEntryDN == "" {
+ return false, nil, NoMatch // User does not exist
+ }
+@@ -93,6 +102,20 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ return false, nil, bindErr
+ }
+
++ // Extract group names from the attribute values
++ if entryAttrMap[groupAttribute] != nil {
++ rawGroups := entryAttrMap[groupAttribute]
++ labels := make(map[string][]string)
++ var groups []string
++ for _, value := range rawGroups {
++ cn := la.getCNFromDN(value)
++ groups = append(groups, cn)
++ }
++ labels["groups"] = groups
++
++ return true, labels, nil
++ }
++
+ return true, nil, nil
+ }
+
+@@ -170,9 +193,9 @@ func (la *LDAPAuth) getFilter(account string) string {
+
+ //ldap search and return required attributes' value from searched entries
+ //default return entry's DN value if you leave attrs array empty
+-func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (string, error) {
++func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (map[string][]string, error) {
+ if l == nil {
+- return "", fmt.Errorf("No ldap connection!")
++ return nil, fmt.Errorf("No ldap connection!")
+ }
+ glog.V(2).Infof("Searching...basedDN:%s, filter:%s", *baseDN, *filter)
+ searchRequest := ldap.NewSearchRequest(
+@@ -183,30 +206,54 @@ func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, att
+ nil)
+ sr, err := l.Search(searchRequest)
+ if err != nil {
+- return "", err
++ return nil, err
+ }
+
+ if len(sr.Entries) == 0 {
+- return "", nil // User does not exist
++ return nil, nil // User does not exist
+ } else if len(sr.Entries) > 1 {
+- return "", fmt.Errorf("Too many entries returned.")
++ return nil, fmt.Errorf("Too many entries returned.")
+ }
+
+- var buffer bytes.Buffer
++ result := make(map[string][]string)
+ for _, entry := range sr.Entries {
++
+ if len(*attrs) == 0 {
+ glog.V(2).Infof("Entry DN = %s", entry.DN)
+- buffer.WriteString(entry.DN)
++ result["DN"] = []string{entry.DN}
+ } else {
+ for _, attr := range *attrs {
+- values := strings.Join(entry.GetAttributeValues(attr), " ")
+- glog.V(2).Infof("Entry %s = %s", attr, values)
+- buffer.WriteString(values)
++ var values []string
++ if attr == "DN" {
++ // DN is excluded from attributes
++ values = []string{entry.DN}
++ } else {
++ values = entry.GetAttributeValues(attr)
++ }
++ valuesString := strings.Join(values, "\n")
++ glog.V(2).Infof("Entry %s = %s", attr, valuesString)
++ result[attr] = values
++ }
++ }
++ }
++
++ return result, nil
++}
++
++func (la *LDAPAuth) getCNFromDN(dn string) string {
++ parsedDN, err := ldap.ParseDN(dn)
++ if err != nil || len(parsedDN.RDNs) > 0 {
++ for _, rdn := range parsedDN.RDNs {
++ for _, rdnAttr := range rdn.Attributes {
++ if rdnAttr.Type == "CN" {
++ return rdnAttr.Value
++ }
+ }
+ }
+ }
+
+- return buffer.String(), nil
++ // else try using raw DN
++ return dn
+ }
+
+ func (la *LDAPAuth) Stop() {
+
+From ddde2fa779e746d7e74cd972a4c6795c72f17ee6 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Tue, 28 Feb 2017 18:09:55 +1300
+Subject: [PATCH 2/4] Apply attribute mapping from configuration
+
+---
+ auth_server/authn/ldap_auth.go | 125 ++++++++++++++++++++++++-----------------
+ 1 file changed, 74 insertions(+), 51 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index 42f5ad0..6f733a2 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -26,16 +26,22 @@ import (
+ "github.com/golang/glog"
+ )
+
++type LabelMap struct {
++ Attribute string `yaml:"attribute,omitempty"`
++ ParseCN bool `yaml:"parse_cn,omitempty"`
++}
++
+ type LDAPAuthConfig struct {
+- Addr string `yaml:"addr,omitempty"`
+- TLS string `yaml:"tls,omitempty"`
+- InsecureTLSSkipVerify bool `yaml:"insecure_tls_skip_verify,omitempty"`
+- Base string `yaml:"base,omitempty"`
+- Filter string `yaml:"filter,omitempty"`
+- BindDN string `yaml:"bind_dn,omitempty"`
+- BindPasswordFile string `yaml:"bind_password_file,omitempty"`
+- GroupBaseDN string `yaml:"group_base_dn,omitempty"`
+- GroupFilter string `yaml:"group_filter,omitempty"`
++ Addr string `yaml:"addr,omitempty"`
++ TLS string `yaml:"tls,omitempty"`
++ InsecureTLSSkipVerify bool `yaml:"insecure_tls_skip_verify,omitempty"`
++ Base string `yaml:"base,omitempty"`
++ Filter string `yaml:"filter,omitempty"`
++ BindDN string `yaml:"bind_dn,omitempty"`
++ BindPasswordFile string `yaml:"bind_password_file,omitempty"`
++ LabelMaps map[string]LabelMap `yaml:"labels,omitempty"`
++ GroupBaseDN string `yaml:"group_base_dn,omitempty"`
++ GroupFilter string `yaml:"group_filter,omitempty"`
+ }
+
+ type LDAPAuth struct {
+@@ -71,22 +77,19 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+
+ filter := la.getFilter(account)
+
+- // dnAndGroupAttr := []string{"DN"} // example of no groups mapping attribute
+- groupAttribute := "memberOf"
+- dnAndGroupAttr := []string{"DN", groupAttribute}
++ labelAttributes, labelsConfigErr := la.getLabelAttributes()
++ if labelsConfigErr != nil {
++ return false, nil, labelsConfigErr
++ }
+
+- entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &dnAndGroupAttr)
++ accountEntryDN, entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &labelAttributes)
+ if uSearchErr != nil {
+ return false, nil, uSearchErr
+ }
+- if len(entryAttrMap) < 1 || entryAttrMap["DN"] == nil || len(entryAttrMap["DN"]) != 1 {
+- return false, nil, NoMatch // User does not exist
+- }
+-
+- accountEntryDN := entryAttrMap["DN"][0]
+ if accountEntryDN == "" {
+ return false, nil, NoMatch // User does not exist
+ }
++
+ // Bind as the user to verify their password
+ if len(accountEntryDN) > 0 {
+ err := l.Bind(accountEntryDN, string(password))
+@@ -102,21 +105,13 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ return false, nil, bindErr
+ }
+
+- // Extract group names from the attribute values
+- if entryAttrMap[groupAttribute] != nil {
+- rawGroups := entryAttrMap[groupAttribute]
+- labels := make(map[string][]string)
+- var groups []string
+- for _, value := range rawGroups {
+- cn := la.getCNFromDN(value)
+- groups = append(groups, cn)
+- }
+- labels["groups"] = groups
+-
+- return true, labels, nil
++ // Extract labels from the attribute values
++ labels, labelsExtractErr := la.getLabelsFromMap(entryAttrMap)
++ if labelsExtractErr != nil {
++ return false, nil, labelsExtractErr
+ }
+
+- return true, nil, nil
++ return true, labels, nil
+ }
+
+ func (la *LDAPAuth) bindReadOnlyUser(l *ldap.Conn) error {
+@@ -193,9 +188,9 @@ func (la *LDAPAuth) getFilter(account string) string {
+
+ //ldap search and return required attributes' value from searched entries
+ //default return entry's DN value if you leave attrs array empty
+-func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (map[string][]string, error) {
++func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (string, map[string][]string, error) {
+ if l == nil {
+- return nil, fmt.Errorf("No ldap connection!")
++ return "", nil, fmt.Errorf("No ldap connection!")
+ }
+ glog.V(2).Infof("Searching...basedDN:%s, filter:%s", *baseDN, *filter)
+ searchRequest := ldap.NewSearchRequest(
+@@ -206,38 +201,66 @@ func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, att
+ nil)
+ sr, err := l.Search(searchRequest)
+ if err != nil {
+- return nil, err
++ return "", nil, err
+ }
+
+ if len(sr.Entries) == 0 {
+- return nil, nil // User does not exist
++ return "", nil, nil // User does not exist
+ } else if len(sr.Entries) > 1 {
+- return nil, fmt.Errorf("Too many entries returned.")
++ return "", nil, fmt.Errorf("Too many entries returned.")
+ }
+
+- result := make(map[string][]string)
++ attributes := make(map[string][]string)
++ var entryDn string
+ for _, entry := range sr.Entries {
+-
++ entryDn = entry.DN
+ if len(*attrs) == 0 {
+- glog.V(2).Infof("Entry DN = %s", entry.DN)
+- result["DN"] = []string{entry.DN}
++ glog.V(2).Infof("Entry DN = %s", entryDn)
+ } else {
+ for _, attr := range *attrs {
+- var values []string
+- if attr == "DN" {
+- // DN is excluded from attributes
+- values = []string{entry.DN}
+- } else {
+- values = entry.GetAttributeValues(attr)
+- }
+- valuesString := strings.Join(values, "\n")
+- glog.V(2).Infof("Entry %s = %s", attr, valuesString)
+- result[attr] = values
++ values := entry.GetAttributeValues(attr)
++ glog.V(2).Infof("Entry %s = %s", attr, strings.Join(values, "\n"))
++ attributes[attr] = values
+ }
+ }
+ }
+
+- return result, nil
++ return entryDn, attributes, nil
++}
++
++func (la *LDAPAuth) getLabelAttributes() ([]string, error) {
++ labelAttributes := make([]string, len(la.config.LabelMaps))
++ i := 0
++ for key, mapping := range la.config.LabelMaps {
++ if mapping.Attribute == "" {
++ return nil, fmt.Errorf("Label %s is missing 'attribute' to map from", key)
++ }
++ labelAttributes[i] = mapping.Attribute
++ i++
++ }
++ return labelAttributes, nil
++}
++
++func (la *LDAPAuth) getLabelsFromMap(attrMap map[string][]string) (map[string][]string, error) {
++ labels := make(map[string][]string)
++ for key, mapping := range la.config.LabelMaps {
++ if mapping.Attribute == "" {
++ return nil, fmt.Errorf("Label %s is missing 'attribute' to map from", key)
++ }
++
++ mappingValues := attrMap[mapping.Attribute]
++ if mappingValues != nil {
++ if mapping.ParseCN {
++ // shorten attribute to its common name
++ for i, value := range mappingValues {
++ cn := la.getCNFromDN(value)
++ mappingValues[i] = cn
++ }
++ }
++ labels[key] = mappingValues
++ }
++ }
++ return labels, nil
+ }
+
+ func (la *LDAPAuth) getCNFromDN(dn string) string {
+
+From cd37001980267a99a9faa19f1927891af63acb90 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Tue, 28 Feb 2017 18:27:16 +1300
+Subject: [PATCH 3/4] Remove unused configuration fields, never implemented?
+
+---
+ auth_server/authn/ldap_auth.go | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index 6f733a2..9c8bcb8 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -40,8 +40,6 @@ type LDAPAuthConfig struct {
+ BindDN string `yaml:"bind_dn,omitempty"`
+ BindPasswordFile string `yaml:"bind_password_file,omitempty"`
+ LabelMaps map[string]LabelMap `yaml:"labels,omitempty"`
+- GroupBaseDN string `yaml:"group_base_dn,omitempty"`
+- GroupFilter string `yaml:"group_filter,omitempty"`
+ }
+
+ type LDAPAuth struct {
+
+From 2fd43be4e5c2cfe177d9e1d36bcd1b29f4d6f262 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Fri, 1 Sep 2017 22:50:19 +1200
+Subject: [PATCH 4/4] Add LDAP label map examples to the reference config
+
+---
+ examples/reference.yml | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/examples/reference.yml b/examples/reference.yml
+index b8bb08c..40c5762 100644
+--- a/examples/reference.yml
++++ b/examples/reference.yml
+@@ -134,6 +134,16 @@ ldap_auth:
+ # User query settings. ${account} is expanded from auth request
+ base: o=example.com
+ filter: (&(uid=${account})(objectClass=person))
++ # Labels can be mapped from LDAP attributes
++ labels:
++ # Add the user's title to a label called title
++ title:
++ attribute: title
++ # Add the user's memberOf values to a label called groups
++ groups:
++ attribute: memberOf
++ # Special handling to simplify the values to just the common name
++ parse_cn: true
+
+ mongo_auth:
+ # Essentially all options are described here: https://godoc.org/gopkg.in/mgo.v2#DialInfo
diff --git a/sys-auth/docker_auth/files/docker_auth-ldap-group-support.patch b/sys-auth/docker_auth/files/docker_auth-ldap-group-support.patch
new file mode 100644
index 000000000000..69858872f496
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth-ldap-group-support.patch
@@ -0,0 +1,363 @@
+From 4a33badac6b74617dfe3797a716a6907cf018b27 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Mon, 27 Feb 2017 19:09:52 +1300
+Subject: [PATCH 1/3] Initial proof of concept mapping memberOf CN to the label
+ groups #63
+
+---
+ auth_server/authn/ldap_auth.go | 73 ++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 60 insertions(+), 13 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index f8fc08f..42f5ad0 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -17,7 +17,6 @@
+ package authn
+
+ import (
+- "bytes"
+ "crypto/tls"
+ "fmt"
+ "io/ioutil"
+@@ -71,10 +70,20 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ account = la.escapeAccountInput(account)
+
+ filter := la.getFilter(account)
+- accountEntryDN, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &[]string{})
++
++ // dnAndGroupAttr := []string{"DN"} // example of no groups mapping attribute
++ groupAttribute := "memberOf"
++ dnAndGroupAttr := []string{"DN", groupAttribute}
++
++ entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &dnAndGroupAttr)
+ if uSearchErr != nil {
+ return false, nil, uSearchErr
+ }
++ if len(entryAttrMap) < 1 || entryAttrMap["DN"] == nil || len(entryAttrMap["DN"]) != 1 {
++ return false, nil, NoMatch // User does not exist
++ }
++
++ accountEntryDN := entryAttrMap["DN"][0]
+ if accountEntryDN == "" {
+ return false, nil, NoMatch // User does not exist
+ }
+@@ -93,6 +102,20 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ return false, nil, bindErr
+ }
+
++ // Extract group names from the attribute values
++ if entryAttrMap[groupAttribute] != nil {
++ rawGroups := entryAttrMap[groupAttribute]
++ labels := make(map[string][]string)
++ var groups []string
++ for _, value := range rawGroups {
++ cn := la.getCNFromDN(value)
++ groups = append(groups, cn)
++ }
++ labels["groups"] = groups
++
++ return true, labels, nil
++ }
++
+ return true, nil, nil
+ }
+
+@@ -170,9 +193,9 @@ func (la *LDAPAuth) getFilter(account string) string {
+
+ //ldap search and return required attributes' value from searched entries
+ //default return entry's DN value if you leave attrs array empty
+-func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (string, error) {
++func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (map[string][]string, error) {
+ if l == nil {
+- return "", fmt.Errorf("No ldap connection!")
++ return nil, fmt.Errorf("No ldap connection!")
+ }
+ glog.V(2).Infof("Searching...basedDN:%s, filter:%s", *baseDN, *filter)
+ searchRequest := ldap.NewSearchRequest(
+@@ -183,30 +206,54 @@ func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, att
+ nil)
+ sr, err := l.Search(searchRequest)
+ if err != nil {
+- return "", err
++ return nil, err
+ }
+
+ if len(sr.Entries) == 0 {
+- return "", nil // User does not exist
++ return nil, nil // User does not exist
+ } else if len(sr.Entries) > 1 {
+- return "", fmt.Errorf("Too many entries returned.")
++ return nil, fmt.Errorf("Too many entries returned.")
+ }
+
+- var buffer bytes.Buffer
++ result := make(map[string][]string)
+ for _, entry := range sr.Entries {
++
+ if len(*attrs) == 0 {
+ glog.V(2).Infof("Entry DN = %s", entry.DN)
+- buffer.WriteString(entry.DN)
++ result["DN"] = []string{entry.DN}
+ } else {
+ for _, attr := range *attrs {
+- values := strings.Join(entry.GetAttributeValues(attr), " ")
+- glog.V(2).Infof("Entry %s = %s", attr, values)
+- buffer.WriteString(values)
++ var values []string
++ if attr == "DN" {
++ // DN is excluded from attributes
++ values = []string{entry.DN}
++ } else {
++ values = entry.GetAttributeValues(attr)
++ }
++ valuesString := strings.Join(values, "\n")
++ glog.V(2).Infof("Entry %s = %s", attr, valuesString)
++ result[attr] = values
++ }
++ }
++ }
++
++ return result, nil
++}
++
++func (la *LDAPAuth) getCNFromDN(dn string) string {
++ parsedDN, err := ldap.ParseDN(dn)
++ if err != nil || len(parsedDN.RDNs) > 0 {
++ for _, rdn := range parsedDN.RDNs {
++ for _, rdnAttr := range rdn.Attributes {
++ if rdnAttr.Type == "CN" {
++ return rdnAttr.Value
++ }
+ }
+ }
+ }
+
+- return buffer.String(), nil
++ // else try using raw DN
++ return dn
+ }
+
+ func (la *LDAPAuth) Stop() {
+
+From ddde2fa779e746d7e74cd972a4c6795c72f17ee6 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Tue, 28 Feb 2017 18:09:55 +1300
+Subject: [PATCH 2/3] Apply attribute mapping from configuration
+
+---
+ auth_server/authn/ldap_auth.go | 125 ++++++++++++++++++++++++-----------------
+ 1 file changed, 74 insertions(+), 51 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index 42f5ad0..6f733a2 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -26,16 +26,22 @@ import (
+ "github.com/golang/glog"
+ )
+
++type LabelMap struct {
++ Attribute string `yaml:"attribute,omitempty"`
++ ParseCN bool `yaml:"parse_cn,omitempty"`
++}
++
+ type LDAPAuthConfig struct {
+- Addr string `yaml:"addr,omitempty"`
+- TLS string `yaml:"tls,omitempty"`
+- InsecureTLSSkipVerify bool `yaml:"insecure_tls_skip_verify,omitempty"`
+- Base string `yaml:"base,omitempty"`
+- Filter string `yaml:"filter,omitempty"`
+- BindDN string `yaml:"bind_dn,omitempty"`
+- BindPasswordFile string `yaml:"bind_password_file,omitempty"`
+- GroupBaseDN string `yaml:"group_base_dn,omitempty"`
+- GroupFilter string `yaml:"group_filter,omitempty"`
++ Addr string `yaml:"addr,omitempty"`
++ TLS string `yaml:"tls,omitempty"`
++ InsecureTLSSkipVerify bool `yaml:"insecure_tls_skip_verify,omitempty"`
++ Base string `yaml:"base,omitempty"`
++ Filter string `yaml:"filter,omitempty"`
++ BindDN string `yaml:"bind_dn,omitempty"`
++ BindPasswordFile string `yaml:"bind_password_file,omitempty"`
++ LabelMaps map[string]LabelMap `yaml:"labels,omitempty"`
++ GroupBaseDN string `yaml:"group_base_dn,omitempty"`
++ GroupFilter string `yaml:"group_filter,omitempty"`
+ }
+
+ type LDAPAuth struct {
+@@ -71,22 +77,19 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+
+ filter := la.getFilter(account)
+
+- // dnAndGroupAttr := []string{"DN"} // example of no groups mapping attribute
+- groupAttribute := "memberOf"
+- dnAndGroupAttr := []string{"DN", groupAttribute}
++ labelAttributes, labelsConfigErr := la.getLabelAttributes()
++ if labelsConfigErr != nil {
++ return false, nil, labelsConfigErr
++ }
+
+- entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &dnAndGroupAttr)
++ accountEntryDN, entryAttrMap, uSearchErr := la.ldapSearch(l, &la.config.Base, &filter, &labelAttributes)
+ if uSearchErr != nil {
+ return false, nil, uSearchErr
+ }
+- if len(entryAttrMap) < 1 || entryAttrMap["DN"] == nil || len(entryAttrMap["DN"]) != 1 {
+- return false, nil, NoMatch // User does not exist
+- }
+-
+- accountEntryDN := entryAttrMap["DN"][0]
+ if accountEntryDN == "" {
+ return false, nil, NoMatch // User does not exist
+ }
++
+ // Bind as the user to verify their password
+ if len(accountEntryDN) > 0 {
+ err := l.Bind(accountEntryDN, string(password))
+@@ -102,21 +105,13 @@ func (la *LDAPAuth) Authenticate(account string, password PasswordString) (bool,
+ return false, nil, bindErr
+ }
+
+- // Extract group names from the attribute values
+- if entryAttrMap[groupAttribute] != nil {
+- rawGroups := entryAttrMap[groupAttribute]
+- labels := make(map[string][]string)
+- var groups []string
+- for _, value := range rawGroups {
+- cn := la.getCNFromDN(value)
+- groups = append(groups, cn)
+- }
+- labels["groups"] = groups
+-
+- return true, labels, nil
++ // Extract labels from the attribute values
++ labels, labelsExtractErr := la.getLabelsFromMap(entryAttrMap)
++ if labelsExtractErr != nil {
++ return false, nil, labelsExtractErr
+ }
+
+- return true, nil, nil
++ return true, labels, nil
+ }
+
+ func (la *LDAPAuth) bindReadOnlyUser(l *ldap.Conn) error {
+@@ -193,9 +188,9 @@ func (la *LDAPAuth) getFilter(account string) string {
+
+ //ldap search and return required attributes' value from searched entries
+ //default return entry's DN value if you leave attrs array empty
+-func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (map[string][]string, error) {
++func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, attrs *[]string) (string, map[string][]string, error) {
+ if l == nil {
+- return nil, fmt.Errorf("No ldap connection!")
++ return "", nil, fmt.Errorf("No ldap connection!")
+ }
+ glog.V(2).Infof("Searching...basedDN:%s, filter:%s", *baseDN, *filter)
+ searchRequest := ldap.NewSearchRequest(
+@@ -206,38 +201,66 @@ func (la *LDAPAuth) ldapSearch(l *ldap.Conn, baseDN *string, filter *string, att
+ nil)
+ sr, err := l.Search(searchRequest)
+ if err != nil {
+- return nil, err
++ return "", nil, err
+ }
+
+ if len(sr.Entries) == 0 {
+- return nil, nil // User does not exist
++ return "", nil, nil // User does not exist
+ } else if len(sr.Entries) > 1 {
+- return nil, fmt.Errorf("Too many entries returned.")
++ return "", nil, fmt.Errorf("Too many entries returned.")
+ }
+
+- result := make(map[string][]string)
++ attributes := make(map[string][]string)
++ var entryDn string
+ for _, entry := range sr.Entries {
+-
++ entryDn = entry.DN
+ if len(*attrs) == 0 {
+- glog.V(2).Infof("Entry DN = %s", entry.DN)
+- result["DN"] = []string{entry.DN}
++ glog.V(2).Infof("Entry DN = %s", entryDn)
+ } else {
+ for _, attr := range *attrs {
+- var values []string
+- if attr == "DN" {
+- // DN is excluded from attributes
+- values = []string{entry.DN}
+- } else {
+- values = entry.GetAttributeValues(attr)
+- }
+- valuesString := strings.Join(values, "\n")
+- glog.V(2).Infof("Entry %s = %s", attr, valuesString)
+- result[attr] = values
++ values := entry.GetAttributeValues(attr)
++ glog.V(2).Infof("Entry %s = %s", attr, strings.Join(values, "\n"))
++ attributes[attr] = values
+ }
+ }
+ }
+
+- return result, nil
++ return entryDn, attributes, nil
++}
++
++func (la *LDAPAuth) getLabelAttributes() ([]string, error) {
++ labelAttributes := make([]string, len(la.config.LabelMaps))
++ i := 0
++ for key, mapping := range la.config.LabelMaps {
++ if mapping.Attribute == "" {
++ return nil, fmt.Errorf("Label %s is missing 'attribute' to map from", key)
++ }
++ labelAttributes[i] = mapping.Attribute
++ i++
++ }
++ return labelAttributes, nil
++}
++
++func (la *LDAPAuth) getLabelsFromMap(attrMap map[string][]string) (map[string][]string, error) {
++ labels := make(map[string][]string)
++ for key, mapping := range la.config.LabelMaps {
++ if mapping.Attribute == "" {
++ return nil, fmt.Errorf("Label %s is missing 'attribute' to map from", key)
++ }
++
++ mappingValues := attrMap[mapping.Attribute]
++ if mappingValues != nil {
++ if mapping.ParseCN {
++ // shorten attribute to its common name
++ for i, value := range mappingValues {
++ cn := la.getCNFromDN(value)
++ mappingValues[i] = cn
++ }
++ }
++ labels[key] = mappingValues
++ }
++ }
++ return labels, nil
+ }
+
+ func (la *LDAPAuth) getCNFromDN(dn string) string {
+
+From cd37001980267a99a9faa19f1927891af63acb90 Mon Sep 17 00:00:00 2001
+From: Kevin <kcd83@users.noreply.github.com>
+Date: Tue, 28 Feb 2017 18:27:16 +1300
+Subject: [PATCH 3/3] Remove unused configuration fields, never implemented?
+
+---
+ auth_server/authn/ldap_auth.go | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/auth_server/authn/ldap_auth.go b/auth_server/authn/ldap_auth.go
+index 6f733a2..9c8bcb8 100644
+--- a/auth_server/authn/ldap_auth.go
++++ b/auth_server/authn/ldap_auth.go
+@@ -40,8 +40,6 @@ type LDAPAuthConfig struct {
+ BindDN string `yaml:"bind_dn,omitempty"`
+ BindPasswordFile string `yaml:"bind_password_file,omitempty"`
+ LabelMaps map[string]LabelMap `yaml:"labels,omitempty"`
+- GroupBaseDN string `yaml:"group_base_dn,omitempty"`
+- GroupFilter string `yaml:"group_filter,omitempty"`
+ }
+
+ type LDAPAuth struct {
diff --git a/sys-auth/docker_auth/files/docker_auth.confd b/sys-auth/docker_auth/files/docker_auth.confd
new file mode 100644
index 000000000000..9185f376b0da
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth.confd
@@ -0,0 +1,2 @@
+# arguments for docker auth
+command_args="/etc/docker_auth/config.yml"
diff --git a/sys-auth/docker_auth/files/docker_auth.initd b/sys-auth/docker_auth/files/docker_auth.initd
new file mode 100644
index 000000000000..52699100d8c1
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth.initd
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 2016-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+description="Docker Registry Authentication Server"
+pidfile=${pidfile:-"/run/${SVCNAME}.pid"}
+user=${user:-${SVCNAME}}
+group=${group:-${SVCNAME}}
+
+command="/usr/bin/auth_server"
+command_args="${command_args:--log_dir /var/log/${SVCNAME} /etc/docker_auth/config.yml}"
+command_background="true"
+start_stop_daemon_args="--user ${user} --group ${group} \
+ --stdout /var/log/${SVCNAME}/${SVCNAME}.log \
+ --stderr /var/log/${SVCNAME}/${SVCNAME}.log"
+
+depend() {
+ after net
+}
diff --git a/sys-auth/docker_auth/files/docker_auth.logrotated b/sys-auth/docker_auth/files/docker_auth.logrotated
new file mode 100644
index 000000000000..7bcd082c0719
--- /dev/null
+++ b/sys-auth/docker_auth/files/docker_auth.logrotated
@@ -0,0 +1,8 @@
+/var/log/docker_auth/* {
+ su docker_auth docker_auth
+ missingok
+ size 5M
+ rotate 3
+ compress
+ copytruncate
+}
diff --git a/sys-auth/docker_auth/files/version.go b/sys-auth/docker_auth/files/version.go
new file mode 100644
index 000000000000..9c014db7f1f2
--- /dev/null
+++ b/sys-auth/docker_auth/files/version.go
@@ -0,0 +1,6 @@
+package main
+
+const (
+ Version = "{version}"
+ BuildId = "{build_id}"
+)
diff --git a/sys-auth/docker_auth/metadata.xml b/sys-auth/docker_auth/metadata.xml
new file mode 100644
index 000000000000..d1433ed56c2f
--- /dev/null
+++ b/sys-auth/docker_auth/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>mrueg@gentoo.org</email>
+ <name>Manuel RĂ¼ger</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">cesanta/docker_auth</remote-id>
+ </upstream>
+</pkgmetadata>