lemonldap-ng-1.4.6/0000775000175000017500000000000012605703647013753 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/0000775000175000017500000000000012542740737016331 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/_base.project0000664000175000017500000000065612542740737021001 0ustar clementclement __PWD__/doc/ __PWD__/po-doc/fr/ __DEFAULT__ __DEFAULT__ __DEFAULT__ EN-US __LANG__ true lemonldap-ng-1.4.6/omegat.files/fr/0000775000175000017500000000000012605703600016724 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/tm/0000775000175000017500000000000012542740736017357 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/omegat/0000775000175000017500000000000012605703600020200 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/omegat/project_stats.txt0000664000175000017500000034471112605703570023645 0ustar clementclement05/10/15 16:47 Données du projet Segments Mots Caractères (sans espaces) Caractères (avec espaces) Total : 19442 100733 691222 758217 Restants : 2431 20187 129203 144358 Segments uniques : 6416 43338 280831 312398 Segments uniques restants : 1224 10372 65126 72502 Statistiques par fichiers : Nom du fichier Total segments Segments restants Segments uniques Segments uniques restants Total mots Mots restants Mots uniques Mots uniques restants Total caractères (sans espaces) Caractères restants (sans espaces) Caractères uniques (sans espaces) Caractères uniques restants (sans espaces) Total caractères (avec espaces) Caractères restants (avec espaces) Caractères uniques (avec espaces) Caractères uniques restants (avec espaces) index/alphabetical.html 328 77 323 77 757 142 743 142 7383 1270 7323 1270 7424 1295 7355 1295 index.html 15 0 10 0 28 0 20 0 202 0 159 0 209 0 163 0 lib/images/index.html 1 0 1 0 2 0 2 0 14 0 14 0 15 0 15 0 pages/contact.html 108 11 86 9 422 49 337 39 3386 568 2564 382 3525 590 2702 404 pages/documentation/1.4/activedirectoryminihowto.html 20 1 16 1 111 15 106 15 802 69 781 69 885 84 863 84 pages/documentation/1.4/applications/authbasic.html 40 5 32 5 356 125 339 125 2223 614 2057 614 2499 732 2332 732 pages/documentation/1.4/applications/bugzilla.html 48 8 36 8 168 35 147 35 1469 295 1256 295 1556 321 1342 321 pages/documentation/1.4/applications/cornerstone.html 69 28 47 27 450 251 403 249 3157 1763 2754 1728 3423 1901 3010 1866 pages/documentation/1.4/applications/django.html 17 0 7 0 62 0 44 0 475 0 298 0 506 0 328 0 pages/documentation/1.4/applications/dokuwiki.html 55 3 30 1 285 8 229 2 2188 94 1516 31 2370 99 1693 33 pages/documentation/1.4/applications/drupal.html 78 25 42 20 386 104 276 90 2981 854 1842 699 3209 917 2040 754 pages/documentation/1.4/applications/googleapps.html 127 3 69 3 810 25 540 25 6015 173 4024 173 6476 190 4331 190 pages/documentation/1.4/applications/liferay.html 92 10 63 8 498 93 426 87 3457 522 2741 459 3710 604 2977 538 pages/documentation/1.4/applications/limesurvey.html 88 10 70 8 363 81 327 75 2867 523 2472 460 3104 588 2705 522 pages/documentation/1.4/applications/mediawiki.html 78 4 38 2 358 20 226 14 3194 179 1837 116 3378 191 1996 125 pages/documentation/1.4/applications/nginx.html 19 9 9 8 92 76 75 72 616 466 442 411 675 522 500 467 pages/documentation/1.4/applications/obm.html 185 7 146 5 499 29 424 23 4884 245 4248 182 6043 267 5396 201 pages/documentation/1.4/applications/phpldapadmin.html 43 5 20 3 226 36 170 30 1798 226 1140 163 1925 257 1257 191 pages/documentation/1.4/applications/roundcube.html 29 16 14 14 137 113 110 110 1032 799 766 766 1125 891 858 858 pages/documentation/1.4/applications/salesforce.html 109 76 75 75 762 664 662 662 4852 4069 4041 4041 5426 4598 4570 4570 pages/documentation/1.4/applications/spring.html 33 1 21 1 173 17 145 17 1817 96 1547 96 1896 112 1625 112 pages/documentation/1.4/applications/sympa.html 92 11 49 7 467 33 345 26 3281 349 2134 268 3686 365 2498 279 pages/documentation/1.4/applications/tomcat.html 74 8 51 8 410 97 369 97 2702 475 2318 475 2981 564 2594 564 pages/documentation/1.4/applications/zimbra.html 90 2 45 2 522 12 392 12 3721 127 2474 127 4056 129 2777 129 pages/documentation/1.4/applications.html 147 17 100 14 478 50 361 44 4895 587 3757 527 4957 588 3817 528 pages/documentation/1.4/authad.html 42 17 29 17 321 251 302 251 1848 1352 1672 1352 2116 1583 1939 1583 pages/documentation/1.4/authapache.html 169 27 127 25 905 205 808 201 6381 1385 5488 1330 6993 1539 6074 1484 pages/documentation/1.4/authbrowserid.html 39 0 23 0 271 0 224 0 1838 0 1396 0 2017 0 1566 0 pages/documentation/1.4/authcas.html 76 0 35 0 384 0 276 0 2505 0 1614 0 2768 0 1824 0 pages/documentation/1.4/authchoice.html 53 0 29 0 248 0 212 0 1614 0 1288 0 1793 0 1460 0 pages/documentation/1.4/authdbi.html 127 6 72 6 458 51 380 51 3003 251 2293 251 3295 295 2578 295 pages/documentation/1.4/authdemo.html 46 4 19 3 172 29 133 24 1065 178 735 140 1177 203 842 161 pages/documentation/1.4/authfacebook.html 46 2 22 1 253 23 201 18 1625 107 1131 69 1802 129 1297 87 pages/documentation/1.4/authgoogle.html 52 18 31 16 362 193 323 186 2142 1103 1781 1035 2441 1274 2071 1202 pages/documentation/1.4/authldap.html 152 34 100 32 1044 337 891 323 6704 2085 5389 2003 7459 2362 6097 2268 pages/documentation/1.4/authmulti.html 74 6 50 6 385 94 347 94 2650 478 2305 478 2922 565 2572 565 pages/documentation/1.4/authnull.html 26 0 8 0 106 0 79 0 670 0 447 0 749 0 518 0 pages/documentation/1.4/authopenid.html 55 2 28 1 256 15 205 10 1637 110 1201 72 1810 123 1363 81 pages/documentation/1.4/authproxy.html 38 4 17 4 180 52 146 52 1134 287 877 287 1261 332 995 332 pages/documentation/1.4/authradius.html 33 1 14 1 159 8 117 8 1018 43 709 43 1127 50 804 50 pages/documentation/1.4/authremote.html 86 3 49 3 571 38 487 38 3583 210 2796 210 4010 240 3208 240 pages/documentation/1.4/authsaml.html 128 0 87 0 875 0 776 0 5479 0 4741 0 6139 0 5362 0 pages/documentation/1.4/authslave.html 46 6 17 5 236 72 180 67 1366 368 924 330 1545 430 1084 388 pages/documentation/1.4/authssl.html 59 10 32 10 382 113 310 113 2465 677 1890 677 2714 768 2125 768 pages/documentation/1.4/authtwitter.html 40 0 14 0 191 0 124 0 1271 0 705 0 1400 0 805 0 pages/documentation/1.4/authwebid.html 59 4 29 2 279 49 181 26 1845 233 1161 126 2015 280 1286 151 pages/documentation/1.4/authyubikey.html 42 2 19 2 211 40 153 40 1314 166 807 166 1465 204 933 204 pages/documentation/1.4/browseablesessionbackend.html 104 15 75 14 516 82 448 78 3590 571 3005 517 3930 622 3327 568 pages/documentation/1.4/captcha.html 26 17 17 17 169 156 156 156 968 857 857 857 1100 988 988 988 pages/documentation/1.4/cda.html 34 0 15 0 200 0 154 0 1295 0 854 0 1436 0 986 0 pages/documentation/1.4/changeconfbackend.html 37 1 26 1 150 7 133 7 1103 44 984 44 1187 50 1067 50 pages/documentation/1.4/configlocation.html 292 47 242 42 1790 326 1638 311 11546 2066 10294 1904 12934 2325 11622 2157 pages/documentation/1.4/configvhost.html 91 28 65 19 520 121 455 96 3674 1128 3023 846 4034 1204 3362 909 pages/documentation/1.4/customfunctions.html 50 3 32 3 258 29 214 29 1794 207 1351 207 1961 228 1511 228 pages/documentation/1.4/docker.html 29 18 16 15 150 133 123 122 1126 977 869 864 1201 1051 943 938 pages/documentation/1.4/error.html 65 1 56 1 485 6 468 6 2683 24 2550 24 3093 29 2955 29 pages/documentation/1.4/exportedvars.html 54 6 33 6 410 72 365 72 2465 395 2048 395 2795 461 2372 461 pages/documentation/1.4/extendedfunctions.html 158 39 97 38 802 235 614 234 5210 1365 3612 1355 5769 1549 4098 1539 pages/documentation/1.4/fastcgi.html 24 2 13 2 135 29 114 29 810 129 649 129 893 150 731 150 pages/documentation/1.4/federationproxy.html 40 0 19 0 152 0 102 0 1194 0 713 0 1264 0 777 0 pages/documentation/1.4/fileconfbackend.html 18 0 8 0 87 0 69 0 593 0 417 0 652 0 475 0 pages/documentation/1.4/filesessionbackend.html 32 1 15 1 168 23 137 23 1087 150 809 150 1183 172 903 172 pages/documentation/1.4/formreplay.html 80 0 50 0 484 0 412 0 3052 0 2486 0 3386 0 2798 0 pages/documentation/1.4/handlerauthbasic.html 31 9 17 8 202 84 177 82 1305 550 1046 533 1460 619 1198 601 pages/documentation/1.4/header_remote_user_conversion.html 37 15 19 10 220 83 179 71 1574 719 1170 571 1730 783 1317 627 pages/documentation/1.4/highavailability.html 23 1 14 1 128 23 110 23 956 104 810 104 1029 126 882 126 pages/documentation/1.4/idpcas.html 63 0 30 0 386 0 303 0 2355 0 1591 0 2647 0 1856 0 pages/documentation/1.4/idpopenid.html 88 0 41 0 517 0 351 0 3350 0 2015 0 3674 0 2291 0 pages/documentation/1.4/idpsaml.html 139 26 44 17 842 234 472 202 5848 1784 2865 1407 6382 1916 3226 1539 pages/documentation/1.4/installdeb.html 106 6 85 6 728 185 682 185 5242 1597 4870 1597 5840 1841 5458 1841 pages/documentation/1.4/installrpm.html 136 13 69 10 1008 247 512 91 7034 1953 3419 532 7850 2249 3794 607 pages/documentation/1.4/installtarball.html 100 7 78 7 576 53 523 53 3716 297 3309 297 4092 344 3669 344 pages/documentation/1.4/internalproxy.html 37 4 19 4 175 53 139 53 1262 272 934 272 1375 321 1042 321 pages/documentation/1.4/jsonfileconfbackend.html 19 0 3 0 90 0 24 0 642 0 151 0 700 0 170 0 pages/documentation/1.4/ldapconfbackend.html 49 10 33 10 347 91 320 91 2218 509 1990 509 2445 588 2210 588 pages/documentation/1.4/ldapminihowto.html 24 0 10 0 85 0 54 0 631 0 341 0 673 0 378 0 pages/documentation/1.4/ldapsessionbackend.html 45 4 23 4 219 69 157 69 1504 364 982 364 1628 428 1084 428 pages/documentation/1.4/loginhistory.html 28 0 15 0 262 0 237 0 1462 0 1225 0 1687 0 1448 0 pages/documentation/1.4/logoutforward.html 26 0 8 0 165 0 126 0 948 0 602 0 1076 0 719 0 pages/documentation/1.4/logs.html 30 1 20 1 189 11 166 11 1174 91 994 91 1325 111 1141 111 pages/documentation/1.4/managerprotection.html 69 6 48 6 452 29 397 29 2720 206 2239 206 3034 216 2547 216 pages/documentation/1.4/memcachedsessionbackend.html 44 0 15 0 184 0 115 0 1423 0 730 0 1510 0 815 0 pages/documentation/1.4/mrtg.html 15 0 7 0 161 0 147 0 1369 0 1256 0 1464 0 1350 0 pages/documentation/1.4/mysqlminihowto.html 30 0 12 0 126 0 76 0 1004 0 585 0 1065 0 629 0 pages/documentation/1.4/nosqlsessionbackend.html 33 1 8 1 150 6 83 6 1082 40 506 40 1151 43 572 43 pages/documentation/1.4/notifications.html 147 24 107 24 1309 209 1194 209 8094 1212 7129 1212 9078 1390 8075 1390 pages/documentation/1.4/parameterlist.html 693 43 386 43 1102 166 883 166 8869 956 6729 956 9450 1078 7212 1078 pages/documentation/1.4/passwordstore.html 27 1 14 1 166 19 144 19 940 77 748 77 1070 95 877 95 pages/documentation/1.4/performances.html 138 32 100 32 1204 282 957 282 7179 1481 5495 1481 8095 1722 6271 1722 pages/documentation/1.4/portal.html 109 2 51 2 489 28 333 28 3747 161 2121 161 4010 187 2374 187 pages/documentation/1.4/portalcustom.html 96 14 72 14 782 152 723 152 4252 807 3783 807 4911 939 4414 939 pages/documentation/1.4/portalmenu.html 54 1 39 1 332 16 300 16 2226 81 1943 81 2468 96 2179 96 pages/documentation/1.4/prereq.html 91 26 71 25 449 191 406 189 3499 1940 3142 1928 3777 2079 3416 2067 pages/documentation/1.4/rbac.html 67 3 46 3 486 52 437 52 2853 264 2391 264 3218 314 2739 314 pages/documentation/1.4/redirections.html 39 2 24 2 369 31 334 31 2161 255 1874 255 2478 273 2178 273 pages/documentation/1.4/register.html 29 16 16 16 180 155 155 155 952 726 726 726 1098 867 867 867 pages/documentation/1.4/resetpassword.html 86 10 60 10 685 121 612 121 4253 601 3585 601 4704 708 4026 708 pages/documentation/1.4/safejail.html 31 0 16 0 114 0 82 0 779 0 459 0 844 0 523 0 pages/documentation/1.4/samlservice.html 275 33 168 24 1622 240 1291 218 10672 1298 8154 1191 11832 1496 9160 1376 pages/documentation/1.4/securetoken.html 32 6 16 5 244 30 213 28 1481 246 1217 229 1685 265 1412 247 pages/documentation/1.4/security.html 192 29 125 29 1173 189 1007 189 7578 1285 5958 1285 8420 1419 6782 1419 pages/documentation/1.4/selfmadeapplication.html 57 4 34 4 316 52 257 52 2021 270 1440 270 2221 309 1633 309 pages/documentation/1.4/sessions.html 46 8 28 8 349 98 310 98 2053 538 1706 538 2329 622 1977 622 pages/documentation/1.4/soapconfbackend.html 31 6 20 5 176 83 153 78 1177 466 1017 431 1331 555 1165 518 pages/documentation/1.4/soapminihowto.html 30 1 10 1 146 17 91 17 995 82 494 82 1083 98 571 98 pages/documentation/1.4/soapservices.html 68 4 34 4 349 44 243 44 2445 241 1541 241 2677 282 1725 282 pages/documentation/1.4/soapsessionbackend.html 47 12 25 12 376 199 337 199 2389 1130 2084 1130 2687 1309 2374 1309 pages/documentation/1.4/sqlconfbackend.html 52 3 37 3 278 30 244 30 1711 189 1405 189 1920 214 1607 214 pages/documentation/1.4/sqlsessionbackend.html 97 10 43 3 487 67 283 14 3298 366 1749 68 3567 415 1948 80 pages/documentation/1.4/ssocookie.html 56 2 33 2 425 30 367 30 2328 148 1903 148 2676 176 2227 176 pages/documentation/1.4/start.html 452 10 170 8 1303 35 709 29 11933 276 5638 213 12340 287 5949 224 pages/documentation/1.4/status.html 49 4 30 4 291 32 251 32 1840 180 1521 180 2013 204 1689 204 pages/documentation/1.4/upgrade.html 92 64 74 59 590 492 548 474 3800 3175 3476 3018 4227 3555 3896 3395 pages/documentation/1.4/variables.html 129 5 76 5 438 30 349 30 2745 157 1989 157 3034 182 2258 182 pages/documentation/1.4/writingrulesand_headers.html 103 7 59 7 562 112 468 112 3579 597 2710 597 3984 703 3094 703 pages/documentation/conferences.html 365 50 130 30 1208 192 423 98 10867 1843 4061 891 10928 1850 4079 898 pages/documentation/current/activedirectoryminihowto.html 20 1 0 0 111 15 0 0 802 69 0 0 885 84 0 0 pages/documentation/current/applications/authbasic.html 40 5 0 0 356 125 0 0 2223 614 0 0 2499 732 0 0 pages/documentation/current/applications/bugzilla.html 48 8 0 0 168 35 0 0 1469 295 0 0 1556 321 0 0 pages/documentation/current/applications/cornerstone.html 69 28 0 0 450 251 0 0 3157 1763 0 0 3423 1901 0 0 pages/documentation/current/applications/django.html 17 0 0 0 62 0 0 0 475 0 0 0 506 0 0 0 pages/documentation/current/applications/dokuwiki.html 55 3 0 0 285 8 0 0 2188 94 0 0 2370 99 0 0 pages/documentation/current/applications/drupal.html 78 25 0 0 386 104 0 0 2981 854 0 0 3209 917 0 0 pages/documentation/current/applications/googleapps.html 127 3 0 0 810 25 0 0 6015 173 0 0 6476 190 0 0 pages/documentation/current/applications/liferay.html 92 10 0 0 498 93 0 0 3457 522 0 0 3710 604 0 0 pages/documentation/current/applications/limesurvey.html 88 10 0 0 363 81 0 0 2867 523 0 0 3104 588 0 0 pages/documentation/current/applications/mediawiki.html 78 4 0 0 358 20 0 0 3194 179 0 0 3378 191 0 0 pages/documentation/current/applications/nginx.html 19 9 0 0 92 76 0 0 616 466 0 0 675 522 0 0 pages/documentation/current/applications/obm.html 185 7 0 0 499 29 0 0 4884 245 0 0 6043 267 0 0 pages/documentation/current/applications/phpldapadmin.html 43 5 0 0 226 36 0 0 1798 226 0 0 1925 257 0 0 pages/documentation/current/applications/roundcube.html 29 16 0 0 137 113 0 0 1032 799 0 0 1125 891 0 0 pages/documentation/current/applications/salesforce.html 109 76 0 0 762 664 0 0 4852 4069 0 0 5426 4598 0 0 pages/documentation/current/applications/spring.html 33 1 0 0 173 17 0 0 1817 96 0 0 1896 112 0 0 pages/documentation/current/applications/sympa.html 92 11 0 0 467 33 0 0 3281 349 0 0 3686 365 0 0 pages/documentation/current/applications/tomcat.html 74 8 0 0 410 97 0 0 2702 475 0 0 2981 564 0 0 pages/documentation/current/applications/zimbra.html 90 2 0 0 522 12 0 0 3721 127 0 0 4056 129 0 0 pages/documentation/current/applications.html 147 17 0 0 478 50 0 0 4895 587 0 0 4957 588 0 0 pages/documentation/current/authad.html 42 17 0 0 321 251 0 0 1848 1352 0 0 2116 1583 0 0 pages/documentation/current/authapache.html 169 27 0 0 905 205 0 0 6381 1385 0 0 6993 1539 0 0 pages/documentation/current/authbrowserid.html 39 0 0 0 271 0 0 0 1838 0 0 0 2017 0 0 0 pages/documentation/current/authcas.html 76 0 0 0 384 0 0 0 2505 0 0 0 2768 0 0 0 pages/documentation/current/authchoice.html 53 0 0 0 248 0 0 0 1614 0 0 0 1793 0 0 0 pages/documentation/current/authdbi.html 127 6 0 0 458 51 0 0 3003 251 0 0 3295 295 0 0 pages/documentation/current/authdemo.html 46 4 0 0 172 29 0 0 1065 178 0 0 1177 203 0 0 pages/documentation/current/authfacebook.html 46 2 0 0 253 23 0 0 1625 107 0 0 1802 129 0 0 pages/documentation/current/authgoogle.html 52 18 0 0 362 193 0 0 2142 1103 0 0 2441 1274 0 0 pages/documentation/current/authldap.html 152 34 0 0 1044 337 0 0 6704 2085 0 0 7459 2362 0 0 pages/documentation/current/authmulti.html 74 6 0 0 385 94 0 0 2650 478 0 0 2922 565 0 0 pages/documentation/current/authnull.html 26 0 0 0 106 0 0 0 670 0 0 0 749 0 0 0 pages/documentation/current/authopenid.html 55 2 0 0 256 15 0 0 1637 110 0 0 1810 123 0 0 pages/documentation/current/authproxy.html 38 4 0 0 180 52 0 0 1134 287 0 0 1261 332 0 0 pages/documentation/current/authradius.html 33 1 0 0 159 8 0 0 1018 43 0 0 1127 50 0 0 pages/documentation/current/authremote.html 86 3 0 0 571 38 0 0 3583 210 0 0 4010 240 0 0 pages/documentation/current/authsaml.html 128 0 0 0 875 0 0 0 5479 0 0 0 6139 0 0 0 pages/documentation/current/authslave.html 46 6 0 0 236 72 0 0 1366 368 0 0 1545 430 0 0 pages/documentation/current/authssl.html 59 10 0 0 382 113 0 0 2465 677 0 0 2714 768 0 0 pages/documentation/current/authtwitter.html 40 0 0 0 191 0 0 0 1271 0 0 0 1400 0 0 0 pages/documentation/current/authwebid.html 59 4 0 0 279 49 0 0 1845 233 0 0 2015 280 0 0 pages/documentation/current/authyubikey.html 42 2 0 0 211 40 0 0 1314 166 0 0 1465 204 0 0 pages/documentation/current/browseablesessionbackend.html 104 15 0 0 516 82 0 0 3590 571 0 0 3930 622 0 0 pages/documentation/current/captcha.html 26 17 0 0 169 156 0 0 968 857 0 0 1100 988 0 0 pages/documentation/current/cda.html 34 0 0 0 200 0 0 0 1295 0 0 0 1436 0 0 0 pages/documentation/current/changeconfbackend.html 37 1 0 0 150 7 0 0 1103 44 0 0 1187 50 0 0 pages/documentation/current/configlocation.html 292 47 0 0 1790 326 0 0 11546 2066 0 0 12934 2325 0 0 pages/documentation/current/configvhost.html 91 28 0 0 520 121 0 0 3674 1128 0 0 4034 1204 0 0 pages/documentation/current/customfunctions.html 50 3 0 0 258 29 0 0 1794 207 0 0 1961 228 0 0 pages/documentation/current/docker.html 29 18 0 0 150 133 0 0 1126 977 0 0 1201 1051 0 0 pages/documentation/current/error.html 65 1 0 0 485 6 0 0 2683 24 0 0 3093 29 0 0 pages/documentation/current/exportedvars.html 54 6 0 0 410 72 0 0 2465 395 0 0 2795 461 0 0 pages/documentation/current/extendedfunctions.html 158 39 0 0 802 235 0 0 5210 1365 0 0 5769 1549 0 0 pages/documentation/current/fastcgi.html 24 2 0 0 135 29 0 0 810 129 0 0 893 150 0 0 pages/documentation/current/federationproxy.html 40 0 0 0 152 0 0 0 1194 0 0 0 1264 0 0 0 pages/documentation/current/fileconfbackend.html 18 0 0 0 87 0 0 0 593 0 0 0 652 0 0 0 pages/documentation/current/filesessionbackend.html 32 1 0 0 168 23 0 0 1087 150 0 0 1183 172 0 0 pages/documentation/current/formreplay.html 80 0 0 0 484 0 0 0 3052 0 0 0 3386 0 0 0 pages/documentation/current/handlerauthbasic.html 31 9 0 0 202 84 0 0 1305 550 0 0 1460 619 0 0 pages/documentation/current/header_remote_user_conversion.html 37 15 0 0 220 83 0 0 1574 719 0 0 1730 783 0 0 pages/documentation/current/highavailability.html 23 1 0 0 128 23 0 0 956 104 0 0 1029 126 0 0 pages/documentation/current/idpcas.html 63 0 0 0 386 0 0 0 2355 0 0 0 2647 0 0 0 pages/documentation/current/idpopenid.html 88 0 0 0 517 0 0 0 3350 0 0 0 3674 0 0 0 pages/documentation/current/idpsaml.html 139 26 0 0 842 234 0 0 5848 1784 0 0 6382 1916 0 0 pages/documentation/current/installdeb.html 106 6 0 0 728 185 0 0 5242 1597 0 0 5840 1841 0 0 pages/documentation/current/installrpm.html 136 13 0 0 1008 247 0 0 7034 1953 0 0 7850 2249 0 0 pages/documentation/current/installtarball.html 100 7 0 0 576 53 0 0 3716 297 0 0 4092 344 0 0 pages/documentation/current/internalproxy.html 37 4 0 0 175 53 0 0 1262 272 0 0 1375 321 0 0 pages/documentation/current/jsonfileconfbackend.html 19 0 0 0 90 0 0 0 642 0 0 0 700 0 0 0 pages/documentation/current/ldapconfbackend.html 49 10 0 0 347 91 0 0 2218 509 0 0 2445 588 0 0 pages/documentation/current/ldapminihowto.html 24 0 0 0 85 0 0 0 631 0 0 0 673 0 0 0 pages/documentation/current/ldapsessionbackend.html 45 4 0 0 219 69 0 0 1504 364 0 0 1628 428 0 0 pages/documentation/current/loginhistory.html 28 0 0 0 262 0 0 0 1462 0 0 0 1687 0 0 0 pages/documentation/current/logoutforward.html 26 0 0 0 165 0 0 0 948 0 0 0 1076 0 0 0 pages/documentation/current/logs.html 30 1 0 0 189 11 0 0 1174 91 0 0 1325 111 0 0 pages/documentation/current/managerprotection.html 69 6 0 0 452 29 0 0 2720 206 0 0 3034 216 0 0 pages/documentation/current/memcachedsessionbackend.html 44 0 0 0 184 0 0 0 1423 0 0 0 1510 0 0 0 pages/documentation/current/mrtg.html 15 0 0 0 161 0 0 0 1369 0 0 0 1464 0 0 0 pages/documentation/current/mysqlminihowto.html 30 0 0 0 126 0 0 0 1004 0 0 0 1065 0 0 0 pages/documentation/current/nosqlsessionbackend.html 33 1 0 0 150 6 0 0 1082 40 0 0 1151 43 0 0 pages/documentation/current/notifications.html 147 24 0 0 1309 209 0 0 8094 1212 0 0 9078 1390 0 0 pages/documentation/current/parameterlist.html 693 43 0 0 1102 166 0 0 8869 956 0 0 9450 1078 0 0 pages/documentation/current/passwordstore.html 27 1 0 0 166 19 0 0 940 77 0 0 1070 95 0 0 pages/documentation/current/performances.html 138 32 0 0 1204 282 0 0 7179 1481 0 0 8095 1722 0 0 pages/documentation/current/portal.html 109 2 0 0 489 28 0 0 3747 161 0 0 4010 187 0 0 pages/documentation/current/portalcustom.html 96 14 0 0 782 152 0 0 4252 807 0 0 4911 939 0 0 pages/documentation/current/portalmenu.html 54 1 0 0 332 16 0 0 2226 81 0 0 2468 96 0 0 pages/documentation/current/prereq.html 91 26 0 0 449 191 0 0 3499 1940 0 0 3777 2079 0 0 pages/documentation/current/rbac.html 67 3 0 0 486 52 0 0 2853 264 0 0 3218 314 0 0 pages/documentation/current/redirections.html 39 2 0 0 369 31 0 0 2161 255 0 0 2478 273 0 0 pages/documentation/current/register.html 29 16 0 0 180 155 0 0 952 726 0 0 1098 867 0 0 pages/documentation/current/resetpassword.html 86 10 0 0 685 121 0 0 4253 601 0 0 4704 708 0 0 pages/documentation/current/safejail.html 31 0 0 0 114 0 0 0 779 0 0 0 844 0 0 0 pages/documentation/current/samlservice.html 275 33 0 0 1622 240 0 0 10672 1298 0 0 11832 1496 0 0 pages/documentation/current/securetoken.html 32 6 0 0 244 30 0 0 1481 246 0 0 1685 265 0 0 pages/documentation/current/security.html 192 29 0 0 1173 189 0 0 7578 1285 0 0 8420 1419 0 0 pages/documentation/current/selfmadeapplication.html 57 4 0 0 316 52 0 0 2021 270 0 0 2221 309 0 0 pages/documentation/current/sessions.html 46 8 0 0 349 98 0 0 2053 538 0 0 2329 622 0 0 pages/documentation/current/soapconfbackend.html 31 6 0 0 176 83 0 0 1177 466 0 0 1331 555 0 0 pages/documentation/current/soapminihowto.html 30 1 0 0 146 17 0 0 995 82 0 0 1083 98 0 0 pages/documentation/current/soapservices.html 68 4 0 0 349 44 0 0 2445 241 0 0 2677 282 0 0 pages/documentation/current/soapsessionbackend.html 47 12 0 0 376 199 0 0 2389 1130 0 0 2687 1309 0 0 pages/documentation/current/sqlconfbackend.html 52 3 0 0 278 30 0 0 1711 189 0 0 1920 214 0 0 pages/documentation/current/sqlsessionbackend.html 97 10 0 0 487 67 0 0 3298 366 0 0 3567 415 0 0 pages/documentation/current/ssocookie.html 56 2 0 0 425 30 0 0 2328 148 0 0 2676 176 0 0 pages/documentation/current/start.html 452 10 0 0 1303 35 0 0 11933 276 0 0 12340 287 0 0 pages/documentation/current/status.html 49 4 0 0 291 32 0 0 1840 180 0 0 2013 204 0 0 pages/documentation/current/upgrade.html 92 64 0 0 590 492 0 0 3800 3175 0 0 4227 3555 0 0 pages/documentation/current/variables.html 129 5 0 0 438 30 0 0 2745 157 0 0 3034 182 0 0 pages/documentation/current/writingrulesand_headers.html 103 7 0 0 562 112 0 0 3579 597 0 0 3984 703 0 0 pages/documentation/features.html 71 2 41 2 362 21 292 21 2267 109 1730 109 2495 128 1942 128 pages/documentation/presentation.html 220 7 135 7 1358 61 1024 61 8894 280 6139 280 9869 339 6974 339 pages/documentation/quickstart.html 75 2 39 2 308 18 222 18 2034 86 1373 86 2197 101 1520 101 pages/documentation.html 71 0 45 0 208 0 130 0 2111 0 1311 0 2132 0 1326 0 pages/download.html 80 23 48 13 378 188 241 108 2837 1430 1759 787 2935 1453 1845 810 pages/menu1.html 22 0 11 0 26 0 11 0 224 0 120 0 225 0 120 0 pages/press.html 130 14 48 10 579 84 242 57 4205 632 1777 398 4273 651 1842 417 pages/professionalservices.html 34 22 21 20 234 214 213 210 1444 1279 1260 1228 1622 1456 1436 1404 pages/references.html 140 8 78 8 338 29 214 29 2879 232 1791 232 2974 245 1849 245 pages/screenshots.html 258 99 167 92 1560 1103 1393 1054 11879 7150 10028 6863 11927 7150 10075 6863 pages/translations.html 40 0 21 0 281 0 227 0 1714 0 1349 0 1895 0 1514 0 lemonldap-ng-1.4.6/omegat.files/fr/omegat/project_save.tmx0000664000175000017500001055336312542740736023451 0ustar clementclement
"" : ($mail =~ /^([^@]+)/)[0] . "" : ($mail =~ /^([^@]+)/)[0] . "\@example.com" "\@example.com" "admin0\@global.virt" : $uid "admin0\@global.virt" : $uid # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main # Values: TEXT # ignoreregex = # Values: TEXT # ignoreregex = # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy #a #a #b #b #c #c #compilation #compilation #d #d #e #e #f #f #functions_list #functions_list #g #g #google_apps_control_panel #google_apps_control_panel #h #h #i #i #j #j #l #l #local_file #local_file #m #m #mini_howtos #mini_howtos #n #n #o #o #p #p #perl_auto-protected_cgi #perl_auto-protected_cgi #presentation #presentation #q #q #r #r #s #s #t #t #u #u #v #v #w #w #z #z $ENV{REMOTE_ADDR} =~ /^192\.168/ $ENV{REMOTE_ADDR} =~ /^192\.168/ $_auth $_auth $_authChoice $_authChoice $_password $_password $_passwordDB $_passwordDB $_userDB $_userDB $authenticationLevel > 2 $authenticationLevel > 2 $description eq "LDAP administrator" $description eq "LDAP administrator" $givenName $givenName $givenName.” ”.$surName $givenName.” ”.$surName $groups $groups $groups =~ /\badmin\b/ $groups =~ /\badmin\b/ $mailR $mailR $uid $uid $uid =~ /^coudot$/ $uid =~ /^coudot$/ $uid eq "coudot" $uid eq "coudot" $uid eq “root” $uid eq “root” $uidR $uidR $uid eq "bart.simpson" $uid eq "bart.simpson" %_topdir /home/user/build %dist .el5 %rhel 5 %_topdir /home/user/build %dist .el5 %rhel 5 &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x63;&#x68;&#x61;&#x6e;&#x67;&#x65;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x63;&#x68;&#x61;&#x6e;&#x67;&#x65;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x64;&#x65;&#x76;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x64;&#x65;&#x76;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x75;&#x73;&#x65;&#x72;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; &#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x75;&#x73;&#x65;&#x72;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; 'cache_depth' => 5,? 'cache_depth' => 5,? 'cache_root' => '/tmp',? 'cache_root' => '/tmp',? 'default_expires_in' => 600,? 'default_expires_in' => 600,? 'directory_umask' => '007',? 'directory_umask' => '007',? 'namespace' => 'MyNamespace'? 'namespace' => 'MyNamespace'? ($uid =~ /^admin0/i)[0] ? ($uid =~ /^admin0/i)[0] ? (&(mail=$mail)(objectClass=person)) (&(mail=$mail)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) (&(mail=$mail)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) (&(mail=$mail)(objectClass=person)) (o/n) n (o/n) n (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? ); ); *.partner.com *.partenaire.com ----</s156> ----</s156> -1 if this <a0>URL</a0> is not known by <a1>LL::NG</a1> configuration -1 si cette <a0>URL</a0> n'est pas connue de la configuration de <a1>LL::NG</a1> -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? ... ... ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> ...   </<s2>VirtualHost</s2>> ...   </<s2>VirtualHost</s2>> ...   </<s3>VirtualHost</s3>> ...   </<s3>VirtualHost</s3>> ...   </<s4>VirtualHost</s4>> ...   </<s4>VirtualHost</s4>> ... other SSL parameters ... ... autres paramètres SSL ... ../../../../css/all.css ../../../../css/all.css ../../../../css/print.css ../../../../css/print.css ../../../../css/screen.css ../../../../css/screen.css ../../../../media/applications/bugzilla_logo.png ../../../../media/applications/bugzilla_logo.png ../../../../media/applications/dokuwiki_logo.png ../../../../media/applications/dokuwiki_logo.png ../../../../media/applications/drupal_logo.png ../../../../media/applications/drupal_logo.png ../../../../media/applications/googleapps_logo.png ../../../../media/applications/googleapps_logo.png ../../../../media/applications/http_logo.png ../../../../media/applications/http_logo.png ../../../../media/applications/liferay_logo.png ../../../../media/applications/liferay_logo.png ../../../../media/applications/limesurvey_logo.png ../../../../media/applications/limesurvey_logo.png ../../../../media/applications/mediawiki_logo.png ../../../../media/applications/mediawiki_logo.png ../../../../media/applications/obm_logo.png ../../../../media/applications/obm_logo.png ../../../../media/applications/phpldapadmin_logo.png ../../../../media/applications/phpldapadmin_logo.png ../../../../media/applications/spring_logo.png ../../../../media/applications/spring_logo.png ../../../../media/applications/sympa_logo.png ../../../../media/applications/sympa_logo.png ../../../../media/applications/tomcat_logo.png ../../../../media/applications/tomcat_logo.png ../../../../media/applications/zimbra_logo.png ../../../../media/applications/zimbra_logo.png ../../../../media/documentation/googleapps-export-priv-key.png ../../../../media/documentation/googleapps-export-priv-key.png ../../../../media/documentation/googleapps-manager-application.png ../../../../media/documentation/googleapps-manager-application.png ../../../../media/documentation/googleapps-menu.png ../../../../media/documentation/googleapps-menu.png ../../../../media/documentation/googleapps-sso.png ../../../../media/documentation/googleapps-sso.png ../../../../media/documentation/googleapps-ssoconfig.png ../../../../media/documentation/googleapps-ssoconfig.png ../../../../media/documentation/liferay_1.png ../../../../media/documentation/liferay_1.png ../../../../media/documentation/liferay_2.png ../../../../media/documentation/liferay_2.png ../../../../media/documentation/liferay_3.png ../../../../media/documentation/liferay_3.png ../../../../media/documentation/liferay_4.png ../../../../media/documentation/liferay_4.png ../../../../media/documentation/liferay_5.png ../../../../media/documentation/liferay_5.png ../../../../media/documentation/liferay_6.png ../../../../media/documentation/liferay_6.png ../../../../media/documentation/liferay_7.png ../../../../media/documentation/liferay_7.png ../../../css/all.css ../../../css/all.css ../../../css/print.css ../../../css/print.css ../../../css/screen.css ../../../css/screen.css ../../../documentation/1.2/configlocation.html#apache ../../../documentation/1.2/configlocation.html#apache ../../../documentation/1.2/configvhost.html ../../../documentation/1.2/configvhost.html ../../../documentation/1.2/configvhost.html#lemonldapng_configuration ../../../documentation/1.2/configvhost.html#lemonldapng_configuration ../../../documentation/1.2/extendedfunctions.html#basic ../../../documentation/1.2/extendedfunctions.html#basic ../../../documentation/1.2/header_remote_user_conversion.html ../../../documentation/1.2/header_remote_user_conversion.html ../../../documentation/1.2/idpsaml.html ../../../documentation/1.2/idpsaml.html ../../../documentation/1.2/logoutforward.html ../../../documentation/1.2/logoutforward.html ../../../documentation/1.2/passwordstore.html ../../../documentation/1.2/passwordstore.html ../../../documentation/1.2/portalmenu.html#categories_and_applications ../../../documentation/1.2/portalmenu.html#categories_and_applications ../../../documentation/1.2/rbac.html ../../../documentation/1.2/rbac.html ../../../documentation/1.2/writingrulesand_headers.html#headers ../../../documentation/1.2/writingrulesand_headers.html#headers ../../../documentation/1.2/writingrulesand_headers.html#rules ../../../documentation/1.2/writingrulesand_headers.html#rules ../../../documentation/1.3/configlocation.html#apache ../../../documentation/1.3/configlocation.html#apache ../../../documentation/1.3/configvhost.html ../../../documentation/1.3/configvhost.html ../../../documentation/1.3/configvhost.html#lemonldapng_configuration ../../../documentation/1.3/configvhost.html#lemonldapng_configuration ../../../documentation/1.3/extendedfunctions.html#basic ../../../documentation/1.3/extendedfunctions.html#basic ../../../documentation/1.3/header_remote_user_conversion.html ../../../documentation/1.3/header_remote_user_conversion.html ../../../documentation/1.3/idpsaml.html ../../../documentation/1.3/idpsaml.html ../../../documentation/1.3/logoutforward.html ../../../documentation/1.3/logoutforward.html ../../../documentation/1.3/passwordstore.html ../../../documentation/1.3/passwordstore.html ../../../documentation/1.3/portalmenu.html#categories_and_applications ../../../documentation/1.3/portalmenu.html#categories_and_applications ../../../documentation/1.3/rbac.html ../../../documentation/1.3/rbac.html ../../../documentation/1.3/writingrulesand_headers.html#headers ../../../documentation/1.3/writingrulesand_headers.html#headers ../../../documentation/1.3/writingrulesand_headers.html#rules ../../../documentation/1.3/writingrulesand_headers.html#rules ../../../documentation/1.4/configlocation.html#apache ../../../documentation/1.4/configlocation.html#apache ../../../documentation/1.4/configvhost.html ../../../documentation/1.4/configvhost.html ../../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../../documentation/1.4/extendedfunctions.html#basic ../../../documentation/1.4/extendedfunctions.html#basic ../../../documentation/1.4/header_remote_user_conversion.html ../../../documentation/1.4/header_remote_user_conversion.html ../../../documentation/1.4/idpsaml.html ../../../documentation/1.4/idpsaml.html ../../../documentation/1.4/logoutforward.html ../../../documentation/1.4/logoutforward.html ../../../documentation/1.4/passwordstore.html ../../../documentation/1.4/passwordstore.html ../../../documentation/1.4/portalmenu.html#categories_and_applications ../../../documentation/1.4/portalmenu.html#categories_and_applications ../../../documentation/1.4/rbac.html ../../../documentation/1.4/rbac.html ../../../documentation/1.4/writingrulesand_headers.html#headers ../../../documentation/1.4/writingrulesand_headers.html#headers ../../../documentation/1.4/writingrulesand_headers.html#rules ../../../documentation/1.4/writingrulesand_headers.html#rules ../../../download.html#contributions ../../../download.html#contributions ../../../media/applications/bugzilla_logo.png ../../../media/applications/bugzilla_logo.png ../../../media/applications/django_logo.png ../../../media/applications/django_logo.png ../../../media/applications/dokuwiki_logo.png ../../../media/applications/dokuwiki_logo.png ../../../media/applications/drupal_logo.png ../../../media/applications/drupal_logo.png ../../../media/applications/glpi_logo.png ../../../media/applications/glpi_logo.png ../../../media/applications/googleapps_logo.png ../../../media/applications/googleapps_logo.png ../../../media/applications/grr_logo.png ../../../media/applications/grr_logo.png ../../../media/applications/http_logo.png ../../../media/applications/http_logo.png ../../../media/applications/liferay_logo.png ../../../media/applications/liferay_logo.png ../../../media/applications/limesurvey_logo.png ../../../media/applications/limesurvey_logo.png ../../../media/applications/linshare_logo.png ../../../media/applications/linshare_logo.png ../../../media/applications/mediawiki_logo.png ../../../media/applications/mediawiki_logo.png ../../../media/applications/obm_logo.png ../../../media/applications/obm_logo.png ../../../media/applications/phpldapadmin_logo.png ../../../media/applications/phpldapadmin_logo.png ../../../media/applications/saplogo.gif ../../../media/applications/saplogo.gif ../../../media/applications/spring_logo.png ../../../media/applications/spring_logo.png ../../../media/applications/sympa_logo.png ../../../media/applications/sympa_logo.png ../../../media/applications/tomcat_logo.png ../../../media/applications/tomcat_logo.png ../../../media/applications/zimbra_logo.png ../../../media/applications/zimbra_logo.png ../../../media/documentation/configuration-ldap.png ../../../media/documentation/configuration-ldap.png ../../../media/documentation/dia_dit_roles.png ../../../media/documentation/dia_dit_roles.png ../../../media/documentation/exportedvars.png ../../../media/documentation/exportedvars.png ../../../media/documentation/ha-apache.png ../../../media/documentation/ha-apache.png ../../../media/documentation/ha-sessions-configuration.png ../../../media/documentation/ha-sessions-configuration.png ../../../media/documentation/lasso.png ../../../media/documentation/lasso.png ../../../media/documentation/lemonldap-ng-packages.png ../../../media/documentation/lemonldap-ng-packages.png ../../../media/documentation/manager-authchoice.png ../../../media/documentation/manager-authchoice.png ../../../media/documentation/manager-formreplay-newdata.png ../../../media/documentation/manager-formreplay-newdata.png ../../../media/documentation/manager-formreplay-newurl.png ../../../media/documentation/manager-formreplay-newurl.png ../../../media/documentation/manager-menu-application-logo.png ../../../media/documentation/manager-menu-application-logo.png ../../../media/documentation/manager-menu-application.png ../../../media/documentation/manager-menu-application.png ../../../media/documentation/manager-portalskin.png ../../../media/documentation/manager-portalskin.png ../../../media/documentation/manager-saml-idp-attribute.png ../../../media/documentation/manager-saml-idp-attribute.png ../../../media/documentation/manager-saml-idp-list.png ../../../media/documentation/manager-saml-idp-list.png ../../../media/documentation/manager-saml-idp-metadata.png ../../../media/documentation/manager-saml-idp-metadata.png ../../../media/documentation/manager-saml-idp-new.png ../../../media/documentation/manager-saml-idp-new.png ../../../media/documentation/manager-saml-namid-formats.png ../../../media/documentation/manager-saml-namid-formats.png ../../../media/documentation/manager-saml-private-key.png ../../../media/documentation/manager-saml-private-key.png ../../../media/documentation/manager-saml-service-authn-contexts.png ../../../media/documentation/manager-saml-service-authn-contexts.png ../../../media/documentation/manager-saml-service-sp-ac.png ../../../media/documentation/manager-saml-service-sp-ac.png ../../../media/documentation/manager-saml-service-sp-slo.png ../../../media/documentation/manager-saml-service-sp-slo.png ../../../media/documentation/manager-saml-sp-new.png ../../../media/documentation/manager-saml-sp-new.png ../../../media/documentation/manager_access_rule.png ../../../media/documentation/manager_access_rule.png ../../../media/documentation/remote-interoperability.png ../../../media/documentation/remote-interoperability.png ../../../media/documentation/remote-principle.png ../../../media/documentation/remote-principle.png ../../../media/documentation/status_standard.png ../../../media/documentation/status_standard.png ../../../media/icons/access.png ../../../media/icons/access.png ../../../media/icons/colors.png ../../../media/icons/colors.png ../../../media/icons/gpg.png ../../../media/icons/gpg.png ../../../media/icons/jabber_protocol.png ../../../media/icons/jabber_protocol.png ../../../media/icons/kmultiple.png ../../../media/icons/kmultiple.png ../../../media/icons/lists.png ../../../media/icons/lists.png ../../../media/icons/neotux.png ../../../media/icons/neotux.png ../../../media/icons/personal.png ../../../media/icons/personal.png ../../../media/icons/utilities.png ../../../media/icons/utilities.png ../../../media/icons/warehause.png ../../../media/icons/warehause.png ../../../media/icons/xeyes.png ../../../media/icons/xeyes.png ../../../media/screenshots/1.1/mailreset/mailreset_step1.png ../../../media/screenshots/1.1/mailreset/mailreset_step1.png ../../../media/screenshots/1.1/mailreset/mailreset_step2.png ../../../media/screenshots/1.1/mailreset/mailreset_step2.png ../../../media/screenshots/1.1/mailreset/mailreset_step3.png ../../../media/screenshots/1.1/mailreset/mailreset_step3.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png ../../../media/screenshots/1.1/mailreset/mailreset_step5.png ../../../media/screenshots/1.1/mailreset/mailreset_step5.png ../../../media/screenshots/1.1/manager/notifications_explorer_create.png ../../../media/screenshots/1.1/manager/notifications_explorer_create.png ../../../media/screenshots/1.1/notifications/sample_notification.png ../../../media/screenshots/1.1/notifications/sample_notification.png ../../css/all.css ../../css/all.css ../../css/print.css ../../css/print.css ../../css/screen.css ../../css/screen.css ../../documentation/1.0/fileconfbackend.html ../../documentation/1.0/fileconfbackend.html ../../documentation/1.0/ldapconfbackend.html ../../documentation/1.0/ldapconfbackend.html ../../documentation/1.0/sqlconfbackend.html ../../documentation/1.0/sqlconfbackend.html ../../documentation/1.0/upgrade.html ../../documentation/1.0/upgrade.html ../../documentation/1.1/upgrade.html ../../documentation/1.1/upgrade.html ../../documentation/1.2/activedirectoryminihowto.html ../../documentation/1.2/activedirectoryminihowto.html ../../documentation/1.2/applications.html ../../documentation/1.2/applications.html ../../documentation/1.2/applications/authbasic.html ../../documentation/1.2/applications/authbasic.html ../../documentation/1.2/applications/bugzilla.html ../../documentation/1.2/applications/bugzilla.html ../../documentation/1.2/applications/django.html ../../documentation/1.2/applications/django.html ../../documentation/1.2/applications/dokuwiki.html ../../documentation/1.2/applications/dokuwiki.html ../../documentation/1.2/applications/drupal.html ../../documentation/1.2/applications/drupal.html ../../documentation/1.2/applications/googleapps.html ../../documentation/1.2/applications/googleapps.html ../../documentation/1.2/applications/liferay.html ../../documentation/1.2/applications/liferay.html ../../documentation/1.2/applications/limesurvey.html ../../documentation/1.2/applications/limesurvey.html ../../documentation/1.2/applications/mediawiki.html ../../documentation/1.2/applications/mediawiki.html ../../documentation/1.2/applications/obm.html ../../documentation/1.2/applications/obm.html ../../documentation/1.2/applications/phpldapadmin.html ../../documentation/1.2/applications/phpldapadmin.html ../../documentation/1.2/applications/spring.html ../../documentation/1.2/applications/spring.html ../../documentation/1.2/applications/sympa.html ../../documentation/1.2/applications/sympa.html ../../documentation/1.2/applications/tomcat.html ../../documentation/1.2/applications/tomcat.html ../../documentation/1.2/applications/zimbra.html ../../documentation/1.2/applications/zimbra.html ../../documentation/1.2/authapache.html ../../documentation/1.2/authapache.html ../../documentation/1.2/authcas.html ../../documentation/1.2/authcas.html ../../documentation/1.2/authchoice.html ../../documentation/1.2/authchoice.html ../../documentation/1.2/authdbi.html ../../documentation/1.2/authdbi.html ../../documentation/1.2/authdemo.html ../../documentation/1.2/authdemo.html ../../documentation/1.2/authldap.html ../../documentation/1.2/authldap.html ../../documentation/1.2/authldap.html#schema_extension ../../documentation/1.2/authldap.html#schema_extension ../../documentation/1.2/authmulti.html ../../documentation/1.2/authmulti.html ../../documentation/1.2/authnull.html ../../documentation/1.2/authnull.html ../../documentation/1.2/authopenid.html ../../documentation/1.2/authopenid.html ../../documentation/1.2/authproxy.html ../../documentation/1.2/authproxy.html ../../documentation/1.2/authradius.html ../../documentation/1.2/authradius.html ../../documentation/1.2/authremote.html ../../documentation/1.2/authremote.html ../../documentation/1.2/authsaml.html ../../documentation/1.2/authsaml.html ../../documentation/1.2/authslave.html ../../documentation/1.2/authslave.html ../../documentation/1.2/authssl.html ../../documentation/1.2/authssl.html ../../documentation/1.2/authtwitter.html ../../documentation/1.2/authtwitter.html ../../documentation/1.2/authyubikey.html ../../documentation/1.2/authyubikey.html ../../documentation/1.2/browseablesessionbackend.html ../../documentation/1.2/browseablesessionbackend.html ../../documentation/1.2/cda.html ../../documentation/1.2/cda.html ../../documentation/1.2/changeconfbackend.html ../../documentation/1.2/changeconfbackend.html ../../documentation/1.2/configlocation.html ../../documentation/1.2/configlocation.html ../../documentation/1.2/configlocation.html#apache ../../documentation/1.2/configlocation.html#apache ../../documentation/1.2/configlocation.html#portal ../../documentation/1.2/configlocation.html#portal ../../documentation/1.2/configvhost.html ../../documentation/1.2/configvhost.html ../../documentation/1.2/configvhost.html#lemonldapng_configuration ../../documentation/1.2/configvhost.html#lemonldapng_configuration ../../documentation/1.2/customfunctions.html ../../documentation/1.2/customfunctions.html ../../documentation/1.2/error.html ../../documentation/1.2/error.html ../../documentation/1.2/exportedvars.html ../../documentation/1.2/exportedvars.html ../../documentation/1.2/extendedfunctions.html ../../documentation/1.2/extendedfunctions.html ../../documentation/1.2/federationproxy.html ../../documentation/1.2/federationproxy.html ../../documentation/1.2/fileconfbackend.html ../../documentation/1.2/fileconfbackend.html ../../documentation/1.2/filesessionbackend.html ../../documentation/1.2/filesessionbackend.html ../../documentation/1.2/formreplay.html ../../documentation/1.2/formreplay.html ../../documentation/1.2/header_remote_user_conversion.html ../../documentation/1.2/header_remote_user_conversion.html ../../documentation/1.2/highavailability.html ../../documentation/1.2/highavailability.html ../../documentation/1.2/idpcas.html ../../documentation/1.2/idpcas.html ../../documentation/1.2/idpopenid.html ../../documentation/1.2/idpopenid.html ../../documentation/1.2/idpopenid.html#configuration ../../documentation/1.2/idpopenid.html#configuration ../../documentation/1.2/idpopenid.html#security ../../documentation/1.2/idpopenid.html#security ../../documentation/1.2/idpopenid.html#shared_attributes_sreg ../../documentation/1.2/idpopenid.html#shared_attributes_sreg ../../documentation/1.2/idpsaml.html ../../documentation/1.2/idpsaml.html ../../documentation/1.2/installdeb.html ../../documentation/1.2/installdeb.html ../../documentation/1.2/installrpm.html ../../documentation/1.2/installrpm.html ../../documentation/1.2/installtarball.html ../../documentation/1.2/installtarball.html ../../documentation/1.2/internalproxy.html ../../documentation/1.2/internalproxy.html ../../documentation/1.2/ldapconfbackend.html ../../documentation/1.2/ldapconfbackend.html ../../documentation/1.2/ldapminihowto.html ../../documentation/1.2/ldapminihowto.html ../../documentation/1.2/ldapsessionbackend.html ../../documentation/1.2/ldapsessionbackend.html ../../documentation/1.2/loginhistory.html ../../documentation/1.2/loginhistory.html ../../documentation/1.2/logoutforward.html ../../documentation/1.2/logoutforward.html ../../documentation/1.2/logs.html ../../documentation/1.2/logs.html ../../documentation/1.2/managerprotection.html ../../documentation/1.2/managerprotection.html ../../documentation/1.2/memcachedsessionbackend.html ../../documentation/1.2/memcachedsessionbackend.html ../../documentation/1.2/mrtg.html ../../documentation/1.2/mrtg.html ../../documentation/1.2/mysqlminihowto.html ../../documentation/1.2/mysqlminihowto.html ../../documentation/1.2/nosqlsessionbackend.html ../../documentation/1.2/nosqlsessionbackend.html ../../documentation/1.2/notifications.html ../../documentation/1.2/notifications.html ../../documentation/1.2/parameterlist.html ../../documentation/1.2/parameterlist.html ../../documentation/1.2/passwordstore.html ../../documentation/1.2/passwordstore.html ../../documentation/1.2/performances.html ../../documentation/1.2/performances.html ../../documentation/1.2/performances.html#apachesession_performances ../../documentation/1.2/performances.html#apachesession_performances ../../documentation/1.2/performances.html#handler_performance ../../documentation/1.2/performances.html#handler_performance ../../documentation/1.2/performances.html#macros_and_groups ../../documentation/1.2/performances.html#macros_and_groups ../../documentation/1.2/portal.html ../../documentation/1.2/portal.html ../../documentation/1.2/portalcustom.html ../../documentation/1.2/portalcustom.html ../../documentation/1.2/portalcustom.html#other_parameters ../../documentation/1.2/portalcustom.html#other_parameters ../../documentation/1.2/portalmenu.html ../../documentation/1.2/portalmenu.html ../../documentation/1.2/portalmenu.html#categories_and_applications ../../documentation/1.2/portalmenu.html#categories_and_applications ../../documentation/1.2/portalmenu.html#menu_modules ../../documentation/1.2/portalmenu.html#menu_modules ../../documentation/1.2/prereq.html ../../documentation/1.2/prereq.html ../../documentation/1.2/prereq.html#yum ../../documentation/1.2/prereq.html#yum ../../documentation/1.2/rbac.html ../../documentation/1.2/rbac.html ../../documentation/1.2/redirections.html ../../documentation/1.2/redirections.html ../../documentation/1.2/resetpassword.html ../../documentation/1.2/resetpassword.html ../../documentation/1.2/safejail.html ../../documentation/1.2/safejail.html ../../documentation/1.2/samlservice.html ../../documentation/1.2/samlservice.html ../../documentation/1.2/samlservice.html#authentication_contexts ../../documentation/1.2/samlservice.html#authentication_contexts ../../documentation/1.2/samlservice.html#general_options ../../documentation/1.2/samlservice.html#general_options ../../documentation/1.2/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.2/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.2/securetoken.html ../../documentation/1.2/securetoken.html ../../documentation/1.2/security.html ../../documentation/1.2/security.html ../../documentation/1.2/security.html#write_good_rules ../../documentation/1.2/security.html#write_good_rules ../../documentation/1.2/selfmadeapplication.html ../../documentation/1.2/selfmadeapplication.html ../../documentation/1.2/sessions.html ../../documentation/1.2/sessions.html ../../documentation/1.2/soapconfbackend.html ../../documentation/1.2/soapconfbackend.html ../../documentation/1.2/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.2/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.2/soapminihowto.html ../../documentation/1.2/soapminihowto.html ../../documentation/1.2/soapservices.html ../../documentation/1.2/soapservices.html ../../documentation/1.2/soapsessionbackend.html ../../documentation/1.2/soapsessionbackend.html ../../documentation/1.2/sqlconfbackend.html ../../documentation/1.2/sqlconfbackend.html ../../documentation/1.2/sqlsessionbackend.html ../../documentation/1.2/sqlsessionbackend.html ../../documentation/1.2/sqlsessionbackend.html#prepare_the_database ../../documentation/1.2/sqlsessionbackend.html#prepare_the_database ../../documentation/1.2/ssocookie.html ../../documentation/1.2/ssocookie.html ../../documentation/1.2/start.html#authentication_users_and_password_databases ../../documentation/1.2/start.html#authentication_users_and_password_databases ../../documentation/1.2/start.html#configuration ../../documentation/1.2/start.html#configuration ../../documentation/1.2/start.html#configuration_database ../../documentation/1.2/start.html#configuration_database ../../documentation/1.2/start.html#identity_provider ../../documentation/1.2/start.html#identity_provider ../../documentation/1.2/start.html#sessions_database ../../documentation/1.2/start.html#sessions_database ../../documentation/1.2/start.html#sessions_databases ../../documentation/1.2/start.html#sessions_databases ../../documentation/1.2/status.html ../../documentation/1.2/status.html ../../documentation/1.2/upgrade.html ../../documentation/1.2/upgrade.html ../../documentation/1.2/upgrade.html#debian_lenny_upgrade ../../documentation/1.2/upgrade.html#debian_lenny_upgrade ../../documentation/1.2/writingrulesand_headers.html ../../documentation/1.2/writingrulesand_headers.html ../../documentation/1.2/writingrulesand_headers.html#headers ../../documentation/1.2/writingrulesand_headers.html#headers ../../documentation/1.2/writingrulesand_headers.html#rules ../../documentation/1.2/writingrulesand_headers.html#rules ../../documentation/1.3/activedirectoryminihowto.html ../../documentation/1.3/activedirectoryminihowto.html ../../documentation/1.3/applications.html ../../documentation/1.3/applications.html ../../documentation/1.3/applications/authbasic.html ../../documentation/1.3/applications/authbasic.html ../../documentation/1.3/applications/bugzilla.html ../../documentation/1.3/applications/bugzilla.html ../../documentation/1.3/applications/django.html ../../documentation/1.3/applications/django.html ../../documentation/1.3/applications/dokuwiki.html ../../documentation/1.3/applications/dokuwiki.html ../../documentation/1.3/applications/drupal.html ../../documentation/1.3/applications/drupal.html ../../documentation/1.3/applications/googleapps.html ../../documentation/1.3/applications/googleapps.html ../../documentation/1.3/applications/liferay.html ../../documentation/1.3/applications/liferay.html ../../documentation/1.3/applications/limesurvey.html ../../documentation/1.3/applications/limesurvey.html ../../documentation/1.3/applications/mediawiki.html ../../documentation/1.3/applications/mediawiki.html ../../documentation/1.3/applications/obm.html ../../documentation/1.3/applications/obm.html ../../documentation/1.3/applications/phpldapadmin.html ../../documentation/1.3/applications/phpldapadmin.html ../../documentation/1.3/applications/spring.html ../../documentation/1.3/applications/spring.html ../../documentation/1.3/applications/sympa.html ../../documentation/1.3/applications/sympa.html ../../documentation/1.3/applications/tomcat.html ../../documentation/1.3/applications/tomcat.html ../../documentation/1.3/applications/zimbra.html ../../documentation/1.3/applications/zimbra.html ../../documentation/1.3/authad.html ../../documentation/1.3/authad.html ../../documentation/1.3/authapache.html ../../documentation/1.3/authapache.html ../../documentation/1.3/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.3/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.3/authbrowserid.html ../../documentation/1.3/authbrowserid.html ../../documentation/1.3/authcas.html ../../documentation/1.3/authcas.html ../../documentation/1.3/authchoice.html ../../documentation/1.3/authchoice.html ../../documentation/1.3/authdbi.html ../../documentation/1.3/authdbi.html ../../documentation/1.3/authdemo.html ../../documentation/1.3/authdemo.html ../../documentation/1.3/authfacebook.html ../../documentation/1.3/authfacebook.html ../../documentation/1.3/authgoogle.html ../../documentation/1.3/authgoogle.html ../../documentation/1.3/authldap.html ../../documentation/1.3/authldap.html ../../documentation/1.3/authldap.html#schema_extension ../../documentation/1.3/authldap.html#schema_extension ../../documentation/1.3/authmulti.html ../../documentation/1.3/authmulti.html ../../documentation/1.3/authnull.html ../../documentation/1.3/authnull.html ../../documentation/1.3/authopenid.html ../../documentation/1.3/authopenid.html ../../documentation/1.3/authproxy.html ../../documentation/1.3/authproxy.html ../../documentation/1.3/authradius.html ../../documentation/1.3/authradius.html ../../documentation/1.3/authremote.html ../../documentation/1.3/authremote.html ../../documentation/1.3/authsaml.html ../../documentation/1.3/authsaml.html ../../documentation/1.3/authslave.html ../../documentation/1.3/authslave.html ../../documentation/1.3/authssl.html ../../documentation/1.3/authssl.html ../../documentation/1.3/authtwitter.html ../../documentation/1.3/authtwitter.html ../../documentation/1.3/authwebid.html ../../documentation/1.3/authwebid.html ../../documentation/1.3/authyubikey.html ../../documentation/1.3/authyubikey.html ../../documentation/1.3/browseablesessionbackend.html ../../documentation/1.3/browseablesessionbackend.html ../../documentation/1.3/cda.html ../../documentation/1.3/cda.html ../../documentation/1.3/changeconfbackend.html ../../documentation/1.3/changeconfbackend.html ../../documentation/1.3/configlocation.html ../../documentation/1.3/configlocation.html ../../documentation/1.3/configlocation.html#apache ../../documentation/1.3/configlocation.html#apache ../../documentation/1.3/configlocation.html#portal ../../documentation/1.3/configlocation.html#portal ../../documentation/1.3/configvhost.html ../../documentation/1.3/configvhost.html ../../documentation/1.3/configvhost.html#lemonldapng_configuration ../../documentation/1.3/configvhost.html#lemonldapng_configuration ../../documentation/1.3/customfunctions.html ../../documentation/1.3/customfunctions.html ../../documentation/1.3/error.html ../../documentation/1.3/error.html ../../documentation/1.3/exportedvars.html ../../documentation/1.3/exportedvars.html ../../documentation/1.3/extendedfunctions.html ../../documentation/1.3/extendedfunctions.html ../../documentation/1.3/fastcgi.html ../../documentation/1.3/fastcgi.html ../../documentation/1.3/federationproxy.html ../../documentation/1.3/federationproxy.html ../../documentation/1.3/fileconfbackend.html ../../documentation/1.3/fileconfbackend.html ../../documentation/1.3/filesessionbackend.html ../../documentation/1.3/filesessionbackend.html ../../documentation/1.3/formreplay.html ../../documentation/1.3/formreplay.html ../../documentation/1.3/handlerauthbasic.html ../../documentation/1.3/handlerauthbasic.html ../../documentation/1.3/header_remote_user_conversion.html ../../documentation/1.3/header_remote_user_conversion.html ../../documentation/1.3/highavailability.html ../../documentation/1.3/highavailability.html ../../documentation/1.3/idpcas.html ../../documentation/1.3/idpcas.html ../../documentation/1.3/idpopenid.html ../../documentation/1.3/idpopenid.html ../../documentation/1.3/idpopenid.html#configuration ../../documentation/1.3/idpopenid.html#configuration ../../documentation/1.3/idpopenid.html#security ../../documentation/1.3/idpopenid.html#security ../../documentation/1.3/idpopenid.html#shared_attributes_sreg ../../documentation/1.3/idpopenid.html#shared_attributes_sreg ../../documentation/1.3/idpsaml.html ../../documentation/1.3/idpsaml.html ../../documentation/1.3/installdeb.html ../../documentation/1.3/installdeb.html ../../documentation/1.3/installrpm.html ../../documentation/1.3/installrpm.html ../../documentation/1.3/installtarball.html ../../documentation/1.3/installtarball.html ../../documentation/1.3/internalproxy.html ../../documentation/1.3/internalproxy.html ../../documentation/1.3/ldapconfbackend.html ../../documentation/1.3/ldapconfbackend.html ../../documentation/1.3/ldapminihowto.html ../../documentation/1.3/ldapminihowto.html ../../documentation/1.3/ldapsessionbackend.html ../../documentation/1.3/ldapsessionbackend.html ../../documentation/1.3/loginhistory.html ../../documentation/1.3/loginhistory.html ../../documentation/1.3/logoutforward.html ../../documentation/1.3/logoutforward.html ../../documentation/1.3/logs.html ../../documentation/1.3/logs.html ../../documentation/1.3/managerprotection.html ../../documentation/1.3/managerprotection.html ../../documentation/1.3/memcachedsessionbackend.html ../../documentation/1.3/memcachedsessionbackend.html ../../documentation/1.3/mrtg.html ../../documentation/1.3/mrtg.html ../../documentation/1.3/mysqlminihowto.html ../../documentation/1.3/mysqlminihowto.html ../../documentation/1.3/nosqlsessionbackend.html ../../documentation/1.3/nosqlsessionbackend.html ../../documentation/1.3/notifications.html ../../documentation/1.3/notifications.html ../../documentation/1.3/parameterlist.html ../../documentation/1.3/parameterlist.html ../../documentation/1.3/passwordstore.html ../../documentation/1.3/passwordstore.html ../../documentation/1.3/performances.html ../../documentation/1.3/performances.html ../../documentation/1.3/performances.html#apachesession_performances ../../documentation/1.3/performances.html#apachesession_performances ../../documentation/1.3/performances.html#handler_performance ../../documentation/1.3/performances.html#handler_performance ../../documentation/1.3/performances.html#macros_and_groups ../../documentation/1.3/performances.html#macros_and_groups ../../documentation/1.3/portal.html ../../documentation/1.3/portal.html ../../documentation/1.3/portalcustom.html ../../documentation/1.3/portalcustom.html ../../documentation/1.3/portalcustom.html#other_parameters ../../documentation/1.3/portalcustom.html#other_parameters ../../documentation/1.3/portalmenu.html ../../documentation/1.3/portalmenu.html ../../documentation/1.3/portalmenu.html#categories_and_applications ../../documentation/1.3/portalmenu.html#categories_and_applications ../../documentation/1.3/portalmenu.html#menu_modules ../../documentation/1.3/portalmenu.html#menu_modules ../../documentation/1.3/prereq.html ../../documentation/1.3/prereq.html ../../documentation/1.3/prereq.html#yum ../../documentation/1.3/prereq.html#yum ../../documentation/1.3/rbac.html ../../documentation/1.3/rbac.html ../../documentation/1.3/redirections.html ../../documentation/1.3/redirections.html ../../documentation/1.3/resetpassword.html ../../documentation/1.3/resetpassword.html ../../documentation/1.3/safejail.html ../../documentation/1.3/safejail.html ../../documentation/1.3/samlservice.html ../../documentation/1.3/samlservice.html ../../documentation/1.3/samlservice.html#authentication_contexts ../../documentation/1.3/samlservice.html#authentication_contexts ../../documentation/1.3/samlservice.html#general_options ../../documentation/1.3/samlservice.html#general_options ../../documentation/1.3/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.3/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.3/securetoken.html ../../documentation/1.3/securetoken.html ../../documentation/1.3/security.html ../../documentation/1.3/security.html ../../documentation/1.3/security.html#write_good_rules ../../documentation/1.3/security.html#write_good_rules ../../documentation/1.3/selfmadeapplication.html ../../documentation/1.3/selfmadeapplication.html ../../documentation/1.3/sessions.html ../../documentation/1.3/sessions.html ../../documentation/1.3/soapconfbackend.html ../../documentation/1.3/soapconfbackend.html ../../documentation/1.3/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.3/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.3/soapminihowto.html ../../documentation/1.3/soapminihowto.html ../../documentation/1.3/soapservices.html ../../documentation/1.3/soapservices.html ../../documentation/1.3/soapsessionbackend.html ../../documentation/1.3/soapsessionbackend.html ../../documentation/1.3/sqlconfbackend.html ../../documentation/1.3/sqlconfbackend.html ../../documentation/1.3/sqlsessionbackend.html ../../documentation/1.3/sqlsessionbackend.html ../../documentation/1.3/sqlsessionbackend.html#prepare_the_database ../../documentation/1.3/sqlsessionbackend.html#prepare_the_database ../../documentation/1.3/ssocookie.html ../../documentation/1.3/ssocookie.html ../../documentation/1.3/start.html#authentication_users_and_password_databases ../../documentation/1.3/start.html#authentication_users_and_password_databases ../../documentation/1.3/start.html#configuration ../../documentation/1.3/start.html#configuration ../../documentation/1.3/start.html#configuration_database ../../documentation/1.3/start.html#configuration_database ../../documentation/1.3/start.html#identity_provider ../../documentation/1.3/start.html#identity_provider ../../documentation/1.3/start.html#sessions_database ../../documentation/1.3/start.html#sessions_database ../../documentation/1.3/start.html#sessions_databases ../../documentation/1.3/start.html#sessions_databases ../../documentation/1.3/status.html ../../documentation/1.3/status.html ../../documentation/1.3/upgrade.html ../../documentation/1.3/upgrade.html ../../documentation/1.3/upgrade.html#debian_lenny_upgrade ../../documentation/1.3/upgrade.html#debian_lenny_upgrade ../../documentation/1.3/variables.html ../../documentation/1.3/variables.html ../../documentation/1.3/writingrulesand_headers.html ../../documentation/1.3/writingrulesand_headers.html ../../documentation/1.3/writingrulesand_headers.html#headers ../../documentation/1.3/writingrulesand_headers.html#headers ../../documentation/1.3/writingrulesand_headers.html#rules ../../documentation/1.3/writingrulesand_headers.html#rules ../../documentation/1.4/activedirectoryminihowto.html ../../documentation/1.4/activedirectoryminihowto.html ../../documentation/1.4/applications.html ../../documentation/1.4/applications.html ../../documentation/1.4/applications/authbasic.html ../../documentation/1.4/applications/authbasic.html ../../documentation/1.4/applications/bugzilla.html ../../documentation/1.4/applications/bugzilla.html ../../documentation/1.4/applications/django.html ../../documentation/1.4/applications/django.html ../../documentation/1.4/applications/dokuwiki.html ../../documentation/1.4/applications/dokuwiki.html ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/applications/googleapps.html ../../documentation/1.4/applications/googleapps.html ../../documentation/1.4/applications/liferay.html ../../documentation/1.4/applications/liferay.html ../../documentation/1.4/applications/limesurvey.html ../../documentation/1.4/applications/limesurvey.html ../../documentation/1.4/applications/mediawiki.html ../../documentation/1.4/applications/mediawiki.html ../../documentation/1.4/applications/obm.html ../../documentation/1.4/applications/obm.html ../../documentation/1.4/applications/phpldapadmin.html ../../documentation/1.4/applications/phpldapadmin.html ../../documentation/1.4/applications/spring.html ../../documentation/1.4/applications/spring.html ../../documentation/1.4/applications/sympa.html ../../documentation/1.4/applications/sympa.html ../../documentation/1.4/applications/tomcat.html ../../documentation/1.4/applications/tomcat.html ../../documentation/1.4/applications/zimbra.html ../../documentation/1.4/applications/zimbra.html ../../documentation/1.4/authad.html ../../documentation/1.4/authad.html ../../documentation/1.4/authapache.html ../../documentation/1.4/authapache.html ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.4/authbrowserid.html ../../documentation/1.4/authbrowserid.html ../../documentation/1.4/authcas.html ../../documentation/1.4/authcas.html ../../documentation/1.4/authchoice.html ../../documentation/1.4/authchoice.html ../../documentation/1.4/authdbi.html ../../documentation/1.4/authdbi.html ../../documentation/1.4/authdemo.html ../../documentation/1.4/authdemo.html ../../documentation/1.4/authfacebook.html ../../documentation/1.4/authfacebook.html ../../documentation/1.4/authgoogle.html ../../documentation/1.4/authgoogle.html ../../documentation/1.4/authldap.html ../../documentation/1.4/authldap.html ../../documentation/1.4/authldap.html#schema_extension ../../documentation/1.4/authldap.html#schema_extension ../../documentation/1.4/authmulti.html ../../documentation/1.4/authmulti.html ../../documentation/1.4/authnull.html ../../documentation/1.4/authnull.html ../../documentation/1.4/authopenid.html ../../documentation/1.4/authopenid.html ../../documentation/1.4/authproxy.html ../../documentation/1.4/authproxy.html ../../documentation/1.4/authradius.html ../../documentation/1.4/authradius.html ../../documentation/1.4/authremote.html ../../documentation/1.4/authremote.html ../../documentation/1.4/authsaml.html ../../documentation/1.4/authsaml.html ../../documentation/1.4/authslave.html ../../documentation/1.4/authslave.html ../../documentation/1.4/authssl.html ../../documentation/1.4/authssl.html ../../documentation/1.4/authtwitter.html ../../documentation/1.4/authtwitter.html ../../documentation/1.4/authwebid.html ../../documentation/1.4/authwebid.html ../../documentation/1.4/authyubikey.html ../../documentation/1.4/authyubikey.html ../../documentation/1.4/browseablesessionbackend.html ../../documentation/1.4/browseablesessionbackend.html ../../documentation/1.4/cda.html ../../documentation/1.4/cda.html ../../documentation/1.4/changeconfbackend.html ../../documentation/1.4/changeconfbackend.html ../../documentation/1.4/configlocation.html ../../documentation/1.4/configlocation.html ../../documentation/1.4/configlocation.html#apache ../../documentation/1.4/configlocation.html#apache ../../documentation/1.4/configlocation.html#portal ../../documentation/1.4/configlocation.html#portal ../../documentation/1.4/configvhost.html ../../documentation/1.4/configvhost.html ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../documentation/1.4/customfunctions.html ../../documentation/1.4/customfunctions.html ../../documentation/1.4/error.html ../../documentation/1.4/error.html ../../documentation/1.4/exportedvars.html ../../documentation/1.4/exportedvars.html ../../documentation/1.4/extendedfunctions.html ../../documentation/1.4/extendedfunctions.html ../../documentation/1.4/fastcgi.html ../../documentation/1.4/fastcgi.html ../../documentation/1.4/federationproxy.html ../../documentation/1.4/federationproxy.html ../../documentation/1.4/fileconfbackend.html ../../documentation/1.4/fileconfbackend.html ../../documentation/1.4/filesessionbackend.html ../../documentation/1.4/filesessionbackend.html ../../documentation/1.4/formreplay.html ../../documentation/1.4/formreplay.html ../../documentation/1.4/handlerauthbasic.html ../../documentation/1.4/handlerauthbasic.html ../../documentation/1.4/header_remote_user_conversion.html ../../documentation/1.4/header_remote_user_conversion.html ../../documentation/1.4/highavailability.html ../../documentation/1.4/highavailability.html ../../documentation/1.4/idpcas.html ../../documentation/1.4/idpcas.html ../../documentation/1.4/idpopenid.html ../../documentation/1.4/idpopenid.html ../../documentation/1.4/idpopenid.html#configuration ../../documentation/1.4/idpopenid.html#configuration ../../documentation/1.4/idpopenid.html#security ../../documentation/1.4/idpopenid.html#security ../../documentation/1.4/idpopenid.html#shared_attributes_sreg ../../documentation/1.4/idpopenid.html#shared_attributes_sreg ../../documentation/1.4/idpsaml.html ../../documentation/1.4/idpsaml.html ../../documentation/1.4/installdeb.html ../../documentation/1.4/installdeb.html ../../documentation/1.4/installrpm.html ../../documentation/1.4/installrpm.html ../../documentation/1.4/installtarball.html ../../documentation/1.4/installtarball.html ../../documentation/1.4/internalproxy.html ../../documentation/1.4/internalproxy.html ../../documentation/1.4/jsonfileconfbackend.html ../../documentation/1.4/jsonfileconfbackend.html ../../documentation/1.4/ldapconfbackend.html ../../documentation/1.4/ldapconfbackend.html ../../documentation/1.4/ldapminihowto.html ../../documentation/1.4/ldapminihowto.html ../../documentation/1.4/ldapsessionbackend.html ../../documentation/1.4/ldapsessionbackend.html ../../documentation/1.4/loginhistory.html ../../documentation/1.4/loginhistory.html ../../documentation/1.4/logoutforward.html ../../documentation/1.4/logoutforward.html ../../documentation/1.4/logs.html ../../documentation/1.4/logs.html ../../documentation/1.4/managerprotection.html ../../documentation/1.4/managerprotection.html ../../documentation/1.4/memcachedsessionbackend.html ../../documentation/1.4/memcachedsessionbackend.html ../../documentation/1.4/mrtg.html ../../documentation/1.4/mrtg.html ../../documentation/1.4/mysqlminihowto.html ../../documentation/1.4/mysqlminihowto.html ../../documentation/1.4/nosqlsessionbackend.html ../../documentation/1.4/nosqlsessionbackend.html ../../documentation/1.4/notifications.html ../../documentation/1.4/notifications.html ../../documentation/1.4/parameterlist.html ../../documentation/1.4/parameterlist.html ../../documentation/1.4/passwordstore.html ../../documentation/1.4/passwordstore.html ../../documentation/1.4/performances.html ../../documentation/1.4/performances.html ../../documentation/1.4/performances.html#apachesession_performances ../../documentation/1.4/performances.html#apachesession_performances ../../documentation/1.4/performances.html#handler_performance ../../documentation/1.4/performances.html#handler_performance ../../documentation/1.4/performances.html#macros_and_groups ../../documentation/1.4/performances.html#macros_and_groups ../../documentation/1.4/portal.html ../../documentation/1.4/portal.html ../../documentation/1.4/portalcustom.html ../../documentation/1.4/portalcustom.html ../../documentation/1.4/portalcustom.html#other_parameters ../../documentation/1.4/portalcustom.html#other_parameters ../../documentation/1.4/portalmenu.html ../../documentation/1.4/portalmenu.html ../../documentation/1.4/portalmenu.html#categories_and_applications ../../documentation/1.4/portalmenu.html#categories_and_applications ../../documentation/1.4/portalmenu.html#menu_modules ../../documentation/1.4/portalmenu.html#menu_modules ../../documentation/1.4/prereq.html ../../documentation/1.4/prereq.html ../../documentation/1.4/prereq.html#yum ../../documentation/1.4/prereq.html#yum ../../documentation/1.4/rbac.html ../../documentation/1.4/rbac.html ../../documentation/1.4/redirections.html ../../documentation/1.4/redirections.html ../../documentation/1.4/resetpassword.html ../../documentation/1.4/resetpassword.html ../../documentation/1.4/safejail.html ../../documentation/1.4/safejail.html ../../documentation/1.4/samlservice.html ../../documentation/1.4/samlservice.html ../../documentation/1.4/samlservice.html#authentication_contexts ../../documentation/1.4/samlservice.html#authentication_contexts ../../documentation/1.4/samlservice.html#general_options ../../documentation/1.4/samlservice.html#general_options ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.4/securetoken.html ../../documentation/1.4/securetoken.html ../../documentation/1.4/security.html ../../documentation/1.4/security.html ../../documentation/1.4/security.html#write_good_rules ../../documentation/1.4/security.html#write_good_rules ../../documentation/1.4/selfmadeapplication.html ../../documentation/1.4/selfmadeapplication.html ../../documentation/1.4/sessions.html ../../documentation/1.4/sessions.html ../../documentation/1.4/soapconfbackend.html ../../documentation/1.4/soapconfbackend.html ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.4/soapminihowto.html ../../documentation/1.4/soapminihowto.html ../../documentation/1.4/soapservices.html ../../documentation/1.4/soapservices.html ../../documentation/1.4/soapsessionbackend.html ../../documentation/1.4/soapsessionbackend.html ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/sqlsessionbackend.html ../../documentation/1.4/sqlsessionbackend.html ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database ../../documentation/1.4/ssocookie.html ../../documentation/1.4/ssocookie.html ../../documentation/1.4/start.html#authentication_users_and_password_databases ../../documentation/1.4/start.html#authentication_users_and_password_databases ../../documentation/1.4/start.html#configuration ../../documentation/1.4/start.html#configuration ../../documentation/1.4/start.html#configuration_database ../../documentation/1.4/start.html#configuration_database ../../documentation/1.4/start.html#identity_provider ../../documentation/1.4/start.html#identity_provider ../../documentation/1.4/start.html#sessions_database ../../documentation/1.4/start.html#sessions_database ../../documentation/1.4/start.html#sessions_databases ../../documentation/1.4/start.html#sessions_databases ../../documentation/1.4/status.html ../../documentation/1.4/status.html ../../documentation/1.4/upgrade.html ../../documentation/1.4/upgrade.html ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../../documentation/1.4/variables.html ../../documentation/1.4/variables.html ../../documentation/1.4/writingrulesand_headers.html ../../documentation/1.4/writingrulesand_headers.html ../../documentation/1.4/writingrulesand_headers.html#headers ../../documentation/1.4/writingrulesand_headers.html#headers ../../documentation/1.4/writingrulesand_headers.html#rules ../../documentation/1.4/writingrulesand_headers.html#rules ../../documentation/current/ssocookie.html#sso_cookie ../../documentation/current/ssocookie.html#sso_cookie ../../documentation/features.html#session_explorer ../../documentation/features.html#session_explorer ../../documentation/features.html#session_restrictions ../../documentation/features.html#session_restrictions ../../documentation/latest/ssocookie.html#sso_cookie ../../documentation/latest/ssocookie.html#sso_cookie ../../documentation/presentation.html#cross_domain_authentication_cda ../../documentation/presentation.html#cross_domain_authentication_cda ../../documentation/presentation.html#kinematics ../../documentation/presentation.html#kinematics ../../documentation/presentation.html#login ../../documentation/presentation.html#login ../../documentation/quickstart.html#apache ../../documentation/quickstart.html#apache ../../download.html ../../download.html ../../media/documentation/lemonldap-ng-architecture.png ../../media/documentation/lemonldap-ng-architecture.png ../../media/documentation/lemonldapng-sso.png ../../media/documentation/lemonldapng-sso.png ../../media/icons/flags/fr.png ../../media/icons/flags/fr.png ../../media/icons/flags/us.png ../../media/icons/flags/us.png ../css/all.css ../css/all.css ../css/print.css ../css/print.css ../css/screen.css ../css/screen.css ../documentation/1.0/applications.html ../documentation/1.0/applications.html ../documentation/1.0/portal.html ../documentation/1.0/portal.html ../documentation/1.2/applications.html ../documentation/1.2/applications.html ../documentation/1.2/portal.html ../documentation/1.2/portal.html ../documentation/current/authdemo.html ../documentation/current/authdemo.html ../documentation/current/installdeb.html ../documentation/current/installdeb.html ../documentation/current/installrpm.html ../documentation/current/installrpm.html ../documentation/current/logs.html ../documentation/current/logs.html ../documentation/current/notifications.html ../documentation/current/notifications.html ../documentation/current/portalcustom.html ../documentation/current/portalcustom.html ../documentation/current/prereq.html ../documentation/current/prereq.html ../documentation/current/sessions.html ../documentation/current/sessions.html ../documentation/current/ssocookie.html ../documentation/current/ssocookie.html ../documentation/current/ssocookie.html#sso_cookie ../documentation/current/ssocookie.html#sso_cookie ../documentation/current/start.html#authentication_users_and_password_databases ../documentation/current/start.html#authentication_users_and_password_databases ../documentation/current/start.html#configuration_database ../documentation/current/start.html#configuration_database ../documentation/current/start.html#sessions_database ../documentation/current/start.html#sessions_database ../documentation/current/writingrulesand_headers.html ../documentation/current/writingrulesand_headers.html ../documentation/current/writingrulesand_headers.html#headers ../documentation/current/writingrulesand_headers.html#headers ../documentation/latest/installdeb.html ../documentation/latest/installdeb.html ../documentation/latest/installrpm.html ../documentation/latest/installrpm.html ../documentation/latest/logs.html ../documentation/latest/logs.html ../documentation/latest/notifications.html ../documentation/latest/notifications.html ../documentation/latest/portalcustom.html ../documentation/latest/portalcustom.html ../documentation/latest/prereq.html ../documentation/latest/prereq.html ../documentation/latest/sessions.html ../documentation/latest/sessions.html ../documentation/latest/ssocookie.html ../documentation/latest/ssocookie.html ../documentation/latest/ssocookie.html#sso_cookie ../documentation/latest/ssocookie.html#sso_cookie ../documentation/latest/start.html#authentication_users_and_password_databases ../documentation/latest/start.html#authentication_users_and_password_databases ../documentation/latest/start.html#configuration_database ../documentation/latest/start.html#configuration_database ../documentation/latest/start.html#sessions_database ../documentation/latest/start.html#sessions_database ../documentation/latest/writingrulesand_headers.html ../documentation/latest/writingrulesand_headers.html ../documentation/latest/writingrulesand_headers.html#headers ../documentation/latest/writingrulesand_headers.html#headers ../documentation/presentation.html#login ../documentation/presentation.html#login ../download.html ../download.html ../index.html ../index.html ../media/icons/access.png ../media/icons/access.png ../media/icons/agt_web.png ../media/icons/agt_web.png ../media/icons/bug.png ../media/icons/bug.png ../media/icons/chat.png ../media/icons/chat.png ../media/icons/clock.png ../media/icons/clock.png ../media/icons/database.png ../media/icons/database.png ../media/icons/flags/de.png ../media/icons/flags/de.png ../media/icons/flags/fr.png ../media/icons/flags/fr.png ../media/icons/flags/ua.png ../media/icons/flags/ua.png ../media/icons/flags/us.png ../media/icons/flags/us.png ../media/icons/gpg.png ../media/icons/gpg.png ../media/icons/kmenuedit.png ../media/icons/kmenuedit.png ../media/icons/knewsticker.png ../media/icons/knewsticker.png ../media/icons/neotux.png ../media/icons/neotux.png ../media/icons/personal.png ../media/icons/personal.png ../media/icons/softwared.png ../media/icons/softwared.png ../media/icons/terminal.png ../media/icons/terminal.png ../media/icons/tutorials.png ../media/icons/tutorials.png ../media/icons/tux.png ../media/icons/tux.png ../media/icons/utilities.png ../media/icons/utilities.png ../media/icons/windowlist.png ../media/icons/windowlist.png ../media/icons/wizard.png ../media/icons/wizard.png ../media/icons/xfmail.png ../media/icons/xfmail.png ../media/logos/logo-ul.png ../media/logos/logo-ul.png ../media/logos/logo_abuledu.png ../media/logos/logo_abuledu.png ../media/logos/logo_bpi.png ../media/logos/logo_bpi.png ../media/logos/logo_gn.png ../media/logos/logo_gn.png ../media/logos/logo_linagora.png ../media/logos/logo_linagora.png ../media/logos/logo_ministere_justice.jpg ../media/logos/logo_ministere_justice.jpg ../media/logos/logo_rbn.png ../media/logos/logo_rbn.png ../media/logos/logo_ucanss.png ../media/logos/logo_ucanss.png ../media/logos/ow2.png ../media/logos/ow2.png ../media/logos/sgs_white_small.jpg ../media/logos/sgs_white_small.jpg ../media/rpm-gpg-key-ow2 ../media/rpm-gpg-key-ow2 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-auth.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-portal-password.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=200&amp;h=155 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=200&h=155 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=800&amp;h=622 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=800&h=622 ../media/screenshots/0.9.3/lemonldap-ng-testpage.png?w=800&h=622 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_application_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_authentication_portal.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_logout_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_password_menu.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=200&amp;h=133 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=200&h=133 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=800&amp;h=534 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=800&h=534 ../media/screenshots/0.9.4/0.9.4_password_reset.png?w=800&h=534 ../media/screenshots/1.0/dark/menu.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/menu.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/menu.png?w=200&h=128 ../media/screenshots/1.0/dark/menu.png?w=200&h=128 ../media/screenshots/1.0/dark/menu.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/menu.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/menu.png?w=800&h=515 ../media/screenshots/1.0/dark/menu.png?w=800&h=515 ../media/screenshots/1.0/dark/password.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/password.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/password.png?w=200&h=128 ../media/screenshots/1.0/dark/password.png?w=200&h=128 ../media/screenshots/1.0/dark/password.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/password.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/password.png?w=800&h=515 ../media/screenshots/1.0/dark/password.png?w=800&h=515 ../media/screenshots/1.0/dark/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/dark/portal.png?w=200&h=128 ../media/screenshots/1.0/dark/portal.png?w=200&h=128 ../media/screenshots/1.0/dark/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/dark/portal.png?w=800&h=515 ../media/screenshots/1.0/dark/portal.png?w=800&h=515 ../media/screenshots/1.0/impact/menu.png?w=200&amp;h=130 ../media/screenshots/1.0/impact/menu.png?w=200&amp;h=130 ../media/screenshots/1.0/impact/menu.png?w=200&h=130 ../media/screenshots/1.0/impact/menu.png?w=200&h=130 ../media/screenshots/1.0/impact/menu.png?w=800&amp;h=523 ../media/screenshots/1.0/impact/menu.png?w=800&amp;h=523 ../media/screenshots/1.0/impact/menu.png?w=800&h=523 ../media/screenshots/1.0/impact/menu.png?w=800&h=523 ../media/screenshots/1.0/impact/password.png?w=200&amp;h=128 ../media/screenshots/1.0/impact/password.png?w=200&amp;h=128 ../media/screenshots/1.0/impact/password.png?w=200&h=128 ../media/screenshots/1.0/impact/password.png?w=200&h=128 ../media/screenshots/1.0/impact/password.png?w=800&amp;h=515 ../media/screenshots/1.0/impact/password.png?w=800&amp;h=515 ../media/screenshots/1.0/impact/password.png?w=800&h=515 ../media/screenshots/1.0/impact/password.png?w=800&h=515 ../media/screenshots/1.0/impact/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/impact/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/impact/portal.png?w=200&h=128 ../media/screenshots/1.0/impact/portal.png?w=200&h=128 ../media/screenshots/1.0/impact/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/impact/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/impact/portal.png?w=800&h=515 ../media/screenshots/1.0/impact/portal.png?w=800&h=515 ../media/screenshots/1.0/manager/accordeon_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/accordeon_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/accordeon_dark.png?w=200&h=128 ../media/screenshots/1.0/manager/accordeon_dark.png?w=200&h=128 ../media/screenshots/1.0/manager/accordeon_dark.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/accordeon_dark.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/accordeon_dark.png?w=800&h=515 ../media/screenshots/1.0/manager/accordeon_dark.png?w=800&h=515 ../media/screenshots/1.0/manager/accordeon_light.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/accordeon_light.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/accordeon_light.png?w=200&h=128 ../media/screenshots/1.0/manager/accordeon_light.png?w=200&h=128 ../media/screenshots/1.0/manager/accordeon_light.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/accordeon_light.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/accordeon_light.png?w=800&h=515 ../media/screenshots/1.0/manager/accordeon_light.png?w=800&h=515 ../media/screenshots/1.0/manager/tree_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/tree_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/tree_dark.png?w=200&h=128 ../media/screenshots/1.0/manager/tree_dark.png?w=200&h=128 ../media/screenshots/1.0/manager/tree_dark.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/tree_dark.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/tree_dark.png?w=800&h=515 ../media/screenshots/1.0/manager/tree_dark.png?w=800&h=515 ../media/screenshots/1.0/manager/tree_light.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/tree_light.png?w=200&amp;h=128 ../media/screenshots/1.0/manager/tree_light.png?w=200&h=128 ../media/screenshots/1.0/manager/tree_light.png?w=200&h=128 ../media/screenshots/1.0/manager/tree_light.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/tree_light.png?w=800&amp;h=515 ../media/screenshots/1.0/manager/tree_light.png?w=800&h=515 ../media/screenshots/1.0/manager/tree_light.png?w=800&h=515 ../media/screenshots/1.0/pastel/menu.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/menu.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/menu.png?w=200&h=128 ../media/screenshots/1.0/pastel/menu.png?w=200&h=128 ../media/screenshots/1.0/pastel/menu.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/menu.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/menu.png?w=800&h=515 ../media/screenshots/1.0/pastel/menu.png?w=800&h=515 ../media/screenshots/1.0/pastel/password.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/password.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/password.png?w=200&h=128 ../media/screenshots/1.0/pastel/password.png?w=200&h=128 ../media/screenshots/1.0/pastel/password.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/password.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/password.png?w=800&h=515 ../media/screenshots/1.0/pastel/password.png?w=800&h=515 ../media/screenshots/1.0/pastel/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/portal.png?w=200&amp;h=128 ../media/screenshots/1.0/pastel/portal.png?w=200&h=128 ../media/screenshots/1.0/pastel/portal.png?w=200&h=128 ../media/screenshots/1.0/pastel/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/portal.png?w=800&amp;h=515 ../media/screenshots/1.0/pastel/portal.png?w=800&h=515 ../media/screenshots/1.0/pastel/portal.png?w=800&h=515 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=200&amp;h=128 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=200&h=128 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=200&h=128 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=800&amp;h=514 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=800&amp;h=514 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=800&h=514 ../media/screenshots/1.0/sessionsexplorer/accordeon_dark.png?w=800&h=514 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=200&amp;h=128 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=200&amp;h=128 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=200&h=128 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=200&h=128 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=800&amp;h=514 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=800&amp;h=514 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=800&h=514 ../media/screenshots/1.0/sessionsexplorer/tree_light.png?w=800&h=514 ../media/screenshots/1.1/mailreset/mailreset_step1.png?w=200&h=114 ../media/screenshots/1.1/mailreset/mailreset_step1.png?w=200&h=114 ../media/screenshots/1.1/mailreset/mailreset_step1.png?w=800&h=458 ../media/screenshots/1.1/mailreset/mailreset_step1.png?w=800&h=458 ../media/screenshots/1.1/mailreset/mailreset_step2.png?w=200&h=112 ../media/screenshots/1.1/mailreset/mailreset_step2.png?w=200&h=112 ../media/screenshots/1.1/mailreset/mailreset_step2.png?w=800&h=448 ../media/screenshots/1.1/mailreset/mailreset_step2.png?w=800&h=448 ../media/screenshots/1.1/mailreset/mailreset_step3.png ../media/screenshots/1.1/mailreset/mailreset_step3.png ../media/screenshots/1.1/mailreset/mailreset_step3.png?w=200&h=91 ../media/screenshots/1.1/mailreset/mailreset_step3.png?w=200&h=91 ../media/screenshots/1.1/mailreset/mailreset_step4.png?w=200&h=114 ../media/screenshots/1.1/mailreset/mailreset_step4.png?w=200&h=114 ../media/screenshots/1.1/mailreset/mailreset_step4.png?w=800&h=456 ../media/screenshots/1.1/mailreset/mailreset_step4.png?w=800&h=456 ../media/screenshots/1.1/mailreset/mailreset_step5.png ../media/screenshots/1.1/mailreset/mailreset_step5.png ../media/screenshots/1.1/mailreset/mailreset_step5.png?w=200&h=91 ../media/screenshots/1.1/mailreset/mailreset_step5.png?w=200&h=91 ../media/screenshots/1.1/manager/notifications_explorer_create.png?w=200&h=129 ../media/screenshots/1.1/manager/notifications_explorer_create.png?w=200&h=129 ../media/screenshots/1.1/manager/notifications_explorer_create.png?w=800&h=519 ../media/screenshots/1.1/manager/notifications_explorer_create.png?w=800&h=519 ../media/screenshots/1.1/notifications/sample_notification.png?w=200&h=84 ../media/screenshots/1.1/notifications/sample_notification.png?w=200&h=84 ../media/screenshots/1.1/notifications/sample_notification.png?w=800&h=339 ../media/screenshots/1.1/notifications/sample_notification.png?w=800&h=339 ../media/screenshots/1.2/authentication_portal_1340022238188.png?w=200&h=124 ../media/screenshots/1.2/authentication_portal_1340022238188.png?w=200&h=124 ../media/screenshots/1.2/authentication_portal_1340022238188.png?w=800&h=496 ../media/screenshots/1.2/authentication_portal_1340022238188.png?w=800&h=496 ../media/screenshots/1.2/authentication_portal_1340022292201.png?w=200&h=125 ../media/screenshots/1.2/authentication_portal_1340022292201.png?w=200&h=125 ../media/screenshots/1.2/authentication_portal_1340022292201.png?w=800&h=503 ../media/screenshots/1.2/authentication_portal_1340022292201.png?w=800&h=503 ../media/screenshots/1.2/lemonldap_ng_manager_1340022440100.png?w=200&h=124 ../media/screenshots/1.2/lemonldap_ng_manager_1340022440100.png?w=200&h=124 ../media/screenshots/1.2/lemonldap_ng_manager_1340022440100.png?w=800&h=496 ../media/screenshots/1.2/lemonldap_ng_manager_1340022440100.png?w=800&h=496 ../media/screenshots/1.2/lemonldap_ng_sample_protected_application_1340022329086.png?w=200&h=125 ../media/screenshots/1.2/lemonldap_ng_sample_protected_application_1340022329086.png?w=200&h=125 ../media/screenshots/1.2/lemonldap_ng_sample_protected_application_1340022329086.png?w=800&h=503 ../media/screenshots/1.2/lemonldap_ng_sample_protected_application_1340022329086.png?w=800&h=503 ../media/screenshots/1.2/lemonldap_ng_session_explorer_1340022388573.png?w=200&h=124 ../media/screenshots/1.2/lemonldap_ng_session_explorer_1340022388573.png?w=200&h=124 ../media/screenshots/1.2/lemonldap_ng_session_explorer_1340022388573.png?w=800&h=496 ../media/screenshots/1.2/lemonldap_ng_session_explorer_1340022388573.png?w=800&h=496 ../media/screenshots/rbn/rbn-applis.png ../media/screenshots/rbn/rbn-applis.png ../media/screenshots/rbn/rbn-portal.png ../media/screenshots/rbn/rbn-portal.png ../pages/contact.html ../pages/contact.html ../pages/default_sidebar.html ../pages/default_sidebar.html ../pages/documentation.html ../pages/documentation.html ../pages/documentation/1.1/activedirectoryminihowto.html ../pages/documentation/1.1/activedirectoryminihowto.html ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/applications/authbasic.html ../pages/documentation/1.1/applications/authbasic.html ../pages/documentation/1.1/applications/bugzilla.html ../pages/documentation/1.1/applications/bugzilla.html ../pages/documentation/1.1/applications/drupal.html ../pages/documentation/1.1/applications/drupal.html ../pages/documentation/1.1/applications/googleapps.html ../pages/documentation/1.1/applications/googleapps.html ../pages/documentation/1.1/applications/liferay.html ../pages/documentation/1.1/applications/liferay.html ../pages/documentation/1.1/applications/limesurvey.html ../pages/documentation/1.1/applications/limesurvey.html ../pages/documentation/1.1/applications/mediawiki.html ../pages/documentation/1.1/applications/mediawiki.html ../pages/documentation/1.1/applications/obm.html ../pages/documentation/1.1/applications/obm.html ../pages/documentation/1.1/applications/phpldapadmin.html ../pages/documentation/1.1/applications/phpldapadmin.html ../pages/documentation/1.1/applications/spring.html ../pages/documentation/1.1/applications/spring.html ../pages/documentation/1.1/applications/sympa.html ../pages/documentation/1.1/applications/sympa.html ../pages/documentation/1.1/applications/tomcat.html ../pages/documentation/1.1/applications/tomcat.html ../pages/documentation/1.1/applications/zimbra.html ../pages/documentation/1.1/applications/zimbra.html ../pages/documentation/1.1/authapache.html ../pages/documentation/1.1/authapache.html ../pages/documentation/1.1/authcas.html ../pages/documentation/1.1/authcas.html ../pages/documentation/1.1/authchoice.html ../pages/documentation/1.1/authchoice.html ../pages/documentation/1.1/authdbi.html ../pages/documentation/1.1/authdbi.html ../pages/documentation/1.1/authldap.html ../pages/documentation/1.1/authldap.html ../pages/documentation/1.1/authmulti.html ../pages/documentation/1.1/authmulti.html ../pages/documentation/1.1/authnull.html ../pages/documentation/1.1/authnull.html ../pages/documentation/1.1/authopenid.html ../pages/documentation/1.1/authopenid.html ../pages/documentation/1.1/authproxy.html ../pages/documentation/1.1/authproxy.html ../pages/documentation/1.1/authremote.html ../pages/documentation/1.1/authremote.html ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/authslave.html ../pages/documentation/1.1/authslave.html ../pages/documentation/1.1/authssl.html ../pages/documentation/1.1/authssl.html ../pages/documentation/1.1/authtwitter.html ../pages/documentation/1.1/authtwitter.html ../pages/documentation/1.1/authyubikey.html ../pages/documentation/1.1/authyubikey.html ../pages/documentation/1.1/browseablesessionbackend.html ../pages/documentation/1.1/browseablesessionbackend.html ../pages/documentation/1.1/cda.html ../pages/documentation/1.1/cda.html ../pages/documentation/1.1/changeconfbackend.html ../pages/documentation/1.1/changeconfbackend.html ../pages/documentation/1.1/configlocation.html ../pages/documentation/1.1/configlocation.html ../pages/documentation/1.1/configvhost.html ../pages/documentation/1.1/configvhost.html ../pages/documentation/1.1/customfunctions.html ../pages/documentation/1.1/customfunctions.html ../pages/documentation/1.1/error.html ../pages/documentation/1.1/error.html ../pages/documentation/1.1/exportedvars.html ../pages/documentation/1.1/exportedvars.html ../pages/documentation/1.1/extendedfunctions.html ../pages/documentation/1.1/extendedfunctions.html ../pages/documentation/1.1/federationproxy.html ../pages/documentation/1.1/federationproxy.html ../pages/documentation/1.1/fileconfbackend.html ../pages/documentation/1.1/fileconfbackend.html ../pages/documentation/1.1/filesessionbackend.html ../pages/documentation/1.1/filesessionbackend.html ../pages/documentation/1.1/formreplay.html ../pages/documentation/1.1/formreplay.html ../pages/documentation/1.1/header_remote_user_conversion.html ../pages/documentation/1.1/header_remote_user_conversion.html ../pages/documentation/1.1/highavailability.html ../pages/documentation/1.1/highavailability.html ../pages/documentation/1.1/idpcas.html ../pages/documentation/1.1/idpcas.html ../pages/documentation/1.1/idpopenid.html ../pages/documentation/1.1/idpopenid.html ../pages/documentation/1.1/idpsaml.html ../pages/documentation/1.1/idpsaml.html ../pages/documentation/1.1/installdeb.html ../pages/documentation/1.1/installdeb.html ../pages/documentation/1.1/installrpm.html ../pages/documentation/1.1/installrpm.html ../pages/documentation/1.1/installtarball.html ../pages/documentation/1.1/installtarball.html ../pages/documentation/1.1/ldapconfbackend.html ../pages/documentation/1.1/ldapconfbackend.html ../pages/documentation/1.1/ldapminihowto.html ../pages/documentation/1.1/ldapminihowto.html ../pages/documentation/1.1/ldapsessionbackend.html ../pages/documentation/1.1/ldapsessionbackend.html ../pages/documentation/1.1/logoutforward.html ../pages/documentation/1.1/logoutforward.html ../pages/documentation/1.1/logs.html ../pages/documentation/1.1/logs.html ../pages/documentation/1.1/managerprotection.html ../pages/documentation/1.1/managerprotection.html ../pages/documentation/1.1/memcachedsessionbackend.html ../pages/documentation/1.1/memcachedsessionbackend.html ../pages/documentation/1.1/mrtg.html ../pages/documentation/1.1/mrtg.html ../pages/documentation/1.1/mysqlminihowto.html ../pages/documentation/1.1/mysqlminihowto.html ../pages/documentation/1.1/nosqlsessionbackend.html ../pages/documentation/1.1/nosqlsessionbackend.html ../pages/documentation/1.1/notifications.html ../pages/documentation/1.1/notifications.html ../pages/documentation/1.1/parameterlist.html ../pages/documentation/1.1/parameterlist.html ../pages/documentation/1.1/passwordstore.html ../pages/documentation/1.1/passwordstore.html ../pages/documentation/1.1/performances.html ../pages/documentation/1.1/performances.html ../pages/documentation/1.1/portal.html ../pages/documentation/1.1/portal.html ../pages/documentation/1.1/portalcustom.html ../pages/documentation/1.1/portalcustom.html ../pages/documentation/1.1/portalmenu.html ../pages/documentation/1.1/portalmenu.html ../pages/documentation/1.1/prereq.html ../pages/documentation/1.1/prereq.html ../pages/documentation/1.1/rbac.html ../pages/documentation/1.1/rbac.html ../pages/documentation/1.1/redirections.html ../pages/documentation/1.1/redirections.html ../pages/documentation/1.1/resetpassword.html ../pages/documentation/1.1/resetpassword.html ../pages/documentation/1.1/safejail.html ../pages/documentation/1.1/safejail.html ../pages/documentation/1.1/samlservice.html ../pages/documentation/1.1/samlservice.html ../pages/documentation/1.1/securetoken.html ../pages/documentation/1.1/securetoken.html ../pages/documentation/1.1/security.html ../pages/documentation/1.1/security.html ../pages/documentation/1.1/selfmadeapplication.html ../pages/documentation/1.1/selfmadeapplication.html ../pages/documentation/1.1/sessions.html ../pages/documentation/1.1/sessions.html ../pages/documentation/1.1/soapconfbackend.html ../pages/documentation/1.1/soapconfbackend.html ../pages/documentation/1.1/soapminihowto.html ../pages/documentation/1.1/soapminihowto.html ../pages/documentation/1.1/soapservices.html ../pages/documentation/1.1/soapservices.html ../pages/documentation/1.1/soapsessionbackend.html ../pages/documentation/1.1/soapsessionbackend.html ../pages/documentation/1.1/sqlconfbackend.html ../pages/documentation/1.1/sqlconfbackend.html ../pages/documentation/1.1/sqlsessionbackend.html ../pages/documentation/1.1/sqlsessionbackend.html ../pages/documentation/1.1/ssocookie.html ../pages/documentation/1.1/ssocookie.html ../pages/documentation/1.1/status.html ../pages/documentation/1.1/status.html ../pages/documentation/1.1/upgrade.html ../pages/documentation/1.1/upgrade.html ../pages/documentation/1.1/writingrulesand_headers.html ../pages/documentation/1.1/writingrulesand_headers.html ../pages/documentation/1.2/activedirectoryminihowto.html ../pages/documentation/1.2/activedirectoryminihowto.html ../pages/documentation/1.2/applications.html ../pages/documentation/1.2/applications.html ../pages/documentation/1.2/applications/authbasic.html ../pages/documentation/1.2/applications/authbasic.html ../pages/documentation/1.2/applications/bugzilla.html ../pages/documentation/1.2/applications/bugzilla.html ../pages/documentation/1.2/applications/django.html ../pages/documentation/1.2/applications/django.html ../pages/documentation/1.2/applications/drupal.html ../pages/documentation/1.2/applications/drupal.html ../pages/documentation/1.2/applications/googleapps.html ../pages/documentation/1.2/applications/googleapps.html ../pages/documentation/1.2/applications/liferay.html ../pages/documentation/1.2/applications/liferay.html ../pages/documentation/1.2/applications/limesurvey.html ../pages/documentation/1.2/applications/limesurvey.html ../pages/documentation/1.2/applications/mediawiki.html ../pages/documentation/1.2/applications/mediawiki.html ../pages/documentation/1.2/applications/obm.html ../pages/documentation/1.2/applications/obm.html ../pages/documentation/1.2/applications/phpldapadmin.html ../pages/documentation/1.2/applications/phpldapadmin.html ../pages/documentation/1.2/applications/spring.html ../pages/documentation/1.2/applications/spring.html ../pages/documentation/1.2/applications/sympa.html ../pages/documentation/1.2/applications/sympa.html ../pages/documentation/1.2/applications/tomcat.html ../pages/documentation/1.2/applications/tomcat.html ../pages/documentation/1.2/applications/zimbra.html ../pages/documentation/1.2/applications/zimbra.html ../pages/documentation/1.2/authapache.html ../pages/documentation/1.2/authapache.html ../pages/documentation/1.2/authcas.html ../pages/documentation/1.2/authcas.html ../pages/documentation/1.2/authchoice.html ../pages/documentation/1.2/authchoice.html ../pages/documentation/1.2/authdbi.html ../pages/documentation/1.2/authdbi.html ../pages/documentation/1.2/authdemo.html ../pages/documentation/1.2/authdemo.html ../pages/documentation/1.2/authldap.html ../pages/documentation/1.2/authldap.html ../pages/documentation/1.2/authmulti.html ../pages/documentation/1.2/authmulti.html ../pages/documentation/1.2/authnull.html ../pages/documentation/1.2/authnull.html ../pages/documentation/1.2/authopenid.html ../pages/documentation/1.2/authopenid.html ../pages/documentation/1.2/authproxy.html ../pages/documentation/1.2/authproxy.html ../pages/documentation/1.2/authradius.html ../pages/documentation/1.2/authradius.html ../pages/documentation/1.2/authremote.html ../pages/documentation/1.2/authremote.html ../pages/documentation/1.2/authsaml.html ../pages/documentation/1.2/authsaml.html ../pages/documentation/1.2/authslave.html ../pages/documentation/1.2/authslave.html ../pages/documentation/1.2/authssl.html ../pages/documentation/1.2/authssl.html ../pages/documentation/1.2/authtwitter.html ../pages/documentation/1.2/authtwitter.html ../pages/documentation/1.2/authyubikey.html ../pages/documentation/1.2/authyubikey.html ../pages/documentation/1.2/browseablesessionbackend.html ../pages/documentation/1.2/browseablesessionbackend.html ../pages/documentation/1.2/cda.html ../pages/documentation/1.2/cda.html ../pages/documentation/1.2/changeconfbackend.html ../pages/documentation/1.2/changeconfbackend.html ../pages/documentation/1.2/configlocation.html ../pages/documentation/1.2/configlocation.html ../pages/documentation/1.2/configvhost.html ../pages/documentation/1.2/configvhost.html ../pages/documentation/1.2/customfunctions.html ../pages/documentation/1.2/customfunctions.html ../pages/documentation/1.2/error.html ../pages/documentation/1.2/error.html ../pages/documentation/1.2/exportedvars.html ../pages/documentation/1.2/exportedvars.html ../pages/documentation/1.2/extendedfunctions.html ../pages/documentation/1.2/extendedfunctions.html ../pages/documentation/1.2/federationproxy.html ../pages/documentation/1.2/federationproxy.html ../pages/documentation/1.2/fileconfbackend.html ../pages/documentation/1.2/fileconfbackend.html ../pages/documentation/1.2/filesessionbackend.html ../pages/documentation/1.2/filesessionbackend.html ../pages/documentation/1.2/formreplay.html ../pages/documentation/1.2/formreplay.html ../pages/documentation/1.2/header_remote_user_conversion.html ../pages/documentation/1.2/header_remote_user_conversion.html ../pages/documentation/1.2/highavailability.html ../pages/documentation/1.2/highavailability.html ../pages/documentation/1.2/idpcas.html ../pages/documentation/1.2/idpcas.html ../pages/documentation/1.2/idpopenid.html ../pages/documentation/1.2/idpopenid.html ../pages/documentation/1.2/idpsaml.html ../pages/documentation/1.2/idpsaml.html ../pages/documentation/1.2/installdeb.html ../pages/documentation/1.2/installdeb.html ../pages/documentation/1.2/installrpm.html ../pages/documentation/1.2/installrpm.html ../pages/documentation/1.2/installtarball.html ../pages/documentation/1.2/installtarball.html ../pages/documentation/1.2/internalproxy.html ../pages/documentation/1.2/internalproxy.html ../pages/documentation/1.2/ldapconfbackend.html ../pages/documentation/1.2/ldapconfbackend.html ../pages/documentation/1.2/ldapminihowto.html ../pages/documentation/1.2/ldapminihowto.html ../pages/documentation/1.2/ldapsessionbackend.html ../pages/documentation/1.2/ldapsessionbackend.html ../pages/documentation/1.2/loginhistory.html ../pages/documentation/1.2/loginhistory.html ../pages/documentation/1.2/logoutforward.html ../pages/documentation/1.2/logoutforward.html ../pages/documentation/1.2/logs.html ../pages/documentation/1.2/logs.html ../pages/documentation/1.2/managerprotection.html ../pages/documentation/1.2/managerprotection.html ../pages/documentation/1.2/memcachedsessionbackend.html ../pages/documentation/1.2/memcachedsessionbackend.html ../pages/documentation/1.2/mrtg.html ../pages/documentation/1.2/mrtg.html ../pages/documentation/1.2/mysqlminihowto.html ../pages/documentation/1.2/mysqlminihowto.html ../pages/documentation/1.2/nosqlsessionbackend.html ../pages/documentation/1.2/nosqlsessionbackend.html ../pages/documentation/1.2/notifications.html ../pages/documentation/1.2/notifications.html ../pages/documentation/1.2/parameterlist.html ../pages/documentation/1.2/parameterlist.html ../pages/documentation/1.2/passwordstore.html ../pages/documentation/1.2/passwordstore.html ../pages/documentation/1.2/performances.html ../pages/documentation/1.2/performances.html ../pages/documentation/1.2/portal.html ../pages/documentation/1.2/portal.html ../pages/documentation/1.2/portalcustom.html ../pages/documentation/1.2/portalcustom.html ../pages/documentation/1.2/portalmenu.html ../pages/documentation/1.2/portalmenu.html ../pages/documentation/1.2/prereq.html ../pages/documentation/1.2/prereq.html ../pages/documentation/1.2/rbac.html ../pages/documentation/1.2/rbac.html ../pages/documentation/1.2/redirections.html ../pages/documentation/1.2/redirections.html ../pages/documentation/1.2/resetpassword.html ../pages/documentation/1.2/resetpassword.html ../pages/documentation/1.2/safejail.html ../pages/documentation/1.2/safejail.html ../pages/documentation/1.2/samlservice.html ../pages/documentation/1.2/samlservice.html ../pages/documentation/1.2/securetoken.html ../pages/documentation/1.2/securetoken.html ../pages/documentation/1.2/security.html ../pages/documentation/1.2/security.html ../pages/documentation/1.2/selfmadeapplication.html ../pages/documentation/1.2/selfmadeapplication.html ../pages/documentation/1.2/sessions.html ../pages/documentation/1.2/sessions.html ../pages/documentation/1.2/soapconfbackend.html ../pages/documentation/1.2/soapconfbackend.html ../pages/documentation/1.2/soapminihowto.html ../pages/documentation/1.2/soapminihowto.html ../pages/documentation/1.2/soapservices.html ../pages/documentation/1.2/soapservices.html ../pages/documentation/1.2/soapsessionbackend.html ../pages/documentation/1.2/soapsessionbackend.html ../pages/documentation/1.2/sqlconfbackend.html ../pages/documentation/1.2/sqlconfbackend.html ../pages/documentation/1.2/sqlsessionbackend.html ../pages/documentation/1.2/sqlsessionbackend.html ../pages/documentation/1.2/ssocookie.html ../pages/documentation/1.2/ssocookie.html ../pages/documentation/1.2/status.html ../pages/documentation/1.2/status.html ../pages/documentation/1.2/upgrade.html ../pages/documentation/1.2/upgrade.html ../pages/documentation/1.2/writingrulesand_headers.html ../pages/documentation/1.2/writingrulesand_headers.html ../pages/documentation/1.3/applications/django.html ../pages/documentation/1.3/applications/django.html ../pages/documentation/1.3/authad.html ../pages/documentation/1.3/authad.html ../pages/documentation/1.3/authbrowserid.html ../pages/documentation/1.3/authbrowserid.html ../pages/documentation/1.3/authdemo.html ../pages/documentation/1.3/authdemo.html ../pages/documentation/1.3/authfacebook.html ../pages/documentation/1.3/authfacebook.html ../pages/documentation/1.3/authgoogle.html ../pages/documentation/1.3/authgoogle.html ../pages/documentation/1.3/authradius.html ../pages/documentation/1.3/authradius.html ../pages/documentation/1.3/authwebid.html ../pages/documentation/1.3/authwebid.html ../pages/documentation/1.3/fastcgi.html ../pages/documentation/1.3/fastcgi.html ../pages/documentation/1.3/handlerauthbasic.html ../pages/documentation/1.3/handlerauthbasic.html ../pages/documentation/1.3/internalproxy.html ../pages/documentation/1.3/internalproxy.html ../pages/documentation/1.3/loginhistory.html ../pages/documentation/1.3/loginhistory.html ../pages/documentation/1.3/variables.html ../pages/documentation/1.3/variables.html ../pages/documentation/1.4/applications/django.html ../pages/documentation/1.4/applications/django.html ../pages/documentation/1.4/authad.html ../pages/documentation/1.4/authad.html ../pages/documentation/1.4/authbrowserid.html ../pages/documentation/1.4/authbrowserid.html ../pages/documentation/1.4/authdemo.html ../pages/documentation/1.4/authdemo.html ../pages/documentation/1.4/authfacebook.html ../pages/documentation/1.4/authfacebook.html ../pages/documentation/1.4/authgoogle.html ../pages/documentation/1.4/authgoogle.html ../pages/documentation/1.4/authradius.html ../pages/documentation/1.4/authradius.html ../pages/documentation/1.4/authwebid.html ../pages/documentation/1.4/authwebid.html ../pages/documentation/1.4/fastcgi.html ../pages/documentation/1.4/fastcgi.html ../pages/documentation/1.4/handlerauthbasic.html ../pages/documentation/1.4/handlerauthbasic.html ../pages/documentation/1.4/internalproxy.html ../pages/documentation/1.4/internalproxy.html ../pages/documentation/1.4/jsonfileconfbackend.html ../pages/documentation/1.4/jsonfileconfbackend.html ../pages/documentation/1.4/loginhistory.html ../pages/documentation/1.4/loginhistory.html ../pages/documentation/1.4/variables.html ../pages/documentation/1.4/variables.html ../pages/documentation/conferences.html ../pages/documentation/conferences.html ../pages/documentation/features.html ../pages/documentation/features.html ../pages/documentation/presentation.html ../pages/documentation/presentation.html ../pages/documentation/quickstart.html ../pages/documentation/quickstart.html ../pages/download.html ../pages/download.html ../pages/menu1.html ../pages/menu1.html ../pages/playground/playground.html ../pages/playground/playground.html ../pages/press.html ../pages/press.html ../pages/references.html ../pages/references.html ../pages/screenshots.html ../pages/screenshots.html ../pages/start.html ../pages/start.html ../pages/translations.html ../pages/translations.html ../pages/wiki/dokuwiki.html ../pages/wiki/dokuwiki.html ../pages/wiki/syntax.html ../pages/wiki/syntax.html .example.com = EXAMPLE.COM .example.com = EXAMPLE.COM /_detail/applications/bugzilla_logo.png?id=documentation%3A1.0%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.0%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.2%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.2%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.3%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.3%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.0%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.0%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.2%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.2%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.3%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.3%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki /_detail/applications/drupal_logo.png?id=documentation%3A1.0%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.0%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.2%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.2%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.3%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.3%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal /_detail/applications/googleapps_logo.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/applications/http_logo.png?id=documentation%3A1.0%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.0%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.2%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.2%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.3%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.3%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic /_detail/applications/liferay_logo.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/applications/limesurvey_logo.png?id=documentation%3A1.2%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.2%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.3%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.3%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey /_detail/applications/mediawiki_logo.png?id=documentation%3A1.0%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.0%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.2%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.2%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.3%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.3%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki /_detail/applications/obm_logo.png?id=documentation%3A1.0%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.0%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.2%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.2%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.3%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.3%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.0%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.0%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.2%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.2%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.3%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.3%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin /_detail/applications/spring_logo.png?id=documentation%3A1.0%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.0%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.2%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.2%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.3%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.3%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring /_detail/applications/sympa_logo.png?id=documentation%3A1.0%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.0%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.2%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.2%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.3%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.3%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa /_detail/applications/tomcat_logo.png?id=documentation%3A1.0%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.0%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.2%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.2%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.3%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.3%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat /_detail/applications/zimbra_logo.png?id=documentation%3A1.0%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.0%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.2%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.2%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.3%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.3%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra /_detail/documentation/configuration-ldap.png?id=documentation%3A1.2%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.2%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.3%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.3%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.2%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.2%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.3%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.3%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac /_detail/documentation/exportedvars.png?id=documentation%3A1.0%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.0%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.2%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.2%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.3%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.3%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.0%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.2%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.3%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/ha-apache.png?id=documentation%3A1.2%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.2%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.3%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.3%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.2%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.2%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.3%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.3%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/lasso.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.2%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.2%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.3%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.3%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation /_detail/documentation/liferay_1.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.0%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.2%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.3%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/manager-authchoice.png?id=documentation%3A1.0%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.0%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.2%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.2%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.3%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.3%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.0%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.0%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.2%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.2%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.3%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.3%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.0%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.0%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.2%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.2%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.3%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.3%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.2%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.2%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.3%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.3%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.2%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.2%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.3%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.3%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-portalskin.png?id=documentation%3A1.2%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.2%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.3%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.3%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.0%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.2%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.3%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.0%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.2%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.3%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.2%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.2%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.3%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.3%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml /_detail/documentation/manager_access_rule.png?id=documentation%3A1.2%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.2%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.2%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.2%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.3%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.3%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.3%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.3%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers /_detail/documentation/remote-interoperability.png?id=documentation%3A1.0%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.0%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.2%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.2%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.3%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.3%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.0%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.0%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.2%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.2%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.3%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.3%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/status_standard.png?id=documentation%3A1.2%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.2%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.3%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.3%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus /_detail/icons/access.png?id=documentation%3A1.2%3Astart /_detail/icons/access.png?id=documentation%3A1.2%3Astart /_detail/icons/access.png?id=documentation%3A1.3%3Astart /_detail/icons/access.png?id=documentation%3A1.3%3Astart /_detail/icons/access.png?id=documentation%3A1.4%3Astart /_detail/icons/access.png?id=documentation%3A1.4%3Astart /_detail/icons/access.png?id=start /_detail/icons/access.png?id=start /_detail/icons/agt_web.png?id=start /_detail/icons/agt_web.png?id=start /_detail/icons/bug.png?id=contact /_detail/icons/bug.png?id=contact /_detail/icons/chat.png?id=contact /_detail/icons/chat.png?id=contact /_detail/icons/clock.png?id=start /_detail/icons/clock.png?id=start /_detail/icons/colors.png?id=documentation%3A1.2%3Astart /_detail/icons/colors.png?id=documentation%3A1.2%3Astart /_detail/icons/colors.png?id=documentation%3A1.3%3Astart /_detail/icons/colors.png?id=documentation%3A1.3%3Astart /_detail/icons/colors.png?id=documentation%3A1.4%3Astart /_detail/icons/colors.png?id=documentation%3A1.4%3Astart /_detail/icons/database.png?id=start /_detail/icons/database.png?id=start /_detail/icons/flags/de.png?id=press /_detail/icons/flags/de.png?id=press /_detail/icons/flags/fr.png?id=documentation%3Aconferences /_detail/icons/flags/fr.png?id=documentation%3Aconferences /_detail/icons/flags/fr.png?id=press /_detail/icons/flags/fr.png?id=press /_detail/icons/flags/ua.png?id=press /_detail/icons/flags/ua.png?id=press /_detail/icons/flags/us.png?id=documentation%3Aconferences /_detail/icons/flags/us.png?id=documentation%3Aconferences /_detail/icons/flags/us.png?id=press /_detail/icons/flags/us.png?id=press /_detail/icons/gpg.png?id=documentation%3A1.2%3Astart /_detail/icons/gpg.png?id=documentation%3A1.2%3Astart /_detail/icons/gpg.png?id=documentation%3A1.3%3Astart /_detail/icons/gpg.png?id=documentation%3A1.3%3Astart /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart /_detail/icons/gpg.png?id=start /_detail/icons/gpg.png?id=start /_detail/icons/jabber_protocol.png?id=documentation%3A1.2%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.2%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.3%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.3%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart /_detail/icons/kmenuedit.png?id=start /_detail/icons/kmenuedit.png?id=start /_detail/icons/kmultiple.png?id=documentation%3A1.2%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.2%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.3%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.3%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart /_detail/icons/knewsticker.png?id=contact /_detail/icons/knewsticker.png?id=contact /_detail/icons/lists.png?id=documentation%3A1.2%3Astart /_detail/icons/lists.png?id=documentation%3A1.2%3Astart /_detail/icons/lists.png?id=documentation%3A1.3%3Astart /_detail/icons/lists.png?id=documentation%3A1.3%3Astart /_detail/icons/lists.png?id=documentation%3A1.4%3Astart /_detail/icons/lists.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=documentation%3A1.2%3Astart /_detail/icons/neotux.png?id=documentation%3A1.2%3Astart /_detail/icons/neotux.png?id=documentation%3A1.3%3Astart /_detail/icons/neotux.png?id=documentation%3A1.3%3Astart /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=start /_detail/icons/neotux.png?id=start /_detail/icons/personal.png?id=contact /_detail/icons/personal.png?id=contact /_detail/icons/personal.png?id=documentation%3A1.2%3Astart /_detail/icons/personal.png?id=documentation%3A1.2%3Astart /_detail/icons/personal.png?id=documentation%3A1.3%3Astart /_detail/icons/personal.png?id=documentation%3A1.3%3Astart /_detail/icons/personal.png?id=documentation%3A1.4%3Astart /_detail/icons/personal.png?id=documentation%3A1.4%3Astart /_detail/icons/personal.png?id=start /_detail/icons/personal.png?id=start /_detail/icons/softwared.png?id=start /_detail/icons/softwared.png?id=start /_detail/icons/terminal.png?id=documentation /_detail/icons/terminal.png?id=documentation /_detail/icons/tutorials.png?id=documentation /_detail/icons/tutorials.png?id=documentation /_detail/icons/tux.png?id=contact /_detail/icons/tux.png?id=contact /_detail/icons/utilities.png?id=documentation%3A1.2%3Astart /_detail/icons/utilities.png?id=documentation%3A1.2%3Astart /_detail/icons/utilities.png?id=documentation%3A1.3%3Astart /_detail/icons/utilities.png?id=documentation%3A1.3%3Astart /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart /_detail/icons/utilities.png?id=start /_detail/icons/utilities.png?id=start /_detail/icons/warehause.png?id=documentation%3A1.2%3Astart /_detail/icons/warehause.png?id=documentation%3A1.2%3Astart /_detail/icons/warehause.png?id=documentation%3A1.3%3Astart /_detail/icons/warehause.png?id=documentation%3A1.3%3Astart /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart /_detail/icons/windowlist.png?id=documentation /_detail/icons/windowlist.png?id=documentation /_detail/icons/wizard.png?id=documentation /_detail/icons/wizard.png?id=documentation /_detail/icons/xeyes.png?id=documentation%3A1.2%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.2%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.3%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.3%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart /_detail/icons/xfmail.png?id=contact /_detail/icons/xfmail.png?id=contact /_detail/logos/logo-ul.png?id=references /_detail/logos/logo-ul.png?id=references /_detail/logos/logo_abuledu.png?id=references /_detail/logos/logo_abuledu.png?id=references /_detail/logos/logo_bpi.png?id=references /_detail/logos/logo_bpi.png?id=references /_detail/logos/logo_gn.png?id=references /_detail/logos/logo_gn.png?id=references /_detail/logos/logo_linagora.png?id=references /_detail/logos/logo_linagora.png?id=references /_detail/logos/logo_ministere_justice.jpg?id=references /_detail/logos/logo_ministere_justice.jpg?id=references /_detail/logos/logo_rbn.png?id=references /_detail/logos/logo_rbn.png?id=references /_detail/logos/logo_ucanss.png?id=references /_detail/logos/logo_ucanss.png?id=references /_detail/logos/sgs_white_small.jpg?id=references /_detail/logos/sgs_white_small.jpg?id=references /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots /_detail/screenshots/1.0/dark/menu.png?id=screenshots /_detail/screenshots/1.0/dark/menu.png?id=screenshots /_detail/screenshots/1.0/dark/password.png?id=screenshots /_detail/screenshots/1.0/dark/password.png?id=screenshots /_detail/screenshots/1.0/dark/portal.png?id=screenshots /_detail/screenshots/1.0/dark/portal.png?id=screenshots /_detail/screenshots/1.0/impact/menu.png?id=screenshots /_detail/screenshots/1.0/impact/menu.png?id=screenshots /_detail/screenshots/1.0/impact/password.png?id=screenshots /_detail/screenshots/1.0/impact/password.png?id=screenshots /_detail/screenshots/1.0/impact/portal.png?id=screenshots /_detail/screenshots/1.0/impact/portal.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots /_detail/screenshots/1.0/pastel/menu.png?id=screenshots /_detail/screenshots/1.0/pastel/menu.png?id=screenshots /_detail/screenshots/1.0/pastel/password.png?id=screenshots /_detail/screenshots/1.0/pastel/password.png?id=screenshots /_detail/screenshots/1.0/pastel/portal.png?id=screenshots /_detail/screenshots/1.0/pastel/portal.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.2%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.3%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.2%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.2%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.3%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.3%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.2%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.2%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.3%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.3%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots /_detail/screenshots/rbn/rbn-applis.png?id=references /_detail/screenshots/rbn/rbn-applis.png?id=references /_detail/screenshots/rbn/rbn-portal.png?id=references /_detail/screenshots/rbn/rbn-portal.png?id=references /index.php?Access=admin /index.php?Access=admin /index.php?access=admin&access=other /index.php?access=admin&access=other /lib/images/smileys/fixme.gif /lib/images/smileys/fixme.gif /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help /usr/share/lemonldap-ng/bin/lmConfigEditor /usr/share/lemonldap-ng/bin/lmConfigEditor /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock /var/lib/lemonldap-ng/sessions/lock 0 0 0 if not 0 sinon 0.9.3 0.9.3 0.9.4 0.9.4 0.9.4_application_menu.png 0.9.4_application_menu.png 0.9.4_authentication_portal.png 0.9.4_authentication_portal.png 0.9.4_logout_menu.png 0.9.4_logout_menu.png 0.9.4_password_menu.png 0.9.4_password_menu.png 0.9.4_password_reset.png 0.9.4_password_reset.png 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 0; URL=../../ 0; URL=../../ 0_bad 0_bad 1 1 1 if user is admin 1 si l'utilisateur est administrateur 1 if user is authorizated to access to it 1 si l'utilisateur est autorisé à y accéder 1 if user is superadmin 1 si l'utilisateur est super-administrateur 1.0 1.0 1.0 and 1.1 1.0 et 1.1 1.1 1.1 1.2 1.2 10.0.0.1:20000 10.0.0.2:20000 10.0.0.1:20000 10.0.0.2:20000 105.000 105.000 127.0.0.1:6379 127.0.0.1:6379 1800+ 1800+ 1_admin 1_admin 1f777a6581e478499f4284e54fe2d4a4e513dfff 1f777a6581e478499f4284e54fe2d4a4e513dfff 2 2 2 kind of files may be translated: 2 types de fichiers peuvent être traduits : 20 20 2009 2009 20090301000000Z 20090301000000Z 2010 2010 2011 2011 2012 2012 22 22 2_pub 2_pub 31 31 6 avril 2012: <a0>Configurer LemonLDAP::NG comme serveur CAS</a0> 6 avril 2012 : <a0>Configurer LemonLDAP::NG comme serveur CAS</a0> </<s10>Directory</s10>>   </<s10>Directory</s10>>   </<s11>Directory</s11>>   </<s11>Directory</s11>>   </<s12>IfModule</s12>>   </<s12>IfModule</s12>>   </<s12>Location</s12>>   </<s12>Location</s12>>   </<s15>Directory</s15>> </<s15>Directory</s15>> </<s15>Files</s15>>   </<s15>Files</s15>>   </<s15>Location</s15>>   </<s15>Location</s15>>   </<s17>IfModule</s17>>   </<s17>IfModule</s17>>   </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> </<s18>IfModule</s18>> </<s18>IfModule</s18>> </<s19>IfModule</s19>> </<s19>IfModule</s19>> </<s19>Location</s19>> </<s20>VirtualHost</s20>> </<s19>Location</s19>> </<s20>VirtualHost</s20>> </<s20>Location</s20>>   </<s21>VirtualHost</s21>> </<s20>Location</s20>>   </<s21>VirtualHost</s21>> </<s23>Location</s23>>   </<s23>Location</s23>>   </<s31>Location</s31>> </<s31>Location</s31>> </<s3>Location</s3>>   </<s3>Location</s3>>   </<s4>IfModule</s4>> </<s4>IfModule</s4>> </<s6>IfModule</s6>>   </<s6>IfModule</s6>>   </<s6>Location</s6>> </<s6>Location</s6>> </<s7>Directory</s7>> </<s7>Directory</s7>> </<s7>Location</s7>>   </<s7>Location</s7>>   </<s8>Directory</s8>> </<s8>Directory</s8>> </<s9>Directory</s9>> </<s9>Directory</s9>> </<s9>Location</s9>>   </<s10>VirtualHost</s10>> </<s9>Location</s9>>   </<s10>VirtualHost</s10>> <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> <<s0>Files</s0> *.pl> <<s0>Files</s0> *.pl> <<s0>IfModule</s0> mod_rewrite.c> <<s0>IfModule</s0> mod_rewrite.c> <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> <<s0>VirtualHost</s0> *:443> <<s0>VirtualHost</s0> *:443> <<s0>VirtualHost</s0> *:80> <<s0>VirtualHost</s0> *:80> <<s0>VirtualHost</s0> *> <<s0>VirtualHost</s0> *> <<s0>VirtualHost</s0>> <<s0>VirtualHost</s0>> <<s10>IfModule</s10> auth_kerb_module> <<s10>IfModule</s10> auth_kerb_module> <<s12>Files</s12> *.pl> <<s12>Files</s12> *.pl> <<s13>Location</s13> /kerberos.pl> <<s13>Location</s13> /kerberos.pl> <<s14>IfModule</s14> auth_kerb_module> <<s14>IfModule</s14> auth_kerb_module> <<s14>IfModule</s14> mod_rewrite.c> <<s14>IfModule</s14> mod_rewrite.c> <<s17>IfModule</s17> mod_dir.c> <<s17>IfModule</s17> mod_dir.c> <<s17>Location</s17> /index.pl/config> <<s17>Location</s17> /index.pl/config> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> <<s1>IfModule</s1> mod_rewrite.c> <<s1>IfModule</s1> mod_rewrite.c> <<s1>Location</s1> /index.pl/adminSessions> <<s1>Location</s1> /index.pl/adminSessions> <<s1>Location</s1> /status> <<s1>Location</s1> /status> <<s25>Location</s25> /index.pl/notification> <<s25>Location</s25> /index.pl/notification> <<s2>Location</s2> /reload> <<s2>Location</s2> /reload> <<s2>Location</s2> /wws/sso_login/lemonldapng> <<s2>Location</s2> /wws/sso_login/lemonldapng> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <<s5>Location</s5> /> <<s5>Location</s5> /> <<s5>Location</s5> /reload> <<s5>Location</s5> /reload> <<s8>IfModule</s8> mod_rewrite.c> <<s8>IfModule</s8> mod_rewrite.c> <<s9>Location</s9> /index.pl/sessions> <<s9>Location</s9> /index.pl/sessions> <Perl> <Perl> <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> <a9>J</a9> K <a10>L</a10> <a11>M</a11> <a12>N</a12> <a13>O</a13> <a14>P</a14> <a15>Q</a15> <a16>R</a16> <a17>S</a17> <a18>T</a18> <a19>U</a19> <a20>V</a20> <a21>W</a21> X Y <a22>Z</a22> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> <a9>J</a9> K <a10>L</a10> <a11>M</a11> <a12>N</a12> <a13>O</a13> <a14>P</a14> <a15>Q</a15> <a16>R</a16> <a17>S</a17> <a18>T</a18> <a19>U</a19> <a20>V</a20> <a21>W</a21> X Y <a22>Z</a22> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> J K <a9>L</a9> <a10>M</a10> <a11>N</a11> <a12>O</a12> <a13>P</a13> <a14>Q</a14> <a15>R</a15> <a16>S</a16> <a17>T</a17> <a18>U</a18> <a19>V</a19> <a20>W</a20> X Y <a21>Z</a21> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> J K <a9>L</a9> <a10>M</a10> <a11>N</a11> <a12>O</a12> <a13>P</a13> <a14>Q</a14> <a15>R</a15> <a16>S</a16> <a17>T</a17> <a18>U</a18> <a19>V</a19> <a20>W</a20> X Y <a21>Z</a21> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> J K <a9>L</a9> <a10>M</a10> <a11>N</a11> <a12>O</a12> <a13>P</a13> <a14>Q</a14> <a15>R</a15> <a16>S</a16> <a17>T</a17> <a18>U</a18> V <a19>W</a19> X Y <a20>Z</a20> <a0>A</a0> <a1>B</a1> <a2>C</a2> <a3>D</a3> <a4>E</a4> <a5>F</a5> <a6>G</a6> <a7>H</a7> <a8>I</a8> J K <a9>L</a9> <a10>M</a10> <a11>N</a11> <a12>O</a12> <a13>P</a13> <a14>Q</a14> <a15>R</a15> <a16>S</a16> <a17>T</a17> <a18>U</a18> V <a19>W</a19> X Y <a20>Z</a20> <a0>Add "eval" to avoid problems when other datas are stored ...</a0> by guimard (2010/12/09 21:18) <a0>Add "eval" to avoid problems when other datas are stored ...</a0> by guimard (2010/12/09 21:18) <a0>Apache Tomcat</a0> is an open source software implementation of the Java Servlet and JavaServer Pages technologies. <a0>Apache Tomcat</a0> est une implémentation libre des technologies Java Servlet et JavaServer Pages. <a0>Apache::Session::Browseable</a0> is a wrapper for other Apache::Session modules that add the capability to manage indexes. <a0>Apache::Session::Browseable</a0> est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. <a0>Apache::Session::Redis</a0> is the faster shareable session backend <a0>Apache::Session::Redis</a0> est le module de stockage des sessions en réseau le plus rapide <a0>Authentication</a0>: how check user credentials <a0>Authentification</a0> : comment examiner les données utilisateur d'authentification <a0>Bugzilla</a0> is server software designed to help you manage software development. <a0>Bugzilla</a0> est un logiciel serveur conçu pour assister la gestion de développement logiciel. <a0>CAS</a0> <a1>PGT</a1> temporary file Fichier temporaire <a1>PGT</a1> de <a0>CAS</a0> <a0>CAS</a0> CA file Fichier d'AC de <a0>CAS</a0> <a0>CAS</a0> Session backend Module de stockage <a0>CAS</a0> <a0>CAS</a0> Session backend options Options du module de stockage <a0>CAS</a0> <a0>CAS</a0> access control policy Politique de contrôle d'accès <a0>CAS</a0> <a0>CAS</a0> attribute for login Attribut <a0>CAS</a0> pour le nom de connexion <a0>CAS</a0> authentication level Niveau d'authentification <a0>CAS</a0> <a0>CAS</a0> authentication will automatically add a <a1>logout forward rule</a1> on <a2>CAS</a2> server logout <a3>URL</a3> in order to close <a4>CAS</a4> session on <a5>LL::NG</a5> logout. L'authentification <a0>CAS</a0> ajoute automatiquement une <a1>règle de renvoi après déconnexion</a1> sur l'<a3>URL</a3> de déconnexion du serveur <a2>CAS</a2> afin de clore la session <a4>CAS</a4> lors de la déconnexion <a5>LL::NG</a5>. <a0>CAS</a0> force authentication renewal Forcer le renouvellement d'authentification <a0>CAS</a0> <a0>CAS</a0> force gateway authentication Forcer l'authentification de passerelle <a0>CAS</a0> <a0>CAS</a0> issuer Fourniture d'identité <a0>CAS</a0> <a0>CAS</a0> proxied services Services mandatés de <a0>CAS</a0> <a0>CAS</a0> server <a1>URL</a1> <a1>URL</a1> du serveur <a0>CAS</a0> <a0>CAS</a0>_CAFile <a0>CAS</a0>_CAFile <a0>CAS</a0>_authnLevel <a0>CAS</a0>_authnLevel <a0>CAS</a0>_gateway <a0>CAS</a0>_gateway <a0>CAS</a0>_pgtFile <a0>CAS</a0>_pgtFile <a0>CAS</a0>_proxiedServices <a0>CAS</a0>_proxiedServices <a0>CAS</a0>_renew <a0>CAS</a0>_renew <a0>CAS</a0>_url <a0>CAS</a0>_url <a0>CDA</a0> activation Activation du <a0>CDA</a0> <a0>CDA</a0> is set if the handler is not in the same domain Le <a0>CDA</a0> ne fonctionne que si l'agent n'est pas dans le même domaine <a0>CGI</a0>::Session <a0>CGI</a0>::Session <a0>Configure the Apache server</a0> that host the portal <a0>Configurer le serveur Apache</a0> qui héberge le portail <a0>Configure the Apache server</a0> that host the portal to use the Apache Kerberos authentication module <a0>Configurer le serveur Apache</a0> qui héberge le portail utilisant le module d'authentification Kerberos d'Apache <a0>Configuring the virtual hosts</a0> is not sufficient to display an application in the menu. <a0>Configurer les hôtes virtuels</a0> n'est pas suffisant pour afficher une application dans le menu. <a0>Cpan test error</a0> by guimard (2010/11/26 20:03) <a0>Cpan test error</a0> by guimard (2010/11/26 20:03) <a0>Create a protocol proxy</a0> <e1>(<a2>SAML</a2> to OpenID, <a3>CAS</a3> to <a4>SAML</a4> ,…)</e1> <a0>Créer un proxy de protocoles </a0> <e1>(<a2>SAML</a2> vers OpenID, <a3>CAS</a3> vers <a4>SAML</a4> ,…)</e1> <a0>DBI</a0> Authentication table Table d'authentification <a0>DBI</a0> <a0>DBI</a0> Connection chain Chaîne de connexion <a0>DBI</a0> <a0>DBI</a0> Connection password Mot-de-passe de connexion <a0>DBI</a0> <a0>DBI</a0> Connection user Nom de connexion <a0>DBI</a0> <a0>DBI</a0> Login column Colonne de nom de connexion <a0>DBI</a0> <a0>DBI</a0> Mail column Colonne mail <a0>DBI</a0> <a0>DBI</a0> Password column Colonne du mot-de-passe <a0>DBI</a0> <a0>DBI</a0> Password hash Hachage de mot-de-passe <a0>DBI</a0> <a0>DBI</a0> Pivot from user table Pivot <a0>DBI</a0> pour la table utilisateur <a0>DBI</a0> UserDB connection chain Chaîne de connexion UserDB <a0>DBI</a0> <a0>DBI</a0> UserDB connection password Mot-de-passe de connexion UserDB <a0>DBI</a0> <a0>DBI</a0> UserDB connection user Compte de connexion UserDB <a0>DBI</a0> <a0>DBI</a0> UserDB table Table UserDB <a0>DBI</a0> <a0>DBI</a0> authentication level Niveau d'authentification <a0>DBI</a0> <a0>DBI</a0> connection string Chaîne de connexion <a0>DBI</a0> <a0>DBI</a0> password Mot-de-passe <a0>DBI</a0> <a0>DBI</a0> table name Nom de table <a0>DBI</a0> <a0>DBI</a0> user Utilisateur <a0>DBI</a0> <a0>DN</a0> of sessions branch <a0>DN</a0> de la branche des sessions <a0>Debian fr.po is now maintained by debian-l10n-french team</a0> by guimard (2010/12/05 08:50) <a0>Debian fr.po is now maintained by debian-l10n-french team</a0> by guimard (2010/12/05 08:50) <a0>Debian po update</a0> by guimard (2010/12/05 08:45) <a0>Debian po update</a0> by guimard (2010/12/05 08:45) <a0>Debian translation update</a0> by guimard (2010/12/09 14:22) <a0>Debian translation update</a0> by guimard (2010/12/09 14:22) <a0>Django</a0> is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. <a0>Django</a0> est un framework web de haut niveau écrit en Python qui favorise le développement rapide et propre et un design pragmatique. <a0>Doc update</a0> by clement_oudot (2010/11/24 18:04) <a0>Mise à jour de la documentation</a0> par clement_oudot (2010/11/24 18:04) <a0>Doc update</a0> by clement_oudot (2010/11/25 17:28) <a0>Doc update</a0> by clement_oudot (2010/11/25 17:28) <a0>Doc update</a0> by clement_oudot (2010/11/26 10:11) <a0>Doc update</a0> by clement_oudot (2010/11/26 10:11) <a0>Doc update</a0> by guimard (2010/11/25 18:45) <a0>Doc update</a0> by guimard (2010/11/25 18:45) <a0>DokuWiki</a0> is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. <a0>DokuWiki</a0> est un wiki simple et standard principalement destiné à la création de documents de toute nature. <a0>Download the Lasso tarball</a0> and compile it on your system. <a0>Téléchargez l'archive Lasso</a0> et compilez là sur votre système. <a0>Download</a0> the plugin and copy the files in dokuwiki <c1>inc/auth/</c1> directory: <a0>Télécharger</a0> le plugin et le copier dans le répertoire dokuwiki <c1>inc/auth/</c1> : <a0>Drupal</a0> is a <a1>CMS</a1> written in <a2>PHP</a2>. <a0>Drupal</a0> est un <a1>CMS</a1> écrit en <a2>PHP</a2>. <a0>EPEL</a0> repository, you can activate this repository: <a1>http://fedoraproject.org/wiki/EPEL/FAQ#howtouse</a1> le dépôt <a0>EPEL</a0>, pour activer ce dépôt : <a1>http://fedoraproject.org/wiki/EPEL/FAQ#howtouse</a1> <a0>Facebook</a0> is a famous social network service. <a0>Facebook</a0> est un célèbre réseau social. <a0>Fr translation in progress</a0> by guimard (2010/12/09 05:46) <a0>Fr translation in progress</a0> by guimard (2010/12/09 05:46) <a0>Fr translation in progress</a0> by guimard (2010/12/12 06:43) <a0>Fr translation in progress</a0> by guimard (2010/12/12 06:43) <a0>Google Apps</a0> can use <a1>SAML</a1> to authenticate users, behaving as an <a2>SAML</a2> service provider, as explained <a3>here</a3>. <a0>Les applications Google</a0> peuvent utiliser <a1>SAML</a1> pour authentifier les utilisateurs, en se comportant comme des fournisseurs de service <a2>SAML</a2>, tel qu'expliqué <a3>ici</a3>. <a0>HTML</a0>::Template <a0>HTML</a0>::Template <a0>HTTP</a0> <a1>SOAP</a1> <a0>HTTP</a0> <a1>SOAP</a1> <a0>HTTP</a0> Artifact Artifact <a0>HTTP</a0> <a0>HTTP</a0> Auth-Basic <a0>HTTP</a0> Auth-Basic <a0>HTTP</a0> POST <a0>HTTP</a0> POST <a0>HTTP</a0> Redirect Redirection <a0>HTTP</a0> <a0>HTTP</a0> header (in all cases) un en-tête <a0>HTTP</a0> (dans tous les cas) <a0>HTTP</a0> headers: forge information sent to protected applications Des en-têtes <a0>HTTP</a0> : construit l'information à envoyer aux applications protégées <a0>IP</a0> of the user (can be the X Forwarded For <a1>IP</a1> if trusted proxies are configured) <a0>IP</a0> de l'utilisateur (peut être celle de l'en-tête X-Forwarded-For si des proxies agréés ont été configurés) <a0>Identity provider</a0>: how forward user identity <a0>Fournisseur d'identité</a0> : comment transférer l'identité <a0>Integrating applications</a0> in <a1>LL::NG</a1> is easy since its dialog with applications is based on <a2>customizable HTTP headers</a2>. <a0>Integrer des applications</a0> dans <a1>LL::NG</a1> est facile car leur dialogue est basé sur des <a2>en-têtes HTTP personnalisables</a2>. <a0>LDAP</a0> (including <a1>Active Directory)</a1> <a0>LDAP</a0> (y compris <a1>Active Directory)</a1> <a0>LDAP</a0> Bind <a1>DN</a1> <a1>DN</a1> de connexion <a0>LDAP</a0> <a0>LDAP</a0> Bind Password Mot-de-passe de connexion <a0>LDAP</a0> <a0>LDAP</a0> Port Port <a0>LDAP</a0> <a0>LDAP</a0> activate recursive groups Activer les groupes récursifs <a0>LDAP</a0> <a0>LDAP</a0> attribute Attribut <a0>LDAP</a0> <a0>LDAP</a0> attribute used in filter is not required if you do not use <a1>LDAP users database</a1>. L'attribut <a0>LDAP</a0> pour le filtre n'est pas nécessaire si la <a1>base de données utilisateur LDAP</a1> n'est pas utilisée. <a0>LDAP</a0> authentication level Niveau d'authentification <a0>LDAP</a0> <a0>LDAP</a0> authentication search filter Filtre de recherche <a0>LDAP</a0> pour l'authentification <a0>LDAP</a0> base Base <a0>LDAP</a0> <a0>LDAP</a0> binary attributes Attributs binaires <a0>LDAP</a0> <a0>LDAP</a0> bind dn Dn de connexion <a0>LDAP</a0> <a0>LDAP</a0> bind password Mot-de-passe de connexion <a0>LDAP</a0> <a0>LDAP</a0> change password as user Changement de mot-de-passe <a0>LDAP</a0> en tant qu'utilisateur <a0>LDAP</a0> extended SetPassword modify Active la modification étendue de mot-de-passe <a0>LDAP</a0> (SetPassword) <a0>LDAP</a0> group link attribute name Nom d'attribut de lien de groupe <a0>LDAP</a0> (récursivité) <a0>LDAP</a0> groups base Base des groupes <a0>LDAP</a0> <a0>LDAP</a0> groups member attribute Attribut de membre d'un groupe <a0>LDAP</a0> <a0>LDAP</a0> groups member link value Valeur de lien de membre de groupe <a0>LDAP</a0> <a0>LDAP</a0> groups name attribute Attribut de nom de groupes <a0>LDAP</a0> <a0>LDAP</a0> groups objectClass ObjectClass des groupes <a0>LDAP</a0> <a0>LDAP</a0> mail search filter Filtre de recherche <a0>LDAP</a0> pour le courriel <a0>LDAP</a0> main search filter Filtre de recherche <a0>LDAP</a0> principal <a0>LDAP</a0> modify password reset attribute Utiliser l'attribut de réinitialisation de mot-de-passe <a0>LDAP</a0> <a0>LDAP</a0> password encoding Encodage de mots-de-passe <a0>LDAP</a0> <a0>LDAP</a0> password policy control Activation du contrôle de conformité à la politique <a0>LDAP</a0> <a0>LDAP</a0> password reset attribute name Nom de l'attribut de réinitialisation de mot-de-passe <a0>LDAP</a0> <a0>LDAP</a0> password reset attribute true value Valeur positive de l'attribut de réinitialisation de mot-de-passe <a0>LDAP</a0> <a0>LDAP</a0> port Port <a0>LDAP</a0> <a0>LDAP</a0> search base Base de recherche <a0>LDAP</a0> <a0>LDAP</a0> server Serveur <a0>LDAP</a0> <a0>LDAP</a0> server can be a brake when you use <a1>LDAP</a1> groups recovery. Le serveur <a0>LDAP</a0> peut être un frein lorsque vous utilisez la récupération des groupes <a1>LDAP</a1>. <a0>LDAP</a0> server can check password strength, and <a1>LL::NG</a1> portal will display correct errors (password too short, password in history, etc.) Le serveur <a0>LDAP</a0> peut mesurer la solidité du mot-de-passe et le portail <a1>LL::NG</a1> affichera les erreurs à corriger (mot-de-passe trop court, déjà dans l'historique, etc...) <a0>LDAP</a0> server can force password change on first connection, and <a1>LL::NG</a1> portal will display a password change form before opening <a2>SSO</a2> session Le serveur <a0>LDAP</a0> peut imposer le changement de mot-de-passe à la première connexion et le portail <a1>LL::NG</a1> affichera le formulaire de changement de mot-de-passe avant d'ouvrir la session <a2>SSO</a2> <a0>LDAP</a0> server or Net::<a1>LDAP</a1> connexion string Serveur <a0>LDAP</a0> ou chaîne de connexion Net::<a1>LDAP</a1> <a0>LDAP</a0> sever can block brute-force attacks, and <a1>LL::NG</a1> will display that account is locked Le serveur <a0>LDAP</a0> peut bloquer les attaques par force brute et <a1>LL::NG</a1> affichera que le compte est bloqué <a0>LDAP</a0> timeout Délai de connexion maximal <a0>LDAP</a0> <a0>LDAP</a0> v2 and v3 protocol support Support des protocoles <a0>LDAP</a0> v2 et v3 <a0>LDAP</a0> version Version <a0>LDAP</a0> <a0>LL::NG</a0> CGIs <e1>(Portal, Manager,…)</e1> can be used under a <a2>Fast CGI system</a2> very easily. Les CGI de <a0>LL::NG</a0> <e1>(portail, manager,…)</e1> peuvent être utilisées facilement dans un environnement <a2>Fast CGI</a2> very easily. <a0>LL::NG</a0> CGIs <e1>(Portal, Manager,…)</e1> can be used under a <a2>FastCGI system</a2> very easily. Les CGI de <a0>LL::NG</a0> <e1>(portail, manager,…)</e1> peuvent être utilisées facilement dans un environnement <a2>Fast CGI</a2>. <a0>LL::NG</a0> Manager has a session explorer module that can be used to browse opened sessions: Le gestionnaire de <a0>LL::NG</a0> dispose d'un explorateur de sessions qui peut être utilisé pour parcourir sessions ouvertes : <a0>LL::NG</a0> Null backend is a transparent backend: Le backend Null de <a0>LL::NG</a0> est un backend transparent : <a0>LL::NG</a0> Slave backend relies on <a1>HTTP</a1> headers to retrieve user login and/or attributes. Le backend Slave de <a0>LL::NG</a0> utilise les en-têtes <a1>HTTP</a1> pour récupérer le nom d'utilisateur et/ou les attributs. <a0>LL::NG</a0> can act as an <a1>CAS</a1> server, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en serveur <a1>CAS</a1>, ce qui permet de fédérer <a2>LL::NG</a2> avec : <a0>LL::NG</a0> can act as an <a1>SAML</a1> 2.0 Identity Provider, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en fournisseur d'identité <a1>SAML</a1> 2.0, ce qui permet de fédérer <a2>LL::NG</a2> avec : <a0>LL::NG</a0> can act as an OpenID 2.0 Server, that can allow to federate <a1>LL::NG</a1> with: <a0>LL::NG</a0> peut agir comme un serveur OpenID 2.0, ce qui permet de fédérer <a1>LL::NG</a1> avec : <a0>LL::NG</a0> can also act as <a1>CAS server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur CAS</a1>, ce qui peut servir à connecter deux systèmes <a2>LL::NG</a2>. <a0>LL::NG</a0> can also act as <a1>OpenID server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur OpenID</a1>, ce qui permet également d'interconnecter deux systèmes <a2>LL::NG</a2>. <a0>LL::NG</a0> can also act as <a1>SAML IDP</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir comme un <a1>IDP SAML</a1>, ce qui permet d'interconnecter deux systèmes <a2>LL::NG</a2>. <a0>LL::NG</a0> can also request proxy tickets for its protected services. <a0>LL::NG</a0> peut également requérir des tickets de proxy pour les services qu'il protège. <a0>LL::NG</a0> can be configured to provides <a1>2 cookies</a1>: <a0>LL::NG</a0> peut être configuré pour fournir <a1>2 cookies</a1>: <a0>LL::NG</a0> can be configured to restrict OpenID exchange using a white or a black list of domains. <a0>LL::NG</a0> peut être configuré pour restreindre les échanges OpenID en utilisant les listes blanches ou noires de domaines. <a0>LL::NG</a0> can be used to prompt users with a message. <a0>LL::NG</a0> peut être utilisé pour présenter des messages aux utilisateurs. <a0>LL::NG</a0> can catch a GET request and transform it internally in a POST request. <a0>LL::NG</a0> peut intercepter uen requête GET et la transformer en interne en requête POST. <a0>LL::NG</a0> can delegate authentication to Apache, so it is possible to use any <a1>Apache authentication module</a1>, for example: <a0>LL::NG</a0> peut déléguer l'authentification à Apache, ainsi il est possible d'utiliser tous les <a1>modules d'authentification Apache</a1>, par exemple: <a0>LL::NG</a0> can delegate authentication to a <a1>CAS</a1> server. <a0>LL::NG</a0> peut déléguer l'authentification à un serveur <a1>CAS</a1>. <a0>LL::NG</a0> can delegate authentication to an OpenID server. <a0>LL::NG</a0> peut deleguer l'authentification à un serveur OpenID. <a0>LL::NG</a0> can easy talk to other authentication systems using <a1>SAML</a1>, OpenID, <a2>CAS</a2>. <a0>LL::NG</a0> peut aisément dialoguer avec d'autres systèmes d'authentification en utilisant <a1>SAML</a1>, OpenID, <a2>CAS</a2>. <a0>LL::NG</a0> can propose a password reset form, for users who loose their password (this kind of application is also called a self service password interface). <a0>LL::NG</a0> peut proposer un formulaire de réinitialisation de mot-de-passe pour les utilisateurs qui ont perdu leur mot-de-passe (ce type d'application est également appelée interface de mot-de-passe self-service). <a0>LL::NG</a0> can protect any Apache hosted application including Apache reverse-proxy mechanism. <a0>LL::NG</a0> peut protéger toute application hébergée par Apache y compris le mécanisme de proxy inverse d'Apache. <a0>LL::NG</a0> can use SAML2 to get user identity and grab some attributes defined in user profile on its Identity Provider (IDP). <a0>LL::NG</a0> peut utiliser SAML2 pour obtenir l'identité et d'autres attributs definis dans le profil utilisateur défini chez son fournisseur d'identité (IDP). <a0>LL::NG</a0> can use a lot of databases as authentication, users and password backend: <a0>LL::NG</a0> peut utiliser de nombreuses bases de données comme backend d'authentification, d'utilisateurs et de mots de passe : <a0>LL::NG</a0> can use a white list or a black list to filter allowed OpenID domains. <a0>LL::NG</a0> peut utiliser une liste blanche ou noire pour filtrer les domaines OpenID autorisés. <a0>LL::NG</a0> can use an <a1>LDAP</a1> directory to: <a0>LL::NG</a0> peut utiliser un annuaire <a1>LDAP</a1> pour : <a0>LL::NG</a0> can use federation protocols (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) independently to: <a0>LL::NG</a0> peut utiliser des protocoles de fédération (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) indépendamment pour : <a0>LL::NG</a0> can use two tables: <a0>LL::NG</a0> peut utiliser deux tables : <a0>LL::NG</a0> configured as <a1>SAML Identity Provider</a1> <a0>LL::NG</a0> configuré comme <a1>fournisseur d'identité SAML</a1> <a0>LL::NG</a0> has a logout forward mechanism, that will add a step in logout process, to send logout requests (indeed, GET requests on application logout <a1>URL</a1>) inside hidden iframes. <a0>LL::NG</a0> dispose d'un dispositif de propagation de déconnexion qui ajoute une étape à ce processus pour envoyer des requêtes de déconnexion (en pratique, des requêtes GET vers des <a1>URL</a1> de déconnexion) dans des iframes cachées. <a0>LL::NG</a0> is a web single-sign-on system, but unlike some systems it can manage rights on applications based on regular expressions on <a1>URL</a1>. <a0>LL::NG</a0> est un système d'authentification web unique (WebSSO), mais contrairement à d'autres, il peut gérer les droits d'accès en utilisant des expressions rationnelles sur les <a1>URL</a1> demandées. <a0>LL::NG</a0> is able to transfer (trough <a1>SOAP</a1>) authentication credentials to another <a2>LL::NG</a2> portal, like a proxy. <a0>LL::NG</a0> peut transferer (en utilisant <a1>SOAP</a1>) les éléments d'authentification à un autre portail <a2>LL::NG</a2>, comme un proxy. <a0>LL::NG</a0> is compatible with <a1>LDAP password policy</a1>: <a0>LL::NG</a0> est compatible avec <a1>la politique de mots-de-passe LDAP</a1> : <a0>LL::NG</a0> is compatible with the <a1>CAS</a1> protocol <a2>versions 1.0 and 2.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole <a1>CAS</a1> <a2>versions 1.0 et 2.0</a2>. <a0>LL::NG</a0> is compatible with the OpenID Authentication protocol <a1>version 2.0</a1> and <a2>version 1.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole d'authentification OpenID <a1>version 2.0</a1> et <a2>version 1.0</a2>. <a0>LL::NG</a0> is designed using <a1>Model–View–Controller software architecture</a1>, so you just have to <a2>change HTML/CSS files</a2> to custom portal. <a0>LL::NG</a0> a été conçu en utilisant <a1>l'architecture logicielle Modèle–Vue–Controlleur</a1>, ainsi vous avez juste à <a2>modifier les fichiers HTML/CSS</a2> pour personnaliser son portail. <a0>LL::NG</a0> needs a storage system to store its own configuration (managed by the manager). <a0>LL::NG</a0> a besoin d'un dispositif de stockage de sa propre configuration (gérée par le manager). <a0>LL::NG</a0> portal is a modular component. Le portail <a0>LL::NG</a0> est un composant modulaire. <a0>LL::NG</a0> portal provides <a1>SOAP</a1> end points for sessions management: Le portail de <a0>LL::NG</a0> fournit des terminaisons <a1>SOAP</a1> pour la gestion des sessions : <a0>LL::NG</a0> provides a special function named <a1>basic</a1> to build this header. <a0>LL::NG</a0> fournit une fonction spéciale nommée <a1>basic</a1> pour construire cet en-tête. <a0>LL::NG</a0> provides a valve, available on <a1>download page</a1>. <a0>LL::NG</a0> fournit une valve, disponible sur <a1>page de téléchargement</a1>. <a0>LL::NG</a0> rely on a session mechanism with the session ID as a shared secret between the user (in <a1>SSO cookie</a1>) and the <a2>session database</a2>. <a0>LL::NG</a0> utilise un mécanisme de session basé sur un identifiant de session secret partagé entre l'utilisateur (dans un <a1>cookie SSO</a1>) et la <a2>base des sessions</a2>. <a0>LL::NG</a0> try to find the user in users database with the given information <a0>LL::NG</a0> tente de trouver l'utilisateur dans la base de données avec l'information donnée <a0>LL::NG</a0> use 2 internal databases to store its configuration and sessions. <a0>LL::NG</a0> utilise 2 bases de données interne pour stocker ses configuration et sessions. <a0>LL::NG</a0> use cron jobs to: <a0>LL::NG</a0> utilise des tâches planifiées pour : <a0>LL::NG</a0> uses <a1>Apache SSL module</a1>, like any other <a2>Apache authentication module</a2>, with extra features: <a0>LL::NG</a0> utilise le <a1>module SSL d'Apache</a1>, comme n'importe quel <a2>module d'authentification d'Apache</a2> avec quelques fonctionnalités supplémentaires : <a0>LL::NG</a0> uses <a1>Perl Authen::Radius </a1> as a simple authentication backend. <a0>LL::NG</a0> utilise <a1>Authen::Radius de Perl</a1> comme simple backend d'authentification. <a0>LL::NG</a0> validate the token and propose a password change form <a0>LL::NG</a0> valide la valeur et propose un formulaire de changement de mot-de-passe <a0>LL::NG</a0> will operate some <a1>SQL</a1> queries: <a0>LL::NG</a0> exécutera quelques requêtes <a1>SQL</a1> : <a0>LL::NG</a0> will then display a form with an OpenID input, wher users will type their OpenID login. <a0>LL::NG</a0> affiche alors un formulaire dans lequel les utilisateurs peuvent entrer leur identifiant OpenID. <a0>LWP::UserAgent</a0> parameters Paramètre <a0>LWP::UserAgent</a0> <a0>Lanyrd</a0> <br1/> <a0>Lanyrd</a0> <br1/> <a0>Lasso dependency version</a0> by guimard (2010/12/05 09:22) <a0>Lasso dependency version</a0> by guimard (2010/12/05 09:22) <a0>Liferay</a0> is an enterprise portal. <a0>Liferay</a0> est un portail d'entreprise. <a0>LimeSurvey</a0> is a web survey software written in <a1>PHP</a1>. <a0>LimeSurvey</a0> est un logiciel de surveillance écrit en <a1>PHP</a1>. <a0>MIME</a0>::Base64 <a0>MIME</a0>::Base64 <a0>MIME</a0>::Lite <a0>MIME</a0>::Lite <a0>May close #263</a0> by guimard (2010/12/09 17:16) <a0>May close #263</a0> by guimard (2010/12/09 17:16) <a0>MediaWiki</a0> is a wiki software, used by the well known <a1>Wikipedia</a1>. <a0>MediaWiki</a0> est un logiciel wiki utilisé par le très connu <a1>Wikipedia</a1>. <a0>Memcached</a0> can be used with <a1>LL::NG</a1>, but some features will not work since Memcached doesn't provide any parsing system: <a0>Memcached</a0> peut être utilisé avec <a1>LL::NG</a1>, mais quelques fonctionnalités ne marcheront pas car Memcached ne fournit pas de dispositif de parcours des données : <a0>OBM</a0> is enterprise-class messaging and collaboration platform for workgroup or enterprises with many thousands users. <a0>OBM</a0> est une plateforme collaborative et de messagerie pour entreprises ou groupes de travail comprenant plusieurs milliers d'utilisateurs. <a0>Outlook Web App</a0> <br1/> <a0>Outlook Web App</a0> <br1/> <a0>Password database</a0>: where change password <a0>Base de données des mots-de-passe</a0> : où changer le mot-de-passe <a0>Perl</a0> expression: perl code snippet that returns 0 or 1 des expressions <a0>Perl</a0> : codes Perl qui renvoient 0 ou 1 <a0>Perl</a0> libraries install : Installer les librairies <a0>Perl</a0> : <a0>Probe</a0> <br1/> <a0>Probe</a0> <br1/> <a0>RBAC</a0> stands for Role Based Access Control. <a0>RBAC</a0> signifie contrôle d'accès basé sur les rôles (Role Based Access Control). <a0>README.Debian update</a0> by guimard (2010/12/05 08:19) <a0>README.Debian update</a0> by guimard (2010/12/05 08:19) <a0>RPMForge</a0> repository, you can activate this repository: <a1>https://rpmrepo.org/RPMforge/Using</a1> le dépôt <a0>RPMForge</a0>, pour activer ce dépôt : <a1>https://rpmrepo.org/RPMforge/Using</a1> <a0>Rev 2387 -- Fr doc in progress (browseable)</a0> by guimard (2012/04/10 06:18) <a0>Rev 2387 -- Fr doc in progress (browseable)</a0> by guimard (2012/04/10 06:18) <a0>Rev 2388 -- Fr doc in progress (lmConfigEditor)</a0> by guimard (2012/04/10 06:28) <a0>Rev 2388 -- Fr doc in progress (lmConfigEditor)</a0> by guimard (2012/04/10 06:28) <a0>Rev 2389 -- Fr doc in progress (ldapconfbackend)</a0> by guimard (2012/04/11 06:28) <a0>Rev 2389 -- Fr doc in progress (ldapconfbackend)</a0> by guimard (2012/04/11 06:28) <a0>Rev 2390 -- Update documentation</a0> by clement_oudot (2012/04/11 18:30) <a0>Rev 2390 -- Update documentation</a0> by clement_oudot (2012/04/11 18:30) <a0>Rev 2391 -- Fix bug on password form display (#LEMONLDAP-251)</a0> by clement_oudot (2012/04/12 14:41) <a0>Rev 2391 -- Fix bug on password form display (#LEMONLDAP-251)</a0> by clement_oudot (2012/04/12 14:41) <a0>Rev 2425 -- Fr doc in progress (status)</a0> by guimard (2012/05/05 10:46) <a0>Rev 2425 -- Fr doc in progress (status)</a0> by guimard (2012/05/05 10:46) <a0>Rev 2426 -- Fr doc in progress (upgrade)</a0> by guimard (2012/05/06 07:47) <a0>Rev 2426 -- Fr doc in progress (upgrade)</a0> by guimard (2012/05/06 07:47) <a0>Rev 2427 -- Fr doc in progress (rules and headers)</a0> by guimard (2012/05/06 12:35) <a0>Rev 2427 -- Fr doc in progress (rules and headers)</a0> by guimard (2012/05/06 12:35) <a0>Rev 2428 -- Fr doc in progress (conferences)</a0> by guimard (2012/05/06 12:39) <a0>Rev 2428 -- Fr doc in progress (conferences)</a0> by guimard (2012/05/06 12:39) <a0>Rev 2429 -- French translation finished !!!</a0> by guimard (2012/05/07 05:59) <a0>Rev 2429 -- French translation finished !!!</a0> by guimard (2012/05/07 05:59) <a0>Rev 2449 -- Repair portal URL rewriting in buildPortalWSDL (Lemonldap-473)</a0> by fxdeltombe (2012/06/12 18:24) <a0>Rev 2449 -- Repair portal URL rewriting in buildPortalWSDL (Lemonldap-473)</a0> by fxdeltombe (2012/06/12 18:24) <a0>Rev 2450 -- Restore change of SVN commit r2448 (removed by mistake on ...</a0> by fxdeltombe (2012/06/13 20:20) <a0>Rev 2450 -- Restore change of SVN commit r2448 (removed by mistake on ...</a0> by fxdeltombe (2012/06/13 20:20) <a0>Rev 2451 -- Portal's and manager's CGI scripts runnable in shell (Lemonldap-476)</a0> by fxdeltombe (2012/06/13 20:43) <a0>Rev 2451 -- Portal's and manager's CGI scripts runnable in shell (Lemonldap-476)</a0> by fxdeltombe (2012/06/13 20:43) <a0>Rev 2452 -- Check that only one entry is returned by LDAP directory ...</a0> by clement_oudot (2012/06/16 10:52) <a0>Rev 2452 -- Check that only one entry is returned by LDAP directory ...</a0> by clement_oudot (2012/06/16 10:52) <a0>Rev 2453 -- Fix CAS 1.0 validate method (#LEMONLDAP-478)</a0> by clement_oudot (2012/06/16 22:52) <a0>Rev 2453 -- Fix CAS 1.0 validate method (#LEMONLDAP-478)</a0> by clement_oudot (2012/06/16 22:52) <a0>Rev 2468 -- Update release process</a0> by clement_oudot (2012/06/18 11:38) <a0>Rev 2468 -- Update release process</a0> by clement_oudot (2012/06/18 11:38) <a0>Rev 2469 -- Tell how sign Debian packages</a0> by clement_oudot (2012/06/18 11:47) <a0>Rev 2469 -- Tell how sign Debian packages</a0> by clement_oudot (2012/06/18 11:47) <a0>Rev 2470 -- Manage RPM repository for EL6 packages</a0> by clement_oudot (2012/06/18 11:47) <a0>Rev 2470 -- Manage RPM repository for EL6 packages</a0> by clement_oudot (2012/06/18 11:47) <a0>Rev 2471 -- Create branch for 1.2 version</a0> by clement_oudot (2012/06/18 12:00) <a0>Rev 2471 -- Create branch for 1.2 version</a0> by clement_oudot (2012/06/18 12:00) <a0>Rev 2472 -- Tag release 1.2.0</a0> by clement_oudot (2012/06/18 12:01) <a0>Rev 2472 -- Tag release 1.2.0</a0> by clement_oudot (2012/06/18 12:01) <a0>Rev 2493 -- [LEMONLDAP-217] add a captcha feature to the portal</a0> by kharec (2012/07/04 14:33) <a0>Rev 2493 -- [LEMONLDAP-217] add a captcha feature to the portal</a0> by kharec (2012/07/04 14:33) <a0>Rev 2494 -- Just fix a typo on mail.pl</a0> by kharec (2012/07/04 14:35) <a0>Rev 2494 -- Just fix a typo on mail.pl</a0> by kharec (2012/07/04 14:35) <a0>Rev 2495 -- Add comments</a0> by kharec (2012/07/04 16:22) <a0>Rev 2495 -- Add comments</a0> by kharec (2012/07/04 16:22) <a0>Rev 2496 -- add an unary test for captcha methods</a0> by kharec (2012/07/04 17:18) <a0>Rev 2496 -- add an unary test for captcha methods</a0> by kharec (2012/07/04 17:18) <a0>Rev 2497 -- add a test on checkCaptcha method</a0> by kharec (2012/07/05 09:33) <a0>Rev 2497 -- add a test on checkCaptcha method</a0> by kharec (2012/07/05 09:33) <a0>Rev 2616 -- Fix Multi backend unit test (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/09 22:54) <a0>Rev 2616 -- Fix Multi backend unit test (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/09 22:54) <a0>Rev 2617 -- Allow to get display type in Multi backend (#LEMONLDAP-529)</a0> by clement_oudot (2012/09/09 23:37) <a0>Rev 2617 -- Allow to get display type in Multi backend (#LEMONLDAP-529)</a0> by clement_oudot (2012/09/09 23:37) <a0>Rev 2618 -- Fix AuthBasic Handler logging (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/10 11:23) <a0>Rev 2618 -- Fix AuthBasic Handler logging (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/10 11:23) <a0>Rev 2619 -- Add deleteNotification webservice in WSDL (#LEMONLDAP-511)</a0> by clement_oudot (2012/09/10 12:09) <a0>Rev 2619 -- Add deleteNotification webservice in WSDL (#LEMONLDAP-511)</a0> by clement_oudot (2012/09/10 12:09) <a0>Rev 2620 -- Add AuthBasic Handler in default installation (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/10 12:34) <a0>Rev 2620 -- Add AuthBasic Handler in default installation (#LEMONLDAP-519)</a0> by clement_oudot (2012/09/10 12:34) <a0>Rev 2638 -- *[LEMONLDAP-538] Fix loglevel</a0> by kharec (2012/09/25 19:00) <a0>Rev 2638 -- *[LEMONLDAP-538] Fix loglevel</a0> by kharec (2012/09/25 19:00) <a0>Rev 2639 -- *[LEMONLDAP-538] Fix loglevel</a0> by kharec (2012/09/25 19:04) <a0>Rev 2639 -- *[LEMONLDAP-538] Fix loglevel</a0> by kharec (2012/09/25 19:04) <a0>Rev 2640 -- Update Makefile.PL with correct versions, add dependency on SOAP::Lite for ...</a0> by clement_oudot (2012/10/01 09:58) <a0>Rev 2640 -- Update Makefile.PL with correct versions, add dependency on SOAP::Lite for ...</a0> by clement_oudot (2012/10/01 09:58) <a0>Rev 2641 -- Frdoc update</a0> by guimard (2012/10/05 06:23) <a0>Rev 2641 -- Frdoc update</a0> by guimard (2012/10/05 06:23) <a0>Rev 2642 -- Manage persistent sessions in LL::NG::Handler::AuthBasic (Lemonldap-543)</a0> by fxdeltombe (2012/10/12 20:35) <a0>Rev 2642 -- Manage persistent sessions in LL::NG::Handler::AuthBasic (Lemonldap-543)</a0> by fxdeltombe (2012/10/12 20:35) <a0>Rev 2649 -- Restore trunk versions of main modules</a0> by clement_oudot (2012/10/16 14:00) <a0>Rev 2649 -- Restore trunk versions of main modules</a0> by clement_oudot (2012/10/16 14:00) <a0>Rev 2650 -- Fix call to msg and convertSec routines in _LDAP.pm (#LEMONLDAP-548)</a0> by clement_oudot (2012/10/16 14:34) <a0>Rev 2650 -- Fix call to msg and convertSec routines in _LDAP.pm (#LEMONLDAP-548)</a0> by clement_oudot (2012/10/16 14:34) <a0>Rev 2651 -- Update Handler AuthBasic in 1.2 branch (#LEMONLDAP-543)</a0> by clement_oudot (2012/10/16 16:11) <a0>Rev 2651 -- Update Handler AuthBasic in 1.2 branch (#LEMONLDAP-543)</a0> by clement_oudot (2012/10/16 16:11) <a0>Rev 2652 -- Display version in Manager (#LEMONLDAP-549)</a0> by clement_oudot (2012/10/16 16:46) <a0>Rev 2652 -- Display version in Manager (#LEMONLDAP-549)</a0> by clement_oudot (2012/10/16 16:46) <a0>Rev 2653 -- Check reload URLs parameter to avoid Perl error (#LEMONLDAP-552)</a0> by clement_oudot (2012/10/16 17:48) <a0>Rev 2653 -- Check reload URLs parameter to avoid Perl error (#LEMONLDAP-552)</a0> by clement_oudot (2012/10/16 17:48) <a0>Rev 2710 -- Apply svn commit r2709 to 1.2 branch (#LEMONLDAP-559)</a0> by fxdeltombe (2013/01/03 19:54) <a0>Rev 2710 -- Apply svn commit r2709 to 1.2 branch (#LEMONLDAP-559)</a0> by fxdeltombe (2013/01/03 19:54) <a0>Rev 2711 -- X-Forwarded-For Header in SOAP request sent by LL::NG::Handler::AuthBasic (#LEMONLDAP-572)</a0> by fxdeltombe (2013/01/03 20:56) <a0>Rev 2711 -- X-Forwarded-For Header in SOAP request sent by LL::NG::Handler::AuthBasic (#LEMONLDAP-572)</a0> by fxdeltombe (2013/01/03 20:56) <a0>Rev 2712 -- Apply svn commit r2711 to 1.2 branch (#LEMONLDAP-572)</a0> by fxdeltombe (2013/01/03 20:57) <a0>Rev 2712 -- Apply svn commit r2711 to 1.2 branch (#LEMONLDAP-572)</a0> by fxdeltombe (2013/01/03 20:57) <a0>Rev 2713 -- Do not send void HTTP headers to apps (#LEMONLDAP-573)</a0> by fxdeltombe (2013/01/04 18:54) <a0>Rev 2713 -- Do not send void HTTP headers to apps (#LEMONLDAP-573)</a0> by fxdeltombe (2013/01/04 18:54) <a0>Rev 2714 -- Apply svn commit r2713 to 1.2 branch (#LEMONLDAP-573)</a0> by fxdeltombe (2013/01/04 18:55) <a0>Rev 2714 -- Apply svn commit r2713 to 1.2 branch (#LEMONLDAP-573)</a0> by fxdeltombe (2013/01/04 18:55) <a0>Rev 2771 -- Update authors, bug-report, copyright and license</a0> by guimard (2013/01/31 06:33) <a0>Rev 2771 -- Update authors, bug-report, copyright and license</a0> by guimard (2013/01/31 06:33) <a0>Rev 2772 -- Add script to manipulate copyrights</a0> by guimard (2013/01/31 06:38) <a0>Rev 2772 -- Add script to manipulate copyrights</a0> by guimard (2013/01/31 06:38) <a0>Rev 2773 -- Update Changes and report trunk copyright changes into 1.2</a0> by guimard (2013/01/31 07:23) <a0>Rev 2773 -- Update Changes and report trunk copyright changes into 1.2</a0> by guimard (2013/01/31 07:23) <a0>Rev 2774 -- Email change: Thomas Chemineau -> thomas.chemineau@gmail.com</a0> by guimard (2013/02/01 06:37) <a0>Rev 2774 -- Email change: Thomas Chemineau -> thomas.chemineau@gmail.com</a0> by guimard (2013/02/01 06:37) <a0>Rev 2775 -- Remove old warning in AuthCAS</a0> by guimard (2013/02/03 07:40) <a0>Rev 2775 -- Remove old warning in AuthCAS</a0> by guimard (2013/02/03 07:40) <a0>Rev 3005 -- Update notifications doc (#LEMONLDAP-457)</a0> by clement_oudot (2013/10/22 18:31) <a0>Rev 3005 -- Update notifications doc (#LEMONLDAP-457)</a0> by clement_oudot (2013/10/22 18:31) <a0>Rev 3006 -- Some cosmetics changes</a0> by guimard (2013/10/22 18:48) <a0>Rev 3006 -- Some cosmetics changes</a0> by guimard (2013/10/22 18:48) <a0>Rev 3007 -- Correct XHTML: * needs to be XHTML transitional to ...</a0> by guimard (2013/10/22 20:14) <a0>Rev 3007 -- Correct XHTML: * needs to be XHTML transitional to ...</a0> by guimard (2013/10/22 20:14) <a0>Rev 3008 -- Correct XHTML: * alt is not an attribute of ...</a0> by guimard (2013/10/22 20:27) <a0>Rev 3008 -- Correct XHTML: * alt is not an attribute of ...</a0> by guimard (2013/10/22 20:27) <a0>Rev 3009 -- Add a specific timeout parameter for SAML RelayState sessions (#LEMONLDAP-524)</a0> by clement_oudot (2013/10/24 14:35) <a0>Rev 3009 -- Add a specific timeout parameter for SAML RelayState sessions (#LEMONLDAP-524)</a0> by clement_oudot (2013/10/24 14:35) <a0>Rev 3059 -- Create 1.3 branch</a0> by clement_oudot (2013/11/02 17:26) <a0>Rev 3059 -- Create 1.3 branch</a0> by clement_oudot (2013/11/02 17:26) <a0>Rev 3060 -- Create tag for 1.3.0</a0> by clement_oudot (2013/11/02 17:26) <a0>Rev 3060 -- Create tag for 1.3.0</a0> by clement_oudot (2013/11/02 17:26) <a0>Rev 3061 -- Fix module version (failure in PAUSE indexer after 1.3.0 publication ...</a0> by clement_oudot (2013/11/02 19:12) <a0>Rev 3061 -- Fix module version (failure in PAUSE indexer after 1.3.0 publication ...</a0> by clement_oudot (2013/11/02 19:12) <a0>Rev 3062 -- Little updates on release process</a0> by clement_oudot (2013/11/02 20:06) <a0>Rev 3062 -- Little updates on release process</a0> by clement_oudot (2013/11/02 20:06) <a0>Rev 3063 -- Update changelog in trunk for 1.4</a0> by clement_oudot (2013/11/02 20:06) <a0>Rev 3063 -- Update changelog in trunk for 1.4</a0> by clement_oudot (2013/11/02 20:06) <a0>Rules</a0> are applied in alphabetical order (comment and regular expression). Les <a0>règles</a0> sont appliquées dans l'ordre alphabétique (commentaires et expressions régulières). <a0>SAML</a0> 2.0 / Shibboleth <a0>SAML</a0> 2.0 / Shibboleth <a0>SAML</a0> IDP preselection Préselection d'IDP <a0>SAML</a0> <a0>SAML</a0> Session backend Module de stockage <a0>SAML</a0> <a0>SAML</a0> Session backend options Options du module de stockage <a0>SAML</a0> <a0>SAML</a0> authentication and issuer Authentification ou fourniture d'identité <a0>SAML</a0> <a0>SAML</a0> can use different NameID formats. <a0>SAML</a0> peut utiliser plusieurs formats de NameID. <a0>SAML</a0> service configuration is a common step to configure <a1>LL::NG</a1> as <a2>SAML SP</a2> or <a3>SAML IDP</a3>. La configuration du service <a0>SAML</a0> est une étape commune pour configurer <a1>LL::NG</a1> comme <a2>fournisseur de service SAML (SP)</a2> ou <a3>fournisseur d'identité SAML (IDP)</a3>. <a0>SAML</a0> token Jeton <a0>SAML</a0> <a0>SMTP</a0> password Mot-de-passe <a0>SMTP</a0> <a0>SMTP</a0> server Serveur <a0>SMTP</a0> <a0>SMTP</a0> user Utilisateur <a0>SMTP</a0> <a0>SOAP based</a0> for client-server software, specific development, … <a0>Basé sur SOAP</a0> pour les logiciels client-serveur, les développements spécifiques, … <a0>SOAP</a0> activation Activation <a0>SOAP</a0> <a0>SOAP</a0> end points (inactivated by default): Points d'accès <a0>SOAP</a0> (désactivés par défaut) : <a0>SOAP</a0> functions are not accessible by network by default. Les fonctions <a0>SOAP</a0> ne sont pas accessible par le réseau par défaut. <a0>SOAP</a0> server location (<a1>URL</a1>) Emplacement du serveur <a0>SOAP</a0> (<a1>URL</a1>) <a0>SOAP</a0>::Lite <a0>SOAP</a0>::Lite <a0>SQL</a0> session backend can be used with many <a1>SQL</a1> databases such as: Le backend de sessions <a0>SQL</a0> peut être utilisé avec de nombreuses bases de données <a1>SQL</a1> tels : <a0>SREG</a0> permit the share of 8 attributes: <a0>SREG</a0> permet le partage de 8 attributs : <a0>SSL</a0> / TLS <a0>SSL</a0> / TLS <a0>SSL</a0> X509 <a0>SSL</a0> X509 <a0>SSL</a0> authentication level Niveau d'authentification <a0>SSL</a0> <a0>SSL</a0> client certificate for the reverse-proxy (see SSLProxy* parameters in <a1>mod_ssl documentation</a1>) un certificat client <a0>SSL</a0> pour le proxy inverse (voir les paramètres SSLProxy* de la <a1>documentation de mod_ssl</a1>) <a0>SSL</a0> force <a1>SSL</a1> authentication Exiger l'authentification <a1>SSL</a1> <a0>SSL</a0> map with <a1>LDAP</a1> attribute Attribut <a1>LDAP</a1> à relier à <a0>SSL</a0> <a0>SSL</a0> user field in certificate Champ utilisateur dans le certificat <a0>SSL</a0> <a0>SSO cookies</a0> is not detected, so Handler redirects user to Portal Si le <a0>cookies SSO</a0> n'est pas détecté, l'agent redirige l'utilisateur vers le portail <a0>SSO</a0> on OBM web interface <a0>SSO</a0> sur l'interface web d'OBM <a0>Session explorer</a0> will not work L'<a0>explorateur de session</a0> ne fonctionne pas <a0>Session restrictions</a0> will not work Les <a0>restrictions de session</a0> ne fonctionnent pas <a0>SlideShare</a0> <br1/> <a0>SlideShare</a0> <br1/> <a0>SlideShare</a0><br1/> <a0>SlideShare</a0><br1/> <a0>Spring Security</a0> is the new ACEGI name. <a0>Spring Security</a0> est le nouveau nom d'ACEGI. <a0>Sympa</a0> is a mailing list manager. <a0>Sympa</a0> est un gestionnaire de listes de diffusion. <a0>The status page</a0> can be read by <a1>MRTG</a1> using the script <s2>lmng-mrtg</s2> that can be found in manager example directory. <a0>La page de statut</a0> peut être lue par <a1>MRTG</a1> en utilisant le script <s2>lmng-mrtg</s2> qui peut être trouvé dans le répertoire "example" du manager. <a0>Twitter</a0> is a famous microblogging server. <a0>Twitter</a0> est un serveur de microblog célèbre. <a0>Twitter</a0> is a famous short messaging server. <a0>Twitter</a0> est un service célèbre de messages cours. <a0>URI</a0> of the page which contains the form L'<a0>URI</a0> de la page qui contient le formulaire <a0>URI</a0> of the page which receive POST data (optional if it is the same as the page holding the form) L'<a0>URI</a0> de la page qui reçoit les données POST (optionnel s'il s'agit de la même que celle qui héberge le formulaire) <a0>URI</a0> of the server <a0>URI</a0> du serveur <a0>URL</a0> for mail reset <a0>URL</a0> pour la réinitialisation par courriel <a0>URL</a0> matching trough regular expressions (subdirectories, file types, …) Examen des <a0>URL</a0> par expressions rationnelles (sous répertoires, types de fichiers, …) <a0>URL</a0> of sessions <a1>SOAP</a1> end point <a0>URL</a0> de la terminaison <a1>SOAP</a1>des sessions <a0>URL</a0> pattern: <c1>^/admin/</c1> Expression sur l'<a0>URL</a0> : <c1>^/admin/</c1> <a0>URL</a0> pattern: <c1>default</c1> Expression sur l'<a0>URL</a0> : <c1>default</c1> <a0>URL</a0> used before being redirected to the portal (empty if portal was used as entry point) <a0>URL</a0> utilisée avant d'être redirigé vers le portail (vide si le portail a été utilisé comme point d'entrée) <a0>User database</a0>: where collect user information <a0>Base de données utilisateurs</a0> : où collecter les informations utilisateurs <a0>Using Apache::Session::Browseable::MySQL</a0> (recommended for best performances) <a0>Utiliser Apache::Session::Browseable::MySQL</a0> (recommandé pour de meilleures performances) <a0>Using Apache::Session::MySQL</a0> <e1>(if you choose this option, then read <a2>how to increase MySQL performances</a2>)</e1> <a0>Utiliser Apache::Session::MySQL</a0> <e1>(il est alors conseillé de lire <a2>comment améliorer les performances de MySQL</a2>)</e1> <a0>Version 0.9.4</a0> (old wiki) <a0>Version 0.9.4</a0> (ancien wiki) <a0>Version 1.1</a0> (development version) <a0>Version 1.1</a0> (version en développement) <a0>WebID</a0> is a way to uniquely identify a person, company, organisation, or other agent using a <a1>URI</a1> and a certificate. <a0>WebID</a0> est un moyen d'identification unique de personnes, entreprises, organisation, ou autre agent en utilisant une <a1>URI</a1> et un certificat. <a0>Work on RPM for 1.0 (#LEMONLDAP-206)</a0> by clement_oudot (2010/11/26 17:00) <a0>Work on RPM for 1.0 (#LEMONLDAP-206)</a0> by clement_oudot (2010/11/26 17:00) <a0>XML</a0> file is no more accepted. Les fichiers <a0>XML</a0> ne sont plus acceptés. <a0>XML</a0>::LibXML <a0>XML</a0>::LibXML <a0>XML</a0>::LibXSLT <a0>XML</a0>::LibXSLT <a0>XML</a0>::Simple <a0>XML</a0>::Simple <a0>XSS</a0> and <a1>SQL</a1>/<a2>LDAP</a2> injection protection Protection contre les injections <a0>XSS</a0> et <a1>SQL</a1>/<a2>LDAP</a2> <a0>Zimbra</a0> is open source server software for email and collaboration - email, group calendar, contacts, instant messaging, file storage and web document management. <a0>Zimbra</a0> est un logiciel serveur collaboratif et de messagerie open-source - messagerie, calendrier de groupe, contacts, messagerie instantanée, stockage de fichiers et gestion de documents web. <a0>activedirectoryminihowto</a0><br1/> <a0>activedirectoryminihowto</a0><br1/> <a0>browseablesessionbackend</a0><br1/> <a0>browseablesessionbackend</a0><br1/> <a0>cda</a0><br1/> <a0>cda</a0><br1/> <a0>default_sidebar</a0><br1/> <a0>default_sidebar</a0><br1/> <a0>error</a0><br1/> <a0>error</a0><br1/> <a0>exported variables</a0> collected from UserDB backend les <a0>variables exportées</a0> collectées depuis le backend utilisateur <a0>fastcgi</a0><br1/> <a0>fastcgi</a0><br1/> <a0>features</a0><br1/> <a0>features</a0><br1/> <a0>findAttr.pl now scans undocumented parameters</a0> by guimard (2010/12/05 14:41) <a0>findAttr.pl now scans undocumented parameters</a0> by guimard (2010/12/05 14:41) <a0>handlerauthbasic</a0><br1/> <a0>handlerauthbasic</a0><br1/> <a0>header_remote_user_conversion</a0><br1/> <a0>header_remote_user_conversion</a0><br1/> <a0>idpcas</a0><br1/> <a0>idpcas</a0><br1/> <a0>ldapconfbackend</a0><br1/> <a0>ldapconfbackend</a0><br1/> <a0>managerprotection</a0><br1/> <a0>managerprotection</a0><br1/> <a0>mediawiki</a0><br1/> <a0>mediawiki</a0><br1/> <a0>nosqlsessionbackend</a0><br1/> <a0>nosqlsessionbackend</a0><br1/> <a0>parameterlist</a0><br1/> <a0>parameterlist</a0><br1/> <a0>phpLDAPadmin</a0> is an <a1>LDAP</a1> administration tool written in <a2>PHP</a2>. <a0>phpLDAPadmin</a0> est un outil d'administration de serveur <a1>LDAP</a1> écrit en <a2>PHP</a2>. <a0>rbac</a0><br1/> <a0>rbac</a0><br1/> <a0>safejail</a0><br1/> <a0>safejail</a0><br1/> <a0>samlservice</a0><br1/> <a0>samlservice</a0><br1/> <a0>tomcat</a0><br1/> <a0>tomcat</a0><br1/> <a10>authbrowserid</a10><br11/> <a10>authbrowserid</a10><br11/> <a10>authchoice</a10><br11/> <a10>authchoice</a10><br11/> <a10>contact</a10><br11/> <a10>contact</a10><br11/> <a10>drupal</a10><br11/> <a10>drupal</a10><br11/> <a10>formreplay</a10><br11/> <a10>formreplay</a10><br11/> <a10>installtarball</a10><br11/> <a10>installtarball</a10><br11/> <a10>loginhistory</a10><br11/> <a10>loginhistory</a10><br11/> <a10>logoutforward</a10><br11/> <a10>logoutforward</a10><br11/> <a10>logs</a10><br11/> <a10>logs</a10><br11/> <a10>mysqlminihowto</a10><br11/> <a10>mysqlminihowto</a10><br11/> <a10>portal</a10><br11/> <a10>portal</a10><br11/> <a10>selfmadeapplication</a10><br11/> <a10>selfmadeapplication</a10><br11/> <a10>sessions</a10><br11/> <a10>sessions</a10><br11/> <a10>soapconfbackend</a10><br11/> <a10>soapconfbackend</a10><br11/> <a12>authcas</a12><br13/> <a12>authcas</a12><br13/> <a12>authdbi</a12><br13/> <a12>authdbi</a12><br13/> <a12>customfunctions</a12><br13/> <a12>customfunctions</a12><br13/> <a12>internalproxy</a12><br13/> <a12>internalproxy</a12><br13/> <a12>logoutforward</a12><br13/> <a12>logoutforward</a12><br13/> <a12>logs</a12><br13/> <a12>logs</a12><br13/> <a12>portalcustom</a12><br13/> <a12>portalcustom</a12><br13/> <a12>sessions</a12><br13/> <a12>sessions</a12><br13/> <a12>soapconfbackend</a12><br13/> <a12>soapconfbackend</a12><br13/> <a12>soapminihowto</a12><br13/> <a12>soapminihowto</a12><br13/> <a14>authchoice</a14><br15/> <a14>authchoice</a14><br15/> <a14>authdemo</a14><br15/> <a14>authdemo</a14><br15/> <a14>authldap</a14><br15/> <a14>authldap</a14><br15/> <a14>logs</a14><br15/> <a14>logs</a14><br15/> <a14>portalmenu</a14><br15/> <a14>portalmenu</a14><br15/> <a14>soapconfbackend</a14><br15/> <a14>soapconfbackend</a14><br15/> <a14>soapminihowto</a14><br15/> <a14>soapminihowto</a14><br15/> <a14>soapservices</a14><br15/> <a14>soapservices</a14><br15/> <a16>authdbi</a16><br17/> <a16>authdbi</a16><br17/> <a16>authldap</a16><br17/> <a16>authldap</a16><br17/> <a16>authmulti</a16><br17/> <a16>authmulti</a16><br17/> <a16>prereq</a16><br17/> <a16>prereq</a16><br17/> <a16>soapminihowto</a16><br17/> <a16>soapminihowto</a16><br17/> <a16>soapservices</a16><br17/> <a16>soapservices</a16><br17/> <a16>soapsessionbackend</a16><br17/> <a16>soapsessionbackend</a16><br17/> <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <a18>authdemo</a18><br19/> <a18>authdemo</a18><br19/> <a18>authmulti</a18><br19/> <a18>authmulti</a18><br19/> <a18>authnull</a18><br19/> <a18>authnull</a18><br19/> <a18>presentation</a18><br19/> <a18>presentation</a18><br19/> <a18>soapservices</a18><br19/> <a18>soapservices</a18><br19/> <a18>soapsessionbackend</a18><br19/> <a18>soapsessionbackend</a18><br19/> <a18>spring</a18><br19/> <a18>spring</a18><br19/> <a1>Check our references</a1>! <a1>Consultez nos références</a1>! <a1>LL::NG</a1> can restrict this: <a1>LL::NG</a1> peut restreindre cet usage : <a1>Of course, there are other differences</a1>. <a1>Il y a bien sur d'autres différences</a1>. <a1>SOAP</a1> functions are protected by Apache, you can change this in <a2>Apache portal configuration</a2>: Les fonctions <a1>SOAP</a1> sont protégées par Apache, on peut le changer dans la <a2>configuration Apache du portail</a2>: <a1>Try Freenode Webchat</a1>! <a1>Essayez le client web Freenode</a1> ! <a20>authfacebook</a20><br21/> <a20>authfacebook</a20><br21/> <a20>authnull</a20><br21/> <a20>authnull</a20><br21/> <a20>authopenid</a20><br21/> <a20>authopenid</a20><br21/> <a20>press</a20><br21/> <a20>press</a20><br21/> <a20>soapsessionbackend</a20><br21/> <a20>soapsessionbackend</a20><br21/> <a20>spring</a20><br21/> <a20>spring</a20><br21/> <a20>sqlconfbackend</a20><br21/> <a20>sqlconfbackend</a20><br21/> <a22>authgoogle</a22><br23/> <a22>authgoogle</a22><br23/> <a22>authopenid</a22><br23/> <a22>authopenid</a22><br23/> <a22>authproxy</a22><br23/> <a22>authproxy</a22><br23/> <a22>spring</a22><br23/> <a22>spring</a22><br23/> <a22>sqlconfbackend</a22><br23/> <a22>sqlconfbackend</a22><br23/> <a22>sqlsessionbackend</a22><br23/> <a22>sqlsessionbackend</a22><br23/> <a24>authldap</a24><br25/> <a24>authldap</a24><br25/> <a24>authproxy</a24><br25/> <a24>authproxy</a24><br25/> <a24>authradius</a24><br25/> <a24>authradius</a24><br25/> <a24>authremote</a24><br25/> <a24>authremote</a24><br25/> <a24>sqlconfbackend</a24><br25/> <a24>sqlconfbackend</a24><br25/> <a24>sqlsessionbackend</a24><br25/> <a24>sqlsessionbackend</a24><br25/> <a24>ssocookie</a24><br25/> <a24>ssocookie</a24><br25/> <a26>authmulti</a26><br27/> <a26>authmulti</a26><br27/> <a26>authradius</a26><br27/> <a26>authradius</a26><br27/> <a26>authremote</a26><br27/> <a26>authremote</a26><br27/> <a26>authsaml</a26><br27/> <a26>authsaml</a26><br27/> <a26>sqlsessionbackend</a26><br27/> <a26>sqlsessionbackend</a26><br27/> <a26>ssocookie</a26><br27/> <a26>ssocookie</a26><br27/> <a26>start</a26><br27/> <a26>start</a26><br27/> <a28>authnull</a28><br29/> <a28>authnull</a28><br29/> <a28>authremote</a28><br29/> <a28>authremote</a28><br29/> <a28>authsaml</a28><br29/> <a28>authsaml</a28><br29/> <a28>authslave</a28><br29/> <a28>authslave</a28><br29/> <a28>authssl</a28><br29/> <a28>authssl</a28><br29/> <a28>ssocookie</a28><br29/> <a28>ssocookie</a28><br29/> <a28>start</a28><br29/> <a28>start</a28><br29/> <a28>status</a28><br29/> <a28>status</a28><br29/> <a2>Dailymotion</a2> <a2>Dailymotion</a2> <a2>IBM Lotus iNotes</a2> <a2>IBM Lotus iNotes</a2> <a2>Lanyrd</a2> <a2>Lanyrd</a2> <a2>Lanyrd</a2> <br3/> <a2>Lanyrd</a2> <br3/> <a2>Lutece</a2> <a2>Lutece</a2> <a2>Video</a2> <a2>Vidéo</a2> <a2>You must install them first</a2>. <a2>Vous devez les installer au préalable</a2>. <a2>applications</a2><br3/> <a2>applications</a2><br3/> <a2>bugzilla</a2><br3/> <a2>bugzilla</a2><br3/> <a2>changeconfbackend</a2><br3/> <a2>changeconfbackend</a2><br3/> <a2>django</a2><br3/> <a2>django</a2><br3/> <a2>documentation</a2><br3/> <a2>documentation</a2><br3/> <a2>exportedvars</a2><br3/> <a2>exportedvars</a2><br3/> <a2>features</a2><br3/> <a2>features</a2><br3/> <a2>federationproxy</a2><br3/> <a2>federationproxy</a2><br3/> <a2>header_remote_user_conversion</a2><br3/> <a2>header_remote_user_conversion</a2><br3/> <a2>highavailability</a2><br3/> <a2>highavailability</a2><br3/> <a2>idpopenid</a2><br3/> <a2>idpopenid</a2><br3/> <a2>ldapminihowto</a2><br3/> <a2>ldapminihowto</a2><br3/> <a2>mediawiki</a2><br3/> <a2>mediawiki</a2><br3/> <a2>memcachedsessionbackend</a2><br3/> <a2>memcachedsessionbackend</a2><br3/> <a2>notifications</a2><br3/> <a2>notifications</a2><br3/> <a2>passwordstore</a2><br3/> <a2>passwordstore</a2><br3/> <a2>redirections</a2><br3/> <a2>redirections</a2><br3/> <a2>samlservice</a2><br3/> <a2>samlservice</a2><br3/> <a2>screenshots</a2><br3/> <a2>captures d'écran</a2><br3/> <a2>translations</a2><br3/> <a2>traductions</a2><br3/> <a30>authopenid</a30><br31/> <a30>authopenid</a30><br31/> <a30>authsaml</a30><br31/> <a30>authsaml</a30><br31/> <a30>authslave</a30><br31/> <a30>authslave</a30><br31/> <a30>authssl</a30><br31/> <a30>authssl</a30><br31/> <a30>authtwitter</a30><br31/> <a30>authtwitter</a30><br31/> <a30>start</a30><br31/> <a30>start</a30><br31/> <a30>status</a30><br31/> <a30>status</a30><br31/> <a30>sympa</a30><br31/> <a30>sympa</a30><br31/> <a32>authproxy</a32><br33/> <a32>authproxy</a32><br33/> <a32>authslave</a32><br33/> <a32>authslave</a32><br33/> <a32>authssl</a32><br33/> <a32>authssl</a32><br33/> <a32>authtwitter</a32><br33/> <a32>authtwitter</a32><br33/> <a32>status</a32><br33/> <a32>status</a32><br33/> <a32>sympa</a32><br33/> <a32>sympa</a32><br33/> <a32>syntax</a32><br33/> <a32>syntax</a32><br33/> <a34>authradius</a34><br35/> <a34>authradius</a34><br35/> <a34>authssl</a34><br35/> <a34>authssl</a34><br35/> <a34>authtwitter</a34><br35/> <a34>authtwitter</a34><br35/> <a34>authyubikey</a34><br35/> <a34>authyubikey</a34><br35/> <a34>sympa</a34><br35/> <a34>sympa</a34><br35/> <a34>syntax</a34><br35/> <a34>syntax</a34><br35/> <a36>authremote</a36><br37/> <a36>authremote</a36><br37/> <a36>authtwitter</a36><br37/> <a36>authtwitter</a36><br37/> <a36>authyubikey</a36><br37/> <a36>authyubikey</a36><br37/> <a36>syntax</a36><br37/> <a36>syntax</a36><br37/> <a38>authsaml</a38><br39/> <a38>authsaml</a38><br39/> <a38>authyubikey</a38><br39/> <a38>authyubikey</a38><br39/> <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> <a3>XSS</a3> checks will still be done with warning in logs, but this will not prevent the process to continue. Le contrôle <a3>XSS</a3> continuera à être effectué mais avec seulement des avertissements dans les journaux sans empêcher le processus de continuer. <a40>authslave</a40><br41/> <a40>authslave</a40><br41/> <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> <a42>authssl</a42><br43/> <a42>authssl</a42><br43/> <a44>authtwitter</a44><br45/> <a44>authtwitter</a44><br45/> <a46>authwebid</a46><br47/> <a46>authwebid</a46><br47/> <a48>authyubikey</a48><br49/> <a48>authyubikey</a48><br49/> <a4><s5>return</s5></a4> <s6>"logo"</s6><s7>;</s7> <s8>}</s8> <a4><s5>return</s5></a4> <s6>"logo"</s6><s7>;</s7> <s8>}</s8> <a4>Joind.in</a4> <a4>Joind.in</a4> <a4>YouTube</a4> <a4>YouTube</a4> <a4>authad</a4><br5/> <a4>authad</a4><br5/> <a4>authapache</a4><br5/> <a4>authapache</a4><br5/> <a4>conferences</a4><br5/> <a4>conferences</a4><br5/> <a4>documentation</a4><br5/> <a4>documentation</a4><br5/> <a4>dokuwiki</a4><br5/> <a4>dokuwiki</a4><br5/> <a4>extendedfunctions</a4><br5/> <a4>extendedfunctions</a4><br5/> <a4>federationproxy</a4><br5/> <a4>federationproxy</a4><br5/> <a4>fileconfbackend</a4><br5/> <a4>fileconfbackend</a4><br5/> <a4>highavailability</a4><br5/> <a4>highavailability</a4><br5/> <a4>idpsaml</a4><br5/> <a4>idpsaml</a4><br5/> <a4>ldapsessionbackend</a4><br5/> <a4>ldapsessionbackend</a4><br5/> <a4>memcachedsessionbackend</a4><br5/> <a4>memcachedsessionbackend</a4><br5/> <a4>menu1</a4><br5/> <a4>menu1</a4><br5/> <a4>performances</a4><br5/> <a4>performances</a4><br5/> <a4>references</a4><br5/> <a4>références</a4><br5/> <a4>screenshots</a4><br5/> <a4>screenshots</a4><br5/> <a4>securetoken</a4><br5/> <a4>securetoken</a4><br5/> <a4>security</a4><br5/> <a4>securité</a4><br5/> <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> <a6>authapache</a6><br7/> <a6>authapache</a6><br7/> <a6>authbasic</a6><br7/> <a6>authbasic</a6><br7/> <a6>configlocation</a6><br7/> <a6>configlocation</a6><br7/> <a6>dokuwiki</a6><br7/> <a6>dokuwiki</a6><br7/> <a6>download</a6><br7/> <a6>download</a6><br7/> <a6>fileconfbackend</a6><br7/> <a6>fileconfbackend</a6><br7/> <a6>filesessionbackend</a6><br7/> <a6>filesessionbackend</a6><br7/> <a6>installdeb</a6><br7/> <a6>installdeb</a6><br7/> <a6>liferay</a6><br7/> <a6>liferay</a6><br7/> <a6>menu1</a6><br7/> <a6>menu1</a6><br7/> <a6>mrtg</a6><br7/> <a6>mrtg</a6><br7/> <a6>phpldapadmin</a6><br7/> <a6>phpldapadmin</a6><br7/> <a6>resetpassword</a6><br7/> <a6>resetpassword</a6><br7/> <a6>securetoken</a6><br7/> <a6>securetoken</a6><br7/> <a6>security</a6><br7/> <a6>security</a6><br7/> <a6>selfmadeapplication</a6><br7/> <a6>applications maison</a6><br7/> <a8>authbasic</a8><br9/> <a8>authbasic</a8><br9/> <a8>authcas</a8><br9/> <a8>authcas</a8><br9/> <a8>configvhost</a8><br9/> <a8>configvhost</a8><br9/> <a8>download</a8><br9/> <a8>téléchargement</a8><br9/> <a8>drupal</a8><br9/> <a8>drupal</a8><br9/> <a8>filesessionbackend</a8><br9/> <a8>filesessionbackend</a8><br9/> <a8>formreplay</a8><br9/> <a8>formreplay</a8><br9/> <a8>installrpm</a8><br9/> <a8>installrpm</a8><br9/> <a8>limesurvey</a8><br9/> <a8>limesurvey</a8><br9/> <a8>logoutforward</a8><br9/> <a8>logoutforward</a8><br9/> <a8>mrtg</a8><br9/> <a8>mrtg</a8><br9/> <a8>mysqlminihowto</a8><br9/> <a8>mysqlminihowto</a8><br9/> <a8>playground</a8><br9/> <a8>playground</a8><br9/> <a8>security</a8><br9/> <a8>security</a8><br9/> <a8>selfmadeapplication</a8><br9/> <a8>selfmadeapplication</a8><br9/> <a8>sessions</a8><br9/> <a8>sessions</a8><br9/> <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> <br0/> <br0/> <c0>ValveLemonLDAPNG.jar</c0> is created under <c1>/dist</c1> directory. <c0>ValveLemonLDAPNG.jar</c0> est créé dans le répertoire <c1>/dist</c1>. <c0>\b</c0> means start or end of a word in PCRE (<a1>Perl</a1> Compatible Regular Expressions) <c0>\b</c0> signifie début ou fin de mot dans les PCRE (Expressions Rationnelles Compatible <a1>Perl</a1>) <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> <c0>accept</c0>: all authenticated users can pass <c0>accept</c0>: tout utilisateur authentifié est autorisé <c0>deny</c0>: nobody is welcomed <c0>deny</c0>: personne n'est autorisé <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: catch logout request <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: intercepte les requêtes de déconnexion <c0>skip</c0>: all is open! <c0>skip</c0> : tout est ouvert ! <c0>unprotect</c0>: all is open! <c0>unprotect</c0>: tout est ouvert ! <c0>unprotect</c0>: all is open, but authenticated users are seen as authenticated <c0>unprotect</c0> : tout est ouvert, mais les utilisateurs authentifiés sont vus comme tels <check>: paragraph to display with a checkbox: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifCheck”><input type=“checkbox” />…</p> <check> : paragraphe à afficher avec une case à cocher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifCheck”><input type=“checkbox” />…</p> <e0>Example with MySQL</e0>: <e0>Exemple avec MySQL</e0>: <e0>Exemple with MySQL</e0>: <e0>Exemple avec MySQL</e0> : <e0>WHATTOTRACE</e0> must be replaced by the attribute or macro configured in the What To Trace parameter (REMOTE_USER) <e0>WHATTOTRACE</e0> doit être remplacé par l'attribut ou la macro configurée dans le paramètre indiquant le champ utilisateur à stocker dans les journaux (REMOTE_USER) <notification> element(s) : élément(s) <notification> : <s0># Best performance under ModPerl::Registry</s0> <s1># Uncomment this to increase performance of Portal</s1> <Perl> <s0># Meilleures performances sous ModPerl::Registry</s0> <s1># A décommenter pour augmenter les performances du portail</s1> <Perl> <s0># Common error page and security parameters</s0> <s1>ErrorDocument</s1> 403 http://auth.example.com/?lmError=403 <s2>ErrorDocument</s2> 500 http://auth.example.com/?lmError=500 <s3>ErrorDocument</s3> <s4>503</s4> http://auth.example.com/?lmError=<s5>503</s5> <s0># Common error page and security parameters</s0> <s1>ErrorDocument</s1> 403 http://auth.example.com/?lmError=403 <s2>ErrorDocument</s2> 500 http://auth.example.com/?lmError=500 <s3>ErrorDocument</s3> <s4>503</s4> http://auth.example.com/?lmError=<s5>503</s5> <s0># Get attributes (or macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Test if user is member of a Lemonldap::NG group (or LDAP mapped group)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> <s0># Obtenir des attributs (ou macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Tester si l'utilisateur est membre d'un groupe Lemonldap::NG (ou d'un groupe LDAP translaté)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> <s0># Perl environment</s0> PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm PerlRequire /root/SSOExtensions.pm PerlOptions +GlobalRequest <s0># Perl environment</s0> PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm PerlRequire /root/SSOExtensions.pm PerlOptions +GlobalRequest <s0># SAML2 Issuer</s0> <s0># Fournisseur d'identité SAML2</s0> <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> <s0># SOAP functions for sessions management (disabled by default)</s0> <s0># Gestion des fonctions SOAP functions pour la gestion des sessions (désactivée par défaut)</s0> <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> <s0># Uncomment this to activate status module</s0> <s0># Uncomment this to activate status module</s0> <s0># boolean macro</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># other macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Use a boolean macro in a rule</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Use a string macro in a HTTP header</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> <s0># macro booléenne</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># autre macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Utiliser une macro booléenne dans une règle</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Utiliser une macro chaîne dans un en-tête HTTP</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> <s0># group</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Use a group in a rule</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> <s0># groupe</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Utiliser un groupe dans une règle</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> <s0># rule</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># header</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> <s0># règle</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># en-tête</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ <s0>#!/usr/bin/perl</s0> <s1>use</s1> CGI <s2>':cgi-lib'</s2><s3>;</s3> <s4>use</s4> strict<s5>;</s5> <s6>use</s6> MIME<s7>::</s7><s8>Base64</s8><s9>;</s9> <s10>use</s10> CGI<s11>::</s11><s12>Carp</s12> <s13>'fatalsToBrowser'</s13><s14>;</s14> <s15>my</s15> <s16>$uri</s16> <s17>=</s17> <s18>$ENV</s18><s19>{</s19><s20>"REDIRECT_QUERY_STRING"</s20><s21>}</s21><s22>;</s22> <a23><s24>print</s24></a23> CGI<s25>::</s25><s26>header</s26><s27>(</s27><s28>-</s28>Refresh <s29>=></s29> <s30>'0; URL=http://auth.example.com/?'</s30><s31>.</s31><s32>$uri</s32><s33>)</s33><s34>;</s34> <a35><s36>exit</s36></a35><s37>(</s37>0<s38>)</s38><s39>;</s39> <s0>#!/usr/bin/perl</s0> <s1>use</s1> CGI <s2>':cgi-lib'</s2><s3>;</s3> <s4>use</s4> strict<s5>;</s5> <s6>use</s6> MIME<s7>::</s7><s8>Base64</s8><s9>;</s9> <s10>use</s10> CGI<s11>::</s11><s12>Carp</s12> <s13>'fatalsToBrowser'</s13><s14>;</s14> <s15>my</s15> <s16>$uri</s16> <s17>=</s17> <s18>$ENV</s18><s19>{</s19><s20>"REDIRECT_QUERY_STRING"</s20><s21>}</s21><s22>;</s22> <a23><s24>print</s24></a23> CGI<s25>::</s25><s26>header</s26><s27>(</s27><s28>-</s28>Refresh <s29>=></s29> <s30>'0; URL=http://auth.example.com/?'</s30><s31>.</s31><s32>$uri</s32><s33>)</s33><s34>;</s34> <a35><s36>exit</s36></a35><s37>(</s37>0<s38>)</s38><s39>;</s39> <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> <s0>## @method string getDisplayType</s0> <s1># @return display type</s1> <s2>sub</s2> getDisplayType <s3>{</s3> <s0>## @method string getDisplayType</s0> <s1># @return display type</s1> <s2>sub</s2> getDisplayType <s3>{</s3> <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> <s0>(?i)</s0> means case no sensitive. <s0>(?i)</s0> signifie insensible à la casse. <s0>+10m</s0>: ten minutes from session creation <s0>+10m</s0> : dix minutes après la création de la session <s0>+10y</s0>: ten years from session creation <s0>+10y</s0> : dix ans après la création de la session <s0>+1h</s0>: one hour from session creation <s0>+1h</s0> : une heure après la création de la session <s0>+30s</s0>: 30 seconds from session creation <s0>+30s</s0> : 30 secondes après la création de la session <s0>+3M</s0>: three months from session creation <s0>+3M</s0> : trois mois après la création de la session <s0>.css</s0>: <a1>CSS</a1> (styles) <s0>.css</s0>: <a1>CSS</a1> (styles) <s0>.js</s0>: Javascript <s0>.js</s0>: Javascript <s0>.tpl</s0>: <a1>Perl</a1> <a2>HTML</a2>::Template files, for <a3>HTML</a3> content <s0>.tpl</s0> : fichiers <a2>HTML</a2>::Template <a1>Perl</a1>, pour le contenu <a3>HTML</a3> <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> <s0><a1>API</a1> client ID</s0>: <a2>API</a2> client ID from Yubico <s0>Identifiant client de l'<a1>API</a1></s0> : identifiant client de l'<a2>API</a2> obtenu auprès de Yubico <s0><a1>API</a1> key</s0>: <a2>API</a2> key from Twitter <s0>Clef d'<a1>API</a1></s0>: clef d'<a2>API</a2> donnée par Twitter <s0><a1>API</a1> secret key</s0>: <a2>API</a2> secret key from Yubico <s0>Clef secrète de l'<a1>API</a1></s0> : clef secrète de l'<a2>API</a2> obtenue auprès de Yubico <s0><a1>API</a1> secret</s0>: <a2>API</a2> secret from Twitter <s0>Secret d'<a1>API</a1></s0>: secret d'<a2>API</a2> donné par Twitter <s0><a1>Application menu</a1></s0>: display authorized applications in categories <s0><a1>Menu des applications</a1></s0> : affiche les applications autorisées dans les catégories <s0><a1>CAS</a1> login</s0>: the session key used to fill user login (value will be transmitted to <a2>CAS</a2> clients). <s0>Identifiant <a1>CAS</a1></s0> : la clef de session à utiliser pour compléter le login (valeur transmise au clients <a2>CAS</a2>). <s0><a1>CAS</a1> session module name and options</s0>: choose a specific module if you do not want to mix <a2>CAS</a2> sessions and normal sessions (see <a3>why</a3>). <s0>Nom et options du module session <a1>CAS</a1></s0> : choisir un module spécifique pour ne pas mêler les sessions <a2>CAS</a2> et les sessions normales (voir <a3>pourquoi</a3>). <s0><a1>Configuration</a1></s0>: where configuration is stored. <s0><a1>Configuration</a1></s0>: où est stocké la configuration. <s0><a1>DBI</a1></s0> which has been deprecated: it is a read-only backend that exists just for compatibility with older versions of LemonLDAP::NG. <s0><a1>DBI</a1></s0> devenu obsolète : il reste un backend en lecture seule qui n'existe que pour la compatibilité avec les anciennes versions de LemonLDAP::NG. <s0><a1>HTML</a1> templates</s0>: in <lang> tags, add your translation, they will be automaticaly used Les <s0>modèles <a1>HTML</a1></s0>: dans les balises <lang>, ajoutez vos traductions, elles seront automatiquement utilisées <s0><a1>HTTP</a1></s0>: Service name <s0><a1>HTTP</a1></s0> : nom du service <s0><a1>Identity provider proxy</a1></s0>: <a2>LL::NG</a2> can be used as proxy translator between systems talking <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … <s0><a1>Proxy de fournisseurs d'identités</a1></s0> : <a2>LL::NG</a2> peut être utilisé comme traducteur mandataire entre systèmes comprenant <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … <s0><a1>LDAP</a1> attribute used in filter</s0>: attribute in <a2>LDAP</a2> directory to use in mapping <s0>Attribut <a1>LDAP</a1> pour le filtre</s0> : attribut de l'annuaire <a2>LDAP</a2> à utiliser dans les correspondances <s0><a1>LDAP</a1> password encoding</s0>: can allow to manage old <a2>LDAP</a2> servers using specific encoding for passwords (default: utf-8). <s0>Encodage de mot-de-passe <a1>LDAP</a1></s0> : peut servir à gérer les vieux serveurs <a2>LDAP</a2> en utilisant un encodage spécifique des mots-de-passe (défaut : utf-8). <s0><a1>Notifications</a1></s0>: messages displayed to connected users <s0><a1>Notifications</a1></s0>: messages à afficher aux utilisateurs connectés <s0><a1>Notifications</a1></s0>: prompt users with a message if found in the notification database <s0><a1>Notifications</a1></s0> : interrompt les utilisateurs avec un message s'il est trouvé dans la base de données des notifications <s0><a1>PGT</a1> file</s0>: temporary file where proxy tickets are stored (by default, <c2>/tmp/pgt.txt</c2>) <s0>Fichier <a1>PGT</a1></s0> : fichier temporaire où les tickets de proxy sont stockés (par défaut, <c2>/tmp/pgt.txt</c2>) <s0><a1>Portal</a1></s0>: used to authenticate users, display applications list and provides identity provider service (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). <s0><a1>Portail</a1></s0>: utilisé pour authentifier les utilisateurs, afficher la liste des applications et fournir le service d'identité (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). <s0><a1>SAML</a1> 2 Service</s0>: <a2>SAML</a2> metadata administration <s0>Service <a1>SAML</a1></s0> : administration des métadonnées <a2>SAML</a2> <s0><a1>SAML</a1> identity providers</s0>: Registered IDP <s0>Fournisseurs d'identité <a1>SAML</a1></s0> : IDP enregistrés <s0><a1>SAML</a1> service providers</s0>: Registered SP <s0>Fournisseurs de service <a1>SAML</a1></s0> : SP enregistrés <s0><a1>SMTP</a1> Password</s0>: <a2>SMTP</a2> password if authentication is required <s0>Mot-de-passe <a1>SMTP</a1></s0> : mot-de-passe <a2>SMTP</a2> si une authentification est requise <s0><a1>SMTP</a1> Server</s0>: <a2>IP</a2> or hostname of the <a3>SMTP</a3> server <s0>Serveur <a1>SMTP</a1></s0> : <a2>IP</a2> ou nom d'hôte du serveur <a3>SMTP</a3> <s0><a1>SMTP</a1> User</s0>: <a2>SMTP</a2> user if authentication is required <s0>utilisateur <a1>SMTP</a1></s0> : utilisateur <a2>SMTP</a2> si une authentification est requise <s0><a1>SMTP</a1></s0>: <s0><a1>SMTP</a1></s0> : <s0><a1>SOAP</a1> sessions end point</s0> (optional): <a2>SOAP</a2> end point, if not based on internal portal <a3>URL</a3> with <c4>index.pl/sessions</c4> suffix <s0>Point terminal des sessions <a1>SOAP</a1></s0> (optionnel): <a3>URL</a3> du service <a2>SOAP</a2> si elle n'est pas basée sur celle du portail interne avec le suffixe <c4>index.pl/sessions</c4> <s0><a1>SSL</a1> Required</s0>: if true, do not allow other authentication method if <a2>SSL</a2> certificate authentication fails (false by default). <s0><a1>SSL</a1> Requis</s0> : si activé, n'autorise pas d'autre méthode d'authentification si la vérification du certificat d'authentification <a2>SSL</a2> échoue (désactivé par défaut). <s0><a1>SSO</a1> and Application logout</s0>: the request is forwarded to application and <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1> et applicative</s0>: la requête est transmise à l'application et la session <a2>SSO</a2> est fermée <s0><a1>SSO</a1> binding</s0>: force binding to use for <a2>SSO</a2> (http-redirect, http-post, etc.) <s0>Méthode <a1>SSO</a1></s0> : force la méthode à utiliser pour le <a2>SSO</a2> (http-redirect, http-post, etc.) <s0><a1>SSO</a1> logout</s0>: the request is not forwarded to application, only the <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1></s0>: la requête n'est pas transmise à l'application, seule la session <a2>SSO</a2> est fermée <s0><a1>Sessions</a1></s0>: where sessions are stored. <s0><a1>Sessions</a1></s0>: où sont stockées les sessions. <s0><a1>URL</a1> parameter</s0>: parameter name used to set choice value (default: <c2>lmAuth</c2>) Paramètres d'<s0><a1>URL</a1></s0> : nom du paramètre utilisé pour stocker la valeur du choix (défaut: <c2>lmAuth</c2>) <s0><a1>URL</a1></s0>: <a2>URL</a2> of your society <s0><a1>URL</a1></s0>: <a2>URL</a2> de votre organisation <s0><a1>URL</a1></s0>: optional, can be used to redirect on another <a2>URL</a2> (for example <a3>https://authssl.example.com</a3>). <s0><a1>URL</a1></s0> : optionnel, peut être utilisée pour rediriger l'utilisateur vers une autre <a2>URL</a2> (par exemple <a3>https://authssl.example.com</a3>). <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>You have new authorizations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>You have been granted to access to appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>You have been granted to access to appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>I know that I can access to appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>I know that I can access to appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>This is your first access on this system<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Be a nice user and do not break it please.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Of course I am not evil!<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>Vous avez de nouvelles autorisations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>Vous êtes autorisé à accéder à appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>Vous êtes autorisé à accéder à appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>Je reconnais savoir que je peux accéder à appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>Je reconnais savoir que je peux accéder à appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>Ceci est votre premier accès à ce système<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Soyez sage et ne le cassez pas.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Bien sûr, je ne suis pas méchant !<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> <s0><s1><Organization<s2>></s2></s1></s0> <s0><s1><Organization<s2>></s2></s1></s0> <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>apply<s2>]</s2></s0>   # URL used to reload configuration reload.example.com<s3>=</s3><s4>http://reload.example.com/reload</s4> <s5>;reloaddist.example.com=http://reloaddist.example.com/reload</s5> <s0><s1>[</s1>apply<s2>]</s2></s0>   # URL à utiliser pour recharger la configuration reload.example.com<s3>=</s3><s4>http://reload.example.com/reload</s4> <s5>;reloaddist.example.com=http://reloaddist.example.com/reload</s5> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> <s0><s1>[</s1>handler<s2>]</s2></s0> # Set status to 1 if you want to have the report of activity <s3>(</s3>used for # example to inform MRTG<s4>)</s4> <s5>status</s5> <s6>=</s6><s7> 1</s7> <s0><s1>[</s1>handler<s2>]</s2></s0> # Set status to 1 if you want to have the report of activity <s3>(</s3>used for # example to inform MRTG<s4>)</s4> <s5>status</s5> <s6>=</s6><s7> 1</s7> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>applicationList</s3><s4>=</s4><s5><s6>{</s6> 'Menu' <s7>=</s7>> <s8>{</s8> type <s9>=</s9>> 'category', 'Example' <s10>=</s10>> <s11>{</s11> type <s12>=</s12>> 'category', 'test1' <s13>=</s13>> <s14>{</s14> type <s15>=</s15>> 'application', options <s16>=</s16>> <s17>{</s17> name <s18>=</s18>> 'Application Test <s19>1</s19>', uri <s20>=</s20>> 'http://test1.example.com/', description <s21>=</s21>> 'A simple application displaying authenticated user', logo <s22>=</s22>> 'wheels.png', display <s23>=</s23>> 'auto', <s24>}</s24>, <s25>}</s25>,'test2' <s26>=</s26>> <s27>{</s27> type <s28>=</s28>> 'application', options <s29>=</s29>> <s30>{</s30> name <s31>=</s31>> 'Application Test <s32>2</s32>', uri <s33>=</s33>> 'http://test2.example.com/', description <s34>=</s34>> 'The same simple application displaying authenticated user', logo <s35>=</s35>> 'wheels.png', display <s36>=</s36>> 'auto', <s37>}</s37>, <s38>}</s38>, <s39>}</s39>,'Administration' <s40>=</s40>> <s41>{</s41> type <s42>=</s42>> 'category', 'manager' <s43>=</s43>> <s44>{</s44> type <s45>=</s45>> 'application', options <s46>=</s46>> <s47>{</s47> name <s48>=</s48>> 'WebSSO Manager', uri <s49>=</s49>> 'http://manager.example.com/', description <s50>=</s50>> 'Configure LemonLDAP::NG WebSSO', logo <s51>=</s51>> 'tools.png', display <s52>=</s52>> 'on', <s53>}</s53>, <s54>}</s54>,'sessions' <s55>=</s55>> <s56>{</s56> type <s57>=</s57>> 'application', options <s58>=</s58>> <s59>{</s59> name <s60>=</s60>> 'Sessions explorer', uri <s61>=</s61>> 'http://manager.example.com/sessions.pl', description <s62>=</s62>> 'Explore WebSSO sessions', logo <s63>=</s63>> 'tools.png', display <s64>=</s64>> 'on', <s65>}</s65>, <s66>}</s66>, <s67>}</s67>,'Documentation' <s68>=</s68>> <s69>{</s69> type <s70>=</s70>> 'category', 'localdoc' <s71>=</s71>> <s72>{</s72> type <s73>=</s73>> 'application', options <s74>=</s74>> <s75>{</s75> name <s76>=</s76>> 'Local documentation', uri <s77>=</s77>> 'http://manager.example.com/doc/', description <s78>=</s78>> 'Documentation supplied with LemonLDAP::NG', logo <s79>=</s79>> 'docs.png', display <s80>=</s80>> 'on', <s81>}</s81>, <s82>}</s82>,'officialwebsite' <s83>=</s83>> <s84>{</s84> type <s85>=</s85>> 'application', options <s86>=</s86>> <s87>{</s87> name <s88>=</s88>> 'Offical Website', uri <s89>=</s89>> 'http://wiki.lemonldap.objectweb.org/xwiki/bin/view/NG/Presentation', description <s90>=</s90>> 'Official LemonLDAP::NG Website', logo <s91>=</s91>> 'web.png', display <s92>=</s92>> 'on', <s93>}</s93>, <s94>}</s94>, <s95>}</s95>, <s96>}</s96>, <s97>}</s97></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>applicationList</s3><s4>=</s4><s5><s6>{</s6> 'Menu' <s7>=</s7>> <s8>{</s8> type <s9>=</s9>> 'category', 'Example' <s10>=</s10>> <s11>{</s11> type <s12>=</s12>> 'category', 'test1' <s13>=</s13>> <s14>{</s14> type <s15>=</s15>> 'application', options <s16>=</s16>> <s17>{</s17> name <s18>=</s18>> 'Application Test <s19>1</s19>', uri <s20>=</s20>> 'http://test1.example.com/', description <s21>=</s21>> 'A simple application displaying authenticated user', logo <s22>=</s22>> 'wheels.png', display <s23>=</s23>> 'auto', <s24>}</s24>, <s25>}</s25>,'test2' <s26>=</s26>> <s27>{</s27> type <s28>=</s28>> 'application', options <s29>=</s29>> <s30>{</s30> name <s31>=</s31>> 'Application Test <s32>2</s32>', uri <s33>=</s33>> 'http://test2.example.com/', description <s34>=</s34>> 'The same simple application displaying authenticated user', logo <s35>=</s35>> 'wheels.png', display <s36>=</s36>> 'auto', <s37>}</s37>, <s38>}</s38>, <s39>}</s39>,'Administration' <s40>=</s40>> <s41>{</s41> type <s42>=</s42>> 'category', 'manager' <s43>=</s43>> <s44>{</s44> type <s45>=</s45>> 'application', options <s46>=</s46>> <s47>{</s47> name <s48>=</s48>> 'WebSSO Manager', uri <s49>=</s49>> 'http://manager.example.com/', description <s50>=</s50>> 'Configure LemonLDAP::NG WebSSO', logo <s51>=</s51>> 'tools.png', display <s52>=</s52>> 'on', <s53>}</s53>, <s54>}</s54>,'sessions' <s55>=</s55>> <s56>{</s56> type <s57>=</s57>> 'application', options <s58>=</s58>> <s59>{</s59> name <s60>=</s60>> 'Sessions explorer', uri <s61>=</s61>> 'http://manager.example.com/sessions.pl', description <s62>=</s62>> 'Explore WebSSO sessions', logo <s63>=</s63>> 'tools.png', display <s64>=</s64>> 'on', <s65>}</s65>, <s66>}</s66>, <s67>}</s67>,'Documentation' <s68>=</s68>> <s69>{</s69> type <s70>=</s70>> 'category', 'localdoc' <s71>=</s71>> <s72>{</s72> type <s73>=</s73>> 'application', options <s74>=</s74>> <s75>{</s75> name <s76>=</s76>> 'Local documentation', uri <s77>=</s77>> 'http://manager.example.com/doc/', description <s78>=</s78>> 'Documentation supplied with LemonLDAP::NG', logo <s79>=</s79>> 'docs.png', display <s80>=</s80>> 'on', <s81>}</s81>, <s82>}</s82>,'officialwebsite' <s83>=</s83>> <s84>{</s84> type <s85>=</s85>> 'application', options <s86>=</s86>> <s87>{</s87> name <s88>=</s88>> 'Offical Website', uri <s89>=</s89>> 'http://wiki.lemonldap.objectweb.org/xwiki/bin/view/NG/Presentation', description <s90>=</s90>> 'Official LemonLDAP::NG Website', logo <s91>=</s91>> 'web.png', display <s92>=</s92>> 'on', <s93>}</s93>, <s94>}</s94>, <s95>}</s95>, <s96>}</s96>, <s97>}</s97></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>userError</s3> <s4>=</s4><s5> sub <s6>{</s6> my <s7>(</s7>$self, $message<s8>)</s8> <s9>=</s9> @_</s5><s10>; ... }</s10> <s11>userNotice</s11> <s12>=</s12><s13> sub <s14>{</s14> my <s15>(</s15>$self, $message<s16>)</s16> <s17>=</s17> @_</s13><s18>; ... }</s18> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>userError</s3> <s4>=</s4><s5> sub <s6>{</s6> my <s7>(</s7>$self, $message<s8>)</s8> <s9>=</s9> @_</s5><s10>; ... }</s10> <s11>userNotice</s11> <s12>=</s12><s13> sub <s14>{</s14> my <s15>(</s15>$self, $message<s16>)</s16> <s17>=</s17> @_</s13><s18>; ... }</s18> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> <s0>APACHEGROUP</s0>: group running Apache <s0>APACHEGROUP</s0>: groupe de fonctionnement d'Apache <s0>APACHEUSER</s0>: user running Apache <s0>APACHEUSER</s0> : utilisateur de fonctionnement d'Apache <s0>APACHEVERSION</s0>: Apache major version (default: 2) <s0>APACHEVERSION</s0> : version majeure d'Apache (défaut : 2) <s0>Access control policy</s0>: define if access control should be done on <a1>CAS</a1> service. <s0>Politique de contrôle d'accès</s0> : definit si le contrôle d'accès doit être fait sur le service <a1>CAS</a1>. <s0>Account session key</s0>: session field used as Zimbra user account (by default: uid) <s0>clef de session compte</s0> : champ de session utilisé comme compte utilisateur Zimbra (par défaut : uid) <s0>Account type</s0>: for Zimbra this can be name, id or foreignKey (by default: id) <s0>Type de compte</s0> : pour Zimbra, ce peut être name, id ou foreignKey (par défaut : id) <s0>Account</s0>: <a1>DN</a1> used to connect to <a2>LDAP</a2> server. <s0>Compte</s0> : <a1>DN</a1> à utiliser pour se connecter au serveur <a2>LDAP</a2>. <s0>Activation</s0>: Set to On to enable Common Domain Cookie support. <s0>Activation</s0> : mettre à « activé » pour activer le support du domaine commun de cookie. <s0>Activation</s0>: set to <c1>On</c1> <s0>Activation</s0> : mettre à <c1>Activé</c1>. <s0>Activation</s0>: set to <c1>On</c1>. <s0>Activation</s0> : mettre à <c1>Activé</c1>. <s0>Adapt session lifetime</s0>: session lifetime will be adapted from <c1>SessionNotOnOrAfter</c1> value found in authentication response. <s0>Adaptation de la durée de vie de la session</s0> : la durée de vie de la session sera adaptée sur la base de la valeur de <c1>SessionNotOnOrAfter</c1> dans les réponses d'authentification. <s0>Address</s0>: <a1>URL</a1> of application <s0>Adresse</s0> : <a1>URL</a1> de l'application <s0>Address</s0>: set one of Google Apps <a1>URL</a1> (all Google Apps product a distinct <a2>URL</a2>), for example <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> <s0>Address</s0> : indiquer une des <a1>URL</a1> de Google Apps (chaque application Google Apps produit une <a2>URL</a2> distincte), par exemple <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ <s0>Allow login from IDP</s0>: allow a user to connect directly from an IDP link. <s0>Authentification depuis le fournisseur autorisée</s0> : autorise l'utilisateur à se connecter directement depuis un lien de l'IDP. <s0>Allow proxied authentication</s0>: allow an authentication response to be issued from another IDP that the one we register (proxy IDP). <s0>Authentification proxy autorisée</s0> : autorise qu'une réponse d'authentification soit issue d'un autre IDP que celui enregistré (proxy IDP). <s0>Allow requests in error</s0>: allow a request that has generated an error in token generation to be forwarded to the protected application without secure token (default: yes) <s0>Autorise les requêtes en cas d'erreur</s0> : autorise la requête qui a généré une erreur dans la génération du jeton à être transféré à l'application protégé sans jeton sécurisé (défaut : oui) <s0>Allowed modules</s0>: click on <c1>New choice</c1> to add a choice. <s0>Modules autorisés</s0> : cliquer sur <c1>Nouveau choix</c1> pour ajouter un choix. <s0>Anti iframe protection</s0>: will kill parent frames to avoid some well known attacks <s0>Protection anti-iframe</s0> : ferme la frame parente pour éviter des attaques bien connues <s0>Application list</s0>: display categories and applications allowed for the user <s0>Liste des applications</s0> : affiche les catégories et applications autorisée pour l'utilisateur <s0>Application logout</s0>: the request is forwarded to application but <a1>SSO</a1> session is not closed <s0>Déconnexion applicative</s0>: la requête est transmise à l'application mais la session <a1>SSO</a1> n'est pas détruite <s0>Application name</s0> (optional): Application name (visible in Twitter) <s0>Nom d'application</s0> (optionel) : nom de l'application (visible dans Twitter) <s0>Attribute to store</s0>: the session key that will be stored in Memcached. <s0>Attribut à stocker</s0> : la clef de session qui doit être stockée dans Memcached. <s0>Auth-Cn</s0>: $cn <s0>Auth-Cn</s0>: $cn <s0>Auth-Mail</s0>: $mail <s0>Auth-Mail</s0>: $mail <s0>Auth-User</s0>: $uid <s0>Auth-User</s0>: $uid <s0>Authenticate</s0>: contact authentication database to check credentials <s0>Authentifie</s0> : contacte le dispositif d'authentication pour vérification <s0>Authentication filter</s0>: Filter to find user from its login (default: <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) <s0>Filtre d'authentication</s0> : filtre pour trouver l'utilisateur à partir de son login (défaut : <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) <s0>Authentication level</s0>: authentication level for Radius module <s0>Niveau d'authentification</s0> : niveau d'authentification pour Radius <s0>Authentication level</s0>: authentication level for this module <s0>Niveau d'authentification</s0> : niveau d'authentification pour ce module <s0>Authentication level</s0>: authentication level for this module. <s0>Niveau d'authentification</s0> : niveau d'authentification accordé à ce module. <s0>Authentication service</s0> of course Le <s0>service d'authentification</s0> bien sûr <s0>Authentication table</s0>: authentication table name <s0>Table d'authentification</s0> : nom de la table d'authentification <s0>Authentication</s0>: how authenticate users <s0>Authentification</s0>: comment authentifier les utilisateurs <s0>Authorizated domain</s0>: <s0>Domaines autorisés</s0> : <s0>Authorized domains</s0>: white list or black list of OpenID client domains (<s1><a2>see below</a2></s1>). <s0>Domaines autorisés</s0> : liste blanche ou noire des domaines clients OpenID (<s1><a2>voir ci-dessous</a2></s1>). <s0>Auto complete</s0>: allow the browser to remember the password (for password based authentication backends) <s0>Auto complétion</s0> : autorise le navigateur à retenir le mot-de-passe (pour les backends d'authentification basés sur des mots-de-passe) <s0>Auto login</s0> is very secure for Sympa 5, as Sympa cookie is only exchanged between <a1>LL::NG</a1> Handler and Sympa (user cannot see it) <s0>Auto login</s0> est très sécurisé pour Sympa 5 car le cookie Sympa est seulement échangé entre le handler <a1>LL::NG</a1> et Sympa (les utilisateurs ne le voient pas) <s0>Auto login</s0> is very secure, as Sympa cookie is only exchanged between <a1>LL::NG</a1> Handler and Sympa (user cannot see it) <s0>Auto login</s0> est très sécurisé car le cookie Sympa est seulement échangé entre le handler <a1>LL::NG</a1> et Sympa (les utilisateurs ne le voient pas) <s0>Auto login</s0>: a special <a1>LL::NG</a1> Handler will generate Sympa cookie <s0>Auto login</s0>: handler spécial de <a1>LL::NG</a1> qui génère le cookie Sympa <s0>Auto login</s0>: a special <a1>LL::NG</a1> Handler will generate Sympa cookie (for Sympa 5 only !) <s0>Auto login</s0>: handler spécial de <a1>LL::NG</a1> qui génère le cookie Sympa (pour Symp 5 seulement !) <s0>Auto login</s0>: set to 1 to use auto login. <s0>Authentification automatique</s0> : mettre à 1 pour utiliser la connexion automatique. <s0>Backgound color</s0>: Background color displayed in the BrowserID login window <s0>Couleur d'arrière plan</s0> : Couleur d'arrière plan affichée dans la fenêtre d'authentification BrowserID <s0>Binary attributes</s0>: regular expression matching binary attributes (see <a1>Net::LDAP</a1> documentation). <s0>Attributs binaires</s0> : expression régulière correspondant aux attributs binaires (voir la documentation <a1>Net::LDAP</a1>). <s0>Build cookie</s0>: build <a1>SSO cookies</a1> with session ID <s0>Construit les cookies</s0>: construit les <a1>cookies SSO</a1> avec l'identifiant de session <s0>CA file</s0>: CA certificate used to validate <a1>CAS</a1> server certificate <s0>Fichier CA</s0> : certificat de la CA utilisée pour valider le certificat du serveur <a1>CAS</a1> <s0>CDBI</s0> : very simple storage <s0>CDBI</s0> : stockage très simple <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> <s0>CRONDIR</s0>: Cronfile directory (default: $PREFIX/etc/lemonldap-ng/cron.d) <s0>CRONDIR</s0> : répertoire des fichiers cron (défaut: $PREFIX/etc/lemonldap-ng/cron.d) <s0>Cache</s0>: cache for configuration and sessions <s0>Cache</s0>: cache pour la configuration et les sessions <s0>Chain</s0>: <a1>DBI</a1> chain, including database driver name and database name (for example: dbi:mysql:database=lemonldapng;host=localhost). <s0>Chaîne</s0> : chaîne <a1>DBI</a1>, contenant le nom de driver et le nom de la base de données (par exemple : dbi:mysql:database=lemonldapng;host=localhost). <s0>Change as user</s0>: enable to perform password modification with credentials of connected user. <s0>Change comme utilisateur</s0> : active la modification du mot-de-passe avec les éléments d'authentification de l'utilisateur connecté. <s0>Change password <a1>URL</a1></s0>: where users can change their password. <s0>Change password <a1>URL</a1></s0>: où les utilisateurs peuvent changer leur mot-de-passe. <s0>Changes</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Changements</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) <s0>Changes</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> (<a2>Archives</a2>) <s0>Changements</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> (<a2>Archives</a2>) <s0>Check <a1>SSO</a1> message signature</s0>: check <a2>SSO</a2> message signature <s0>Vérification de la signature des messages <a1>SSO</a1></s0> : vérifie la signature des messages <a2>SSO</a2> <s0>Check <a1>XSS</a1> Attacks</s0>: Set to 'Off' to disable <a2>XSS</a2> checks. <s0>Contrôler les attaques <a1>XSS</a1></s0> : mettre à 'désactivé' pour désactiver la détection des attaques <a2>XSS</a2>. <s0>Check SLO message signature</s0>: check SLO message signature <s0>Vérifie la signature des messages SLO</s0> : vérifie la signature des messages SLO <s0>Check conditions</s0>: set to Off to disable conditions checking on authentication responses. <s0>Vérifier les conditions</s0> : active ou désactive, l'examen des conditions dans les réponses d'authentification. <s0>Check last logins</s0>: displays a checkbox on login form, allowing user to check his login history right after opening session <s0>Vérifier l'historique</s0> : affiche une case à cocher sur le formulaire d'authentification permettant à l'utilisateur d'examiner son historique de connexion après l'ouverture de la session <s0>Clément “KPTN” OUDOT</s0>: developer, graphics, documentation, community management <s0>Clément “KPTN” OUDOT</s0>: développeur, concepteur graphique, concepteur de la documentation, gestionnaire de la communité <s0>Clément “KPTN” OUDOT</s0>: project leader, lead developer, graphics, documentation, community management <s0>Clément “KPTN” OUDOT</s0> : Leader du projet, développeur principal, graphisme, documentation, gestion de la communauté <s0>Common domain</s0>: Name of the common domain (where common cookie is available). <s0>Domaine commun</s0> : Nom du domaine commun (où le cookie commun est disponible). <s0>Confirmation mail content</s0> (optional): Content of mail sent when password change is asked <s0>Contenu du message de confirmation</s0> (optionnel) : contenu du courriel envoyé lorsque le changement de mot-de-passe est demandé <s0>Confirmation mail subject</s0>: Subject of mail sent when password change is asked (default: [LemonLDAP::NG] Password reset confirmation) <s0>Sujet du message de confirmation</s0> : sujet du courriel envoyé lorsque le changement de mot-de-passe est demandé (défaut: [LemonLDAP::NG] Password reset confirmation) <s0>Control <a1>URL</a1> origin</s0>: prevent <a2>XSS</a2> attacks and bad redirections <s0>Vérification de l'<a1>URL</a1> demandée</s0> : prévient les attaques <a2>XSS</a2> et les mauvaises redirections <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections <s0>Control existing session</s0>: detect <a1>SSO</a1> session, apply configured constraints (1 session per user, 1 session per <a2>IP</a2>, …) <s0>Recherche d'une session valide</s0> : détecte les sessions <a1>SSO</a1>, applique les contraintes configurées (1 session par utilisateur, 1 session par <a2>IP</a2>, …) <s0>Cookie expiration time</s0>: by default, <a1>SSO</a1> cookie is a session cookie, which mean it will be destroyed when the browser is closed. <s0>Durée de vie du cookie</s0> : par défaut, le cookie <a1>SSO</a1> est un cookie de session, ce qui signifie qu'il n'est pas conservé lorsque le navigateur est clos. <s0>Cookie name</s0> (optional): name of the cookie of internal portal, if different from external portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail interne s'il est différent de celui du portail externe <s0>Cookie name</s0> (optional): name of the cookie of primary portal, if different from secondary portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail primaire, s'il est différent de celui du portail secondaire <s0>Cookie name</s0>: name of the cookie, can be changed to avoid conflicts with other LemonLDAP::NG installations <s0>Nom de cookie</s0> : nom du cookie, peut être changé pour éviter les conflits avec d'autres installations LemonLDAP::NG <s0>Current</s0>: to extract all configuration history <s0>Current</s0> : pour extraire tout l'historique de la configuration <s0>DESTDIR</s0>: only for packaging, install the product in a jailroot (default: ””) <s0>DESTDIR</s0> : seulement pour la mise en paquet, installer le produit dans une cage (défaut : ””) <s0>DNSDOMAIN</s0>: Main <a1>DNS</a1> domain (default: example.com) <s0>DNSDOMAIN</s0> : domaine <a1>DNS</a1> proncipal (défaut : example.com) <s0>David COUTADEUR</s0>: developer, tester <s0>David COUTADEUR</s0> : developeur, testeur <s0>Default NameID format</s0>: if no NameID format is requested, or the NameID format undefined, this NameID format will be used. <s0>Format de NameID par défaut</s0> : si aucun fiormat de NameID n'est demandé, ou si le format n'est pas défini, ce format de NameID sera utilisé. <s0>Default filter</s0>: default <a1>LDAP</a1> fitler for searches, should not be modified. <s0>Filtre par défaut</s0> : filtre <a1>LDAP</a1> par défaut pour les recherches, ne devrait pas être modifié. <s0>Default rule</s0>: who can access to the application <s0>Règle default</s0> : qui peut accéder à l'application <s0>Default</s0>: will this binding be used by default for authentication response. <s0>Défaut</s0> : déclaration utilisée par défaut pour les réponses d'authentification. <s0>Developers</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Développeurs</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) <s0>Developers</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> (<a2>Archives</a2>) <s0>Développeurs</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> (<a2>Archives</a2>) <s0>Display Name</s0>: should be displayed on IDP, this is often your society name <s0>Nom affiché (display name)</s0> : peut être affiché par le fournisseur d'identité (IDP), this is often your society name <s0>Display deleted sessions</s0>: display deleted sessions on authentication phase. <s0>Afficher les sessions effacées</s0> : affiche les sessions effacées lors de la phase d'authentification. <s0>Display other sessions </s0>: display other sessions on authentication phase, with a link to delete them. <s0>Afficher les autres sessions</s0> : affiche les autres sessions ouvertes lors de la phase d'authentification avec un lien pour les effacer. <s0>Display</s0>: <s0>Affichage</s0> : <s0>Display</s0>: As Google Apps is not a protected application, set to <c1>On</c1> to always display it <s0>Display</s0> : comme Google Apps n'est pas une application protégée, indiquer <c1>On</c1> pour toujours l'afficher <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ <s0>Documentation</s0>: use <a1>OmegaT</a1> to translate offline documentation and configure it: <s0>Documentation</s0>: utilisez <a1>OmegaT</a1> pour traduire la dcumentation hors-ligne et configurez le : <s0>Domain</s0>: validity domain for the cookie (the cookie will not be sent on other domains) <s0>Domaine</s0> : domaine de valaidité du cookie (le cookie n'est pas envoyé vers d'autres domaines) <s0>Double cookie for single session</s0>: as same, two cookies are delivered, but only one session is written in session database <s0>Double cookie pour session unique</s0> : de même, deux cookies sont délivrés, mais une seule session n'est écrite dans la base de données <s0>Double cookie</s0>: two cookies are delivered, one for <a1>HTTP</a1> and HTTPS connections, the other for HTTPS only <s0>Double cookie</s0> : deux cookies sont délivrés, un pour les connexions <a1>HTTP</a1> et HTTPS, l'autre seulement pour HTTPS <s0>ERASECONFIG</s0>: set to 0 if you want to keep your configuration files (default: 1) <s0>ERASECONFIG</s0> : mettre à 0 pour conserver les fichiers de configuration (défaut : 1) <s0>EXAMPLE.COM</s0>: Kerberos realm <s0>EXAMPLE.COM</s0> : royaume Kerberos <s0>Enable Single Sign-On</s0>: check the box. <s0>Enable Single Sign-On</s0>: sélectionner. <s0>Enabled</s0>: Yes <s0>Enabled</s0>: Yes <s0>Encryption key</s0>: key used to crypt some data, should not be known by other applications <s0>Clef de chiffrement</s0> : clef utilisée pour chiffrer certaines données, ne doit être connue d'aucune autre application <s0>Encryption mode</s0>: set the encryption mode for this IDP (None, NameID or Assertion). <s0>Mode de chiffrement</s0> : fixe le mode de chiffrement pour cet IDP (None, NameID ou Assertion). <s0>ErrorDocument</s0> 403 http://auth.example.com/?lmError=403 <s1>ErrorDocument</s1> 500 http://auth.example.com/?lmError=500 <s2>ErrorDocument</s2> <s3>503</s3> http://auth.example.com/?lmError=<s4>503</s4> <s0>ErrorDocument</s0> 403 http://auth.example.com/?lmError=403 <s1>ErrorDocument</s1> 500 http://auth.example.com/?lmError=500 <s2>ErrorDocument</s2> <s3>503</s3> http://auth.example.com/?lmError=<s4>503</s4> <s0>ErrorDocument</s0> 403 http://auth.example.com/?lmError=403 <s1>ErrorDocument</s1> <s2>500</s2> http://auth.example.com/?lmError=<s3>500</s3> <s0>ErrorDocument</s0> 403 http://auth.example.com/?lmError=403 <s1>ErrorDocument</s1> <s2>500</s2> http://auth.example.com/?lmError=<s3>500</s3> <s0>Exceptions</s0>: allow anonymous access for specific URLs (connectors, etc.) <s0>Exceptions</s0> : autoriser l'accès anonyme pour les URLs spécifiques (connecteurs, etc.) <s0>External databases</s0>: not managed by LemonLDAP::NG, for example user database Les <s0>bases de données externes</s0>: non gérées par LemonLDAP::NG, par exemple la base des utilisateurs <s0>Extract form info</s0>: get login/password, certificate, environment variable (depending on authentication module) <s0>Extrait les informations du formulaire</s0>: récupère le couple compte/mot-de-passe, le certificat, une variable d'environnement (suivant le module d'authentification) <s0>Extract form info</s0>: get login/password, certificate, environment varibale (depending on authentication module) <s0>Extrait les informations du formulaire</s0> : récupère compte/mot-de-passe, certificat, variables d'environnement (suivant le module d'authentification) <s0>Extracted certificate field</s0>: field of the certificate affected to $user internal variable <s0>Champ extrait du certificat</s0> : champ du certificat affecté à la variable interne $user <s0>Facebook application ID</s0>: the application ID you get <s0>ID de l'application Facebook</s0> : l'identifiant d'application obtenu <s0>Facebook application secret</s0>: the corresponding secret <s0>Secret de l'application Facebook</s0> : le secret correspondant <s0>Force UTF-8</s0>: this will force UTF-8 conversion of attributes values collected from IDP. <s0>Forcer l'UTF-8</s0> : force la conversion UTF-8 des valeurs d'attributs collectées depuis l'IDP. <s0>Force authentication</s0>: set ForceAuthn flag in authentication request <s0>Authentification forcée</s0> : positionne le drapeau ForceAuthn dans la requête d'authentification <s0>Force authentication</s0>: set to 'On' to force authentication when user connects to portal, even if he has a valid session <s0>Forcer l'authentification</s0> : mettre à 'Activé' pour forcer l'authentification lorsque l'utilisateur accède au portail même s'il dispose d'une session valide <s0>Format</s0> (optional): <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. <s0>Format</s0>: optional, <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. <s0>François-Xavier DELTOMBE</s0>: developer, tester <s0>François-Xavier DELTOMBE</s0> : developeur, testeur <s0>Friendly Name</s0>: optional, <a1>SAML</a1> attribute friendly name. <s0>Nom alternatif</s0>: optionnel, nom alternatif de l'attribut <a1>SAML</a1>. <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> <s0>Gateways authentication</s0>: force transparent authentication on <a1>CAS</a1> server <s0>Authentification des passerelles</s0> : force l'authentification transparente sur le serveur <a1>CAS</a1> <s0>General Parameters</s0>: authentication modules, portal, etc. <s0>Paramètres généraux</s0> : modules d'authentification, portail, etc... <s0>Get user info</s0>: contact user database to collect attributes <s0>Récupère les informations utilisateur</s0> : contacte la base de données utilisateurs pour les obtenir <s0>Grant session</s0>: check rights to open <a1>SSO</a1> session <s0>Autorise la session</s0> : vérifie le droit d'ouvrir une session <a1>SSO</a1> <s0>Group source attribute</s0>: name of the attribute in groups entries used in the link, for recursive group search (default: dn). <s0>Attribut source du groupe</s0> : nom de l'attribut dans l'entrée groupe utilisé dans le lien pour la recherche récursive de groupe (défaut : dn). <s0>HTTPS</s0>: use https as protocol <s0>HTTPS</s0> : utilise https comme protocole <s0>Handler</s0>: Apache modules used to protect applications <s0>Agent</s0> (Handler): module Apache utilisé pour protéger les applications <s0>Handler</s0>: user is redirected if he has no <a1>SSO</a1> cookie (or in <a2>CDA</a2> mode) les <s0>agents (handlers)</s0> : l'utilisateur y est redirigé s'il n'a pas de cookie <a1>SSO</a1> (ou en mode <a2>CDA</a2>) <s0>Hash schema</s0>: <a1>SQL</a1> method for hashing password. <s0>Schéma de hachage</s0> : méthode <a1>SQL</a1> pour hacher les mots-de-passe. <s0>Header for user login</s0>: header that contains the user main login <s0>En-tête identifiant l'utilisateur</s0> : en-tête contenant le nom de connexion <s0>Header name</s0>: name of the <a1>HTTP</a1> header carrying the secure token. <s0>Nom d'en-tête</s0> : nom de l'en-tête <a1>HTTP</a1> véhiculant le jeton sécurisé. <s0>Hide old password</s0>: used only if the password need to be reset by the user (<a1>LDAP</a1> password policy), will hide the old password input <s0>Masque l'ancien mot-de-passe</s0> : utilisé seulement si le mot-de-passe doit être réinitialisé par l'utilisateur (politique de mots-de-passe <a1>LDAP</a1>), masque l'ancien mot-de-passe dans le formulaire <s0>How do users authenticate?</s0>: by login <s0>How do users authenticate?</s0>: by login <s0>IDP resolution cookie name</s0>: by default, it's the <a1>LL::NG</a1> cookie name suffixed by <c2>idp</c2>, for example: <c3>lemonldapidp</c3>. <s0>Nom du cookie de résolution de l'IDP</s0>: par défaut, c'est le nom du cookie <a1>LL::NG</a1> auquel est adjoint <c2>idp</c2>, par exemple: <c3>lemonldapidp</c3>. <s0>Identity provider</s0>: <a1>LL::NG</a1> is able to provide identity service using: <s0>Fournisseur d'identité</s0> : <a1>LL::NG</a1> peut fournir un service d'identité en utilisant : <s0>Import from <a1>LDAP</a1></s0>: Yes (see <a2>presentation</a2>) <s0>Import from <a1>LDAP</a1></s0>: Yes (voir <a2>présentation</a2>) <s0>Internal <a1>SOAP</a1> server</s0> used by <a2>SOAP configuration backend</a2> and usable for specific development (see <a3>SOAP services</a3> for more) <s0>Serveur <a1>SOAP</a1> interne</s0> utilisé par le <a2>backend de configuration SOAP</a2> et utilisable pour des développements spécifiques (voir les <a3>services SOAP</a3>) <s0>Internal databases</s0>: only used by LemonLDAP::NG Les <s0>bases de données internes</s0>: utilisées seulement par LemonLDAP::NG <s0>Javascript protection</s0>: set httpOnly flag, to avoid cookie been caught by javascript code <s0>Protection Javascript</s0> : active le drapeau httpOnly pour éviter que le cookie ne soit accessible par code javascript <s0>Key name</s0>: Text displayed on choice tab. <s0>Nom de clef</s0> : Texte à afficher sur l'onglet. <s0>Key name</s0>: name of the key in LemonLDAP::NG session <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG <s0>Key name</s0>: name of the key in LemonLDAP::NG session (for example “uid” will then be used as $uid in access rules) <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG (par exemple “uid” équivaut à $uid dans les règles d'accès) <s0>Key</s0>: Service ID <s0>Clef</s0> : Service ID <s0>Key</s0>: application identifier <s0>Clef</s0> : identifiant d'application <s0>Key</s0>: application name <s0>Key</s0> : nom d'application <s0>Key</s0>: category identifier <s0>Clef</s0> : identifiant de catégorie <s0>Key</s0>: internal session key, can be prefixed by <c1>!</c1> to make the attribute required <s0>Clef</s0> : clef de session interne, peut être prefixé par <c1>!</c1> pour exiger ces attributs <s0>LDAPHOST</s0>: <a1>LDAP</a1> server (default: localhost) <s0>LDAPHOST</s0> : serveur <a1>LDAP</a1> (défaut : localhost) <s0>LDAPPORT</s0>: <a1>LDAP</a1> port (default: 389) <s0>LDAPPORT</s0> : port <a1>LDAP</a1> port (défaut : 389) <s0>LDAPSUFFIX</s0>: <a1>LDAP</a1> suffix (default: dc=example,dc=com) <s0>LDAPSUFFIX</s0>: suffixe <a1>LDAP</a1> (défaut : dc=example,dc=com) <s0>List type</s0>: choose white list to define allowed domains or black list to define forbidden domains <s0>Type de liste</s0> : choisir liste blanche pour définir la liste exhaustive des domaines autorisés ou liste noire pour lister les domaines interdits <s0>List</s0>: domains list (comma separated values) <s0>Liste</s0> : liste des domaines (séparés par des virgules) <s0>LmCookieDomainToReplace</s0>: string to replace in <c1>Set-Cookie</c1> header <s0>LmCookieDomainToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Set-Cookie</c1> <s0>LmLocationToReplace</s0>: string to replace in <c1>Location</c1> header <s0>LmLocationToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Location</c1> <s0>LmProxyPass</s0>: <a1>URL</a1> to relay <a2>HTTP</a2> requests <s0>LmProxyPass</s0> : <a1>URL</a1> pour relayer les requêtes <a2>HTTP</a2> <s0>Local <a1>SSO</a1> <a2>URL</a2> pattern</s0>: regular expression to match the <a3>SSO</a3> <a4>URL</a4> (by default: ^/zimbrasso$) <s0>Expression de correspondance de l'<a2>URL</a2> <a1>SSO</a1></s0> : expression régulière de correspondance de l'<a4>URL</a4> <a3>SSO</a3> (par défaut : ^/zimbrasso$) <s0>Location</s0>: Access Point for <a1>SSO</a1> request and response. <s0>Location</s0>: Point d'accès des requêtes et réponses <a1>SSO</a1>. <s0>Location</s0>: Access Point for <a1>SSO</a1> request. <s0>Location</s0>: Point d'accès pour les requêtes <a1>SSO</a1>. <s0>Location</s0>: Access Point for SLO request. <s0>Location</s0>: Point d'accès pour les requêtes de SLO. <s0>Login field name in user table</s0>: name of user table column hosting login <s0>Nom du champ login dans la table utilisateur</s0> : nom de la colonne de la table utilisateur contenant le login <s0>Login field name</s0>: name of authentication table column hosting login <s0>Nom du champ de compte</s0> : nom de la colonne de la table d'authentification contenant le login <s0>Login history</s0>: display user's last logins and last failed logins <s0>Historique de connexion</s0> : affiche les derniers succès et échecs de connexion <s0>Logo</s0>: file name to use as logo <s0>Logo</s0> : nom de fichier à utiliser comme logo <s0>Logout rule</s0>: catch OBM logout <s0>Règle logout</s0> : intercepter la déconnexion OBM <s0>Logout</s0>: logout button <s0>Déconnexion</s0> : bouton de déconnexion <s0>Magic authentication</s0> allows to mix standard Sympa authentication and <a1>SSO</a1> <s0>Magic authentication</s0> autorise l'utilisation de l'authentification Sympa et <a1>SSO</a1> <s0>Magic authentication</s0>: a special <a1>SSO</a1> <a2>URL</a2> is protected by <a3>LL::NG</a3>, Sympa will display a button for users who wants to use this feature. <s0>Magic authentication</s0>: une <a2>URL</a2> <a1>SSO</a1> spéciale est protégée pas <a3>LL::NG</a3>, Sympa affiche un bouton pour les utilisateurs souhaitant bénéficier de cette fonction. <s0>Mail charset</s0>: Charset used for the body of the mail (default: utf-8) <s0>Jeu de caractères du courriel</s0> : jeu de caractère utilisé pour le corps du message (défaut : utf-8) <s0>Mail content</s0>: <s0>Contenu du courriel</s0> : <s0>Mail field name</s0>: name of authentication table column hosting mail (for password reset) <s0>Nom du chmap mail</s0> : nom de la colonne de la table d'authentification contenant le mail (pour la réinitialisation du mot-de-passe) <s0>Mail filter</s0>: Filter to find user from its mail (default: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0>Filtre mail</s0> : filtre pour trouver l'utilisateur à partir de son mail (défaut: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0>Mail headers</s0>: <s0>En-têtes de courriel</s0> : <s0>Mail sender</s0>: address seen in the “From” field (default: noreply@[DOMAIN]) <s0>Expéditeur</s0> : adresse vue dans le champ “From” (défaut : noreply@[DOMAINE]) <s0>Mail session key</s0>: session field where to find user mail (by default: mail) <s0>Clef de session mail</s0> : champ de session pour trouver l'adresse mail des utilisateurs (par défaut : mail) <s0>Manager interface</s0>: all messages are grouped in lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. L'<s0>interface du Manager</s0>: tous les messages sont regroupés dans lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. <s0>Manager</s0>: used to manage LemonLDAP::NG configuration and to explore sessions. <s0>Manager</s0>: utilisé pour gérer la configuration LemonLDAP::NG et explorer les sessions. <s0>Mandatory</s0>: if set to On, then session will not open if this attribute is not given by IDP. <s0>Obligatoire</s0> : si activé, les sessions ne seront ouvertes que si l'attribut est fourni par l'IDP. <s0>Mandatory</s0>: if set to “On”, then this attribute will be sent in authentication response. <s0>Obligatoire</s0> : si activé, cet attribut sera envoyé dans les réponses d'authentification. <s0>Master's <a1>IP</a1> address</s0>: the <a2>IP</a2> addresses of servers which are accredited to authenticate user. <s0>Adresse <a1>IP</a1> du maître</s0> : les adresses <a2>IP</a2> des serveurs autorisés à authentifier les utilisateurs. <s0>Memcached servers</s0>: addresses of Memcached servers, separated with spaces. <s0>Serveurs Memcached</s0> : adresses des serveurs Memcached, separés par des espaces. <s0>Multiple domains</s0>: enable <a1>cross domain mechanism</a1> (without this, you cannot extend <a2>SSO</a2> to other domains) <s0>Domaines multiples</s0> : active le <a1>mécanisme inter-domaines</a1> (sans ceci, on ne peut pas étendre le <a2>SSO</a2> aux autres domaines) <s0>Multiple sessions</s0>, you can restrict the number of open sessions: <s0>Sessions multiples</s0>, on peut retreindre le nombre de sessions ouvertes : <s0>Name</s0>: <a1>SAML</a1> attribute name. <s0>Nom</s0>: Nom de l'attribut <a1>SAML</a1>. <s0>Name</s0>: display text <s0>Nom</s0> : texte à afficher <s0>Name</s0>: internal name <s0>Name</s0>: nom interne <s0>NameID format</s0>: force NameID format here (email, persistent, transient, etc.). <s0>Format du NameID</s0> : force le format du NameID (email, persistent, transient, etc.). <s0>NameVirtualHost</s0> *:80 <s1>NameVirtualHost</s1> *:<s2>443</s2> <s0>NameVirtualHost</s0> *:80 <s1>NameVirtualHost</s1> *:<s2>443</s2> <s0>NameVirtualHost</s0> *:<s1>80</s1> <s0>NameVirtualHost</s0> *:<s1>80</s1> <s0>New window</s0>: open menu links in new window <s0>Nouvelle fenêtre</s0> : ouvre les liens du menu dans de nouvelles fenêtres <s0>New</s0>: to write all configuration history <s0>New</s0> : pour écrire l'historique de la configuration <s0>Non secured cookie</s0>: the cookie can be sent over <a1>HTTP</a1> and HTTPS connections <s0>Cookie non sécurisé</s0> : le cookie peut être envoyé via des connexions <a1>HTTP</a1> et HTTPS <s0>OTP public ID part size</s0>: Part of Yubikey OTP that will be used as the media identifier (default: 12) <s0>Taille de la partie publique de l'OTP</s0> : Partie du mot-de-passe unique Yubikey utilisée pour identifier les matériels (défaut: 12) <s0>Object class</s0>: objectClass of the groups (default: groupOfNames). <s0>Classe d'object</s0>: objectClass du groupe (défaut: groupOfNames). <s0>One <a1>IP</a1> only by user</s0>: a user can not open 2 sessions with different <a2>IP</a2>. <s0>Une <a1>IP</a1> par utilisateur</s0> : un utilisateur ne peut ouvrir 2 sessions avec différentes adresses <a2>IP</a2>. <s0>One <a1>IP</a1> only by user</s0>: a user can not open 2 sessions with the same <a2>IP</a2>. <s0>Une <a1>IP</a1> par utilisateur</s0> : un utilisateur ne peut ouvrir 2 sessions la même adresse <a2>IP</a2>. <s0>One Time Use</s0>: set the OneTimeUse flag in authentication response. <s0>Usage unique</s0> : active le drapeau OneTimeUse dans les réponses d'authentification. <s0>One session only by user</s0>: a user can not open 2 sessions with the same account. <s0>Une session seulement par utilisateur</s0> : on ne peut ouvrir 2 sessions avec le même compte. <s0>One user by <a1>IP</a1> address</s0>: 2 users can not open a session with the same <a2>IP</a2>. <s0>Un utilisateur par adresse <a1>IP</a1></s0> : 2 utilisateurs ne peuvent ouvrir de sessions avec la même adresse <a2>IP</a2>. <s0>OpenID login</s0>: the session key used to match OpenID login. <s0>Identificant OpenID</s0> : la clef de session utilisée pour correspondre au login OpenID. <s0>Opening conditions</s0>: rules which are evaluated before granting session. <s0>Conditions d'ouverture</s0> : règles à évaluer avant d'autoriser l'ouverture de session. <s0>Optimized</s0> for <a1>session explorer</a1> and <a2>single session</a2> features. <s0>Optimisé</s0> pour l'<a1>explorateur de sessions</a1> et les fonctionnalités de <a2>session unique</a2>. <s0>Other</s0>: <s0>Autres</s0> : <s0>POST <a1>URL</a1></s0>: /login.php <s0><a1>URL</a1> POST</s0>: /login.php <s0>PREFIX</s0>: installation directory (default: /usr/local) <s0>PREFIX</s0> : répertoire d'installation (défaut : /usr/local) <s0>Page <a1>URL</a1></s0>: <a2>URL</a2> of password reset page (default: [PORTAL]/mail.pl) <s0><a1>URL</a1> de la page</s0> : <a2>URL</a2> de la page de réinitialisation de mot-de-passe (défaut : [PORTAL]/mail.pl) <s0>Passive authentication</s0>: set IsPassive flag in authentication request <s0>Authentification passive</s0> : positionne le drapeau IsPassive dans la requête d'authentification <s0>Password Management</s0>: <s0>Gestion des mots-de-passe</s0> : <s0>Password change</s0>: form to change the password <s0>Changement de mot-de-passe</s0> : formulaire de changement de mot-de-passe <s0>Password field name</s0>: name of authentication table column hosting password <s0>Nom du champ mot-de-passe</s0> : nom de la colonne de la table d'authentification contenant le mot-de-passe <s0>Password modify extended operation</s0>: enable to use the <a1>LDAP</a1> extended operation <c2>password modify</c2> instead of standard modify operation. <s0>Opération étendue de modification de mot-de-passe</s0> : active l'utilisation de l'opération étendue de <c2>modification de mot-de-passe</c2> <a1>LDAP</a1> au lieu de l'opération standard. <s0>Password policy control</s0>: enable to use <a1>LDAP</a1> password policy. <s0>Contrôle de politique de mot-de-passe</s0> : active l'utilisation de la politique de mots-de-passe <a1>LDAP</a1>. <s0>Password</s0>: Connection password <s0>Mot-de-passe</s0> : mot-de-passe du compte de connexion <s0>Password</s0>: password to used to connect to <a1>LDAP</a1> server. <s0>Mot-de-passe</s0> : mot-de-passe à utiliser pour se connecter au serveur <a1>LDAP</a1>. <s0>Password</s0>: where change the password <s0>Mots-de-passe</s0>: où changer les mots-de-passe <s0>Path</s0>: keep <c1>^/cas/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/cas/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. <s0>Path</s0>: keep <c1>^/openidserver/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/openidserver/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. <s0>Path</s0>: keep <c1>^/saml/</c1> unless you have change <a2>SAML</a2> end points suffix in <a3>SAML service configuration</a3>. <s0>Chemin</s0> : laisser <c1>^/saml/</c1> sauf si les suffixes des points d'accès <a2>SAML</a2> ont été modifiés sans la <a3>configuration du service SAML</a3>. <s0>Persistent</s0>: NameID is restored from previous sessions <s0>Persistent</s0>: le NameID est restoré depuis la session précédente <s0>Port</s0>: port of the application (by default, 80 for http, 443 for https) <s0>Port</s0> : port de l'application (par défaut, 80 pour http, 443 pour https) <s0>Portal <a1>URL</a1></s0>: <a2>URL</a2> of internal portal <s0><a1>URL</a1> du portail</s0> : <a2>URL</a2> du portail interne <s0>Portal <a1>URL</a1></s0>: remote portal <a2>URL</a2> <s0>Portail <a1>URL</a1></s0>: <a2>URL</a2> du portail distant <s0>Portal messages</s0>: all messages are grouped in lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. Les <s0>messages du portail</s0>: tous les messages sont regroupés dans lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. <s0>Portal</s0>: the portal redirect on itself in many cases (credentials POST, <a1>SAML</a1>, etc.) le <s0>portail</s0> : le portail redirige vers lui-même dans plusieurs cas (POST d'authentification, <a1>SAML</a1>, etc...) <s0>Preauthentication <a1>URL</a1></s0>: Zimbra preauthentication <a2>URL</a2>, either with full <a3>URL</a3> (ex: <a4>http://zimbra.lan/service/preauth</a4>), either only with path (ex: /service/preauth) (by default: /service/preauth) <s0><a1>URL</a1> de pré-authentification</s0> : <a2>URL</a2> de pré-authentification Zimbra, soit l'<a3>URL</a3> complète (ex : <a4>http://zimbra.lan/service/preauth</a4>), soit seulement le chemin absolu (ex : /service/preauth) (par défaut : /service/preauth) <s0>Preauthentication key</s0>: the one you grab from zmprov command <s0>Clef de pré-authentification key</s0> : celle récupérée de la commande zmprov <s0>Protected URLs</s0>: Regexp of URLs for which the secure token will be sent, separated by spaces <s0>URLs protégées</s0> : expressions régulières correspondant aux URLs pour lesquels un jeton sécurisé doit être envoyé, separées par des espaces <s0>Proxied services</s0>: list of services for which a proxy ticket is requested: <s0>Services Proxifiés</s0> : liste des services pour lesquels un ticket de proxy est requis : <s0>RDBI</s0> : triple store storage <s0>RDBI</s0> : stockage en triplets <s0>Reader <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> SP to read the cookie. <s0><a1>URL</a1> de lecture</s0> : <a2>URL</a2> utilisée par le SP <a3>SAML</a3> pour lire le cookie. <s0>Recursive</s0>: activate recursive group functionality (default: 0). <s0>Récursivité</s0> : active la fonctionnalité récursive (défaut: 0). <s0>Redirect on error</s0>: use 302 instead 500 or 503 <s0>Redirection pour les erreurs</s0> : utilise 302 au lieu de 500 ou 503 <s0>Redirect on forbidden</s0>: use 302 instead 403 <s0>Redirections pour les accès interdits</s0> : utilise 302 au lieu de 403 <s0>Redirect</s0>: redirect user on protected application or on Portal <s0>Redirige</s0>: redirige l'utilisateur vers l'application protégée demandée ou vers le portail <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Regexp for password generation</s0>: Regular expression used to generate the password (default: [A-Z]{3}[a-z]{5}.\d{2}) <s0>Regexp pour la génération de mot-de-passe</s0> : expression régulière utilisée pour générer le mot-de-passe (défaut : [A-Z]{3}[a-z]{5}.\d{2}) <s0>RelayState session timeout</s0>: timeout for RelayState sessions. <s0>Durée de vie d'une session RelayState</s0> : durée de vie d'une session RelayState. <s0>Renew authentication</s0>: force authentication renewal on <a1>CAS</a1> server <s0>Renouveler l'authentification</s0> : force le renouvellement de l'authentification sur le serveur <a1>CAS</a1> <s0>Reply address</s0>: address seen in the “Reply-To” field <s0>Adresse pour la réponse</s0> : adresse vue dans le champ “Reply-To” <s0>Requested authentication context</s0>: this context is declared in authentication request. <s0>Contexte d'authentification demandé</s0> : ce contexte est déclaré dans la requête d'authentification. <s0>Require old password</s0>: used only in the password changing module of the menu, will check the old password before updating it <s0>Exige l'ancien mot-de-passe</s0> : utilisé seulement dans le module de changement du mot-de-passe du menu, vérifie l'ancien mot-de-passse avant de le changer <s0>Reset attribute</s0>: name of password reset attribute (default: pwdReset). <s0>Attribut reset</s0> : nom de l'attribut reset du mot-de-passe (défaut : pwdReset). <s0>Reset password</s0>: display a link to <a1>reset a password</a1> (for password based authentication backends) <s0>Réinitialisation de mot-de-passe</s0> : affiche un lien pour <a1>réinitialiser un mot-de-passe</a1> (pour les backends d'authentification basés sur des mots-de-passe) <s0>Reset value</s0>: value to set in reset attribute to activate password reset (default: TRUE). <s0>Valeur de reset</s0> : valeur à mettre dans l'attribut reset pour activer la réinitialisation du mot-de-passe (défaut : TRUE). <s0>Resolution Rule</s0>: rule that will be applied to preselect an IDP for a user. <s0>Règle de résolution</s0> : règle à appliquer pour pré-sélectionner cet IDP. <s0>Response Location</s0>: Access Point for <a1>SSO</a1> response. <s0>Response Location</s0> : Point d'accès pour les réponses <a1>SSO</a1>. <s0>Response Location</s0>: Access Point for SLO response. <s0>Response Location</s0>: Point d'accès pour les réponses SLO. <s0>Rule</s0>: a <a1>Perl</a1> expression (you can use %ENV hash to get environment variables, or $_url to get <a2>URL</a2> called before redirection, or $ipAddr to use user <a3>IP</a3> address). <s0>Règle</s0> : expression <a1>Perl</a1> (on peut utiliser %ENV pour obtenir les variables d'environnement, $_url pour l'<a2>URL</a2> demandée avant la redirection ou $ipAddr pour l'adresse <a3>IP</a3> de l'utilisateur). <s0>SLO binding</s0>: force binding to use for SLO (http-redirect, http-post, etc.) <s0>Méthode SLO</s0> : force la méthode à utiliser pour le SLO (http-redirect, http-post, etc.) <s0>SREG mapping</s0>: link between SREG attributes and session keys (<s1><a2>see below</a2></s1>). <s0>Associations SREG</s0> : liens entre les attributs SREG et les clefs de session (<s1><a2>voir ci-dessous</a2></s1>). <s0>SSLCACertificateFile</s0>: CA certificate to validate client certificates <s0>SSLCACertificateFile</s0> : certificat d'autorité pour valider les certificats clients <s0>SSLCertificateFile</s0>: Server certificate <s0>SSLCertificateFile</s0> : certificat serveur <s0>SSLCertificateKeyFile</s0>: Server private key <s0>SSLCertificateKeyFile</s0> : clef privée du serveur <s0>SSLEngine</s0> <s1>On</s1> <s2>SSLVerifyClient</s2> optional <s3>SSLVerifyDepth</s3> 10 <s4>SSLOptions</s4> +StdEnvVars <s5>SSLUserName</s5> SSL_CLIENT_S_DN_CN <s0>SSLEngine</s0> <s1>On</s1> <s2>SSLVerifyClient</s2> optional <s3>SSLVerifyDepth</s3> 10 <s4>SSLOptions</s4> +StdEnvVars <s5>SSLUserName</s5> SSL_CLIENT_S_DN_CN <s0>SSLOptions</s0>: set to <c1>+StdEnvVars</c1> to get certificate fields in environment variables <s0>SSLOptions</s0> : mettre à <c1>+StdEnvVars</c1> pour obtenir les champs du certificat dans les variables d'environnement <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert <s0>SSLUserName</s0> (optional): certificate field that will be used to identify user in <a1>LL::NG</a1> portal virtual host <s0>SSLUserName</s0> (optionnel) : champ du certificat à utiliser pour identifier pour identifier un utilisateur dans l'hôte virtuel du portail <a1>LL::NG</a1> <s0>SSLVerifyClient</s0>: set to <c1>optional</c1> to allow user with a bad certificate to access to <a2>LL::NG</a2> portal page (to display error or use another authentication method) <s0>SSLVerifyClient</s0> : mettre à <c1>optional</c1> pour autoriser les utilisateurs ne disposant pas d'un certificat valide à accéder à la page du portail <a2>LL::NG</a2> (pour afficher les erreurs ou choisir une autre méthode d'authentification) <s0>SSLVerifyClient</s0>: set to <c1>optional</c1> to allow user with a bad certificate to access to <a2>LL::NG</a2> portal page. <s0>SSLVerifyClient</s0> : mettre à <c1>optional</c1> pour autoriser les utilisateurs ne disposant pas d'un certificat valide à accéder à la page du portail <a2>LL::NG</a2> <s0>STORAGECONFFILE</s0>: location of default storage configuration file (default: /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) <s0>STORAGECONFFILE</s0> : emplacement du du fichier de configuration du stockage par défaut (défaut : /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) <s0>Sandro CAZZANIGA</s0>: developer, Mageia packager <s0>Sandro CAZZANIGA</s0>: developer, empaqueteur Mageia <s0>Sandro CAZZANIGA</s0>: developer, tester <s0>Sandro CAZZANIGA</s0> : developeur, testeur <s0>Sandro Cazzaniga</s0>: developer, Mageia packager <s0>Sandro Cazzaniga</s0>: developeur, empaqueteur Mageia <s0>Search base</s0>: <a1>DN</a1> of groups branch. <s0>Base de recherche</s0> : <a1>DN</a1> de la branche des groupes. <s0>Searched attributes</s0>: name(s) of the attribute storing the name of the group, spaces separated (default: cn). <s0>Attributs recherchés</s0> : nom(s) de l'attribut stocké dans le nom du groupe, séparés par des virgules (défaut: cn). <s0>Secret token</s0>: a secret token used to secure transmissions between OpenID client and server (<s1><a2>see below</a2></s1>). <s0>Jeton secret</s0> : le jeton secret utilisé pour sécuriser les transmissions entre le client et le server OpenID (<s1><a2>voir ci-dessous</a2></s1>). <s0>Secret token</s0>: used to check integrity of OpenID response. <s0>Secret token</s0> : utilisé pour vérifier l'integrité des réponses OpenID. <s0>Secured cookie</s0>: 4 options: <s0>Cookie sécurisé</s0> : 4 options : <s0>Secured cookie</s0>: the cookie can only be sent over HTTPS <s0>Cookie sécurisé</s0> : le cookie peut être envoyé via HTTPS <s0>Send mail on password change</s0>: send a mail if the password is changed from the Menu, or from forced password reset (<a1>LDAP</a1> password policy) <s0>Envoie un courriel lors des changements de mots-de-passe</s0> : envoie un courriel si le mot-de-passe est changé depuis le menu ou suite à une réinitialisation forcée (politique de mots-de-passe <a1>LDAP</a1>) <s0>Server <a1>URL</a1></s0>: <a2>CAS</a2> server <a3>URL</a3> (must use https://) <s0><a1>URL</a1> du serveur</s0> : <a3>URL</a3> du serveur <a2>CAS</a2> (doit utiliser https://) <s0>Server host</s0>: <a1>LDAP</a1> server hostname or <a2>URI</a2> (by default: localhost). <s0>Serveur</s0> : nom du serveur <a1>LDAP</a1> ou <a2>URI</a2> (par défaut : localhost). <s0>Server hostname</s0>: this is the hostname or <a1>IP</a1> address of the Radius server <s0>Nom d'hôte du serveur</s0> : le nom d'hôte ou l'adresse <a1>IP</a1> du serveur Radius <s0>Server port</s0>: TCP port used by <a1>LDAP</a1> server. <s0>Port du serveur</s0> : port TCP du serveur <a1>LDAP</a1>. <s0>ServerName</s0> auth.example.com   <s0>ServerName</s0> auth.example.com   <s0>Session key containing mail address</s0>: name of the session key containing email address. <s0>Clef de session contenant l'adresse mail</s0> : nom de la clef de session contenant l'adresse de courriel. <s0>Sessions Storage</s0>: see <a1>sessions database configuration</a1>. <s0>Stockage des sessions</s0> : voir la <a1>configuration de la base de données des sessions</a1>. <s0>Sessions activity timeout</s0>: Maximum inactivity duration. <s0>Délai d'expiration des sessions</s0> : durée maximale d'inactivité. <s0>Sessions module options</s0>: <s0>Options du module de sessions</s0> : <s0>Sessions module</s0>: set <c1>Lemonldap::NG::Common::Apache::Session::<a2>SOAP</a2></c1> for <a3>SOAP session backend</a3>. <s0>Module de sessions</s0> : mettre <c1>Lemonldap::NG::Common::Apache::Session::<a2>SOAP</a2></c1> pour le <a3>backend de session SOAP</a3>. <s0>Sessions timeout</s0>: Maximum lifetime of a session. <s0>Durée de vie maximale des sessions</s0> : durée de vie maximale des sessions. <s0>Set groups</s0>: request user database to find groups <s0>Installe les groupes</s0> : interroge la base de données utilisateurs pour trouver les groupes <s0>Set local groups</s0>: compute configured groups <s0>Installe les groupes locaux</s0> : calcule les groupes demandés par la configuration <s0>Set macros</s0>: compute configured macros <s0>Installe les macros</s0> : calcule les macros demandées <s0>SetEnvIfNoCase</s0> Auth-<s1>User</s1> <s2>"(.*)"</s2> PHP_AUTH_USER=$1 <s3>SetEnvIfNoCase</s3> Auth-Password <s4>"(.*)"</s4> PHP_AUTH_PW=$<s5>1</s5> <s0>SetEnvIfNoCase</s0> Auth-<s1>User</s1> <s2>"(.*)"</s2> PHP_AUTH_USER=$1 <s3>SetEnvIfNoCase</s3> Auth-Password <s4>"(.*)"</s4> PHP_AUTH_PW=$<s5>1</s5> <s0>SetEnvIfNoCase</s0> Auth-<s1>User</s1> <s2>"(.*)"</s2> REMOTE_USER=$<s3>1</s3> <s0>SetEnvIfNoCase</s0> Auth-<s1>User</s1> <s2>"(.*)"</s2> REMOTE_USER=$<s3>1</s3> <s0>Shared key</s0>: correspond to the cookie parameter of sympa.conf <s0>Clef prépartagée</s0> : correspond au paramètre du cookie dans sympa.conf <s0>Shared secret</s0>: this is the passphrase to use to connect to the Radius server <s0>Secret partagé</s0> : la phrase de passe à utiliser pour se connecter au serveur Radius <s0>Sign <a1>SSO</a1> message</s0>: sign <a2>SSO</a2> message <s0>Signature des messages <a1>SSO</a1></s0> : signe les messages <a2>SSO</a2> <s0>Sign SLO message</s0>: sign SLO message <s0>Signature des messages SLO</s0> : signe les messages de déconnexion SLO (single logout) <s0>Sign-in page <a1>URL</a1></s0>: <a2>SSO</a2> access point (<a3>HTTP</a3>-Redirect binding). <s0>Sign-in page <a1>URL</a1></s0>: point d'accès <a2>SSO</a2> (<a3>HTTP</a3>-Redirect binding). <s0>Sign-out page <a1>URL</a1></s0>: this in not the SLO access point (Google Apps does not support SLO), but the main logout page. <s0>Sign-out page <a1>URL</a1></s0>: il ne s'agit pas du point d'accès de déconnexion globale (SLO) (Google Apps ne le supporte pas), mais de la page de déconnexion. <s0>Signed Authentication Request</s0>: set to On to always sign authentication request. <s0>Requête d'authentification signée</s0> : mettre à « activé » pour toujours signer les requêtes d'authentifications. <s0>Site Logo</s0>: Logo that will be displayed in the BrowserID login window. <s0>Logo du site</s0> : Logo qui sera affiché dans la fenêtre d'authentification BrowserID. <s0>Site Name</s0>: Name that will be displayed in the BrowserID login window <s0>Nom du site</s0> : Nom qui sera affiché dans la fenêtre d'authentification BrowserID <s0>Skin</s0>: the name of the skin to use. <s0>Thème</s0> : le nom du thème à utiliser. <s0>Store user password in session data</s0>: see <a1>password store documentation</a1>. <s0>Stocker le mot-de-passe de l'utilisateur dans les données de session</s0> : voir la <a1>documentation sur le stockage du mot-de-passe</a1>. <s0>Store</s0>: store user info in session database <s0>Stocke</s0>: stocke les données utilisateurs dans la base de données des sessions <s0>Success mail content</s0> (optional): Content of mail sent when password is changed <s0>Contenu du message</s0> (optionnel) : contenu du courriel envoyé lorsque le mot-de-passe est changé <s0>Success mail subject</s0>: Subject of mail sent when password is changed (default: [LemonLDAP::NG] Your new password) <s0>Sujet du message de succès</s0> : sujet du courriel lorsque le mot-de-passe est changé (défaut : [LemonLDAP::NG] Your new password) <s0>Target <a1>URL</a1></s0>: /process.php <s0><a1>URL</a1> cible</s0> : /process.php <s0>Target attribute</s0>: name of the attribute in the groups storing the link to the user (default: member). <s0>Attribut cible</s0> : nom de l'attribut du groupe stockant le lien vers l'utilisateur (défaut: member). <s0>Thomas CHEMINEAU</s0>: developer, graphics <s0>Thomas CHEMINEAU</s0>: développeur, concepteur graphique <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0>: at the indicated time and date (but this is probably a bad idea) <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0> : jusqu'à la date indiquée (généralement une mauvaise idée) <s0>Timeout</s0>: server idle timeout. <s0>Timeout</s0> : délai maximum de connexion. <s0>Token expiration</s0>: time in seconds for token expiration (remove from Memcached server). <s0>Expiration du jeton</s0> : délai en secondes pour l'expiration du jeton (effacement du serveur Memcached). <s0>Transient</s0>: NameID is generated <s0>Transient</s0>: le NameID est généré <s0>Trusted domains</s0>: domains on which the user can be redirected after login on portal. <s0>Domaines approuvés</s0> : domaines vers lesquels l'utilisateur peut être redirigé après authentification sur le portail. <s0>UTF8 metadata conversion</s0>: set to On to force partner's metadata conversion. <s0>Conversion des métadatas un UTF8</s0> : mettre à « activé » pour forcer la conversion des métadata des partenaires. <s0>Undefined</s0>: Default NameID format is used <s0>Undefined</s0>: le format de NameID par défaut est utilisé <s0>Use Safe jail</s0>: set to 'Off' to disable Safe jail. <s0>Utiliser la cage sécurisée</s0> : mettre à 'Désctivé' pour désactiver la cage sécurisée (Safe). <s0>Use reset attribute</s0>: enable to use the password reset attribute. <s0>Utiliser l'attribut reset</s0> : activé pour utiliser l'attribut reset du mot-de-passe. <s0>Use rule</s0>: a rule to allow user to use this module, set to 1 to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. <s0>Use rule</s0>: a rule to allow user to use this module, set to <c1>1</c1> to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. <s0>User Header</s0>: Auth-User (case sensitive) <s0>User Header</s0>: Auth-User (case sensitive) <s0>User attribute</s0>: which session attribute will be used to display <c1>Connected as</c1> in the menu <s0>Attribut utilisateur</s0> : attribut de session à utiliser pour afficher <c1>Connecté en tant que</c1> dans le menu <s0>User source attribute</s0>: name of the attribute in users entries used in the link (default: dn). <s0>Attribut source utilisateur</s0> : nom de l'attribut utilisateur utilisé dans le lien (défaut: dn). <s0>User table</s0>: user table name <s0>Table utilisateurs</s0> : nom de la table utilisateurs <s0>User</s0> <s1>=</s1><s2> lemonldap</s2> <s3>Password</s3> <s4>=</s4><s5> mypassword</s5> # LWP::UserAgent parameters <s6>proxyOptions</s6> <s7>=</s7><s8> <s9>{</s9> timeout <s10>=</s10>> <s11>5</s11> <s12>}</s12></s8> <s0>User</s0> <s1>=</s1><s2> lemonldap</s2> <s3>Password</s3> <s4>=</s4><s5> mypassword</s5> # Paramètres LWP::UserAgent <s6>proxyOptions</s6> <s7>=</s7><s8> <s9>{</s9> timeout <s10>=</s10>> <s11>5</s11> <s12>}</s12></s8> <s0>User</s0>: Connection user <s0>Utilisateur</s0> : compte de connexion <s0>User</s0>: where collect user data <s0>Utilisateurs</s0>: où trouver les données utilisateurs <s0>Username control</s0>: Regular expression used to check user login syntax. <s0>Contrôle du nom d'utilisateur</s0> : expression régulière utilisée pour vérifier la syntaxe du nom d'utilisateur. <s0>Users search base</s0>: Base of search in the <a1>LDAP</a1> directory. <s0>Base de recherche des utilisateurs</s0> : base de recherche de l'annuaire <a1>LDAP</a1>. <s0>Users</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Utilisateurs</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) <s0>Users</s0> : <a1>lemonldap-ng-users@ow2.org</a1> (<a2>Archives</a2>) <s0>Utilisateurs</s0> : <a1>lemonldap-ng-users@ow2.org</a1> (<a2>Archives</a2>) <s0>VHOSTLISTEN</s0>: how listen parameter is configured for virtual hosts in Apache (default: *:80) <s0>VHOSTLISTEN</s0> : comment est configuré le paramètre d'écoute des hôtes virtuels dans Apache (défaut : *:80) <s0>Validity time of a password reset request</s0>: number of seconds for password reset request validity. <s0>Durée de validité de la requête de réinitialisation de mot-de-passe</s0> : nombre de secondes pour la validité de la requête de réinitialisation. <s0>Value</s0> Service <a1>URL</a1> (<a2>CAS</a2> service identifier) <s0>Value</s0> Service <a1>URL</a1> (identifiant de service <a2>CAS</a2>) <s0>Value</s0>: SREG attribute name: <s0>Valeur</s0> : noms d'attributs SREG : <s0>Value</s0>: application logout <a1>URL</a1> <s0>Valeur</s0> : <a1>URL</a1> de déconnexion de l'application <s0>Variables</s0>: user information, macros and groups used to fill <a1>SSO</a1> session <s0>Variables</s0> : informations utilisateur, macros et groupes utilisés pour renseigner la session <a1>SSO</a1> <s0>Verification <a1>URL</a1></s0>: <a2>URL</a2> used to verifiy the BrowserID assertion. <s0><a1>URL</a1> de vérification</s0> : <a2>URL</a2> utilisée pour vérifier l'assertion BrowserID. <s0>Version</s0>: <a1>LDAP</a1> protocol version. <s0>Version</s0> : version du protocole <a1>LDAP</a1>. <s0>Virtual Hosts</s0>: access rules, headers, etc. <s0>Hôtes virtuels</s0> : règles d'accès, en-têtes, etc... <s0>Want Assertions Signed</s0>: set to On to require that received assertions are signed. <s0>Exiger des assertions signées</s0> : mettre à « activé » pour exiger de recevoir des assertions signées. <s0>Want Authentication Request Signed</s0>: set to On to require that received authentication request are signed. <s0>Exiger des requêtes d'authentification signées</s0> : mettre à « activer » pour exiger de recevoir des requêtes d'authentification signées. <s0>WebID whitelist</s0>: list of space separated hosts granted to host FOAF document. <s0>Liste blanche WebID</s0> : liste de noms d'hôtes, séparés par des espaces, autorisés à héberger les documents FOAF. <s0>Writer <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> IDP to write the cookie. <s0><a1>URL</a1> d'écriture</s0> : <a2>URL</a2> utilisée par l'IdP <a3>SAML</a3> pour écrire le cookie. <s0>Xavier GUIMARD</s0>: historic project leader, developer, Debian packager, administrator of big Lemonldap::NG instances <s0>Xavier GUIMARD</s0> : Leader historique du projet, developpeur, empaqueteur Debian, administrateur de grosses installations de Lemonldap::NG <s0>Xavier GUIMARD</s0>: historic project leader, developer, administrator of big Lemonldap::NG instances <s0>Xavier GUIMARD</s0>: Leader historique du projet, developpeur, administrateur de grosses installations de Lemonldap::NG <s0>Xavier GUIMARD</s0>: project leader, lead developer <s0>Xavier GUIMARD</s0>: chef du projet et développeur <s0>absolute <a1>URL</a1></s0> if it is run by handler (e.g. /admin/index.php?param=foo). <s0>l'<a1>URL</a1> absolue</s0> si elle est appelée par un agent (e.g. /admin/index.php?param=foo). <s0>accept</s0>: all authenticated users will access surveys <s0>accept</s0> : tous les utilisateurs authentifiés peuvent accéder aux surveillances <s0>ad.example.com</s0>: <a1>DNS</a1> of Active Directory <s0>ad.example.com</s0> : nom <a1>DNS</a1> du serveur Active Directory <s0>adminSessions/</s0>: read/write access to sessions (required for distant Portal or distant Manager) <s0>adminSessions/</s0> : accès en lecture/écriture aux sessions (nécessaire pour les portails ou manager distants) <s0>adminSessions/</s0>: read/write access to sessions (required for distant Portal, distant Manager or distant Handlers which modify sessions) <s0>adminSessions/</s0> : accès en lecture/écriture aux sessions (nécessaire pour les portails ou manager distants ou les handlers distants qui modifient les sessions) <s0>all</s0>: parameters for all modules <s0>all</s0> : paramètres pour tous les modules <s0>allows</s0> (optional): Define allowed remote <a1>IP</a1> (use ”,” separator for multiple <a2>IP</a2>). <s0>allows</s0> (optionnel) : Definit les adresses <a1>IP</a1> autorisées (ustiliser le séparateur ”,” pour de multiples <a2>IP</a2>). <s0>apply</s0>: reload <a1>URL</a1> for distant Hanlders <s0>apply</s0> : les <a1>URL</a1> de rechargement des agents distants <s0>auth.example.com</s0>: <a1>DNS</a1> of the portal <s0>auth.example.com</s0> : nom <a1>DNS</a1> du portail <s0>auth_env_email</s0>: <a1>HTTP</a1>_AUTH_MAIL <s0>auth_env_email</s0>: <a1>HTTP</a1>_AUTH_MAIL <s0>auth_env_id</s0>: <a1>HTTP</a1>_AUTH_USER <s0>auth_env_id</s0>: <a1>HTTP</a1>_AUTH_USER <s0>auth_env_realname</s0>: <a1>HTTP</a1>_AUTH_CN <s0>auth_env_realname</s0>: <a1>HTTP</a1>_AUTH_CN <s0>auto</s0>: display only if the user can access it <s0>auto</s0> : n'afficher que si l'utilisateur peut y accéder <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0>: <a1>DN</a1> of AD technical account <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0> : <a1>DN</a1> du compte AD technique <s0>complicatedpassword</s0>: Password of AD technical account <s0>complicatedpassword</s0>: mot-de-passe du compte AD technique <s0>configuration</s0>: where configuration is stored <s0>configuration</s0> : où la configuration est stockée <s0>dbiChain</s0>: <a1>DBI</a1> connection. <s0>dbiChain</s0> : chaîne de connexion <a1>DBI</a1>. <s0>dbiPassword</s0>: <a1>DBI</a1> password. <s0>dbiPassword</s0> : mot-de-passe <a1>DBI</a1>. <s0>dbiUser</s0>: <a1>DBI</a1> user. <s0>dbiUser</s0> : utilisateur <a1>DBI</a1>. <s0>default_access</s0> (optional): what result to return if <s1>logon_hours</s1> is empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>logon_hours</s1> est vide <s0>default_access</s0> (optional): what result to return if <s1>start</s1> and <s2>end</s2> are empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>start</s1> et <s2>end</s2> sont vides <s0>deleteNotification</s0>: delete notification(s) for a user (see <a1>Notifications system</a1> for more) <s0>deleteNotification</s0> : efface une ou plusieurs notifications d'un utilisateur (voir le <a1>système des notifications</a1>) <s0>deleteSession</s0>: delete a session <s0>deleteSession</s0> : efface une session <s0>dirName</s0>: directory where notifications are stored. <s0>dirName</s0> : répertoire dans lequel sont stockées les notifications. <s0>end</s0>: End date (GMT) <s0>end</s0>: date de fin (GMT) <s0>error</s0>: if user has no access, an error is shown on the portal, the user is not redirected to <a1>CAS</a1> service <s0>error</s0> : si l'utilisateur n'a pas accès, une erreur est affichée sur le portail, l'utilisateur n'est pas redirigé vers le service <a1>CAS</a1> <s0>faketicket</s0>: if the user has no access, a fake ticket is built, and the user is redirected to <a1>CAS</a1> service. <s0>faketicket</s0> : si l'utilisateur n'a pas accès, un faux ticket est construit, et l'utilisateur est redirigé vers le service <a1>CAS</a1>. <s0>fileNameSeparator</s0>: file name separator. <s0>fileNameSeparator</s0> : séparateur de nom de fichier. <s0>getAttributes(cookieValue)</s0>: get elements stored in session <s0>getAttributes(cookieValue)</s0> : retourne les éléments stockés dans la session <s0>getCookies(user,password)</s0>: authentication system. <s0>getCookies(user,password)</s0> : système d'authentification. <s0>getMenuApplications(cookieValue)</s0>: return a list of authorizated applications (based on menu calculation) <s0>getMenuApplications(cookieValue)</s0>: retourne une liste des applications autorisées (basée sur le calcul du menu) <s0>get_key_from_all_sessions</s0>: list all sessions and return asked keys <s0>get_key_from_all_sessions</s0> : liste toutes les sessions et retourne les clefs demandées <s0>handler-apache2.conf</s0> : Handler declaration, reload and sample virtual hosts <s0>handler-apache2.conf</s0> : déclaration du handler, rechargement et exemple d'hôte virtuel <s0>handler</s0>: parameters only for Handler <s0>manager</s0> : paramètres réservés aux agents <s0>headers_map</s0>: map OBM internal field to <a1>LL::NG</a1> header <s0>headers_map</s0>: établit la correspondance entre les champs internes d'OBM et les en-têtes <a1>LL::NG</a1> <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf <s0>info</s0> for user actions <s0>info</s0> pour les actions utilisateurs <s0>isAuthorizedURI(cookieValue,url)</s0>: check if user is granted to access to the function <s0>isAuthorizedURI(cookieValue,url)</s0> : vérifie si l'utilisateur est autorisé à accéder à la fonction <s0>ldapBindDN</s0>: <a1>DN</a1> used to bind <a2>LDAP</a2> <s0>ldapBindDN</s0> : <a1>DN</a1> utilisé pour se connecter au serveur <a2>LDAP</a2> <s0>ldapBindDN</s0>: <a1>LDAP</a1> user. <s0>ldapBindDN</s0> : utilisateur <a1>LDAP</a1>. <s0>ldapBindPassword</s0>: <a1>LDAP</a1> password. <s0>ldapBindPassword</s0> : mot-de-passe <a1>LDAP</a1>. <s0>ldapBindPassword</s0>: password used to bind <a1>LDAP</a1> <s0>ldapBindPassword</s0> : mot-de-passe à utiliser pour se connecter au serveur <a1>LDAP</a1> <s0>ldapConfBase</s0>: <a1>DN</a1> of configuration branch <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des configurations <s0>ldapConfBase</s0>: Notifications branch <a1>DN</a1>. <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des notifications. <s0>ldapServer</s0>: <a1>LDAP</a1> <a2>URI</a2> of the server <s0>ldapServer</s0>: <a2>URI</a2> <a1>LDAP</a1> du serveur <s0>ldapServer</s0>: <a1>LDAP</a1> <a2>URL</a2>. <s0>ldapServer</s0> : <a2>URL</a2> du serveur <a1>LDAP</a1>. <s0>logo</s0>: no form (used for external authentication methods) <s0>logo</s0> : pas de formulaire de connexion (utilisé pour les méthodes d'authentification externes) <s0>logon_hours</s0>: string representing allowed logon hours (GMT) <s0>logon_hours</s0> : chaîne représentant les heures autorisées (GMT) <s0>manager-apache2.conf</s0>: Manager virtual host <s0>manager-apache2.conf</s0> : hôte virtuel du manager <s0>manager</s0>: parameters only for Manager <s0>manager</s0> : paramètres réservés au manager <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> <s0>newNotification(xmlString)</s0>: insert a notification for a user (see <a1>Notifications system</a1> for more) <s0>newNotification(xmlString)</s0> : insert une notification pour un utilisateur (voir le <a1>système de notifications</a1> pour plus d'information) <s0>newSession</s0>: create a session (return attributes) <s0>newSession</s0> : crée une session (retourne les attributs) <s0>none</s0>: no access control, the server will answer without checking if the user is authorized for the service (this is the default) <s0>none</s0> : pas de contrôle d'accès, le serveur répond sans contrôler si l'utilisateur est autorisé à accéder au service (c'est la valeur par défaut) <s0>notice</s0> for good authentications or external exchange (<a1>SAML</a1>, OpenID,…) <s0>notice</s0> pour les authentifications réussies et les échanges externes (<a1>SAML</a1>, OpenID,…) <s0>off</s0>: never display <s0>off</s0> : ne jamais afficher <s0>on</s0>: always display <s0>on</s0> : toujours afficher <s0>openidform</s0>: OpenID login form <s0>openidform</s0> : formulaire de connexion OpenID <s0>passThrough</s0> (optional): Allow anonymous access or not. <s0>passThrough</s0> (optionnel) : Autorise ou non l'accès anonyme. <s0>portal full <a1>URL</a1></s0> if custom function is run by portal (e.g. <a2>https://auth.example.com/</a2>) <s0>l'<a1>URL</a1> complète du portail</s0> si la fonction personnalisée est appelée par le portail (i.e. <a2>https://auth.example.com/</a2>) <s0>portal-apache2.conf</s0>: Portal virtual host, with <a1>SOAP</a1> and Issuer end points <s0>portal-apache2.conf</s0> : hôte virtuel du portail, incluant les points d'accès <a1>SOAP</a1> et fournisseur d'identité <s0>portal</s0>: parameters only for Portal <s0>portal</s0> : paramètres réservés au portail <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> <s0>proxy</s0>: <a1>SOAP</a1> sessions end point (see <a2>SOAP session backend</a2> documentation) <s0>proxy</s0>: point d'accès <a1>SOAP</a1> (voir la documentation du <a2>backend de session SOAP</a2>) <s0>require</s0> Lemonldap::NG::Portal::SharedConf; <s0>require</s0> Lemonldap::NG::Portal::SharedConf; <s0>roleKey</s0>: key in the <a1>HTTP</a1> header containing roles. <s0>roleKey</s0> : nom de l'en-tête <a1>HTTP</a1> contenant les rôles. <s0>roleSeparator</s0> (optional): role values separator. <s0>roleSeparator</s0> (optionnel) : séparateur des valeurs de rôle. <s0>sessions/</s0>: read only access to sessions (enough for distant Handlers) <s0>sessions/</s0> : accès en lecture seule aux sessions (suffisant pour les agents distants) <s0>setAttributes(cookieValue,hashtable)</s0>: update a session <s0>setAttributes(cookieValue,hashtable)</s0> : met à jour une session <s0>standardform</s0>: login/password form <s0>standardform</s0> : formulaire compte/mot-de-passe <s0>start</s0>: Start date (GMT) <s0>start</s0> : date de début (GMT) <s0>syntax</s0> (optional): <c1>hexadecimal</c1> (default) or <c2>octetstring</c2> <s0>syntax</s0> (optionnel) : <c1>hexadecimal</c1> (défaut) ou <c2>octetstring</c2> <s0>table</s0>: Notifications table name. <s0>table</s0> : nom de la table des notifications. <s0>time_correction</s0> (optional): hours to add or to subtract <s0>time_correction</s0> (optionnel) : heures à ajouter ou soustraire <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> <s0>unprotect</s0>: no authentication will be asked to access surveys <s0>unprotect</s0> : aucune authentification n'est nécessaire pour accéder aux surveillances <s0>url_logout</s0>: <a1>URL</a1> used by OBM to logout, will be caught by <a2>LL::NG</a2> <s0>url_logout</s0>: <a1>URL</a1> utilisée par OBM pour les déconnexions, sera appelée par <a2>LL::NG</a2> <s0>userKey</s0>: key in the <a1>HTTP</a1> header containing user login. <s0>userKey</s0> : nom de l'en-tête <a1>HTTP</a1> contenant le nom d'utilisateur. <s0>user_info_class</s0>: Env or Env,<a1>CGI</a1> <s0>user_info_class</s0>: Env or Env,<a1>CGI</a1> <s0>warn</s0> for failed authentications <s0>warn</s0> pour les échecs d'authentifications <s0>yubikeyform</s0>: Yubikey login form <s0>yubikeyform</s0> : formulaire de connexion Yubikey <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> <s104>//"userobm_direction" => ,</s104> <s104>//"userobm_direction" => ,</s104> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> <s10>)</s10>; <s10>)</s10>; <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> <s10>LogLevel</s10> warn <s10>LogLevel</s10> warn <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> <s10>Require</s10> <s11>user</s11> rbowen <s10>Require</s10> <s11>user</s11> rbowen <s113>//"userobm_address2" => ,</s113> <s113>//"userobm_address2" => ,</s113> <s114>//"userobm_address3" => ,</s114> <s114>//"userobm_address3" => ,</s114> <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> <s11># Perl script</s11> <s11># Perl script</s11> <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Example<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Exemple<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> <s11>Allow</s11> from 127.0.0.0/8 <s11>Allow</s11> from 127.0.0.0/8 <s11>AuthLDAPURL</s11> ldap://localhost:389/ou=users,dc=example,dc=com???(objectClass=inetOrgPerson) TLS <s11>AuthLDAPURL</s11> ldap://localhost:389/ou=users,dc=example,dc=com???(objectClass=inetOrgPerson) TLS <s11>AuthType</s11> Kerberos <s11>AuthType</s11> Kerberos <s11>ErrorLog</s11> /var/log/httpd/drupal-error.log <s11>ErrorLog</s11> /var/log/httpd/drupal-error.log <s11>Order</s11> <s12>deny</s12>,<s13>allow</s13> <s11>Order</s11> <s12>deny</s12>,<s13>allow</s13> <s11>RewriteRule</s11> ^/cas/.* /index.pl <s11>RewriteRule</s11> ^/cas/.* /index.pl <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   <s11>}</s11><s12>,</s12> <s11>}</s11><s12>,</s12> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> <s12>CustomLog</s12> /var/log/httpd/drupal-access.log combined </<s13>VirtualHost</s13>> <<s14>VirtualHost</s14> *:80> <s12>CustomLog</s12> /var/log/httpd/drupal-access.log combined </<s13>VirtualHost</s13>> <<s14>VirtualHost</s14> *:80> <s12>ErrorDocument</s12> 401 /login.pl <s12>ErrorDocument</s12> 401 /login.pl <s12>Order</s12> <s13>allow</s13>,<s14>deny</s14> <s12>Order</s12> <s13>allow</s13>,<s14>deny</s14> <s12>Require</s12> ldap-<s13>user</s13> coudot xguimard tchemineau <s12>Require</s12> ldap-<s13>user</s13> coudot xguimard tchemineau <s12>{</s12> <s12>{</s12> <s131>//"userobm_expresspostal" => ,</s131> <s131>//"userobm_expresspostal" => ,</s131> <s132>//"userobm_host_id" => ,</s132> <s132>//"userobm_host_id" => ,</s132> <s133>//"userobm_web_perms" => ,</s133> <s133>//"userobm_web_perms" => ,</s133> <s134>//"userobm_web_list" => ,</s134> <s134>//"userobm_web_list" => ,</s134> <s135>//"userobm_web_all" => ,</s135> <s135>//"userobm_web_all" => ,</s135> <s136>//"userobm_mail_perms" => ,</s136> <s136>//"userobm_mail_perms" => ,</s136> <s137>//"userobm_mail_ext_perms" => ,</s137> <s137>//"userobm_mail_ext_perms" => ,</s137> <s138>//"userobm_mail_server_id" => ,</s138> <s138>//"userobm_mail_server_id" => ,</s138> <s139>//"userobm_mail_server_hostname" => ,</s139> <s139>//"userobm_mail_server_hostname" => ,</s139> <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s13># OpenID Issuer</s13> <s13># Fournisseur d'identité OpenID</s13> <s13># Uncomment this to activate status module</s13> <s13># Uncomment this to activate status module</s13> <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> <s13>Allow</s13> from <s14>all</s14> <s13>Allow</s13> from <s14>all</s14> <s13>Deny</s13> from <s14>all</s14> <s13>Deny</s13> from <s14>all</s14> <s13>SetHandler</s13> perl-<s14>script</s14> <s13>SetHandler</s13> perl-<s14>script</s14> <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> <s144>//"userobm_nomade_perms" => ,</s144> <s144>//"userobm_nomade_perms" => ,</s144> <s145>//"userobm_nomade_enable" => ,</s145> <s145>//"userobm_nomade_enable" => ,</s145> <s146>//"userobm_nomade_local_copy" => ,</s146> <s146>//"userobm_nomade_local_copy" => ,</s146> <s147>//"userobm_email_nomade" => ,</s147> <s147>//"userobm_email_nomade" => ,</s147> <s148>//"userobm_vacation_enable" => ,</s148> <s148>//"userobm_vacation_enable" => ,</s148> <s149>//"userobm_vacation_datebegin" => ,</s149> <s149>//"userobm_vacation_datebegin" => ,</s149> <s14>#<Location /status></s14> <s14>#<Location /status></s14> <s14>Deny</s14> from <s15>all</s15> <s14>Deny</s14> from <s15>all</s15> <s14>Options</s14> +ExecCGI <s14>Options</s14> +ExecCGI <s150>//"userobm_vacation_dateend" => ,</s150> <s150>//"userobm_vacation_dateend" => ,</s150> <s151>//"userobm_vacation_message" => ,</s151> <s151>//"userobm_vacation_message" => ,</s151> <s152>//"userobm_samba_perms" => ,</s152> <s152>//"userobm_samba_perms" => ,</s152> <s153>//"userobm_samba_home" => ,</s153> <s153>//"userobm_samba_home" => ,</s153> <s154>//"userobm_samba_home_drive" => ,</s154> <s154>//"userobm_samba_home_drive" => ,</s154> <s155>//"userobm_samba_logon_script" => ,</s155> <s155>//"userobm_samba_logon_script" => ,</s155> <s156>// ---- Unused values ? <s156>// ---- Unused values ? <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> <s15># Order deny,allow</s15> <s15># Order deny,allow</s15> <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> <s15>AuthType</s15> Kerberos <s15>AuthType</s15> Kerberos <s15>Deny</s15> from <s16>all</s16> <s15>Deny</s15> from <s16>all</s16> <s15>RewriteEngine</s15> <s16>On</s16> <s15>RewriteEngine</s15> <s16>On</s16> <s15>ServerName</s15> admindrupal.example.com   <s15>ServerName</s15> admindrupal.example.com   <s15>require</s15> valid-<s16>user</s16> <s15>require</s15> valid-<s16>user</s16> <s161>//"userobm_system" => ,</s161> <s161>//"userobm_system" => ,</s161> <s162>//"userobm_nomade_datebegin" => ,</s162> <s162>//"userobm_nomade_datebegin" => ,</s162> <s163>//"userobm_nomade_dateend" => ,</s163> <s163>//"userobm_nomade_dateend" => ,</s163> <s164>//"userobm_location" => ,</s164> <s164>//"userobm_location" => ,</s164> <s165>//"userobm_education" => ,</s165> <s165>//"userobm_education" => ,</s165> <s166>)</s166><s167>,</s167> <s166>)</s166><s167>,</s167> <s168>)</s168><s169>;</s169> <s168>)</s168><s169>;</s169> <s16># Deny from all</s16> <s16># Deny from all</s16> <s16># Directory index</s16> <s16># Directory index</s16> <s16># SOAP functions for configuration access (disabled by default)</s16> <s16># Fonctions SOAP pour accéder à la configuration (désactivées par défaut)</s16> <s16># SSO protection</s16> <s16># Protection SSO</s16> <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> <s16>Allow</s16> from 192.168.2.0/24 </<s17>Location</s17>> <s16>Allow</s16> from 192.168.2.0/24 </<s17>Location</s17>> <s16>}</s16> <s17>)</s17><s18>;</s18> <s16>}</s16> <s17>)</s17><s18>;</s18> <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s17># Allow from 127.0.0.0/8</s17> <s17># Allow from 127.0.0.0/8</s17> <s17># DocumentRoot</s17> <s17># DocumentRoot</s17> <s17># Your nice code here</s17>   <s17># Le joli code ici :</s17>   <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> <s17>Allow</s17> from 192.168.142.0/24 <s17>Allow</s17> from 192.168.142.0/24 <s17>KEY</s17> _whatToTrace <s18>(</s18>_whatToTrace<s19>)</s19><s20>,</s20> <s17>KEY</s17> _whatToTrace <s18>(</s18>_whatToTrace<s19>)</s19><s20>,</s20> <s17>KEY</s17> uid <s18>(</s18>uid<s19>)</s19><s20>,</s20> <s17>KEY</s17> uid <s18>(</s18>uid<s19>)</s19><s20>,</s20> <s17>RewriteRule</s17> ^/openidserver/.* /index.pl <s17>RewriteRule</s17> ^/openidserver/.* /index.pl <s18># PerlHeaderParserHandler My::Package->status</s18> <s18># PerlHeaderParserHandler My::Package->status</s18> <s18>DirectoryIndex</s18> index.pl index.html <s18>DirectoryIndex</s18> index.pl index.html <s18>DocumentRoot</s18> /var/www/html/drupal/ <s18>DocumentRoot</s18> /var/www/html/drupal/ <s18>Options</s18> +ExecCGI <s18>Options</s18> +ExecCGI <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> <s19>#</Location></s19>   </<s20>VirtualHost</s20>> <s19>#</Location></s19>   </<s20>VirtualHost</s20>> <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> <s19>DirectoryIndex</s19> index.php   <s19>DirectoryIndex</s19> index.php   <s1># DocumentRoot</s1> <s1># DocumentRoot</s1> <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> <s1>Can be used to secure another backend</s1> for remote servers. <s1>Peut être utilisé pour sécuriser un autre backend</s1> pour des serveurs distants. <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s1>RewriteEngine</s1> <s2>On</s2> <s1>RewriteEngine</s1> <s2>On</s2> <s1>SSLEngine</s1> <s2>On</s2> <s1>SSLEngine</s1> <s2>On</s2> <s1>ServerName</s1> application.example.com   <s1>ServerName</s1> application.example.com   <s1>ServerName</s1> auth.example.com   <s1>ServerName</s1> auth.example.com   <s1>ServerName</s1> basic.example.com   <s1>ServerName</s1> basic.example.com   <s1>ServerName</s1> bugzilla.example.com   <s1>ServerName</s1> bugzilla.example.com   <s1>ServerName</s1> dokuwiki.example.com   <s1>ServerName</s1> dokuwiki.example.com   <s1>ServerName</s1> drupal.example.com   <s1>ServerName</s1> drupal.example.com   <s1>ServerName</s1> liferay.example.com   <s1>ServerName</s1> liferay.example.com   <s1>ServerName</s1> limesurvey.example.com   <s1>ServerName</s1> limesurvey.example.com   <s1>ServerName</s1> localsite.example.com   <s1>ServerName</s1> localsite.example.com   <s1>ServerName</s1> manager.example.com <s1>ServerName</s1> manager.example.com <s1>ServerName</s1> mediawiki.example.com   <s1>ServerName</s1> mediawiki.example.com   <s1>ServerName</s1> obm.example.com   <s1>ServerName</s1> obm.example.com   <s1>ServerName</s1> phpldapadmin.example.com   <s1>ServerName</s1> phpldapadmin.example.com   <s1>ServerName</s1> reload.example.com   <s1>ServerName</s1> reload.example.com   <s1>ServerName</s1> secure.example.com   <s1>ServerName</s1> secure.example.com   <s1>ServerName</s1> sympa.example.com   <s1>ServerName</s1> sympa.example.com   <s1>ServerName</s1> test2.example.com   <s1>ServerName</s1> test2.example.com   <s1>ServerName</s1> www.public.com   <s1>ServerName</s1> www.public.com   <s1>ServerName</s1> zimbra.example.com   <s1>ServerName</s1> zimbra.example.com   <s1>SetHandler</s1> perl-<s2>script</s2> <s1>SetHandler</s1> perl-<s2>script</s2> <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> <s20>LogLevel</s20> warn <s20>LogLevel</s20> warn <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <s21># special html code for admins</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s21># code html spécial pour les administrateurs</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s21>Allow</s21> from <s22>all</s22> <s21>Allow</s21> from <s22>all</s22> <s21>Deny</s21> from <s22>all</s22> <s21>Deny</s21> from <s22>all</s22> <s21>ErrorLog</s21> /var/log/httpd/admindrupal-error.log <s21>ErrorLog</s21> /var/log/httpd/admindrupal-error.log <s21>KEY</s21> ipAddr <s22>(</s22>ipAddr<s23>)</s23> <s21>KEY</s21> ipAddr <s22>(</s22>ipAddr<s23>)</s23> <s21>TO</s21> lemonldap<s22>-</s22>ng<s23>-</s23>user@<s24>'10.0.0.%'</s24> <s25>IDENTIFIED</s25> <s26>BY</s26> <s27>'myotherpassword'</s27>; <s21>TO</s21> lemonldap<s22>-</s22>ng<s23>-</s23>user@<s24>'10.0.0.%'</s24> <s25>IDENTIFIED</s25> <s26>BY</s26> <s27>'myotherpassword'</s27>; <s22>CustomLog</s22> /var/log/httpd/admindrupal-access.log combined </<s23>VirtualHost</s23>> <s22>CustomLog</s22> /var/log/httpd/admindrupal-access.log combined </<s23>VirtualHost</s23>> <s22>}</s22> <s23>}</s23><s24>,</s24> <s22>}</s22> <s23>}</s23><s24>,</s24> <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> <s24># SOAP functions for notification insertion (disabled by default)</s24> <s24># Fonctions SOAP pour insérer des notifications (désactivées par défaut)</s24> <s24>)</s24>; <s24>)</s24>; <s24>}</s24><s25>,</s25> <s24>}</s24><s25>,</s25> <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> <s25># another HTML code</s25> <s26>}</s26> <s25># autre code HTML</s25> <s26>}</s26> <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> <s27>PRIMARY</s27> <s28>KEY</s28> <s29>(</s29>date<s30>,</s30> uid<s31>,</s31>ref<s32>)</s32> <s33>)</s33> <s27>PRIMARY</s27> <s28>KEY</s28> <s29>(</s29>date<s30>,</s30> uid<s31>,</s31>ref<s32>)</s32> <s33>)</s33> <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> <s29>Allow</s29> from <s30>all</s30> <s29>Allow</s29> from <s30>all</s30> <s29>Deny</s29> from <s30>all</s30> <s29>Deny</s29> from <s30>all</s30> <s2># Configuration reload mechanism (only 1 per physical server is</s2> <s2># Mécanisme de rechargement de la configuration (1 seul par serveur physique est</s2> <s2># DocumentRoot</s2> <s2># DocumentRoot</s2> <s2># Load AuthBasic Handler</s2> <s2># Load AuthBasic Handler</s2> <s2># Load SecureToken Handler</s2> <s2># Charge l'agent SecureToken</s2> <s2># Load Sympa Handler</s2> <s2># Load Sympa Handler</s2> <s2># Load Zimbra Handler</s2> <s2># Load Zimbra Handler</s2> <s2># Reverse-Proxy</s2> <s2># Reverse-Proxy</s2> <s2># SSL parameters</s2> <s2># SSL parameters</s2> <s2># SSO protection</s2> <s2># SSO protection</s2> <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <s2>DocumentRoot</s2> /var/www/localsite   <s2>DocumentRoot</s2> /var/www/localsite   <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> <s2>ProxyPreserveHost</s2> <s3>on</s3> <s2>ProxyPreserveHost</s2> <s3>on</s3> <s2>RewriteEngine</s2> <s3>On</s3> <s2>RewriteEngine</s2> <s3>On</s3> <s2>SetEnvIfNoCase</s2> Auth-<s3>User</s3> <s4>"(.*)"</s4> PHP_AUTH_USER=$1   <s2>SetEnvIfNoCase</s2> Auth-<s3>User</s3> <s4>"(.*)"</s4> PHP_AUTH_USER=$1   <s2>SetEnvIfNoCase</s2> Auth-<s3>User</s3> <s4>"(.*)"</s4> REMOTE_USER=$1   <s2>SetEnvIfNoCase</s2> Auth-<s3>User</s3> <s4>"(.*)"</s4> REMOTE_USER=$1   <s2>SetHandler</s2> perl-<s3>script</s3> <s2>SetHandler</s2> perl-<s3>script</s3> <s2>require</s2> Lemonldap::NG::Portal::SharedConf; <s2>require</s2> Lemonldap::NG::Portal::SharedConf; <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> <s31>...</s31> <s31>...</s31> <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> <s32>}</s32><s33>;</s33> <s32>}</s32><s33>;</s33> <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> <s3># DocumentRoot</s3> <s3># DocumentRoot</s3> <s3># Uncomment this line if you use Lemonldap::NG menu</s3> <s3># Décommentez cette ligne si vous utilisez le menu Lemonldap::NG</s3> <s3># needed): choose your URL to avoid restarting Apache when</s3> <s3># nécessaire) : choisir une URL pour éviter d'avoir à redémarrer Apache lorsque</s3> <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Example<s8><s9></OrganizationName<s10>></s10></s9></s8> <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Exemple<s8><s9></OrganizationName<s10>></s10></s9></s8> <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> <s3>DocumentRoot</s3> /usr/share/obm/php   <s3>DocumentRoot</s3> /usr/share/obm/php   <s3>DocumentRoot</s3> /var/www/html/drupal/ <s3>DocumentRoot</s3> /var/www/html/drupal/ <s3>ErrorLog</s3> /var/log/apache2/localsite_error.log <s3>ErrorLog</s3> /var/log/apache2/localsite_error.log <s3>Order</s3> <s4>deny</s4>,<s5>allow</s5> <s3>Order</s3> <s4>deny</s4>,<s5>allow</s5> <s3>ProxyPass</s3> / http://APPLICATION_IP/   <s3>ProxyPass</s3> / http://APPLICATION_IP/   <s3>ProxyPass</s3> / http://private-name/ <s3>ProxyPass</s3> / http://private-name/ <s3>RewriteRule</s3> ^/cas/.* /index.pl <s3>RewriteRule</s3> ^/cas/.* /index.pl <s3>RewriteRule</s3> ^/openidserver/.* /index.pl <s3>RewriteRule</s3> ^/openidserver/.* /index.pl <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl <s3>ServerName</s3> appl1.example.com <s3>ServerName</s3> appl1.example.com <s3>{</s3> <s3>{</s3> <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> <s45>//"userobm_domain_id" => ,</s45> <s45>//"userobm_domain_id" => ,</s45> <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> <s4># Change "Location" header in redirections</s4> <s4># Changer les en-têtes "Location" dans les redirections</s4> <s4># configuration change</s4> <s4># la configuration est changée</s4> <s4>Allow</s4> from <s5>all</s5> <s4>Allow</s4> from <s5>all</s5> <s4>CustomLog</s4> /var/log/apache2/localsite_access.log combined   </<s5>VirtualHost</s5>> <s4>CustomLog</s4> /var/log/apache2/localsite_access.log combined   </<s5>VirtualHost</s5>> <s4>Deny</s4> from <s5>all</s5> <s4>Deny</s4> from <s5>all</s5> <s4>DirectoryIndex</s4> index.php   <s4>DirectoryIndex</s4> index.php   <s4>DocumentRoot</s4> /var/lib/lemonldap-ng/manager/ <s4>DocumentRoot</s4> /var/lib/lemonldap-ng/manager/ <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s4>ProxyPass</s4> / http://APPLICATION_IP/ <s4>ProxyPass</s4> / http://APPLICATION_IP/ <s4>ProxyPass</s4> / http://hiddenappl1.example.com/ <s4>ProxyPass</s4> / http://hiddenappl1.example.com/ <s4>ProxyPreserveHost</s4> <s5>on</s5>   <s4>ProxyPreserveHost</s4> <s5>on</s5>   <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl <s4>require</s4> Lemonldap::NG::Portal::Menu; <s4>require</s4> Lemonldap::NG::Portal::Menu; <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> <s54>//"userobm_password_type" => ,</s54> <s54>//"userobm_password_type" => ,</s54> <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> <s59>//"userobm_kind" => ,</s59> <s59>//"userobm_kind" => ,</s59> <s59><s60></bean<s61>></s61></s60></s59> <s59><s60></bean<s61>></s61></s60></s59> <s5># Redirect admin pages</s5> <s5># Rediriger les pages d'administration</s5> <s5># Uncomment this line if you use Lemonldap::NG menu</s5> <s5># Décommenter cette ligne si le menu Lemonldap::NG est utilisé</s5> <s5># Uncomment this line if you use portal SOAP capabilities</s5> <s5># Décommentez cette ligne si vous utilisez les capacités SOAP du portail</s5> <s5>Alias</s5> /limesurvey /var/www/html/limesurvey <s5>Alias</s5> /limesurvey /var/www/html/limesurvey <s5>Allow</s5> from 127.0.0.0/8 <s5>Allow</s5> from 127.0.0.0/8 <s5>Allow</s5> from <s6>all</s6> <s5>Allow</s5> from <s6>all</s6> <s5>AuthType</s5> Basic <s5>AuthType</s5> Basic <s5>Deny</s5> from <s6>all</s6> <s5>Deny</s5> from <s6>all</s6> <s5>DocumentRoot</s5> /var/www/application   </<s6>VirtualHost</s6>> <s5>DocumentRoot</s5> /var/www/application   </<s6>VirtualHost</s6>> <s5>ProxyPassReverse</s5> / http://APPLICATION_IP/   </<s6>VirtualHost</s6>> <s5>ProxyPassReverse</s5> / http://APPLICATION_IP/   </<s6>VirtualHost</s6>> <s5>ProxyPassReverse</s5> / http://hiddenappl1.example.com/ <s5>ProxyPassReverse</s5> / http://hiddenappl1.example.com/ <s5>ProxyPassReverse</s5> / http://private-name/ <s5>ProxyPassReverse</s5> / http://private-name/ <s5>RewriteRule</s5> ^/saml/.* /index.pl <s5>RewriteRule</s5> ^/saml/.* /index.pl <s5>my</s5> <s6>$portal</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s5>my</s5> <s6>$portal</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> <s6># ...</s6> } <s6># ...</s6> } <s6># Change domain cookies</s6> <s6># Changer le domaine des cookies</s6> <s6>Allow</s6> from 127.0.0.0/8 <s6>Allow</s6> from 127.0.0.0/8 <s6>Allow</s6> from 127.0.0.0/8 192.168.100.0/32 <s6>Allow</s6> from 127.0.0.0/8 192.168.100.0/32 <s6>AuthBasicProvider</s6> ldap <s6>AuthBasicProvider</s6> ldap <s6>AuthType</s6> Basic <s6>AuthType</s6> Basic <s6>Deny</s6> from <s7>all</s7> <s6>Deny</s6> from <s7>all</s7> <s6>DocumentRoot</s6> /var/www/html/limesurvey   </<s7>VirtualHost</s7>> <s6>DocumentRoot</s6> /var/www/html/limesurvey   </<s7>VirtualHost</s7>> <s6>ErrorLog</s6> /var/log/apache2/proxysite_error.log <s6>ErrorLog</s6> /var/log/apache2/proxysite_error.log <s6>Options</s6> +ExecCGI <s6>Options</s6> +ExecCGI <s6>Order</s6> <s7>deny</s7>,<s8>allow</s8> <s6>Order</s6> <s7>deny</s7>,<s8>allow</s8> <s6>ProxyPassReverseCookieDomain</s6> / http://hiddenappl1.example.com/ </<s7>VirtualHost</s7>> <s6>ProxyPassReverseCookieDomain</s6> / http://hiddenappl1.example.com/ </<s7>VirtualHost</s7>> <s6>RewriteEngine</s6> <s7>On</s7> <s6>RewriteEngine</s6> <s7>On</s7> <s6>require</s6> Lemonldap::NG::Portal::Menu; <s6>require</s6> Lemonldap::NG::Portal::Menu; <s6>require</s6> SOAP::Lite; </Perl> <s6>require</s6> SOAP::Lite; </Perl> <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s77>//"userobm_account_dateexp" => ,</s77> <s77>//"userobm_account_dateexp" => ,</s77> <s78>//"userobm_delegation_target" => ,</s78> <s78>//"userobm_delegation_target" => ,</s78> <s79>//"userobm_delegation" => ,</s79> <s79>//"userobm_delegation" => ,</s79> <s7># CAS Issuer</s7> <s7># Fournisseur d'identité CAS</s7> <s7># Uncomment this line if you use portal SOAP capabilities</s7> <s7># Décommenter cette ligne si les fonctions SOAP du portail sont utilisées</s7> <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> <s7>Allow</s7> from 127.0.0.0/8 <s7>Allow</s7> from 127.0.0.0/8 <s7>Allow</s7> from 192.168.2.0/24 </<s8>Location</s8>> <s7>Allow</s7> from 192.168.2.0/24 </<s8>Location</s8>> <s7>Allow</s7> from 192.168.2.0/24 </<s8>Location</s8>>   <s9># SOAP functions for sessions access (disabled by default)</s9> <<s10>Location</s10> /index.pl/sessions> <s7>Allow</s7> from 192.168.2.0/24 </<s8>Location</s8>>   <s9># SOAP functions for sessions access (disabled by default)</s9> <<s10>Location</s10> /index.pl/sessions> <s7>Allow</s7> from <s8>all</s8> <s7>Allow</s7> from <s8>all</s8> <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> <s7>AuthName</s7> <s8>"Lemonldap::NG manager"</s8> <s7>AuthName</s7> <s8>"Lemonldap::NG manager"</s8> <s7>CustomLog</s7> /var/log/apache2/proxysite_access.log combined </<s8>VirtualHost</s8>> <s7>CustomLog</s7> /var/log/apache2/proxysite_access.log combined </<s8>VirtualHost</s8>> <s7>Options</s7> +ExecCGI <s7>Options</s7> +ExecCGI <s7>ProxyPassReverseCookieDomain</s7> private-name application.example.com   <s7>ProxyPassReverseCookieDomain</s7> private-name application.example.com   <s7>}</s7> <s8>)</s8><s9>;</s9> <s7>}</s7> <s8>)</s8><s9>;</s9> <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s84>//"userobm_archive" => ,</s84> <s84>//"userobm_archive" => ,</s84> <s85>//"userobm_hidden" => ,</s85> <s85>//"userobm_hidden" => ,</s85> <s86>//"userobm_status" => ,</s86> <s86>//"userobm_status" => ,</s86> <s87>//"userobm_local" => ,</s87> <s87>//"userobm_local" => ,</s87> <s88>//"userobm_photo_id" => ,</s88> <s88>//"userobm_photo_id" => ,</s88> <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> <s8># SOAP functions for sessions access (disabled by default)</s8> <s8># Fonctions SOAP pour l'accès aux sessions (désactivées par défaut)</s8> <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> <s8>Allow</s8> from 127.0.0.0/8 <s8>Allow</s8> from 127.0.0.0/8 <s8>ErrorLog</s8> /var/log/apache2/proxysite_error.log <s8>ErrorLog</s8> /var/log/apache2/proxysite_error.log <s8>Options</s8> +ExecCGI <s8>Options</s8> +ExecCGI <s8>RewriteCond</s8> %{QUERY_STRING} q=(admin|user) <s8>RewriteCond</s8> %{QUERY_STRING} q=(admin|user) <s8>require</s8> SOAP::Lite; </Perl> <s8>require</s8> SOAP::Lite; </Perl> <s93>//"userobom_phone2" => ,</s93> <s93>//"userobom_phone2" => ,</s93> <s94>//"userobm_mobile" => ,</s94> <s94>//"userobm_mobile" => ,</s94> <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> <s99>//"userobm_fax2" => ,</s99> <s99>//"userobm_fax2" => ,</s99> <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> <s9>AuthUserFile</s9> /usr/local/apache/passwd/passwords <s9>AuthUserFile</s9> /usr/local/apache/passwd/passwords <s9>CustomLog</s9> /var/log/apache2/proxysite_access.log combined </<s10>VirtualHost</s10>> <s9>CustomLog</s9> /var/log/apache2/proxysite_access.log combined </<s10>VirtualHost</s10>> <s9>Deny</s9> from <s10>all</s10> <s9>Deny</s9> from <s10>all</s10> <s9>Options</s9> +ExecCGI <s9>Options</s9> +ExecCGI <s9>Options</s9> +ExecCGI   <s9>Options</s9> +ExecCGI   <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> <s9>RewriteEngine</s9> <s10>On</s10> <s9>RewriteEngine</s9> <s10>On</s10> <s9>RewriteRule</s9> ^/(.*)$ http://admindrupal.example.com/$1 [R]   <s9>RewriteRule</s9> ^/(.*)$ http://admindrupal.example.com/$1 [R]   <subtitle>: subtitle to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <subtitle> : sous-titre : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> <text>: paragraph to display: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifText”>…</p> <text> : paragraphe à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifText”>…</p> <title>: title to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <title> : titre à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> A A A <a0>Apache::Session::Browseable::Redis</a0> has been created, it is the faster Un module <a0>Apache::Session::Browseable::Redis</a0> a été créé, c'est le plus rapide A <a0>Apache::Session::Browseable::Redis</a0> has been created, it is the faster (except for session explorer, defeated by Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) Un module <a0>Apache::Session::Browseable::Redis</a0> a été créé, c'est le plus rapide (excepté pour l'explorateur de sessions, battu par Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) A <a0>CAS server</a0> with <a1>SAML authentication</a1> Un <a0> serveur CAS</a0> avec une <a1>authentification SAML</a1> A Apache::Session::Browseable::Redis module is in preparation, it will be the faster Un module Apache::Session::Browseable::Redis est en préparation, il sera le plus rapide A Zimbra Handler is called Un handler Zimbra est appelé A click on a key will display the associated value. Un click sur la clef affiche la valeur associée. A computer with a GNU/Linux or recent UNIX system Un serveur équipé d'un GNU/Linux ou d'un système UNIX récent A cup of coffee (or tea, we are open minded) Une tasse de café (ou de thé, nous sommes ouverts) A day has 24 hours, and a week 7 days, so the value contains 168 bits, converted into 42 hexadecimal characters. Un jour a 24 heures et une semaine 7 jours, donc la valeur contient 168 bits, convertie en 42 caractères hexadécimaux. A little floating menu can be added to application with this simple Apache configuration: Un petit menu flottant peut être ajouté aux applications par une seimple configuration Apache : A little macro: Une petite macro : A login is considered as successful if user get authenticated and is granted a session; as failed, if he fails to authenticate or if he is not allowed to open a session. Une connexion est considérée comme réussie si l'utilisateur est authentifié et autorisé à ouvrir une session ; comme échouée, sinon. A macro is stored as attributes: it can contain boolean results or any string Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères A mail with a token is sent to user Un courriel avec une valeur est envoyé à l'utilisateur A name Un nom A request to the main session database is done (trough <a1>SOAP session backend</a1>) to be sure that the session exists. Une requête à la base de données des sessions principale est effectuée (via le <a1>backend de session SOAP</a1>) pour être sûr que la session existe. A rule associates a <a0>regular expression</a0> to a <a1>Perl</a1> boolean expression or a keyword. Une règle associe une <a0>expression régulière</a0> à une expression booléenne <a1>Perl</a1> ou un mot-clef. A session key can be associated to more than one SREG attribute. Une clef de session peut être associée à un ou plusieurs attributs SREG. A skin is composed of different files: Un thème est composé de différents fichiers : A skin will often refer to the <c0>common</c0> skin, which is not a real skin, but shared skin objects (like scripts, images and <a1>CSS</a1>). Un thème se réfère souvent au thème <c0>common</c0>, qui n'est pas un thème réel mais contient des objects partagés (tels les scripts, images et <a1>CSS</a1>). A special <a0>URL</a0> is declared in application menu (like <a1>http://zimbra.example.com/zimbrasso</a1>) Une <a0>URL</a0> spéciale est declarée dans le menu des applications (telle <a1>http://zimbra.example.com/zimbrasso</a1>) A specific persistent session is created with this module, to store attribute values returned by Google. Une session persistente est créée avec ce module pour stocker les valeurs d'attribut renvoyées par Google. A start date and an end date (to open or close the service even the entry already exists) Des dates de début et de fin (pour restreindre l'accès aux services même si l'entrée existe) A time profile (allowed hours and day of the week) Un profil de temps (heures et jours de la semaine autorisés) A value Une valeur A virtual host contains: Un hôte vituel contient : A web browser launched from the computer (to access localhost) Un navigateur web lançé depuis ce serveur (pour accéder à la boucle locale) API documentation Documentation de l'interface de programmation (API) APT-GET APT-GET ASF-WS ASF-WS AbulEdu AbulEdu Accept all authenticated users: Accepte tout utilisateur authentifié : Accept some specificities: Autres possibilités : Access Control List Liste de contrôle d'accès Access control possible by creating one user for Manager (write) and another for portal and handlers (read) Contrôle d'accès possible en créant un compte pour le manager (écriture) et un autre pour le portail et les agents (lecture) Access log: the issuer of each request is identified Journaux d'accès (AccessLog) : l'utilisateur de chaque requête est identifié Access protected application Accéder aux applications protégées Access rule Règle d'accès Access rule in virtual host Règle d'accès à un hôte virtuel Access rule: <c0>$groups =~ /\badministrators\b/</c0> Règle d'accès : <c0>$groups =~ /\badministrators\b/</c0> Access rule: <c0>accept</c0> Règle d'accès : <c0>accept</c0> Access rules Règles d'accès Access rules and HTTP headers Règles d'accès et en-têtes HTTP Access rules values can be: Les valeurs des règles d'accès peuvent être : Access rules: check user's right on <a0>URL</a0> patterns Des règles d'accès : examine les droits de l'utilisateur via des expressions sur les <a0>URL</a0> Access to Liferay (first time): Accès à Liferay (première connexion): Access to configuration Accès à la configuration Accounting Traçabilité Activate auto accept timer Activer le compte-à-rebours d'acceptation automatique Activation Activation Active Directory Active Directory Active Directory compliance Compatibilité Active Directory Adapt the reload virtual host name to the domain you configured. Adapter le nom d'hôte virtuel de rechargement au domaine configuré. Add a floating menu Ajouter un menu flottant Add an Apache access control to avoid other access. Ajouter un contrôle d'accès Apache pour éviter les autres accès. Add it to trustedDomains (or set <c0>*</c0> in trustedDomains to accept all). L'ajouter à trustedDomains (ou mettre <c0>*</c0> dans trustedDomains pour tout accepter). Add on your <c0>server.xml</c0> file a new valve entry like this (in host section): Ajouter dans le fichier <c0>server.xml</c0> une nouvelle valve comme ci-dessous (dans la section host): Admin Admin Admin Magazin Admin Magazin Admin: can create surveys Admin : peut créer des surveillances Administration Administration Advanced Avancé Advanced configuration Configuration avancée Advanced features Fonctionnalités avancées Advantages: Avantages : After choosing the file name (for example lemonldapn-ng-priv.key), download the key on your disk. Après avoir choisi le nom de fichier (par exemple lemonldapn-ng-priv.key), le télécharger sur le disque. After configuration is saved by Manager, LemonLDAP::NG will try to reload configuration on distant Handlers by sending an <a0>HTTP</a0> request to the servers. Lorsque la configuration est sauvegardée par le manager, LemonLDAP::NG tente de recharger la configuration des agents distants en envoyant une requête <a0>HTTP</a0> aux serveurs. After configuration is saved by Manager, LemonLDAP::NG will try to reload configuration on distant Handlers. Lorsque la configuration est sauvegardée par le manager, LemonLDAP::NG tente de recharger la configuration des agents distants. After configuring <a0>SAML</a0> Service, you can export metadata to your partner Identity Provider. Après avoir configuré le service <a0>SAML</a0> Service, exporter les metadatas vers le fournisseur d'identité partenaire. After configuring <a0>SAML</a0> Service, you can export metadata to your partner Service Provider. Après avoir configuré le service <a0>SAML</a0>, exporter les métadonnéesvers le fournisseur de service partenaire. After logout process, the user is redirected on portal, or on a configured <a0>URL</a0>. Après déconnexion, l'utilisateur est redirigé vers une <a0>URL</a0> configurée ou vers le portail. After redirection, normal authentication in the remote portal Après redirection, authentification normale sur le portail distant (celui de son organisation) All <a0>Perl</a0> modules are in the VENDOR perl directory Tous les modules <a0>Perl</a0> se trouvent dans le répertoire VENDOR de Perl All <a0>Perl</a0> modules are in the VENDOR perl directory (/usr/share/perl5/) Tous les modules <a0>Perl</a0> se trouvent dans le répertoire VENDOR de Perl (/usr/share/perl5/) All <a0>Perl</a0> scripts/pages are in /var/lib/lemonldap-ng/ Tous les scripts/pages <a0>Perl</a0> se trouvent dans /var/lib/lemonldap-ng/ All <a0>SSL</a0> options are documented in <a1>Apache mod_ssl page</a1>. Toutes les options <a0>SSL</a0> sont documentées dans la <a1>page mod_ssl d'Apache</a1>. All <a1>Apache::Session</a1> style modules are useable except for some features. Tous les modules de type <a1>Apache::Session</a1> sont utilisables excepté pour quelques fonctionnalités. All data is stored in plain text files – no database is required. Toutes les données sont stockées dans des fichiers texte, aucune base de données n'est nécessaire. All environment variables (trough %ENV) Toutes les variables d'environnement (via %ENV) All fields name and values Tous les noms de champs et leurs valeurs All handlers download the whole configuration, so many servers can serve the same virtual hosts Tous les agents téléchargent intégralement la configuration, donc plusieurs serveurs peuvent servir le même hôte virtuel All identity provider protocols can be used simultaneously Tous les protocoles de fournisseur d'identité peuvent être utilisés simultanément All lemonldap-ng tools are in /usr/share/lemonldap-ng/bin/ Tous les outils lemonldap-ng se trouvent dans /usr/share/lemonldap-ng/bin/ All other elements will be removed including <a0>HTML</a0> elements like <b>. Tous les autres éléments seront supprimés y compris les balises <a0>HTML</a0> telles <b>. All pages Toutes les pages All rules are concerned: Toutes les règles sont concernées : All static content (examples, <a0>CSS</a0>, images, etc.) is in /usr/share/lemonldap-ng/ Tous le contenu statique (exemples, <a0>CSS</a0>, images, etc...) se trouve dans /usr/share/lemonldap-ng/ All this work is transparent for the user, he cannot see what data are posted by <a1>LL::NG</a1>. Tout ce travail est transparent pour l'utilisateur et il ne peut voir ce qui est envoyé par <a1>LL::NG</a1>. All versions: Toutes les versions: Allow form autocompletion Autorise l'autocompletion du formulaire Allow no certificate to chain with other authentication methods Autoriser les clients sans certificat dans le chaînage avec d'autres méthodes d'authentification Allow only admin and superadmin roles Autorisé seulement pour les rôles admin et superadmin Allow only one <a0>IP</a0> address per user N'autoriser qu'une adresse <a0>IP</a0> par utilisateur Allow only one session per <a0>IP</a0> address N'autoriser qu'une session par adresse <a0>IP</a0> Allow only one session per user N'autoriser qu'une session par utilisateur Allow only users with a LimeSurvey role Autorise seulement les utilisateurs avec un rôle LimeSurvey Alphabetical Index Index alphabétique Also, all backends parameters are displayed. Ainsi tous les paramètres des backends sont affichés. American Standard Code for Information Interchange American Standard Code for Information Interchange An <a0>HTTP</a0> header is defined by: Un en-tête <a0>HTTP</a0> est défini par : An <a0>LDAP</a0> directory with a user account (default suffix: dc=example,dc=com) Un annuaire <a0>LDAP</a0> avec un compte (suffixe par défaut : dc=example,dc=com) An <a0>OpenID server</a0> with <a1>CAS authentication</a1> Un <a0>serveur OpenID</a0> avec une <a1>authentification CAS</a1> An <a0>SAML server</a0> with <a1>OpenID authentication</a1> Un <a0>serveur SAML</a0> avec une <a1>authentification OpenID</a1> An <a0>URL</a0> pattern (or <c1>default</c1> to match all URLs) Une expression rationnelle sur l'<a0>URL</a0> (ou <c1>default</c1> qui correspond à toutes les URL) An <a0>URL</a0> pattern (or <c1>default</c1> to match other URLs) Une expression sur l'<a0>URL</a0> (ou <c1>default</c1> pour les URLs ne correspondant pas aux règles) An <a0>enterprise Google Apps account</a0> Un <a0>compte applicatif Google entreprise</a0> An Apache restart will work, but LemonLDAP::NG offers the mean to reload them through an <a0>HTTP</a0> request. Un redémarrage d'Apache marchera, mais LemonLDAP::NG offre le moyen de les recharger via une requête <a0>HTTP</a0>. An Apache restart will work, but LemonLDAP::NG offers the mean to reload them trough an <a0>HTTP</a0> request. Un redémarrage d'Apache suffit, mais LemonLDAP::NG offre le moyen de les recharger via une requête <a0>HTTP</a0>. An Apache session module was created by <a0>LL::NG</a0> team to store sessions in an <a1>LDAP</a1> directory. Un module Apache::Session a été créé par l'équipe de développement de <a0>LL::NG</a0> pour stocker les sessions dans un annuaire <a1>LDAP</a1>. An access rule Une règle d'accès An apache virtual host protected by LemonLDAP::NG Handler must be registered in LemonLDAP::NG configuration. Un hôte virtuel apache protégé par un agent LemonLDAP::NG doit être enregistré dans la configuration LemonLDAP::NG. An application name (to allow access by applications and not by group of users) Un nom d'application (pour autoriser l'accès aux applications sans utiliser les groupes) An authorization is defined by: Une autorisation est définie pas : An error occurs on server side: SERVER_ERROR (500) Une erreur est survenue côté serveur : SERVER_ERROR (500) An example is given under the source tree : lemonldap-ng-portal/example/index.fcgi Un exemple est disponible dans l'arborescence des sources : lemonldap-ng-portal/example/index.fcgi And a protected virtual host with LemonLDAP::NG as reverse proxy: Et un reverse-proxy protégé par LemonLDAP::NG : And fill it: et le remplir : And run the “dist” target: Lancer la cible “dist” : And the mail filter is: Et le filtre d'adresse mail est : And this as mail filter: Et ce filtre de mail : Anonymous access Accès anonyme Another <a0>LL::NG</a0> system configured with <a1>CAS authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification CAS</a1> Another <a0>LL::NG</a0> system configured with <a1>OpenID authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification OpenID</a1> Another <a0>LL::NG</a0> system configured with <a1>SAML authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification SAML</a1> Anti frame protection Protection anti-frame Any <a0>CAS</a0> consumer N'importe quel client <a0>CAS</a0> Any <a0>SAML</a0> Service Provider, for example: Tout fournisseur de service <a0>SAML</a0>, par exemple: Any OpenID consumer N'importe quel client OpenID Apache Apache Apache (Kerberos, NTLM, OTP, ...) Apache (Kerberos, NTLM, OTP, ...) Apache <a0>SetEnvIf module</a0> will let you transform the Auth-User <a1>HTTP</a1> header in <c2>REMOTE_USER</c2> environment variable: Le <a0>module SetEnvIf</a0> d'Apache peut transformer l'en-tête <a1>HTTP</a1> Auth-User en variable d'environnement <c2>REMOTE_USER</c2> : Apache Kerberos module Module Kerberos d'Apache Apache SSL global configuration Configuration globale de ssl dans Apache Apache Tomcat Apache Tomcat Apache authentication level Niveau d'authentification d'Apache Apache authentication module will set the <c0>REMOTE_USER</c0> environment variable, which will be used by <a1>LL::NG</a1> to get authenticated user. Les modules d'authentification Apache renseignent la variable d'environnement <c0>REMOTE_USER</c0>, qui sera utilisée par <a1>LL::NG</a1> pour obtenir le nom d'utilisateur authentifié. Apache based protection Protection basée sur Apache Apache based protection allow to be be independent from WebSSO, so Manager will always be reachable even if WebSSO configuration is corrupted. Une protection basée sur Apache permet d'être indépendant du WebSSO, ainsi le manager est toujours accessible même si la configuration du WebSSO est corrompue. Apache based protection allow to be independent from WebSSO, so Manager will always be reachable even if WebSSO configuration is corrupted. Une protection basée sur Apache permet d'être indépendant du WebSSO, ainsi le manager est toujours accessible même si la configuration du WebSSO est corrompue. Apache built-in modules (Kerberos, NTLM , OTP, …) Support des modules Apache (Kerberos, NTLM , OTP, …) Apache configuration Configuration d'Apache Apache configuration file on <a0>LL::NG</a0> reverse proxy (hosting <a1>LL::NG</a1> Handler): le fichier de configuration d'Apache sur le reverse-proxy <a0>LL::NG</a0> (celui qui héberge l'agent <a1>LL::NG</a1>): Apache configuration file on application server (hosting the application): le fichier de configuration d'Apache sur le serveur d'application (celui qui héberge l'application): Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available Les fichiers de configuration Apache se trouvent dans /etc/lemonldap-ng et liés dans /etc/apache2/sites-available Apache is not configured to authenticate users ! Apache is not configured to authenticate users ! Apache logging Journaux d'Apache Apache logs Journalisation par Apache Apache portal SSL configuration Configuration SSL du portail dans Apache Apache rewrite rules Régles de réécriture d'Apache Apache rewrite rules must have been activated in <a0>Apache portal configuration</a0>: Le module Rewrite d'Apache doit être activé dans la <a0>configuration Apache du portail</a0>: Apache virtual host Hôte virtuel Apache : Apache::Session Apache::Session Apache::Session performances Performances d'Apache::Session Apache::Session::Browseable::MySQL doesn't use locks so performances are keeped. Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances. Application Programming Interface Interface de programmation Application menu Menu application Application parameters: Paramètres des applications : Applications Applications Applications listed bellow are known to be easy to integrate in <a0>LL::NG</a0>. Les applications listées ci-dessous sont connues pour être faciles à intégrer à <a0>LL::NG</a0>. Applications protection Protection des applications Architecture Architecture Artifact Resolution Résolution des artifacts As <a0>DBI</a0> is a login/password based module, the authentication level can be: Comme <a0>DBI</a0> est un module de type login/mot-de-passe, le niveau d'authentification peut être : As <a0>LDAP</a0> is a login/password based module, the authentication level can be: Comme <a0>LDAP</a0> est un module de type login/mot-de-passe, le niveau d'authentification peut être : As <a1>LL::NG</a1> works like classic WebSSO (like Siteminder™), many other applications are easy to integrate. Comme <a1>LL::NG</a1> fonctionne comme un WebSSO classique (tel Siteminder™), de nombreuses applications sont faciles à integrer. As Handlers keep configuration in cache, when configuration change, it should be updated in Handlers. Comme les agents gardent leur configuration en cache, lorsque la configuration est changée elle doit être mise à jour dans les agents. As J2EE servlet container, Tomcat provides standard security feature, like authentication: the application deployed in Tomcat can delegate its authentication to Tomcat. Comme conteneur de servlet J2EE, Tomcat fournit les fonctionnalités de sécurité standards, telles l'authentification : une application déployée dans Tomcat peut déléguer son authentification à Tomcat. As administrator, go in Google Apps control panel and click on Advanced tools: Comme administrateur, aller dans le panneau de contrôle Google Apps et cliquer sur les outils avancés click (Advanced tools) : As described in <a0>performances chapter</a0>, you can use macros, local macros,… Comme indiqué au <a0>chapître performances</a0>, on peut utiliser des macros, macros locales,… As passwords will not be managed by <a0>LL::NG</a0>, you can disable <a1>menu password module</a1>. Comme les mots-de-passe ne sernt pas gérés par <a0>LL::NG</a0>, il est possile de désactiver le <a1>module mots-de-passe du menu</a1>. As same for groups: a group rule may involve another, previously computed group. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment. As this may be a security hole, password store in session is not activated by default Comme ce peut être un trou de sécurité, ce stockage en session n'est pas activé par défaut As you may have guessed, these accounts are famous characters from the TV show <a0>Doctor Who</a0>. Comme on peut le voir, ces comptes sont les fameux caractères du show TV <a0>Doctor Who</a0>. Assertion Consumer Consommateur d'assertions At least, check if it is not a <a1>known application</a1>, or <a2>try to adapt its source code</a2>. Ainsi, vérifier si l'<a1>application est connue</a1> ou <a2>essayer d'adapter le code source</a2>. Attribute Authority Autorité d'attributs Attribute Service Service d'attribut Attributes and macros Attributs et macros Attributes exported in <a0>SOAP</a0> Attributs exportés par <a0>SOAP</a0> Attributes from user backend Attributs récupérés du module utilisateur Auth-Admin Auth-Admin Auth-Cn Auth-Cn Auth-Mail Auth-Mail Auth-Password => $_password Auth-Password => $_password Auth-Roles => $aaaRoles Auth-Roles => $aaaRoles Auth-Roles => $bbbRoles Auth-Roles => $bbbRoles Auth-Roles => $ssoRoles Auth-Roles => $ssoRoles Auth-SuperAdmin Auth-SuperAdmin Auth-User Auth-User AuthApache authentication Authentification AuthApache AuthBasic Handler Agent AuthBasic AuthCAS AuthCAS AuthLDAPFilter AuthLDAPFilter Authen::SASL Authen::SASL Authentication Authentification Authentication Authorization Accounting Authentification Autorisation Traçabilité Authentication and UserDB Authentification et base d'utilisateurs Authentication backend Module d'authentification Authentication choice will also be registered in session: Le choix d'authentication est également enregistré dans la session : Authentication contexts Contextes d'authentification Authentication level Niveau d'authentification Authentication module Module d'authentication Authentication module: <a0>SAML</a0> Module d'authentification : <a0>SAML</a0> Authentication modules Modules d'authentification Authentication portal Portails d'authentification Authentication process main steps are: Les étapes du processus d'authentication sont : Authentication protocols Authentication protocols Authentication request Requête d'authentification Authentication response Réponse d'authentification Authentication table Table d'authentification Authentication table and user table can be the same. Les tables d'authentification et utilisateurs peuvent être confondues. Authentication table: where login and password are stored La table d'authentification : où les logins and et mots-de-passe sont stockés Authentication with Kerberos Authentification avec Kerberos Authentication with login/password Authentification par nom-de-compte/mot-de-passe Authentication, Authorization and Accounting (AAA) mechanisms Mécanismes d'authentification, d'autorisation et de traçabilité (AAA) Authentication, users and password databases Bases de données d'authentification, des utilisateurs et des mots-de-passe Authentication: select row in authentication table matching user and password Authentification : selectionne la ligne de la table d'authentification contenant l'utilisateur et le mot-de-passe Authentication: will check user login in a header and create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : recherche le nom d'utilisateur dans un en-tête et crée la session sans exiger de mot-de-passe (mais enregistre l'adresse <a0>IP</a0> cliente et la date) Authentication: will create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : créé une session sans demander quoi que ce soit (mais enregistre l'adresse <a0>IP</a0> cliente et la date de création) Authorization Autorisations Authorization => "Basic ".encode_base64("$uid:$_password") Authorization => "Basic ".encode_base64("$uid:$_password") Authorization => basic($uid,$_password) Authorization => basic($uid,$_password) Authorization is controlled only by Handlers. Les autorisations sont vérifiées seulement par les agents (handlers). Authorizations are defined inside a virtualhost and takes effect only on it. Les autorisations sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Auto login Auto login Automatic REMOTE_USER Automatic REMOTE_USER Available bindings are: Les déclarations disponibles sont : Available parameters are: Paramètres disponibles : B B Back to main index Retour à l'index principal Backend Backend Backend choice by users Backend choisit par l'utilisateur Backends Backends Be careful for Windows user, path must contains ”/”. Attention avec les systèmes Windows, le séparateur de répertoire est le ”/”. Be careful with URL parameters Attention aux paramètres des URL Be careful with some applications which doesn't verify Lemonldap::NG headers after having created their own cookies. Faire attention avec certaines applications qui ne vérifient pas les en-têtes Lemonldap::NG après avoir créé leurs propres cookies. Be sure that mod_rewrite is installed and that SAML2 rewrite rules are activated in <a0>Apache portal configuration</a0>: Assurez-vous que mod_rewrite est installé et que les règles de réécriture SAML2 sont activées dans la <a0>configuration Apache du portail</a0>: Before enabling Manager protection by <a0>LL::NG</a0>, you must have configured how users authenticate on Portal, and test that you can log in without difficulties. Avant d'activer la protection du manager par <a0>LL::NG</a0>, il faut avoir configuré la méthode d'authentification sur le portail et véifier qu'on peut s'y connecter sans difficultés. Before installing the packages, install <a0>dependencies</a0>. Avant d'installer les paquets, installer les <a0>dépendances</a0>. Before installing the packages, install all <a0>dependencies</a0>. Avant d'installer les paquets, installer toutes les <a0>dépendances</a0>. Before transmission, the username and password are encoded as a sequence of base-64 characters. Avant la transmission, le nom et le mot de passe sont encodés en base-64. Before, when <a0>SSL</a0> authentication failed, an option could be set to fail back to <a1>LDAP authentication backend</a1>. Auparavant, lorsque l'authentification <a0>SSL</a0> échouait, une option pouvait être activée pour retomber sur le <a1>backend d'authentification LDAP</a1>. Before, you have to create the virtual host <c0>manager.your.domain</c0> in the manager and set a <a1>rules</a1>, else access to the manager will be denied. Avant, il faut créer l'hôte virtuel <c0>manager.your.domain</c0> dans le manager et mettre une <a1>règle</a1>, sinon l'accès au manager sera interdit. Below are documented internal variables. Ci-dessous sont documentées les variables internes. Berlin Berlin Besides, macros and groups are computed in alphanumeric order, that is, in the order they are displayed in the manager. Egalement, les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Bibliothèque Publique d'Information Bibliothèque Publique d'Information Binaries install : Installer les exécutables : Binding Méthode Body for confirmation mail Corps du message de confirmation Body for password mail Corps du message de changement de mot-de-passe Bordeaux Bordeaux Browseable (SQL, Redis or LDAP) Browseable (SQL, Redis ou LDAP) Browseable session backend Backend de session explorable Browseable session backend (<a0>Apache::Session::Browseable</a0>) works exactly like Apache::Session::* corresponding module but add indexes that increase <a1>session explorer</a1> and <a2>session restrictions</a2> performances. Le backend de session explorable (<a0>Apache::Session::Browseable</a0>) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'<a1>explorateur de session</a1> et les <a2>restrictions de sessions</a2>. BrowserID BrowserID BrowserID (Mozilla Persona) BrowserID (Mozilla Persona) BrowserID is also known as Mozilla Persona. BrowserID est également connu sous le nom de « Mozilla Persona ». Bruxelles Bruxelles Bugtracker, Service Management Bugtracker, gestion de services Bugzilla Bugzilla Bugzilla administration Administration de Bugzilla Bugzilla can authenticate a user with <a0>HTTP</a0> headers, and auto-create its account with a few information: Bugzilla peut authentifier un utilisateur par en-tête <a0>HTTP</a0> et créer automatiquement un compte avec peu d'informations : Bugzilla virtual host in Apache Hôte virtuel Apache hébergeant Bugzilla Bugzilla virtual host in Manager Hôte virtuel Bugzilla dans le manager Build Construction Build <a0>cookie(s)</a0> Construit le ou les <a0>cookies</a0> Build the tarball from SVN Construire l'archive depuis SVN Build your packages Construire les paquets Build: Build: But sometimes other data are needed (in particular to use <a0>extended functions</a0>): Parfois d'autres données sont nécessaire (en particulier pour utiliser les <a0>fonctions étendues</a0>): But you can forward this key if it is really needed: Mais on peut le transmettre tout de même si nécessaire : But you can make your own, see Skin customization below. On peut faire le sien, voir comment personnaliser le thème ci-dessous. But you have to allow sessions web services, see <a0>SOAP sessions backend</a0>. Il faut en revanche autoriser le service web des sessions, voir le <a0>backend de sessions SOAP</a0>. But you will rather prefer to use an Apache authentication module, like for example <a0>LDAP authentication module</a0>: Il est souvent souhaitable d'utiliser un module d'authentification Apache, tel par exemple le <a0>module d'authentification LDAP</a0> : By alphabetical order: Par ordre alphabétique : By default, <a0>DNS</a0> domain is <c1>example.com</c1>. Par défaut, le domaine <a0>DNS</a0> est <c1>example.com</c1>. By default, <a0>SSO</a0> cookie is hidden, so protected applications cannot get <a1>SSO</a1> session key. Par défaut, le cookie <a0>SSO</a0> est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session <a1>SSO</a1>. By default, Apache configuration files will be installed in <c0>/usr/local/lemonldap-ng/etc/</c0>. Par défaut les fichiers de configuration d'Apache seront installés dans <c0>/usr/local/lemonldap-ng/etc/</c0>. By default, LemonLDAP::NG uses Apache logs to store user actions and other messages: Par défaut, LemonLDAP::NG utilise les journaux d'Apache pour journaliser les actions des utilisateurs et autre messages : By default, Manager is protected to allow only localhost. Par défaut, l'accès au manager est restreint à la machine locale. By default, Manager is protected to allow only the demonstration user “dwho”. Par défaut, le manager est protégé et n'autorise que l'utilisateur de démonstration “dwho”. By default, Tomcat provides a file called <c0>users.xml</c0> to manage authentication: Par défaut, Tomcat fournit un fichier nommé <c0>users.xml</c0> pour gérer l'authentification : By default, a user can open several <a0>sessions</a0>. Par défaut, un utilisateur peut ouvrir plusieurs <a0>sessions</a0>. By default, anonymous bind is used. Par défaut, une connexion anonyme est utilisée. By default, configuration is stored in <a0>files</a0>, so access trough network is not possible. Par défaut, la configuration est stockée dans des <a0>fichiers</a0>, donc l'accès par le réseau n'est en général pas possible. By default, default values are used. Sauf modification, les valeurs par défaut sont utilisées. By default, if user process connection settings are empty, authentication process connection settings will be used. Par défaut, si les paramètres de processus de connexion utilisateur sont vides , ceux d'authentification seront utilisés. By default, login time and <a0>IP</a0> address are stored in history, and the error message prompted to the user for failed logins. Par défaut, le tampon de date et l'adresse <a0>IP</a0> sont stockés dans l'historique et le message d'erreur affiché à l'utilisateur en cas d'échec. By default, mail content are empty in order to use <a0>HTML</a0> templates: Par défaut, les messages sont vides afin d'utiliser les modèles <a0>HTML</a0> : By default, notifications will be stored in the same database as configuration: Par défaut, les notifications sont stockées dans la même base de données que la configuration : By default, only the configured authentication backend is available for users. Par défaut, seul le backend configuré est accessible aux utilisateurs. By default, the RelayState session is deleted when it is read. Par défaut, la session RelayState est détruite lorsqu'elle est lue. By default, the allowed days and hours is an hexadecimal value, representing each hour of the week. Par défaut, les jours et heures autorisés days and hours sont une valeur hexadécimale, représentant chaque heure de la semaine. By default, the main session module is used to store <a0>SAML</a0> temporary data (like relay-states), but <a1>SAML</a1> sessions need to use a session module compatible with the <a2>sessions restrictions feature</a2>. Par défautBy, le module de session principal est utilisé pour stocker les données temporaires <a0>SAML</a0> (tel les états de relais), mais les sessions <a1>SAML</a1> doivent disposer d'un module compatible avec les <a2>fonctionnalités de restrictions des sessions</a2>. By default, the manager is restricted to localhost in its Apache configuration file, but no accounting is done. Par défaut, l'accès au manager est restreint à l'hôte local dans le fichier de configuration d'Apache, mais aucune traçabilité n'est faite. By default, the manager is restricted to the user 'dwho' (default backend is Demo). Par défaut, l'accès au manager est restreint à l'utilisateur "dwho" (le backend par défaut est Demo). By default, user will be redirected on portal if no <a0>URL</a0> defined, or on the specified <a1>URL</a1> if any. Par défaut, l'utilisateur est redirigé vers le portail si aucune <a0>URL</a0> n'est définie ou vers l'<a1>URL</a1> indiquée sinon. By default, you will have a manager virtual host define in configuration. Par défaut, il existe un hôte virtuel défini dans la configuration. By hand in Liferay administration screens À la main dans les écrans d'administration de Liferay C C CAS CAS CAS (authentication module) CAS (module d'authentification) CAS identity provider Fournisseur d'identité CAS CAS server Serveur CAS CDBI CDBI CDBI / RDBI CDBI / RDBI CGI CGI CMS, Portal CMS, Portail CPAN test reports: Rapports de test du CPAN: CREATE TABLE lmConfig ( CREATE TABLE lmConfig ( Cache backend Module du cache local Cache backend options Options du module du cache local Cache::Cache Cache::Cache Can be left blank for plain text passwords. Peut être vide pour le stockage des mots-de-passe en clair. Can be overridden by an <a2>LDAP</a2> <a3>URI</a3> in server host. Peut être surchargé par une <a3>URI</a3> dans le nom du serveur <a2>LDAP</a2>. Can't locate /usr/share/lemonldap-ng/configStorage.pl Can't locate /usr/share/lemonldap-ng/configStorage.pl Cascading Style Sheets Cascading Style Sheets Casimir ANTUNES Casimir ANTUNES Catch error pages: Capture des pages d'erreur : Categories and applications Catégories et applications Category and application key can have a digit as first character, which will allow to display categories in the right order (categories and applications are displayed in alphabetical order). Les clefs des categories et des applications peuvent commencer par un chiffre ce qui permet de les afficher dans le bon ordre (catégories et applications sont affichées dans l'ordre alphabétique). Category parameters: Paramètres des catégories : Central Authentication Service Central Authentication Service Certificate Certificat Certificate authorities directory Répertoire des autorités de certification Certificate authorities file Fichiers des autorités de certification Change <s0>mydomain.org</s0> (in <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) into your Google Apps domain. Changer <s0>mydomain.org</s0> (dans <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) en votre domaine Google Apps. Change <s0>mydomain.org</s0> into your Google Apps domain Mettre <s0>mydomain.org</s0> dans le domaine Google Apps Change configuration in lemonldap-ng.ini : Changer la configuration dans lemonldap-ng.ini : Change default DNS domain Changer le domaine DNS par défaut Change it: Le Changer : Change password: update password column in authentication table matching user Changement de mot-de-passe : met à jour le champ mot-de-passe de la table d'authentification correspondant à l'utilisateur Change rights on keytab file: Changer les droits sur le fichier keytab : Change the base <a0>URL</a0> for EL6 packages: Changer l'<a0>URL</a0> de base pour les paquets EL6 : Change the user attribute to store in Apache logs <e0>(“General Parameters » Logs » REMOTE_USER”)</e0>: use the variable declared above Changer l'attribut utilisateur à stocker dans les journaux d'Apache <e0>(“Paramètres généraux » Journaux » REMOTE_USER”)</e0> : utiliser la variable ci-dessus Changelog Journal des changements Changing the domain value will not update other configuration parameters, like virtual host names, portal <a0>URL</a0>, etc. Changer la valeur du domaine ne met pas à jour les autres paramètres tels les noms d'hôtes virtuels, l'<a0>URL</a0> du portail, etc... Check <a0>XSS</a0> Attacks Recherche les attaques <a0>XSS</a0> Check Apache configuration and restart: Vérifier la configuration d'Apache et redémarrer : Check configStorage and configStorageOptionsor file permissions. Vérifier les options configStorage and configStorageOptions ou les droits associés à ces fichiers. Check if <a0>URL</a0> asked is valid Vérifie que l'<a0>URL</a0> demandée est validée Check if user is already authenticated Vérifie si l'utilisateur n'est pas déjà authentifié Choice <a0>URL</a0> parameter Paramètre d'<a0>URL</a0> pour "Choice" Choice done if <a0>authentication choice</a0> was used Choix de l'utilisateur si le <a0>backend d'authentification Choice</a0> a été utilisé Choice modules Modules de "Choice" Choice of any certificate attribute as user main login Choix de n'importe quel attribut du certificat comme nom d'utilisateur principal Choose <a0>DBI</a0> type (RDBI, CDBI or <a1>DBI</a1>) Choisir le type <a0>DBI</a0> (RDBI, CDBI or <a1>DBI</a1>) Choose a repository which hosted <a0>Perl</a0> dependencies, for example: Choisir un dépôt qui héberge les dépendances <a0>Perl</a0>, par exemple : Choose and configure your main configuration storage system Choisir et configurer le système principal de stockage de la configuration Choose and configure your main sessions storage system Choisir et configurer le système principal de stockage des sessions Choose for example <a0>http://zimbra.example.com/zimbrasso</a0> as <a1>SSO</a1> <a2>URL</a2> and <a3>set it in application menu</a3>. Choisir par exemple <a0>http://zimbra.example.com/zimbrasso</a0> comme <a2>URL</a2> <a1>SSO</a1> et <a3>insérer la dans le menu application</a3>. Choose one of the following method: Choisir l'une des méthodes suivantes : Choose one of the following: Choisir l'une des options suivantes : Choose “Apache” as authentication module <e0>(“General Parameters » Authentication modules » Authentication module”)</e0> Choisir “Apache” comme module d'authentification <e0>(“Paramètres généraux » Modules d'authentification » Module d'authentification”)</e0> Click on a column header to sort table. Cliquez sur un en-tête de colonne pour trier le tableau. Clone Clone Close kerberos connection: Fermer la connexion kerberos : Clément OUDOT Clément OUDOT Clément OUDOT's blog Blog de Clément OUDOT Code snippet Exemple de code Code to replace: Code à remplacer : Command Line Interface (CLI) Interface en ligne de commande (CLI) Command line configuration editor Editeur de configuration en ligne de commande Comment Commentaire Comments can be used to order your rules: rules are applied in the alphabetical order of comment (or regexp in there is no comment). Les commentaires peuvent être utilisés pour ordonner les règles : elles sont appliquées dans l'ordre alphabétique des commentaires (ou des expressions régulières à défaut de commentaire). Commit Commit Common Domain Cookie Domaine commun de cookie Common Domain Cookie is also know as <a0>WAYF Service</a0>. Le domaine commun de cookie est également connu comme <a0>service WAYF</a0>. Common Gateway Interface Common Gateway Interface Compatibility with Apache mod_security Compatibilité avec le module mod_security d'Apache Compatible password modification Compatibilité des modifications de mots-de-passe Compilation Compilation ConFoo ConFoo Conditions: Conditions : Conferences Conférences Config::IniFiles Config::IniFiles Configuration Configuration Configuration <s0>is not saved</s0> if errors occur. La configuration <s0>n'est pas sauvée</s0> en cas d'erreur. Configuration access Accès à la configuration Configuration and sessions access by SOAP Accès à la configuration et aux sessions par SOAP Configuration and sessions in LDAP Configuration et sessions dans LDAP Configuration and sessions in MySQL Configuration et sessions dans MySQL Configuration backend Stockage de la configuration Configuration backend can be set in the <a0>local configuration file</a0>, in <c1>configuration</c1> section. Le backend de configuration peut être indiqué dans le <a0>fichier local de configuration</a0>, dans la section <c1>configuration</c1>. Configuration backend parameters Paramètres des backends de configuration Configuration can be stored in several formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) but must be shared over the network if you use more than 1 server. La configuration peut être stockée sous plusieurs formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) mais doit être partégée via le réseau si on utilise plus d'un serveur. Configuration database Base de données de la configuration Configuration interface access is not protected by Apache but by LemonLDAP::NG itself (see <c0>lemonldap-ng.ini</c0>): L'accès à l'interface de configuration n'est pas protégée par Apache mais par LemonLDAP::NG lui-même (voir <c0>lemonldap-ng.ini</c0>) : Configuration interface access is protected: L'accès à l'interface de configuration est protégée : Configuration is in /etc/lemonldap-ng La configuration se trouve dans /etc/lemonldap-ng Configuration key of IDP used for authentication Clef de configuration de l'IDP utilisé pour l'authentification Configuration objects use standard object class: <c0>applicationProcess</c0>. Les objets de configuration utilisent une classe d'objet standard : <c0>applicationProcess</c0>. Configuration of Apache virtual host Configuration de l'hôte virtuel Apache Configuration of LemonLDAP::NG Configuration de LemonLDAP::NG Configuration overview Vue d'ensemble de la configuration Configuration parameters are: Les paramètres de configuration sont : Configuration reload Rechargement de la configuration Configuration reload will then be effective in less than 10 minutes. Le rechargement de la configuration sera effectif en moins de 10 minutes. Configuration text editor Éditeur de configuration en mode text Configure <a0>IE</a0> or Firefox to trust <c1><a2>http://auth.example.com</a2></c1>, and then it should work! Configurer <a0>IE</a0> ou Firefox pour agréer <c1><a2>http://auth.example.com</a2></c1> et ça doit marcher ! Configure <a0>LDAP</a0> configuration backend in <c1>lemonldap-ng.ini</c1>, section <c2>[configuration]</c2>: Configurer la backend de configuration <a0>LDAP</a0> dans <c1>lemonldap-ng.ini</c1>, section <c2>[configuration]</c2> : Configure Apache to allow remote access: in <c0>portal-apache2.conf</c0>, remote <a1>SOAP</a1> access is disabled by default. Configurer Apache pour autoriser l'accès distant : dans <c0>portal-apache2.conf</c0>, l'accès distant à <a1>SOAP</a1> est désactivé par défaut. Configure Bugzilla virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Bugzilla comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure Dokuwiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Dokuwiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure Drupal virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Drupal comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure LemonLDAP::NG to use LDAP as main database Configurer LemonLDAP::NG pour utiliser LDAP comme base de données principale Configure LemonLDAP::NG to use MySQL as main database Configurer LemonLDAP::NG pour utiliser MySQL comme base de données principale Configure LemonLDAP::NG to use SOAP proxy mechanism Configurer LemonLDAP::NG pour utiliser le mécanisme mandataire SOAP Configure Liferay virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Liferay comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure LimeSurvey virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel LimeSurvey comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure MediaWiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Mediawiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure Multiple authentication backend (for example: Apache;<a0>LDAP</a0>) Configurer le backend d'authentification multiple (par exemple : Apache;<a0>LDAP</a0>) Configure Single Sign On cookie and portal URL Configurer le cookie SSO (Single Sign On) et l'URL du portail Configure Sympa virtual host like other <a0>protected virtual host</a0> but protect only magic authentication <a1>URL</a1>. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais ne protéger que l'authentification magique. Configure Sympa virtual host like other <a0>protected virtual host</a0> but use Sympa Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure attributes: Configurer les attributs : Configure authentication filter <e0>(“General Parameters » Authentication modules » <a1>LDAP</a1> parameters » Filters”)</e0> with: Configurer le filtre d'authentification <e0>(“Paramètres généraux » Module d'authentification » Paramètres <a1>LDAP</a1> » Filtres”)</e0> avec : Configure authentication filter and mail filter <e0>(“General Parameters » Authentication modules » <a1>LDAP</a1> parameters » Filters”)</e0> with: Configurer le filtre d'authentification et le filtre mail <e0>(“Paramètres généraux » Modules d'authentication » Paramètres <a1>LDAP</a1> » Filtres”)</e0> avec : Configure local cache first. Configurer d'abord le cache local. Configure phpLDAPadmin virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel phpLDAPadmin comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Configure security settings Configurer les paramètres de sécurité Configure sessions specificities Configurer les spécificités des sessions Configure the <a0>access rules</a0> and define the following <a1>headers</a1>: Configurer les <a0>règles d'accès</a0> et definir les <a1>en-têtes</a1> suivants : Configure the <a0>access rules</a0>. Configurer les <a0>règles d'accès</a0>. Configure the <c0>Auth-User</c0> <a1>header</a1>. Configurer l'<a1>en-tête</a1> <c0>Auth-User</c0>. Configure the connection string (see <a0>DBI manual page</a0>) Configurer la chaîne de connexion (voir la <a0>page de manuel DBI</a0>) Configure the following <a0>headers</a0>. Configurer les <a0>en-têtes</a0> suivants. Configure the portal to use the remote <a0>LL::NG</a0> structure. Configurer le portail pour qu'il utilise le système <a0>LL::NG</a0> distant. Configure the virtual host like other <a0>protected virtual host</a0> but use AuthBaisc Handler instead of default Handler. Configurer l'hôte virtuel comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser l'agent AuthBasic au lieu de l'agent par défaut. Configure the virtual host like other <a0>protected virtual host</a0> but use Secure Token Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser l'agent jeton sécurisé au lieu de l'agent par défaut. Configure user and password Configurer le nom de compte et le mot-de-passe Configure your <a0>DNS</a0> server to resolve names with your server <a1>IP</a1>. Configurer le serveur <a0>DNS</a0> pour résoudre les noms avec l'adresse <a1>IP</a1> de votre serveur. Configure your SQL database Configurer la base de données SQL Configure your new backend (create <a0>SQL</a0> database,…) Configurer le nouveau backend (creer la base de données <a0>SQL</a0>,…) Configure your tomcat home in <c0>build.properties</c0> files. Configurer votre tomcat home dans le fichier <c0>build.properties</c0>. Connection Connexion Connection between Linux and Active Directory Connexion entre Linux et Active Directory Connection between Linux and Active Directory - method 1 Connexion entre Linux et Active Directory - méthode 1 Connection between Linux and Active Directory - method 2 Connexion entre Linux et Active Directory - méthode 2 Connection login Login de connexion Connection password Mot-de-passe de connexion Connection settings can be configured differently for authentication process and user process. Les paramètres de connexion peuvent être configurés différemment pour les processus d'authentification et de recherche d'utilisateur. Connector Connecteur Connectors Connecteurs Consent to share attribute <e0>id</e0> trough OpenID Consentement de partage de l'attribut <e0>id</e0> via OpenID Contact Contact Content Management System Système de gestion de contenu Contrary to <a0>multiple backend stacking</a0>, backend choice will present all available authentication methods to users, who will choose the one they want. Contrairement au <a0>dispositif de multiples backends</a0>, le dispositif de choix de backend présente à l'utilisateur toutes les méthodes d'authentification disponibles pour qu'il puisse choisir. Contributions Contributions Convert HTTP header into environment variable Convertir les en-têtes HTTP en variables d'environnement Convert existing configuration Convertir la configuration existante Convert::PEM Convert::PEM Cookie Javascript protection Protection Javascript du cookie Cookie expiration Expiration du cookie Cookie security Sécurité du cookie Copy <c0>ValveLemonLDAPNG.jar</c0> in <c1><TOMCAT_HOME>/server/lib</c1>: Copier <c0>ValveLemonLDAPNG.jar</c0> dans <c1><TOMCAT_HOME>/server/lib</c1>: Copy en subroutine to zz <e1>(where zz is your international code, example: “fr” for France)</e1> then translate messages. Copiez la fonction en en zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> et traduisez ensuite les messages. Core Core Core <a0>Perl</a0> subroutines (split, pop, map, etc.) Fonctions standards de <a0>Perl</a0> (split, pop, map, etc...) Core modules must be installed on the system. Les modules "core" doivent être installés sur le système. Core team Équipe prinicpale Country Country Create OBM virtual host (for example obm.example.com) in <a0>LL::NG</a0> configuration: <c1>Virtual Hosts</c1> » <c2>New virtual host</c2>. Créer l'hôte virtuel OBM (par exemple obm.example.com) dans la configuration <a0>LL::NG</a0> : <c1>Hôtes virtuels</c1> » <c2>Nouvel hôte virtuel</c2>. Create a database if necessary: Créer une base de données si nécessaire : Create a redirection script, called login.pl: Créer un script de redirection, appelé login.pl: Create a symlink on portal/index.pl to define the kerberos authentication end point: Créer un lien symbolique vers portal/index.pl pour définir le point final d'authentification kerberos : Create database: Créer la base de données : Create new notifications trough SOAP Créer de nouvelles notifications via SOAP Create new notifications with notifications explorer Créer de nouvelles notifications avec l'explorateur des notifications Create sessions table: Créer la table des sessions : Create table: Créer la table: Create two macros (inside <c0>Variables</c0> » <c1>Macros</c1>): Créer deux macros (dans <c0>Variables</c0> » <c1>Macros</c1>): Create two macros (inside <c0>Variablles</c0> » <c1>Macros</c1>): Créer deux macros (dans <c0>Variables</c0> » <c1>Macros</c1>): Create user and role: Créer un utilisateur et un rôle : Create your <a0>Perl</a0> module with custom functions. Créer un module <a0>Perl</a0> avec des fonctions personnalisées. Cross Domain Authentication Authentification inter-domaines Cross Domain Authentication (CDA) Authentification inter-domaines (CDA) Cross Site Scripting Cross Site Scripting Crypt::OpenSSL::Bignum Crypt::OpenSSL::Bignum Crypt::OpenSSL::RSA Crypt::OpenSSL::RSA Crypt::OpenSSL::X509 Crypt::OpenSSL::X509 Crypt::Rijndael Crypt::Rijndael Current stable version is 0.9.4.1: La version stable courante est la 0.9.4.1: Current testing version is 1.0rc2: La version courrant en test est la 1.0rc2: Currently, the module is simply handling a Radius Authentication request and has been tested only against a FreeRadius server. Actuellement, ce module traite simplement une requête d'authentification Radius et n'a été testé que sur un serveur FreeRadius. Custom <a0>SOAP</a0> Services Services <a0>SOAP</a0> personnalisés Custom XSLT file Fichier XSLT personnalisé Custom authentication module Module d'authentification personnalisé Custom functions Fonctions personnalisées Custom functions allow to extend <a0>LL::NG</a0>, they can be used in <a1>headers</a1>, <a2>rules</a2> or <a3>form replay data</a3>. Les fonctions personnalisées permettent d'étendre <a0>LL::NG</a0>, elles peuvent être utilisées dans les <a2>règles</a2>, les <a1>en-têtes</a1> et les <a3>données à rejouer dans les formulaires</a3>. Custom-Header => function1($uid) Custom-Header => function1($uid) CustomSOAPServices CustomSOAPServices Customizable NameID formats are: Les formats de NameID personnalisables sont : D D DBI DBI DEB bundle Paquets DEB DNS DNS Daniel RIVIERE Daniel RIVIERE Data around the authentication process. Données concernant le processus d'authentification. Data concerning the first connection to the portal Donnée concernant la première connexion au portail Data related to <a0>SAML</a0> protocol Donnée relative au protocole <a0>SAML</a0> Data should not contains accents or special characters, as <a0>HTTP</a0> protocol only allow <a1>ASCII</a1> values in header (but depending on the <a2>HTTP</a2> server, you can use <a3>ISO</a3> encoded values) Les données ne doivent pas contenir de caractères spéciaux, car le protocole <a0>HTTP</a0> n'autorise que les caractères <a1>ASCII</a1> dans les en-têtes (mais suivant le serveur <a2>HTTP</a2>, vous pouvez utiliser des valeurs encodées <a3>ISO</a3>) Data to store as REMOTE_USER (used also in Apache logs) Donnée à utiliser comme REMOTE_USER (également utilisée dans les journaux d'Apache) DataSource DataSource DataSource -> dbi:mysql:sessions;host=... DataSource -> dbi:mysql:sessions;host=... Database Base de données Database Interface Database Interface Database must be prepared exactly like in <a0>SQL session backend</a0> except that a field must be added for each data to index. La base de donnée doit être préparée exactement comme celle du <a0>backend de session SQL</a0> si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer. Databases Bases de données Databases (DBI) Bases de données (DBI) Datas are stored as key/values (no-strings values are serialized). Les données sont stockées en clef/valeur (les valeurs autres que chaînes sont sérialisés). Datas around the authentication process. Données concernant le processus d'authentification. Datas concerning the first connection to the portal Données concernant la première connexion au portail Datas related to <a0>SAML</a0> protocol Donnée relative au protocole <a0>SAML</a0> Date of birth Date of birth Date of session creation Date et heure (timestamp) de la création de la session Date of session last modification Date de la dernière modification de la session Date of validation of the notification <e0>id</e0> Date de validation de la notification <e0>id</e0> Dates Dates Debian Debian Debian bundle Paquets Debian Debian/Ubuntu Debian/Ubuntu Debian/Ubuntu bundle Debian/Ubuntu bundle Declare custom functions Declarer les fonctions personnalisées Declare module in Apache configuration Declarer le module dans la configuration d'Apache Dedicated to administrators Dédié aux administrateurs Default Défaut Default skin Thème par défaut Default use case: Cas général: Define at least: Definir au moins : Define headers used in OBM mapping, for example: Definir les en-têtes utilisés pour les correspondances OBM, par exemple : Define here: Definir ici : Delay between check of local configuration Delai entre 2 examens de la configuration locale Delete other session Efface les autres sessions (session unique par utilisateur) Delete other session if <a0>IP</a0> differs Efface les autres sessions de l'utilisateur si les adresses <a0>IP</a0> diffèrent Deletion example in Perl Exemple d'effacement en Perl Demonstration Démonstration Demonstration backend has hard coded user accounts: Le backend de démonstration dispose de compte codés en dur : Deny access to /config/ directory Interdire l'accès au répertoire /config/ Description Description Destination directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/po-doc/zz (where zz is your international code, example: “fr” for France) Répertoire de destination = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/po-doc/zz (où zz est votre code international, exemple: “fr” pour le français) Detailled configuration backends documentation is available <a0>here</a0>. La configuration détaillée des backends de stockage est disponible <a0>ici</a0>. Developer access Accès développeurs Development Développement Digest::HMAC Digest::HMAC Directory Directory Disable all signature flags in <c0>Options</c0> » <c1>Signature</c1>, except <c2>Sign <a3>SSO</a3> message</c2> which should be to <c4>On</c4> Désactiver toutes les cases dans <c0>Options</c0> » <c1>Signature</c1>, excepté <c2>Signer les messages <a3>SSO</a3></c2> qui doit être activée Disabling Safe jail Désactiver la cage sécurisée Disabling it can lead to security issues. La désactiver peut engendrer des trous de sécurité. Display applications list Affiche la liste des applications Display change password module Affiche le module de changement de mot-de-passe Display deleted sessions Affiche les sessions effacées Display logout module Affiche le module de déconnexion Display other sessions Affiche les autres sessions Display reset password form Affiche le module de réinitialisation de mot-de-passe Display-Name Display-Name Distinguished Name Distinguished Name Distinguished name Nom distinct (distinguished name) Django Django Do no set <c0>require valid-user</c0> if you want to be able to fail back to another authentication backend for users without Kerberos ticket. Ne pas mettre <c0>require valid-user</c0> pour pouvoir utiliser un autre backend d'authentification pour les utilisateurs sans ticket Kerberos. Do not allow several users for 1 <a0>IP</a0> Ne pas autoriser plusieurs utilisateurs venant de la même adresse <a0>IP</a0> Do not forget to add OBM in <a0>applications menu</a0>. Ne pas oblier d'ajouter OBM dans le <a0>menu des applications</a0>. Do not forget to save your changes! Ne pas oublier de sauvegarder les changements ! Do not restrict /public/ Ne pas restreindre /public/ Do this in the control panel or in the configuration file: Faire ceci dans le panneau de contrôle ou dans le fichier de configuration : Documentation Documentation Documentation below explains how set index on ipAddr and _whatToTrace; Adapt it to configure the index you need. La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace; à adapter pour configurer les index nécessaires. Documentation for LemonLDAP::NG 1.2 Documentation de LemonLDAP::NG 1.2 Documentation for LemonLDAP::NG 1.3 Documentation for LemonLDAP::NG 1.3 Documentation for latest stable version Documentation for latest stable version Documentation install : Installer la documentation : Documentation is available for configuration backends : Cette documentation est valable pour les backends de configuration : DokuWiki offline version DokuWiki version hors-ligne Dokuwiki Dokuwiki Dokuwiki local configuration Configuration locale Dokuwiki Dokuwiki plugin Extension pour Dokuwiki Dokuwiki virtual host in Apache Hôte virtuel Dokuwiki dans le manager Dokuwiki virtual host in Manager Hôte virtuel Dokuwiki dans le manager Domain Name System Domain Name System Don't forget to create an index on the field used to find users (uid by default) N'oubliez pas de créer un index sur le champ utilisé pour trouver les utilisateurs (uid par défaut) Don't forget to install cron files ! N'oubliez pas d'installer les fichiers cron ! Double cookie Double cookie Download Téléchargement Download the latest version: Télécharger la dernière version : Download them here and <a0>install pre-required packages</a0>. Les télécharger ici et <a0>installer les paquets pre-requis</a0>. Drivers Drivers Drupal Drupal Drupal module activation Activation du module Drupal Drupal virtual host in Apache Hôte virtuel Apache hébergeant Drupal Drupal virtual host in Manager Hôte virtuel Drupal dans le manager Due to a conflict between <a0>LL::NG</a0> form replay and Apache mod_proxy (see <a1>issue</a1>), you cannot use form replay on proxied applications, unless you use <a2>LL::NG</a2> <a3>internal proxy</a3>: Suite à un conflit entre le rejeu de formulaires <a0>LL::NG</a0> et mod_proxy d'Apache (voir les <a1>problèmes</a1>), on ne peut utiliser le rejeu de formulaires sur des applications derrière un proxy sauf si on utilise le <a3>proxy interne</a3> de <a2>LL::NG</a2> : Due to a conflict between <a0>LL::NG</a0> form replay and Apache mod_proxy (see <a1>issue</a1>), you cannot use form replay on proxied applications, unless you use <a2>LL::NG</a2> internal proxy (based on <a3>Perl</a3> LWP): Suite à un conflit entre le rejeu de formulaires <a0>LL::NG</a0> et mod_proxy (voir le <a1>ticket</a1>), on ne peut utiliser le rejeu de formulaires sur les applications proxifiées, sauf en utilisant le proxy interne de <a2>LL::NG</a2> (basé sur LWP de <a3>Perl</a3>): During this period, user can ask the confirmation mail to be resent (default: session timeout value) Durant cette période, l'utilisateur peut demander que le courriel soit ré-émis (défaut : durée de vie de la session) Dynamic application menu Menu dynamique des applications E E EXAMPLE.COM = { EXAMPLE.COM = { Each <a0>LL::NG</a0> authentication module has an authentication level, which can be associated to an <a1>SAML authentication context</a1>. Chaque module d'authentification de <a0>LL::NG</a0> dispose d'un niveau d'authentification qui peut être associé à un <a1>contexte d'authentification SAML</a1>. Each SREG attribute will be associated to a user session key. Chaque attribut SREG est associé à une clef de session utilisateur. Each configuration will be represented as an entry, which structural objectClass is <c0>applicationProcess</c0>. Chaque configuration est représentée par une entrée, dont l'objectClass structurel est <c0>applicationProcess</c0>. Each field can be filled with static values or data from user's session. Chaque champ peut être construit avec des valeurs statiques ou des données issues de la session utilisateur. Each module can be activated trough a rule, using user session information. Chaque module peut être activé via une règle en utilisant les informations de session de l'utilisateur. Each module can be disabled using the <c0>Null</c0> backend. Chaque module peut être désactivé en utilisant le backend <c0>Null</c0>. Each user has a ssoRoles attributes, which values are the <a0>DN</a0> of the corresponding roles. Chaque utilisateur a des attributs ssoRoles, dont les valeurs sont les <a0>DN</a0> des rôles correspondants. Each virtual host is a protected resource, with access rules, headers, POST data and options. Chaque hôte virtuel est une ressource protégée, avec règles d'accès, en-têtes, options et données POST. Easy import/export through LDIF files Import/export facilité via les fichiers LDIF Easy to customize Facile à personnaliser Easy to duplicate with <a0>LDAP</a0> synchronization services (like SyncRepl in OpenLDAP) Facilité de duplication avec les services de synchronisation <a0>LDAP</a0> (tel SyncRepl de OpenLDAP) Easy to integrate Facile à intégrer Easy to share between servers with remote <a0>LDAP</a0> access Facilité de partage entre serveurs avec un accès <a0>LDAP</a0> distant Edit /etc/fail2ban/jail.conf Editer /etc/fail2ban/jail.conf Edit <c0>/etc/krb5.conf</c0>: Editer <c0>/etc/krb5.conf</c0>: Edit <c0>lemonldap-ng.ini</c0>, and activate status in the <c1>handler</c1> section: Éditer <c0>lemonldap-ng.ini</c0>, et activer le statut dans la section <c1>handler</c1> : Edit Dokuwiki local configuration (<c0>conf/local.php</c0>) and set <c1>lemonldap</c1> as authentication type: Éditer la configuration locale Dokuwiki (<c0>conf/local.php</c0>) et indiquer <c1>lemonldap</c1> comme type d'authentification : Edit also OBM Apache configuration to enable <a0>LL::NG</a0> Handler: Éditer également la configuration du serveur Apache d'OBM pour activer les en-têtes <a0>LL::NG</a0> : Edit configuration Editer la configuration Edit the file “auth.conf”, for example: Éditer le fichier “auth.conf” de Sympa, par exemple : Edit the portal virtual host to enable <a0>SSL</a0> double authentication: Éditer l'hôte virtuel du portail pour activer la double authentification <a0>SSL</a0> : Edit ~/.rpmmacros and set your build parameters (example for RHEL5): Editer ~/.rpmmacros et mettre les paramètres de construction (exemple pour RHEL5): Either checkout or export the SVN repository, or extract the SVN tarball to get the SVN files on your disk. Au choix, importer le dépôt SVN ou extraire l'archive SVN pour importer les fichiers. Else it just will be sent trough an attribute response, if explicitly requested in an attribute request. Sinon, il ne sera envoyé dans les réponses que s'il est explicitement demandé dans les requêtes d'attributs. Else, Net::<a1>SMTP</a1> module is required to use the <a2>SMTP</a2> server Sinon, le module Net::SMTP est nécessaire pour utiliser le serveur <a2>SMTP</a2> Else, all data are copied in the session database. Sinon, toutes les données sont copiées. Else, current configuration is kept. Sinon, la configuration courante est gardée. Else, you will lock access to Manager and will never access it anymore. Sinon, on risque de verrouiller l'accès au manager et ne plus pouvoir y accéder. Email Email Email::Date::Format Email::Date::Format Enable <a0>LL::NG</a0> sites in Apache: Activer les sites <a0>LL::NG</a0> dans Apache : Enable <a0>SOAP</a0> in General parameters » Advanced parameters » <a1>SOAP</a1> Activer <a0>SOAP</a0> dans Paramètres généraux » Paramètres avancés » <a1>SOAP</a1> Enable LL::NG sites Activer les sites LL::NG Enable Notifications <a0>SOAP</a0> service in Apache configuration: Activer le service <a0>SOAP</a0> de notifications dans la configuration Apache : Enable SSL in Apache Activer SSL dans Apache Enable mod_perl if not already loaded: Activer mod_perl si ce n'est déjà fait : Enable password modify extended operation if you want to change password in AD Activer les opérations étendues de changement de mot de passe si vous voulez changer le mot de passe dans AD Enable protection on Manager, by editing <c0>lemonldap-ng.ini</c0>: Activer la protection du manager, en éditant <c0>lemonldap-ng.ini</c0>: Encoded characters Caractères encodés Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Entry Identifier Identifiant d'entrée Eric GERMAN Eric GERMAN Error log: all messages emitted by the program, depending on the configured log level Journaux d'erreur (ErrorLog) : tous les messages emis par le programme, suivant le niveau de journalisation configuré (LogLevel) Error messages Messages d'erreur Error messages are defined in source code. Les messages d'erreur sont définis dans le code source. Erwan LEGALL Erwan LEGALL Even if LL:NG can catch logout <a0>URL</a0> trough <a1>virtual host rules</a1>, you can have the need to forward a logout to other applications, to close their local sessions. Même si LL:NG peut intercepter les <a0>URL</a0> de déconnexion via les <a1>règles de d'hôte virtuel</a1>, on peut avoir besoin de propager la déconnexion à d'autres applications, pour clore leurs sessions locales. Event Événement Example Exemple Example 1: two tables Exemple 1 : deux tables Example 2: single table Example 2: single table Example : Exemple : Example for MySQL : Exemple pour MySQL : Example for groups: Exemples de groupes: Example for macros: Exemples de macros: Example of a protected virtual host for a local application: Exemple d'hôte virtuel protégé pour une application locale : Example of a protected virtual host with LemonLDAP::NG as reverse proxy: Exemple d'hôte virtuel protégé avec Lemonldap::NG en proxy-inverse : Example of status page: Exemple de page de statut : Example with EPEL: Exemple avec EPEL: Example with MySQL and index set to _whatToTrace+ipAddr (recommended) Exemple avec MySQL et l'index mis à _whatToTrace+ipAddr (recommandé) Example with MySQL and index set to uid+ipAddr (recommended) Exemple avec MySQL et l'index mis à uid+ipAddr (recommandé) Example with the portal: Exemple avec le portail : Example, if you have “<a0>DBI</a0>;<a1>LDAP</a1>” and <a2>DBI</a2> failed for authentication, Multi will try first to call <a3>LDAP</a3> as user database. Exemple, en utilisant “<a0>DBI</a0>;<a1>LDAP</a1>”, si <a2>DBI</a2> échoue pour l'authentification, Multi essaie d'utiliser <a3>LDAP</a3> comme base d'utilisateurs. Example: Exemple : Example: <a2>http://auth.example.com/?logout=1</a2> Exemple: <a2>http://auth.example.com/?logout=1</a2> Example: <a2>http://auth.example.com</a2> Exemple: <a2>http://auth.example.com</a2> Example: <a4>http://auth.example.com/saml/singleSignOn</a4> Exemple: <a4>http://auth.example.com/saml/singleSignOn</a4> Example: interoperability between 2 organizations Exemple : interoperabilité entre 2 organisations Examples for <a0>LDAP</a0>: Exemples pour <a0>LDAP</a0> : Examples with a <a0>configured header</a0> named 'Auth-User': Exemples avec un <a0>en-tête configuré</a0> nommé 'Auth-User': Examples: Exemples : Exploitation Exploitation Export sAMAccountName in a variable declared in <a0>exported variables</a0> Exporter sAMAccountName dans la liste des <a0>variables exportées</a0> Exported attributes Attributs exportés Exported variables Variables exportées Exported variables are the variables available to <a0>write rules and headers</a0>. Les variables exportées sont des variables disponibles pour <a0>écrire des règles d'accès et des en-têtes</a0>. Exported variables in the Manager Variables exportées dans le manager Expression Expression Extend variables using macros and groups Étendre les variables en utilisant les macros et groups Extended attributes and object classes use this prefix: 1.3.6.1.4.1.10943.10.2. Les attributs étendus et classes d'objet utilisent ce préfixe : 1.3.6.1.4.1.10943.10.2. Extended functions Fonctions étendues Extensible Markup Language Extensible Markup Language Extensible Stylesheet Language Transformations Extensible Stylesheet Language Transformations External portal Portail externe External user clicks to be redirected to the remote type portal L'utilisateur externe clique pour être redirigé vers le second portail Extract Extraction Extract and build the module: Extraire et compiler le module: Extract from the <a0>Wikipedia article</a0>: Extrait de <a0>l'article Wikipedia</a0>: Extraction Extraction F F FIXME FIXME FOSDEM FOSDEM FPW FPW Facebook Facebook Facebook uses <a1>OAuth2</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Facebook, other applications can trust Facebook and let you in). Facebook utilise le protocole <a1>OAuth2</a1> pour autoriser les applications à réutiliser son propre prcessus d'authentification (ce qui signifie que si on est connecté à Facebook, d'autres applications peuvent agréer Facebook et accepter l'utilisateur). Facebook: <a0>Group</a0> / <a1>Page</a1> Facebook: <a0>Groupe</a0> / <a1>Page</a1> Fail2ban Fail2ban Fast CGI support Support FastCGI FastCGI support Support FastCGI Feature Fonctionnalité Fedora11 RPM bundle Paquets RPM Fedora11 Fields to index Champs à indexer Fields: Champs : File File File configuration backend Backend de configuration File File location Emplacement du fichier File session backend Backend de sessions File File session backend is the more simple session database. Le backend de sessions File est la plus simple des bases de données. Fill $releasever and $basearch with the correct values to get packages for your environment, for example <a0>http://repo.cyrus-project.org/centos5-i386/RPMS.cyrus-extras/</a0> Adapter $releasever et $basearch avec la valeur correcte pour obtenir les paquets correspondant à votre environnement, par exemple <a0>http://repo.cyrus-project.org/centos5-i386/RPMS.cyrus-extras/</a0> Fill values here: Renseigner les valeurs ici : Filters Filters Find other documentation on <a0>Firewall Services site</a0>. Une autre documentation est disponible sur <a0>Firewall Services site</a0>. Find us on Freenode, channel #lemonldap-ng Retrouvez-nous sur Freenode, canal #lemonldap-ng Firefox has detected that the server is redirecting the request for this address in a way that will never complete Firefox has detected that the server is redirecting the request for this address in a way that will never complete First check and install the <a0>prerequisites</a0>. D'abord vérifier et installer les <a0>pré-requis</a0>. First configuration steps Premiers pas de configuration First name Prénom First parameter passed to the custom function is the requested <a0>URL</a0>, that is Le premier paramètre passé à la fonction personnalisée est l'<a0>URL</a0> demandée, c'est à dire First step: create a rule to grant access only if the user has a role in the application: Première étape : créer une règle pour autoriser l'accès seulement si l'utilisateur dispose d'un rôle dans l'application: First steps Premiers pas First, active <a0>SOAP</a0> in <c1>General parameters</c1> » <c2>Advanced parameters</c2> » <c3><a4>SOAP</a4></c3>. Premièrement, activer <a0>SOAP</a0> dans <c1>Paramètres généraux</c1> » <c2>Paramètres avancés</c2> » <c3><a4>SOAP</a4></c3> First, configure your real backend Premièrement, configurer le backend réel Follow <a0>LDAP session backend</a0> doc Suivre la documentation <a0>backend de sessions LDAP</a0> Follow <a0>SOAP configuration backend</a0> page Suivre la documentation <a0>backend de configuration SOAP</a0> Follow <a0>SOAP sessions backend</a0> page Suivre la documentation <a0>backend de sessions SOAP</a0> Follow the <a0>next steps</a0> Suivre les <a0>étapes suivantes</a0> Follow the <a0>next steps</a0>. Suivre les <a0>étapes suivantes</a0>. For <a0>Active Directory</a0>, choose <c1>Active Directory</c1> instead of <c2><a3>LDAP</a3></c2>. Pour <a0>Active Directory</a0>, choisir <c1>Active Directory</c1> au lieu de <c2><a3>LDAP</a3></c2>. For Active Directory, the default authentication filter is: Pour Active Directory, le filtre d'authentification par défaut est : For Active Directory, use this as authentication filter: Pour Active Directory, utiliser ce filtre d'authentification : For Apache2, you can use both mpm-worker and mpm-prefork. Pour Apache2, on peut utiliser mpm-worker ou mpm-prefork. For CentOS/RHEL, We advice to disable the default <a0>SSL</a0> virtual host configured in /etc/httpd/conf.d/ssl.conf. Pour CentOS/RHEL, il est recommandé de désactiver l'hôte virtuel <a0>SSL</a0> par défaut configuré dans /etc/httpd/conf.d/ssl.conf. For CentOS/RHEL: Pour CentOS/RHEL : For Debian/Ubuntu systems: you can use packages provided by Debian (<a0>lemonldap-ng packages</a0>) or <a1>install pre-required packages</a1> Pour les systèmes de type Debian/Ubuntu : vous pouvez utiliser ceux proposés par Debian (<a0>paquets lemonldap-ng</a0>) ou <a1>installer les paquets pré-requis</a1> For Debian/Ubuntu, you can use: Pour Debian/Ubuntu, utiliser : For MySQL, you need to set additional parameters: Pour MySQL, il faut ajouter quelques paramètres : For RPM systems, you have to <a0>install pre-required packages</a0> Pour les systèmes basés sur RPM, vous devez <a0>installer les paquets pré-requis</a0> For apache configuration, you may have to remove the old symbolic link, if not done by the RPM: Pour la configuration apache, il faut peut-être supprimer l'ancien lien symbolique si ce n'est pas fait par le RPM: For application <a0>AAA</a0>: Pour l'application AAA : For application BBB: Pour l'application BBB : For block brute force attack with fail2ban pour bloquer les attaques en force brute avec fail2ban For databases like PostgreSQL, don't forget to add “Commit” with a value of 1 Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1 For debugging, this valve can print some helpful information in debug level. Pour le debogage, cette valve peut tracer quelques information utiliser. For each IDP, you can configure attributes that are collected. Pour chaque IDP, il faut configurer les attributs à collecter. For each attribute, you can set: Pour chaque attribut, on peut indiquer : For each binding you can set: Pour chaque déclaration, vous pouvez indiquer : For each variable, The first field is the name which will be used in rules, macros or headers and the second field is the name of the user database field. Pour chaque variable, le premier champ est le nom qui servira dans les règles, macros ou en-têtes et le second est le nom du champ dans la base de données utilisateurs. For example <c1>{ldapPort}389</c1>. Par exemple <c1>{ldapPort}389</c1>. For example it can be stored as a second value of the uid attribute in the <a2>LDAP</a2> directory: Par exemple il peut être stocké comme seconde valeur de l'attibut uid dans un annuaire <a2>LDAP</a2> : For example to store authentication mode, you can set in <c1>Session data to store</c1> a new key <c2>$_auth</c2> with value <c3>Authentication mode</c3>. Par exemple pour stocker le mode d'authentification, on peut créer une nouvelle clef dans <c1>données de session à stocker</c1> nommée <c2>$_auth</c2> avec comme valeur <c3>mode d'authentification</c3>. For example with this rule on the <c0>access</c0> parameter: Par exemple avec cette règle sur le paramètre <c0>access</c0> : For example, a <a0>LL::NG</a0> server can be: Par exemple, un serveur <a0>LL::NG</a0> peut être : For example, a protected virtual host for a local application: Par exemple, un hôte virtuel protégé pour une application locale : For example, for a full access, excepted week-end: Par exemple, pour un accès total excepté le week-end: For example, if real sessions are stored in <a0>files</a0>: Par exemple, si les sessions réelels sont stockées dans des <a0>fichiers</a0> : For example, if these rules are used without comments: Par exemple, si ces règles sont utilisées sans commentaires : For example, if you are using <a0>AD as authentication backend</a0>, you can use sAMAccountName for the Windows NameID format. Par exemple, si vous utilisez <a0>Active-Directory comme système d'authentification</a0>, vous pouvez utiliser sAMAccountName come format de NameID Windows. For example, in handler/MyHandler.pm: Par exemple, dans handler/MyHandler.pm: For example, in portal/index.pl: Par exemple, dans portal/index.pl: For example, macro “macro1” will be computed before macro “macro2”: so, expression of macro2 may involve value of macro1. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. For example, the user name Aladdin and password open sesame would be combined as Aladdin:open sesame – which is equivalent to QWxhZGRpbjpvcGVuIHNlc2FtZQ== when encoded in Base64. Par exemple, le nom Aladdin et le mot-de-passe "open sesame" vont être assemblés en "Aladdin:open sesame" – dont l'équivalent est QWxhZGRpbjpvcGVuIHNlc2FtZQ== en Base64. For example, to allow only users with a strong authentication level: Par exemple, pour n'autoriser que les utilisateurs authentifiés fortement : For example, to configure the <c0>File</c0> configuration backend: Par exemple, pour configurer le backend de configuration <c0>File</c0> : For example, to display the password change form only for user authenticated trough <a2>LDAP</a2> or <a3>DBI</a3>: Par exemple, pour afficher le formulaire de changement de mot-de-passe seulement pour les utilisateurs authentifiés via <a2>LDAP</a2> ou <a3>DBI</a3> : For example, to forward login (<c0>$uid</c0>) and password (<c1>$_password</c1> if <a2>password is stored in session</a2>): Par exemple, pour exporter l'identifiant (<c0>$uid</c0>) et le mot-de-passe (<c1>$_password</c1> si <a2>le mot-de-passe est stocké dans la session</a2>): For example, to override configured skin for portal: Par exemple, pour surcharger l'apparence du portail : For example, to preselect this IDP for users coming from 129.168.0.0/16 network: Par exemple, pour pré-sélectionner cet IDP pour les utilisateurs provenant dui réseau 129.168.0.0/16 : For example, to proxy <a0>https://www.public.com</a0> to <a1>http://www.private.com</a1>: Par exemple, pour relayer <a0>https://www.public.com</a0> en <a1>http://www.private.com</a1>: For example, to send it in an header: Par exemple, pour l'envoyer dans un en-tête : For example, we change it to <c2>ow2.org</c2>: Par exemple, pour le changer en <c2>ow2.org</c2>: For example, we will use 3 roles: Par exemple, en utilisant 3 rôles : For example: Par exemple : For full install: Pour une installation complète : For now, ldapgroups contains “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” Pour l'instant, ldapgroups contient “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” For remote servers, you can use <a0>SOAP session backend</a0> in cunjunction to increase security for remote server that access through an unsecure network Pour les serveurs distants, vous pouvez utiliser le <a0>module SOAP d'accès aux sessions</a0> en complément pour augmenter la sécurité de ces serveurs qui accèdent aux sessions au travers d'un réseau non sûr For security reason, a cookie provided for a domain cannot be sent to another domain. Pour des raisons de sécurité, un cookie fournit par un domaine ne peut être transmit à un autre. For security reasons, the password is not shown in sessions explorer. Pour des raisons de sécurité, le mot-de-passe n'est pas affiché dans l'explorateur de sessions. For tests with <c0>example.com</c0>, launch the following : Pour les tests avec <c0>example.com</c0>, lancer ce qui suit : For tests with the configured domain, launch the following : Pour les tests avec le domaine configuré, lancer : For the certificate, you can build it from the signing private key registered in Manager. Pour le certificate, vous pouvez le construire en signant la clef privée enregistrée dans le Manager. Forbidden and Server error Accès interdits et erreurs du serveur Force HTTPS in redirection Indicateur HTTPS pour les redirections Force password change with <a0>LDAP</a0> password policy password reset flag Forçage du changement de mot-de-passe avec le drapeau de réinitialisation de mot-de-passe de la politique de mots-de-passe <a0>LDAP</a0> Force port in redirection Force le port dans les redirections Form page <a0>URI</a0>: /login.php <a0>URI</a0> de la page de formulaire : /login.php Form replay Rejeu de formulaires Form replay allows you to open a session on a protected application by replaying the form POST without asking anything to the user. Le rejeu de formulaire permet d'ouvrir une session dans une application protégée par un formulaire POST sans rien demander à l'utilisateur. Form replay data les données à rejouer dans les formulaires Form replay parameters Paramètres de rejeu de formulaires Form replay with Apache mod_proxy Rejeu de formulaires avec le mod_proxy d'Apache Forward <a0>SSO</a0> trough <a1>HTTP</a1> Auth-Basic or form replay Possibilité d'étendre le <a0>SSO</a0> à des applications utilisant une authentification <a1>HTTP</a1> Auth-Basic ou un formulaire HTML Forward logout to applications Propager les déconnexions aux applications Frameworks Frameworks Freshmeat Freshmeat Full access control Contrôle d'accès complet Full name Nom complet Functioning Fonctionnement Functions list Liste des fonctions Functions list available Liste de fonctions disponibles Functions parameters: Paramètres de la fonction : G G GLPI GLPI GLib GLib GNU General Public License Licence publique générale GNU GRR GRR Gaultier HUBERT Gaultier HUBERT Gendarmerie Nationale Gendarmerie Nationale Gender Gender General options Options générales General parameters Paramètres généraux General performances Performances générales Generic articles Articles génériques Genève Genève Get the packages Obtenir ces paquets Get the tarball Récupérer l'archive Get the tarball from <a0>download page</a0>. Récupérer l'archive depuis la <a0>page de téléchargement</a0>. Get the tarball on <a0>Download page</a0> and follow next steps (or install using packages): Récupérez les sources sur la <a0>page de téléchargement</a0> et suivez les étapes suivantes (ou utilisez les paquets): Get the tarball on <a0>download page</a0> and follow next steps (or install using <a1>RPM</a1> or <a2>Debian</a2> packages): Récupérez l'archive sur la <a0>page de téléchargement</a0> et suivez les étapes suivantes (ou installez les paquets <a1>RPM</a1> ou <a2>Debian</a2>): Getting sources from SVN repository Obtenir les sources depuis le dépôt SVN Give a non ascii data Done une valeur non-ascii Give a static value Donne une valeur statique Give display name Donne le nom à afficher Give the uid (for accounting) Donne l'uid (pour la traçabilité) Glossary directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ Répertoire des glossaires = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ Go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>SAML</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2><a3>SAML</a3> et configurer : Go in Manager and click on <c0><a1>SAML</a1> 2 Service</c0> node. Allez dans le Manager et cliquez sur le nœud <c0>Service <a1>SAML</a1> 2</c0>. Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Secure Token</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Jeton sécurisé</c3>, et éditer les clefs suivantes : Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Sympa</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Sympa</c3>, et éditer les clefs suivantes : Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Zimbra</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Zimbra</c3>, et éditer les clefs suivantes : Go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Custom functions</c2> and set: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Fonctions personnalisées</c2> et indiquer : Go in Manager, <c0>General Parameters</c0> » <c1>Cookies</c1> » <c2>Multiple domains</c2> and set to <c3>On</c3>. Aller dans le manager, <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> et sélectioonner "activer" Go in Manager, <c0>General Parameters</c0> » <c1>Sessions </c1> » <c2>Store user password in session data</c2> and set to <c3>On</c3>. Aller dans le manager, <c0>paramètres généraux</c0> » <c1>Sessions </c1> » <c2>Stocker le mot-de-passe dans les données de session</c2> et le mettre à <c3>Activer</c3>. Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Logout forward</c2> and click on <c3>Add a key</c3>, then fill: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Transfert de la déconnexion</c2> et cliquer sur <c3>Ajouter une clef</c3>, renseigner ensuite : Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Security</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> : Go in Manager, and: Aller dans le manager et : Go in the Manager and set the <a0>LDAP</a0> session module (<a1>Apache::Session::LDAP</a1>) in <c2>General parameters</c2> » <c3>Sessions</c3> » <c4>Session storage</c4> » <c5>Apache::Session module</c5> and add the following parameters (case sensitive): Aller dans le manager et mettre le module de session (<a0>Apache::Session::LDAP</a0>) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter les paramètres suivant (sensible à la casse) : Go in the Manager and set the session module (<a0>Apache::Session::Browseable::MySQL</a0> for MySQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le manager et mettre le module de session (<a0>Apache::Session::Browseable::MySQL</a0> pour MySQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter le paramètre suivant (sensible à la casse) : Go in the Manager and set the session module (for example <a0>Apache::Session::Browseable::MySQL</a0> for MySQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le Manager et choisir le module de session (par exemple <a0>Apache::Session::Browseable::MySQL</a0> pour MySQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter les paramètres suivants (sensible à la casse): Go in the Manager and set the session module (for example <a0>Apache::Session::Postgres</a0> for PostgreSQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le Manager et choisir le module de session (par exemple <a0>Apache::Session::Browseable::Postgres</a0> pour PostgreSQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter les paramètres suivants (sensible à la casse): Go on <a0>http://auth.example.com</a0> and log with <a1>LDAP</a1> user account. Allez sur <a0>http://auth.example.com</a0> et connectez-vous avec le compte <a1>LDAP</a1>. Go on <a0>http://auth.example.com</a0> and log with one of the demonstration account. Allez sur <a0>http://auth.example.com</a0> et connectez-vous avec l'un des comptes de démonstration Go on <a0>http://manager.example.com</a0> Allez sur <a0>http://manager.example.com</a0> Go on Drupal administration interface and enable the Webserver Auth module. Aller dans l'interface administration et activer le module Webserver Auth. Go to %_topdir Aller dans %_topdir Go to <c0>Configuration</c0> » <c1>Authentication</c1>: Aller dans <c0>Configuration</c0> » <c1>Authentication</c1>: Go to <c0>My Account</c0>: Aller dans <c0>My account</c0>: Go to <c0>Portal</c0> » <c1>Settings</c1>: Aller dans <c0>Portal</c0> » <c1>Settings</c1>: Go to the Manager and <a0>create a new virtual host</a0> for Bugzilla. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Bugzilla. Go to the Manager and <a0>create a new virtual host</a0> for Dokuwiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Dokuwiki. Go to the Manager and <a0>create a new virtual host</a0> for Drupal. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Drupal. Go to the Manager and <a0>create a new virtual host</a0> for Liferay. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Liferay. Go to the Manager and <a0>create a new virtual host</a0> for LimeSurvey. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour LimeSurvey. Go to the Manager and <a0>create a new virtual host</a0> for MediaWiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Mediawiki. Go to the Manager and <a0>create a new virtual host</a0> for Sympa. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Sympa. Go to the Manager and <a0>create a new virtual host</a0> for Zimbra. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Zimbra. Go to the Manager and <a0>create a new virtual host</a0> for phpLDAPadmin. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour phpLDAPadmin. Goal But Google Google Google Apps Google Apps Google Apps control panel Panneua de contrôle Google Apps Google Apps does not support Single Logout (SLO). Google Apps ne supporte pas le Single Logout (SLO). Google Apps has a configuration parameter to redirect user on a specific <a0>URL</a0> after Google Apps logout (see <a1>Google Apps control panel</a1>). Google Apps ne dispose pas de paramètre de configuration pour rediriger les utilisateurs vers une <a0>URL</a0> spécifique après la déconnexion Google Apps (voir <a1>Google Apps control panel</a1>). Google proposes to allow applications to reuse its own authentication process using <a0>OpenID</a0> protocol (it means, if your are connected to Google, other applications can trust Google and let you in). Google propose d'autoriser les applications à réutiliser son propre processus d'authentification en utilisant le protocole <a0>OpenID</a0> (ce qui signifie que si on est connecté à Google, d'autres applications peuvent agréer Google et accepter l'utilisateur). Google+ Google+ GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout Grant LemonLDAP::NG access Autoriser l'accès pour LemonLDAP::NG Graphical Manager Gestionnaire graphique Groups Groupes H H HASH of login success and failures Table des connexion réussies ou échouées HTTP Auth HTTP Auth HTTP Basic Authentication Authentification basique HTTP HTTPS HTTPS Habib ZITOUNI Habib ZITOUNI Hamza AISSAT Hamza AISSAT Handler Agent (Handler) Handler Redirections Redirections des agents Handler Status Page de statut de l'agent Handler build the preauth request and redirect user on Zimbra preauth <a0>URL</a0> Le handler construit la requête de pré-authentification et redirige l'utilisateur sur l'<a0>URL</a0> de pré-authentification de Zimbra Handler check access rule and send headers to protected applications L'agent vérifie les droits d'accès à l'application et envoie des en-têtes HTTP à l'application protégée Handler detects <a0>URL</a0> parameter and create a <a1>SSO cookies</a1> on its domain, with session ID as value L'agent détecte le paramètre d'<a0>URL</a0> et crée le <a1>cookie SSO</a1> dans son domaine, avec la valeur de l'identifiant de session Handler does not see <a0>SSO cookies</a0> (because it is not in main domain) and redirects user on Portal L'agent n'intercepte pas de <a0>cookie SSO</a0> (car il n'est pas dans le même domaine) et redirige l'utilisateur vers le portail Handler gets session get from cookie and gets session L'agent récupère la session en utilisant la valeur du cookie Handler inform Apache of connected user (parameter <c0>whatToTrace</c0>), so you can see user login in Apache access logs. L'agent fournit à Apache l'identifiant de l'utilisateur (paramètre <c0>whatToTrace</c0>), ainsi vous pouvez voir l'identifiant dans les journaux d'accès d'Apache. Handler parameters Paramètres de l'agent Handler performance Performance des agents (handlers) Handler sends the response to user Celui-ci la renvoie à l'utilisateur Handler status page Page de statut de l'agent Handler stores user data in its cache Il stocke ces données dans son cache Handler use the default Apache error code for the following cases: Les agents utilisent le code d'erreur d'Apache dans les cas suivants : Handler will then check <a0>SSO cookies</a0> for each <a1>HTTP</a1> request. L'agent examinera le <a0>cookie SSO</a0> pour chaque requête <a1>HTTP</a1>. Handlers check rights and calculate headers for each <a0>HTTP</a0> hit. Les agents vérifient les droits et calculent les en-têtes pour chaque requête <a0>HTTP</a0>. Handlers have a session cache, with a default lifetime of 10 minutes. Les agents disposent d'un cache de session d'une durée de vie par défaut de 10 minutes. Header En-tête Header name Nom d'en-tête Header names must contain only letters and ”-” character Les noms d'en-têtes ne doivent contenir que des lettres et le caractère ”-” Header value Valeur d'en-tête Headers En-têtes Headers are associations between an header name and a perl expression that returns a string. Les en-têtes sont des associations entre un nom d'en-tête et une expression perl qui retourne une chaîne. Headers are defined inside a virtualhost and takes effect only on it. Les en-têtes sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Headers are used to give user datas to the application. Les en-têtes sont utilisés pour donner aux applications les données utilisateurs. Headers sent En-têtes envoyés Heidelberg Heidelberg Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! Here are some advices: Il y a deux avis : Here are some examples for main databases servers. Quelques exemples pour les serveurs principaux. Here are some screenshots of 1.2 new features. Ici se trouvent quelques captures d'écran illustrant les nouvelles fonctionnalités de la version 1.2. Here are the main options used by <a0>LL::NG</a0>: Ci-dessous les principales options utilisées par <a0>LL::NG</a0> : Here is the list of <a0>Perl</a0> modules used in LemonLDAP::NG. Ci-dessous la liste des modules <a0>Perl</a0> utilisés dans LemonLDAP::NG. Hide old password in reset form Masquer l'ancien mot-de-passe dans le formulaire de réinitialisation High Availability Haute disponibilité High availability Haute disponibilité Home Accueil Hosted application Application hébergée Hosted by Hébergé par How it works Fonctionnement How to change configuration backend Comment changer le backend de configuration How to choose? Comment choisir ? However, certificate will not be really validated by other <a0>SAML</a0> components (expiration date, common name, etc.), but will just be a public key wrapper. Toutefois, le certificat ne sera pas réellement validé par les autres composants <a0>SAML</a0> (date d'expiration, nom commun, etc.), mais simplement vu comme un conteneur de clef publique. However, it is not advised to edit such files, as they are part of the program, and will be erased at next upgrade. Toutefois, il n'est pas recommandé d'éditer ces fichiers car ils font partie du logiciel et peuvent être écrasés lors des mises à jour. Hubert GAULTIER Hubert GAULTIER Hyper Text Transfer Protocol Hyper Text Transfer Protocol HyperText Markup Language HyperText Markup Language Hypertext Preprocessor Pré-processeur hypertext I I IO::String IO::String IRC IRC Identity Provider Fournisseur d'identité Identity provider Fournisseur d'identité If <a0>CAS</a0> failed, <a1>LDAP</a1> will be used. Si <a0>CAS</a0> échoue, <a1>LDAP</a1> est utilisé. If <a0>LDAP backend</a0> is used, and <a1>LDAP</a1> password policy is enabled, the 'password reset flag is set to true when password is generated, so that the user is forced to change his password on next connection. Si le <a0>backend LDAP</a0> est utilisé et que la politique de mot-de-passe <a1>LDAP</a1> est activée, le drapeau de réinitialisation de mot-de-passe est activé lorsque le mot-de-passe est généré, ce qui force l'utilisateur à le changer à la prochaine connexions. If <a0>LL::NG</a0> is the only software installed in Apache, the virtual host feature may not have already been activated. Si <a0>LL::NG</a0> est le seul logiciel installé sur Apache, la fonctionnalité d'hôte virtuel peut ne pas avoir été activée. If <a2>LL::NG</a2> send some roles split by some commas, configure <s3>roleSeparator</s3>. Si <a2>LL::NG</a2> envoie les rôles séparés par des caractères (virgule,...), configurer <s3>roleSeparator</s3>. If <c0><a1>CAS</a1> login</c0> is not set, it uses <c2>General Parameters</c2> » <c3>Logs</c3> » <c4>REMOTE_USER</c4> data, which is set to <c5>uid</c5> by default Si le <c0>login <a1>CAS</a1></c0> n'est pas défini, la donnée <c2>Paramètres généraux</c2> » <c3>Journalisation</c3> » <c4>REMOTE_USER</c4> est utilisée, mise à <c5>uid</c5> par défaut If <c0>OpenID login</c0> is not set, it uses <c1>General Parameters</c1> » <c2>Logs</c2> » <c3>REMOTE_USER</c3> data, which is set to <c4>uid</c4> by default Si l'<c0>identifiant OpenID</c0> n'est pas renseigné, la donnée <c1>Paramètres généraux</c1> » <c2>Journalisation</c2> » <c3>REMOTE_USER</c3> est utilisée, mise à <c4>uid</c4> par défaut If <c0>exportedAttr</c0> is set, only those attributes are copied in the session database of the secondary <a1>LL::NG</a1> structure. Si <c0>exportedAttr</c0> est défini, seuls ces attributs sont copiés dans la base des sessions du système <a1>LL::NG</a1> secondaire. If Multi is used for authentication and user database, it will try to use the same module. Si Multi est utilisé pour l'authentification et la base utilisateurs, il essaiera d'utiliser le même module. If OpenID is used as users database, attributes will be requested to the server with SREG extention. Si OpenID est utilisé comme base d'utilisateurs, les attributs sont demandés en utilisant l'extension SREG d'OpenID. If a modification is done, the configuration is saved with a new configuration number. Si une modification est effectuée, la configuration est sauvée avec un nouveau numéro. If a user does not comply with any condition, he is prompted a customized message. Si un utilisateur ne remplit pas une condition, il est averti par un message personnalisé. If a user is not authenticated and attempts to connect to an area protected by a LemonLDAP::NG compatible Handler, he is redirected to a portal. Si un utilisateur n'est pas authentifié et tente de se connecter à une application protégée par un agent compatible LemonLDAP::NG, il est redirigé vers le portail. If a user is redirected from handler to portal for authentication and once he is authenticated, portal redirects him to the redirection <a0>URL</a0>. Si un utilisateur est redirigé depuis un agent vers le portail pour s'authentifier et s'il est déjà authentifié, le portail le redirige vers l'<a0>URL</a0> de redirection. If authentication is configured, Authen::SASL and <a0>MIME</a0>::Base64 modules are required Si l'authentification est configurée, les modules Authen::SASL and MIME::Base64 sont requis If authentication succeed, Portal collect user data Si l'authentication est acceptée, le portail récupère les données de l'utilisateur If enabled, if the user group is a member of another group (group of groups), all parents groups will be stored as user's groups. Si activé et si le groupe de l'utilisateur est membre d'un autre groupe (groupes de groupes), tous les groupes parents seront considérés comme groupes de l'utilisateur. If for an obscure reason, the WebSSO is not working and you want to access the Manager, remove the protection in <c0>lemonldap-ng.ini</c0> and reconfigure Apache access control. Si pour une quelconque raison le WebSSO ne fonctionne pas, pour accéder au manager, supprimer la protection dans <c0>lemonldap-ng.ini</c0> et reconfigurer le contrôle d'accès d'Apache. If for an obscure reason, the WebSSO is not working and you want to access the Manager, remove the protection in <c0>lemonldap-ng.ini</c0>. Si pour une quelconque raison le WebSSO ne fonctionne pas, pour accéder au manager, supprimer la protection dans <c0>lemonldap-ng.ini</c0>. If needed, you can <a0>recompile the valve from the sources</a0>. Si besoin, <a0>recompiler la valve depuis les sources</a0>. If no <a0>SMTP</a0> server is configured, the mail will be sent via the local sendmail program. Si aucun serveur <a0>SMTP</a0> n'est configuré, le courriel est envoyé via la commande locale sendmail. If no binding defined, the default binding in IDP metadata will be used. Si aucune méthode n'est définie, la méthode par défaut des métadatas de l'IDP sera utilisée. If no encryption keys are defined, signature keys are used for signature and encryption. Si aucune clef de chiffrement n'est définie, la clef de signature est aussi utilisée pour le chiffrement. If no proxied services defined, <a0>CAS</a0> authentication will not activate the <a1>CAS</a1> proxy mode. Si aucun service proxifié n'est défini, l'authentification <a0>CAS</a0> n'activera pas le mode proxy <a1>CAS</a1>. If no value, disable group searching. La recherche des groupes est désactivé si cette valeur est vide. If no value, the default NameID format is Email. Si aucune valeur n'est indiquée, le format de NameID par défaut est Email. If no value, will use first NameID Format activated in metadata. Si aucune valeur n'est indiquée, le premier format de NameID activé dans les métadatas sera utilisé. If not Go on Manager, and declare Manager as a new <a0>virtual host</a0>, for example <c1>manager.example.com</c1>. Si non, aller dans le manager et déclarer le manager comme un nouvel <a0>hôte virtuel</a0>, par exemple <c1>manager.example.com</c1>. If not authenticated (or authentication is forced) try to find it (userDB module) and to authenticate it (auth module), create session, calculate groups and macros and store them Si ce n'est pas le cas (ou si l'authentification est forcée) tente de le trouver (module userDB) et de l'authentifier (module d'authentification), crée la session, calcule les groupes et macros et les stocke If not authenticated (or authentication is forced) try to find it (userDB module) and to authenticate it (auth module), create session, calculate groups and macros and store them. Si ce n'est pas le cas (ou si l'authentification est forcée) tente de le trouver (module userDB) et de l'authentifier (module d'authentification), crée la session, calcule les groupes et macros et les stocke If not set, the secret token is calculated using the general encryption key. S'il n'est pas renseigné, le jeton secret est calculé en utilisant la clef de chiffrement générale. If one is missing, the user is not created. Si l'un est manquant, le compte ne sera pas créé. If secured cookie is enabled, the portal <a3>URL</a3> <s4>must</s4> be HTTPS. Si le cookie sécurisé est activé, l'<a3>URL</a3> du portail <s4>doit</s4> être en HTTPS. If so, you can redirect users to a <a0>HTML</a0> page that explain that it is safe to close browser after disconnect. Dans ce cas, il faut rediriger les utilisateurs vers une page <a0>HTML</a0> qui explique qu'il est préférable de clore son navigateur après déconnexion. If some of your servers are not in the same (secured) network than the database, it is recommended to use <a3>SOAP access</a3> for those servers. Si certains des serveurs ne se trouvent pas sur le même réseau (securisé) que la même base de données, il est recommandé d'utiliser <a3>l'accès SOAP</a3> pour ces serveurs. If the OpenID consumer ask for data, users will be prompted to accept or not the data sharing. Si le client OpenID demande des données utilisateurs, ceux-ci sont questionnés pour accepter ou non le partage. If the message contains check boxes, the user has to check all of them else he can not access to the portal and get his session cookie. Si le message contient des cases à cocher, l'utilisateur doit toutes les cocher, sinon il ne peut obtenir de cookie de session. If the packages are stored in a yum repository: Si les paquets sont stockés dans un dépôt yum : If the rule evaluation is true, the corresponding skin is applied. Si la règle correspond, le thème correspondant est appliqué. If the user do a new password reset request but there is already a request pending, the user can ask the confirmation mail to be resent. Si l'utilisateur effectue une nouvelle demande de réinitialisation mais qu'une requête est déjà en attente, il peut demander une ré-expédition du courriel. If the user has these values inside its entry: Si l'utilisateur dispose de ces valeurs dans son entrée : If the user is not created, or can not be created via <a0>LDAP</a0> import, the connection to Liferay will be refused. Si le compte n'est pas créé ou ne peut être créé par un import <a0>LDAP</a0>, la connexion à Liferay sera refusée. If they really do not please you, override them! S'ils ne conviennent pas, il peuvent être surchargés. If this attribute is missed all hosts are allowed. Si cet attribut est manquant, toutes les adresses seront autorisées. If this regex matches, the line is ignored. Si cette expression régulière correspond, la ligne est ignorée. If this session is lost, Google will ask a confirmation for each requested attribute. Si cette session est perdue, Google redemandera confirmation pour chaque attribut demandé. If using <a0>LL::NG</a0> as reverse proxy, configure the <c1>Auth-User</c1> <a2>header</a2>, else no headers are needed. Si <a0>LL::NG</a0> est utilisé par reverse-proxy, configurer l'<a2>en-tête</a2> <c1>Auth-User</c1>, aucun autre en-tête n'est utile. If you activate proxy mode, you must create the <a0>PGT</a0> file on your system, for example: Si le mode proxy est activé, il faut créer le fichier <a0>PGT</a0> sur le système, par exemple : If you are protecting Dokuwiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Dokuwiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. If you are protecting Drupal with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Drupal est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. If you are protecting MediaWiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Mediawiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. If you are using packages, they should have done the upgrade process for you, but you can check here that all is in order. Lorsqu'on utilise les paquets, ils doivent faire d'eux-même la mise à jour, mais on peut vérifier ici que tout est en ordre. If you can not access the Manager anymore, you can unprotect it by editing <c0>lemonldap-ng.in</c0> and changing the <c1>protection</c1> parameter: SI l'accès au manager est perdu, on peut le déprotéger en éditant <c0>lemonldap-ng.in</c0> et en changeant le paramètre <c1>protection</c1> : If you choose to use MySQL, read <a0>how to increase MySQL performances</a0>. Si MySQL est choisi, lire <a0>comment augmenter les performances de MySQL</a0>. If you configure form replay with <a0>LL::NG</a0>, the Handler will catch configured POST <a1>URL</a1> and send a POST query to the target page (which can be different of the caught page). En configurant le rejeu de formulaire avec <a0>LL::NG</a0>, l'agent intercepte les <a1>URL</a1> configurées et envoie une requête POST à la page cible (qui peut être différente de la première). If you define mail contents in Manager, <a0>HTML</a0> templates will not be used. Si les contenus sont définis dans le manager, les modèles <a0>HTML</a0> ne sont pas utilisés. If you disallow this, you should also disallow direct login form IDP, because proxy restriction is set in authentication requests. En interdisant ceci, on risque d'interdire aussi les authentification directe des IDP car la restriction est indiquée dans la requête d'authentification. If you enable auto completion, authentication level will be decreased (-1) as you do not ask the user to type its password (it could be in browser passwords wallet). En activant l'auto-complétion, le niveau d'authentification est décru (-1) car on ne demande plus à l'utilisateur de taper son mot-de-passe (il peut être protégé dans le navigateur). If you have more than one role for an application, you can join those roles with a separator (ex: ||): Si plusieurs rôles peuvent être donnés dans la même application, on peut joindre ces rôles avec un séparateur (ex : ||): If you have run the Debian/Ubuntu install command, just use: Pour la commande d'installation Debian/Ubuntu, utiliser simplement : If you have to use mpm-prefork (for example if you use <a0>PHP</a0>), LemonLDAP::NG will work anyway. S'il faut utiliser mpm-prefork (par exemple si on utilise <a0>PHP</a0>), LemonLDAP::NG fonctionnera tout de même. If you install packages on 64bits system, create those symbolic links: Pour installer les paquets sur un système 64bits, créeer ces liens symboliques : If you manage different timezones, you have to take the jetlag into account in ssoLogonHours values, or use the $_timezone parameter. Si plusieurs fuseaux sont utilisés, le jetlag doit être introduit dans le compte dans la valeur ssoLogonHours, ou utiliser le paramètre $_timezone. If you modify <c0>/saml/metadata</c0> suffix you have to change corresponding Apache rewrite rule. Si vous modifiez le suffixe <c0>/saml/metadata</c0>, vous devez changer la règle de réécriture d'Apache. If you modify directly the skin files, your modifications will certainly be erased on the next upgrade. Les modifications apportées directement sur les fichiers thèmes risquent d'être perdus à la prochaine mise-à-jour. If you need it, you can rebuild RPMs: Si besoin, on peut reconstruire les RPMs : If you need to add a template parameter for your customization, then add to <c0>lemonldap-ng.ini</c0>: Pour ajouter un paramètre de modèle, l'ajouter dans <c0>lemonldap-ng.ini</c0>: If you plan to forward user's password to OBM, then you have to <a0>keep the password in session</a0>. S'il est prévu de transmettre le mot-de-passe utilisateur à OBM, <a0>conserver le mot-de-passe dans la session</a0>. If you run Debian testing or unstable, the packages are directly installable: Pour les utilisateurs de Debian testing ou unstable, les paquets sont directement installables : If you set <c0>useLocalConf</c0> to 1 in lemonldap-ng.ini (section [Portal]), the portal will use only a cached configuration. En mettant <c0>useLocalConf</c0> à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. If you specify port in virtual host, then declare <a0>SSL</a0> port: SI le port est spécifié, déclarer le port <a0>SSL</a0> : If you upgrade from older versions, please follow first: Pour les mises à jour depuis des versions plus anciennes, suivre d'abord : If you upgraded <a0>LL::NG</a0>, check all <a1>upgrade notes</a1>. Pour mettre à jour <a0>LL::NG</a0>, lisez toutes les <a1>notes de mise à jour</a1>. If you use Facebook as user database, declare values in exported variables : Si on utilise Facebook comme base de données utilisateurs, déclarer les valeurs dans les « variables exportées » : If you use TLS, you can set any of the <a0>Net::LDAP</a0> start_tls() sub like <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. En utilisant TLS, il est possible d'utiliser toutes les options de la fonction start_tls() <a0>Net::LDAP</a0> telle <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. If you use WebID as user database, declare values in exported variables : Si on utilise WebID comme base de données utilisateurs, déclarer les valeurs dans les « variables exportées » : If you use features like <a0>SAML</a0> (authentication and issuer), <a1>CAS</a1> (issuer) and password reset self-service, you also need to index some fields. Lorsqu'on utilise des fonctionnalités telles <a0>SAML</a0> (authentification ou fournisseur d'identité), <a1>CAS</a1> (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs. If you use the binary value (Active Directory), use this: Si une valeur binaire est utilisée (Active Directory) : If you want to access to other datas, you have to use Google in <c2>General Parameters</c2> > <c3>Authentication modules > User module</c3>. Pour accéder aux autres données, utiliser Google in <c2>Paramètres generaux</c2> > <c3>Modules d'authentification > Modules d'utilisateurs</c3>. If you want to become member of <a1>LL::NG</a1> team ask to <a2>lemonldap-ng-dev@ow2.org</a2>. SI vous souhaitez devenir membre de l'équipe <a1>LL::NG</a1> demandez-le également à <a2>lemonldap-ng-dev@ow2.org</a2>. If you want to refuse access when a data is missing, just add a ”!” before the key name Pour imposer qu'une valeur soit renseignée, ajouter un ”!” devant le nom de clef If you want to require that a field is set, add ”!” before the key name : Pour imposer qu'une valeur soit renseignée, ajouter un ”!” devant le nom de clef : If you wrote custom authentication module, you have to add a new method called <c0>getDisplayType</c0>. Les modules d'authentification personnalisés doivent désormais contenir une nouvelle méthode nommée <c0>getDisplayType</c0>. If your <a0>LDAP</a0> suffix is not dc=example,dc=com, use: Si le suffixe de votre annuaire <a0>LDAP</a0> n'est pas dc=example,dc=com, utilisez : If your <a3>LDAP</a3> server do not manage this objectClass, you have to extend your schema. Si le serveur <a3>LDAP</a3> ne gère pas cette classe d'objet, il faut étendre le schéma. If your application is based on <a0>Perl CGI package</a0>, you can simply replace <a1>CGI</a1> by <a2>Lemonldap::NG::Handler::CGI</a2> Si l'application est basée sir le <a0>paquet CGI de Perl</a0>, il suffit de remplacer <a1>CGI</a1> par <a2>Lemonldap::NG::Handler::CGI</a2> If your function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail. Si la fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. If your sessions explorer is on the same server that the portal, either use the <s0>adminSessions</s0> end point in Manager configuration, or override the <c1>globalStorage</c1> and <c2>globalStorageOptions</c2> parameters in section all (and not portal) of <c3>lemonldap-ng.ini</c3>. Si l'explorateur de sessions est sur le même serveur que le portail, utiliser soit la terminaison <s0>adminSessions</s0> dans la configuration eu manager, ou surcharger les paramètres <c1>globalStorage</c1> et <c2>globalStorageOptions</c2> dans la section all (et pas portal) de <c3>lemonldap-ng.ini</c3>. If your table is not named lmConfig, set it's name in <c0>dbiTable</c0> parameter. Si la table ne se nomme pas lmConfig, mettre son nom dans le paramètre <c0>dbiTable</c0>. Imagine you've set your directory schema to store roles as values of ssoRoles, an attribute of the user. On suppose que le schéma d'annuaire a été prévu pour stocker les rôles comme valeur de ssoRoles, un attribut utilisateur. Import custom functions in LemonLDAP::NG Importer les fonctions personnalisées dans LemonLDAP::NG Import or generate security keys Importer ou generer les clefs de securité Imported from an <a0>LDAP</a0> directory Importés d'un serveur <a0>LDAP</a0> In 1.3, <a0>LL::NG</a0> have a captcha feature which is used in this case. Dans la version 1.3, <a0>LL::NG</a0> dispose d'une fonctionnalité "captcha" qui est utilisée dans ce cas. In <a0>LDAP</a0> filters, $user is replaced by user login, and $mail by user email. Dans les filtres <a0>LDAP</a0>, $user est remplacé par le nom du compte et $mail par l'adresse email. In <c0>General Parameters</c0> > <c1>Authentication modules</c1>, set: Dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1>, choisir : In <c0>General</c0>, fill at least the following information: Dans <c0>General</c0>, remplir au moins les informations suivantes : In Bugzilla administration interface, go in <c0>Parameters</c0> » <c1>User authentication</c1> Dans l'interface d'administration, allez dans <c0>Parameters</c0> » <c1>User authentication</c1> In Debian/Ubuntu mod_ssl is already shipped in <c0>apache2.2-common</c0> package. Dans Debian/Ubuntu mod_ssl est installé avec le paquet <c0>apache2.2-common</c0>. In Debian/Ubuntu, install the library through apt-get command Pour Debian/Ubuntu, installer la librairie via la commande apt-get In Manager, click on <a0>SAML</a0> service providers and the button <c1>New service provider</c1>. Dans le manager, cliquer sur fournisseurs de service <a0>SAML</a0> puis sur le bouton <c1>Nouveau fournisseur de service</c1>. In Manager, click on <c0>notifications explorer</c0> and then on the <c1>Create</c1> button. Dans le manager, cliquer sur l'<c0>explorateur des notifications</c0> et ensuite sur le bouton <c1>Créer</c1>. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose <a2>CAS</a2> for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>CAS</a2> pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose <a2>LDAP</a2> for authentication, users and/or password modules. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>LDAP</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose <a2>SSL</a2> for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>SSL</a2> pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Apache for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Apache pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose BrowserID for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir BrowserID pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Choice for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Choice pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Database (<a2>DBI</a2>) for authentication, users and/or password modules. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir "base de données" (<a2>DBI</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Facebook for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Facebook comme module d'authentication. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Google for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Google comme module d'authentication. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Null for authentication, users or password module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Null</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose OpenID for authentication and/or users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>OpenID</a2> pour les modules authentification, utilisateurs et/ou mots-de-passe. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Proxy for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Proxy pour les modules authentification et utilisateurs. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Radius for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Radius pour l'authentification. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Slave for authentication or users module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Slave</a2>) pour les modules authentification ou utilisateurs. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Twitter for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Twitter comme module d'authentication. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose WebID for authentication module. Dans le manager, aller dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisir WebID comme module d'authentication. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Yubikey for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Yubikey comme module d'authentication. In Manager, go in <c0>General Parameters</c0> » <c1>Authentication modules</c1> and choose Proxy for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Remote pour les modules authentification et utilisateurs. In Manager, go in <c0>General Parameters</c0> » <c1>Authentication modules</c1> and choose Remote for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Remote pour les modules authentification et utilisateurs. In Manager, set syslog facility in <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>Syslog facility</c2>. Dans le manager, choisir la facilité syslog dans <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>Facilité syslog</c2>. In Manager, you can configure categories and applications in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Categories and applications</c3>. Dans le manager, on peut configurer les catégories et applications dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Catégories et applications</c3>. In Portal virtual host, you will find several configuration parts: Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration : In other cases which result on impossibility to authenticate user, to retrieve data or to create a session, nothing is stored. Dans les autres cas résultant de l'impossibilité d'authentifier l'utilisateur ou de récupérer les données pour créer la session, rien n'est stocké. In other words, take the time to configure this part before sharing metadata. En d'autres mots, prenez le temps de bien configurer cette partie avant de partager les metadatas. In particular, it use Apache2 threads capabilities so to optimize performances, prefer using <a0>mpm-worker</a0>. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence <a0>mpm-worker</a0>. In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>CAS</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> et configurer : In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2>OpenID</c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2>OpenID</c2> et configurer : In the Manager, select node <a0>SAML</a0> service providers and click on New service provider: Dans le manager, selectionner le noeud fournisseurs de service <a0>SAML</a0> et cliquer sur Nouveau fournisseur de service : In the Manager, select node <c0><a1>SAML</a1> identity providers</c0> and click on <c2>New identity provider</c2>: Dans le Manager, selectionner le noeud <c0>Fournisseurs d'identité <a1>SAML</a1></c0> et cliquer sur <c2>Nouveau fournisseur d'identité</c2> : In the context of an <a0>HTTP</a0> transaction, the basic access authentication is a method designed to allow a web browser, or other client program, to provide credentials – in the form of a user name and password – when making a request. Dans le contexte d'une transaction <a0>HTTP</a0>, l'authentification basique est une méthode qui permet au navigateur ou un autre programme client de fournir des éléments d'authentification – sous la forme d'un nom et d'un mot de passe – à chaque requête. In the manager: set <a0>Apache::Session::Memcached</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Memcached</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse) : In the manager: set <a0>Apache::Session::Redis</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Redis</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse): In the manager: set ”<a0>Apache::Session::File</a0>” in “General parameters » Sessions » Session storage » Apache::Session module” and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::File</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse): In the schema above, the user has the following values: Dans le schéma ci-dessus, l'utilisateur dispose des entrées suivantes : In this case you will be able to use <c1>$_password</c1> to fill any password POST field. Dans ce cas, la variable <c1>$_password</c1> peut être utilisée dans tous les champs à envoyer. In this case you will have two Apache configuration files: Dans ce cas 2 fichiers de configuration Apache doivent être renseignés : In this case, <a1>LL::NG</a1> acts like an SAML2 Service Provider (SP). Dans ce cas, <a1>LL::NG</a1> agit comme un fournisseur de service SAML2 (SP). In this case, authentication is not a response to an issued authentication request, and we have less control on conditions. Dans ce cas, l'authentification n'est pas une réponse à une requête d'authentification ce qui diminue les capacités de contrôle. In this case, see <a1>how convert header into environment variable</a1>. Dans ce cas, voir <a1>comment convertir les en-têtes en variable d'environnement</a1>. In this case, the extracted certificate field value will be used to match the user. Dans ce cas, la valeur du champ de certificat extraite sera utilisée pour identifier l'utilisateur. In this case, you can choose a different module to manage <a1>SAML</a1> sessions. Dans ce cas, vous devez utiliser un module différent pour gérer les sessions <a1>SAML</a1>. In this case, you might want to disabling it. Dans ces cas, on peut vouloir le désactiver. In “Apache::Session module” field, set ”<a0>Apache::Session::Flex</a0>” and use the following parameters: Dans le champ “Module Apache::Session”, indiquez ”<a0>Apache::Session::Flex</a0>” et utilisez les paramètres suivants : Include LemonLDAP::NG configuration in your main Apache configuration: Incluez la configuration LemonLDAP::NG dans celle d'Apache : Indeed, a virtual host can contain several applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). En effet, un hôte virtuel peut contenir plusieurs applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). Indeed, any <a0>Perl DBD driver</a0> can be used. Ainsi, tout <a0>driver Perl DBD</a0> peut être utilisé. Indeed, by default, users without logon hours values are rejected. Sinon, par défaut, les utilisateurs sans créneau horaire de connexion sont rejetés. Indeed, in most of the cases, it is not stored in clear text in the backend (<a0>LDAP</a0> or database). Donc dans la plupart des cas, il n'est pas stocké en clair dans le backend (<a0>LDAP</a0> ou base de données). Indeed, this variable is set by the Handler on the physical server hosting the Handler, and not on other servers where the Handler is not installed. Toutefois, cette variable est renseignée par l'agent dans le serveur physique l'hébergeant mais pas dans les autres serveurs sans agents. Index Index Informix Informix Initiate the Kerberos connection: Initialiser la connexion Kerberos : Insertion example in Perl Exemple d'insertion en Perl Inside this jail, you can access to: Dans cette cage, on peut accéder aux éléments suivants : Install Installation Install <a0>Webserver Auth</a0> module, by downloading it, and unarchive it in the drupal modules/ directory. Télécharger et installer le module <a0>Webserver Auth</a0>, en le décompressant dans le répertoire modules/. Install <a1>Apache::Session::Redis</a1> <a2>Perl</a2> module. Installez le module <a2>Perl</a2> <a1>Apache::Session::Redis</a1>. Install Authen::Radius Installer Authen::Radius Install all build dependencies (see BuildRequires in lemonldap-ng.<a0>spec</a0>) Installer toutes les dépendances de construction (voir BuildRequires dans lemonldap-ng.<a0>spec</a0>) Install and launch a <a0>Memcached server</a0>. Installer et lancer un <a0>serveur Memcached</a0>. Install and launch a <a0>Redis server</a0>. Installez et lancer un <a0>serveur Redis</a0>. Install cron jobs Installer les tâches planifiées (cron) Install dependencies on your system Installer les dépendances sur le système Install it to trust RPMs: L'installer pour certifier les RPMs: Install it to trust packages: L'installer pour certifier les paquets : Install packages Installer les paquets Install prerequisites Installer les pré-requis Install rpm-build package Install rpm-build package Install the module: Installer le module : Install the new lemonldap-ng.ini file at the place of the old file in all <a0>LL::NG</a0> servers Installer le nouveau fichier lemonldap-ng.ini à la place de l'ancien dans tous les serveurs <a0>LL::NG</a0> Install the new lemonldap-ng.ini file in all <a0>LL::NG</a0> components Installer le nouveau fichier lemonldap-ng.ini dans tous les serveurs <a0>LL::NG</a0> Install the package <c0>lemonldap-ng-conf</c0> on all server which contains one of those packages. Installer le paquet <c0>lemonldap-ng-conf</c0> sur tous les serveurs qui contiennent un de ces paquets. Install the package <c0>lemonldap-ng-conf</c0> only on the server which stores configuration. Installer le paquet <c0>lemonldap-ng-conf</c0> seulement sur le serveur qui stocke la configuration. Installation Installation Installation and configuration Installation et configuration Installation from the tarball Installation depuis l'archive Installation on Debian/Ubuntu with packages Installation sur Debian/Ubuntu avec les paquets Installation on RHEL/CentOS with packages Installation sur RHEL/CentOS avec les paquets Installation on RedHat/CentOS Installation sur RedHat/CentOS Integrate existing applications Integrer des applications existantes Integrate your own application Integrer ses propres applications Integration in Active Directory (LDAP and Kerberos) Integration dans Active Directory (LDAP et Kerberos) Interactive <s0>management of user passwords</s0>: <s0>Gestion interactive des mots-de-passe des utilisateurs</s0>: Internal Proxy Proxy interne Internal Proxy (lmProxy) Proxy interne (lmProxy) Internal portal Portail interne International Organization for Standardization International Organization for Standardization Internet Explorer Internet Explorer Internet Protocol Internet Protocol Internet Relay Chat Internet Relay Chat Issuer databases use rules les règles d'utilisation des bases de données des fournisseur d'identité Issuer module (can be multivalued) Module fournisseur (peut-être multivalué) Issuer rewrite rules (requires <c0>mod_rewrite</c0>): Règles de réécriture pour la fourniture d'identité (requiert <c0>mod_rewrite</c0>): IssuerDB IssuerDB IssuerDB use Utilisation de IssuerDB Issy Les Moulineaux Issy-les-Moulineaux It allows to put <a0>LL::NG</a0>::portal behind another web <a1>SSO</a1>, or behind a <a2>SSL</a2> hardware to delegate <a3>SSL</a3> authentication to that hardware. Ceci permet de metre un portail <a0>LL::NG</a0> derrière un autre web <a1>SSO</a1>, ou derrière un matériel <a2>SSL</a2> pour déléguer à ce matériel l'authentification. It can be a brake for the portal: En revanche, ce peut-être un frein pour le portail : It can be configured globally, or inside a virtual host. Il peut être configuré globalement, ou dans chaque hôte virtuel. It can be configured to use <a1>SOAP</a1> instead of direct access to those databases (for remote servers). Il peut être configuré pour utiliser <a1>SOAP</a1> au lieu d'un accès direct à ces bases de données (pour les serveurs distants). It can be done via direct access to the session database or using <a0>SOAP</a0> access. Ce peut être fait par accès direct à la base des sessions principale ou en utilisant une requête <a0>SOAP</a0>. It can be seen in system processes, for example: Il peut être vu dans les processus du système, par exemple : It can be upgraded using buildPortalWSDL script. Il peut être mis à jour en utilisant le script buildPortalWSDL. It can be used just to share authentication or to share user's attributes following the <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3> specification. Ce peut être utilisé pour partager l'authentification et pour partager les attributs utilisateurs en suivant les spécifications <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3>. It can be used to delete a session Il peut être utilisé pour effacer une session It can handle more than 200 000 users. Il peut gérer plus de 200 000 utilisateurs. It can inspect <a2>HTTP</a2> headers to replace on the fly the Location and Set-Cookie headers. Il peut inspecter les en-têtes <a2>HTTP</a2> pour remplacer à la volée les en-têtes Location et Set-Cookie. It can not be used to share sessions between different servers except if you share directories (with NFS,…) or if you use <a0>SOAP proxy</a0>. Il ne peut être utilisé pour partager les sessions entre serveurs sauf si les répertoires sont partagés (avec NFS,…) ou en utilisant le <a0>proxy SOAP</a0>. It can not be used to share sessions between different servers except if you share directories (with NFS,…). Il ne peut être utilisé pour partager les sessions entre serveurs sauf si les répertoires sont partagés (avec NFS,…). It can works with external modules to extends its functionalities. Il peut utiliser des modules externes pour étendre ses fonctionnalités. It has a simple but powerful syntax which makes sure the data files remain readable outside the Wiki and eases the creation of structured texts. Il dispose d'une syntaxe simple mais puissante qui fait que les fichiers de données restent lisibles en dehors du Wiki, et facilite la création de textes structurés. It is a Single Sign On protocol similar to OpenID, but based on user email address rather than a <a0>URL</a0>. C'est un protocole d'authentification unique (Single Sign On) similaire à OpenID, mais basé sur l'adresse emailde l'utilisateur au lieu d'une <a0>URL</a0>. It is advised to use separate session backends for standard sessions, <a0>SAML</a0> sessions and <a1>CAS</a1> sessions, in order to manage index separately. Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, <a0>SAML</a0> et <a1>CAS</a1> afin de gérer séparemment les index. It is also possible to redirect the user without using <c0>ErrorDocument</c0>: the Handler will not return 403, 500, 503 code, but code 302 (REDIRECT). Il est également possible de rediriger les utilisateurs sans utiliser <c0>ErrorDocument</c0> : l'agent ne retournera pas les codes 403, 500, 503 mais le code 302 (REDIRECT). It is also used by <a2>SAML SP</a2> to fill the authentication level in user session, based on authentication response authentication context. Il est également utilisé par le <a2>SP SAML</a2> pour définir le niveau d'authentification dans la session de l'utilisateur en se basant sur la réponse d'authentification. It is compliant with the <a0>form replay</a0> feature Il est compatible avec le <a0>rejeu de formulaire</a0> It is done by creating the correct <a0>HTTP</a0> header: C'est fait en créant l'en-tête <a0>HTTP</a0> correct : It is possible to store any additional session data. Il est possible de stocker d'autres données de session. It is recommended to secure the channel between reverse-proxies and application to be sure that only request coming from the <a0>LL::NG</a0> protected reverse-proxies are allowed. Il est donc recommandé de sécurisé le canal entre le proxy inverse et l'application pour être sûr que seules les requêtes issues des proxies inverses protégés par <a0>LL::NG</a0> sont autorisées. It is recommended to use ModPerl::Registry instead of using cgi-script as described in Apache configuration file example (portal-apache2.conf): Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf): It is recommended to use optional_no_ca since WebID doesn't use certificate authorities : Il est recommandé d'utiliser « optional_no_ca » car WebID n'utilise pas d'autorité de certification : It is set in LemonLDAP::NG utilities directory (<c0>convertConfig</c0>). Il se traouve dans le répertoire des utilitaires LemonLDAP::NG (<c0>convertConfig</c0>). It is stored in session datas under the name <s0>$_facebookToken</s0> Il est stocké dans les données de session sous le nom <s0>$_facebookToken</s0> It is targeted at developer teams, workgroups and small companies. Il est destiné aux équipes de développeurs, groupes de travail ou petites entreprises. It manages both authentication and authorization and provides headers for accounting. Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. It means that if the IDP propose to close session earlier than the default LemonLDAP::NG timeout, the session _utime will be modified so that session is erased at the date indicated by the IDP. Celà signifie que si l'IDP propose de clore la session au-delà de la durée de vie par défaut dans LemonLDAP::NG, la valeur de _utime sera modifiée afin que la session ne soit effacée qu'au moment indiqué par l'IDP. It means that if you modify some settings here, you will have to share again the metadata with other providers. Ceci signifie que si vous modifiez quelque chose ici, vous devez ré-exporter les metadatas aux autres fournisseurs. It means that you manage authorizations to access applications by checking the role(s) of the user, and provide this role to the application. Celà signifie qu'on gère les autorisations d'accès aux applications en examinant le(s) rôle(s) de l'utilisateur et en fournissant ce(s) rôle(s) à l'application. It needs 4 modules to work: Il a besoin de 4 modules pour fonctionner : It provides many features: Il fournit de nombreuses fonctionnalités : It returns 1 if this match, 0 else. Elle retourne 1 si c'est bon, 0 sinon. It returns: Elle retourne : It sends an OTP, which is validated against Yubico server. Il envoie un mot-de-passe à valeur unique (OTP) qui est validé par un serveur Yubico. It should works on every browser: Ça doit marcher avec tous les navigateurs : It simplifies the build of a protected area with a few changes in the application. Il simplifie la construction d'une aire protégée avec peu d'impact sur les applications. It will be prompted if you generate keys, else you can set it in the <c0>Private key password</c0>. Il vous sera demandé à la génération de la clef ou vous pouvez l'entrer dans le champ <c0>Mot-de-passe de la clef privée</c0>. It will force conversion from UTF-8 to <a3>ISO</a3>-8859-1 of user and password data. Elle force la conversion de UTF-8 en <a3>ISO</a3>-8859-1 du nom de compte et du mot-de-passe. It will open a dialog to choose: Une boîte de dialoque s'ouvre pour choisir : It will use the authentication level registered in user session to match the <a1>SAML</a1> authentication context. Il utilise le niveau d'authentification enregistré dans la session de l'utilisateur pour établir le contexte d'authentification <a1>SAML</a1>. Its <a4>SOAP</a4> <a5>API</a5> can also be used to dialog directly with your custom applications. Son <a5>API</a5> <a4>SOAP</a4> peut être utilisée pour dialoguer directement avec des applications spécifiques. J J JCOS JCOS JDLL JDLL JDLL 2010 JDLL 2010 JSON JSON JSON File configuration backend Backend de configuration en fichier JSON Jan 2012: <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Jan 2012 : <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Java (Spring) Java (Spring) Jean-Thomas CHECCO Jean-Thomas CHECCO Jquery (javascript framework) is included in tarball and RPMs, but is a dependency on Debian Jquery (framework javascript framework) est inclus dans l'archive et les RPM mais est une dépendance sur Debian Jquery (javascript framework) is included in tarball and RPMs, but is a dependency on Debian official releases Jquery (framework javascript) est inclus dans l'archive et les RPMs, mais est une dépendance des versions officielles Debian Just add this file to OpenLDAP schemas by including it in <c0>slapd.conf</c0>: Ajouter simplement ce fichier aux schémas OpenLDAP en l'incluant dans <c0>slapd.conf</c0>: Just configure the <a0>access rules</a0>. Configurer simplement la <a0>règle d'accès</a0>. Just remember its <a0>DN</a0> for LemonLDAP::NG configuration. Il faut juste retenir le <a0>DN</a0> pour la configuration de LemonLDAP::NG. Just run the tar command: Lancer implement la commande tar : Just set the <a3>LL::NG</a3> Handler <a4>IP</a4> on this attribute in order to add more security. Indiquer seulement l'adresse <a4>IP</a4> du handler <a3>LL::NG</a3> dans cet attribut pour ajouter plus de sécurité. Just set the authentication type to <c0>config</c0> and indicate <a1>DN</a1> and password inside the file <c2>config.php</c2>: Mettre juste le type d'authentification à <c0>config</c0> et indiquer le <a1>DN</a1> et le mot-de-passe dans le fichier <c2>config.php</c2>: Kerberos Kerberos Kerberos client for Linux Client Kerberos pour Linux Key Clef Key (<a0>LL::NG</a0> name) Clef (nom <a0>LL::NG</a0>) Key name Nom de la clef Key steps : Etapes clefs : Kinematics Cinématique Kinematics: Cinématique : Known problems Problèmes connus Known supported applications Applications connues pour être supportées Krb5KeyTab /etc/lemonldap-ng/auth.keytab Krb5KeyTab /etc/lemonldap-ng/auth.keytab KrbAuthRealms EXAMPLE.COM KrbAuthRealms EXAMPLE.COM KrbMethodK5Passwd <s13>Off</s13> KrbMethodK5Passwd <s13>Off</s13> KrbMethodK5Passwd <s17>Off</s17> KrbMethodK5Passwd <s17>Off</s17> KrbMethodNegotiate <s12>On</s12> KrbMethodNegotiate <s12>On</s12> KrbMethodNegotiate <s16>On</s16> KrbMethodNegotiate <s16>On</s16> KrbServiceName HTTP KrbServiceName HTTP KrbServiceName HTTP/auth.example.com KrbServiceName HTTP/auth.example.com KrbVerifyKDC <s14>Off</s14> KrbVerifyKDC <s14>Off</s14> KrbVerifyKDC <s18>Off</s18> KrbVerifyKDC <s18>Off</s18> L L LDAP LDAP LDAP configuration backend Backend de configuration LDAP LDAP integration Intégration LDAP LDAP performances Performances LDAP LDAP server Serveur LDAP LDAP session backend Backend de sessions LDAP LDAPCon LDAPCon LDAPFilter LDAPFilter LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> LINAGORA LINAGORA LL::NG LL::NG LL::NG as federation protocol proxy LL::NG en proxy de fédération de protocoles LL::NG based protection Protection basée sur LL::NG LL::NG repository Dépôt LL::NG LWP::UserAgent LWP::UserAgent Language Langue Lanyrd Lanyrd Lasso Lasso Lasso identity dump Dump de l'identité Lasso Lasso session dump Dump de session Lasso Last name Nom Latest stable version Dernière version stable Launch that: Lancer ceci : Leave blank to deactivate the feature. Laissez vide pour désactiver cette fonctionnalité. Leave blank to use Mozilla default verification <a3>URL</a3> (<a4>https://verifier.login.persona.org/verify</a4>) Laisser vide pour utiliser l'<a3>URL</a3> de vérification par défaut de Mozilla (<a4>https://verifier.login.persona.org/verify</a4>) LemonLDAP::NG LemonLDAP::NG LemonLDAP::NG - Offline Version LemonLDAP::NG - Version hors-ligne LemonLDAP::NG 1.0 release Sortie de LemonLDAP::NG 1.0 LemonLDAP::NG 1.1 release Sortie de LemonLDAP::NG 1.1 LemonLDAP::NG <a0>SSO cookies</a0> are generated by <a1>Apache::Session</a1>, they are as secure as a 128-bit random cookie. Les <a0>cookies SSO</a0> de LemonLDAP::NG sont générés par <a1>Apache::Session</a1>, ils sont aussi sûrs que tout cookie basé sur un aléa de 128 bits. LemonLDAP::NG <a0>SSO cookies</a0> are generated by Apache::Session, they are as secure as a 128-bit random cookie. Les <a0>cookies SSO</a0> de LemonLDAP::NG sont générés par Apache::Session, ils sont aussi sécurisés que tout cookie issu d'un alée de 128 bits. LemonLDAP::NG Common Fichiers communs LemonLDAP::NG LemonLDAP::NG Handler Agent LemonLDAP::NG (handler) LemonLDAP::NG Manager Gestionnaire LemonLDAP::NG LemonLDAP::NG Portal Portail LemonLDAP::NG LemonLDAP::NG allows to override any configuration parameter directly in script file. LemonLDAP::NG autorise la surcharge de tout paramètre de configuration directement dans les fichiers de script. LemonLDAP::NG allows to store user logins and login attempts in their persistent session. LemonLDAP::NG permet de stocker les connexions et tentatives dans les sessions persistantes. LemonLDAP::NG allows to use this model. LemonLDAP::NG permet d'utiliser ce modèle. LemonLDAP::NG can also use syslog (only for user actions). LemonLDAP::NG peut également utiliser syslog (seulement pour les actions utilisateurs). LemonLDAP::NG can be used as a proxy between those protocols LemonLDAP::NG peut être utilisé comme proxy entre ces protocoles LemonLDAP::NG can export <a0>HTTP headers</a0> either using a proxy or protecting directly the application. LemonLDAP::NG peut exporter des <a0>en-têtes HTTP</a0> qu'on l'utilise sur une reverse-proxy ou directement sur le serveur à protéger LemonLDAP::NG configuration Configuration de LemonLDAP::NG LemonLDAP::NG configuration (edited by the Manager) is in /var/lib/lemonldap-ng/conf/ La configuration LemonLDAP::NG (editée par le manager) se trouve dans /var/lib/lemonldap-ng/conf/ LemonLDAP::NG configuration can be managed in a local file with <a0>INI format</a0>. La configuration LemonLDAP::NG peut être gérée par un fichier local au <a0>format INI</a0>. LemonLDAP::NG configuration is build around Apache virtual hosts. La configuration de LemonLDAP::NG est construite autour des hôtes virtuels Apache. LemonLDAP::NG configuration is mainly a key/value structure, so Manager will present all keys into a structured tree. La configuration de LemonLDAP::NG est essentiellement une structure clef/valeur, ainsi le manager présente toutes les clefs en un arbre structuré. LemonLDAP::NG configuration is stored in a backend that allows all modules to access it. La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder. LemonLDAP::NG developer must have a account on OW2 platform, and could authenticate themselves via <a0>SSH</a0> 2 by using the following one: Les développeurs LemonLDAP::NG doivent posséder un compte sur la plateforme OW2, et peuvent s'authentifier via <a0>SSH</a0> 2 en utilisant : LemonLDAP::NG does not manage Apache configuration LemonLDAP::NG ne gère pas la configuration d'Apache LemonLDAP::NG is a free software, released under <a0>GPL</a0> license. LemonLDAP::NG est un logiciel libre distribué sous licence <a0>GPL</a0>. LemonLDAP::NG is a modular WebSSO (Single Sign On) based on Apache::Session modules. LemonLDAP::NG est en WebSSO (Single Sign On) modulaire basé sur les modules Apache::Session. LemonLDAP::NG is also able to <a0>catch logout request</a0> on protected applications, with different behavior: LemonLDAP::NG peut également <a0>intercepter les requêtes de déconnexion</a0> des applications protégées, avec différent comportements : LemonLDAP::NG is an open source Web Single Sign On product (WebSSO) written in <a0>Perl</a0>, plugged into Apache Web Server. LemonLDAP::NG est un logiciel d'authentification unique web (WebSSO) écrit en <a0>Perl</a0>, intégré dans un serveur Apache. LemonLDAP::NG is highly scalable, so easy to insert behind a load-balancer: LemonLDAP::NG est hautement scalable, donc facile à insérer derière un répartisseur de charge : LemonLDAP::NG is shipped with 3 skins: LemonLDAP::NG est fournit avec 3 thèmes : LemonLDAP::NG is the first <a0>SSO</a0> software deployed in French administrations. LemonLDAP::NG est le logiciel <a0>SSO</a0> le plus utilisé dans les administrations françaises. LemonLDAP::NG is used to protect access to intranet. LemonLDAP::NG est utilisé pour protéger l'accès à l'Intranet. LemonLDAP::NG is written in <a0>Perl</a0> and requires a lot of <a1>Perl</a1> dependencies. LemonLDAP::NG est écrit en <a0>Perl</a0> et nécessite de nombreuses dépendances <a1>Perl</a1>. LemonLDAP::NG portal menu has 4 modules: Le menu du portail LemonLDAP::NG est composé de 4 modules : LemonLDAP::NG provide a script that allows to edit configuration items in non interactive mode. LemonLDAP::NG fournit un script qui autorise l'édition d'éléments de configuration en mode non-interactif. LemonLDAP::NG provide a script that allows to edit configuration without graphical interface, this script is called <c0>lmConfigEditor</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme <c0>lmConfigEditor</c0> et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin : LemonLDAP::NG provide a script that allows to edit configuration without graphical interface, this script is called <c0>lmConfigEditor</c0> and is stored in the bin/ LemonLDAP::NG directory, for example /usr/share/lemonldap-ng/bin: LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme <c0>lmConfigEditor</c0> et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin : LemonLDAP::NG provides a proxy that can replace the use of Apache mod_proxy. LemonLDAP::NG fournit un proxy qui peut remplacer l'utilisation de mod_proxy d'Apache. LemonLDAP::NG provides a script to change configuration backend easily keeping history. LemonLDAP::NG fournit un script pour changer aisément de backend de configuration en conservant l'historique. LemonLDAP::NG provides these packages: LemonLDAP::NG fournit ces paquets : LemonLDAP::NG ships 3 Apache configuration files: LemonLDAP::NG fournit 3 fichiers de configuration Apache : LemonLDAP::NG used as <a0>CAS</a0> server. LemonLDAP::NG utilisé comme serveur <a0>CAS</a0>. LemonLDAP::NG uses Safe jail to evaluate all expressions: LemonLDAP::NG utilise une cage sécurisée pour évaluer toutes les expressions : LemonLDAP::NG wiki uses Dokuwiki! Le wiki LemonLDAP::NG est un Dokuwiki ! LemonLDAP::NG will do some checks on configuration and display errors and warnings if any. LemonLDAP::NG effectue ensuite quelques tests sur la configuration et affiche les éventuelles erreurs et avertissements. Lemonldap-ng.ini parameters Paramètres lemonldap-ng.ini Lemonldap::NG can be used to prompt users with a message. Lemonldap::NG peut être utilisé pour notifier des messages aux utilisateurs. Lemonldap::NG developer must have a account on OW2 plateform, and could authenticate themself via <a0>SSH</a0> 2 by using the following one: Les développeurs Lemonldap::NG doivent posséder un compte sur la plateforme OW2 et peuvent l'utiliser via <a0>SSH</a0> 2 en utilisant la commande suivante : Lemonldap::NG handlers use a local cache to store sessions (for 10 minutes). Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). Lemonldap::NG is designed to be very performant. Lemonldap::NG a été conçu pour être très performant. Lemonldap::NG manage applications by their hostname (Apache's virtualHosts). Lemonldap::NG gère les applications par leurs noms d'hôtes(hôtes virtuels d'Apache). Lemonldap::NG provides 2 <a0>SOAP</a0> servers : Lemonldap::NG fournit 2 serveurs <a0>SOAP</a0> : Lemonldap::NG::Common Lemonldap::NG::Common Lemonldap::NG::Handler Lemonldap::NG::Handler Lemonldap::NG::Handler::<a0>CGI</a0> adds some functions to <a1>CGI</a1>: Lemonldap::NG::Handler::CGI ajoute quelques fonctions à <a1>CGI</a1>: Lemonldap::NG::Handler::SharedConf: No cookie found Lemonldap::NG::Handler::SharedConf: No cookie found Lemonldap::NG::Manager Lemonldap::NG::Manager Lemonldap::NG::Portal Lemonldap::NG::Portal Lemonldap::NG::Portal::SharedConf->compile( Lemonldap::NG::Portal::SharedConf->compile( Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. Let's go On y va Liferay Liferay Liferay administration Administration Liferay Liferay can use <a0>LL::NG</a0> as an <a1>SSO</a1> provider but you have to manage how users are created: Liferay peut utiliser <a0>LL::NG</a0> comme fournisseur <a1>SSO</a1> mais il faut gérer la création des comptes utilisateurs : Liferay virtual host in Apache Hôte virtuel Liferay dans le manager Liferay virtual host in Manager Hôte virtuel Liferay dans le manager Lightweight Directory Access Protocol Lightweight Directory Access Protocol LimeSurvey LimeSurvey LimeSurvey configuration Configuration de LimeSurvey LimeSurvey has a webserver authentication mode that allows to integrate it directly into LemonLDAP::NG. LimeSurvey dispose d'un mode d'authentification par serveur web qui permet de l'integrer directement dans LemonLDAP::NG. LimeSurvey virtual host in Apache Hôte virtuel LimeSurvey dans Apache LimeSurvey virtual host in Manager Hôte virtuel LimeSurvey dans le manager LinShare LinShare Link Apache configuration Lier la configuration d'Apache Links Links Linux Tag Linux Tag Linux Tag 2009 Linux Tag 2009 LinuxFR LinuxFR Little effort is required to translate the encoded string back into the user name and password, and many popular security tools will decode the strings “on the fly”. Un petit effort est requis pour décoder ces chaînes et de nombreux outils de sécurité les décodent à la volée. Load <s0>“Lemonldap::NG::Common::<a1>CGI</a1> qw(fastcgi)“</s0> before any other <a2>LL::NG</a2> library Charger <s0>“Lemonldap::NG::Common::<a1>CGI</a1> qw(fastcgi)“</s0> avant toute autre librairie <a2>LL::NG</a2> Load Handler in Apache memory: Charger l'agent dans la mémoire d'Apache : Local cache Cache local Local cache parameters Paramètres du cache local Local documentation is open to all: La documentation locale est ouverte à tous : Local file Fichier local Local groups Groupes locaux Local macros Macros locales Local macros is a special feature of handler that permit to have macros useable localy only. Les macros locales sont une fonctionnalité spéciale des agents qui permettent d'avoir des macros utilisables localement seulement. Location Lieu Lock files are stored in another directory. Les fichiers verrous sont stockés dans un autre répertoire. LockDataSource LockDataSource LockDirectory LockDirectory LockPassword LockPassword LockUserName LockUserName Log with the dwho account and go on <a0>http://manager.example.com</a0> Connectez-vous avec le compte dwho sur <a0>http://manager.example.com</a0> Log4Perl compatibility Compatibilité Log4Perl Logging application access Trace des accès aux applications Logging portal access Trace des authentification Login login Login History Historique de connexion Login as administrator: Se connecter comme administrateur: Login history Historique de connexion Logout Déconnexion Logout forward Propagation de déconnexion Logout rule (for example logout_app_sso) Règle de déconnexion (par exemple logout_app_sso) Logout user from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ Logout user from current application and from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ Logout user from current application and redirect it to the menu Déconnecte l'utilisateur de l'application courante et le redirige vers le menu Logs Journaux Logs settings Journalisation Lyon Lyon M M MBConsulting MBConsulting MD5 MD5 MRTG configuration example: Exemple de configuration MRTG : MRTG monitoring Supervision MRTG Macros Macros Macros and groups Macros et groupes Macros and groups are calculated during authentication process by the portal: Les macros et les groupes sont calculées pendant le processus d'authentification par le portail : Macros and groups are stored in session database. Les macros et les groupes sont stockées dans la base de données des sessions. Magic authentication Authentification magique Mail Mail Mail From address Adresse source des messages Mail charset Table de caractères des mails Mail reset feature Fonctionnalité de réinitialisation de mot-de-passe Mail reset request timeout Délai maximal des requêtes de réinitialisation des mails Mail, Agenda, Groupware Mail, Agenda, Groupware Mailing lists Mailing lists Main <a0>DNS</a0> domain Domaine <a0>DNS</a0> principal Main <a0>external databases</a0> are: Les principales <a0>bases de données externes</a0> sont : Main Features Fonctionnalités principales Main LL::NG structure Système LL::NG principal Main components Composants principaux Main differences with mod_proxy: Principales différences avec mod_proxy : Main features Fonctionnalités principales Main internal databases are: Les principales bases de données internes sont : Main parameters Paramètres principaux Maintenance mode Mode maintenance Makes authentication optional, but authenticated users are seen as such (that is, user data are sent to the app through <a0>HTTP</a0> headers) Rendre l'authentification optionnelle, mais les utilisateurs authentifiés sont vus comme tel (ce qui signifie que les données utilisateurs sont envoyées via les en-têtes <a0>HTTP</a0>) Manage virtual hosts Gérer les hôtes virtuels Manager Manager Manager (configuration management) Manager (gestion de la configuration) Manager (sessions explorer) Manager (explorateur de sessions) Manager menu organization Organisation du menu du manager Manager protection Protection du manager Manager skin Thème du manager Manager theme Thème du manager Manager translation Traduction du manager Manager tree JQuery <a0>CSS</a0> file Fichier <a0>CSS</a0> de l'arbre JQuery du manager Manager tree autoClose Auto-fermeture de l'arbre du manager Manager virtual host is used to serve configuration interface and local documentation. L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. Manual download Téléchargement manuel Many <a0>SSO</a0>-ready applications (<a1>OBM</a1>, <a2>Bugzilla</a2>, <a3>Dokuwiki</a3>, etc.) De nombreuses applications déjà prêtes pour le <a0>SSO</a0> (<a1>OBM</a1>, <a2>Bugzilla</a2>, <a3>Dokuwiki</a3>, etc.) Many private firms use it too. De nombreuses sociétés privées l'utilisent également. MediWiki local configuration Configuration locale MediaWiki MediaWiki MediaWiki MediaWiki virtual host in Apache Hôte virtuel Mediawiki dans le manager MediaWiki virtual host in Manager Hôte virtuel Mediawiki dans le manager Mediawiki Mediawiki Memcached Memcached Memcached servers Serveurs memcached Memcached session backend Backend de session Memcached Menu modules Modules du menu Menu modules activation rules les règles d'activation des modules du menu Menu modules display Affichage des modules du menu Menu organization: tree or accordion L'organisation du menu : arbre ou accordéon Menu style preferences are stored in cookies (1 year duration). Les préférences du menu sont stockées dans des cookies (valables 1 an). Metadata Métadata Mini howtos Mini howtos Ministère de la Justice Ministère de la Justice Mod <a0>Perl</a0> <s1>must</s1> be loaded before <a2>LL::NG</a2> Apache configuration. Mod <a0>Perl</a0> <s1>doit</s1> être chargé avant la configuration Apache de <a2>LL::NG</a2>. Mod <a0>Perl</a0> must be loaded before LemonLDAP::NG, so include configuration after the mod_perl <c1>LoadModule</c1> directive. Mod <a0>Perl</a0> doit être chargé avant LemonLDAP::NG, donc les inclusions aprèsla directive <c1>LoadModule</c1> de mod_perl. Modify LemonLDAP::NG Portal <a0>URL</a0> trough Manager to: <a1>http://auth.example.com/kerberos.pl</a1> Modifier l'<a0>URL</a0> du portail LemonLDAP::NG via le manager à la valeur : <a1>http://auth.example.com/kerberos.pl</a1> Modify Manager protection Modifier la protection du manager Modify password if asked Modifie le mot-de-passe si demandé Modify the Apache virtual host to separate the Kerberos Authentication module: Modifier l'hôte virtuel Apache pour séparer le module d'authentification Kerberos : Modify the portal virtual host: Modifier l'hôte virtuel du portail : Modules Modules Montreal Montréal More information about Safe on <a0>CPAN</a0> Plus d'information sur Safe sur le <a0>CPAN</a0> More than one server can be set here separated by spaces or commas. Plusieurs serveurs peuvent être renseignés séparés par des virgules ou espaces. Most of configuration can be done trough LemonLDAP::NG Manager (by default <a0>http://manager.example.com</a0>). La majeure partie de la configuration peut être réalisée via le manager LemonLDAP::NG (par défaut <a0>http://manager.example.com</a0>). Most of the time, <a0>SOAP</a0> session backend is used by Handlers installed on external servers. Dans la plupart des cas, le backend de session <a0>SOAP</a0> est utilisé par des agents installés sur des serveurs externes. Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Mounir GZADY Mounir GZADY Mpm-worker works faster and LemonLDAP::NG use the thread system for best performance. Mpm-worker est plus rapide et LemonLDAP::NG utilise le système de threads pour de meilleures performances. Multi CAS;LDAP Multi CAS;LDAP Multi LDAP#Openldap; LDAP#ActiveDirectory Multi LDAP#Openldap; LDAP#ActiveDirectory Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' Multi SSL;LDAP Multi SSL;LDAP Multi modules display Affichage des modules de Multi Multi overridden parameters Paramètres surchargés pour "Multi" Multi values separator Séparateur des multiples valeurs Multiple and Choice (modules stacking) Multiple et Choice (empilement d'autres modules) Multipurpose Internet Mail Extension Multipurpose Internet Mail Extension Must be secured by network access control. Doit être securisé par un contrôle d'accès réseau. MySQL MySQL MySQL example (suppose that our servers are in 10.0.0.0/24 network): Exemple MySQL (on suppose que les serveurs sont sur le réseau 10.0.0.0/24): N N NTLM NTLM Name Nom Name of IDP used for authentication Nom de l'IDP utilisé pour l'authentification Name of the cookie Nom du cookie Name: <c0>Auth-Name</c0> Nom: <c0>Auth-Name</c0> Name: <c0>Auth-User</c0> Nom : <c0>Auth-User</c0> NameID formats Formats de NameID Nantes Nantes Nb protected applications Nb d'applications protégées Nb users Nb d'utilisateurs Net::<a0>LDAP</a0> Net::<a0>LDAP</a0> Net::<a0>SMTP</a0> Net::<a0>SMTP</a0> Net::OpenID::Consumer > 1.00 Net::OpenID::Consumer > 1.00 Net::OpenID::Server > 1.00 Net::OpenID::Server > 1.00 Net::Twitter Net::Twitter New Service Provider Nouveau fournisseur de service New code: Nouveau code: New notifications can be insert using <a0>SOAP</a0> request (described in the WSDL file generated by buildPortalWSDL tool). Les nouvelles notifications peuvent être insérées en utilisant des requêtes <a0>SOAP</a0> (décrites dans le fichier WSDL généré par l'utilitaire buildPortalWSDL). Next create the configuration branch where you want. Créer ensuite la branche des configurations n'importe où. Next run ant command: Lancer ensuite la commande ant : Next, configure SOAP for your remote servers Ensuite, configurer SOAP pour les serveurs distants Next, you have to configure the <a0>SOAP</a0> access as described <a1>here</a1> since <a2>SOAP</a2> access is denied by default. Ensuite, il faut configure l'accès <a0>SOAP</a0> tel que décrit <a1>ici</a1> car l'accès <a2>SOAP</a2> est refusé par défaut. Nick name Nick name No <a0>IRC</a0> client? Pas de client <a0>IRC</a0> ? No <a0>headers</a0> are required. Aucun <a0>en-tête</a0> n'est nécessaire. No configuration found No configuration found No headers are needed. Aucun en-tête n'est nécessaire. No parameters needed. Aucun paramètres n'est requis. NoSQL (Redis) NoSQL (Redis) Not shareable between servers except if used in conjunction with <a0>SOAP configuration backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). Not shareable between servers except if used in conjunction with <a0>SOAP session backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). Note that <a0>SAML</a0> protocol is more secured than OpenID, so when your partners are known, prefer <a1>SAML</a1>. Noter que le protocole <a0>SAML</a0> est plus securisé que OpenID, ainsi si les partenaires sont connus, preférer <a1>SAML</a1>. Note that <a0>SOAP</a0> is not a real configuration backend, but just a proxy system to access to your configuration over the network NB : <a0>SOAP</a0> n'est pas réellement un backend de configuration, mais simplement un système mandataire pour accéder à la configuration au travers du réseau Note that Apache::Session::Browseable::MySQL doesn't use MySQL locks. Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL. Note that all <a0>LL::NG</a0> components must have access : Tous les composants de <a0>LL::NG</a0> doivent avoir accès : Note that groups are computed after macros, so a group rule may involve a macro value. Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro. Note that if the user is already authenticated on the first portal, all redirections are transparent. Noter que si l'utilisateur est déjà authentifié sur le premier portail, toutes les redirections sont transparentes. Note that if you use FastCGI, you must restart Apache to enable changes. Noter que si on utilise FastCGI, il faut redémarrer Apache pour activer les changements. Note that since <a0>HTTP</a0> protocol is not connected, restrictions are not applied to the new session: the oldest are destroyed. NB : comme le protocole <a0>HTTP</a0> n'est pas connecté, les restrictions ne sont pas appliquées à la nouvelle session : les anciennes sont détruites. Note that this feature is interesting only for the Lemonldap::NG systems protecting a high number of applications Notez que cette fonctionnalité n'est intéressante que pour les systèmes Lemonldap::NG protégeant un grand nombre d'applications Note that variables designed by $xx correspond to the name of the <a0>exported variables</a0> or <a1>macro names</a1>. Noter que les variables designées par $xx correspondent au nom de <a0>variables exportées</a0> ou de <a1>noms de macro</a1>. Note that you have to use UTF-8 characters Notez que vous devez utiliser des caractères UTF-8 Notification activation Activation des notifications Notification backend Module de stockage des notifications Notification backend options Options du module de stockage des notifications Notification delete function: Fonction d'effacement de notification : Notification format Format des notifications Notification send function (index.pl/notification): Fonction d'envoi de notifications (index.pl/notification): Notification uid for all users Nom de compte de notification pour tous les utilisateurs Notifications Notifications Notifications are <a0>XML</a0> files containing: Les notifications sont des fichiers <a0>XML</a0> contenant : Notifications system Systèmes de notification Notifications trough SOAP Notifications via SOAP Nov 2011: <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> Nov 2011 : <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> Nov 2011: <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> Nov 2011 : <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> Now configure all <a0>SAML</a0> parameters: Puis configurer tous les paramètres <a0>SAML</a0> : Now imagine the following DIT: On suppose le schéma suivant : Now ldapgroups contains “admin su” Maintenant, ldapgroups contient “admin su” Now the protected application can read in the header <a0>HTTP</a0>_AUTH_ROLES the role of the user. Maintenant, l'application protégée peut lire le rôle de l'utilisateur dans l'en-tête HTTP_AUTH_ROLES. Now we have to send the right role to the right application trough LemonLDAP::NG. Il faut maintenant envoyer le bon rôle à la bonne application via LemonLDAP::NG. Now we have to send to right role to the right application trough LemonLDAP::NG. Il faut maintenant envoyer le bon rôle à la bonne application via LemonLDAP::NG. Now we will add Google Apps as a new <a0>SAML</a0> Service Provider: Ajouter ensuite Google Apps comme nouveau fournisseur de service <a0>SAML</a0> : Now you have access to the IDP parameters list: Il est ensuite possible d'accéder à la liste des paramètre de l'IDP : Now you have access to the SP parameters list. Il est ensuite possible d'accéder à la liste des paramètre du SP : Now, to keep this behavior, you have to use <a0>SSL</a0> and <a1>LDAP</a1> chaining in a <a2>Multi</a2> configuration: Désormais, pour conserver ce comportement, il faut chaîner <a0>SSL</a0> et <a1>LDAP</a1> dans une configuration <a2>Multi</a2> : Null Null Null authentication level Niveau d'authentification de Null O O OBM OBM OBM Apache configuration must be loaded <s0>after</s0> <a1>LL::NG</a1> <a2>Apache configuration</a2>. La configuration du serveur Apache d'OBM doit être chargée <s0>après</s0> <a2>celle</a2> de <a1>LL::NG</a1>. OBM includes Groupware, messaging server, CRM, <a1>LDAP</a1>, Windows Domain, smartphone and <a2>PDA</a2> synchronization… OBM inclut un groupware, un serveur de messagerie, un CRM, un annuaire <a1>LDAP</a1>, un domaine Windows, un dispositif de synchronisation pour smartphone et <a2>PDA</a2>… OBM is shipped with a <a0>LL::NG</a0> plugin with these features: OBM est livré avec un composant <a0>LL::NG</a0> apportant les fonctionnalités suivantes : OBM, RoundCube, Sympa, MediaWiki,… OBM, RoundCube, Sympa, MediaWiki,… OBM_GIVENNAME OBM_GIVENNAME OBM_GROUPS OBM_GROUPS OBM_MAIL OBM_MAIL OBM_UID OBM_UID OBM_USERPASSWORD OBM_USERPASSWORD OID prefix Préfixe OID OW2 Con OW2 Con OW2 annual conference Conférence annuelle OW2 Of course, integration will be full if you use the <a0>LDAP</a0> directory as users backend for <a1>LL::NG</a1> and Liferay. Bien sûr, l'integration est complète si le serveur <a0>LDAP</a0> est utilisé comme base de données des utilisateurs dans <a1>LL::NG</a1> et Liferay. Of course, standard <a0>LDAP</a0> attributes can be used to store these data, but <a1>LL::NG</a1> also provides an <a2>LDAP</a2> schema extension to manage them. Bien sûr, les attributs <a0>LDAP</a0> standard peuvent être utilisés pour stocker ces données, mais <a1>LL::NG</a1> fournit aussi une extension de schéma <a2>LDAP</a2> pour les gérer. Of course, you need to <a0>store password in session</a0> to fill <a1>PHP</a1>_AUTH_PW. Bien sûr, il faut <a0>stocker le mot-de-passe dans la session</a0> pour renseigner <a1>PHP</a1>_AUTH_PW. Official repository Dépôt officiel Offline Hors ligne Offline 0.1 Hors-ligne 0.1 Often the redirection takes some time because it is user's first access to the protected app, so a new app session has to be created : JavaScript redirection improves user experience by informing that authentication is performed, and by preventing from clicking again on the button because it is too slow. Souvent la redirection prend du temps car c'est le premier accès de l'utilisateur à l'application protégée et il faut créer la session applicative ; la redirection JavaScript améliore le ressenti utilisateur en l'informant que l'authentification est réussie et en évitant qu'il clique de nouveau sur le bouton. Ohloh Ohloh Ohloh statistics Statistiques Ohloh Old sessions are deleted by a cron script. Les anciennes sessions sont effacées par un script cron. Older versions Versions précédentes Oliver BOIREAU Oliver BOIREAU On CentOS/RHEL: Sur CentOS/RHEL : On Debian/Ubuntu: Sur Debian/Ubuntu : On your main server, configure a <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> backend Sur le serveur principal, configurer un backend <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> One line code to integrate in Java, <a0>PHP</a0>, .Net, <a1>Perl</a1>, Ruby, Python, … Un code d'une ligne pour intégrer le SSO dans Java, <a0>PHP</a0>, .Net, <a1>Perl</a1>, Ruby, Python, … One notification <a0>XML</a0> document can contain several notifications messages. Un document <a0>XML</a0> de notification peut contenir plusieurs messages de notification. One of this module can be used to delegate authentication server to the web server: <a3>Webserver Auth</a3>. Un de ces modules peut être utilisé pour déléguer l'authentification à un serveur web : <a3>Webserver Auth</a3>. One or more roles (to send to the protected applications) Un ou plusieurs rôles (à envoyer aux applications protégées) One remote portal that delegates authentication to the second organization (just an other file on the same server) Un portail distant qui délègue l'authentification à la seconde organisation (juste un autre fichier sur le même serveur) One standard portal Un portail standard One user tries to access to the portal Un utilisateur tente d'accéder au portail Only current application is concerned by logout_app* targets. Seule l'application est concernée par les cibles logout_app*. Only the condition is not mandatory. Seule la condition n'est pas exigée. Only the handler need mod_perl 2. Seul l'agent nécessite mod_perl 2. Only with UserDB <a0>LDAP</a0>. Seulement avec une base utilisateurs <a0>LDAP</a0>. Open SSO session Ouvrez une session SSO Open links in new window Ouvre les liens dans une nouvelle fenêtre OpenID OpenID OpenID allowed domains Domaines autorisés pour OpenID OpenID authentication can proposed as an alternate authentication scheme using the <a0>authentication choice</a0> method. L'authentification OpenID peut être proposée en choix alternatif en utilisant la méthode d'authentification <a0>choice</a0>. OpenID authentication level Niveau d'authentification d'OpenID OpenID identity provider Fournisseur d'identité OpenID OpenID secret token Secret OpenID OpenID server Serveur OpenID OpenLDAP schema Schéma OpenLDAP Opening conditions Conditions d'ouverture Operating System Système d'exploitation Option <c0>–enctypes</c0> requires msktutil > 0.4 L'option <c0>–enctypes</c0> requiert msktutil > 0.4 Optional attributes: Attributs optionnels : Options Options Options: redirection port and protocol Des options : port de redirection et protocole Oracle Oracle Order of categories in the menu Ordre des catégories dans le menu Order your rules Ordonner les règles Organization Organisation Other Autres Other NameID formats are automatically managed: Les autres formats de NameID sont automatiquement gérés : Other components needs just a read access. Les autres composants n'ont besoin que d'un accès en lecture. Other modules must be installed only if you planned to use the related feature. Les autres modules ne doivent être installés que s'il est prévu d'utiliser les fonctionnalités associées. Other parameters Autres paramètres Outlook Web Access, … Outlook Web Access, … Overloading is not available trough the manager La surcharge n'est pas paramètrable dans le manager Override logging functions Surcharger les fonctions de journalisation P P PHP PHP POD unit tests Tests unitaires POD POST data Données POST POST data <a0>URI</a0>: /process.php <a0>URI</a0> où envoyer les données : /process.php POST data: use form replay Des données POST : à utiliser pour répondre aux formulaires PRIMARY KEY (cfgNum,field) PRIMARY KEY (cfgNum,field) Package GPG signature Signature GPG des paquets Packages and archives Paquets et archives Packages are available on the <a0>Download page</a0>. Les paquets sont disponibles sur la <a0>page de téléchargement</a0>. Packages from <a0>Debian repository</a0> may not be up to date. Les paquets du <a0>dépôt Debian</a0> peuvent ne pas être à jour. Packages should be available soon. Les paquets seront disponible d'ici peu. Pages where this menu is displayed can be restricted, for example: Les pages où ce menu est affiché peuvent être restreintes, par exemple : Parameter list Liste des paramètres Parameter redirections Paramètrer les redirections Parameters for <a0>DBI</a0> backend are the same as <a1>DBI configuration backend</a1>. Les paramètres pour le backend <a0>DBI</a0> sont les mêmes que ceux du <a1>backend de configuration DBI</a1>. Parameters for <a0>LDAP</a0> backend are the same as <a1>LDAP configuration backend</a1>. Les paramètres pour le backend <a0>LDAP</a0> sont les mêmes que ceux du <a1>backend de configuration LDAP</a1>. Parameters for File backend are the same as <a0>File configuration backend</a0>. Les paramètres pour le backend File sont les mêmes que ceux du <a0>backend de configuration File</a0>. Parameters: Paramètres: Paris Paris Pascal PEJAC Pascal PEJAC Password Mot-de-passe Password -> ... Password -> ... Password backend Module de gestion de mots-de-passe Password change form Formulaire de changement de mots-de-passe Password change form (in menu) Formulaire de changement de mot-de-passe (dans le menu) Password found from login process (only if <a0>password store in session</a0> is configured) Mot-de-passe fournit lors du processus d'authentification (seulement si le <a0>stockage du mot-de-passe dans la sessions</a0> est configuré) Password is not a common attribute. Le mot-de-passe n'est pas un attribut commun. Password module Module mots-de-passe Password policy Politique de mots-de-passe Password protected transport Transport protégé du mot-de-passe Password reset Réinitialisation de mots-de-passe Password reset by mail Réinitialisation de mots-de-passe par courriel Password: will not change any password Mots-de-passe : ne change aucun mot-de-passe Past and present contributors Contributeurs passé et présent Performances Performances Perl Perl Perl auto-protected CGI CGI aito-protégée Perl Perl-CAS module installation Installation du module Perl-CAS PerlHandler Lemonldap::NG::Handler::Proxy PerlHandler Lemonldap::NG::Handler::Proxy PerlHandler Lemonldap::NG::Handler::Proxy   PerlHandler Lemonldap::NG::Handler::Proxy   PerlHeaderParserHandler My::AuthBasic   PerlHeaderParserHandler My::AuthBasic   PerlHeaderParserHandler My::Package PerlHeaderParserHandler My::Package PerlHeaderParserHandler My::Package   PerlHeaderParserHandler My::Package   PerlHeaderParserHandler My::Package->refresh PerlHeaderParserHandler My::Package->refresh PerlHeaderParserHandler My::Package->status PerlHeaderParserHandler My::Package->status PerlHeaderParserHandler My::SecureToken   PerlHeaderParserHandler My::SecureToken   PerlHeaderParserHandler My::Sympa   PerlHeaderParserHandler My::Sympa   PerlHeaderParserHandler My::Zimbra   PerlHeaderParserHandler My::Zimbra   PerlInitHandler My::Handler PerlInitHandler My::Handler PerlModule Lemonldap::NG::Handler::Proxy PerlModule Lemonldap::NG::Handler::Proxy PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm PerlOptions +GlobalRequest PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm <<s0>VirtualHost</s0> *:443> PerlOptions +GlobalRequest PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm <<s0>VirtualHost</s0> *:443> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu PerlRequire __HANDLERDIR__/MyHandlerAuthBasic.pm PerlRequire __HANDLERDIR__/MyHandlerAuthBasic.pm PerlRequire __HANDLERDIR__/MyHandlerSecureToken.pm PerlRequire __HANDLERDIR__/MyHandlerSecureToken.pm PerlRequire __HANDLERDIR__/MyHandlerSympa.pm PerlRequire __HANDLERDIR__/MyHandlerSympa.pm PerlRequire __HANDLERDIR__/MyHandlerZimbra.pm PerlRequire __HANDLERDIR__/MyHandlerZimbra.pm PerlResponseHandler ModPerl::Registry PerlResponseHandler ModPerl::Registry PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com PerlSetVar LmProxyPass http://APPLICATION/ PerlSetVar LmProxyPass http://APPLICATION/ PerlSetVar LmProxyPass http://www.private.com/ PerlSetVar LmProxyPass http://www.private.com/ Persistent Session backend Backend des sessions persistantes Persistent Session backend options Options du backend des sessions persistantes Personal Digital Assistant Assistant personnel numérique Please always try to find another solution to protect your application with <a0>LL::NG</a0>. Il est en général préférable de trouver une autre solution pour protéger les applications avec <a0>LL::NG</a0>. Please refer to Liferay documentation to enable <a1>LDAP</a1> provisionning. Se reporter à la documentation Liferay pour activer l'alimentation <a1>LDAP</a1>. Please see the next chapter to learn how build an official tarball from SVN files. Voir le chapître suivant pour savoir comment construire une archive officielle depuis les fichiers SVN. Please use lmMigrateConfFiles2ini to migrate your menu configuration Please use lmMigrateConfFiles2ini to migrate your menu configuration Port Port Portal Portail Portal (dark theme) Portail (thème dark) Portal (impact theme) Portail (thème impact) Portal (pastel theme) Portail (thème pastel) Portal <a0>URL</a0> <a0>URL</a0> du portail Portal <a0>URL</a0> is the address used to redirect users on the authentication portal by: L'<a0>URL</a0> du portail est l'adresse utilisée pour rediriger les utilisateurs bers le portail d'authentification par : Portal Redirections Redirections du portail Portal SOAP services Services SOAP du portail Portal URL URL du portail Portal and Manager skins have not evolved a lot since 1.0, so 1.0 screenshots are still up to date. Les thèmes du portail et du manager n'ont pas beaucoup évolué depuis la version 1.0, donc les captures d'écran 1.0 restent valables. Portal checks authentication Le portail examine les données d'authentification Portal creates <a0>SSO cookies</a0> with session key as value Le portail crée le <a0>cookie SSO</a0> avec la clef de la session comme valeur Portal creates a session to store user data Le portail crée une session et y stocke les données Portal customization Personnalisation du portail Portal destroys session and redirects user on itself with an empty <a0>SSO cookies</a0> Le portail détruit la session et redirige l'utilisateur sur lui-même avec un <a0>cookie SSO</a0> vide Portal does not store any data outside the session database, so you can have many portal servers using the same <a0>HTTP</a0> host name Le portail ne stocke aucune donnée en dehors de la base de données des sessions, ainsi on peut avoir plusieurs serveurs utilisant le même nom d'hôte <a0>HTTP</a0> Portal gets the session key Le portail récupère la clef de session Portal host must be configured to use <a0>SSL</a0> and must ask for client certificate. L'hôte du portail doit être configuré pour utiliser <a0>SSL</a0> et doit demander un certificat client. Portal menu Menu du portail Portal performances Performances du portail Portal produce a <c0>notice</c0> message in <a1>Apache logs or syslog</a1> when a user authenticates (or fails to authenticate) and logs out. Le portail génère un message de niveau <c0>notice</c0> <a1>dans les journaux d'Apache ou dans syslog</a1> lorsqu'un utilisateur d'authentifie (ou échoue) ou se déconnecte. Portal provides also many other features (see <a5>portal</a5> for more) Le portail fournit également de nombreux autres services (voir <a5>portail</a5> pour plus d'informations) Portal recognizes the user with its <a0>SSO cookies</a0>, and see he is coming from a different domain Le portail reconnaît l'utilisateur par son <a0>cookie SSO</a0> et voit qu'il sollicite une application d'un domaine différent Portal redirects user on protected application with his session ID as <a0>URL</a0> parameter Portal redirige l'utilisateur vers l'application demandée avec son identifiant de session en paramètre de l'<a0>URL</a0> Portal translation Traduction du portail PostGreSQL PostGreSQL Postal code Postal code PostgreSQL PostgreSQL Practical Extraction and Report Language Practical Extraction and Report Language Prefer then the other solutions (see below). Si c'est le cas, utiliser une autre solution (voir ci-dessous). Prepare database Préparer la base de données Prepare the LDAP server and the LL::NG configuration file Préparer le serveur LDAP et le fichier de configuration LL::NG Prepare the database Preparer la base de données Prepare the database and the LL::NG configuration file Preparer la base de donnée et le fichier de configuration LL::NG Prepare your new lemonldap-ng.ini file Preparer le nouveau lemonldap-ng.ini file Prerequisites Pré-requis Prerequisites and dependencies Pré-requis et dépendances Presentation Présentation Press Presse Project = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(where zz is your international code, example: “fr” for France)</e1> Projet = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> Project activity Activité du projet Protect only the administration pages Protéger seulement la page d'administration Protect the Manager Protéger le manager Protect the Manager by Apache Protéger le Manager par Apache Protect the Manager by LL::NG Protéger le manager par LL::NG Protect your application Protéger une application Protected application sends response to Handler L'application protégée renvoie sa réponse à l'agent Protected cookies Cookies protégés Protected sites: Sites protégés: Protection scheme Schéma de protection Protocol and port Protocole et port Provides identity if asked Fournit l'identitié si demandée Proxy Proxy Proxy Granting Ticket Proxy Granting Ticket Proxy LL::NG Proxy LL::NG Proxy backend to be used in conjunction with another configuration backend. Backend proxy à utiliser avec un autre backend de configuration. Proxy backend to be used in conjunction with another session backend. Backend proxy à utiliser avec un autre backend de sessions. Proxy cookie name Nom du cookie du proxy Proxy portal <a0>URL</a0> <a0>URL</a0> du portail mandataire Proxy session <a0>SOAP</a0> end point Point mandataire <a0>SOAP</a0> de sessions Proxy tickets will be collected at authentication phase and stored in user session under the form: Les tickets de proxy seront collectés lors de la phase d'authentification et stockés dans la session utilisateur sous la forme : Put LemonLDAP::NG tarball in %_topdir/SOURCES Mettre l'archive LemonLDAP::NG dans %_topdir/SOURCES Put all custom <a3>HTML</a3> code in the custom template files. Mettre tous les codes <a3>HTML</a3> personnalisés dans les fichiers modèles personnalisés. Put your own files instead of <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: Placer vos propres fichiers au lieu de <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: Python (Django) Python (Django) Q Q Quick start tutorial Tutoriel rapide R R RBAC model Modèle RBAC RDBI RDBI REMOTE_USER environment variable (with local Handler or SetEnvIf trick) la variable d'environnement REMOTE_USER (avec un agent local ou une conversion SetEnvIf) RHEL/CentOS 5 RHEL/CentOS 5 RHEL/CentOS 6 RHEL/CentOS 6 RHEL/CentOS/Fedora RHEL/CentOS/Fedora RHEL5 RPM bundle Paquets RPM RHEL5 RMLL RMLL RMLL/LSM RMLL/LSM RMLL/LSM 2009 RMLL/LSM 2009 RMLL/LSM 2010 RMLL/LSM 2010 RPM RPM RPM bundle Paquets RPM RPMs are available at <a0>http://repo.cyrus-project.org/centos$releasever-$basearch/RPMS.cyrus-extras/</a0> Les RPMs sont disponibles sur <a0>http://repo.cyrus-project.org/centos$releasever-$basearch/RPMS.cyrus-extras/</a0> RPMs are available on the <a0>Download page</a0>. Les paquets RPM sont disponibles sur la <a0>page de téléchargement</a0>. Radius Radius Radius authentication level Niveau d'authentification de Radius Radius secret Secret Radius Radius server Serveur Radius Read-only functions (index.pl/sessions or index.pl/adminSessions paths): Fonctions en lecture seule (chemins index.pl/sessions ou index.pl/adminSessions) : Read/Write functions (index.pl/adminSessions paths): Fonctions en lecture/écriture (chemin index.pl/adminSessions) : Real name Real name Real session backend Backend de session réel Real session backend will be configured in <c0>lemonldap-ng.ini</c0>, in <c1>portal</c1> section (the portal hosts the <a2>SOAP</a2> service for sessions, and will do the link between <a3>SOAP</a3> requests and real sessions). Le backend de session réel est configuré dans <c0>lemonldap-ng.ini</c0> dans la section <c1>portal</c1> (le portail héberge le service <a2>SOAP</a2> de sessions et fera le lien entre les requêtes <a3>SOAP</a3> et les sessions réelles). Recursive groups Groupes récursif Redirect user to the asked <a0>URL</a0> or display menu Redirige l'utilisateur vers l'<a0>URL</a0> demandée ou affiche le menu Redirection to the portal of the main area and normal authentication (if not done before) Redirection vers le portail principal et authentification normale (sauf si déjà faite) Redirection to the portal of the secondary area (transparent) Redirection vers le portail secondaire (transparent) Redirection to the remote type portal Redirection vers le portail de type remote Redis server Serveur Redis Redis session backend Module de stockage des sessions Redis References Références References are listed in alphabetic order. Les références sont listées dans l'ordre alphabétique. Regexp::Assemble Regexp::Assemble Register LemonLDAP::NG on partner Identity Provider Enregistrer LemonLDAP::NG dans le fournisseur d'identité partenaire Register LemonLDAP::NG on partner Service Provider Enregistrer LemonLDAP::NG sur le fournisseur de service partenaire Register partner Identity Provider on LemonLDAP::NG Enregistrer le fournisseur d'identité partenaire dans LemonLDAP::NG Register partner Service Provider on LemonLDAP::NG Enregistrer le fournisseur de service dans LemonLDAP::NG Register what module was used for authentication, user data, password, … Enregistre les modules utilisés pour l'authentification, les données utilisateurs, les mots-de-passe, … Registered users on Google Apps with the same email than those used by <a0>LL::NG</a0> (email will be the NameID exchanged between Google Apps and <a1>LL::NG</a1>) Enregistrer les utilisateurs dans Google Apps avec la même adresse mail que celle utilisée dans <a0>LL::NG</a0> (l'adresse mail sera le NameID échangé entre Google Apps et <a1>LL::NG</a1>) Regular expression Expression régulière Regular expression for random password Expression rationnelle pour la génération aléatoire des mots-de-passe Reload the Manager to see the order that will be used Recharger le manager pour voir l'ordre dans lequel elles seront appliquées Reload virtual host Recharger l'hôte virtuel Reload virtual host: Hôte virtuel pour le rechargement : Remember that rules written on GET parameters must be tested. Rappel : les règles poratnt sur des paramètres GET doivent être testées. Remember to change the access rule in Manager virtual host to allow new administrators. Ne pas oublier de changer la règle d'accès à l'hôte virtuel du manager pour autoriser les nouveaux administrateurs. Remote Remote Remote LL::NG LL::NG distant Remote Session backend Backend de sessions distant Remote Session backend options Options du backend de sessions distant Remote cookie name Nom du cookie distant Remote portal Portail distant Remote user Utilisateur pour Apache Remove Apache access control: Supprimer le contrôle d'accès Apache : Replace MySQL by Apache::Session::Flex Remplacer MySQL par Apache::Session::Flex Replace all .htaccess based security Remplace les systèmes de sécurité basé sur les .htaccess Reply address Adresse de réponse Reporting a bug Rapporter un bogue Require old password (change) Impose la présentation de l'ancien mot-de-passe dans les changements Required : Requis : Required attributes: Attibuts requis : Required for PostgreSQL Requis pour PostgreSQL Required parameters Paramètres exigés Reset password by mail Réinitialisation des mots-de-passe par courriel Reset password by mail (self service) Réinitialiser les mots-de-passe par mail (self-service) Reset password on next logon workflow Réinitialisation du mot-de-passe à la connexion suivante Response Location should be empty, as <a0>SOAP</a0> responses are directly returned (synchronous binding). Le point d'accès des réponses peut être vide car les réponses <a0>SOAP</a0> sont directement retournées (connexions synchrones). Restart Apache Redémarrer Apache Restart Apache and try to log on Manager. Redémarrer Apache et tenter de se connecter au manager. Restart Apache to purge it. Redémarrer Apache pour le purger. Restart Apache: Redémarrez Apache: Restart all your Apache servers Redémarrer tous vos serveurs Apache Restart all your remote Apache servers Redémarrer tous les serveurs Apache distants Restart fail2ban Redémarrer fail2ban Restrict /admin to administrators group Restreint /admin au groupe des administrateurs Restrict /admin/ directory to user bart.simpson Restreindre le répertoire /admin/ à l'utilisateur bart.simpson Restrict /js/ and /css/ directory to authenticated users Restreindre les répertoires /js/ et /css/ aux utilisateurs authentifiés Restrict access to the directories only to the Apache server. Restreindre l'accès à ces répertoires au seul utilisateur Apache. Restrict access to the whole site to users that have the <a0>LDAP</a0> description field set to “<a1>LDAP</a1> administrator” (must be set in exported variables) Restreindre l'accès à tout le site aux utilisateurs dont le champ description <a0>LDAP</a0> contient “<a1>LDAP</a1> administrator” (doit être déclaré dans les variables exportées) Restrict network access to the <a0>LDAP</a0> directory, and add specific <a1>ACL</a1> to session branch. Restreindre l'accès réseau à l'annuaire <a0>LDAP</a0> et ajouter une <a1>ACL</a1> spécifique à la branche des sessions. Restrict network access to the database. Restreindre l'accès réseau à la base de données. Restrict network access to the redis server. Restreignez l'accès réseau au serveur Redis. Returns cookie(s) name and values Retourne nom(s) et valeur(s) du(des) cookie(s) Reverse proxy Proxy inverse Roadmap Feuille de route Role Rôle Role Based Access Control (RBAC) Contrôle d'accès basé sur les rôles (RBAC) Roles are entries, below branches representing applications. Les rôles sont des entrées, les branches subordonnées représentant les applications. Roles as entries in the directory Rôles comme entrée d'annuaire Roles as simple values of a user attribute Rôles comme simple valeur d'attribut utilisateur Rule Règle Rule for session granting Règle pour l'autorisation d'ouverture de session Rule name Nom de la règle Rules Règles Rules are used to protect applications, headers are <a0>HTTP</a0> headers added to the request to give datas to the application (for logs, profiles,…). Les règles sont utilisées pour protéger les applications, les en-têtes sont des en-têtes <a0>HTTP</a0> ajoutés pour transmettre des données à l'application (pour les journaux, profils,…). Rules can also be used to intercept logout <a0>URL</a0>: Les règles peuvent également être utilisées pour intercepter les <a0>URL</a0> de déconnexion : Run Test Run this to update packages cache: Lancer ceci pour rafraîchir le cache : Région Basse-Normandie Région Basse-Normandie S S SAML SAML SAML / Shibboleth identity provider Fournisseur d'identité SAML / Shibboleth SAML 2.0 / Shibboleth SAML 2.0 / Shibboleth SAML Identity Provider Fournisseur d'identité SAML SAML Service Service SAML SAML connectors Connecteurs SAML SAML service configuration Configuration du service SAML SAML sessions module name and options Options et nom du module de sessions SAML SAML2 SAML2 SAML2 implementation is based on <a0>Lasso</a0>. L'implementation SAML est basée sur <a0>Lasso</a0>. SAP SAP SGS SGS SHA SHA SHA1 SHA1 SMTP / Reset password by mail SMTP / réinitialisation de mot-de-passe par courriel SMTPAuthPass SMTPAuthPass SMTPAuthUser SMTPAuthUser SMTPServer SMTPServer SOAP SOAP SOAP configuration backend Backend de configuration SOAP SOAP configuration backend proxy le proxy de backend de configuration SOAP SOAP proxy mechanism SOAP proxy mechanism SOAP services Services SOAP SOAP session backend Backend de sessions SOAP SQL SQL SQL configuration Configuration SQL SQL configuration backend (called RDBI or CDBI) Backend de configuration SQL (appelé RDBI ou CDBI) SQL configuration backends Backends de configuration SQL SQL session backend Backend de sessions SQL SSL SSL SSL authentication Authentification SSL SSL authentication backend Backend d'authentification SSL SSLAuthnLevel SSLAuthnLevel SSLCertificateKeyFile ... SSLCertificateKeyFile ... SSLLDAPField SSLLDAPField SSLRequire SSLRequire SSLVar SSLVar SSLVerifyClient optional_no_ca ... </VirtualHost> SSLVerifyClient optional_no_ca ... </VirtualHost> SSO cookie Cookie SSO SSOExtensions::function1 SSOExtensions::function1 SVN access Accès au dépôt SVN SVN activity Activité SVN SVN nightly builds Extraction nocturne du dépôt SVN Safe can be very annoying when we use <a0>extended functions</a0> or <a1>custom functions</a1>. Safe peut être très gênant lorsqu'on utilise les <a0>fonctions étendues</a0> ou les <a1>fonctions personnalisées</a1>. Safe jail Cage sécurisée Safe module is used to eval expressions in headers, rules, etc. Le module Safe est utilisé pour évaluer les expressions dans les en-têtes, règles, etc... Same with remote server configured with the same host name: La même chose avec le serveur distant configuré avec le même nom d'hôte : Save the configuration and exit the Manager. Sauver la configuration et quitter le manager. Schema Schéma Schema extension Extension de schéma Screenshots Captures d'écran Script files Fichiers de script Search user: select row in user table matching user Recherche de l'utilisateur : selectionne la ligne de la table utilisateurs correspondant à l'utilisateur Sebastien DIAZ Sebastien DIAZ Second step: get the role name for the application. Seconde étape : obtenir le rôle dans cette application. Secondary LL::NG structure Systèe LL::NG secondaire Secondary portal check if remote session is available. Le portail secondaire vérifie que la session distante est valable. Secure Shell Shell sécurisé (SSH) Secure Sockets Layer Secure Sockets Layer Secure Token Handler Agent jeton sécurisé Secure Token Memcached servers Serveurs Memcached pour le jeton sécurisé Secure Token allow requests in error Le jeton sécurisé autorise les requêtes en cas d'erreur Secure Token attribute Attribut du jeton sécurisé Secure Token expiration Expiration du jeton sécurisé Secure Token header En-tête du jeton sécurisé Secure Token protected URLs URL protégées du jeton sécurisé Secure configuration access Securiser l'accès à la configuration Secure reverse-proxies Securiser les proxies inverses Security Sécurité Security Assertion Markup Language Security Assertion Markup Language Security parameters Paramètres de sécurité Security recommendation Recommendation de sécurité Security with <a0>SSL</a0>/TLS Securité avec <a0>SSL</a0>/TLS See <a0>Apache::Session::Memcached</a0> for optional parameters. Voir <a0>Apache::Session::Memcached</a0> pour les paramètres optionnels. See <a0>Debian Lenny upgrade</a0>. Voir la <a0>mise à jour de Debian Lenny</a0>. See <a0>How to change configuration backend</a0> to known how to change this. Voir <a0>Comment changer le backend de configuration</a0>. See <a0>Manager protection documentation</a0> to know how to use Apache modules or <a1>LL::NG</a1> to manage access to Manager. Voir la <a0>documentation de protection du manager</a0> pour savoir comment utiliser les modules d'Apache ou <a1>LL::NG</a1> pour gérer l'accès au manager. See <a0>Redis session backend</a0>. Voir <a0>backend de session Redis</a0>. See <a0>SAML service</a0> configuration chapter. Voir le chapître de configuration du <a0>service SAML</a0>. See <a0>Writing rules and headers</a0> chapter. Voir le chapître <a0>Écrire les règles et en-têtes</a0>. See <a0>Writing rules and headers</a0> for more. Voir <a0>Écrire les règles et en-têtes</a0> pour plus d'informations. See <a0>Yubico API</a0> page. Voir la page <a0>Yubico API</a0>. See <a0>how configure logging in Tomcat</a0> . Voir <a0>how configure logging in Tomcat</a0> . See <a0>how to do this</a0> on Zimbra wiki. Voir <a0>comment le faire</a0> sur le wiki Zimbra. See <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> for more information. Voir <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> pour plus d'information. See <a0>https://developers.facebook.com/apps</a0> on how to do that. Voir <a0>https://developers.facebook.com/apps</a0> pour en savoir plus. See <a0>mod_proxy</a0> and <a1>mod_rewrite</a1> documentation for more about configuring Apache reverse-proxies. Voir les documentation de <a0>mod_proxy</a0> et <a1>mod_rewrite</a1> pour plus d'information sur la configuration du proxy inverse d'Apache. See <a0>performances</a0> to know how to use macros and groups in rules. Voir <a0>performances</a0> pour comprendre l'intérêt des macros et groupes dans les règles. See <a0>prerequisites and dependencies</a0> chapter for more. Voir le chapître <a0>pré-requis et dépendances</a0>. See <a0>translations</a0>. Voir <a0>traductions</a0>. See <a1>SOAP session backend</a1> documentation. Voir la documentation du <a1>backend SOAP</a1>. See <a2>Twitter FAQ</a2> on how to do that:. Reportez-vous à la <a2>FAQ Twitter</a2> pour en savoir plus. See <a2>how to change configuration backend</a2>. Voir <a2>comment changer de backend de configuration</a2>. See <s0><a1>Form replay</a1></s0> to learn how to configure form replay to POST data on protected applications. Voir <s0><a1>Rejeu des formulaires</a1></s0> pour savoir comment configurer le rejeu des formulaires pour poster des données à une applications protégée. See <s0><a1>Writing rules and headers</a1></s0> to learn how to configure access control and <a2>HTTP</a2> headers sent to application by <a3>LL::NG</a3>. Voir <s0><a1>Écrire des règles et des en-têtes</a1></s0> pour savoir comment configurer le contrôle d'accès et les en-têtes <a2>HTTP</a2> transmis à l'application par <a3>LL::NG</a3>. See <s0><a1>security chapter</a1></s0> to learn more about writing good rules. Voir le <s0><a1>chapître sécurité</a1></s0> pour apprendre comment écrire de bonnes règles. See also Voir aussi See also <a0>Debian/Ubuntu installation documentation</a0>. Voir aussi la <a0>documentation d'installation Debian/Ubuntu</a0>. See also <a0>general kinematics presentation</a0>. Voir aussi la <a0>présentation de la cinématique générale</a0>. See full parameters list Voir la liste complète des paramètres See the README to know how install and configure it. Voir le README pour l'installer et le configurer. See the following chapters: Voir les chapîtres suivants : See the full description of the protocol here: <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> Voir la description complète du protocole ici : <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> Select <c0>Metadata</c0>, and unprotect the field to paste the following value: Selectionner <c0>Metadata</c0>, et déprotéger le champ pour y mettre : Select the key, and export it (button <c0>Download this file</c0>): Selectionner la clef, et l'exporter (bouton <c0>Download this file</c0>): Selected by default during installation. Sélectionné par défaut lors de l'installation. Self service reset (send a mail to the user with a to change the password) Self-service de réinitialisation (envoie un mail à l'utilisateur pour changer son mot-de-passe) Send login in Auth-User: Envoi de l'identifiant dans Auth-User: Send mail on password change Envoyer des courriels lors des changements de mots-de-passe Send “Lastname, firstname” in Auth-Name: Envoi de “Lastname, firstname” dans Auth-Name: Servers Servers Service Provider Fournisseur de service Service configuration Configuration du service Service configuration will be used to generate <a0>LL::NG</a0> <a1>SAML</a1> metadata, that will be shared with other providers. La configuration du service est utilisée pour générer les métadatas <a1>SAML</a1> de <a0>LL::NG</a0>, qui sont partagées avec les autres fournisseurs. Session Session Session activity timeout requires Handlers to have a write access to sessions database. Le délai d'expiration des sessions nécessite que les agents aient un accès en écriture à la base des sessions. Session backend Module de stockage des sessions Session backend options Options du module de stockage des sessions Session expiration Expiration des sessions Session expiration: sessions will never expire (server side) Expiration des sessions : les sessions n'expirent jamais (du côté serveur) Session explorer Explorateur de sessions Session history is always visible in session explorer for administrators. L'historique des sessions est toujours visible dans l'explorateur de sessions pour les administrateurs. Session identifier (carried in cookie) Identifiant de session (porté par le cookie) Session key containing email address La clef de session contient l'adresse mail Session lifetime for cronjob Durée de vie des sessions pour la tâche planifiée Session opening Ouverture de session Session restrictions Resctriction d'ouverture de session Session-ID => $_session_id Session-ID => $_session_id Sessions Sessions Sessions <a0>SOAP</a0> end points access must be allowed in Apache portal configuration (for example, access by <a1>IP</a1> range): Les terminaisons <a0>SOAP</a0> des sessions doivent être autorisées dans la configuration Apache du portail (par exemple, accès par plage <a1>IP</a1>) : Sessions are deleted by a scheduled task. Les sessions sont effacées par des tâches planifiées. Sessions are stored as files in a single directory. Les sessions sont stockées dans des fichiers dans un unique répertoire. Sessions are stored using <a0>Apache::Session</a0> modules family. Les sessions sont stockées en utilisant les modules de la famille <a0>Apache::Session</a0>. Sessions database Base de données des sessions Sessions explorer Explorateur de sessions Sessions will be stored as <a0>LDAP</a0> entries, like this: Les sessions sont stockées dans des entrées <a0>LDAP</a0> comme suit : Set '*' to accept all. Mettre '*' pour tout accepter. Set <a0>SAML</a0> end points Indiquer les points d'entrées <a0>SAML</a0> Set <a0>SOAP</a0> parameter to true in the configuration using the manager: the portal will become a <a1>SOAP</a1> server Mettre le paramètre <a0>SOAP</a0> à "activé" dans la configuration en utilisant le manager : le portail devient un serveur <a1>SOAP</a1> Set <c0>Email</c0> in <c1>Options</c1> » <c2>Authentication Response</c2> » <c3>Default NameID format</c3> Mettre <c0>Email</c0> dans <c1>Options</c1> » <c2>Réponse d'authentification</c2> » <c3>Format NameID par défaut</c3> Set GoogleApps as Service Provider name. Mettre GoogleApps comme nom de fournisseur de service. Set exported variables Définir les variables exportées Setup Mise en marche Several IDPs are allowed, in this case the user will choose the IDP he wants. Plusieurs IDPs peuvent être autorisés, dans ce cas l'utilisateur peut choisir l'IDP qu'il souhaite. Several extensions allows to configure <a0>SSO</a0> on MediaWiki: Plusieurs extensions permettent de configurer le <a0>SSO</a0> dans MediaWiki : Shareable Partageable Shared attributes (SREG) Attributs partagés (SREG) Signature Signature Simple Mail Transfer Protocol Simple Mail Transfer Protocol Simple Object Access Protocol Simple Object Access Protocol Simple usage example: Exemple d'usage simple : Since 1.1.0, a notification explorer is available in Manager, and notifications can be done for all users, with the possibility to display conditions. Depuis la version 1.1.0, un explorateur de notifications est disponible dans le manager, et les notifications peuvent être faites pour tous les utilisateurs, avec possibilité d'affichage conditionnel. Since LemonLDAP::NG 1.2, the <a0>demonstration backend</a0> is configured by default. Depuis la version 1.2 de LemonLDAP::NG, le <a0>backend de démonstration</a0> est sélectionné par défaut. Since MySQL does not have always transaction feature, Apache::Session::MySQL has been designed to use MySQL locks. Comme MySQL ne dispose pas toujours de dispositif de transaction, Apache::Session::MySQL a été conçu en utilisant les verrous MySQL. Since MySQL performances are very bad using this, if you want to store sessions in a MySQL database, prefer one of the following Ceci dégrade fortement les performances de MySQL, si vous voulez stocker les sessions dans une base de données MySQL, utilisez l'une des solutions suivantes Since many <a0>HTTP</a0> servers refuse non ascii headers, it is recommended to use encode_base64() function to transmit those headers Comme la plupart des serveurs <a0>HTTP</a0> refusent les en-têtes non-ascii, il est recommandé d'utiliser la fonction encode_base64() pour transmettre ces en-têtes Since version 0.9.4, LemonLDAP::NG can be used to notify some messages to users: if a user has a message, the message will be displayed when he will access to the portal. Depuis la version 0.9.4, LemonLDAP::NG peut être utilisé pour notifier des messages aux utilisateurs : si un utilisateur a un message, celui-ci est affiché lorsqu'il accède au portail. Since version 1.90 of Apache::Session, you can use Apache::Session::MySQL::NoLock instead Depuis la version 1.90 d'Apache::Session, on peut utiliser Apache::Session::MySQL::NoLock à la place Single Logout Single Logout (SLO) Single Sign On Authentification unique (Single Sign On) Single Sign On cookie, domain and portal URL Cookie SSO, URL du portail et domaine Single Sign On for Web Applications Système d'authentification unique pour applications web Siteminder Authentication Siteminder Authentication Skin thème Skin customization Personnalisation du thème Skin files Fichiers thèmes Skin name Nom du thème Skin rules Règle du thème Slave Slave SlideShare SlideShare So <a0>HTTP</a0> Basic Autentication is managed trough an <a1>HTTP</a1> header (<c2>Authorization</c2>), that can be forged by <a3>LL::NG</a3>, with this precautions: Ainsi l'authentification basique <a0>HTTP</a0> est gérée par des en-têtes <a1>HTTP</a1> (<c2>Autorisation</c2>), qui peut être générée par <a3>LL::NG</a3>, avec les précautions suivantes : So Apache::Session module is not a problem for handlers. Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. So a simple user can have admin rights on the <a0>LDAP</a0> directory if your access rules are too lazy. Ainsi un simple utilisateur aura un accès administrateur au serveur <a0>LDAP</a0> si votre règle d'accès est trop permisive. So for Handler on different physical servers than the Portal, a user with an expired session can still be authorized still the cache expires. Ainsi pour les agents installés sur des serveurs physiquement différent de celui hébergeant le portail, un utilisateur dont la session a expiré peut toujours être autorisé jusqu'à expiration du cache. So he is “user” on application “BBB” and “admin” on application “<a0>AAA</a0>”. Ainsi, il est “user” sur l'application “BBB” et “admin” sur l'application “<a0>AAA</a0>”. So if the http cookie is stolen, sensitive applications stay secured. Ainsi, si le cookie http cookie est volé, les applications sensibles restent protégées. So instead of using <a0>LDAP</a0> groups recovery, you just have to store “memberOf” field in your exported variables. Ainsi au lieu d'utiliser la récupération des groupes <a0>LDAP</a0>, vous avez juste à stocker le champ “memberOf” dans vos variables exportées. So on each main portal, internal users can access normally, and users issued from the other organization have just to click on the link: Ainsi sur chacun des portails principaux, les utilisateurs internes peuvent accéder normalement et les utilisateurs de l'autre organisation n'ont qu'à cliquer sur le lien : So the above example can also be written like this: Ainsi l'exemple ci-dessous peut être écrit simplement : So to improve performances, avoid too complex rules by using the macro or the groups or local macros. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales. So write your rules using normal characters. Il faut donc écrire les règles en utilisant les caractères normaux. So you can configure it to authenticate users using a federation protocol and simultaneously to provide identities using other(s) federation protocols. Ainsi on peut le configurer pour authentifier les utilisateurs en utilisant un protocole de fédération et simultanément pour fournir les identités en en utilisant en autre. So you can have a full <a0>AAA</a0> protection for your web space as described below. Vous vouvez ainsi avoir une protection <a0>AAA</a0> complète pour votre espace web tel qu'indiqué ci-dessus. So you have just to declare this header for the virtual host in Manager. Il suffit donc de déclarer cet en-tête pour l'hôte virtuel dans le manager. So, if the user is not recognized or <a3>HTTP</a3> headers not present, a 403 error is sent. Donc, si l'utilisateur n'est pas reconnu ou si l'en-tête <a3>HTTP</a3> n'est pas présent, une erreur 403 est retournée. So, to keep user password in session, you cannot just export the password variable in session. Donc pour conserver le mot-de-passe utilisateur dans la session, on ne peut seulement exporter la variable mot-de-passe dans la session. Soap Soap Social Networks and News Réseaux sociaux et nouvelles Solution Linux 2009 Solution Linux 2009 Solution Linux 2010 Solution Linux 2010 Solutions Linux Solutions Linux Some <a0>Perl</a0> optimizations: Quelques optimisations <a0>Perl</a0> : Some Apache::Session module are not useable by Lemonldap::NG such as Apache::Session::Memcached since this module does not offer capability to browse sessions Certains modules Apache::Session ne sont pas utilisables par Lemonldap::NG tel Apache::Session::Memcached, car ce module n'offre pas de dispositif de parcours des sessions Some applications need the <c0>REMOTE_USER</c0> environment variable to get the connected user, which is not set in reverse-proxy mode. Certaines applications ont besoin de la variable d'environnement <c0>REMOTE_USER</c0> pour connaître le nom d'utilisateur connecté, qui n'est pas renseignée en mode reverse-proxy. Some applications using it Quelques applications l'utilisant Some articles published somewhere in the world wide web. Quelques articles publiés quelque part sur le web. Some can be mandatory, so if they are not returned by IDP, the session will not open. Certains peuvent être obligatoires, et s'ils ne sont pas retournés par l'IDP, la session n'est pas ouverte. Some characters are encoded in URLs by the browser (such as space,…). Certains caractères sont encodés dans les URLs par le navigateur (tels les espaces,…). Some examples: Quelques exemples: Some options are available: Quelques options sont disponibles : Some-Thing Some-Thing Sometimes, <a0>PHP</a0> applications also check the <a1>PHP</a1>_AUTH_USER and <a2>PHP</a2>_AUHT_PW environment variables. Parfois, des applications <a0>PHP</a0> examinent également les variables d'environnement <a1>PHP</a1>_AUTH_USER et <a2>PHP</a2>_AUHT_PW. Source Sources Source RPM RPM sources Source directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/doc/ Répertoire des sources = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/doc/ Sources are currently available on OW2. Les sources sont disponibles sur OW2. South Bay Community Network South Bay Community Network Speaker Conférencier Special Handlers for <a0>Zimbra</a0>, <a1>Sympa</a1> Des agents spéciaux pour <a0>Zimbra</a0>, <a1>Sympa</a1> Specific default values for filters to match AD schema Valeurs spécifiques par défaut des filtres pour correspondre au schéma AD Sponsored by Sponsorisé par Spring (ACEGI) Spring (ACEGI) Spring Security (ACEGI) Sécurité Spring (ACEGI) Spring Security provides a default <c0>pre-authentication</c0> mechanism that can be used to connect your J2EE application to <a1>LL::NG</a1>. Spring Security fournit un mécansime de <c0>pre-authentification</c0> par défaut qui peut être utilisé pour connecter une application J2EE à <a1>LL::NG</a1>. Stable version Version stable Stable version (1.0) Version stable (1.0) Stable version (1.1.2) Version stable (1.1.2) Stable version (1.2.0) Version stable (1.2.0) Stable version (1.2.1) Version stable (1.2.1) Stable version (1.2.2) Version stable (1.2.2) Stable version (1.2.5) Version stable (1.2.5) Stable version (1.3.0) Version stable (1.3.0) Stack multiple backends Empiler de multiples backends Stack multiple backends (AuthMulti) Empiler de multiples backends (AuthMulti) Standard virtual host directives, to serve portal pages: Directives standard d'hôte virtuel pour servir les pages du portail : Standards attributes, like uid, cn or mail, are often enough to configure access rules and headers. Les attributs standards, tels uid, cn ou mail, sont souvent suffisant pour configurer les règles d'accès et en-têtes. Start Commencer Starting performances Performances au démarrage Statistics are displayed when calling the status path on an Handler (for example: <a0>http://test1.example.com/status</a0>). Les statistiques sont affichées lors des appels au chemin du statut sur un agent (par exemple : <a0>http://test1.example.com/status</a0>). Status module Module de statut Status module activation Activation du module de statut Status module can not be loaded without localStorage parameter Status module can not be loaded without localStorage parameter Status page Page de status Steps: Étapes : Storage Stockage Storage directory Répertoire de stockage Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... Store password in session Stockage du mot-de-passe en session Store user password in session Stocker le mot-de-passe utilisateur dans la session Strasbourg Strasbourg String::Random String::Random Strong authorization system Système strict de contrôle d'accès Structured Query Language Structured Query Language Sub elements: Éléments subordonnés : Subject for confirmation mail Sujet du message de confirmation Subject for password mail Sujet du message de changement de mot de passe Such configuration can have some security problems: Une telle configuration peut engendrer des problèmes de sécurité : Sunday is the first day. Dimanche est le premier jour. Superadmin: no one can stop him! Superadmin : personne ne peut l'arrêter ! Sybase Sybase Sympa Sympa Sympa Handler parameters Paramètres du handler Sympa Sympa configuration Configuration Sympa Sympa mail session key Clef de session mail pour Sympa Sympa shared secret Secret partagé de Sympa Sympa virtual host in Apache Hôte virtuel Sympa dans le manager Sympa virtual host in Manager Hôte virtuel Sympa dans le manager Syslog Syslog Syslog facility Facilité syslog System Système Sébastien BAHLOUL Sébastien BAHLOUL T T TLS client Client TLS Take a look at <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. Voir <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. Tarball Archive Template parameters Paramètres des modèles Template parameters are defined in source code. Des paramètres modèles sont définis dans le code source. Test notification Tester les notifications Test::POD Test::POD Testing version Version en test Tests Tests That is why it is important to set APACHEUSER variable when you launch “make install” C'est pourquoi il est important de renseigner la variable APACHEUSER lorsqu'on lance “make install” That message can contain session data as user attributes or macros. Ce message peut contenir des données de session tels les attributs ou les macros. The # host must be matched by a group named "host". The # host must be matched by a group named "host". The <a0>DBI</a0> string La chaîne <a0>DBI</a0> The <a0>HTTP</a0> Auth extension is presented here: <a1>http://www.mediawiki.org/wiki/Extension:HttpAuth</a1> L'extension <a0>HTTP</a0> Auth est presentée ici : <a1>http://www.mediawiki.org/wiki/Extension:HttpAuth</a1> The <a0>LDAP schema extension</a0> can be used to store these values L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker ces valeurs. The <a0>LDAP schema extension</a0> can be used to store this value. L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker cette valeur. The <a0>SMTP</a0> server value can hold the port, for example: <c1>mail.example.com:25</c1> La valeur du serveur <a0>SMTP</a0> peut contenir le port, par exemple : <c1>mail.example.com:25</c1> The <a0>SSL authentication backend</a0> behavior has changed: Le comportement du <a0>backend d'authentification SSL</a0> a changé : The <a0>SSO</a0> cookie is build by the portal (as described in the <a1>login kinematic</a1>), or by the Handler for cross domain authentication (see <a2>CDA kinematic</a2>). Le cookie <a0>SSO</a0> est construit par le portail (tel que décrit dans la <a1>cinématique de connexion</a1>) ou par l'agent (handler) lors des authentification inter-domaines (voir <a2>la cinématique de l'authentification inter-domaine</a2>). The <a0>Yubikey</a0> is a small material token shipped by <a1>Yubico</a1>. <a0>Yubikey</a0> est un petit matériel d'authentification vendu par <a1>Yubico</a1>. The <a0>encode_base64</a0> subroutine Fonction <a0>encode_base64</a0> The <a0>login history</a0> is a new feature enabled by default. L'<a0>historique de connexion</a0> est une nouvelle fonctionnalité activée par défaut. The <c0>ProxyPreserveHost</c0> directive will forward the Host header to the protected application.<br1/> La directive <c0>ProxyPreserveHost</c0> transfère l'en-tête Host à l'application protégée.<br1/> The <c0>basic</c0> function will also force conversion from UTF-8 to <a1>ISO</a1>-8859-1, which should be accepted by most of <a2>HTTP</a2> servers. La fonction <c0>basic</c0> force la conversion des caractères UTF-8 en <a1>ISO</a1>-8859-1, qui peut être accepté par la plupart des serveurs <a2>HTTP</a2>. The <c0>convertConfig</c0> utility reads 2 <a1>LL::NG</a1> configuration files (<c2>lemonldap-ng.ini</c2>): L'utilitaire <c0>convertConfig</c0> lit 2 fichiers de configuration <a1>LL::NG</a1> (<c2>lemonldap-ng.ini</c2>) : The <c0>reload</c0> target is managed in Apache configuration, inside a virtual host protected by LemonLDAP::NG Handler, for example: La cible <c0>reload</c0> est gérée dans la configuration d'Apache, dans un hôte virtuel protégé par LemonLDAP::NG Handler, par exemple: The <c0>unprotect</c0> rule in Manager now deletes headers forged by an unauthenticated user, but still send headers for authenticated ones. La règle <c0>unprotect</c0> dans le manager efface désormais les en-têtes qui pourraient être fabriqués par un utilisateur non authentifié, mais les conserve pour un utilisateur authentifié. The Active Directory module is based on the <a0>LDAP module</a0>, with these features: Le module Active Directory est basé sur le <a0>module LDAP</a0>, avec ces caractéristiques : The AuthBasic Handler is a special Handler that will us AuthBasic to authenticate to a virtual host, and then play authorizations rules to allow access to the virtual host. L'agent AuthBasic est un agent spécial qui utilise l'authentification web basique pour authentifier dans un hôte virtuel et qui utilise ensuite les règles d'autorisation pour valider les accès à l'hôte virtuel. The AuthDemo and UserDBDemo will allow you to log in and get the standard attributes (uid, cn and mail). AuthDemo et UserDBDemo permettent de se connecter et d'avoir les attributs standards (uid, cn et mail). The Basic Authentication relies on a specific <a0>HTTP</a0> header, as described above. L'authentification basique est portée par un en-tête <a0>HTTP</a0> spécifique, tel que décrit ci-dessous. The Django connector is available on GitHub: <a0>https://github.com/9h37/django-lemonldap</a0> Le connecteur Django est disponible sur GitHub : <a0>https://github.com/9h37/django-lemonldap</a0> The GPG key can be downloaded here: <a0>rpm-gpg-key-ow2</a0> La clef GPG peut être téléchargée ici : <a0>rpm-gpg-key-ow2</a0> The Handler must be loaded before any protected virtual host. L'agent doit être chargé avant tout hôte virtuel à protéger. The Handler will send a <a0>WWW</a0>-Authenticate header to the client, to request user and password, and then check the credentials using <a1>SOAP</a1> getCookies web service. L'agent envoie un en-tête <a0>WWW</a0>-Authenticate au client pour demander le couple compte-mot-de-passe et ensuite le vérifie en utilisant le service web <a1>SOAP</a1> getCookies. The IDP name is asked, enter it and click OK. Le nom d'IDP est demandé, entrer-le et cliquer sur OK. The LDIF view of such entry can be: La vue LDIF d'une telle entrée ressemble à : The Manager displays main branches: Le manager affiche des branches principales : The Manager let you define comments in rules, to order them: Le manager permet de définir des commentaires de règles, ce qui permet de les ordonner : The NameID is the main user identifier, carried in <a1>SAML</a1> messages. NameID est l'identifiant principal de l'utilisateur transmis dans les messages <a1>SAML</a1>. The PasswordDBDemo will allow you to change the password with some basic checks, but as the data are hard coded, the password will never be really changed. PasswordDBDemo permet de changer de mot-de-passe avec quelques tests de base, mais comme les données sont codées en dur, le mot-de-passe ne sera jamais réellement changé. The SP name is asked, enter it and click OK. Le nom de SP est demandé, entrer-le et cliquer sur OK. The Secure Token Handler is a special Handler that create a token for each request and send it to the protected application. L'agent jeton sécurisé est un agent particulier qui crée un jeton pour chaque requête et l'envoie à l'application protégée. The Tomcat Valve is only available for tomcat 5.5 or greater. La valve Tomcat est uniquement disponible pour les versions 5.5 et supérieures de Tomcat. The Zimbra email and calendar server is available for Linux, Mac <a1>OS</a1> X and virtualization platforms. Le serveur de messagerie et calendrier Zimbra est disponible pour Linux, Mac OS X et les plateformes de virtualisation. The access to phpLDAPadmin will be protected by LemonLDAP::NG with specific access rules. L'accès à phpLDAPadmin sera protégé par LemonLDAP::NG avec une règle particulière d'accès. The application is in maintenance: <a0>HTTP</a0>_SERVICE_UNAVAILABLE (503) L'application est en maintenance : HTTP_SERVICE_UNAVAILABLE (503) The attribute key name can be used directly in <c0>lemonldap-ng.ini</c0> or in <a1>Perl</a1> scripts to override configuration parameters (see <a2>configuration location</a2>). Le nom de la clef d'un attribut peut être utilisé directement dans le fichier <c0>lemonldap-ng.ini</c0> ou dans les scripts <a1>Perl</a1> pour surcharger les paramètres de configuration (voir <a2>emplacement de la configuration</a2>). The authentication level given to users authenticated with this module. Le niveau d'authentification accordé aux utilisateurs authentifiés par ce module. The choice will concern three backends: Ce choix concerne 3 backends: The choosen backends will be registered in session: Les backends choisits enregistrent dans la session : The chosen logo file must be in portal applications logos directory (<c0>portal/skins/common/apps/</c0>). Le logo choisi doit se trouver dans le répertoire des logos des applications (<c0>portal/skins/common/apps/</c0>). The common domain is used by <a0>SAML SP</a0> to find an Identity Provider for the user, and by <a1>SAML IDP</a1> to register itself in user's IDP list. Le domaine commun est utilisé par le <a0>SP SAML</a0> pour trouver le fournisseur d'identité de l'utilisateur et par l'<a1>IdP SAML</a1> pour s'enregistrer dans la liste des IDP. The conditions are checked in alphabetical order of comments. Les conditions sont examinées dans l'ordre alphabétique des commentaires. The configuration can be changed in <c0>etc/manager-apache2.conf</c0>, for example te restrict the <a1>IP</a1> allowed to access the Manager: Cette configuration peut être changée dans <c0>etc/manager-apache2.conf</c0>, par exemple pour restreindre les adresses <a1>IP</a1> autorisées à accéder au manager : The configuration can be changed in <c0>etc/manager-apache2.conf</c0>, for example to restrict the <a1>IP</a1> allowed to access the Manager: Cette configuration peut être changée dans <c0>etc/manager-apache2.conf</c0>, par exemple pour restreindre les adresses <a1>IP</a1> autorisées à accéder au manager : The configuration is displayed as a big <a0>Perl</a0> Hash, that you can edit: La configuration est affichée en une grande table de hachage <a0>Perl</a0>, qu'on peut éditer : The configuration is done in Apache, in a virtual host. La configuration est effectuée dans Apache, dans les hôtes virtuels. The configuration is done in config.php: La configuration est effectuée via config.php: The configuration is the same as the <a0>LDAP module</a0>. La configuration est la même que mour le <a0>module LDAP</a0>. The configuration is then displayed as a big <a0>Perl</a0> Hash, that you can edit: La configuration est affichée en une grande table de hachage <a0>Perl</a0>, qu'on peut éditer : The configuration name is the same that files, so lmConf-1, lmConf-2, etc. Le nom de la configuration est le même que pour File : lmConf-1, lmConf-2, etc... The configuration will be store under a specific branch, for example <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. La configuration est stockée dans une branche spécifique, par exemple <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. The content of the SVN tarball is not the same as the official tarball. Le contenu de l'archive SVN n'est pas le même que l'officielle. The cookie $id isn't yet available: Object does not exist in the data store The cookie $id isn't yet available: Object does not exist in the data store The database password Le mot de passe de la base de données The database username Le login de la base de données The date format is the <a0>LDAP</a0> date syntax, for example for the 1st March 2009: Le format de date est celui de la syntaxe des dates <a0>LDAP</a0>, par exemple pour le 1er Mars 2009 : The default <a3>XSLT</a3> file is in portal/skins/common/notification.xsl. Le fichier <a3>XSLT</a3> par défaut est portal/skins/common/notification.xsl. The default rule is: La règle par défaut est : The default value of this wilcard is <c0>allusers</c0>, but you can change it if <c1>allusers</c1> is a known identifier in your system. La valeur par défaut de cette carte blanche est <c0>allusers</c0>, mais on peut la changer si <c1>allusers</c1> est un nom d'utilisateur. The difference with <a0>remote authentication</a0> is that the client will never be redirect to the main <a1>LL::NG</a1> portal. La différence avec <a0>l'authentification "Remote"</a0> est que le client n'est jamais redirigé vers le portail <a1>LL::NG</a1> principal. The digit will not be shown on portal page. Le chiffre ne sera pas affiché sur la page portail. The faster. Le plus rapide. The file <c0>auth.keytab</c0> should then be copied (with a secure media) to the Linux server (for example in <c1>/etc/lemonldap-ng</c1>). Le fichier <c0>auth.keytab</c0> doit ensuite être copié (par un média sûr) sur le serveur Linux (par exemple dans <c1>/etc/lemonldap-ng</c1>). The file name default separator is <c0>_</c0>, this can be a problem if you register notifications for users having <c1>_</c1> in their login. Le séparateur par défaut des noms de fichiers est <c0>_</c0>, ce qui peut poser problème si on enregistre des notifications pour des utilsateur ayant un caractère <c1>_</c1> dans leur nom de connexion. The first parameter passed to the custom function is the <a0>LL::NG</a0> portal object. Le premier paramètre passé à la fonction personnalisée est l'objet portail de <a0>LL::NG</a0>. The first rule that matches is applied. La première règle qui correspond est appliquée. The following sample parameters will be used: Les paramètres suivants sont utilisés pour l'exemple : The following table list fields to index depending on the feature you want to increase performance: Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances : The following table list fields to index depending on the feature you want to use: Le tableau suivant liste les champs à indexer suivant les fonctionnalités utilisées : The generated tarball is in the current directory. L'archive générée est dans le répertoire courant. The header value is a <a0>Perl</a0> expression, returning a string. La valeur d'un en-tête est une expression <a0>Perl</a0> qui retourne une chaîne de caractères. The integration with <a0>LL::NG</a0> is the following: L'intégration avec <a0>LL::NG</a0> est la suivante : The location <a0>URL</a0> end is based on the <c1>service_id</c1> defined in Sympa apache configuration. La fin de l'<a0>URL</a0> est construite à partir du <c1>service_id</c1> defini dans la configuration Apache de Sympa. The location <a0>URL</a0> is based on the <c1>service_id</c1> defined in Sympa apache configuration. L'<a0>URL</a0> est construite à partir du <c1>service_id</c1> defini dans la configuration Apache de Sympa. The log level can be set with Apache <c0>LogLevel</c0> parameter. Le niveau de journalisation peut être configuré via le paramètre <c0>LogLevel</c0> d'Apache. The logout request will be sent even if the user did not use the application. La requête de déconnexion est envoyée même si l'utilisateur ne s'est pas connecté à l'application. The main portal is configured to use <a0>CDA</a0>. Le portail principal est configuré pour utiliser le <a0>CDA</a0>. The menu is displayed if authentication is successful. Le menu est affiché si l'authentification est réussie. The messages are stored with the facilities : Les messages sont stockés avec les niveaux : The messages are stored with the levels : Les messages sont stockés avec les niveaux : The module can be found <a0>here</a0>. Le module peut être trouvé <a0>ici</a0>. The module must be loaded by Apache (LoadModule directive). Ce module doit être chargé par Apache (directive LoadModule). The new password is sent to user Le nouveau mot-de-passe est envoyé à l'utilisateur The next time you will access Manager, it will be trough <a0>LL::NG</a0>. En retournant vers le manager, ce sera via <a0>LL::NG</a0>. The normal portal has a link included in the authentication form pointing to the remote portal for the users of the other organization Le portail normal dispose d'un lien dans le formulaire d'authentification pointant vers le portail destiné aux utilisateurs de l'autre organisation The notifications module uses a wildcard to manage notifications for all users. Le module de notifications utilise une carte blanche pour gérer les notifications destinées à tous les utilisateurs. The only authorized binding is <a0>SOAP</a0>. La seule déclaration possible est <a0>SOAP</a0>. The password can be in plain text, or encoded with a standard <a0>SQL</a0> method: Le mot-de-passe peut être stocké en clair ou encodé avec une méthode <a0>SQL</a0> standard : The path to the lock directory Le chemin du répertoire des verrous The path to the main directory Le chemin du répertoire principal The plugin will check the <c1>REMOTE_USER</c1> environment variable to get the connected user. Ce plugin utilise la variable d'environnement <c1>REMOTE_USER</c1> pour récupérer le nom d'utilisateur connecté. The portal Le portail The portal <a0>URL</a0> <s1>must</s1> be inside <a2>SSO</a2> domain. L'<a0>URL</a0> du portail <s1>doit</s1> être dans le domaine <a2>SSO</a2>. The portal is the biggest component of Lemonldap::NG. Le portail est le composant le plus gros de Lemonldap::NG. The portal is the main component of <a0>LL::NG</a0>. Le portail est le principal composant de <a0>LL::NG</a0>. The portal is the visible part of LemonLDAP::NG, all user interactions are displayed on it. Le portail est la partie visible de LemonLDAP::NG, toutes les interactions utilisateurs y sont affichées. The portal must be configured to accept <a0>SOAP</a0> authentication requests. Ce portail doit être configuré pour accepter les requêtes d'authentification <a0>SOAP</a0>. The portal of the secondary <a0>LL::NG</a0> structure is configured to delegate authentication to a remote portal. Le portail du système <a0>LL::NG</a0> secondaire est configuré pour déléguer l'authentification à un portail distant. The prefix 1.3.6.1.4.1.10943 is owned by <a0>LINAGORA</a0> (See <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). Le préfixe 1.3.6.1.4.1.10943 est propriété de <a0>LINAGORA</a0> (Voir <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). The real accounting has to be done by the application itself since <a0>SSO</a0> logs can not understand transactions. La réelle traçabilité doit être faite par l'application elle-même car les journaux du <a0>SSO</a0> ne peuvent interprêter les transactions. The real user identifier is stored in a Memcached server and the protected application can the request the Memcached server to get user identifier. L'identifiant utilisateur réel est stockédans un serveur Memcached et l'application protégée peut requérir le serveur Memcached pour obtenir l'identifiant utilisateur. The redirection from portal can be done either with code 303 (See Other), or with a JavaScript redirection. Cette redirection du portail peut être effectuée via le code 303 (See Other) ou par une redirection JavaScript. The request on logout <a0>URL</a0> will be sent after user is disconnected, so you should unprotect this <a1>URL</a1> if it is protected by an <a2>LL::NG</a2> Handler. Cette requête vers l'<a0>URL</a0> de déconnexion est envoyée après la déconnexion de l'utilisateur, il faut donc déprotéger cette <a1>URL</a1> si elle est protégée par un agent <a2>LL::NG</a2>. The request validity time is a configuration parameter. La durée de validité de la requête est un paramètre de configuration. The reset password link must be activated, see <a0>portal customization</a0>. Le lien de réinitialisation de mot-de-passe doit être activé, voir <a0>la personnalisation du portail</a0>. The script uses the <c0>editor</c0> system command, that links to your favorite editor. Ce script utilise la commande système <c0>editor</c0>, qui est liée à l'éditeur favori. The script uses the system <c0>editor</c0> command, that links to your favorite editor. Ce script utilise la commande système <c0>editor</c0>, qui est un lien vers l'éditeur favori. The secondary portal is declared in the Manager of the main <a1>LL::NG</a1> structure (else user will be rejected). Le portail secondaire est declaré dans le Manager du système <a1>LL::NG</a1> principal comme une application (sinon les utilisateurs seront rejetés). The servers and URLs can be configured in Manager, <c1>General Parameters</c1> > <c2>reload configuration URLs</c2>: keys are server names or <a3>IP</a3> the requests will be sent to, and values are the requested URLs. Les serveurs et URL peuvent être configurées dans le manager, <c1>Paramètres généraux</c1> > <c2>URL de rechargement de la configuration</c2> : les clefs sont les noms de serveurs ou les adresses <a3>IP</a3> à qui les requêtes seront envoyées, et les valeurs sont les URL à requêter. The session expires after 2 hours by default. Toute session expire au boût de 2 heures par défaut. The sources are available on <a0>download page</a0>. Les sources sont disponibles sur la <a0>page de téléchargement</a0>. The statistics are collected trough a daemon launched by the Handler. Ces statistiques sont collectées via un démon lancé par l'agent. The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) The team L'équipe The transformation between notification <a0>XML</a0> content and <a1>HTML</a1> display is done with <a2>XSLT</a2>. La transformation entre le texte <a0>XML</a0> d'une notification et l'affichage <a1>HTML</a1> est faite par <a2>XSLT</a2>. The upgrade process will also have migrate old configuration files into <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. Le processus de mise-à-jour va également migrer les anciens fichiers de configuration dans <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. The user can choose a new password or ask to generate one L'utilisateur peut choisir un nouveau mot de passe ou demander sa génération The user click on the link in the mail L'utilisateur clique sur le lien dans le courriel The user will be redirected on portal <a0>URL</a0> with error in the <c1>lmError</c1> <a2>URL</a2> parameter. L'utilisateur sera redirigé vers l'<a0>URL</a0> du portail avec une erreur dans le paramètre <c1>lmError</c1> de l'<a2>URL</a2>. The value will be use in metadata main markup: Cette valeur est utilisé dans les metadatas : The value will be used to display the data. Cette valeur sera utilisée pour afficher les données. The whole Location value is replaced, including the scheme (http or https), which can help to manage redirections below <a0>SSL</a0> hardware equipments La valeur complète de Location est remplacée, y compris le schéma (http or https), ce qui peut aider à gérer les redirections derrière des équipements <a0>SSL</a0> matériels The “<s0>default</s0>” access rule is used if no other access rule match the current <a1>URL</a1>. La règle d'accès “<s0>default</s0>” est utilisée si aucune règle ne correspond à l'<a1>URL</a1> courante. The “Multi” system can : Le système “Multi” peut : The “default” rule is only applied if no other rule match La règle “default” n'est appliquée que si aucune autre règle ne correspond Theme (<a0>jQuery UI theme</a0>). Thème (<a0>thème jQuery-UI</a0>). Then <a2>CAS</a2> service has to show a correct error when service ticket validation will fail. Ainsi le service <a2>CAS</a2> doit afficher une erreur lorsque la validation du ticket échoue. Then Zimbra do the <a0>SSO</a0> by setting a cookie in user's browser Ensuite Zimbra génère son cookie <a0>SSO</a0> dans le navigateur de l'utilisateur Then a user that try to access to one of the following <e0>will be granted</e0> ! Alors l'utilisateur qui tente d'accéder à l'une des URL suivantes <e0>sera autorisé</e0> ! Then click on <c0>New POST data</c0> and add all data with their values, for example: Cliquer ensuite sur <c0>Nouvelle donnée POST</c0> et ajouter chaque donnée avec sa valeur, par exemple : Then create symbolic links on template files, as you might not want to rewrite all <a0>HTML</a0> code (else, do as you want). Créer ensuite des liens symboliques pour éviter de réécrire tous les fichiers <a0>HTML</a0> (sauf si c'est souhaité). Then create the keytab. Créer ensuite le fichier keytab. Then creating a notification for <c0>alluserscustom</c0> will display the notification for all users. Ainsi, créer une notification pour <c0>alluserscustom</c0> affichera la notification à tous les utilisateurs. Then each parameter is one value of the attribute <c0>description</c0>, prefixed by its key. Ensuite, chaque paramètre est une valeur de l'attribut <c0>description</c0>, prefixé par sa clef. Then edit MediaWiki local settings Éditer ensuite les paramètres locaux MediaWiki Then edit rules and headers. Éditer ensuite les règles et en-têtes. Then fill all inputs to create the notification. Remplir ensuite tous les champs pour créer la notification. Then fill the two fields; Renseigner ensuite les deux champs ; Then go in <c0>Options</c0> to define: Aller ensuite dans <c0>Options</c0> pour définir : Then go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Password management</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Gestion des mots-de-passe</c2> : Then go in Manager, <c0>Virtual Hosts</c0> » <e1>virtualhost</e1> » <c2>Form replay</c2> and click on <c3>Add POST <a4>URL</a4></c3>. Aller ensuite dans le manager, <c0>Hôtes virtuels</c0> » <e1>hôte virtuel</e1> » <c2>Rejeu de formulaires</c2> et cliquer sur <c3>Nouvelle <a4>URL</a4> POST</c3>. Then go to trunk directory: Aller ensuite dans le répertoire trunk : Then in exported variables, you can ask only for : Ensuite dans les « variables exportées », on ne peut demander que : Then install lasso and lasso-perl packages. Installer ensuite les paquets lasso et lasso-perl. Then it creates the session (with attribute filter) Il crée la sessions (avec le filtre d'attributs) Then just configure the new <a5>XSLT</a5> file path in Manager, go in General Parameters > Advanced Parameters > Notifications > Custom <a6>XSLT</a6> file and set for example <c7>/etc/lemonldap-ng/notification.xsl</c7>. Configure ensuite le nouveau fichier <a5>XSLT</a5> dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications > Fichier <a6>XSLT</a6> personnalisé et mettre par exemple <c7>/etc/lemonldap-ng/notification.xsl</c7>. Then on Linux server: Ensuite sur le serveur Linux : Then restart Apache. Redémarrer Apache ensuite. Then select <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: Ensuite sélectionner <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: Then set: et indiquez : Then the second rule will be applied first, so every authenticated user will access to <c0>/pub/admin</c0> directory. Alors la seconde règle est appliquée en premier, donc tous les utilisateurs authentifiés pourront accéder au répertoire <c0>/pub/admin</c0>. Then use openssl to generate an auto-signed certificate: Ensuite, utiliser openssl pour générer un certificat auto-signé : Then use the <c0>SiteMinder</c0> tab to configure <a1>SSO</a1>: Utiliser ensuite le paragraphe <c0>SiteMinder</c0> pour configurer le <a1>SSO</a1> : Then you <e0>only</e0> have to write <c1>myskin/css/styles.css</c1> and add your media to <c2>myskin/images</c2>. Il suffit ensuite d'écrire <c1>myskin/css/styles.css</c1> et d'ajouter les médias dans <c2>myskin/images</c2>. Then you can access to user datas On peut ensuite accéder aux données de l'utilisateur Then you can have different <a0>parameters</a0> for each stored in a <a1>Perl</a1> hash entry named multi: Ensuite on peut avoir différents <a0>paramètres</a0> pour chacun stockés dans une table de hachage <a1>Perl</a1> nommée multi: Then you can take any virtual host, and simply add this line to protect it: Ainsi n'importe quel hôte virtuel peut être protégé en ajoutant cette ligne : Then you got this value inside the Auth-Roles header: On les obtient dans l'en-tête Auth-Roles : Then you will be able to use it in your template like this: On peut ensuite l'utiliser dans le modèle comme suit : Then, go in <c0><a1>CAS</a1> parameters</c0>: Aller ensuite dans <c0>Paramètres <a1>CAS</a1></c0> : Then, go in <c0><a1>SSL</a1> parameters</c0>: Aller ensuite dans <c0>Paramètres <a1>SSL</a1></c0> : Then, go in <c0>BrowserID parameters</c0>: Ensuite, aller dans les <c0>paramètres BrowserID</c0>: Then, go in <c0>Choice Parameters</c0>: Ensuite, aller dans les <c0>paramètres Choice</c0>: Then, go in <c0>Facebook parameters</c0>: Ensuite, aller dans les <c0>paramètres Facebook</c0>: Then, go in <c0>Null parameters</c0>: Aller ensuite dans les <c0>paramètres Null</c0>: Then, go in <c0>OpenID parameters</c0>: Ensuite, aller dans les <c0>paramètres OpenID</c0> : Then, go in <c0>Proxy parameters</c0>: Ensuite, aller dans les <c0>paramètres Proxy</c0> : Then, go in <c0>Radius parameters</c0>: Ensuite, aller dans les <c0>paramètres Radius</c0>: Then, go in <c0>Remote parameters</c0>: Ensuite, aller dans les <c0>paramètres Remote</c0> : Then, go in <c0>Slave parameters</c0>: Ensuite, aller dans les <c0>paramètres Slave</c0>: Then, go in <c0>Twitter parameters</c0>: Allez ensuite dans <c0>Paramètres Twitter</c0> : Then, go in <c0>WebID parameters</c0>: Ensuite, aller dans les <c0>paramètres WebID</c0>: Then, go in <c0>Yubikey parameters</c0>: Ensuite, aller dans les <c0>paramètres Yubikey</c0>: Then, set <c0>Lemonldap::NG::Common::Apache::Session::<a1>SOAP</a1></c0> in <c2>General parameters</c2> » <c3>Sessions</c3> » <c4>Session storage</c4> » <c5>Apache::Session module</c5> and add the following parameters (case sensitive): Ensuite, mettre <c0>Lemonldap::NG::Common::Apache::Session::SOAP</c0> dans <c2>Paramètres généraux</c2> » <c3>Sessions</c3> » <c4>Stockage des sessions</c4> » <c5>Module Apache::Session</c5> et ajouter les paramètres suivants (sensibles à la casse) : Then, to protect a standard virutal host, the only configuration line to add is: Ensuite, pour protéger un hôte virtuel standard, la seule ligne de configuration line à ajouter est : Then: Ensuite : There are no <e0>global</e0> authorizations except the right to open a session in the portal. Il n'y a pas d'autorisation <e0>globale</e0>, à l'exception de la règle accordant l'ouverture de session dans le portail. There are no <e0>global</e0> authorizations. Il n'y a pas d'autorisations <e0>globales</e0>. There are no <e0>global</e0> headers. Il n'y a pas d'en-tête <e0>global</e0>. There are packages available here: <a0>http://deb.entrouvert.org/</a0>. Les paquets sont disponibles ici : <a0>http://deb.entrouvert.org/</a0>. There are two ways to configure <a0>SSO</a0> with Sympa: Il y a deux façons de configurer le <a0>SSO</a0> avec Sympa : There is 3 types of <a0>SQL</a0> configuration backends for LemonLDAP::NG : Il y a 3 types de backends de configuration <a0>SQL</a0> pour LemonLDAP::NG : There is nothing more to do that select the backend in the Manager. Rien de plus à faire que de sélectionner ce backend dans le manager. These errors can be catch trough Apache <c0>ErrorDocument</c0> directive, to redirect user on a specific page: Ces erreurs peuvent être interceptées via la directive <c0>ErrorDocument</c0> d'Apache pour rediriger les utilisateurs vers une page spécifique : These files must be included in Apache configuration, either with <c0>Include</c0> directives in <c1>httpd.conf</c1> (see <a2>quick start example</a2>), or with symbolic links in Apache configuration directory (like <c3>/etc/httpd/conf.d</c3>). Ces fichiers doivent être inclus dans la configuration d'Apache, soit par des directives <c0>Include</c0> dans le fichier <c1>httpd.conf</c1> (voir <a2>démarrage rapide</a2>), ou via un lien symbolique dans de répertoire de configuration d'Apache (type <c3>/etc/httpd/conf.d</c3>). These options are only here to override default values. Ces options ne sont à utiliser que pour surcharger les valeurs par défaut. These options are used to build redirection <a0>URL</a0> (when user is not logged, or for <a1>CDA</a1> requests). Ces options sont utilisées dans la construction des <a0>URL</a0> de redirection (lorsque l'utilisateur n'est pas connecté ou pour les requêtes <a1>CDA</a1>). These options can then be overridden for each Identity Provider. Ces options peuvent être surchargées pour chaque fournisseur d'identité. These options override service signature options (see <a0>SAML service configuration</a0>). Ces options surchargent les options de signature du service (voir la <a0>configuration du service SAML</a0>). These parameters are not mandatory to run <a0>SAML</a0> service, but can help to customize it: Ces paramètres ne sont pas obligatoires pour faire fonctionner le service <a0>SAML</a0>, mais peuvent aider à leur personnalisation : These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>. Cesparamètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>. These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>: Ces paramètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>: These parameters can be overwritten in LemonLDAP::NG ini file, in the section <c0>apply</c0>. Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section <c0>apply</c0>. These regular expressions read the 'ou' value of the <a0>DN</a0> of the role of the concerned application. Ces expressions régulières lisent la valeur 'ou' du <a0>DN</a0> du rôle de l'application concernée. These rules can be set trough Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules activation</c3>. Ces règles peuvent être modifiées via le manager : <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Activation des modules</c3>. These settings can be overriden per virtual host, see <a0>virtual host management</a0>. Ces paramètres peuvent être surchargés dans chaque hôte virtuel, voir la <a0>gestion des hôtes virtuels</a0>. They are available at the EntityID <a0>URL</a0>, by default: <a1>http://auth.example.com/saml/metadata</a1>. Elles sont disponibles à l'<a0>URL</a0> EntityID, par défaut : <a1>http://auth.example.com/saml/metadata</a1>. They are extracted from the users database by the <a1>users module</a1>. Elles sont extraites de la base de données des utilisateurs par le <a1>module utilisateurs</a1>. They can then be forwarded to applications trough <a0>HTTP headers</a0>. Ils peuvent être transférés aux applications via les <a0>en-têtes HTTP</a0>. They use LemonLDAP::NG! Ils utilisent LemonLDAP::NG! They will be tested in the specified order. Ils seront testés dans l'ordre indiqué. Third step: provide the role to the application. Troisième étape : fournir le rôle à l'application. This How To explains how change this default behavior to protect Manager with other rules. Ce document explique comment changer ce comportement par défaut pour protéger le manager avec d'autres règles. This allows to use different databases for these process. Ceci autorise à utiliser deux bases de données différentes pour ces deux processus. This attribute is set by LemonLDAP::NG when <a1>password was reset by mail</a1> and the user choose to generate the password (default: enabled). Cet attribut est activé par LemonLDAP::NG lorsque <a1>le mot-de-passe a été réinitialisé par mail</a1> et que l'utilisateur a choisi de générer le mot-de-passe (défaut : activé). This avoid to have to many datas stored. Ce dispositif évite de stocker trop de données. This backend allows to chain authentication method, for example to failback to <a0>LDAP</a0> authentication if Remote authentication failed… Ce backend permet de chaîner des méthodes d'authentification, par exemple pour basculer sur une authentification <a0>LDAP</a0> si l'authentification amont a échouée… This can be a file, an <a0>LDAP</a0> directory, … Ce peut être un fichier, en annuaire <a0>LDAP</a0>, … This can be changed in <c0>etc/manager-apache2.conf</c0>: Ce peut être changé dans <c0>etc/manager-apache2.conf</c0>: This can be configured in LemonLDAP::NG ini file, in the section <c0>apply</c0>: Ceci peut être configuré dans le fichier .ini de LemonLDAP::NG, dans la section <c0>apply</c0> : This can be used to notify right changes,… See <a0>notifications</a0> for more. Ceci peut être utilisé pour notifier des changements de droits,… Consultez la page <a0>notifications</a0> pour plus d'information. This can be used to notify right changes,… See <a1>notifications</a1> for more. Ceci peut être utilisé pour notifier des changements de droits,... Consultez la page <a1>notifications</a1> pour plus d'information. This can be used to protect applications relying on <c0>REMOTE_USER</c0> environment variable in reverse proxy mode. Ceci permet de protéger des applications nécessitant la variable d'environnement <c0>REMOTE_USER</c0> en mode reverse-proxy. This can be useful to allow an third party application to access a virtual host with users credentials by sending a Basic challenge to it. Ce peut être pratique pour autoriser une application cliente à accéder à un hôte virtuel avec un authentifiant en envoyant un en-tête basique. This can happend when you use lmConfigEditor or launch <s0>cron files</s0> with a different user than Apache process. Ceci peut arriver lorsqu'on utilise lmConfigEditor ou lorsqu'on lance les <s0>fichiers cron</s0> avec un utilisateur différent de celui du processus Apache. This concerns all parameters for the Attribute Authority metadata section Ceci concerne tous les paramètres de la section « autorité d'attributs » des métadatas This concerns all parameters for the Organization metadata section: Ceci concerne tous les paramètres de la section "organization" des métadatas : This concerns all parameters for the Service Provider metadata section: Ceci concerne tous les paramètres de la section « fournisseur de service » des metadatas : This configuration is usable if you want to expose your internal <a2>SSO</a2> portal to another network (DMZ). Cette configuration est utilisable l'on soujaite exposer un portail <a2>SSO</a2> interne à une autre réseau (DMZ). This configuration storage can be shared between different hosts using: Ce type de stockage de configuration peut être partagé entre différents serveurs en utilisant : This documentation explains how configure <a0>SAML</a0> service in <a1>LL::NG</a1>, in particular: Cette documentation explique comment configurer le service <a0>SAML</a0> dans <a1>LL::NG</a1>, en particulier : This documentation just explains how to set up the <a0>SSO</a0> part. Cette documentation explique seulement comment activer la partie <a0>SSO</a0>. This documentation will focus on Kerberos authentication module, that can allow for example to set transparent authentication for Active Directory users (as Active Directory is a Kerberos server). Cette documentation se focalise sur le module d'authentification Kerberos qui permet par exemple de rendre transparente l'authentification sur Active Directory (car Active Directory est un serveur Kerberos). This does not include Apache configuration which is not managed by LemonLDAP::NG Ceci n'inclue pas la configuration propre d'Apache qui n'est pas gérée par LemonLDAP::NG This feature can be disabled in <a2>LDAP configuration</a2>. Cette fonctionnalité peut être désactivée dans la <a2>configuration LDAP</a2>. This feature can be enabled and configured in Manager, in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Login History</c2>. Cette fonctionnalité peut être activée et configurée dans le manager dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Historique de connexion</c2>. This file is called <c1>lemonldap-ng.ini</c1> and has the following sections: Le fichier est nommé <c1>lemonldap-ng.ini</c1> et dispose des sections suivantes : This function builds the <c0>Authorization</c0> <a1>HTTP</a1> header used in <a2>HTTP Basic authentication scheme</a2>. Cette fonction contruit l'en-tête <a1>HTTP</a1> <c0>Authorization</c0> utiisée dans le <a2>schéma d'authentification basique HTTP</a2>. This function convert a string from <a0>ISO</a0>-8859-1 to UTF-8. Cette fonction convertit une chaîne <a0>ISO</a0>-8859-1 en UTF-8. This function convert a string from UTF-8 to <a0>ISO</a0>-8859-1. Cette fonction convertit une chaine UTF-8 en <a0>ISO</a0>-8859-1. This function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail to use it. Cette fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. This function will check the date of current request, and compare it to a start date and an end date. Cette fonction examine la date de la requête en cours et la compare avec une date de début et de fin. This function will check the day and the hour of current request, and compare it to allowed days and hours. Cette fonction examine le jour et l'heure de la requête courante et la compare aux jours et heures autorisés. This includes the application list which is now set in the <c1>applicationList</c1> parameter from <c2>[portal]</c2> section, for example: Ceci inclut la liste des applications qui se trouve désormais dans le paramètre <c1>applicationList</c1> de la section <c2>[portal]</c2>, par exemple: This is a security point, to prevent someone to create a session by sending custom headers. Il s'agit d'un élément de sécurité pour éviter à quelqu'un de créer une session en envoyant des en-têtes personnalisés. This is a well known security framework for J2EE applications. C'est le très connu framework de sécurité des applications J2EE. This is also true for: C'est disponible pour : This is mandatory if you want to use an Apache authentication module, which is run by Apache before showing the LemonLDAP::NG portal page. Obligatoire toutefois si on veut utiliser un module d'authentification Apache, qui sont lancés par Apache avant d'afficher la page du portail LemonLDAP::NG. This is not the case of <a0>Memcached</a0> for example. C'est par exemple le cas de <a0>Memcached</a0>. This is simple because you can send the role to the application by creating a <a0>HTTP</a0> header (for example Auth-Role) with the concatenated values (';' is the concatenation string): C'est simple car on peut envoyer le rôle à l'application en créant un en-tête <a0>HTTP</a0> (par exemple Auth-Role) en concaténat les valeurs (avec ';' en séparateur) : This is the default configuration backend. C'est le backend de configuration par défaut. This is the only service to configure, and it accept only the <a0>SOAP</a0> binding. C'est le seul service à configurer et il n'accepte que les connexions <a0>SOAP</a0>. This key must be stored directly in portal index.pl file or in lemonldap-ng.ini: Cette clef doit être stockée directement dans le fichier index.pl du portail ou dans lemonldap-ng.ini : This kind of <a0>SSO</a0> mechanism is not clean, and can lead to problems, like local password blocking, local session not well closed, etc. Ce type de mécanisme <a0>SSO</a0> n'est pas parfait et peut générer des problèmes tels des blocages de mots-de-passe, sessions locales mal closes, etc... This means that if several Handlers are deployed, each will manage its own statistics. Donc si plusieurs agents sont déployés, chacun gère ses propres statistiques. This mechanism allow to do <a0>SSO</a0> on application with an unsafe link between Handler and the application, but with a safe link with the Memcached server. Ce mécanisme permet de faire du <a0>SSO</a0> sur une application sans lien sécurisé entre l'agent et l'application, mais avec un lien sûr avec le serveur Memcached. This mechanism can be used to secure access for remote servers that cross an unsecured network to access to <a0>LL::NG</a0> databases. Ce mécanisme peut être utilisé pour sécuriser l'accès des serveurs distants qui traversent des réseaux non sécurisés pour accéder aux bases de données de <a0>LL::NG</a0>. This mechanism can only work with authentication backends using a login/password form (<a0>LDAP</a0>, <a1>DBI</a1>, …) Ce mécanisme peut seulement fonctionner avec un backend d'authentification utilisant un formulaire login/mot-de-passe (<a0>LDAP</a0>, <a1>DBI</a1>, …) This message is displayed only when you upgrade from a version older than 1.0 Ce message n'est affiché que lors d'une mise à jour depuis une version inférieure à la 1.0 This method requires the <c0>msktutil</c0> program on Linux server. Cette méthode nécessite le programme <c0>msktutil</c0> sur le serveur Linux. This method requires to execute a command on the Active Directory server, and then transfer the keytab on Linux server. Cette méthode nécessite d'exécuter une commande sur le serveur Active Directory et ensuite de transférer le fichier keytab sur le serveur Linux. This method should return one of these values: Cette méthode doit retourner l'une de ces valeurs : This mode allow to test LemonLDAP::NG without any third-party software. Ce mode permet de tester LemonLDAP::NG sans aucun autre programme tiers. This mode is not compatible with a lot of browsers which block pop-ups. Ce mode n'est pas compatible avec de nombreux navigateurs qui bloquent les pop-ups. This mode must not be used for other purpose than test and demonstration! Ces mode ne doit pas être utilisé pour autre chose que des tests et démonstrations ! This module is a <a0>LL::NG</a0> specific identity federation protocol. Ce module fournit un protocole de fédération d'identité spécifique à <a0>LL::NG</a0>. This module is also available in the <c0>contribs</c0> directory of <a1>LL::NG</a1> <a2>subversion repository</a2>. Ce module est également disponible dans le répertoire <c0>contribs</c0> du <a2>dépôt subversion</a2> de <a1>LL::NG</a1>. This module is also available on <a0>GitHub</a0>. Ce module est également disponible sur <a0>GitHub</a0>. This module is not part of <a0>LL::NG</a0> distibution, and can be found on CPAN: <a1>Apache::Session::LDAP</a1>. Ce module ne fait pas partie de la distribution <a0>LL::NG</a0>, et se trouve sur le CPAN : <a1>Apache::Session::LDAP</a1>. This name is used in entry <a0>DN</a0>, for example <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. Ce nom est utilisé dans l'entrée <a0>DN</a0>, par exemple <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. This needs some hacking because the Apache Kerberos authentication module do not work if <c0>require valid-user</c0> is not set. Ceci requiert quelques astuces car le module d'authentification Kerberos d'Apache ne fonctionne pas si <c0>require valid-user</c0> n'est pas indiqué. This objectClass allow attributes <c1>cn</c1> and <c2>description</c2>. Cet classe d'objet autorise les attributs <c1>cn</c1> et <c2>description</c2>. This objectClass is included in every core schemas. Cet objectClass est inclus dans tous les schémas de base. This option can then be overridden for each Service Provider. Cette option peut être surchargée pour chaque fournisseur de service. This page can be browsed for example by <a0>MRTG</a0> using the <a1>MRTG monitoring script</a1>. Cette page peut être parcourue par exemple par <a0>MRTG</a0> en utilisant le <a1>script de surveillance MRTG</a1>. This page do not reference all error messages, but only the frequentest Cette page ne référence pas tous les messages d'erreur, mais simplement les plus fréquents This parameter is set by the portal and use javascript to get the connected user timezone. Ce paramètre est géré par le portail et utilise javascript pour obtenir le fuseau de l'utilisateur connecté. This parameter is used by <a0>SAML IDP</a0> to fill the NameID in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour construire le NameID dans les réponses d'authentification. This parameter is used by <a0>SAML IDP</a0> to fill the authentication context in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour renseigner le contexte d'authentification dans les réponses. This part is based on <a0>SimpleSAMLPHP documentation</a0>. Cette section est basée sur la <a0>documentation SimpleSAMLPHP</a0>. This protocol does not define any attributes exchange mechanism, so only authentication is managed. Ce protocole ne définit aucun mécanisme d'échange d'attribut, donc seule l'authentification est gérée. This protocol is implementated in an <a2>LL::NG</a2> specific Handler. Ce protocole est implementé dans un handler spécifique de <a2>LL::NG</a2>. This proxy use LWP <a0>Perl</a0> module to relay <a1>HTTP</a1> request. Ce proxy utilise le modue LWP de <a0>Perl</a0> pour relayer les requêtes <a1>HTTP</a1>. This requires <a1>Perl OpenID consumer module</a1> with at least version 1.0. Ceci requiert le <a1>module client OpenID pour Perl</a1>, version au moins supérieure ou égale à 1.0. This requires <a2>Perl CAS module</a2>. Ceci nécessite un <a2>module Perl CAS</a2>. This requires at least Net::<a2>LDAP</a2> 0.38. Nécessite une version de Net::<a2>LDAP</a2> égale ou supérieure à 0.38. This requires to configure <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>. This requires to configure <a0>LL::NG</a0> as an <s1><a2>SAML Identity Provider</a2></s1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <s1><a2>fournisseur d'identité SAML</a2></s1>. This requires to request user old password (see <a1>portal customization</a1>). Nécessite de requérir l'ancien mot-de-passe (voir <a1>personnalisation du portail</a1>). This schema shows the dependencies between modules: Ce schéma montre les dépendancesentre ces modules : This scheme expect a parameter, which is the authentication chain. Ce dispositif nécessite un paramètre : la chaîne d'authentification. This script is called <c0>lemonldap-ng-cli</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: Ce script se nomme <c0>lemonldap-ng-cli</c0> et se trouve dans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin: This script must be run as root, it will then use the Apache user and group to access configuration. Ce script doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration. This session backend can be used to share sessions stored in a non-network backend (like <a0>file session backend</a0>) or in a network backend protected with a firewall that only accepts <a1>HTTP</a1> flows. La backend de sessions peut être utilisé pour partager les sessions stockées dans un backend hors réseau (tel la <a0>backend de sessions File</a0>) ou un backend réseau protégé par un pare-feu qui n'accepte que le flux <a1>HTTP</a1>. This should be set as Default. Peut être défini par défaut. This timeout allows to purge sessions of lost RelayState. Ce délai permet de supprimer les sessions des RelayState perdus. This tutorial will guide you into a minimal installation and configuration procedure. Ce tutoriel vous guidera pour réaliser une installation et une configuration minimale. This user will not be available anymore if you configure a new authentication backend! Cet utilisateur n'est plus disponible si on change de backend d'authentification ! This value will be used to know to which recipient the has to be sent (default: mail). Cette valeur peut être utilisée pour savoir à quel destinataire doit être envoyé le courriel (défaut : mail). This valve will check an <a2>HTTP</a2> header to set the authenticated user on the J2EE container. Cette valve examine les en-têtes <a2>HTTP</a2> pour désigner l'utilisateur authentifié au conteneur J2EE. This will provide the auxiliary object class <c0>ssoUser</c0> with attributes: Il fournit les classes auxiliaires <c0>ssoUser</c0> avec les attributs : This will use email as login name (for accounting, session explorer,…). L'adresse email est utilisée comme nom de compte (pour la traçabilité, l'explorateur de session,…). This works if the user has only one role per application. Ceci fonctionne si l'utilisateur a seulement un rôle par application. This works like <a0>File backend</a0>, except that data are serialized in JSON. Il fonctionne comme le <a0>backend File</a0>, si ce n'est que les données sont sérialisées au format JSON. This works with every <a0>LDAP</a0> v2 or v3 server, including <a1>Active Directory</a1>. Ceci fonctionne avec tout serveur <a0>LDAP</a0> v2 ou v3, dont <a1>Active Directory</a1>. This works with every <a0>LDAP</a0> v2 or v3 server, including Active Directory. Ceci fonctionne avec tout serveur <a0>LDAP</a0> v2 ou v3, dont Active Directory. Thomas CHEMINEAU Thomas CHEMINEAU Those capabilities can be used simultaneously or separately. Ces capacités peuvent être utilisées simultanément ou séparemment. Those macros are calculated only at the first usage and stored in the local session cache (only for this server) and only if the user access to the related applications. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. Three options: Trois options : TikiWiki, … TikiWiki, … Time to test L'heure est aux tests Timestamp of last authentication time Date et heure (timestamp) de la dernière authentification Timestamp of session creation Date et heure (timestamp) de la création de la session Timezone Timezone Timezone of the user, set with javascript from standard login form (will be empty if other authentication methods are used) Timezone de l'utilisateur, renseignée par javascript dans le formulaire d'authentification (vide si une autres méthode d'authentification est utilisée) To achieve this, follow these steps: Pour le réussir, suivre ces étapes : To achieve this, you can create a rule in the Manager: select <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Skin display rules</c3> on click on “New key”. Pour le réaliser, il faut créer une règle dans le manager : choisir <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Règle d'affichage du thème</c3> et cliquer sur “Nouvelle clef”. To activate <a1>SOAP</a1> on the portal: Pour activer <a1>SOAP</a1> sur le portal : To add these attributes, go in Manager, <c0>Variables</c0> » <c1>Exported Variables</c1>. Pour ajouter ces attributs, aller dans le manager, <c0>Variables</c0> » <c1>Variables exportées</c1>. To allow the Login History tab in Menu, configure it in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules</c3> (see <a4>portal menu configuration</a4>). Pour activer l'onglet de l'historique de connexion dans le menu, le configurer dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Modules</c3> (voir la <a4>configuration du menu du portail</a4>). To allow the manager to reload the configuration, register the reload virtual host name in the hosts of the server: Pour autoriser le manager à recharger la configuration, enregistrer le nom d'hôte virtuel de rechargement dans le fichier hosts du serveur : To allow this, use <a1>SOAP</a1> for configuration access, or use a network service like <a2>SQL database</a2> or <a3>LDAP directory</a3>. Pour contourner ce problème, utiliser <a1>SOAP</a1> pour l'accès à la configuration ou un service réseau tel une <a2>base de donnée SQL</a2> ou un <a3>annuaire LDAP</a3>. To avoid having group dn stored in sessions datas, you can use a macro to rewrite memberOf: Pour éviter de stocker les dn dans votre base de sessions, vous pouvez utiliser une macro pour réécrire memberOf : To avoid problems, <a0>LL::NG</a0> decode them using <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. Pour éviter les problèmes, <a0>LL::NG</a0> les décode en utilisant <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. To bypass this, <a0>LL::NG</a0> can remember what password was given by user on authentication phase. Pour contourner ce problème, <a0>LL::NG</a0> peut se souvenir du mot-de-passe utilisé dans la phase d'authentification. To bypass this, follow the documentation of <a0>AuthApache module</a0> Pour outrepasser ceci, suivre la documentation du <a0>module AuthApache</a0> To chain <a0>SSL</a0>, you have to set “SSLRequire optional” in Apache configuration, else users will be authenticated by <a1>SSL</a1> only. Pour chaîner <a0>SSL</a0>, il est nécessaire de mettre “SSLRequire optional” dans le fichier de configuration Apache, sinon les utilisateurs ne seront authentifiés que par <a1>SSL</a1>. To change it, go in General Parameters > Advanced Parameters > Notifications > Wildcard for all users, and set for example <c0>alluserscustom</c0>. Pour le changer, aller dans Paramètres généraux > Paramètres avancés > Notifications > Carte blanche pour tous les utilisateurs, et mettre par exemple <c0>alluserscustom</c0>. To change it: Pour le changer : To change this, you can choose one of the following: Pour changer ce comportement, on peut choisir l'une des options suivantes : To configure it, <a0>SOAP</a0> session backend will be set trough Manager in global configuration (used by all Hanlders), and the real session backend will be configured for local components in lemonldap-ng.ini. Pour le configurer, le backend de session <a0>SOAP</a0> est défini via le manager dans la configuration globale (utilisée par tous les agents) et le backend de session réel est configuré pour les composants locaux dans lemonldap-ng.ini. To configure requested attributes, go in <c0>Variables</c0> > <c1>Exported variables</c1> and define attributes: Pour configurer les attributs à récupérer, aller dans <c0>Variables</c0> > <c1>Variables exportées</c1> et definir les attributs: To configure sessions, go in Manager, <c0>General Parameters</c0> » <c1>Sessions</c1>: Pour configurer les sessions, aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Sessions</c1> : To configure the user identifier in access log, go in Manager, <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>REMOTE_USER</c2>. Pour configurer l'identifiant utilisateur dans les journaux d'accès, aller dans le manager, <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>REMOTE_USER</c2>. To configure your new skin in Manager, select the custom skin, and enter your skin name in the configuration field. Pour configurer le nouveau thème dans le manager, selectionner le thème personnalisé et entrer le nom du nouveau thème dans le champ. To create a variable, you've just to map a user attributes in <a0>LL::NG</a0> using <c1>Variables</c1> » <c2>Exported variables</c2>. Pour créer une variable, il faut simplement associer des attributs utilisateurs dans <a0>LL::NG</a0> en utilisant <c1>Variables</c1> » <c2>Variables exportées</c2>. To customize a skin, the simplest way is to create a new skin folder: Pour personnaliser un thème, la meilleure façon est de créer un nouveau répertoire : To define keys, you can: Pour définir les clefs, vous pouvez : To do it, uncomment the <c0>NameVirtualHost</c0> line in <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1>: Pour ce faire, décommenter la ligne <c0>NameVirtualHost</c0> dans <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1> : To do this in Manager, go in General Parameters > Advanced Parameters > Notifications. pour ce faire dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications. To do this, go in Manager > General Parameters > Advanced Parameters > Security > Use Safe Jail and disable it. Pour ce faire, aller dans le manager > Paramètres généraux > Paramètres avancés > Sécurité > Utiliser la cage sécurisée et la désactiver. To do this, use the Manager, and go in <c0>Virtual Hosts</c0> branch. Pour ce faire, utiliser le manager, et aller dans la branche <c0>Virtual Hosts</c0>. To edit <a0>SSO</a0> cookie parameters, go in Manager, <c1>General Parameters</c1> > <c2>Cookies</c2>: Pour modifier les paramètres du cookie <a0>SSO</a0>, aller dans le manager, <c1>Paramètres généraux</c1> > <c2>Cookies</c2> : To enable <a0>LL::NG</a0> authentication plugin, go in <c1>/etc/obm/obm_conf.inc</c1>: Pour activer le composant d'authentification <a0>LL::NG</a0>, aller dans <c1>/etc/obm/obm_conf.inc</c1>: To encode the redirection <a0>URL</a0>, the handler will use some Apache environment variables and also configuration settings: Pour encoder l'<a0>URL</a0> de redirection, l'agent utilise des variables d'environnement Apache et des paramètres de configuration : To encode the redirection <a0>URL</a0>, the will use some Apache environment variables and also configuration settings: Pour encoder l'<a0>URL</a0> de redirection, l'agent utilise des variables d'environnement Apache et des paramètres de configuration : To extend <a0>SSO</a0> on several domains, a cross-domain mechanism is implemented in LemonLDAP::NG. Pour étendre le <a0>SSO</a0> sur plusieurs domaines, un mécanisme inter-domaines est intégré à LemonLDAP::NG. To get attributes values in session, declare them in <a0>exported variables</a0> Pour utiliser ces valeurs dans les sessions, il faut les déclarer dans les <a0>variables exportées</a0> To get more information on user (name, mail, etc.), you have to read <a0>HTTP headers</a0>. Pour obtenir plus d'information sur l'utilisateur (nom, adresse de courriel, etc...), il faut lire les <a0>en-têtes HTTP</a0>. To have a stronger integration, we will configure LiemSurvey to autocreate unknown users and use <a0>HTTP</a0> headers to fill name, mail and roles. Pour avoir une plus forte integration, LimeSurvey doit être configuré pour créer automatiquement les utilisateurs inconnus et utiliser les en-têtes <a0>HTTP</a0> pour remplir le nom, le mail et les rôles. To have a stronger integration, we will configure LimeSurvey to autocreate unknown users and use <a0>HTTP</a0> headers to fill name, mail and roles. Pour une meilleure integration, LimeSurvey doit être configuré pour créer automatiquement les utilisateurs inconnus et utiliser les en-têtes <a0>HTTP</a0> pour remplir le nom, le mail et les rôles. To install them on system: Pour les installer sur le système : To keep Memcached performance level and <a0>LL::NG</a0> features, you can replace <a1>Memcached</a1> by <a2>Redis</a2> using <a3>NoSQL session backend</a3>. Pour maintenir un niveau de performance tel celui de Memcached et préserver les fonctionnalités de <a0>LL::NG</a0>, on peut remplacer <a1>Memcached</a1> par <a2>Redis</a2> en utilisant le <a3>backend de sessions NoSQL</a3>. To know more about the jail, check <a0>Safe module documentation</a0>. Pour en savoir plus sur la cage, consulter la <a0>documentation du module Safe</a0>. To learn more about using Apache as reverse-proxy, see <a2>Apache documentation</a2>. Pour en savoir plus sur l'utilisation d' Apache en reverse-proxy, consultez la <a2>documentation d'Apache</a2>. To make the portal start faster when the server is relaunched, add those lines in Apache configuration file (as described in portal-apache2.conf): Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf): To manage the other way (<a0>LL::NG</a0> → Google Apps), you can add a dedicated <a1>logout forward rule</a1>: Pour gérer l'autre voie (<a0>LL::NG</a0> → Google Apps), ajouter une <a1>règle de redirection après déconnexion</a1>: To post user's password, you must enable <a0>password storing</a0>. Pour envoyer le mot-de-passe utilisateur, il faut activer le <a0>stockage du mot-de-passe</a0>. To protect a virtual host in Apache, the LemonLDAP::NG Handler must be activated (see <a0>Apache global configuration</a0>). Pour protéger un hôte virtuel dans Apache, l'agent LemonLDAP::NG doit être activé (voir <a0>configuration globale d'Apache</a0>). To protect the manager by <a0>LL::NG</a0>, you just have to set this in <c1>lemonldap-ng.ini</c1> configuration file (section [manager]): Pour protéger le manager par <a0>LL::NG</a0>, il suffit de mettre ceci dans le fichier de configuration <c1>lemonldap-ng.ini</c1> (section [manager]) : To protect the manager, you have to choose one or both of : Pour protéger le manager, il faut choisir l'une où les deux solutions : To refresh it, you have to set an handler on the same server to use the refresh mechanism or to restart the server after each configuration change. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement. To see available actions, do: Pour connaître les actions possibles, lancer : To skip headers for both kind of users, use the <c1>skip</c1> rule. Pour conserver les en-têtes dans les deux cas, utiliser la règle <c1>skip</c1>. To stack several times the same module, use ”#name” with different names. Pour empiler plusieurs fois le même module, utiliser ”#nom” avec différents noms. To summarize, to get the user connected trough the <c0>Auth-User</c0> <a1>HTTP</a1> Header, use this Sping Security configuration: En résumé, pour connecter les utilisateurs vie l'entête <a1>HTTP</a1> <c0>Auth-User</c0>, utiliser cette configuration de Spring Security : To summary available options: Pour résumer les options disponibles : To switch to another authentication backend, use the <a3>Multi</a3> module, for example: <c4>Multi <a5>SSL</a5>;<a6>LDAP</a6></c4> Pour basculer vers un autre backend d'authentification, utiliser le module <a3>Multi</a3>, par exemple : <c4>Multi <a5>SSL</a5>;<a6>LDAP</a6></c4> To test this, you can build your own WebID certificate using one of : Pour tester ceci, on peut se construire son propre certificat WebID en utilisant au choix : To turn it off, go in Manager and set 0 in Advanced Parameters > Login History > Activation. Pour l'éteindre, aller dans le manager et la désactiver dans Paramètres avancés > Historique de connexion > Activation. To update translations, ask to <a0>lemonldap-ng-dev@ow2.org</a0> to update your files. Pour télécharger les traductions, demandez à <a0>lemonldap-ng-dev@ow2.org</a0> pour les mettres en ligne. To use Active Directory as <a0>LDAP</a0> backend, you must change few things in the manager : Pour utiliser Active Directory comme serveur <a0>LDAP</a0>, vous devez effectuer quelques modifications dans le manager : To use Active-Directory as <a0>LDAP</a0> backend, you must change few things in the manager : Pour utiliser Active-Directory comme serveur <a0>LDAP</a0>, vous devez effectuer quelques modifications dans le manager : To use LemonLDAP::NG, you have to run an Apache server compiled with mod-perl Pour utiliser LemonLDAP::NG, il faut disposer d'un serveur compilé avec mod-perl To use TLS, set <c0>ldap+tls://server</c0> and to use LDAPS, set <c1>ldaps://server</c1> instead of server name. Pour utiliser TLS, utiliser <c0>ldap+tls://server</c0> et pour utiliser LDAPS, indiquer <c1>ldaps://server</c1> au lieu du nom de serveur. To use a <a0>SQL</a0> backend, configure your <c1>lemonldap-ng.ini</c1> file (section configuration) : Pour utiliser un backend <a0>SQL</a0>, configurer le fichier <c1>lemonldap-ng.ini</c1> (section configuration) : To use custom files, delete links and copy them into your skin folder: Pour utiliser des fichiers personnalisés, effacer les liens et copier les fichiers dans le répertoire du thème : To use it (with MySQL for example), choose for example “Apache::Session::Browseable::MySQL” as “Apache::Session module” and use the following parameters: Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants : To use it (with MySQL for example), choose “Apache::Session::Browseable::MySQL” as “Apache::Session module” and use the following parameters: Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants : To use this feature only locally, edit <c0>lemonldap-ng.ini</c0> in section [all]: Pour utiliser cette fonctionnalité seulement localement, éditer <c0>lemonldap-ng.ini</c0> dans la section [all]: To work with <a0>LL::NG</a0> it requires: Pour fonctionner avec <a0>LL::NG</a0> il faut : Tomcat Tomcat Tomcat <a0>SSO</a0> Valve Une valve <a0>SSO</a0> Tomcat Tomcat valve Valve Tomcat Toolinux Toolinux Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Translations Traductions Translators Translators Translators that want to help us are welcome ! Les traducteurs qui veulent nous aider sont les bienvenus ! Trusted domains Domaines agréés Try <a0>http://test1.example.com</a0> or <a1>http://test2.example.com</a1> Essayez <a0>http://test1.example.com</a0> ou <a1>http://test2.example.com</a1> Try also to create a global notification (to the uid “allusers”), and connect with any user, the message will be prompted. Essayer alors de créer une notification globale (à l'utilisateur “allusers”), et se connecter avec n'importe quel compte, le message sera affiché. Twitter Twitter Twitter application key Clef d'application de Twitter Twitter application name Nom d'application Twitter Twitter application secret Secret d'application Twitter Twitter authentication level Niveau d'authentification de Twitter Twitter use <a1>OAuth</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Twitter, other applications can trust Twitter and let you in). Twitter utilise le protocole <a1>OAuth</a1> pour autoriser les applications à réutiliser son propre processus d'authentification (ce qui signifie que si vous êtes connecté à Twitter, d'autres applications peuvent agréer Twitter et vous laisser entrer). Two options are available: Deux options sont disponibles : Two steps here: Deux étapes ici : U U UCANSS UCANSS URL contains a non protected host URL contains a non protected host Unable to clear local cache Unable to clear local cache Uncheck it to disable <a1>SAML</a1> authentication (for example, if your Identity Provider is down). Le désélectionner désactive l'authentification <a1>SAML</a1> (à utiliser, si votre fournisseur d'identité est hors service). Uniform Resource Identifier Uniform Resource Identifier Uniform Resource Locator Uniform Resource Locator Unifying authentications (federation) Unifier les authentifications (fédération) Université de Limoges Université de Limoges Unoptimized for <a0>session explorer</a0> and <a1>single session</a1> features. Pas optimisé pour l'<a0>exlorateur de sessions</a0> et les fonctionnalités de <a1>session unique</a1>. Unprotect rule Règle "unprotect" Update translations Télécharger les traductions Update your /etc/hosts to map <a0>SSO</a0> URLs to localhost: Mettez à jour votre /etc/hosts pour faire correspondre les URLs du <a0>SSO</a0> à votre machine : Upgrade Mise à jour Upgrade from 1.1 Mise à jour depuis la version 1.1 Upgrade from 1.1 to 1.2 Mettre à jour de la version 1.1 vers la version 1.2 Upgrade from 1.2 Mise à jour depuis la version 1.2 Upgrade from 1.2 to 1.3 Mettre à jour de la version 1.2 vers la version 1.3 Upgrade from 1.3 Mise à jour depuis la version 1.3 Upgrade from 1.3 to 1.4 Mettre à jour de la version 1.3 vers la version 1.4 Upgrade to 1.0 Mise à jour vers la version 1.0 Upgrade to 1.1 Mise à jour vers la version 1.1 Upgrade to 1.2 Mise à jour vers la version 1.2 Upgrade to 1.3 Mise à jour vers la version 1.3 Usage Utilisation Use /adminSessions if the Handler need to modify the session, for example if you configured an idle timeout. Utiliser /adminSessions si l'agent doit modifier la session, par exemple si on configure un délai d'inactivité des sessions. Use <a0>our own Debian repository</a0>. Utiliser <a0>votre propre dépôt Debian</a0>. Use <a0>our own YUM repository</a0>. Utiliser <a0>votre propre dépôt YUM</a0>. Use <a0>packages provided by Debian</a0>. Utiliser les <a0>paquets fournis par Debian</a0>. Use Apache::Session::Browseable Utiliser Apache::Session::Browseable Use Kerberos with Multiple authentication backend Utiliser Kerberos avec plusieurs backend d'authentification Use LDAP for configuration Utiliser LDAP pour la configuration Use LDAP for sessions Utiliser LDAP pour les sessions Use MySQL for Lemonldap::NG configuration Utiliser MySQL pour la configuration de Lemonldap::NG Use MySQL for Lemonldap::NG sessions Utiliser MySQL pour les sessions de Lemonldap::NG Use SOAP for Lemonldap::NG configuration Utiliser SOAP pour la configuration Lemonldap::NG Use SOAP for Lemonldap::NG sessions Utiliser SOAP pour les sessions Lemonldap::NG Use Safe Jail Utiliser la cage sécurisée Use XForwardedFor for <a0>IP</a0> Utiliser XForwardedFor comme <a0>IP</a0> cliente Use comment to correct this: Utiliser des commentaires pour corriger ça : Use custom functions Utiliser les fonctions personnalisées Use extended functions Utiliser les fonctions étendues Use it Les utiliser Use of any user session information to build access rule N'importe quelle donnée utilisateur peut être utilisée pour construire la règle Use redirect on error Utiliser les redirections en cas d'erreur Use rule comments to order your rules Utiliser les commentaires pour ordonner les règles Use the name you want but this values as value. Utiliser n'importe quel nom de clef mais ces valeurs dans le champ « valeur ». Use the name you want but this values in the value field. Utiliser n'importe quel nom de clef mais ces valeurs dans le champ « valeur ». Use with caution. À utiliser avec précaution. Use “<a0>LDAP</a0>” as authentication and userDB backends, Utiliser “<a0>LDAP</a0>” comme systèmes d'authentification et de gestion utilisateurs, Use “Active Directory” as authentication, userDB and passwordDBbackends, Utiliser “Active Directory” comme systèmes d'authentification, de gestion des utilisateurs et des mots-de-passe, User ID User ID User XXXX was not granted to open session User XXXX was not granted to open session User authenticates on Portal L'utilisateur d'authentifie sur le portail User backend Module utilisateurs User can now access to the protected application L'utilisateur peut maintenant accéder aux applications User choice done if <a0>authentication choice</a0> was used Choix de l'utilisateur si le <a0>backend d'authentification Choice</a0> a été utilisé User clicks on the link <c0>Reset my password</c0> L'utilisateur clique sur le lien <c0>Réinitialiser mon mot-de-passe</c0> User clicks on the logout link in Portal L'utilisateur clique sur le bouton déconnexion du portail User enters his email (or another information) in the password reset form L'utilisateur entre son adresse de courriel (ou une autre information) dans le formulaire de réinitialisation User found from login process Nom d'utilisateur trouvé dans le processus d'authentification User has no access authorization: FORBIDDEN (403) L'utilisateur ne dispose pas de droits d'accès : FORBIDDEN (403) User interfaces Interfaces utilisateur User is redirected on portal and his <a0>SSO cookies</a0> is empty L'utilisateur est redirigé vers le portail et son <a0>cookie SSO</a0> est vide User is redirected on protected application, with his new cookie L'utilisateur est redirigé vers l'application demandée avec son nouveau cookie User module Module utilisateurs User name session field Champ de session stockant le nom d'utilisateur User owns <a0>SSO cookies</a0> on the main domain (see <a1>Login kinematics</a1>) Les utilisateurs possèdent des <a0>cookies SSO</a0> dans le domaine principal (voir la <a1>cinématique de connexion</a1>) User owns <a0>SSO cookies</a0> on the main domain (see <s1><a2>Login kinematics</a2></s1>) L'utilisateur dispose d'un <a0>cookie SSO</a0> dans le domaine principal (voir la <s1><a2>cinématique de connexion</a2></s1>) User password is now available in <c0>$_password</c0> variable. Le mot-de-passe utilisateur est désormais disponible dans la variable <c0>$_password</c0>. User provisioning (account auto creation at first connection) Importation des comptes utilisateurs (auto-création à la première connexion) User rejected because VirtualHost XXXX has no configuration User rejected because VirtualHost XXXX has no configuration User table Table utilisateurs User table: where user data are stored (mail, name, etc.) La table utilisateurs : où les données utilisateurs sont stockées (mail, nom, etc.) User tracking in Apache logs Traçabilité des utilisateurs dans les journaux d'Apache User tracking in Apache logs or syslog Traçabilité des utilisateurs dans les journaux d'Apache ou via syslog User tries to access a protected application in a different domain L'utilisateur tente d'accéder à une application protégée d'un autre domaine User tries to access protected application, his request is catched by Handler Lorsqu'un utilisateur tente d'accéder à une application protégée, il est intercepté par l'agent (handler) User tries to access to an application in the secondary <a0>LL::NG</a0> structure without having a session in this area Un utilisateur essaie d'accéder à une application du système <a0>LL::NG</a0> secondaire sans avoir de session dans cette aire User-Email User-Email User: can answer to surveys User : peut répondre aux surveillances UserName UserName UserName -> ... UserName -> ... UserName -> user Password -> password Index -> ipAddr uid UserName -> user Password -> password Index -> ipAddr uid Userlogout => logout_sso Userlogout => logout_sso Users Utilisateurs Users can see their own history in menu, if menu module <c0>Login history</c0> is enabled. Les utilisateurs peuvent voir leur historique dans le menu, si le module <c0>historique de connexion</c0> est activé. Users module: <a0>SAML</a0> Module utilisateurs : <a0>SAML</a0> Users: collect data transfered in <a0>HTTP</a0> headers by the “master”. Utilisateurs : collecte les données transférées par en-tête <a0>HTTP</a0> par le “maître”. Users: will not collect any data (but you can still register environment variables in session) Utilisateurs : ne collecte aucune donnée (mais il est possible d'enregistrer des variables d'environement dans la session) Using <a0>LL::NG</a0> in reverse proxy mode, you will not have the <c1>REMOTE_USER</c1> environment variable set. Lorsque <a0>LL::NG</a0> est utilisé en mode reverse-proxy, la variable d'environnement <c1>REMOTE_USER</c1> n'est pas renseignée. Using Active-Directory as authentication backend Utiliser Active-Directory comme système d'authentication Using Kerberos Utiliser Kerberos Using LemonLDAP::NG with Active-Directory Utiliser Lemonldap::NG avec Active-Directory Using Lemonldap::NG with Active-Directory Utiliser Lemonldap::NG avec Active-Directory Using Redis, you just have to add the “Index” parameter in <c0>General parameters</c0> » <c1>Sessions</c1> » <c2>Session storage</c2> » <c3>Apache::Session module</c3> : Pour utiliser Redis, il faut ajouter le paramètre “Index” dans <c0>Paramètres généraux</c0> » <c1>Sessions</c1> » <c2>Stockage des sessions</c2> » <c3>Module Apache::Session</c3> : Using Redis, you just have to prepare Redis database. Pour utiliser Redis, il faut preparer la base de données. Using notification system Utiliser le système de notification Using this feature, you don't have to use virtual host protection: protection is embedded in Lemonldap::NG::Handler::<a0>CGI</a0>. En utilisant cette fonctionnalité, il n'est pas nécessaire d'utiliser la protection de l'hôte virtuel : la protection est embarquée dans Lemonldap::NG::Handler::CGI. Using this, we can do a very simple interoperability system between 2 organizations using two <a0>LL::NG</a0> structures: En utilisant ce système, on peut avoir une simple interopérabilité entre 2 organisations utilisant chacune leur système <a0>LL::NG</a0> : V V Validation of the session: external user has now a local session Validation de la session : l'utilisateur externe dispose ainsi d'un session locale Value (<a0>HTTP</a0> header name) Valeur (nom d'en-tête <a0>HTTP</a0>) Value: <c0>$sn + ”, ” + $gn</c0> Valeur: <c0>$sn + ”, ” + $gn</c0> Value: <c0>$uid</c0> Valeur : <c0>$uid</c0> Variable name Nom de Variable Variables Variables Variables are stored in the user session. Les variables sont stockées dans la session utilisateur. Variables can be used in rules and headers. Les variables peuvent être utilisées dans les règles et en-têtes. Variables that can be used in rules and headers Variables qui peuvent être utilisées dans les règles et en-têtes Verify that: Verifier que : Version 1.0 Version 1.0 Virtual host Hôte virtuel Virtual host in Apache Hôte virtuel dans Apache W W WSDL file Fichier WSDL Warning: key is not defined, set it in the manager ! Warning: key is not defined, set it in the manager ! We advice to create a specific <a0>LDAP</a0> account with write access on configuration branch. Il est recommandé de créer un compte <a0>LDAP</a0> spécifique qui peut écrire dans la branche de configuration. We advice to deactivate other options, cause users will use <a0>LL::NG</a0> portal to modify or reset their password. Il est conseillé de désactiver les autres options, car les utilisateurs utiliseront le portail <a0>LL::NG</a0> pour modifier ou réinitialiser leur mot-de-passe. We call “database” a backend where we can read or write a data. Nous appelons “base de données” un dispositif dans lequel nous pouvons lire et écrire des données. We can distinguish several kind of variables: On peut distinguer plusieurs types de variables : We directly use <a0>HTTP</a0> headers to fill default user profile. On utilise les en-têtes <a0>HTTP</a0> pour trouver le profil utilisateur par défaut. We include some template files that can be customized: Nous incluons des fichiers modèles qui peuvent être personnalisés : We now configure multiple condition with specific messages, not just one opening condition On configure maintenant de multiple conditions avec des messages particuliers, et pas seulement une seule condition d'ouverture We recommend using EPEL repository. Nous recommandons l'emploi du dépôt EPEL. We split databases in two categories: Nous scindons les bases de données en deux catégories : We suppose that LimeSurvey is installed in /var/www/html/limesurvey On suppose que LimeSurvey est installé dans /var/www/html/limesurvey We use <a0>OW2 JIRA</a0> to list bugs and features. Nous utilisons <a0>OW2 JIRA</a0> pour tous les bogues et fonctionnalités. We will explain how to use the latest: <a0>HTTP Auth</a0>. Nous expliquons ici comment utiliser le dernier : <a0>HTTP Auth</a0>. We will use the macros to do that. On utilise les macros pour ça. We're studying a future solution for this… Une solution est à l'étude pour ça… Web based for normal users: Basé sur du web pour les utilisateurs normaux : Web sites install : Installer les sites web : Web::ID::Certificate::Generator Web::ID::Certificate::Generator WebID WebID When <a0>LL::NG</a0> is configured as OpenID identity provider, users can share their authentication using [PORTAL]/openidserver/[login] where: Lorsque <a0>LL::NG</a0> est configuré en fournisseur d'identité OpenID, les utilisateurs peuvent partager leur authentification en utilisant [PORTAIL]/openidserver/[login] où : When <a0>writing rules and headers</a0>, you can use <a1>Perl</a1> expressions that will be evaluated in a jail, to prevent bad code execution. En <a0>écrivant des règles et en-têtes</a0>, on peut utiliser des expressions <a1>Perl</a1> qui seront évaluées dans une cage pour prévenir les codes malveillants. When <c0>Choice</c0> is selected for authentication, values for Users and Password modules are not used anymore. Lorsque <c0>Choice</c0> est selectionné pour l'authentification, les valeurs pour les modules utilisateur et mots-de-passe ne sont plus utilisées. When a user access a Handler without a cookie, he is redirected on portal, and the target <a0>URL</a0> is encoded in redirection <a1>URL</a1> (to redirect user after authentication process). Lorsqu'un utilisateur accède à un agent sans cookie, il est redirigé vers le portail, et l'<a0>URL</a0> cible est encodée dans l'<a1>URL</a1> de redirection (pour rediriger l'utilisateur après authentification). When all is ok, click on <c0>Create</c0>. Lorsque tout est bon, cliquer sur <c0>Créer</c0>. When all modifications are done, click on <c0>Save</c0> to store configuration. Lorsque toutes les modifications sont effectuées, cliquer sur <c0>Sauver</c0> pour enregistrer la configuration. When installing <a0>LL::NG</a0>, the Manager can only be accessed with the demo account <c1>dwho</c1> This How To explains how change this default behavior to protect Manager with other rules. Lorsqu'on install <a0>LL::NG</a0>, le manager n'est accessible que via le compte de démonstration <c1>dwho</c1>. Ce document explique comment changer ce comportement par défaut pour protéger le manager avec d'autres règles. When installing <a0>LL::NG</a0>, the Manager can only be accessed with the demo account <c1>dwho</c1>. Lorsqu'on installe <a0>LL::NG</a0>, le manager n'est accessible que via le compte de démonstration <c1>dwho</c1>. When it takes “false”, <a1>HTTP</a1> headers have to be sent by <a2>LL::NG</a2> to make authentication. Lorsqu'il est à “false”, les en-têtes <a1>HTTP</a1> doivent être renseignés par <a2>LL::NG</a2> pour valider l'authentification. When modifying a value, always click on the <c0>Apply</c0> button if available, to be sure the value is saved. Lorsqu'une valeur est modifiée, cliquer toujours sur le bouton <c0>Appliquer</c0> s'il est affiché pour être sûr que la valeur soit sauvegardée. When portal is installed, a file named portal.wsdl is created. Lorsque le portail est installé, un fichier nommé portal.wsdl est créé. When receiving the request, the real authentication context will be mapped ton an internal authentication level (see <a1>how configure the mapping</a1>), that you can check to allow or deny session creation. À la réception de la requête, le contexte d'authentification réel est traduit en un niveau d'authentification interne (voir <a1>comment configurer la translation</a1>), utilisable pour accorder ou non la création de session. When session is granted, the Handler will then check the authorizations like the standard Handler. Lorsque la session est validée, l'agent examine les autorisations comme un agent standard. When status feature is activated, Handlers and portal will collect statistics and save them in their local cache. Lorsque la fonctionnalité "status" est activée, les agents et le portail collectent des statistiques et les sauvegardent dans le cache local When the text is pasted, click on the Apply button to keep the value. Lorsque le texte est collé, cliquer sur le bouton appliquer pour sauver la valeur. When the user accept the notification, the reference is stored in his persistent session. Lorsque l'utilisateur accepte la notification, la référence est stockée dans ses données de session persistentes. When using this module, <a0>LL::NG</a0> portal will be called only if Apache does not return “401 Authentication required”, but this is not the Apache behaviour: if the auth module fails, Apache returns 401. En utilisant ce module, le portail <a0>LL::NG</a0> est appelé uniquement si Apache ne retourne pas “401 Authentication required”, aucune bascule n'est donc possible. When you change cookie expiration time, it is written on the user hard disk unlike session cookie Lorsqu'on change la durée de vie du cookie, il est écrit sur le disque dur de l'utilisateur contrairement à un cookie de session When you commit <a0>OmegaT</a0> files in svn repository, don't push backup files. Lorsque vous validez les fichiers <a0>OmegaT</a0> dans le dépôt svn, n'y poussez pas les fichiers de sauvegarde. When you know the key of the variable, you just have to prefix it with the dollar sign to use it, for example to test if <c0>uid</c0> variable match <c1>coudot</c1> : En connaissant le nom d'une variable, il suffit de la préfixer avec un signe dollar pour l'utiliser, par exemple pour savoir si la variable <c0>uid</c0> contient <c1>coudot</c1> : When you set a parameter in <c0>lemonldap-ng.ini</c0>, it will override the parameter from the global configuration. Lorsqu'un paramètre et fixé dans <c0>lemonldap-ng.ini</c0>, il surcharge le paramètre issu de la configuration globale. When you use <a0>SOAP sessions backend</a0>, it is recommended to use read-only <a1>URL</a1> (<a2>http://portal/index.pl/sessions</a2>). Lorsqu'on utilise le <a0>backend de session SOAP</a0>, il est recommandé d'utiliser l'<a1>URL</a1> en lecture seule (<a2>http://portal/index.pl/sessions</a2>). When you use the multiple sessions restriction parameters, sessions are parsed for each authentication unless you use an <a0>Apache::Session::Browseable</a0> module. Lorsque sont activées les paramètres de restriction d'ouverture de session, celles-ci sont toutes examinées à chaque nouvelle authentification sauf lorsqu'un module de la famille <a0>Apache::Session::Browseable</a0> est utilisé. Wiki Wiki Wildcard Carte blanche Windows Windows Windows 2003 server: Windows 2003 server : Windows 2008 server: Windows 2008 server : With <a1>LDAP</a1>, login, mail, first name and last name are required attributes. Avec <a1>LDAP</a1>, login, mail, nom et prénom dont des attributs exigés. With OpenLDAP, you can use the <a1>memberof overlay</a1> to do it automaticaly. Avec OpenLDAP, vous pouvez utiliser <a1>memberof overlay</a1> qui le fera automatiquement. With RPM Avec RPM With YUM Avec YUM With apt-get Avec apt-get With aptitude Avec aptitude With dpkg Avec dpkg With the above solution, all the Drupal site will be protected, so no anonymous access will be allowed. Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé. With this organization, you can set roles to user within specific application. Avec cette organisation, on peut définir les rôles de l'utilisateur au sein de chaque application. Wordpress, GLPI, OBM, Dokuwiki, … Wordpress, GLPI, OBM, Dokuwiki, … World Wide Web World Wide Web Write custom functions library Écrire une librairie de fonctions personnalisées Write good rules Écrire de bonnes règles Write session path is needed only if you use a remote session explorer or a remote portal Le chemin d'écriture de session n'est nécessaire que si on utilise un explorateur de session ou un portail distant Writing rules and headers Écrire les règles et en-têtes X509 X509 XML menu configuration is deprecated. XML menu configuration is deprecated. XSS attack detected XSS attack detected XXXX was not found in tree XXXX was not found in tree Xavier GUIMARD Xavier GUIMARD Xavier GUIMARD<br0/> Xavier GUIMARD<br0/> YUM YUM YUM repository Dépôt YUM You <s1>must</s1> provide a full <a2>URI</a2> (for example /skins/common/lemonldap-ng_square.png) and use HTTPS on the portal <s1>Il faut</s1> fournir une <a2>URI</a2> complète (par exemple /skins/common/lemonldap-ng_square.png) et utiliser HTTPS pour le portail You also need to know the technical name of configuration parameter to do this. Il est également nécessaire de connaître le nom technique du paramètre de configuration pour le faire. You can add a link in <a0>application menu</a0> to display Google Apps to users. Il est possible d'ajouter un lien dans le <a0>menu application</a0> pour afficher Google Apps. You can add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : You can add this YUM repository to get recent packages: Ajouter ces dépôts YUM pour obtenir les paquets récents : You can add this object class to any entry of your directory. Cette classe d'objets peut être ajoutée à toute entrée de l'annuaire. You can add this repository to have recent packages: Ajouter ce dépôt pour avoir les paquets les plus récents : You can add, delete or modify a virtual host here. Il est possible d'ajouter, effacer ou modifier un hôte virtuel ici. You can allow these users instead of reject them: On peut autoriser ces utilisateurs au lieu de les rejeter : You can also adapt Apache access control: On peut également adapter le contrôle d'accès d'Apache : You can also add a condition. Il est possibe d'ajouter une condition. You can also add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : You can also add some other parameters On peut également ajouter quelques autres paramètres You can also change the host and port with options LDAPHOST and LDAPPORT. Vous pouvez aussi changer le nom d'hôte et le port avec les options LDAPHOST et LDAPPORT. You can also choose a different session module to split <a0>SSO</a0> sessions and <a1>SAML</a1> sessions. Vous pouvez également utiliser un module différent pour répartir les sessions <a0>SSO</a0> et <a1>SAML</a1>. You can also configure jetlag (if all of your users use the same timezone): On peut aussi configurer jetlag (si tous les utilisateurs utilisent le même fuseau): You can also configure the authentication level for this module. il est également possible de configurer le niveau d'authentification pour ce module. You can also copy/paste the metadata: just click on the Edit button. Il est également possible de copier-coller les métadatas : cliquer simplement sur le bouton éditer. You can also delete some notifications with <a0>SOAP</a0>, once <a1>SOAP</a1> is activated: On peut également effacer certaines notifications avec <a0>SOAP</a0>, si <a1>SOAP</a1> est activé : You can also disable internal Sympa authentication to keep only LemonLDAP::NG by removing user_table paragraph Il est également possible de désactiver l'authentification interne de Sympa pour ne garder que celle de LemonLDAP::NG en supprimant le paragraphe user_table You can also display a check box on the authentication form, to allow user to see their login history before beeing redirected to the protected application (see <a0>portal customization</a0>). on peut aussi afficher une case à cocher dans le formulaire d'authentification pour autoriser l'utilisateur à voir son historique de connexion avant d'être redirigé vers l'application protégée (voir la <a0>personnalisation du portail</a0>). You can also find on this page the SVN tarball if you want to test latest features. On peut aussi trouver sur cette page l'archive SVN pour tester les dernières évolutions. You can also get the <a0>LemonLDAP::NG archive</a0> and make the package yourself: On peut également construire les paquets à partir de l'<a0>archive LemonLDAP::NG</a0> : You can also pass parameters to the make install command, with this syntax: On peut aussi passer des paramètres à la commande make install, avec cette syntaxe : You can also use <portal>?logout=1 as logout_url to remove LemonLDAP::NG session when “disconnect” is chosen. On peut aussi utiliser <portal>?logout=1 comme URL de déconnexion pour supprimer la session LemonLDAP::NG lorsque la déconnexion est demandée. You can also use Facebook as user database. On peut également utiliser Facebook comme base de données utilisateurs. You can also use WebID as user database. On peut également utiliser WebID comme base de données utilisateurs. You can also use a Fast <a0>CGI</a0> server using index.fcgi given in portal examples. On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail. You can also use a FastCGI server using index.fcgi given in portal examples. On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail. You can also use caFile and caPath parameters. On peut également utiliser les paramètres caFile et caPath. You can also use different user/password for your servers by overriding parameters <c0>globalStorage</c0> and <c1>globalStorageOptions</c1> in lemonldap-ng.ini file. On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres <c0>globalStorage</c0> et <c1>globalStorageOptions</c1> dans le fichier lemonldap-ng.ini. You can also use symbolic links in <c0>conf.d</c0> Apache directory. On peut aussi utiliser des liens symboliques dans le répertiore <c0>conf.d</c0> d'Apache. You can also use the <a0>internal proxy</a0> to replace Apache mod_proxy configuration. On peut aussi utiliser le <a0>proxy interne</a0> pour remplacer mod_proxy d'Apache. You can also use the binary value from the logonHours attribute of Active Directory La valeur binaire de l'attribut logonHours d'Active Directory peut également être utilisée You can also use the same user for all. On peut également utiliser le même compte pour tous. You can also use yum on local RPMs file: On peut aussi utiliser yum sur des fichiers RPMs locaux : You can avoid this by setting “memberOf” fields in your <a2>LDAP</a2> scheme: Vous pouvez contourner cette dificulté en utilisant les champs “memberOf” dans votre schéma <a2>LDAP</a2> : You can change default parameters using the “notificationStorage” and “notificationStorageOptions” parameters with the same syntax as configuration storage parameters. On peut changer les paramètres par défaut en utilisant les paramètres “notificationStorage” et “notificationStorageOptions” avec la même syntaxe que les paramètres de stockage de la configuration. You can change it quick with a sed command. On peut le changer rapidement par une commande sed. You can change the default skin in Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Default skin</c3>. On peut changer le thème par défaut dans le manager : <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Skin</c3>. You can change the graphical aspect of the Manager, by clicking on the <c0>Menu style</c0> button. L'aspect graphique du manager peut être modifié en cliquant sur le bouton <c0>style de menu</c0>. You can change the separator with the <c2>fileNameSeparator</c2> option, and set another value, for example <c3>@</c3>. On peut changer ce séparateur en changeant la valeur de l'option <c2>fileNameSeparator</c2> par exemple <c3>@</c3>. You can change the skin in Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Skin</c3>. On peut changer le thème dans le manager : <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Skin</c3>. You can change this behavior and set a cookie duration, for example: On peut changer ce comportement et mettre une durée de vie, par exemple : You can choose other Makefile targets: On peut choisir d'autres cibles du Makefile : You can choose to install only one component by choosing the package <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> or <c2>lemonldap-ng-manager</c2>. On peut n'installer qu'un seul composant en choisissant le paquet <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> ou <c2>lemonldap-ng-manager</c2>. You can choose to store LemonLDAP::NG configuration in an <a0>LDAP</a0> directory. On peut choisir de stocker la configuration de LemonLDAP::NG dans un annuaire <a0>LDAP</a0>. You can configure here which field of <a2>LL::NG</a2> session will be associated to a NameID format. Vous pouvez indiquer ici l'attribut de session de <a2>LL::NG</a2> qui sera associé au format du NameID. You can create a <a0>SOAP</a0> only portal by setting “soapOnly = 1” in lemonldap-ng.ini (section PORTAL) On peut créer un portail uniquement <a0>SOAP</a0> en positionnant “soapOnly = 1” dans lemonldap-ng.ini (section PORTAL) You can create a special virtual host and use <a0>Apache rewrite module</a0> to switch between open and protected hosts: Vous pouvez créer un hôte virtuel particulier et utiliser <a0>le module rewrite d'Apache</a0> pour choisir entre le site ouvert et le protégé : You can create your own <a4>XSLT</a4> file and store in another place, for example /etc/lemonldap-ng. On peut créer son propre fichier <a4>XSLT</a4> et le stocker à un autre endroit, par exemple /etc/lemonldap-ng. You can customize logs by redefining userNotice() and userError() methods, directly in <c0>lemonldap-ng.ini</c0> On peut personnaliser les fonctions de journalisation en redéfinissant les méthodes userNotice() et userError(), directement dans <c0>lemonldap-ng.ini</c0> You can define how many logins and failed logins will be stored. On peut définir le nombre de connexions et d'échecs à stocker. You can define keys for <a0>SAML</a0> message signature and encryption. Vous pouver définir des clefs pour la signature et le chiffrement des messages <a0>SAML</a0>. You can define more than one form replay <a0>URL</a0> per virtual host. Il est possible de définir plusieurs <a0>URL</a0> de rejeu de formulaires par hôte virtuel. You can do it either by uploading the file, or get it from IDP metadata <a0>URL</a0> (this require a network link between your server and the IDP): Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas de l'IDP (à condition d'avoir un lien réseau entre le serveur et l'IDP): You can do it either by uploading the file, or get it from SP metadata <a0>URL</a0> (this require a network link between your server and the SP). Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas du SP (à condition d'avoir un lien réseau entre le serveur et le SP): You can download the code here: <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> Il est possible de télécharger le code ici : <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> You can enter a password to protect private key with a password. Vous pouvez entrer un mot de passe de protection de la clef privée. You can find all suitable information here: <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> Les informations appropriées se trouvent ici : <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> You can find all versions on <a0>OW2 forge download page</a0>. Vous pouvez trouver toutes les versions sur <a0>la page de téléchargement de la forge OW2</a0>. You can first check on <a1>LemonLDAP::NG JIRA project</a1> that your bug is not already referenced, and then create it (with a registered account). Commencez par vérifier sur <a1>le site JIRA du projet LemonLDAP::NG</a1> que votre bogue n'est pas déjà référencé, et créez le sinon (avec un compte préalablement créé). You can fix default values by editing these values in <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1>: On peut fixer les valeurs par défaut en éditant ces valeurs dans le fichier <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1> : You can for example set up a fail-over cluster with <a0>Heartbeat</a0> and <a1>HAproxy</a1>, like this: Par exemple on peut créer un cluster avec <a0>Heartbeat</a0> et <a1>HAproxy</a1> : You can import a certificate containing the public key instead the raw public key. Vous pouver importer un certificat contenant la clef publique au lieu d'une simple clef. You can inspect a user session with the sessions explorer (in Manager) On peut inspecter une session utilisateur avec l'explorateur de sessions (accessible depuis le manager) You can install Lemonldap::NG using <a0>packages</a0> (rpm or deb) or by hand as described below. Vous pouvez installer Lemonldap::NG en utilisant des <a0>paquets</a0> (rpm ou deb) ou à la main comme décrit ci-après. You can install Lemonldap::NG using <a0>packages</a0> (rpm or deb) or by hand as described here : Vous pouvez installer Lemonldap::NG en utilisant des <a0>paquets</a0> (rpm or deb) à la main : You can manage roles with the <a0>RBAC model</a0> or by using groups. On peut gérer les rôles avec le <a0>modèle RBAC</a0> ou en utilisant les groupes. You can modify location of default storage configuration file in configure target: On peut modifier l'emplacement du fichier de configuration du stockage par défaut dans la cible configure : You can modify the default behavior for people without value in ssoLogonHours. Il est possible de modifier le comportement par défaut pour les utilisateurs ne disposant pas d'une valeur ssoLogonHours. You can name your module as you want, for example <c1>SSOExtensions.pm</c1>: Le module peut être appelé à la diligence du rédacteur, par exemple <c1>SSOExtensions.pm</c1> : You can not start with an empty configuration, so read <a0>how to change configuration backend</a0> to convert your existing configuration into another one. On ne peut démarrer avec une configuration vide, il faut donc lire <a0>comment changer de backend de configuration</a0> pour convertir une configuration existante en une autre. You can now the upload the certificate (<c0>cert.pem</c0>) on Google Apps. Télécharger ensuite le certificat (<c0>cert.pem</c0>) dans Google Apps. You can now use your function in a macro, an header or an access rule, for example: Les fonctions peuvent être utilisées dans une macro, un en-tête ou une règle d'accès, par exemple: You can prefix the key name with a digit to order them. Il est possible d'ordonner les noms de clefs en utilisant un préfixe numérique. You can preselect IDP with an IDP resolution rule. Il est possible de pré-selectionner l'IDP par une règle de résolution. You can refer to <a0>parameter list</a0> to find it. Se référer à la <a0>liste des paramètres</a0> pour le trouver. You can see the video here: <a0>http://marcelhaise.com/rmll2009/#LemonLDAP</a0> Vous pouvez consulter la vidéo ici : <a0>http://marcelhaise.com/rmll2009/#LemonLDAP</a0> You can set a custom logo by choosing <c1>My logo</c1>, set the logo file name, and copy the logo file in portal applications logos directory On peut sélectionner un logo personnalisé en choisissant <c1>Mon logo</c1>, en indiquant le nom du fichier et en le copiant dans le répertoire des logos des applications You can set one or several <a3>IP</a3> addresses, separated by spaces, or let this parameter empty to disable the checking. Plusieurs adresses <a3>IP</a3> separées par des espaces peuvent être entrées, ou ce paramètre peut rester vide pour désactiver ce contrôle. You can set the default access to: Il est possible de mettre l'accès par défaut à : You can set them the same way: On peut les renseigner par la même voie : You can share your configuration over the network using <a0>SOAP</a0> proxy system. On peut partager la configuration à travers le réseau en utilisant le système mandataire <a0>SOAP</a0>. You can show them using <a0>Facebook Graph API explorer</a0> On peut les voir en utilisant l'<a0>explorateur de l'API Graph de Facebook</a0> You can simply checkout sources with the following command: Utilisez simplement la commande suivante pour télécharger les sources : You can test any <a0>URL</a0> to see if it's protected using testUri(). On peut tester toute <a0>URL</a0> pour voir si elle est protégée en utilisant testUri(). You can then add the Manager as <a0>an application in the menu</a0>. On peut aussi ajouter le manager dans les <a0>applications du menu</a0>. You can then choose any other module for users and password but if you want to totally delegate authentication to BrowserID, choose <a0>None</a0> for users and password. On peut ensuite choisir n'importe quel autre module de gestion des utilisateurs et des mots-de-passe mais pour déléguer totalement l'authentification à BrowserID, choisir <a0>None</a0> pour la gestion des utilisateurs et des mots de passe. You can then choose any other module for users and password. Vous pouvez ensuite choisir vos modules d'utilisateurs et de mots-de-passe. You can then set the access rule. Définir ensuite les règles d'accès. You can then use this default <a0>SSL</a0> configuration, for example in the head of /etc/lemonldap-ng/portal-apache2.conf: Il est possible d'utiliser cette configuration <a0>SSL</a0> par défaut, par exemple en tête de /etc/lemonldap-ng/portal-apache2.conf : You can use #PORTAL# in values to replace the portal <a0>URL</a0>. Vous pouvez utiliser le mot clef #PORTAL# dans les valeurs pour remplacer l'<a0>URL</a0> du portail. You can use '*' character. On peut utiliser le caractère '*'. You can use <c0>0</c0> or <c1>1</c1> to disable/enable the module, or use a more complex rule. On peut utiliser <c0>0</c0> ou <c1>1</c1> pour activer/désactiver chaque module ou utiliser une règle plus complexe. You can use LemonLDAP::NG in an heterogeneous world: the authentication portal and the manager can work in any version of Apache even if mod_perl is not compiled, with ModPerl::Registry or not,… or behind any web server able to launch CGIs. On peut utiliser LemonLDAP::NG dans un monde hétérogène : le portail d'authentification et le manager peuvent fonctionner sur n'importe quelle version d'Apache même si mod_perl n'est pas compilé, avec ModPerl::Registry ou non,… ou derrière n'importe quel serveur apte à lancer des CGIs. You can use LemonLDAP::NG in an heterogeneous world: the authentication portal and the manager can work in any version of Apache even if mod_perl is not compiled, with ModPerl::Registry or not… Only the handler need mod_perl 2. On peut utiliser LemonLDAP::NG dans un monde hétérogène : le portail d'authentification et le manager peut fonctionner avec n'importe quelle version d'Apache même si mod_perl n'est pas compilé, avec ModPerl::Registry ou non,… Seul les agents ont besoin de mod_perl 2. You can use Null backend to bypass some authentication process steps. Le backend Null peut être utilisé pour sauter des étapes du processus d'authentication. You can use any of the mechanisms proposed by Apache: <a0>SSL</a0>, Auth-Basic, Kerberos,… Example On peut utiliser tous les mécanismes proposés par Apache : <a0>SSL</a0>, Auth-Basic, Kerberos,… Exemple You can use different dbiUser strings : Plusieurs chaînes dbiUser sont utilisables : You can use different type of access: <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> for servers in secured network and <a3>SOAP</a3> for remote servers. On peut utiliser différent typed d'accès : <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> pour les serveurs se trouvant sur le réseau sécurisé et <a3>SOAP</a3> pour les autres. You can use one or a combination of: On peut utiliser un ou plusieurs solution : You can use the following rules instead: On peut utiliser les règles suivantes à la place : You can use the same Facebook access token in your applications. On peut réutiliser le même ticket d'accès Facebook dans les applications. You can write <a0>rules</a0> matching any component of <a1>URL</a1> to protect including GET parameters, but be careful. On peut écrire des <a0>règles</a0> qui examine n'importe quel composant de l'<a1>URL</a1> à protéger y compris les paramètres GET, mais il faut faire attention. You can: Vous pouvez : You cannot use the <c0>unprotect</c0> rule because Drupal navigation is based on query strings (?q=admin, ?q=user, etc.), and unprotect rule only works on <a1>URL</a1> patterns. Vous ne pouvez pas utiliser la règle <c0>unprotect</c0> car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'<a1>URL</a1>. You have access to all environment variable, like user <a1>IP</a1> address. Toutes les variables d'environnement sont disponibles, telle l'adresse <a1>IP</a1> de l'utilisateur. You have then to declare <a0>HTTP</a0> headers exported by the main <a1>SSO</a1> (in “Variables » Exported Variables”). Déclarer ensuite les en-têtes <a0>HTTP</a0> exportés par le <a1>SSO</a1> principal dans “Variables » Variables exportées”. You have then to declare <a0>HTTP</a0> headers exported by the main <a1>SSO</a1> in “Variable » Exported Variables”. Déclarer ensuite les en-têtes <a0>HTTP</a0> exportés par le <a1>SSO</a1> principal dans “Variables » Variables exportées”. You have then to install all the downloaded packages: Il faut ensuite installer tous les paquets téléchargés : You have to change it to match your admin user (or use other conditions like group membership, or any other rule based on a session variable). Il faut la changer pour correspondre au nouvel administrateur (ou utiliser une autre conditions telle l'appartenance aux groupes ou tout autre règle basée sur des variables de session). You have to create the branch by yourself Il faut toutefois créer manuellement la branche You have to create the table by yourself: Il faut créer soi-même la table : You have to grant read/write access for the manager component. Il faut autoriser l'accès en lecture et écriture pour le manager. You have to include them in Apache main configuration, for example: Il faut les inclure dans la configuration d'Apache, par exemple : You have to install <c0>HttpAuthPlugin.php</c0> in the <c1>extensions/</c1> directory of your MediaWiki installation: Il faut installer <c0>HttpAuthPlugin.php</c0> dans le répertoire <c1>extensions/</c1> de MediaWiki : You have to install mod_ssl for Apache. Installer mod_ssl pour Apache. You have to install the corresponding <a0>Perl</a0> module. Il faut installer le module <a0>Perl</a0> correspondant. You have to register the media identifer in your user backend (<a0>LDAP</a0> or <a1>SQL</a1>) to match the yubikey with a real user. Il faut enregistrer le matériel dans le backend utilisateurs (<a0>LDAP</a0> ou <a1>SQL</a1>) pour le faire correspondre à un utilisateur. You have to run this command on Active Directory: Il faut lancer cette commande dans Active Directory: You have to set its value in Manager. Il faut en indiquer une dans le manager. You have to update them by yourself. Il faut les mettre à jour soi-même. You have to use “Multi” as authentication module. Il est possible d'utiliser le module d'authentification “Multi”. You just have to activate Notifications in the Manager (General Parameters > Advanced Parameters > Notifications > Activation) or in lemonldap-ng.ini: Il suffit d'activer les notifications dans le manager (Paramètres généraux > Paramètres avancés > Notifications > Activation) ou dans lemonldap-ng.ini : You just have to configure a directory writable by Apache user and set it in [configuration] section in your lemonldap-ng.ini file: Il suffit de configurer un répertoire accessible en écriture à l'utilisateur Apache et l'indiquer dans la section [configuration] du fichier lemonldap-ng.ini : You just have to create error_zz and msg_zz subroutines <e1>(where zz is your international code, example: “fr” for France)</e1> by copying error_en and msg_en. Vous avez simplement à créer les fonctions error_zz et msg_zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> en copiant error_en et msg_en. You just have to load <a3>LL::NG</a3> FastCGI support and write a loop in the <a4>CGI</a4>. Il suffit de charger le support FastCGI de <a3>LL::NG</a3> et d'écrire une boucle dans la <a4>CGI</a4>. You just have to load <a3>LL::NG</a3> fast <a4>CGI</a4> support and write a loop in the <a5>CGI</a5>. Il suffit de charger le support FastCGI de <a3>LL::NG</a3> et d'écrire une boucle dans la <a5>CGI</a5>. You just have to share configuration and sessions databases between those servers: Il faut juste partager les bases de données de configuration et des sessions entre ces serveurs : You just need to know the ID of the error (look at Portal/Simple.pm) and then add to <c0>lemonldap-ng.ini</c0>: Il suffit de connaître l'ID de l'erreur (voir Portal/Simple.pm) et de l'ajouter dans <c0>lemonldap-ng.ini</c0> : You may also create these macros to manage OBM administrator account (<c0>Variables</c0> » <c1>Macros</c1>): Il est également possible de créer ces macros pour gérer le compte administrateur OBM (<c0>Variables</c0> » <c1>Macros</c1>): You may rather use standards protocols like <a1>SAML</a1>, <a2>OpenID</a2> or <a3>CAS</a3>. Il est préférable d'utiliser des protocoles standards tels <a1>SAML</a1>, <a2>OpenID</a2> ou <a3>CAS</a3>. You may use the <a1>securedCookie</a1> options to avoid session hijacking. Il est recommandé d'utilisé les options <a1>securedCookie</a1> pour éviter le vol de session. You may use the <a2>securedCookie</a2> options to avoid session hijacking. Vous devriez utilisez les options <a2>securedCookie</a2> pour éviter le vol de session. You may want to use the <a0>Mutliple authentication backend</a0> to fail back to another authentication for user without Kerberos ticket. On peut souhaiter utiliser le <a0>backend d'authentification multiple</a0> pour retomber sur un autre système d'authentification pour les utilisateurs sans ticket Kerberos. You might want to display different skin depending on the <a0>URL</a0> that was called before being redirected to the portal, or the <a1>IP</a1> address of the user. On peut vouloir utiliser différents thèmes en fonction de l'<a0>URL</a0> demandée avant la redirection au portail ou en fonction de l'adresse <a1>IP</a1> de l'utilisateur. You must allow access to Manager <a0>IP</a0>. Il faut autoriser l'accès à l'adresse <a0>IP</a0> du manager. You must also install a repository for non-core dependencies. Il faut également installer un dépôt pour les dépendances ne faisant pas partie du core. You must also install the database connector (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) Il faut également installer le connecteur à la base de données (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) You must read the man page corresponding to your database (<a0>Apache::Session::MySQL</a0>, …) to learn more about parameters. Il faut consulter la page de manuel correspondant à la base de données (<a0>Apache::Session::MySQL</a0>, …) pour connaître les paramètres. You must register IDP metadata here. Il faut enregistrer les métadatas de l'IDP ici. You must register SP metadata here. Il faut enregistrer les métadatas du SP ici. You need <a0>Auth::Yubikey_WebClient</a0> package. Le paquet <a0>Auth::Yubikey_WebClient</a0> est nécessaire. You need <a0>Net::Facebook::Oauth2</a0> package. La paquet <a0>Net::Facebook::Oauth2</a0> est nécessaire. You need <a0>Net::Twitter</a0> package, with a very recent version (>3). Vous devez installer une version récente (>3) du paquet <a0>Net::Twitter</a0>. You need <a0>Web::ID</a0> package. Le paquet <a0>Web::ID</a0> est nécessaire. You need some prerequisites: Certains pré-requis sont nécessaire : You need to activate <a0>LDAP</a0> authentication, else <a1>SSO</a1> authentication will not work. Il faut activer l'authentification <a0>LDAP</a0> sinon l'authentification <a1>SSO</a1> ne marchera pas. You need to adapt some parameters: Certains paramètres doivent être adaptés : You need to create yourself the directory and set write access to Apache user. Il faut créer soi-même le répertoire et y donner un accès en écriture pour l'utilisateur Apache. You need to disable default Manager protection in lemonldap-ng.ini to rely only on Apache: Il faut alors désactiver la protection du manager dans lemonldap-ng.ini pour la confier à Apache : You need to disable default Manager protection to rely only on Apache: Il faut alors désactiver la protection du manager pour la confier à Apache : You need to forward the password, which can be the user main password (if <a0>password is stored in session</a0>, or any user attribute (if you keep secondary passwords in users database). Il est nécessaire d'exporter le mot-de-passe, qui peut être le mot-de-passe principal de l'utilisateur (si <a0>le mot-de-passe est stocké dans la session</a0>, ou n'importe quel attribut utilisateur (si d'autres mots-de-passe sont stockés dans la base de données des utilisateurs). You need to get a preauth key from Zimbra server. Il est nécessaire de récupérer une clef de pré-authentification auprès du serveur Zimbra. You need to get an client ID and a secret key from Yubico. Un identifiant client et une clef secrète doivent être obtenues auprès de Yubico. You need to give access to status path in the Handler Apache configuration: Il faut autoriser l'accès au chemin du statut dans le configuration Apache de l'agent : You need to know the technical name of configuration parameter to do this. Il est nécessaire de connaître le nom technique du paramètre de configuration pour le faire. You need to register a new application on Facebook to get an application ID and a secret. Il faut enregistrer la nouvelle application dans Facebook pour obtenir un identifiant d'application et un secret. You need to register a new application on Twitter to get <a0>API</a0> key and <a1>API</a1> secret. Vous devez enregistrer votre nouvelle application dans Twitter pour obtenir la clef de l'<a0>API</a0> et son secret<a1></a1>. You need to set the <a0>PHP</a0>_AUTH_USER variable to have the Webserver authentication mode working. Il faut renseigner la variable <a0>PHP</a0>_AUTH_USER pour faire fonctionner le mode d'authentification par serveur web. You need to use Apache 2 with mod_perl 2, even if some simple configuration can run under Apache 1.3 Il est nécessaire d'utiliser Apache 2 avec mod_perl 2, même si une configuration simple peut fonctionner avec Apache 1.3 You only need a reload <a0>URL</a0> per physical servers, as Handlers share the same configuration cache on each physical server. Une <a0>URL</a0> par serveur physique est nécessaire, car les agents partagent le même cache de configuration pour chaque serveur physique. You should be able to find a package for your distribution with a little search on the web. Il est possible de trouver un paquet pour beaucoup de distributions avec une petite recherche sur le web. You should be redirected to <a0>LL::NG</a0> Portal. On doit être redirigé vers le portail <a0>LL::NG</a0>. You should change the <c0>Allow</c0> directive to match administration <a1>IP</a1>, or use another Apache protection mean. On peut changer la directive <c0>Allow</c0> pour réserver l'adresse <a1>IP</a1> d'administration, ou utiliser une autre protection. You should grab some informations: Il faut récolter quelques informations: You should have configured <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>, Il est nécessaire d'avoir configuré <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>, You should now use the Manager to configure all <a0>applications and categories</a0>, and then comment or remove the <c1>applicationList</c1> parameter from <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. Il est désormais possible d'utiliser le manager pour configurer toutes les <a0>applications et catégories</a0>, ensuite commenter ou supprimer le paramètre <c1>applicationList</c1> de <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. You should use an <a0>extended LDAP schema</a0> (or any users database extension), but this can works with standard attributes. Il est préférable d'utiliser un <a0>schéma LDAP étendu</a0> (ou toute extension de base de données utilisateur), mais ça peut fonctionner avec les attributs standard. You will be prompted. Le message sera affiché. You will configure Zimbra virtual host like other <a0>protected virtual host</a0> but you will use Zimbra Handler instead of default Handler. Configurer l'hôte virtuel Zimbra comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser le handler Zimbra au lieu du handler par défaut. You will find here screenshots of the new features. On trouve ici les captures d'écran des nouvelles fonctionnalités. You will need a very recent version of Lasso (>= 2.3.0). Vous devez utiliser une version récente de Lasso (>= 2.3.0). You will need to collect all attributes needed to create a user in OBM, this includes: Il faut collecter tous les attributs nécessaires pour créer un compte OBM : You will need to install a Dokuwiki plugin, available on <a0>download page</a0>. Il faut installer le plugin Dokuwiki disponible sur la <a0>page de téléchargement</a0>. You will only need to install liblasso3-perl package: Seul le paquet liblasso3-perl est nécessaire : You've simply to insert a notification and connect to the portal using the same UID. Il suffit d'insérer une notification et de se connecter au portail en utilisant le même UID. Your EntityID, often use as metadata <a0>URL</a0>, by default #PORTAL#/saml/metadata. Votre EntityID, souvent utilisé comme <a0>URL</a0> des métadatas, par défaut #PORTAL#/saml/metadata. Your application can know the connected user using: Une application peut connaître l'utilisateur connecté en utilisant : Your database must have a specific table to host sessions. Il faut dédier une table pour héberger les sessions. Your module has to be loaded by Apache (for example after Handler load): Le module doit être chargé par Apache (par exemple après le chargement de l'agent) : Your old Apache configuration should have been saved, you need to port your specificities in new Apache configuration files: L'ancienne configuration Apache devrait avoir été sauvée, il faut réporter les changements locaux dans le nouveau fichier de configuration Apache : Yubikey Yubikey Yubikey authentication level Niveau d'authentification de Yubikey Yubikey client ID ID client Yubikey Yubikey public ID size Taille de l'ID public Yubikey Yubikey secret key Clef secrète Yubikey Yverdon Yverdon Z Z Zimbra Zimbra Zimbra Handler parameters Paramètres du handler Zimbra Zimbra account session key Clef de session de compte Zimbra Zimbra account type Type de compte Zimbra Zimbra also features archiving and discovery for compliance. Zimbra propose aussi l'archivage et discovery for compliance. Zimbra application in menu Application Zimbra dans le menu Zimbra can also be connected to <a0>LL::NG</a0> via <a1>SAML protocol</a1> (see <a2>Zimbra blog</a2>). Zimbra peut aussi être connecté à <a0>LL::NG</a0> via le <a1>protocole SAML</a1> (voir le <a2>blog de Zimbra</a2>). Zimbra can be deployed on-premises or as a hosted email solution. Zimbra peut être déployé sur site ou hébergé telle une messagerie. Zimbra local <a0>SSO</a0> <a1>URL</a1> pattern Expression d'<a1>URL</a1> <a0>SSO</a0> locale pour Zimbra Zimbra preauth key Clef de pré-authentification Zimbra Zimbra preauthentication <a0>URL</a0> <a0>URL</a0> de pré-authentification Zimbra Zimbra preauthentication key Clef de pré-authentification Zimbra Zimbra syncs to smartphones (iPhone, BlackBerry) and desktop clients like Outlook and Thunderbird. Zimbra se synchronise avec les smartphones (iPhone, BlackBerry) et les clients lourds de bureau tels Outlook et Thunderbird. Zimbra use a specific <a0>preauthentication protocol</a0> to provide <a1>SSO</a1> on its application. Zimbra utilise un <a0>protocole de pré-authentification</a0> pour s'intégrer à un <a1>SSO</a1>. Zimbra virtual host in Apache Hôte virtuel Zimbra dans le manager Zimbra virtual host in Manager Hôte virtuel Zimbra dans le manager [PORTAL] is the portal <a0>URL</a0> [PORTAIL] est l'<a0>URL</a0> du portail [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 [libdefaults] [libdefaults] [login] is the user login (or any other session information, <s0><a1>see below</a1></s0>) [login] est le nom de connexion (ou tout autre information de session, <s0><a1>voir ci-dessous</a1></s0>) ^/(?i)index.php\?.*access.*access ^/(?i)index.php\?.*access.*access ^/(?i)index.php\?.*access=admin ^/(?i)index.php\?.*access=admin ^/(css|js)/ ^/(css|js)/ ^/Microsoft-Server-ActiveSync ^/Microsoft-Server-ActiveSync ^/admin/ ^/admin/ ^/c/portal/logout => logout_sso ^/c/portal/logout => logout_sso ^/caldav ^/caldav ^/config/ ^/config/ ^/forum/ ^/forum/ ^/index.php\?.*access=admin ^/index.php\?.*access=admin ^/index.php\?logout ^/index.php\?logout ^/limesurvey/admin/ ^/limesurvey/admin/ ^/logout ^/logout ^/minig ^/minig ^/obm-sync ^/obm-sync ^/pub/ ^/pub/ ^/pub/admin/ ^/pub/admin/ ^/public/ ^/public/ __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> _auth _auth _authChoice _authChoice _cas_id _cas_id _idp _idp _idpConfKey _idpConfKey _issuerDB _issuerDB _lassoIdentityDump _lassoIdentityDump _lassoSessionDump _lassoSessionDump _lastAuthnUTime _lastAuthnUTime _notification_<e0>id</e0> _notification_<e0>id</e0> _openid_<e0>id</e0> _openid_<e0>id</e0> _password _password _passwordDB _passwordDB _samlToken _samlToken _saml_id ProxyID _nameID _assert_id _art_id _saml_id ProxyID _nameID _assert_id _art_id _saml_id ProxyID _nameID _assert_id _art_id _session_id _saml_id ProxyID _nameID _assert_id _art_id _session_id _session_id _session_id _timezone _timezone _url _url _user _user _userDB _userDB _utime _utime _whatToTrace ipAddr _whatToTrace ipAddr _whatToTrace varchar<s11>(</s11>255<s12>)</s12><s13>,</s13> _whatToTrace varchar<s11>(</s11>255<s12>)</s12><s13>,</s13> a15a18c8bb17e6f67886a9af1898c018b9f5a072 a15a18c8bb17e6f67886a9af1898c018b9f5a072 a2enmod perl a2enmod perl a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf a_session blob a_session blob a_session blob<s10>,</s10> a_session blob<s10>,</s10> aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) accept accept accept (or whatever you want) accept (ou la valeur désirée) accordeon_dark.png accordeon_dark.png accordeon_light.png accordeon_light.png action=logout$ action=logout$ activate <a0>CDA</a0> in <c1>General Parameters</c1> » <c2>Cookies</c2> » <c3>Multiple domains</c3> activer le <a0>CDA</a0> dans <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> activeTimer activeTimer admin_server = ad.example.com admin_server = ad.example.com administrator administrator all together (based on user <a0>choice</a0>, <a1>rules</a1>, …) tous en même temps (basé sur le <a0>choix</a0> utilisateur, les <a1>règles</a1>, …) and edit /etc/fail2ban/filter.d/lemonldap.conf et editer /etc/fail2ban/filter.d/lemonldap.conf ant ant any files sharing system (NFS, NAS, SAN,…) tout système de partage de fichiers (NFS, NAS, SAN,…) apache2ctl configtest apache2ctl restart apache2ctl configtest apache2ctl restart apacheAuthnLevel apacheAuthnLevel apachectl configtest apachectl restart apachectl configtest apachectl restart applications:bugzilla_logo.png applications:bugzilla_logo.png applications:dokuwiki_logo.png applications:dokuwiki_logo.png applications:drupal_logo.png applications:drupal_logo.png applications:googleapps_logo.png applications:googleapps_logo.png applications:http_logo.png applications:http_logo.png applications:liferay_logo.png applications:liferay_logo.png applications:limesurvey_logo.png applications:limesurvey_logo.png applications:mediawiki_logo.png applications:mediawiki_logo.png applications:obm_logo.png applications:obm_logo.png applications:phpldapadmin_logo.png applications:phpldapadmin_logo.png applications:spring_logo.png applications:spring_logo.png applications:sympa_logo.png applications:sympa_logo.png applications:tomcat_logo.png applications:tomcat_logo.png applications:zimbra_logo.png applications:zimbra_logo.png appsListOrder appsListOrder apt-cache search lemonldap-ng apt-cache search lemonldap-ng apt-get install apache2 libapache2-mod-perl2 libapache-session-perl libnet-ldap-perl libcache-cache-perl libdbi-perl perl-modules libwww-perl libcache-cache-perl libxml-simple-perl libsoap-lite-perl libhtml-template-perl libregexp-assemble-perl libjs-jquery libxml-libxml-perl libcrypt-rijndael-perl libio-string-perl libxml-libxslt-perl libconfig-inifiles-perl libjson-perl libstring-random-perl libemail-date-format-perl libmime-lite-perl libcrypt-openssl-rsa-perl libdigest-hmac-perl libclone-perl libauthen-sasl-perl apt-get install apache2 libapache2-mod-perl2 libapache-session-perl libnet-ldap-perl libcache-cache-perl libdbi-perl perl-modules libwww-perl libcache-cache-perl libxml-simple-perl libsoap-lite-perl libhtml-template-perl libregexp-assemble-perl libjs-jquery libxml-libxml-perl libcrypt-rijndael-perl libio-string-perl libxml-libxslt-perl libconfig-inifiles-perl libjson-perl libstring-random-perl libemail-date-format-perl libmime-lite-perl libcrypt-openssl-rsa-perl libdigest-hmac-perl libclone-perl libauthen-sasl-perl apt-get install lemonldap-ng apt-get install lemonldap-ng apt-get install libapache2-mod-auth-kerb apt-get install libapache2-mod-auth-kerb apt-get install libauthen-radius-perl apt-get install libauthen-radius-perl apt-get update apt-get update apt-key add rpm-gpg-key-ow2 apt-key add rpm-gpg-key-ow2 aptitude install lemonldap-ng aptitude install lemonldap-ng authChoiceModules authChoiceModules authChoiceParam authChoiceParam authenticate user authentifier les utilisateurs authenticate users authentifier les utilisateurs authenticate: check if user is authenticated; if not, redirect it to the portal authenticate : vérifie que l'utilisateur est authentifié ; sinon, il est redirigé vers le portail authentication authentification authenticationLevel authenticationLevel authentication_portal_1340022238188.png authentication_portal_1340022238188.png authentication_portal_1340022292201.png authentication_portal_1340022292201.png authorize: check if user is authorizated to access to this <a0>URL</a0> authorize : vérifie si l'utilisateur est autorisé à accèder à cette <a0>URL</a0> baseurl=http://lemonldap-ng.org/rpm6/ baseurl=http://lemonldap-ng.org/rpm6/ basic basic basic($uid,$_password) basic($uid,$_password) bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] by <a0>IP</a0> par adresses <a0>IP</a0> by date par date by double <a0>IP</a0> (sessions opened by the same user from multiple computers) par double <a0>IP</a0> (sessions ouvertes par le même utilisateur sur plusieurs machines) by double <a0>IP</a0> (sessions opened from multiple computers) par double <a0>IP</a0> (sessions ouvertes depuis plusieurs ordinateurs) by users par utilisateurs c:/my hardisk/tomcat/ c:/my hardisk/tomcat/ caFile caFile caPath caPath casAccessControlPolicy casAccessControlPolicy casAttr casAttr casStorage casStorage casStorageOptions casStorageOptions cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cd lemonldap-ng-* make make configure make test sudo make install cd lemonldap-ng-* make make configure make test sudo make install cd myskin ln -s ../pastel/*.tpl . cd myskin ln -s ../pastel/*.tpl . cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images cd trunk cd trunk cda cda cfgNum int not null primary key, cfgNum int not null primary key, cfgNum int(11) NOT NULL, cfgNum int(11) NOT NULL, change password (with server side password policy management) changer les mots-de-passe (avec la gestion de la politique de mot-de-passe côté serveur) checkDate checkDate checkDate($ssoStartDate, $ssoEndDate) checkDate($ssoStartDate, $ssoEndDate) checkLogonHours checkLogonHours checkLogonHours($ssoLogonHours) checkLogonHours($ssoLogonHours) checkLogonHours($ssoLogonHours, '', $_timezone) checkLogonHours($ssoLogonHours, '', $_timezone) checkLogonHours($ssoLogonHours, '', '', '1') checkLogonHours($ssoLogonHours, '', '', '1') checkLogonHours($ssoLogonHours, '', '+2') checkLogonHours($ssoLogonHours, '', '+2') checkLogonHours($ssoLogonHours, 'octetstring') checkLogonHours($ssoLogonHours, 'octetstring') checkXSS checkXSS chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown apache /etc/lemonldap-ng/auth.keytab chown apache /etc/lemonldap-ng/auth.keytab clean Handler cache nettoyer le cache des agents cn=admin,dc=example,dc=password cn=admin,dc=example,dc=password cond varchar<s16>(</s16>255<s17>)</s17> <s18>DEFAULT</s18> <s19>NULL</s19><s20>,</s20> cond varchar<s16>(</s16>255<s17>)</s17> <s18>DEFAULT</s18> <s19>NULL</s19><s20>,</s20> condition: condition to display the notification, can use all session variables. condition : condition pour afficher la notification, peut utiliser toutes les variables de session. configStorage configStorage contact contact contact.html contact.html convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini cookieExpiration cookieExpiration cookieName cookieName coudot coudot coudot@example.com coudot@example.com country country cp HttpAuthPlugin.php extenstions/ cp HttpAuthPlugin.php extenstions/ cp ValveLemonLDAPNG.jar server/lib/ cp ValveLemonLDAPNG.jar server/lib/ cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ createdb -O lemonldap-ng lemonldap-ng createdb -O lemonldap-ng lemonldap-ng css/all.css css/all.css css/print.css css/print.css css/screen.css css/screen.css customFunctions customFunctions customfooter.tpm : <a0>HTML</a0> code in the footer div customfooter.tpm : code <a0>HTML</a0> inséré dans le div de pied-de-page customhead.tpl : <a0>HTML</a0> header markups (like <a1>CSS</a1>, js cinlusion) customhead.tpl : marques d'en-têtes <a0>HTML</a0> (tels les inclusions <a1>CSS</a1>, js) customhead.tpl : <a0>HTML</a0> header markups (like <a1>CSS</a1>, js inclusion) customhead.tpl : en-têtes <a0>HTML</a0> (tels les inclusions <a1>CSS</a1>, js) customheader.tpl : <a0>HTML</a0> code int the header div customheader.tpl : code <a0>HTML</a0> inséré dans le div d'en-tête dark dark data longblob ); data longblob ); date datetime <s3>NOT</s3> <s4>NULL</s4><s5>,</s5> date datetime <s3>NOT</s3> <s4>NULL</s4><s5>,</s5> date: creation date (format YYYY-MM-DD) date : date de création (format AAAA-MM-JJ) dbi:Pg:dbname=sessions;host=10.2.3.1 dbi:Pg:dbname=sessions;host=10.2.3.1 dbi:mysql:dbname=sessions dbi:mysql:dbname=sessions dbiAuthChain dbiAuthChain dbiAuthLoginCol dbiAuthLoginCol dbiAuthPassword dbiAuthPassword dbiAuthPasswordCol dbiAuthPasswordCol dbiAuthPasswordHash dbiAuthPasswordHash dbiAuthTable dbiAuthTable dbiAuthUser dbiAuthUser dbiAuthnLevel dbiAuthnLevel dbiChain dbiChain dbiPassword dbiPassword dbiPasswordMailCol dbiPasswordMailCol dbiTable dbiTable dbiUser dbiUser dbiUserChain dbiUserChain dbiUserPassword dbiUserPassword dbiUserTable dbiUserTable dbiUserUser dbiUserUser de fr declare secondary portal in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Security</c2> » <c3>Trusted domains</c3> declarer le second portail dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> » <c3>Domaines approuvés</c3> decreased (-1) if the portal autocompletion is allowed (see <a0>portal customization</a0>) diminué (-1) si l'autocompletion est autorisée sur le portail (voir <a0>Personnalisation du portail</a0>) default default default => $ssoRoles =~ /ou=aaa,ou=roles/ default => $ssoRoles =~ /ou=aaa,ou=roles/ default => $ssoRoles =~ /ou=bbb,ou=roles/ default => $ssoRoles =~ /ou=bbb,ou=roles/ default_realm = EXAMPLE.COM [realms] default_realm = EXAMPLE.COM [realms] deny deny dirName dirName dn dn dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... dn: uid=foo,dmdName=people,dc=example,dc=com ... memberOf: cn=admin,dmdName=groups,dc=example,dc=com memberOf: cn=su,dmdName=groups,dc=example,dc=com dn: uid=foo,dmdName=people,dc=example,dc=com ... memberOf: cn=admin,dmdName=groups,dc=example,dc=com memberOf: cn=su,dmdName=groups,dc=example,dc=com dob dob documentation documentation documentation.html documentation.html documentation/1.2/start.html documentation/1.2/start.html documentation/conferences.html documentation/conferences.html documentation/current/applications/bugzilla.html documentation/current/applications/bugzilla.html documentation/current/applications/dokuwiki.html documentation/current/applications/dokuwiki.html documentation/current/applications/obm.html documentation/current/applications/obm.html documentation/current/applications/sympa.html documentation/current/applications/sympa.html documentation/current/applications/zimbra.html documentation/current/applications/zimbra.html documentation/current/installdeb.html#llng_repository documentation/current/installdeb.html#llng_repository documentation/current/installdeb.html#official_repository documentation/current/installdeb.html#official_repository documentation/current/installrpm.html#yum_repository documentation/current/installrpm.html#yum_repository documentation/current/prereq.html#apt-get documentation/current/prereq.html#apt-get documentation/current/prereq.html#yum documentation/current/prereq.html#yum documentation/current/start.html documentation/current/start.html documentation/features.html documentation/features.html documentation/latest/applications/bugzilla.html documentation/latest/applications/bugzilla.html documentation/latest/applications/dokuwiki.html documentation/latest/applications/dokuwiki.html documentation/latest/applications/obm.html documentation/latest/applications/obm.html documentation/latest/applications/sympa.html documentation/latest/applications/sympa.html documentation/latest/applications/zimbra.html documentation/latest/applications/zimbra.html documentation/latest/installdeb.html#llng_repository documentation/latest/installdeb.html#llng_repository documentation/latest/installdeb.html#official_repository documentation/latest/installdeb.html#official_repository documentation/latest/installrpm.html#yum_repository documentation/latest/installrpm.html#yum_repository documentation/latest/prereq.html#apt-get documentation/latest/prereq.html#apt-get documentation/latest/prereq.html#yum documentation/latest/prereq.html#yum documentation/latest/start.html documentation/latest/start.html documentation/presentation.html documentation/presentation.html documentation/quickstart.html documentation/quickstart.html documentation:1.0:applications documentation:1.0:applications documentation:1.0:applications:authbasic documentation:1.0:applications:authbasic documentation:1.0:applications:bugzilla documentation:1.0:applications:bugzilla documentation:1.0:applications:dokuwiki documentation:1.0:applications:dokuwiki documentation:1.0:applications:drupal documentation:1.0:applications:drupal documentation:1.0:applications:googleapps documentation:1.0:applications:googleapps documentation:1.0:applications:googleapps ↵ documentation:1.0:applications:googleapps ↵ documentation:1.0:applications:liferay documentation:1.0:applications:liferay documentation:1.0:applications:liferay ↵ documentation:1.0:applications:liferay ↵ documentation:1.0:applications:mediawiki documentation:1.0:applications:mediawiki documentation:1.0:applications:obm documentation:1.0:applications:obm documentation:1.0:applications:phpldapadmin documentation:1.0:applications:phpldapadmin documentation:1.0:applications:spring documentation:1.0:applications:spring documentation:1.0:applications:sympa documentation:1.0:applications:sympa documentation:1.0:applications:tomcat documentation:1.0:applications:tomcat documentation:1.0:applications:tomcat ↵ documentation:1.0:applications:tomcat ↵ documentation:1.0:applications:zimbra documentation:1.0:applications:zimbra documentation:1.0:authapache documentation:1.0:authapache documentation:1.0:authcas documentation:1.0:authcas documentation:1.0:authchoice documentation:1.0:authchoice documentation:1.0:authldap documentation:1.0:authldap documentation:1.0:authmulti documentation:1.0:authmulti documentation:1.0:authopenid documentation:1.0:authopenid documentation:1.0:authremote documentation:1.0:authremote documentation:1.0:authsaml documentation:1.0:authsaml documentation:1.0:changeconfbackend documentation:1.0:changeconfbackend documentation:1.0:configlocation documentation:1.0:configlocation documentation:1.0:configlocation ↵ documentation:1.0:configlocation ↵ documentation:1.0:configvhost documentation:1.0:configvhost documentation:1.0:customfunctions documentation:1.0:customfunctions documentation:1.0:exportedvars documentation:1.0:exportedvars documentation:1.0:extendedfunctions documentation:1.0:extendedfunctions documentation:1.0:extendedfunctions ↵ documentation:1.0:extendedfunctions ↵ documentation:1.0:fileconfbackend documentation:1.0:fileconfbackend documentation:1.0:formreplay documentation:1.0:formreplay documentation:1.0:header_remote_user_conversion documentation:1.0:header_remote_user_conversion documentation:1.0:idpcas documentation:1.0:idpcas documentation:1.0:idpopenid documentation:1.0:idpopenid documentation:1.0:idpsaml documentation:1.0:idpsaml documentation:1.0:ldapconfbackend documentation:1.0:ldapconfbackend documentation:1.0:logoutforward documentation:1.0:logoutforward documentation:1.0:managerprotection documentation:1.0:managerprotection documentation:1.0:memcachedsessionbackend documentation:1.0:memcachedsessionbackend documentation:1.0:parameterlist documentation:1.0:parameterlist documentation:1.0:passwordstore documentation:1.0:passwordstore documentation:1.0:portal documentation:1.0:portal documentation:1.0:portalcustom documentation:1.0:portalcustom documentation:1.0:portalmenu documentation:1.0:portalmenu documentation:1.0:samlservice documentation:1.0:samlservice documentation:1.0:selfmadeapplication documentation:1.0:selfmadeapplication documentation:1.0:soapconfbackend documentation:1.0:soapconfbackend documentation:1.0:soapsessionbackend documentation:1.0:soapsessionbackend documentation:1.0:sqlconfbackend documentation:1.0:sqlconfbackend documentation:1.0:sqlsessionbackend documentation:1.0:sqlsessionbackend documentation:1.0:start documentation:1.0:start documentation:1.0:upgrade documentation:1.0:upgrade documentation:1.0:writingrulesand_headers documentation:1.0:writingrulesand_headers documentation:1.1:configlocation documentation:1.1:configlocation documentation:1.1:exportedvars documentation:1.1:exportedvars documentation:1.1:start documentation:1.1:start documentation:1.1:upgrade documentation:1.1:upgrade documentation:1.2:activedirectoryminihowto documentation:1.2:activedirectoryminihowto documentation:1.2:applications documentation:1.2:applications documentation:1.2:applications:authbasic documentation:1.2:applications:authbasic documentation:1.2:applications:bugzilla documentation:1.2:applications:bugzilla documentation:1.2:applications:django documentation:1.2:applications:django documentation:1.2:applications:dokuwiki documentation:1.2:applications:dokuwiki documentation:1.2:applications:drupal documentation:1.2:applications:drupal documentation:1.2:applications:googleapps documentation:1.2:applications:googleapps documentation:1.2:applications:googleapps ↵ documentation:1.2:applications:googleapps ↵ documentation:1.2:applications:liferay documentation:1.2:applications:liferay documentation:1.2:applications:liferay ↵ documentation:1.2:applications:liferay ↵ documentation:1.2:applications:limesurvey documentation:1.2:applications:limesurvey documentation:1.2:applications:mediawiki documentation:1.2:applications:mediawiki documentation:1.2:applications:obm documentation:1.2:applications:obm documentation:1.2:applications:phpldapadmin documentation:1.2:applications:phpldapadmin documentation:1.2:applications:spring documentation:1.2:applications:spring documentation:1.2:applications:sympa documentation:1.2:applications:sympa documentation:1.2:applications:tomcat documentation:1.2:applications:tomcat documentation:1.2:applications:tomcat ↵ documentation:1.2:applications:tomcat ↵ documentation:1.2:applications:zimbra documentation:1.2:applications:zimbra documentation:1.2:authapache documentation:1.2:authapache documentation:1.2:authcas documentation:1.2:authcas documentation:1.2:authchoice documentation:1.2:authchoice documentation:1.2:authdbi documentation:1.2:authdbi documentation:1.2:authdemo documentation:1.2:authdemo documentation:1.2:authldap documentation:1.2:authldap documentation:1.2:authmulti documentation:1.2:authmulti documentation:1.2:authnull documentation:1.2:authnull documentation:1.2:authopenid documentation:1.2:authopenid documentation:1.2:authproxy documentation:1.2:authproxy documentation:1.2:authradius documentation:1.2:authradius documentation:1.2:authremote documentation:1.2:authremote documentation:1.2:authsaml documentation:1.2:authsaml documentation:1.2:authslave documentation:1.2:authslave documentation:1.2:authssl documentation:1.2:authssl documentation:1.2:authtwitter documentation:1.2:authtwitter documentation:1.2:authyubikey documentation:1.2:authyubikey documentation:1.2:browseablesessionbackend documentation:1.2:browseablesessionbackend documentation:1.2:cda documentation:1.2:cda documentation:1.2:changeconfbackend documentation:1.2:changeconfbackend documentation:1.2:configlocation documentation:1.2:configlocation documentation:1.2:configlocation ↵ documentation:1.2:configlocation ↵ documentation:1.2:configvhost documentation:1.2:configvhost documentation:1.2:customfunctions documentation:1.2:customfunctions documentation:1.2:error documentation:1.2:error documentation:1.2:exportedvars documentation:1.2:exportedvars documentation:1.2:extendedfunctions documentation:1.2:extendedfunctions documentation:1.2:extendedfunctions ↵ documentation:1.2:extendedfunctions ↵ documentation:1.2:federationproxy documentation:1.2:federationproxy documentation:1.2:fileconfbackend documentation:1.2:fileconfbackend documentation:1.2:filesessionbackend documentation:1.2:filesessionbackend documentation:1.2:formreplay documentation:1.2:formreplay documentation:1.2:header_remote_user_conversion documentation:1.2:header_remote_user_conversion documentation:1.2:highavailability documentation:1.2:highavailability documentation:1.2:idpcas documentation:1.2:idpcas documentation:1.2:idpopenid documentation:1.2:idpopenid documentation:1.2:idpsaml documentation:1.2:idpsaml documentation:1.2:installdeb documentation:1.2:installdeb documentation:1.2:installrpm documentation:1.2:installrpm documentation:1.2:installtarball documentation:1.2:installtarball documentation:1.2:internalproxy documentation:1.2:internalproxy documentation:1.2:ldapconfbackend documentation:1.2:ldapconfbackend documentation:1.2:ldapminihowto documentation:1.2:ldapminihowto documentation:1.2:ldapsessionbackend documentation:1.2:ldapsessionbackend documentation:1.2:loginhistory documentation:1.2:loginhistory documentation:1.2:logoutforward documentation:1.2:logoutforward documentation:1.2:logs documentation:1.2:logs documentation:1.2:managerprotection documentation:1.2:managerprotection documentation:1.2:memcachedsessionbackend documentation:1.2:memcachedsessionbackend documentation:1.2:mrtg documentation:1.2:mrtg documentation:1.2:mysqlminihowto documentation:1.2:mysqlminihowto documentation:1.2:nosqlsessionbackend documentation:1.2:nosqlsessionbackend documentation:1.2:notifications documentation:1.2:notifications documentation:1.2:parameterlist documentation:1.2:parameterlist documentation:1.2:passwordstore documentation:1.2:passwordstore documentation:1.2:performances documentation:1.2:performances documentation:1.2:portal documentation:1.2:portal documentation:1.2:portalcustom documentation:1.2:portalcustom documentation:1.2:portalmenu documentation:1.2:portalmenu documentation:1.2:prereq documentation:1.2:prereq documentation:1.2:rbac documentation:1.2:rbac documentation:1.2:redirections documentation:1.2:redirections documentation:1.2:resetpassword documentation:1.2:resetpassword documentation:1.2:safejail documentation:1.2:safejail documentation:1.2:samlservice documentation:1.2:samlservice documentation:1.2:securetoken documentation:1.2:securetoken documentation:1.2:security documentation:1.2:security documentation:1.2:selfmadeapplication documentation:1.2:selfmadeapplication documentation:1.2:selfmadeapplication ↵ documentation:1.2:selfmadeapplication ↵ documentation:1.2:sessions documentation:1.2:sessions documentation:1.2:soapconfbackend documentation:1.2:soapconfbackend documentation:1.2:soapminihowto documentation:1.2:soapminihowto documentation:1.2:soapservices documentation:1.2:soapservices documentation:1.2:soapsessionbackend documentation:1.2:soapsessionbackend documentation:1.2:sqlconfbackend documentation:1.2:sqlconfbackend documentation:1.2:sqlsessionbackend documentation:1.2:sqlsessionbackend documentation:1.2:ssocookie documentation:1.2:ssocookie documentation:1.2:start documentation:1.2:start documentation:1.2:start ↵ documentation:1.2:start ↵ documentation:1.2:status documentation:1.2:status documentation:1.2:upgrade documentation:1.2:upgrade documentation:1.2:writingrulesand_headers documentation:1.2:writingrulesand_headers documentation:1.3:activedirectoryminihowto documentation:1.3:activedirectoryminihowto documentation:1.3:applications documentation:1.3:applications documentation:1.3:applications:authbasic documentation:1.3:applications:authbasic documentation:1.3:applications:bugzilla documentation:1.3:applications:bugzilla documentation:1.3:applications:django documentation:1.3:applications:django documentation:1.3:applications:dokuwiki documentation:1.3:applications:dokuwiki documentation:1.3:applications:drupal documentation:1.3:applications:drupal documentation:1.3:applications:googleapps documentation:1.3:applications:googleapps documentation:1.3:applications:googleapps ↵ documentation:1.3:applications:googleapps ↵ documentation:1.3:applications:liferay documentation:1.3:applications:liferay documentation:1.3:applications:liferay ↵ documentation:1.3:applications:liferay ↵ documentation:1.3:applications:limesurvey documentation:1.3:applications:limesurvey documentation:1.3:applications:mediawiki documentation:1.3:applications:mediawiki documentation:1.3:applications:obm documentation:1.3:applications:obm documentation:1.3:applications:phpldapadmin documentation:1.3:applications:phpldapadmin documentation:1.3:applications:spring documentation:1.3:applications:spring documentation:1.3:applications:sympa documentation:1.3:applications:sympa documentation:1.3:applications:tomcat documentation:1.3:applications:tomcat documentation:1.3:applications:tomcat ↵ documentation:1.3:applications:tomcat ↵ documentation:1.3:applications:zimbra documentation:1.3:applications:zimbra documentation:1.3:authad documentation:1.3:authad documentation:1.3:authapache documentation:1.3:authapache documentation:1.3:authbrowserid documentation:1.3:authbrowserid documentation:1.3:authcas documentation:1.3:authcas documentation:1.3:authchoice documentation:1.3:authchoice documentation:1.3:authdbi documentation:1.3:authdbi documentation:1.3:authdemo documentation:1.3:authdemo documentation:1.3:authfacebook documentation:1.3:authfacebook documentation:1.3:authgoogle documentation:1.3:authgoogle documentation:1.3:authldap documentation:1.3:authldap documentation:1.3:authmulti documentation:1.3:authmulti documentation:1.3:authnull documentation:1.3:authnull documentation:1.3:authopenid documentation:1.3:authopenid documentation:1.3:authproxy documentation:1.3:authproxy documentation:1.3:authradius documentation:1.3:authradius documentation:1.3:authremote documentation:1.3:authremote documentation:1.3:authsaml documentation:1.3:authsaml documentation:1.3:authslave documentation:1.3:authslave documentation:1.3:authssl documentation:1.3:authssl documentation:1.3:authtwitter documentation:1.3:authtwitter documentation:1.3:authwebid documentation:1.3:authwebid documentation:1.3:authyubikey documentation:1.3:authyubikey documentation:1.3:browseablesessionbackend documentation:1.3:browseablesessionbackend documentation:1.3:cda documentation:1.3:cda documentation:1.3:changeconfbackend documentation:1.3:changeconfbackend documentation:1.3:configlocation documentation:1.3:configlocation documentation:1.3:configlocation ↵ documentation:1.3:configlocation ↵ documentation:1.3:configvhost documentation:1.3:configvhost documentation:1.3:customfunctions documentation:1.3:customfunctions documentation:1.3:error documentation:1.3:error documentation:1.3:exportedvars documentation:1.3:exportedvars documentation:1.3:extendedfunctions documentation:1.3:extendedfunctions documentation:1.3:extendedfunctions ↵ documentation:1.3:extendedfunctions ↵ documentation:1.3:fastcgi documentation:1.3:fastcgi documentation:1.3:federationproxy documentation:1.3:federationproxy documentation:1.3:fileconfbackend documentation:1.3:fileconfbackend documentation:1.3:filesessionbackend documentation:1.3:filesessionbackend documentation:1.3:formreplay documentation:1.3:formreplay documentation:1.3:handlerauthbasic documentation:1.3:handlerauthbasic documentation:1.3:header_remote_user_conversion documentation:1.3:header_remote_user_conversion documentation:1.3:highavailability documentation:1.3:highavailability documentation:1.3:idpcas documentation:1.3:idpcas documentation:1.3:idpopenid documentation:1.3:idpopenid documentation:1.3:idpsaml documentation:1.3:idpsaml documentation:1.3:installdeb documentation:1.3:installdeb documentation:1.3:installrpm documentation:1.3:installrpm documentation:1.3:installtarball documentation:1.3:installtarball documentation:1.3:internalproxy documentation:1.3:internalproxy documentation:1.3:ldapconfbackend documentation:1.3:ldapconfbackend documentation:1.3:ldapminihowto documentation:1.3:ldapminihowto documentation:1.3:ldapsessionbackend documentation:1.3:ldapsessionbackend documentation:1.3:loginhistory documentation:1.3:loginhistory documentation:1.3:logoutforward documentation:1.3:logoutforward documentation:1.3:logs documentation:1.3:logs documentation:1.3:managerprotection documentation:1.3:managerprotection documentation:1.3:memcachedsessionbackend documentation:1.3:memcachedsessionbackend documentation:1.3:mrtg documentation:1.3:mrtg documentation:1.3:mysqlminihowto documentation:1.3:mysqlminihowto documentation:1.3:nosqlsessionbackend documentation:1.3:nosqlsessionbackend documentation:1.3:notifications documentation:1.3:notifications documentation:1.3:parameterlist documentation:1.3:parameterlist documentation:1.3:passwordstore documentation:1.3:passwordstore documentation:1.3:performances documentation:1.3:performances documentation:1.3:portal documentation:1.3:portal documentation:1.3:portalcustom documentation:1.3:portalcustom documentation:1.3:portalmenu documentation:1.3:portalmenu documentation:1.3:prereq documentation:1.3:prereq documentation:1.3:rbac documentation:1.3:rbac documentation:1.3:redirections documentation:1.3:redirections documentation:1.3:resetpassword documentation:1.3:resetpassword documentation:1.3:safejail documentation:1.3:safejail documentation:1.3:samlservice documentation:1.3:samlservice documentation:1.3:securetoken documentation:1.3:securetoken documentation:1.3:security documentation:1.3:security documentation:1.3:selfmadeapplication documentation:1.3:selfmadeapplication documentation:1.3:selfmadeapplication ↵ documentation:1.3:selfmadeapplication ↵ documentation:1.3:sessions documentation:1.3:sessions documentation:1.3:soapconfbackend documentation:1.3:soapconfbackend documentation:1.3:soapminihowto documentation:1.3:soapminihowto documentation:1.3:soapservices documentation:1.3:soapservices documentation:1.3:soapsessionbackend documentation:1.3:soapsessionbackend documentation:1.3:sqlconfbackend documentation:1.3:sqlconfbackend documentation:1.3:sqlsessionbackend documentation:1.3:sqlsessionbackend documentation:1.3:ssocookie documentation:1.3:ssocookie documentation:1.3:start documentation:1.3:start documentation:1.3:start ↵ documentation:1.3:start ↵ documentation:1.3:status documentation:1.3:status documentation:1.3:upgrade documentation:1.3:upgrade documentation:1.3:variables documentation:1.3:variables documentation:1.3:writingrulesand_headers documentation:1.3:writingrulesand_headers documentation:1.4:activedirectoryminihowto documentation:1.4:activedirectoryminihowto documentation:1.4:applications documentation:1.4:applications documentation:1.4:applications:authbasic documentation:1.4:applications:authbasic documentation:1.4:applications:bugzilla documentation:1.4:applications:bugzilla documentation:1.4:applications:django documentation:1.4:applications:django documentation:1.4:applications:dokuwiki documentation:1.4:applications:dokuwiki documentation:1.4:applications:drupal documentation:1.4:applications:drupal documentation:1.4:applications:googleapps documentation:1.4:applications:googleapps documentation:1.4:applications:googleapps ↵ documentation:1.4:applications:googleapps ↵ documentation:1.4:applications:liferay documentation:1.4:applications:liferay documentation:1.4:applications:liferay ↵ documentation:1.4:applications:liferay ↵ documentation:1.4:applications:limesurvey documentation:1.4:applications:limesurvey documentation:1.4:applications:mediawiki documentation:1.4:applications:mediawiki documentation:1.4:applications:obm documentation:1.4:applications:obm documentation:1.4:applications:phpldapadmin documentation:1.4:applications:phpldapadmin documentation:1.4:applications:spring documentation:1.4:applications:spring documentation:1.4:applications:sympa documentation:1.4:applications:sympa documentation:1.4:applications:tomcat documentation:1.4:applications:tomcat documentation:1.4:applications:tomcat ↵ documentation:1.4:applications:tomcat ↵ documentation:1.4:applications:zimbra documentation:1.4:applications:zimbra documentation:1.4:authad documentation:1.4:authad documentation:1.4:authapache documentation:1.4:authapache documentation:1.4:authbrowserid documentation:1.4:authbrowserid documentation:1.4:authcas documentation:1.4:authcas documentation:1.4:authchoice documentation:1.4:authchoice documentation:1.4:authdbi documentation:1.4:authdbi documentation:1.4:authdemo documentation:1.4:authdemo documentation:1.4:authfacebook documentation:1.4:authfacebook documentation:1.4:authgoogle documentation:1.4:authgoogle documentation:1.4:authldap documentation:1.4:authldap documentation:1.4:authmulti documentation:1.4:authmulti documentation:1.4:authnull documentation:1.4:authnull documentation:1.4:authopenid documentation:1.4:authopenid documentation:1.4:authproxy documentation:1.4:authproxy documentation:1.4:authradius documentation:1.4:authradius documentation:1.4:authremote documentation:1.4:authremote documentation:1.4:authsaml documentation:1.4:authsaml documentation:1.4:authslave documentation:1.4:authslave documentation:1.4:authssl documentation:1.4:authssl documentation:1.4:authtwitter documentation:1.4:authtwitter documentation:1.4:authwebid documentation:1.4:authwebid documentation:1.4:authyubikey documentation:1.4:authyubikey documentation:1.4:browseablesessionbackend documentation:1.4:browseablesessionbackend documentation:1.4:cda documentation:1.4:cda documentation:1.4:changeconfbackend documentation:1.4:changeconfbackend documentation:1.4:configlocation documentation:1.4:configlocation documentation:1.4:configlocation ↵ documentation:1.4:configlocation ↵ documentation:1.4:configvhost documentation:1.4:configvhost documentation:1.4:customfunctions documentation:1.4:customfunctions documentation:1.4:error documentation:1.4:error documentation:1.4:exportedvars documentation:1.4:exportedvars documentation:1.4:extendedfunctions documentation:1.4:extendedfunctions documentation:1.4:extendedfunctions ↵ documentation:1.4:extendedfunctions ↵ documentation:1.4:fastcgi documentation:1.4:fastcgi documentation:1.4:federationproxy documentation:1.4:federationproxy documentation:1.4:fileconfbackend documentation:1.4:fileconfbackend documentation:1.4:filesessionbackend documentation:1.4:filesessionbackend documentation:1.4:formreplay documentation:1.4:formreplay documentation:1.4:handlerauthbasic documentation:1.4:handlerauthbasic documentation:1.4:header_remote_user_conversion documentation:1.4:header_remote_user_conversion documentation:1.4:highavailability documentation:1.4:highavailability documentation:1.4:idpcas documentation:1.4:idpcas documentation:1.4:idpopenid documentation:1.4:idpopenid documentation:1.4:idpsaml documentation:1.4:idpsaml documentation:1.4:installdeb documentation:1.4:installdeb documentation:1.4:installrpm documentation:1.4:installrpm documentation:1.4:installtarball documentation:1.4:installtarball documentation:1.4:internalproxy documentation:1.4:internalproxy documentation:1.4:jsonfileconfbackend documentation:1.4:jsonfileconfbackend documentation:1.4:ldapconfbackend documentation:1.4:ldapconfbackend documentation:1.4:ldapminihowto documentation:1.4:ldapminihowto documentation:1.4:ldapsessionbackend documentation:1.4:ldapsessionbackend documentation:1.4:loginhistory documentation:1.4:loginhistory documentation:1.4:logoutforward documentation:1.4:logoutforward documentation:1.4:logs documentation:1.4:logs documentation:1.4:managerprotection documentation:1.4:managerprotection documentation:1.4:memcachedsessionbackend documentation:1.4:memcachedsessionbackend documentation:1.4:mrtg documentation:1.4:mrtg documentation:1.4:mysqlminihowto documentation:1.4:mysqlminihowto documentation:1.4:nosqlsessionbackend documentation:1.4:nosqlsessionbackend documentation:1.4:notifications documentation:1.4:notifications documentation:1.4:parameterlist documentation:1.4:parameterlist documentation:1.4:passwordstore documentation:1.4:passwordstore documentation:1.4:performances documentation:1.4:performances documentation:1.4:portal documentation:1.4:portal documentation:1.4:portalcustom documentation:1.4:portalcustom documentation:1.4:portalmenu documentation:1.4:portalmenu documentation:1.4:prereq documentation:1.4:prereq documentation:1.4:rbac documentation:1.4:rbac documentation:1.4:redirections documentation:1.4:redirections documentation:1.4:resetpassword documentation:1.4:resetpassword documentation:1.4:safejail documentation:1.4:safejail documentation:1.4:samlservice documentation:1.4:samlservice documentation:1.4:securetoken documentation:1.4:securetoken documentation:1.4:security documentation:1.4:security documentation:1.4:selfmadeapplication documentation:1.4:selfmadeapplication documentation:1.4:selfmadeapplication ↵ documentation:1.4:selfmadeapplication ↵ documentation:1.4:sessions documentation:1.4:sessions documentation:1.4:soapconfbackend documentation:1.4:soapconfbackend documentation:1.4:soapminihowto documentation:1.4:soapminihowto documentation:1.4:soapservices documentation:1.4:soapservices documentation:1.4:soapsessionbackend documentation:1.4:soapsessionbackend documentation:1.4:sqlconfbackend documentation:1.4:sqlconfbackend documentation:1.4:sqlsessionbackend documentation:1.4:sqlsessionbackend documentation:1.4:ssocookie documentation:1.4:ssocookie documentation:1.4:start documentation:1.4:start documentation:1.4:status documentation:1.4:status documentation:1.4:upgrade documentation:1.4:upgrade documentation:1.4:variables documentation:1.4:variables documentation:1.4:writingrulesand_headers documentation:1.4:writingrulesand_headers documentation:conferences documentation:conferences documentation:configuration-ldap.png documentation:configuration-ldap.png documentation:dia_dit_roles.png documentation:dia_dit_roles.png documentation:exportedvars.png documentation:exportedvars.png documentation:features documentation:features documentation:googleapps-export-priv-key.png documentation:googleapps-export-priv-key.png documentation:googleapps-manager-application.png documentation:googleapps-manager-application.png documentation:googleapps-menu.png documentation:googleapps-menu.png documentation:googleapps-sso.png documentation:googleapps-sso.png documentation:googleapps-ssoconfig.png documentation:googleapps-ssoconfig.png documentation:ha-apache.png documentation:ha-apache.png documentation:ha-sessions-configuration.png documentation:ha-sessions-configuration.png documentation:lasso.png documentation:lasso.png documentation:latest:applications:bugzilla documentation:latest:applications:bugzilla documentation:latest:applications:dokuwiki documentation:latest:applications:dokuwiki documentation:latest:applications:obm documentation:latest:applications:obm documentation:latest:applications:sympa documentation:latest:applications:sympa documentation:latest:applications:zimbra documentation:latest:applications:zimbra documentation:latest:authdemo documentation:latest:authdemo documentation:latest:installdeb documentation:latest:installdeb documentation:latest:installrpm documentation:latest:installrpm documentation:latest:logs documentation:latest:logs documentation:latest:notifications documentation:latest:notifications documentation:latest:portalcustom documentation:latest:portalcustom documentation:latest:prereq documentation:latest:prereq documentation:latest:sessions documentation:latest:sessions documentation:latest:ssocookie documentation:latest:ssocookie documentation:latest:start documentation:latest:start documentation:latest:writingrulesand_headers documentation:latest:writingrulesand_headers documentation:lemonldap-ng-architecture.png documentation:lemonldap-ng-architecture.png documentation:lemonldap-ng-packages.png documentation:lemonldap-ng-packages.png documentation:lemonldapng-sso.png documentation:lemonldapng-sso.png documentation:liferay_1.png documentation:liferay_1.png documentation:liferay_2.png documentation:liferay_2.png documentation:liferay_3.png documentation:liferay_3.png documentation:liferay_4.png documentation:liferay_4.png documentation:liferay_5.png documentation:liferay_5.png documentation:liferay_6.png documentation:liferay_6.png documentation:liferay_7.png documentation:liferay_7.png documentation:manager-authchoice.png documentation:manager-authchoice.png documentation:manager-formreplay-newdata.png documentation:manager-formreplay-newdata.png documentation:manager-formreplay-newurl.png documentation:manager-formreplay-newurl.png documentation:manager-menu-application-logo.png documentation:manager-menu-application-logo.png documentation:manager-menu-application.png documentation:manager-menu-application.png documentation:manager-portalskin.png documentation:manager-portalskin.png documentation:manager-saml-idp-attribute.png documentation:manager-saml-idp-attribute.png documentation:manager-saml-idp-list.png documentation:manager-saml-idp-list.png documentation:manager-saml-idp-metadata.png documentation:manager-saml-idp-metadata.png documentation:manager-saml-idp-new.png documentation:manager-saml-idp-new.png documentation:manager-saml-namid-formats.png documentation:manager-saml-namid-formats.png documentation:manager-saml-private-key.png documentation:manager-saml-private-key.png documentation:manager-saml-service-authn-contexts.png documentation:manager-saml-service-authn-contexts.png documentation:manager-saml-service-sp-ac.png documentation:manager-saml-service-sp-ac.png documentation:manager-saml-service-sp-slo.png documentation:manager-saml-service-sp-slo.png documentation:manager-saml-sp-new.png documentation:manager-saml-sp-new.png documentation:manager_access_rule.png documentation:manager_access_rule.png documentation:presentation documentation:presentation documentation:quickstart documentation:quickstart documentation:remote-interoperability.png documentation:remote-interoperability.png documentation:remote-principle.png documentation:remote-principle.png documentation:status_standard.png documentation:status_standard.png domain domain domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> done datetime <s24>DEFAULT</s24> <s25>NULL</s25><s26>,</s26> done datetime <s24>DEFAULT</s24> <s25>NULL</s25><s26>,</s26> download Téléchargement download.html download.html dpkg -i liblemonldap-ng-* lemonldap-ng* dpkg -i liblemonldap-ng-* lemonldap-ng* dwho dwho dwho@badwolf.org dwho@badwolf.org each area has 2 portals: chacune a 2 portails: echo "127.0.0.1 reload.example.com" >> /etc/hosts echo "127.0.0.1 reload.example.com" >> /etc/hosts email email email_http_header HTTP_MAIL email_http_header HTTP_MAIL employeeNumber employeeNumber en fr encode_base64($givenName." ".$surName) encode_base64($givenName." ".$surName) etc. etc... example.com = EXAMPLE.COM example.com = EXAMPLE.COM exportedAttr exportedAttr exportedHeaders exportedHeaders exportedVars exportedVars field champ field varchar(255) NOT NULL DEFAULT '', field varchar(255) NOT NULL DEFAULT '', firewalls (but be careful if more than 1 server is behind the firewall) pare-feux (attention toutefois si plus d'une application se trouve derrière le pare-feu) firstname firstname for index.pl, set it in new(): pour index.pl, le mettre dans new() : fullname fullname gen-webid-cert.sh gen-webid-cert.sh gender gender generate new public and private keys (<c0>Generate</c0> button) générer de nouvelles clefs publiques et privées (bouton <c0>Générer</c0>) generic_sso generic_sso get groups where user is registered obtenir les groupes dont l'utilisateur est membre get user attributes obtenir les attributs utilisateurs globalStorage globalStorage globalStorageOptions globalStorageOptions googleapps googleapps grantSessionRule grantSessionRule groups groups groups are stored as space-separated strings in the special attribute “groups”: it contains the names of groups whose rules were returned true for the current user les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant hideOldPassword hideOldPassword http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous http://auth.example.com http://auth.example.com http://auth.example.com/?logout=1 http://auth.example.com/?logout=1 http://auth.example.com/index.pl/sessions http://auth.example.com/index.pl/sessions http://auth.example.com/kerberos.pl http://auth.example.com/kerberos.pl http://auth.example.com/openidserver/foo.bar http://auth.example.com/openidserver/foo.bar http://auth.example.com/saml/metadata http://auth.example.com/saml/metadata http://auth.example.com/saml/singleSignOn http://auth.example.com/saml/singleSignOn http://auth.ucanss.fr/ http://auth.ucanss.fr/ http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html http://code.google.com/p/redis/ http://code.google.com/p/redis/ http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 http://deb.entrouvert.org/ http://deb.entrouvert.org/ http://dev.twitter.com/pages/api_faq http://dev.twitter.com/pages/api_faq http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf http://drupal.org http://drupal.org http://drupal.org/project/Webserver_auth http://drupal.org/project/Webserver_auth http://en.wikipedia.org/wiki/Basic_access_authentication http://fr.wikipedia.org/wiki/HTTP_Authentification http://en.wikipedia.org/wiki/Central_Authentication_Service http://fr.wikipedia.org/wiki/Central_Authentication_Service http://en.wikipedia.org/wiki/Doctor_Who http://en.wikipedia.org/wiki/Doctor_Who http://en.wikipedia.org/wiki/FastCGI http://en.wikipedia.org/wiki/FastCGI http://en.wikipedia.org/wiki/IBM_Lotus_iNotes http://en.wikipedia.org/wiki/IBM_Lotus_iNotes http://en.wikipedia.org/wiki/INI_file http://en.wikipedia.org/wiki/INI_file http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur http://en.wikipedia.org/wiki/OAuth http://fr.wikipedia.org/wiki/OAuth http://en.wikipedia.org/wiki/OAuth2 http://en.wikipedia.org/wiki/OAuth2 http://en.wikipedia.org/wiki/OpenID http://fr.wikipedia.org/wiki/OpenID http://en.wikipedia.org/wiki/Outlook_Web_App http://en.wikipedia.org/wiki/Outlook_Web_App http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions http://en.wikipedia.org/wiki/Role-based_access_control http://en.wikipedia.org/wiki/Role-based_access_control http://en.wikipedia.org/wiki/SAML http://fr.wikipedia.org/wiki/SAML http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 http://facebook.com http://facebook.com http://fedoraproject.org/wiki/EPEL/ http://fedoraproject.org/wiki/EPEL/ http://fedoraproject.org/wiki/EPEL/FAQ#howtouse http://fedoraproject.org/wiki/EPEL/FAQ#howtouse http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=11045 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=11045 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13166 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13166 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13688 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13688 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13689 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13689 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13690 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13690 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13956 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=13956 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15298 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15298 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15918 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15918 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15919 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15919 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15920 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15920 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15927 http://forge.ow2.org/project/download.php?group_id=274&amp;file_id=15927 http://forge.ow2.org/project/download.php?group_id=274&file_id=11045 http://forge.ow2.org/project/download.php?group_id=274&file_id=11045 http://forge.ow2.org/project/download.php?group_id=274&file_id=13166 http://forge.ow2.org/project/download.php?group_id=274&file_id=13166 http://forge.ow2.org/project/download.php?group_id=274&file_id=17132 http://forge.ow2.org/project/download.php?group_id=274&file_id=17132 http://forge.ow2.org/project/download.php?group_id=274&file_id=17133 http://forge.ow2.org/project/download.php?group_id=274&file_id=17133 http://forge.ow2.org/project/download.php?group_id=274&file_id=17134 http://forge.ow2.org/project/download.php?group_id=274&file_id=17134 http://forge.ow2.org/project/download.php?group_id=274&file_id=17135 http://forge.ow2.org/project/download.php?group_id=274&file_id=17135 http://forge.ow2.org/project/download.php?group_id=274&file_id=18116 http://forge.ow2.org/project/download.php?group_id=274&file_id=18116 http://forge.ow2.org/project/download.php?group_id=274&file_id=18201 http://forge.ow2.org/project/download.php?group_id=274&file_id=18201 http://forge.ow2.org/project/download.php?group_id=274&file_id=18202 http://forge.ow2.org/project/download.php?group_id=274&file_id=18202 http://forge.ow2.org/project/download.php?group_id=274&file_id=18203 http://forge.ow2.org/project/download.php?group_id=274&file_id=18203 http://forge.ow2.org/project/download.php?group_id=274&file_id=18204 http://forge.ow2.org/project/download.php?group_id=274&file_id=18204 http://forge.ow2.org/project/download.php?group_id=274&file_id=18205 http://forge.ow2.org/project/download.php?group_id=274&file_id=18205 http://forge.ow2.org/project/download.php?group_id=274&file_id=18206 http://forge.ow2.org/project/download.php?group_id=274&file_id=18206 http://forge.ow2.org/project/download.php?group_id=274&file_id=18305 http://forge.ow2.org/project/download.php?group_id=274&file_id=18305 http://forge.ow2.org/project/download.php?group_id=274&file_id=18306 http://forge.ow2.org/project/download.php?group_id=274&file_id=18306 http://forge.ow2.org/project/download.php?group_id=274&file_id=18307 http://forge.ow2.org/project/download.php?group_id=274&file_id=18307 http://forge.ow2.org/project/download.php?group_id=274&file_id=18308 http://forge.ow2.org/project/download.php?group_id=274&file_id=18308 http://forge.ow2.org/project/download.php?group_id=274&file_id=18309 http://forge.ow2.org/project/download.php?group_id=274&file_id=18309 http://forge.ow2.org/project/download.php?group_id=274&file_id=18310 http://forge.ow2.org/project/download.php?group_id=274&file_id=18310 http://forge.ow2.org/project/download.php?group_id=274&file_id=18483 http://forge.ow2.org/project/download.php?group_id=274&file_id=18483 http://forge.ow2.org/project/download.php?group_id=274&file_id=18484 http://forge.ow2.org/project/download.php?group_id=274&file_id=18484 http://forge.ow2.org/project/download.php?group_id=274&file_id=18485 http://forge.ow2.org/project/download.php?group_id=274&file_id=18485 http://forge.ow2.org/project/download.php?group_id=274&file_id=18486 http://forge.ow2.org/project/download.php?group_id=274&file_id=18486 http://forge.ow2.org/project/download.php?group_id=274&file_id=18487 http://forge.ow2.org/project/download.php?group_id=274&file_id=18487 http://forge.ow2.org/project/download.php?group_id=274&file_id=18488 http://forge.ow2.org/project/download.php?group_id=274&file_id=18488 http://forge.ow2.org/project/download.php?group_id=274&file_id=19326 http://forge.ow2.org/project/download.php?group_id=274&file_id=19326 http://forge.ow2.org/project/download.php?group_id=274&file_id=19327 http://forge.ow2.org/project/download.php?group_id=274&file_id=19327 http://forge.ow2.org/project/download.php?group_id=274&file_id=19328 http://forge.ow2.org/project/download.php?group_id=274&file_id=19328 http://forge.ow2.org/project/download.php?group_id=274&file_id=19329 http://forge.ow2.org/project/download.php?group_id=274&file_id=19329 http://forge.ow2.org/project/download.php?group_id=274&file_id=19330 http://forge.ow2.org/project/download.php?group_id=274&file_id=19330 http://forge.ow2.org/project/download.php?group_id=274&file_id=19331 http://forge.ow2.org/project/download.php?group_id=274&file_id=19331 http://forge.ow2.org/project/download.php?group_id=274&file_id=19496 http://forge.ow2.org/project/download.php?group_id=274&file_id=19496 http://forge.ow2.org/project/download.php?group_id=274&file_id=19497 http://forge.ow2.org/project/download.php?group_id=274&file_id=19497 http://forge.ow2.org/project/download.php?group_id=274&file_id=19498 http://forge.ow2.org/project/download.php?group_id=274&file_id=19498 http://forge.ow2.org/project/download.php?group_id=274&file_id=19499 http://forge.ow2.org/project/download.php?group_id=274&file_id=19499 http://forge.ow2.org/project/download.php?group_id=274&file_id=19500 http://forge.ow2.org/project/download.php?group_id=274&file_id=19500 http://forge.ow2.org/project/download.php?group_id=274&file_id=19501 http://forge.ow2.org/project/download.php?group_id=274&file_id=19501 http://forge.ow2.org/project/showfiles.php?group_id=274 http://forge.ow2.org/project/showfiles.php?group_id=274 http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz http://fosdem.org/2012/schedule/event/lemonldapng http://fosdem.org/2012/schedule/event/lemonldapng http://fr.lutece.paris.fr http://fr.lutece.paris.fr http://freeradius.org/mod_auth_radius/ http://freeradius.org/mod_auth_radius/ http://freshmeat.net/projects/lemonldapng http://freshmeat.net/projects/lemonldapng http://github.com/oremj/mediawiki-http-auth/downloads http://github.com/oremj/mediawiki-http-auth/downloads http://grr.mutualibre.org/documentation/body.php?id=35 http://grr.mutualibre.org/documentation/body.php?id=35 http://haproxy.1wt.eu/ http://haproxy.1wt.eu/ http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://herve.vanmeerbeck.free.fr/?p=53 http://herve.vanmeerbeck.free.fr/?p=53 http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime http://httpd.apache.org/docs/2.2/mod/core.html#loglevel http://httpd.apache.org/docs/2.2/mod/core.html#loglevel http://httpd.apache.org/docs/2.2/mod/mod_proxy.html http://httpd.apache.org/docs/2.2/mod/mod_proxy.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://httpd.apache.org/docs/2.2/mod/mod_ssl.html http://httpd.apache.org/docs/2.2/mod/mod_ssl.html http://httpd.apache.org/docs/current/howto/auth.html http://httpd.apache.org/docs/current/howto/auth.html http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html http://httpd.apache.org/docs/current/mod/mod_proxy.html http://httpd.apache.org/docs/current/mod/mod_proxy.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/current/mod/mod_setenvif.html http://httpd.apache.org/docs/current/mod/mod_setenvif.html http://httpd.apache.org/docs/current/mod/mod_ssl.html http://httpd.apache.org/docs/current/mod/mod_ssl.html http://jira.ow2.org http://jira.ow2.org http://jira.ow2.org/browse/LEMONLDAP http://jira.ow2.org/browse/LEMONLDAP http://jira.ow2.org/browse/LEMONLDAP-176 http://jira.ow2.org/browse/LEMONLDAP-176 http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel http://joind.in/2862 http://joind.in/2862 http://journeesperl.fr/fpw2011/talk/3383 http://journeesperl.fr/fpw2011/talk/3383 http://jqueryui.com/themeroller/ http://jqueryui.com/themeroller/ http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ http://lanyrd.com/2011/confoo/sddcy/ http://lanyrd.com/2011/confoo/sddcy/ http://lanyrd.com/2011/fpw2011/sfhcb/ http://lanyrd.com/2011/fpw2011/sfhcb/ http://lanyrd.com/2011/jcos/sdrbd/ http://lanyrd.com/2011/jcos/sdrbd/ http://lanyrd.com/2011/jdll/smdct/ http://lanyrd.com/2011/jdll/smdct/ http://lanyrd.com/2011/ldapcon/sgqdf/ http://lanyrd.com/2011/ldapcon/sgqdf/ http://lanyrd.com/2011/rmll-2/sffqx/ http://lanyrd.com/2011/rmll-2/sffqx/ http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ http://lanyrd.com/2012/fosdem/spfqq/ http://lanyrd.com/2012/fosdem/spfqq/ http://lanyrd.com/2012/ow2-con12/scbcwz/ http://lanyrd.com/2012/ow2-con12/scbcwz/ http://lanyrd.com/2012/solutionslinux/sryym/ http://lanyrd.com/2012/solutionslinux/sryym/ http://lasso.entrouver.org http://lasso.entrouver.org http://lasso.entrouvert.org http://lasso.entrouvert.org http://lasso.entrouvert.org/ http://lasso.entrouvert.org/ http://lasso.entrouvert.org/download/ http://lasso.entrouvert.org/download/ http://ldapcon.org http://ldapcon.org http://ldapcon.org/img/ldapcon_2013_logo_square_date.png http://ldapcon.org/img/ldapcon_2013_logo_square_date.png http://lemonldap.ow2.org/NG/devel-doc/ http://lemonldap.ow2.org/NG/devel-doc/ http://linuxfr.org/news/sortie-de-lemonldapng-11 http://linuxfr.org/news/sortie-de-lemonldapng-11 http://linuxfr.org/news/sortie-de-lemonldapng-version-10 http://linuxfr.org/news/sortie-de-lemonldapng-version-10 http://mail.ow2.org/wws/arc/lemonldap-ng-changes http://mail.ow2.org/wws/arc/lemonldap-ng-changes http://mail.ow2.org/wws/arc/lemonldap-ng-dev http://mail.ow2.org/wws/arc/lemonldap-ng-dev http://mail.ow2.org/wws/arc/lemonldap-ng-users http://mail.ow2.org/wws/arc/lemonldap-ng-users http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev http://mail.ow2.org/wws/subscribe/lemonldap-ng-users http://mail.ow2.org/wws/subscribe/lemonldap-ng-users http://manager.example.com http://manager.example.com http://marcelhaise.com/rmll2009/#LemonLDAP http://marcelhaise.com/rmll2009/#LemonLDAP http://mb-c.pro/en/archives/7657 http://mb-c.pro/en/archives/7657 http://mb-c.pro/fr/archives/1468 http://mb-c.pro/fr/archives/1468 http://memcached.org/ http://memcached.org/ http://modauthkerb.sourceforge.net/ http://modauthkerb.sourceforge.net/ http://obm.org http://obm.org http://openid.net/specs/openid-authentication-1_1.html http://openid.net/specs/openid-authentication-1_1.html http://openid.net/specs/openid-authentication-2_0.html http://openid.net/specs/openid-authentication-2_0.html http://openid.net/specs/openid-simple-registration-extension-1_0.html http://openid.net/specs/openid-simple-registration-extension-1_0.html http://oss.oetiker.ch/mrtg/ http://oss.oetiker.ch/mrtg/ http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight http://packages.debian.org/search?keywords=lemonldap-ng http://packages.debian.org/search?keywords=lemonldap-ng http://packages.debian.org/search?keywords=lemonldap-ng&amp;searchon=names&amp;suite=all&amp;section=all http://packages.debian.org/search?keywords=lemonldap-ng&amp;searchon=names&amp;suite=all&amp;section=all http://perldoc.perl.org/MIME/Base64.html http://perldoc.perl.org/MIME/Base64.html http://perldoc.perl.org/Safe.html http://perldoc.perl.org/Safe.html http://perldoc.perl.org/functions/exit.html http://perldoc.perl.org/functions/exit.html http://perldoc.perl.org/functions/join.html http://perldoc.perl.org/functions/join.html http://perldoc.perl.org/functions/package.html http://perldoc.perl.org/functions/package.html http://perldoc.perl.org/functions/print.html http://perldoc.perl.org/functions/print.html http://perldoc.perl.org/functions/return.html http://perldoc.perl.org/functions/return.html http://perldoc.perl.org/functions/shift.html http://perldoc.perl.org/functions/shift.html http://phpldapadmin.sourceforge.net http://phpldapadmin.sourceforge.net http://portal/index.pl/sessions http://portal/index.pl/sessions http://repo.cyrus-project.org/centos$releasever-$basearch/RPMS.cyrus-extras/ http://repo.cyrus-project.org/centos$releasever-$basearch/RPMS.cyrus-extras/ http://repo.cyrus-project.org/centos5-i386/RPMS.cyrus-extras/ http://repo.cyrus-project.org/centos5-i386/RPMS.cyrus-extras/ http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en http://search.cpan.org/dist/Apache-Session-LDAP/ http://search.cpan.org/dist/Apache-Session-LDAP/ http://search.cpan.org/perldoc?Apache2::URI#unescape_url http://search.cpan.org/perldoc?Apache2::URI#unescape_url http://search.cpan.org/perldoc?Apache::Session http://search.cpan.org/perldoc?Apache::Session http://search.cpan.org/perldoc?Apache::Session::Browseable http://search.cpan.org/perldoc?Apache::Session::Browseable http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://search.cpan.org/perldoc?Apache::Session::Browseable::Redis http://search.cpan.org/perldoc?Apache::Session::Browseable::Redis http://search.cpan.org/perldoc?Apache::Session::File http://search.cpan.org/perldoc?Apache::Session::File http://search.cpan.org/perldoc?Apache::Session::Flex http://search.cpan.org/perldoc?Apache::Session::Flex http://search.cpan.org/perldoc?Apache::Session::Informix http://search.cpan.org/perldoc?Apache::Session::Informix http://search.cpan.org/perldoc?Apache::Session::Memcached http://search.cpan.org/perldoc?Apache::Session::Memcached http://search.cpan.org/perldoc?Apache::Session::MySQL http://search.cpan.org/perldoc?Apache::Session::MySQL http://search.cpan.org/perldoc?Apache::Session::Oracle http://search.cpan.org/perldoc?Apache::Session::Oracle http://search.cpan.org/perldoc?Apache::Session::Postgres http://search.cpan.org/perldoc?Apache::Session::Postgres http://search.cpan.org/perldoc?Apache::Session::Redis http://search.cpan.org/perldoc?Apache::Session::Redis http://search.cpan.org/perldoc?Apache::Session::Sybase http://search.cpan.org/perldoc?Apache::Session::Sybase http://search.cpan.org/perldoc?CGI http://search.cpan.org/perldoc?CGI http://search.cpan.org/perldoc?DBD::Oracle http://search.cpan.org/perldoc?DBD::Oracle http://search.cpan.org/perldoc?DBD::Pg http://search.cpan.org/perldoc?DBD::Pg http://search.cpan.org/perldoc?DBI http://search.cpan.org/perldoc?DBI http://search.cpan.org/perldoc?LWP::UserAgent http://search.cpan.org/perldoc?LWP::UserAgent http://search.cpan.org/search?query=DBD%3A%3A&mode=module http://search.cpan.org/search?query=DBD%3A%3A&mode=module http://search.cpan.org/search?query=Safe&mode=module http://search.cpan.org/search?query=Safe&mode=module http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://search.cpan.org/~mart/Net-OpenID-Consumer/ http://search.cpan.org/~mart/Net-OpenID-Consumer/ http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ http://search.cpan.org/~mmims/Net-Twitter/ http://search.cpan.org/~mmims/Net-Twitter/ http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps http://sourcesup.cru.fr/projects/perlcas/ http://sourcesup.cru.fr/projects/perlcas/ http://static.springsource.org/spring-security/site/ http://static.springsource.org/spring-security/site/ http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ http://test1.example.com http://test1.example.com http://test1.example.com/status http://test1.example.com/status http://test2.example.com http://test2.example.com http://tomcat.apache.org/ http://tomcat.apache.org/ http://tomcat.apache.org/tomcat-5.5-doc/logging.html http://tomcat.apache.org/tomcat-5.5-doc/logging.html http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://twitter.com/lemonldapng http://twitter.com/lemonldapng http://vhost.example.com/appli1 http://vhost.example.com/appli1 http://vhost.example.com/appli2 http://vhost.example.com/appli2 http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ http://webchat.freenode.net http://webchat.freenode.net http://websvn.ow2.org/listing.php?repname=lemonldap&path=%2Ftrunk%2Fcontribs%2Fapache-session-ldap%2F http://websvn.ow2.org/listing.php?repname=lemonldap&path=%2Ftrunk%2Fcontribs%2Fapache-session-ldap%2F http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1853 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1853 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1854 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1854 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1855 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1855 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1856 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1856 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1857 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1857 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1886 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1886 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1887 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1887 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1888 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1888 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1889 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1889 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1890 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1890 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1915 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1915 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1916 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1916 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1917 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1917 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1918 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1918 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1919 http://websvn.ow2.org/revision.php?repname=lemonldap&amp;path=%2F&amp;rev=1919 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2387 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2387 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2388 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2388 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2389 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2389 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2390 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2390 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2391 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2391 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2425 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2425 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2426 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2426 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2427 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2427 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2428 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2428 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2429 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2429 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2449 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2449 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2450 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2450 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2451 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2451 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2452 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2452 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2453 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2453 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2468 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2468 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2469 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2469 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2470 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2470 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2471 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2471 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2472 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2472 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2493 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2493 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2494 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2494 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2495 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2495 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2496 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2496 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2497 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2497 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2616 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2616 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2617 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2617 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2618 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2618 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2619 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2619 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2620 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2620 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2638 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2638 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2639 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2639 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2640 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2640 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2641 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2641 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2642 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2642 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2649 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2649 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2650 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2650 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2651 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2651 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2652 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2652 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2653 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2653 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2710 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2710 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2711 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2711 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2712 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2712 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2713 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2713 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2714 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2714 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2771 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2771 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2772 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2772 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2773 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2773 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2774 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2774 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2775 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=2775 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3005 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3005 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3006 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3006 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3007 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3007 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3008 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3008 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3009 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3009 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3059 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3059 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3060 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3060 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3061 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3061 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3062 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3062 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3063 http://websvn.ow2.org/revision.php?repname=lemonldap&path=%2F&isdir=1&rev=3063 http://wiki.lemonldap.ow2.org/xwiki/bin/view/NG/Documentation http://wiki.lemonldap.ow2.org/xwiki/bin/view/NG/Documentation http://wiki.sbay.org/ http://wiki.sbay.org/ http://wiki.zimbra.com/index.php?title=Preauth http://wiki.zimbra.com/index.php?title=Preauth http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 http://www.bugzilla.org http://www.bugzilla.org http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU http://www.dokuwiki.org/ http://www.dokuwiki.org/ http://www.facebook.com/home.php?#!/group.php?gid=205544862557 http://www.facebook.com/home.php?#!/group.php?gid=205544862557 http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 http://www.fitzdsl.net/?p=286 http://www.fitzdsl.net/?p=286 http://www.gendarmerie.interieur.gouv.fr/ http://www.gendarmerie.interieur.gouv.fr/ http://www.google.com/apps/ http://www.google.com/apps/ http://www.google.com/apps/intl/en/business/index.html http://www.google.com/apps/intl/en/business/index.html http://www.google.com/calendar/hosted/mydomain.org/render http://www.google.com/calendar/hosted/mydomain.org/render http://www.iana.org/assignments/enterprise-numbers http://www.iana.org/assignments/enterprise-numbers http://www.jasig.org/cas/protocol http://www.jasig.org/cas/protocol http://www.jcos.fr http://www.jcos.fr http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re http://www.jdll.org/node/206 http://www.jdll.org/node/206 http://www.lambdaprobe.org http://www.lambdaprobe.org http://www.liferay.com/ http://www.liferay.com/ http://www.limesurvey.org http://www.limesurvey.org http://www.linagora.com http://www.linagora.com http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN http://www.linux-ha.org/wiki/Heartbeat http://www.linux-ha.org/wiki/Heartbeat http://www.linuxpicnic.org/ http://www.linuxpicnic.org/ http://www.mediawiki.org http://www.mediawiki.org http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER http://www.mediawiki.org/wiki/Extension:HttpAuth http://www.mediawiki.org/wiki/Extension:HttpAuth http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication http://www.ohloh.net/p/lemonldap-ng http://www.ohloh.net/p/lemonldap-ng http://www.omegat.org/ http://www.omegat.org/ http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance http://www.ow2.org http://www.ow2.org http://www.php.net/array http://www.php.net/array http://www.php.net/empty http://www.php.net/empty http://www.php.net/session_start http://www.php.net/session_start http://www.private.com http://www.private.com http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre http://www.slideshare.net/coudot/lemonldapng-un-websso-libre http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng http://www.slideshare.net/coudot/rmll-2011-websso http://www.slideshare.net/coudot/rmll-2011-websso http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 http://www.slideshare.net/coudot/sl2011-lemon-ldapng http://www.slideshare.net/coudot/sl2011-lemon-ldapng http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 http://www.solutionslinux.fr/ http://www.solutionslinux.fr/ http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 http://www.svwux.org/ http://www.svwux.org/ http://www.switch.ch/aai/support/tools/wayf.html http://www.switch.ch/aai/support/tools/wayf.html http://www.sympa.org http://www.sympa.org http://www.tux.in.ua/articles/2810 http://www.tux.in.ua/articles/2810 http://www.w3.org/wiki/WebID http://www.w3.org/wiki/WebID http://www.wikipedia.org http://www.wikipedia.org http://www.youtube.com/watch?v=OJGB6jdN34Q http://www.youtube.com/watch?v=OJGB6jdN34Q http://www.yubico.com http://www.yubico.com http://www.yubico.com/yubikey http://www.yubico.com/yubikey http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://www.zimbra.com/ http://www.zimbra.com/ http://xmlns.com/foaf/spec/#sec-crossref http://xmlns.com/foaf/spec/#sec-crossref http://zimbra.example.com/zimbrasso http://zimbra.example.com/zimbrasso http://zimbra.lan/service/preauth http://zimbra.lan/service/preauth httpOnly httpOnly https https https://auth.abuledu.net/ https://auth.abuledu.net/ https://auth.example.com/ https://auth.example.com/ https://auth.linagora.com/ https://auth.linagora.com/ https://auth.sso.sbay.org/ https://auth.sso.sbay.org/ https://authssl.example.com https://authssl.example.com https://cas.unilim.fr/ https://cas.unilim.fr/ https://developer.mozilla.org/en-US/docs/Mozilla/Persona https://developer.mozilla.org/en-US/docs/Mozilla/Persona https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F https://developers.facebook.com/apps https://developers.facebook.com/apps https://developers.facebook.com/tools/explorer https://developers.facebook.com/tools/explorer https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO https://gist.github.com/njh/2432427 https://gist.github.com/njh/2432427 https://github.com/9h37/django-lemonldap https://github.com/9h37/django-lemonldap https://github.com/coudot/apache-session-ldap https://github.com/coudot/apache-session-ldap https://metacpan.org/module/Apache::Session::Browseable https://metacpan.org/module/Apache::Session::Browseable https://metacpan.org/module/Apache::Session::Browseable::LDAP https://metacpan.org/module/Apache::Session::Browseable::LDAP https://metacpan.org/module/Apache::Session::Browseable::Redis https://metacpan.org/module/Apache::Session::Browseable::Redis https://metacpan.org/module/Apache::Session::Flex https://metacpan.org/module/Apache::Session::Flex https://metacpan.org/module/Web::ID::Certificate::Generator https://metacpan.org/module/Web::ID::Certificate::Generator https://metacpan.org/release/Net-Facebook-Oauth2 https://metacpan.org/release/Net-Facebook-Oauth2 https://metacpan.org/release/Web-ID https://metacpan.org/release/Web-ID https://my-profile.eu/ https://my-profile.eu/ https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt https://plus.google.com/u/0/101819048603406959766/ https://plus.google.com/u/0/101819048603406959766/ https://rpmrepo.org/ https://rpmrepo.org/ https://rpmrepo.org/RPMforge/Using https://rpmrepo.org/RPMforge/Using https://twitter.com https://twitter.com https://upgrade.yubico.com/getapikey/ https://upgrade.yubico.com/getapikey/ https://verifier.login.persona.org/verify https://verifier.login.persona.org/verify https://websso.dmz.bpi.fr/ https://websso.dmz.bpi.fr/ https://wikit.firewall-services.com/doku.php?id=lemonldap_ng https://wikit.firewall-services.com/doku.php?id=lemonldap_ng https://www.djangoproject.com/ https://www.djangoproject.com/ https://www.portail.crbn.fr https://www.portail.crbn.fr https://www.public.com https://www.public.com icons:access.png icons:access.png icons:agt_web.png icons:agt_web.png icons:bug.png icons:bug.png icons:chat.png icons:chat.png icons:clock.png icons:clock.png icons:colors.png icons:colors.png icons:database.png icons:database.png icons:flags:de.png icons:flags:de.png icons:flags:fr.png icons:flags:fr.png icons:flags:ua.png icons:flags:ua.png icons:flags:us.png icons:flags:us.png icons:gpg.png icons:gpg.png icons:jabber_protocol.png icons:jabber_protocol.png icons:kmenuedit.png icons:kmenuedit.png icons:kmultiple.png icons:kmultiple.png icons:knewsticker.png icons:knewsticker.png icons:lists.png icons:lists.png icons:neotux.png icons:neotux.png icons:personal.png icons:personal.png icons:softwared.png icons:softwared.png icons:terminal.png icons:terminal.png icons:tutorials.png icons:tutorials.png icons:tux.png icons:tux.png icons:utilities.png icons:utilities.png icons:warehause.png icons:warehause.png icons:windowlist.png icons:windowlist.png icons:wizard.png icons:wizard.png icons:xeyes.png icons:xeyes.png icons:xfmail.png icons:xfmail.png id id id char<s3>(</s3>32<s4>)</s4> <s5>NOT</s5> <s6>NULL</s6> <s7>PRIMARY</s7> <s8>KEY</s8><s9>,</s9> id char<s3>(</s3>32<s4>)</s4> <s5>NOT</s5> <s6>NULL</s6> <s7>PRIMARY</s7> <s8>KEY</s8><s9>,</s9> if a user can access directly to the hidden application, it can bypass <a0>LL::NG</a0> protection Si un utilisateur peut accéder directement à l'application cachée, peut contourner la protection de <a0>LL::NG</a0> if many hidden applications are on the same private network, if one is corrupted (by <a0>SQL</a0> injection, or another attack), the hacker will be able to access to other applications without using reverse-proxies so it can bypass <a1>LL::NG</a1> protection Si de nombreuses applications se situent sur le même réseau privé et que l'un est corrompue (par <a0>SQL</a0> injection, ou toute autre attaque), le pirate peut accéder aux autres applications sans passer par les proxies inverses et donc contourner la protection <a1>LL::NG</a1> if you use “<a0>DBI</a0>” system, the notifications will be stored in the same database as configuration and in a table called “notifications”. si “<a0>DBI</a0>” est utilisé, les notifications sont stockées dans la même base de données que la configuration et la table est nommée “notifications”. if you use “<a0>LDAP</a0>” system, the notifications will be stored in the same directory as configuration and in a branch called “notifications”. si “<a0>LDAP</a0>” est utilisé, les notifications sont stockées dans la même arborescence que la configuration et la branche est nommée “notifications”. if you use “CDBI” or “RDBI” system, the notifications will be stored in the same database as configuration and in a table called “notifications”. si “CDBI” ou “RDBI” est utilisé, les notifications sont stockées dans la même base de données que la configuration et la table est nommée “notifications”. if you use “File” system and your “dirName” is set to /usr/local/lemonldap-ng/conf/, the notifications will be stored in /usr/local/lemonldap-ng/notifications/ si “File” est utilisé et que “dirName” vaut /usr/local/lemonldap-ng/conf/, les notifications seront stockées dans /usr/local/lemonldap-ng/notifications/ images and other media files images et autres médias impact impact import your own private and public keys (<c0>Load from a file</c0> input) importer vos propres clefs privées et publiques (entrée <c0>Charger depuis un fichier</c0>) in the value field, set the field name. dans le champ valeur, mettre le nom du champ. include /usr/share/lemonldap-ng/ressources/sso.schema include /usr/share/lemonldap-ng/ressources/sso.schema increased (+1) if portal is protected by <a0>SSL</a0> (HTTPS) augmenté (+1) si le portail est protégé par <a0>SSL</a0> (HTTPS) index/alphabetical.html index/alphabetical.html insert a label <s0>“LMAUTH”</s0> ahead of the loop insérer le label <s0>“LMAUTH”</s0> en tête de la boucle insert a loop around the <a0>HTML</a0> printing, starting with the object creation <e1>(→new)</e1> insérer une boucle autour de l'affichage <a0>HTML</a0>, démarrant avec la création de l'objet <e1>(→new)</e1> install_bin (/usr/local/lemonldap-ng/bin) install_bin (/usr/local/lemonldap-ng/bin) install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) install_examples_site (/usr/local/lemonldap-ng/examples) install_examples_site (/usr/local/lemonldap-ng/examples) install_handler_libs install_handler_libs install_handler_site (/usr/local/lemonldap-ng/handler) install_handler_site (/usr/local/lemonldap-ng/handler) install_libs (all <a0>Perl</a0> libraries) install_libs (toutes les librairies <a0>Perl</a0>) install_manager_libs install_manager_libs install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) install_portal_libs install_portal_libs install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) install_site (all sites including install_doc_site) install_site (all sites including install_doc_site) internal variables, managed by LemonLDAP::NG les variables internes, gérées par LemonLDAP::NG internal_email_by_netid 1 internal_email_by_netid 1 ipAddr ipAddr ipAddr <e0>WHATTOTRACE</e0> ipAddr <e0>WHATTOTRACE</e0> ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ipAddr varchar<s14>(</s14>15<s15>)</s15><s16>,</s16> ipAddr varchar<s14>(</s14>15<s15>)</s15><s16>,</s16> iso2unicode iso2unicode iso2unicode($name) iso2unicode($name) it may be the <e3>backbone</e3> of a heterogeneous architecture. il peut être le <e3>pivot</e3> d'une architecture hétérogène. jre > 1.4 jre > 1.4 jsonfileconfbackend jsonfileconfbackend kdc = ad.example.com kdc = ad.example.com kdestroy kdestroy kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com kinit ssokerberos@EXAMPLE.COM kinit ssokerberos@EXAMPLE.COM ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab language language lastname lastname ldap.auth.enabled=true ldap.auth.enabled=true ldap://localhost ldap://localhost ldapAuthnLevel ldapAuthnLevel ldapBase ldapBase ldapBindDN ldapBindDN ldapBindPassword ldapBindPassword ldapChangePasswordAsUser ldapChangePasswordAsUser ldapConfBase ldapConfBase ldapGroupAttributeName ldapGroupAttributeName ldapGroupAttributeNameGroup ldapGroupAttributeNameGroup ldapGroupAttributeNameSearch ldapGroupAttributeNameSearch ldapGroupAttributeNameUser ldapGroupAttributeNameUser ldapGroupBase ldapGroupBase ldapGroupObjectClass ldapGroupObjectClass ldapGroupRecursive ldapGroupRecursive ldapPasswordResetAttribute ldapPasswordResetAttribute ldapPasswordResetAttributeValue ldapPasswordResetAttributeValue ldapPort ldapPort ldapPpolicyControl ldapPpolicyControl ldapPwdEnc ldapPwdEnc ldapRaw ldapRaw ldapServer ldapServer ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> ldapSetPassword ldapSetPassword ldapTimeout ldapTimeout ldapUsePasswordResetAttribute ldapUsePasswordResetAttribute ldapVersion ldapVersion ldapgroups -> memberOf ldapgroups -> memberOf ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> lemonldap-ng-changes@ow2.org lemonldap-ng-changes@ow2.org lemonldap-ng-conf: contains default configuration (<a0>DNS</a0> domain: example.com) lemonldap-ng-conf : contient la configuration par défaut (domaine <a0>DNS</a0> : example.com) lemonldap-ng-dev@ow2.org lemonldap-ng-dev@ow2.org lemonldap-ng-doc: contains <a0>HTML</a0> documentation and project docs (README, etc.) lemonldap-ng-doc : contient la documentation <a0>HTML</a0> et celle du projet (README, etc...) lemonldap-ng-handler: contains Apache Handler implementation (agent) lemonldap-ng-handler : contient l'implémentation de l'agent pour Apache (handler) lemonldap-ng-manager: contains administration interface and session explorer lemonldap-ng-manager : contient l'interface d'administration et l'explorateur de session lemonldap-ng-portal-appslist.png lemonldap-ng-portal-appslist.png lemonldap-ng-portal-auth.png lemonldap-ng-portal-auth.png lemonldap-ng-portal-password.png <lemonldap-ng-portal-password.png lemonldap-ng-portal: contains authentication portal and menu lemonldap-ng-portal : contient le portail d'authentification et le menu lemonldap-ng-test: contains sample <a0>CGI</a0> test page lemonldap-ng-test : contient une simple page <a0>CGI</a0> de test lemonldap-ng-testpage.png lemonldap-ng-testpage.png lemonldap-ng-users@ow2.org lemonldap-ng-users@ow2.org lemonldap-ng: meta-package, contains no file but dependencies on other packages lemonldap-ng : meta-paquet qui ne contient aucun fichier mais des dépendances vers les autres paquets lemonldap_ng_manager_1340022440100.png lemonldap_ng_manager_1340022440100.png lemonldap_ng_sample_protected_application_1340022329086.png lemonldap_ng_sample_protected_application_1340022329086.png lemonldap_ng_session_explorer_1340022388573.png lemonldap_ng_session_explorer_1340022388573.png lemonldapng lemonldapng liblemonldap-ng-common-perl: configuration and common files liblemonldap-ng-common-perl : fichiers communs et de configuration liblemonldap-ng-conf-perl: configuration and common files liblemonldap-ng-conf-perl : fichiers communs et de configuration liblemonldap-ng-handler-perl: Handler files liblemonldap-ng-handler-perl : fichiers des agents liblemonldap-ng-manager-perl: Manager files liblemonldap-ng-manager-perl : fichiers du manager liblemonldap-ng-portal-perl: Portal files liblemonldap-ng-portal-perl : fichiers du portail ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ ln -s /var/lib/lemonldap-ng/portal/index.pl /var/lib/lemonldap-ng/portal/kerberos.pl ln -s /var/lib/lemonldap-ng/portal/index.pl /var/lib/lemonldap-ng/portal/kerberos.pl localStorage localStorage localStorageOptions localStorageOptions locationRules locationRules login login login: $uid (uid of the user) login: $uid (uid de l'utilisateur) loginHistory loginHistory logos:logo-ul.png logos:logo-ul.png logos:logo_abuledu.png logos:logo_abuledu.png logos:logo_bpi.png logos:logo_bpi.png logos:logo_gn.png logos:logo_gn.png logos:logo_linagora.png logos:logo_linagora.png logos:logo_ministere_justice.jpg logos:logo_ministere_justice.jpg logos:logo_rbn.png logos:logo_rbn.png logos:logo_ucanss.png logos:logo_ucanss.png logos:sgs_white_small.jpg logos:sgs_white_small.jpg logout_app_sso http://intranet/ logout_app_sso http://intranet/ logout_app https://auth.example.com/ logout_app https://auth.example.com/ logout_sso logout_sso logout_sso http://intranet/ logout_sso http://intranet/ logout_url http://sympa.example.com/wws/logout logout_url http://sympa.example.com/wws/logout macro and groups les macro et groupes macros macros macros are used to extend (or rewrite) <a0>exported variables</a0>. les macros sont utilisées pour étendre (ou réécrire) les <a0>variables exportées</a0>. macros are used to extend (or rewrite) <s0><a1>exported variables</a1></s0>. Les macros sont utilisées pour étendre (ou réécrire) les <s0><a1>variables exportées</a1></s0>. mail mail mailBody mailBody mailCharset mailCharset mailConfirmBody mailConfirmBody mailConfirmSubject mailConfirmSubject mailFrom mailFrom mailLDAPFilter mailLDAPFilter mailOnPasswordChange mailOnPasswordChange mailR mailR mailReplyTo mailReplyTo mailSessionKey mailSessionKey mailSubject mailSubject mailTimeout mailTimeout mailUrl mailUrl mailreset_step1.png mailreset_step1.png mailreset_step2.png mailreset_step2.png mailreset_step3.png mailreset_step3.png mailreset_step4.png mailreset_step4.png mailreset_step5.png mailreset_step5.png mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x63;&#x68;&#x61;&#x6e;&#x67;&#x65;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x63;&#x68;&#x61;&#x6e;&#x67;&#x65;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x64;&#x65;&#x76;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x64;&#x65;&#x76;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x75;&#x73;&#x65;&#x72;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:&#x6c;&#x65;&#x6d;&#x6f;&#x6e;&#x6c;&#x64;&#x61;&#x70;&#x2d;&#x6e;&#x67;&#x2d;&#x75;&#x73;&#x65;&#x72;&#x73;&#x40;&#x6f;&#x77;&#x32;&#x2e;&#x6f;&#x72;&#x67; mailto:lemonldap-ng-changes@ow2.org mailto:lemonldap-ng-changes@ow2.org mailto:lemonldap-ng-dev@ow2.org mailto:lemonldap-ng-dev@ow2.org mailto:lemonldap-ng-users@ow2.org mailto:lemonldap-ng-users@ow2.org maintenance maintenance make make test make make test make debian-install make debian-install make dist make dist make ubuntu-install make ubuntu-install managerCss managerCss managerCssTheme managerCssTheme managerDn managerDn managerPassword managerPassword managerSkin managerSkin managerTreeAutoClose managerTreeAutoClose managerTreeJqueryCss managerTreeJqueryCss menu.png menu.png mkdir /tmp/MyNamespace/2: Permission denied ... mkdir /tmp/MyNamespace/2: Permission denied ... mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ msmith msmith msmith@badwolf.org msmith@badwolf.org multi multi multi <s0>=></s0> <s1>{</s1> multi <s0>=></s0> <s1>{</s1> multiValuesSeparator multiValuesSeparator my-profile.eu my-profile.eu mysqladmin create lemonldapng mysqladmin create lemonldapng mysuperpassword mysuperpassword name nom name => foaf:name nom => foaf:name netid_http_header HTTP_AUTH_USER netid_http_header HTTP_AUTH_USER nickname nickname noindex noindex nothing here... rien ici... notification notification notificationStorage notificationStorage notificationStorageOptions notificationStorageOptions notificationWildcard notificationWildcard notifications_explorer_create.png notifications_explorer_create.png notifyDeleted notifyDeleted notifyOther notifyOther nullAuthnLevel nullAuthnLevel number numero obm obm one secured (<a0>SSL</a0> only) for sensitive applications un sécurisé (<a0>SSL</a0> seulement) pour les applications sensibles one unsecured for other applications un non-sécurisé pour les autres applications one with just read rights for other servers une avec seulement des droits en lecture pour les autres serveurs one with read/write rights for servers hosting the manager une avec des droits en lecture/écriture pour les serveurs hébergeant le manager openIdAuthnLevel openIdAuthnLevel openIdIDPList openIdIDPList openIdSecret openIdSecret openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem or to use lemonldap-ng.ini, install it (one line only) in [portal] section: ou pour utiliser lemonldap-ng.ini, écrire (sur une seule ligne) dans la section [portal] : or: ou : ou=sessions,dc=example,dc=com ou=sessions,dc=example,dc=com overload any <a0>LL::NG</a0> <a1>parameter</a1> when a specific backend is used surcharger n'importe quel <a1>paramètre</a1> <a0>LL::NG</a0> en fonction du backend utilisé pages/contact.html pages/contact.html pages/documentation.html pages/documentation.html pages/start.html pages/start.html password password password.png password.png password: $_password (password of the user) password: $_password (mot-de-passe de l'utilisateur) passwordDB passwordDB pastel pastel perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. perl-Lemonldap-NG-Common: CPAN - Shared modules perl-Lemonldap-NG-Common : CPAN - modules partagés perl-Lemonldap-NG-Handler: CPAN - Handler modules perl-Lemonldap-NG-Handler : CPAN - modules agent perl-Lemonldap-NG-Manager: CPAN - Manager modules perl-Lemonldap-NG-Manager : CPAN - modules manager perl-Lemonldap-NG-Portal: CPAN - Portal modules perl-Lemonldap-NG-Portal : CPAN - modules portail persistentStorage persistentStorage persistentStorageOptions persistentStorageOptions phpLDAPadmin phpLDAPadmin phpLDAPadmin local configuration Configuration locale phpLDAPadmin phpLDAPadmin virtual host in Apache Hôte virtuel phpLDAPadmin dans le manager phpLDAPadmin virtual host in Manager Hôte virtuel phpLDAPadmin dans le manager phpLDAPadmin will connect to the directory with a static <a0>DN</a0> and password, and so will not request authentication anymore. phpLDAPadmin se connecte au serveur avec un <a0>DN</a0> et un mot-de-passe statique et ne requiert ainsi aucune authentification. phpLDAPadmin will have no idea of the user connected to the WebSSO. phpLDAPadmin ne connaît donc pas le nom du l'utilisateur connecté au WebSSO. port port portal portail portal is in a https virtualhost if securedCookie is set le portail est dans un hôte virtuel https si securedCookie est activé portal.png portal.png portal/skins/common/mail_confirm.tpl portal/skins/common/mail_confirm.tpl portal/skins/common/mail_password.tpl portal/skins/common/mail_password.tpl portalAntiFrame portalAntiFrame portalAutocomplete portalAutocomplete portalDisplayAppslist portalDisplayAppslist portalDisplayChangePassword portalDisplayChangePassword portalDisplayLogout portalDisplayLogout portalDisplayResetPassword portalDisplayResetPassword portalOpenLinkInNewWindow portalOpenLinkInNewWindow portalRequireOldPassword portalRequireOldPassword portalSkin portalSkin portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> portalUserAttr portalUserAttr postcode postcode press press press.html press.html protect the manager by <a0>LL::NG</a0> protéger le manager par <a0>LL::NG</a0> protect the manager by Apache configuration protéger le manager par configuration d'Apache protection protection provide identities to other systems fournir une identité à d'autres systèmes proxy proxy proxyOptions proxyOptions psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng purge old sessions purger les anciennes sessions quickstart Démarrage rapide qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); radiusAuthnLevel radiusAuthnLevel radiusSecret radiusSecret radiusServer radiusServer randomPasswordRegexp randomPasswordRegexp ref varchar<s11>(</s11>255<s12>)</s12> <s13>NOT</s13> <s14>NULL</s14><s15>,</s15> ref varchar<s11>(</s11>255<s12>)</s12> <s13>NOT</s13> <s14>NULL</s14><s15>,</s15> ref: a reference that can be used later to know what has been notified and when ref : une référence qui peut être utilisée plus tard pour connaître ce qui a été notifié et quand references Références references.html references.html reloadTime reloadTime remember: '1' (checked box) remember: '1' (une case à cocher) remoteCookieName remoteCookieName remoteGlobalStorage remoteGlobalStorage remoteGlobalStorageOptions remoteGlobalStorageOptions remotePortal remotePortal rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 rm custom* cp ../pastel/custom* . rm custom* cp ../pastel/custom* . rpm --import rpm-gpg-key-ow2 rpm --import rpm-gpg-key-ow2 rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* rpm-gpg-key-ow2 rpm-gpg-key-ow2 rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz rtyler rtyler rtyler@badwolf.org rtyler@badwolf.org samlStorage samlStorage samlStorageOptions samlStorageOptions sample_notification.png sample_notification.png screenshots captures d'écran screenshots.html screenshots.html screenshots:1.1:mailreset:mailreset_step1.png screenshots:1.1:mailreset:mailreset_step1.png screenshots:1.1:mailreset:mailreset_step2.png screenshots:1.1:mailreset:mailreset_step2.png screenshots:1.1:mailreset:mailreset_step3.png screenshots:1.1:mailreset:mailreset_step3.png screenshots:1.1:mailreset:mailreset_step4.png screenshots:1.1:mailreset:mailreset_step4.png screenshots:1.1:mailreset:mailreset_step5.png screenshots:1.1:mailreset:mailreset_step5.png screenshots:1.1:manager:notifications_explorer_create.png screenshots:1.1:manager:notifications_explorer_create.png screenshots:1.1:notifications:sample_notification.png screenshots:1.1:notifications:sample_notification.png screenshots:rbn:rbn-applis.png screenshots:rbn:rbn-applis.png screenshots:rbn:rbn-portal.png screenshots:rbn:rbn-portal.png secret secret secureTokenAllowOnError secureTokenAllowOnError secureTokenAttribute secureTokenAttribute secureTokenExpiration secureTokenExpiration secureTokenHeader secureTokenHeader secureTokenMemcachedServers secureTokenMemcachedServers secureTokenUrls secureTokenUrls securedCookie securedCookie sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl server server server based restriction (like Apache “allow/deny” mechanism) restrictions basées sur le serveur (tel le mécanisme “allow/deny” d'Apache) service_id lemonldapng service_id lemonldapng service_name Centralized auth service service_name Centralized auth service service_name LemonLDAP::NG service_name LemonLDAP::NG singleIP singleIP singleSession singleSession singleUserByIP singleUserByIP skip skip sn sn soapAuthService soapAuthService soapSessionService soapSessionService specification spécification ssoEndDate ssoEndDate ssoLogonHours ssoLogonHours ssoName ssoName ssoRoles ssoRoles ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com ssoRoles: user ssoRoles: admin ssoRoles: user ssoRoles: admin ssoStartDate ssoStartDate stack several times the same module with a different name empiler plusieurs fois le même module avec un nom différent start Commencer start.html start.html startTime startTime static: 'StaticValue' (a static value) static: 'StaticValue' (une valeur statique) status status storePassword storePassword string chaîne su - postgres createuser lemonldap-ng -P su - postgres createuser lemonldap-ng -P sudo apachectl configtest sudo apachectl restart sudo apachectl configtest sudo apachectl restart sudo apt-get install liblasso3-perl sudo apt-get install liblasso3-perl sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini sudo make install sudo make install sudo make install LDAPSUFFIX=mysuffix sudo make install LDAPSUFFIX=mysuffix sudo make install PARAM=VALUE PARAM=VALUE ... sudo make install PARAM=VALUE PARAM=VALUE ... sudo make postconf sudo make postconf svn checkout svn+ssh://developername@svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn+ssh://nomDuDeveloppeur@svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap sympaMailKey sympaMailKey sympaSecret sympaSecret syslog syslog tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test tar zxvf lemonldap-ng-*.tar.gz tar zxvf lemonldap-ng-*.tar.gz tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* tchemineau tchemineau tchemineau@example.com tchemineau@example.com text/html; charset=utf-8 text/html; charset=utf-8 the <a0>portal</a0> le <a0>portail</a0> the manager (for internal use only) le manager (à usage interne seulement) the portal is in the declared domain le portail est dans le domaine déclaré timeout timeout timezone timezone to the configuration backend au système de stockage de la configuration to the sessions storage backend au système de stockage des sessions tomcat >= 5.5 tomcat >= 5.5 touch /tmp/pgt.txt touch /tmp/pgt.txt translation memory directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ Répertoire des mémoires de traduction = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ translations traductions translations.html translations.html tree_dark.png tree_dark.png tree_light.png tree_light.png trustedDomains trustedDomains twitterAppName twitterAppName twitterAuthnLevel twitterAuthnLevel twitterKey twitterKey twitterSecret twitterSecret uid uid uid ipAddr uid ipAddr uid varchar<s11>(</s11>255<s12>)</s12><s13>,</s13> uid varchar<s11>(</s11>255<s12>)</s12><s13>,</s13> uid varchar<s6>(</s6>255<s7>)</s7> <s8>NOT</s8> <s9>NULL</s9><s10>,</s10> uid varchar<s6>(</s6>255<s7>)</s7> <s8>NOT</s8> <s9>NULL</s9><s10>,</s10> uid: 123456789012 uid: 123456789012 uid: coudot uid: coudot uid: the user login (it must correspond to the attribute set in whatToTrace parameter, uid by default), or the wildcard string (by default: <c0>allusers</c0>) if the notification should be displayed for every user. uid : le nom de connexion de l'utilisateur (il doit correspondre à l'attribut utilisé dans le paramètre whatToTrace, uid par défaut), ou la carte blanche (par défaut : <c0>allusers</c0>) si la notification doit être affichée à tous les utilisateurs. uidR uidR unicode2iso unicode2iso unicode2iso($name) unicode2iso($nom) unprotect unprotect update-alternatives --config editor update-alternatives --config editor updateTime updateTime upgrade upgrade use any key name you want. utiliser n'importe quel nom de clef. useRedirectOnError useRedirectOnError useSafeJail useSafeJail useXForwardedForIP useXForwardedForIP user user user email Email de l'utilisateur user full name Nom complet de l'utilisateur user login nom de connexion user; admin user; admin userDB userDB userPivot userPivot using Apache authentication system (used for <a0>SSL</a0>, <a1>Kerberos</a1>, <a2>HTTP basic authentication</a2>, …) utilisant le système d'authentification d'Apache (utilisé pour <a0>SSL</a0>, <a1>Kerberos</a1>, l'<a2>authentification HTTP basique</a2>, …) using external identity provider (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, other <a4>LL::NG</a4> system, …) utilisant un fournisseur d'identité externe (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, autres systèmes <a4>LL::NG</a4>, …) using own database (<a0>LDAP</a0>, <a1>SQL</a1>, …) utilisant une base de données propre (<a0>LDAP</a0>, <a1>SQL</a1>, …) valeur valeur value valeur value longblob, value longblob, variables variables vi /etc/apt/sources.list.d/lemonldap-ng.list vi /etc/apt/sources.list.d/lemonldap-ng.list vi /etc/lemonldap-ng/apache2.conf.rpmsave vi /etc/lemonldap-ng/apache2.conf.rpmsave vi /etc/sympa/auth.conf vi /etc/sympa/auth.conf vi /etc/yum.repos.d/lemonldap-ng.repo vi /etc/yum.repos.d/lemonldap-ng.repo vi /root/SSOExtensions.pm vi /root/SSOExtensions.pm vi /var/lib/lemonldap-ng/portal/login.pl vi /var/lib/lemonldap-ng/portal/login.pl vi /var/www/html/limesurvey/config.php vi /var/www/html/limesurvey/config.php vi LocalSettings.php vi LocalSettings.php wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz whatToTrace whatToTrace writingrulesand_headers writingrulesand_headers xguimard xguimard xguimard@example.com xguimard@example.com xml longblob <s21>NOT</s21> <s22>NULL</s22><s23>,</s23> xml longblob <s21>NOT</s21> <s22>NULL</s22><s23>,</s23> you've restart all Apache server after having change cookie name or domain tous les serveurs Apache ont été rechargés après un changement du nom de cookie ou du domaine yubikeyAuthnLevel yubikeyAuthnLevel yubikeyClientID yubikeyClientID yubikeyPublicIDSize yubikeyPublicIDSize yubikeySecretKey yubikeySecretKey yum install httpd mod_perl perl-Apache-Session perl-LDAP perl-XML-SAX perl-XML-NamespaceSupport perl-HTML-Template perl-Regexp-Assemble perl-Error perl-IPC-ShareLite perl-Cache-Cache perl-FreezeThaw perl-XML-Simple perl-version perl-CGI-Session perl-DBD-Pg perl-XML-LibXML-Common perl-BSD-Resource perl-XML-LibXML perl-Crypt-Rijndael perl-IO-String perl-XML-LibXSLT perl-SOAP-Lite perl-Config-IniFiles perl-JSON perl-Digest-HMAC perl-String-Random perl-MIME-Lite perl-Email-Date-Format perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-X509 perl-Clone perl-Authen-SASL yum install httpd mod_perl perl-Apache-Session perl-LDAP perl-XML-SAX perl-XML-NamespaceSupport perl-HTML-Template perl-Regexp-Assemble perl-Error perl-IPC-ShareLite perl-Cache-Cache perl-FreezeThaw perl-XML-Simple perl-version perl-CGI-Session perl-DBD-Pg perl-XML-LibXML-Common perl-BSD-Resource perl-XML-LibXML perl-Crypt-Rijndael perl-IO-String perl-XML-LibXSLT perl-SOAP-Lite perl-Config-IniFiles perl-JSON perl-Digest-HMAC perl-String-Random perl-MIME-Lite perl-Email-Date-Format perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-X509 perl-Clone perl-Authen-SASL yum install lemonldap-ng yum install lemonldap-ng yum install mod_auth_kerb yum install mod_auth_kerb yum install mod_ssl yum install mod_ssl yum install perl-Authen-Radius yum install perl-Authen-Radius yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* yum update yum update zimbra zimbra zimbraAccountKey zimbraAccountKey zimbraBy zimbraBy zimbraPreAuthKey zimbraPreAuthKey zimbraSsoUrl zimbraSsoUrl zimbraUrl zimbraUrl } [domain_realm] } [domain_realm] }?); }?); ~10 ~10 ~100 ~100 ~1000 ~1000 ~150 ~150 ~17000 ~17000 ~1800 ~1800 ~3 ~3 ~40 000 ~40 000 ~5 ~5 ~50 ~50 ~500 ~500 ~7500 ~7500 “myfield ⇒ firstname” can be ”” “mavariable ⇒ firstname” peut valoir ”” “static-value” “static-value” ”!myfield ⇒ lastname” must be set ”!mavariable ⇒ lastname” doit être renseignée …. …. → Check grantSessionRule parameter. → Vérifier le paramètre grantSessionRule. → LemonLDAP::NG uses a key to crypt/decrypt some datas. → LemonLDAP::NG utilise une clef pour chiffrer/déchiffrer certaines données. → Local cache cannot be cleard, check the localStorage and localStorageOptions or file permissions → Le cache local ne peut être effacé, regarder les options localStorage and localStorageOptions ou les droits associés à ces fichiers → Some <a0>URL</a0> parameters contain forbidden characters. → Certains paramètres de l'<a0>URL</a0> contiennent des caractères interdits. → The cache has been created by another user than Apache's user. → Le cache a été créé par un autre utilisateur que celui d'Apache. → The configuration cannot be loaded. → La configuration ne peut être chargée. → The host is not known by LemonLDAP::NG. → L'hôte n'est pas connu de LemonLDAP::NG. → The specified node is not the uploaded tree. → Le nœud spécifié n'est pas dans l'arbre chargé. → The specified virtual host was not configured in Manager. → L'hôte virtuel utilisé n'est pas configuré dans le manager. → User does not have Lemonldap::NG cookie, handler redirect it to the portal → L'utilisateur ne dispose pas d'un cookie Lemonldap::NG, l'agent le redirige vers le portail → User session has expired or handler does not have access to the same Apache::Session database than the portal → La session de l'utilisateur a expiré ou l'agent n'a pas accès à la même base de données Apache::Session que le portail → When you upgrade from Debian Lenny with customized index.pl files, you must upgrade them. → Lors d'une mise à jour d'une Debian Lenny avec un fichier index.pl personnalisé, il faut le mettre à jour. → You do not use the new configuration syntax for application list. → La nouvelle syntaxe de configuration de la liste des applications n'est pas utilisée. → You tried to activate Status module without localStorage. → Le module Status est activé sans localStorage. → You use the Apache authentication backend, but Apache is not or bad configured (no REMOTE_USER send to LemonLDAP::NG). → Le backend d'authentification Apache est utilisé, mais Apache n'est pas ou mal configuré (la variable d'environnement REMOTE_USER n'est pas envoyée à LemonLDAP::NG). → Your browser loops between portal and handler, it is probably a cookie problem. → le navigateur boucle entre le portail et l'agent, il s'agit probablement d'un problème.
lemonldap-ng-1.4.6/omegat.files/fr/omegat/learned_words.txt0000664000175000017500000000000012542740736023572 0ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/omegat/ignored_words.txt0000664000175000017500000000000012542740736023607 0ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/dictionary/0000775000175000017500000000000012542740733021101 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/fr-omegat.tmx0000664000175000017500000574710112605703456021367 0ustar clementclement
Go in Manager, <c0>General Parameters</c0> » <c1>Sessions </c1> » <c2>Store user password in session data</c2> and set to <c3>On</c3>. Aller dans le manager, <c0>paramètres généraux</c0> » <c1>Sessions </c1> » <c2>Stocker le mot-de-passe dans les données de session</c2> et le mettre à <c3>Activer</c3>. OID prefix Préfixe OID In Manager, click on <c0>notifications explorer</c0> and then on the <c1>Create</c1> button. Dans le manager, cliquer sur l'<c0>explorateur des notifications</c0> et ensuite sur le bouton <c1>Créer</c1>. Extract and build the module: Extraire et compiler le module: This parameter is used by <a0>SAML IDP</a0> to fill the NameID in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour construire le NameID dans les réponses d'authentification. ../pages/documentation/1.1/federationproxy.html ../pages/documentation/1.1/federationproxy.html ^/index.php\?.*access=admin ^/index.php\?.*access=admin documentation:1.4:applications:mediawiki documentation:1.4:applications:mediawiki coudot coudot You can also use the <a0>internal proxy</a0> to replace Apache mod_proxy configuration. On peut aussi utiliser le <a0>proxy interne</a0> pour remplacer mod_proxy d'Apache. PerlInitHandler My::Handler PerlInitHandler My::Handler Install all build dependencies (see BuildRequires in lemonldap-ng.<a0>spec</a0>) Installer toutes les dépendances de construction (voir BuildRequires dans lemonldap-ng.<a0>spec</a0>) Persistent Session backend Backend des sessions persistantes <a0>default_sidebar</a0><br1/> <a0>default_sidebar</a0><br1/> This requires <a1>Perl OpenID consumer module</a1> with at least version 1.0. Ceci requiert le <a1>module client OpenID pour Perl</a1>, version au moins supérieure ou égale à 1.0. <s0>Login field name in user table</s0>: name of user table column hosting login <s0>Nom du champ login dans la table utilisateur</s0> : nom de la colonne de la table utilisateur contenant le login <a0>CAS</a0>_proxiedServices <a0>CAS</a0>_proxiedServices This requires to configure <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>. Allow only one session per <a0>IP</a0> address N'autoriser qu'une session par adresse <a0>IP</a0> Multi overridden parameters Paramètres surchargés pour "Multi" <a0>Bugzilla</a0> is server software designed to help you manage software development. <a0>Bugzilla</a0> est un logiciel serveur conçu pour assister la gestion de développement logiciel. Provides identity if asked Fournit l'identitié si demandée Sympa virtual host in Manager Hôte virtuel Sympa dans le manager documentation:1.4:extendedfunctions documentation:1.4:extendedfunctions documentation:1.4:status documentation:1.4:status <s0>Address</s0>: set one of Google Apps <a1>URL</a1> (all Google Apps product a distinct <a2>URL</a2>), for example <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> <s0>Address</s0> : indiquer une des <a1>URL</a1> de Google Apps (chaque application Google Apps produit une <a2>URL</a2> distincte), par exemple <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> SQL configuration backend (called RDBI or CDBI) Backend de configuration SQL (appelé RDBI ou CDBI) <s0>Session key containing mail address</s0>: name of the session key containing email address. <s0>Clef de session contenant l'adresse mail</s0> : nom de la clef de session contenant l'adresse de courriel. <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <a0>fastcgi</a0><br1/> <a0>fastcgi</a0><br1/> This schema shows the dependencies between modules: Ce schéma montre les dépendancesentre ces modules : Regexp::Assemble Regexp::Assemble It is targeted at developer teams, workgroups and small companies. Il est destiné aux équipes de développeurs, groupes de travail ou petites entreprises. 2 2 1 1 0 0 If you disallow this, you should also disallow direct login form IDP, because proxy restriction is set in authentication requests. En interdisant ceci, on risque d'interdire aussi les authentification directe des IDP car la restriction est indiquée dans la requête d'authentification. <s0>CA file</s0>: CA certificate used to validate <a1>CAS</a1> server certificate <s0>Fichier CA</s0> : certificat de la CA utilisée pour valider le certificat du serveur <a1>CAS</a1> <a6>menu1</a6><br7/> <a6>menu1</a6><br7/> openIdSecret openIdSecret SAML 2.0 / Shibboleth SAML 2.0 / Shibboleth Now you have access to the IDP parameters list: Il est ensuite possible d'accéder à la liste des paramètre de l'IDP : Use rule comments to order your rules Utiliser les commentaires pour ordonner les règles Sub elements: Éléments subordonnés : D D Other modules must be installed only if you planned to use the related feature. Les autres modules ne doivent être installés que s'il est prévu d'utiliser les fonctionnalités associées. E E RHEL/CentOS 6 RHEL/CentOS 6 <s0>Site Logo</s0>: Logo that will be displayed in the BrowserID login window. <s0>Logo du site</s0> : Logo qui sera affiché dans la fenêtre d'authentification BrowserID. F F Local macros Macros locales G G RHEL/CentOS 5 RHEL/CentOS 5 A A <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ B B The <c0>convertConfig</c0> utility reads 2 <a1>LL::NG</a1> configuration files (<c2>lemonldap-ng.ini</c2>): L'utilitaire <c0>convertConfig</c0> lit 2 fichiers de configuration <a1>LL::NG</a1> (<c2>lemonldap-ng.ini</c2>) : C C L L If you enable auto completion, authentication level will be decreased (-1) as you do not ask the user to type its password (it could be in browser passwords wallet). En activant l'auto-complétion, le niveau d'authentification est décru (-1) car on ne demande plus à l'utilisateur de taper son mot-de-passe (il peut être protégé dans le navigateur). M M N N O O H H I I <s0>Cookie name</s0> (optional): name of the cookie of internal portal, if different from external portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail interne s'il est différent de celui du portail externe J J 0.9.4_authentication_portal.png 0.9.4_authentication_portal.png U U T T /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots W W V V The following sample parameters will be used: Les paramètres suivants sont utilisés pour l'exemple : Q Q <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> By default, the main session module is used to store <a0>SAML</a0> temporary data (like relay-states), but <a1>SAML</a1> sessions need to use a session module compatible with the <a2>sessions restrictions feature</a2>. Par défautBy, le module de session principal est utilisé pour stocker les données temporaires <a0>SAML</a0> (tel les états de relais), mais les sessions <a1>SAML</a1> doivent disposer d'un module compatible avec les <a2>fonctionnalités de restrictions des sessions</a2>. <s0>Auto complete</s0>: allow the browser to remember the password (for password based authentication backends) <s0>Auto complétion</s0> : autorise le navigateur à retenir le mot-de-passe (pour les backends d'authentification basés sur des mots-de-passe) Issuer rewrite rules (requires <c0>mod_rewrite</c0>): Règles de réécriture pour la fourniture d'identité (requiert <c0>mod_rewrite</c0>): P P You just have to create error_zz and msg_zz subroutines <e1>(where zz is your international code, example: “fr” for France)</e1> by copying error_en and msg_en. Vous avez simplement à créer les fonctions error_zz et msg_zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> en copiant error_en et msg_en. Unifying authentications (federation) Unifier les authentifications (fédération) S S R R Z Z _cas_id _cas_id Yubikey authentication level Niveau d'authentification de Yubikey ../../download.html ../../download.html Access log: the issuer of each request is identified Journaux d'accès (AccessLog) : l'utilisateur de chaque requête est identifié http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> Options Options documentation:1.3:upgrade documentation:1.3:upgrade basic($uid,$_password) basic($uid,$_password) Unable to clear local cache Unable to clear local cache <s0>Key</s0>: category identifier <s0>Clef</s0> : identifiant de catégorie Installation Installation Remote portal Portail distant Example: <a2>http://auth.example.com/?logout=1</a2> Exemple: <a2>http://auth.example.com/?logout=1</a2> <s0>APACHEUSER</s0>: user running Apache <s0>APACHEUSER</s0> : utilisateur de fonctionnement d'Apache If you need it, you can rebuild RPMs: Si besoin, on peut reconstruire les RPMs : 127.0.0.1:6379 127.0.0.1:6379 http://lasso.entrouvert.org/download/ http://lasso.entrouvert.org/download/ You can set the default access to: Il est possible de mettre l'accès par défaut à : <a0>Zimbra</a0> is open source server software for email and collaboration - email, group calendar, contacts, instant messaging, file storage and web document management. <a0>Zimbra</a0> est un logiciel serveur collaboratif et de messagerie open-source - messagerie, calendrier de groupe, contacts, messagerie instantanée, stockage de fichiers et gestion de documents web. If the user has these values inside its entry: Si l'utilisateur dispose de ces valeurs dans son entrée : ../pages/documentation/1.1/applications/phpldapadmin.html ../pages/documentation/1.1/applications/phpldapadmin.html liblemonldap-ng-manager-perl: Manager files liblemonldap-ng-manager-perl : fichiers du manager Macros and groups Macros et groupes Any OpenID consumer N'importe quel client OpenID Wildcard Carte blanche ../../documentation/1.4/authproxy.html ../../documentation/1.4/authproxy.html http://marcelhaise.com/rmll2009/#LemonLDAP http://marcelhaise.com/rmll2009/#LemonLDAP The Active Directory module is based on the <a0>LDAP module</a0>, with these features: Le module Active Directory est basé sur le <a0>module LDAP</a0>, avec ces caractéristiques : You can also use yum on local RPMs file: On peut aussi utiliser yum sur des fichiers RPMs locaux : grantSessionRule grantSessionRule ../pages/documentation/1.1/installtarball.html ../pages/documentation/1.1/installtarball.html <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> Distinguished Name Distinguished Name basic basic ../../documentation/1.4/changeconfbackend.html ../../documentation/1.4/changeconfbackend.html <s139>//"userobm_mail_server_hostname" => ,</s139> <s139>//"userobm_mail_server_hostname" => ,</s139> https://plus.google.com/u/0/101819048603406959766/ https://plus.google.com/u/0/101819048603406959766/ <title>: title to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <title> : titre à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> A specific persistent session is created with this module, to store attribute values returned by Google. Une session persistente est créée avec ce module pour stocker les valeurs d'attribut renvoyées par Google. ../../documentation/1.0/ldapconfbackend.html ../../documentation/1.0/ldapconfbackend.html /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay See <a0>prerequisites and dependencies</a0> chapter for more. Voir le chapître <a0>pré-requis et dépendances</a0>. The module can be found <a0>here</a0>. Le module peut être trouvé <a0>ici</a0>. Twitter use <a1>OAuth</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Twitter, other applications can trust Twitter and let you in). Twitter utilise le protocole <a1>OAuth</a1> pour autoriser les applications à réutiliser son propre processus d'authentification (ce qui signifie que si vous êtes connecté à Twitter, d'autres applications peuvent agréer Twitter et vous laisser entrer). <c0>unprotect</c0>: all is open, but authenticated users are seen as authenticated <c0>unprotect</c0> : tout est ouvert, mais les utilisateurs authentifiés sont vus comme tels ../pages/documentation/1.1/portalmenu.html ../pages/documentation/1.1/portalmenu.html As <a1>LL::NG</a1> works like classic WebSSO (like Siteminder™), many other applications are easy to integrate. Comme <a1>LL::NG</a1> fonctionne comme un WebSSO classique (tel Siteminder™), de nombreuses applications sont faciles à integrer. country country <s0>Cache</s0>: cache for configuration and sessions <s0>Cache</s0>: cache pour la configuration et les sessions You need to know the technical name of configuration parameter to do this. Il est nécessaire de connaître le nom technique du paramètre de configuration pour le faire. <s0>Location</s0>: Access Point for SLO request. <s0>Location</s0>: Point d'accès pour les requêtes de SLO. customFunctions customFunctions <s0>start</s0>: Start date (GMT) <s0>start</s0> : date de début (GMT) Display change password module Affiche le module de changement de mot-de-passe protect the manager by <a0>LL::NG</a0> protéger le manager par <a0>LL::NG</a0> The file <c0>auth.keytab</c0> should then be copied (with a secure media) to the Linux server (for example in <c1>/etc/lemonldap-ng</c1>). Le fichier <c0>auth.keytab</c0> doit ensuite être copié (par un média sûr) sur le serveur Linux (par exemple dans <c1>/etc/lemonldap-ng</c1>). Custom XSLT file Fichier XSLT personnalisé If enabled, if the user group is a member of another group (group of groups), all parents groups will be stored as user's groups. Si activé et si le groupe de l'utilisateur est membre d'un autre groupe (groupes de groupes), tous les groupes parents seront considérés comme groupes de l'utilisateur. Drupal virtual host in Manager Hôte virtuel Drupal dans le manager You can change the graphical aspect of the Manager, by clicking on the <c0>Menu style</c0> button. L'aspect graphique du manager peut être modifié en cliquant sur le bouton <c0>style de menu</c0>. The “<s0>default</s0>” access rule is used if no other access rule match the current <a1>URL</a1>. La règle d'accès “<s0>default</s0>” est utilisée si aucune règle ne correspond à l'<a1>URL</a1> courante. /index.php?access=admin&access=other /index.php?access=admin&access=other <s0>Magic authentication</s0> allows to mix standard Sympa authentication and <a1>SSO</a1> <s0>Magic authentication</s0> autorise l'utilisation de l'authentification Sympa et <a1>SSO</a1> <a0>DBI</a0> Authentication table Table d'authentification <a0>DBI</a0> UserName UserName <a0>SAML</a0> Session backend Module de stockage <a0>SAML</a0> Either checkout or export the SVN repository, or extract the SVN tarball to get the SVN files on your disk. Au choix, importer le dépôt SVN ou extraire l'archive SVN pour importer les fichiers. singleSession singleSession Crypt::OpenSSL::RSA Crypt::OpenSSL::RSA Signature Signature <a0>LL::NG</a0> needs a storage system to store its own configuration (managed by the manager). <a0>LL::NG</a0> a besoin d'un dispositif de stockage de sa propre configuration (gérée par le manager). Core modules must be installed on the system. Les modules "core" doivent être installés sur le système. _saml_id ProxyID _nameID _assert_id _art_id _session_id _saml_id ProxyID _nameID _assert_id _art_id _session_id Lasso identity dump Dump de l'identité Lasso Authentication table Table d'authentification Manager Manager This value will be used to know to which recipient the has to be sent (default: mail). Cette valeur peut être utilisée pour savoir à quel destinataire doit être envoyé le courriel (défaut : mail). <<s0>Files</s0> *.pl> <<s0>Files</s0> *.pl> ../../../media/documentation/manager-saml-sp-new.png ../../../media/documentation/manager-saml-sp-new.png Skin thème http://www.w3.org/wiki/WebID http://www.w3.org/wiki/WebID <s0>Multiple sessions</s0>, you can restrict the number of open sessions: <s0>Sessions multiples</s0>, on peut retreindre le nombre de sessions ouvertes : logout_app https://auth.example.com/ logout_app https://auth.example.com/ <s137>//"userobm_mail_ext_perms" => ,</s137> <s137>//"userobm_mail_ext_perms" => ,</s137> Please always try to find another solution to protect your application with <a0>LL::NG</a0>. Il est en général préférable de trouver une autre solution pour protéger les applications avec <a0>LL::NG</a0>. declare secondary portal in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Security</c2> » <c3>Trusted domains</c3> declarer le second portail dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> » <c3>Domaines approuvés</c3> For each variable, The first field is the name which will be used in rules, macros or headers and the second field is the name of the user database field. Pour chaque variable, le premier champ est le nom qui servira dans les règles, macros ou en-têtes et le second est le nom du champ dans la base de données utilisateurs. icons:lists.png icons:lists.png documentation:1.4:soapsessionbackend documentation:1.4:soapsessionbackend _url _url you've restart all Apache server after having change cookie name or domain tous les serveurs Apache ont été rechargés après un changement du nom de cookie ou du domaine For example, to override configured skin for portal: Par exemple, pour surcharger l'apparence du portail : <s0>default_access</s0> (optional): what result to return if <s1>start</s1> and <s2>end</s2> are empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>start</s1> et <s2>end</s2> sont vides See <a0>How to change configuration backend</a0> to known how to change this. Voir <a0>Comment changer le backend de configuration</a0>. documentation:1.4:header_remote_user_conversion documentation:1.4:header_remote_user_conversion <a0>rbac</a0><br1/> <a0>rbac</a0><br1/> http://www.zimbra.com/ http://www.zimbra.com/ Session expiration Expiration des sessions It will use the authentication level registered in user session to match the <a1>SAML</a1> authentication context. Il utilise le niveau d'authentification enregistré dans la session de l'utilisateur pour établir le contexte d'authentification <a1>SAML</a1>. documentation:1.4:applications:liferay ↵ documentation:1.4:applications:liferay ↵ Installation on Debian/Ubuntu with packages Installation sur Debian/Ubuntu avec les paquets LemonLDAP::NG is shipped with 3 skins: LemonLDAP::NG est fournit avec 3 thèmes : Each user has a ssoRoles attributes, which values are the <a0>DN</a0> of the corresponding roles. Chaque utilisateur a des attributs ssoRoles, dont les valeurs sont les <a0>DN</a0> des rôles correspondants. <s0>Mandatory</s0>: if set to “On”, then this attribute will be sent in authentication response. <s0>Obligatoire</s0> : si activé, cet attribut sera envoyé dans les réponses d'authentification. Wiki Wiki To update translations, ask to <a0>lemonldap-ng-dev@ow2.org</a0> to update your files. Pour télécharger les traductions, demandez à <a0>lemonldap-ng-dev@ow2.org</a0> pour les mettres en ligne. <s0>Format</s0>: optional, <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. ../../../media/icons/lists.png ../../../media/icons/lists.png ../../documentation/1.4/internalproxy.html ../../documentation/1.4/internalproxy.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html documentation:manager-saml-idp-new.png documentation:manager-saml-idp-new.png ../documentation/current/writingrulesand_headers.html#headers ../documentation/current/writingrulesand_headers.html#headers Read/Write functions (index.pl/adminSessions paths): Fonctions en lecture/écriture (chemin index.pl/adminSessions) : The reset password link must be activated, see <a0>portal customization</a0>. Le lien de réinitialisation de mot-de-passe doit être activé, voir <a0>la personnalisation du portail</a0>. <Perl> <Perl> MRTG configuration example: Exemple de configuration MRTG : icons:tux.png icons:tux.png _issuerDB _issuerDB You can use <c0>0</c0> or <c1>1</c1> to disable/enable the module, or use a more complex rule. On peut utiliser <c0>0</c0> ou <c1>1</c1> pour activer/désactiver chaque module ou utiliser une règle plus complexe. Leave blank to use Mozilla default verification <a3>URL</a3> (<a4>https://verifier.login.persona.org/verify</a4>) Laisser vide pour utiliser l'<a3>URL</a3> de vérification par défaut de Mozilla (<a4>https://verifier.login.persona.org/verify</a4>) LimeSurvey has a webserver authentication mode that allows to integrate it directly into LemonLDAP::NG. LimeSurvey dispose d'un mode d'authentification par serveur web qui permet de l'integrer directement dans LemonLDAP::NG. http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes (o/n) n (o/n) n ../pages/documentation.html ../pages/documentation.html Session history is always visible in session explorer for administrators. L'historique des sessions est toujours visible dans l'explorateur de sessions pour les administrateurs. <s0>Auto login</s0>: a special <a1>LL::NG</a1> Handler will generate Sympa cookie (for Sympa 5 only !) <s0>Auto login</s0>: handler spécial de <a1>LL::NG</a1> qui génère le cookie Sympa (pour Symp 5 seulement !) You can then choose any other module for users and password. Vous pouvez ensuite choisir vos modules d'utilisateurs et de mots-de-passe. Dokuwiki plugin Extension pour Dokuwiki persistentStorageOptions persistentStorageOptions Session explorer Explorateur de sessions Go to %_topdir Aller dans %_topdir http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 ../pages/documentation/1.1/security.html ../pages/documentation/1.1/security.html LL::NG repository Dépôt LL::NG macros are used to extend (or rewrite) <a0>exported variables</a0>. les macros sont utilisées pour étendre (ou réécrire) les <a0>variables exportées</a0>. <a0>LL::NG</a0> can also request proxy tickets for its protected services. <a0>LL::NG</a0> peut également requérir des tickets de proxy pour les services qu'il protège. the <a0>portal</a0> le <a0>portail</a0> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> Portal <a0>URL</a0> <a0>URL</a0> du portail ~10 ~10 $givenName $givenName <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert → Local cache cannot be cleard, check the localStorage and localStorageOptions or file permissions → Le cache local ne peut être effacé, regarder les options localStorage and localStorageOptions ou les droits associés à ces fichiers dbiChain dbiChain ssoName ssoName ../../../media/applications/grr_logo.png ../../../media/applications/grr_logo.png The portal of the secondary <a0>LL::NG</a0> structure is configured to delegate authentication to a remote portal. Le portail du système <a0>LL::NG</a0> secondaire est configuré pour déléguer l'authentification à un portail distant. Go in Manager, <c0>General Parameters</c0> » <c1>Cookies</c1> » <c2>Multiple domains</c2> and set to <c3>On</c3>. Aller dans le manager, <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> et sélectioonner "activer" http://www.google.com/apps/intl/en/business/index.html http://www.google.com/apps/intl/en/business/index.html ../../../../media/documentation/liferay_4.png ../../../../media/documentation/liferay_4.png documentation:1.4:ssocookie documentation:1.4:ssocookie ../pages/documentation/1.1/soapconfbackend.html ../pages/documentation/1.1/soapconfbackend.html Authentication request Requête d'authentification Bugzilla virtual host in Manager Hôte virtuel Bugzilla dans le manager ../documentation/1.0/portal.html ../documentation/1.0/portal.html Advantages: Avantages : Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available Les fichiers de configuration Apache se trouvent dans /etc/lemonldap-ng et liés dans /etc/apache2/sites-available Compilation Compilation Note that <a0>SAML</a0> protocol is more secured than OpenID, so when your partners are known, prefer <a1>SAML</a1>. Noter que le protocole <a0>SAML</a0> est plus securisé que OpenID, ainsi si les partenaires sont connus, preférer <a1>SAML</a1>. ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ Portal Redirections Redirections du portail Set <a0>SAML</a0> end points Indiquer les points d'entrées <a0>SAML</a0> <s0>Authentication service</s0> of course Le <s0>service d'authentification</s0> bien sûr $_passwordDB $_passwordDB Digest::HMAC Digest::HMAC ../../../media/icons/xeyes.png ../../../media/icons/xeyes.png openIdAuthnLevel openIdAuthnLevel svn checkout svn+ssh://developername@svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn+ssh://nomDuDeveloppeur@svn.forge.objectweb.org/svnroot/lemonldap Krb5KeyTab /etc/lemonldap-ng/auth.keytab Krb5KeyTab /etc/lemonldap-ng/auth.keytab Go to <c0>My Account</c0>: Aller dans <c0>My account</c0>: So you can configure it to authenticate users using a federation protocol and simultaneously to provide identities using other(s) federation protocols. Ainsi on peut le configurer pour authentifier les utilisateurs en utilisant un protocole de fédération et simultanément pour fournir les identités en en utilisant en autre. http://grr.mutualibre.org/documentation/body.php?id=35 http://grr.mutualibre.org/documentation/body.php?id=35 <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> It is also possible to redirect the user without using <c0>ErrorDocument</c0>: the Handler will not return 403, 500, 503 code, but code 302 (REDIRECT). Il est également possible de rediriger les utilisateurs sans utiliser <c0>ErrorDocument</c0> : l'agent ne retournera pas les codes 403, 500, 503 mais le code 302 (REDIRECT). <s0>manager-apache2.conf</s0>: Manager virtual host <s0>manager-apache2.conf</s0> : hôte virtuel du manager See <a2>how to change configuration backend</a2>. Voir <a2>comment changer de backend de configuration</a2>. <s0>Portal messages</s0>: all messages are grouped in lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. Les <s0>messages du portail</s0>: tous les messages sont regroupés dans lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. <s0>Undefined</s0>: Default NameID format is used <s0>Undefined</s0>: le format de NameID par défaut est utilisé ldapPasswordResetAttribute ldapPasswordResetAttribute <s0><a1>Configuration</a1></s0>: where configuration is stored. <s0><a1>Configuration</a1></s0>: où est stocké la configuration. createdb -O lemonldap-ng lemonldap-ng createdb -O lemonldap-ng lemonldap-ng If you manage different timezones, you have to take the jetlag into account in ssoLogonHours values, or use the $_timezone parameter. Si plusieurs fuseaux sont utilisés, le jetlag doit être introduit dans le compte dans la valeur ssoLogonHours, ou utiliser le paramètre $_timezone. SMTP / Reset password by mail SMTP / réinitialisation de mot-de-passe par courriel Check <a0>XSS</a0> Attacks Recherche les attaques <a0>XSS</a0> Store password in session Stockage du mot-de-passe en session Name: <c0>Auth-Name</c0> Nom: <c0>Auth-Name</c0> Replace MySQL by Apache::Session::Flex Remplacer MySQL par Apache::Session::Flex http://freshmeat.net/projects/lemonldapng http://freshmeat.net/projects/lemonldapng At least, check if it is not a <a1>known application</a1>, or <a2>try to adapt its source code</a2>. Ainsi, vérifier si l'<a1>application est connue</a1> ou <a2>essayer d'adapter le code source</a2>. Note that if the user is already authenticated on the first portal, all redirections are transparent. Noter que si l'utilisateur est déjà authentifié sur le premier portail, toutes les redirections sont transparentes. press.html press.html OBM OBM <s0>Skin</s0>: the name of the skin to use. <s0>Thème</s0> : le nom du thème à utiliser. <a0>ldapconfbackend</a0><br1/> <a0>ldapconfbackend</a0><br1/> email_http_header HTTP_MAIL email_http_header HTTP_MAIL <s0>Address</s0>: <a1>URL</a1> of application <s0>Adresse</s0> : <a1>URL</a1> de l'application If you upgrade from older versions, please follow first: Pour les mises à jour depuis des versions plus anciennes, suivre d'abord : <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> ../pages/documentation/1.1/browseablesessionbackend.html ../pages/documentation/1.1/browseablesessionbackend.html <s86>//"userobm_status" => ,</s86> <s86>//"userobm_status" => ,</s86> http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 You can then add the Manager as <a0>an application in the menu</a0>. On peut aussi ajouter le manager dans les <a0>applications du menu</a0>. Then, go in <c0>Choice Parameters</c0>: Ensuite, aller dans les <c0>paramètres Choice</c0>: <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> When session is granted, the Handler will then check the authorizations like the standard Handler. Lorsque la session est validée, l'agent examine les autorisations comme un agent standard. <s0>Changes</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Changements</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) Main LL::NG structure Système LL::NG principal Set GoogleApps as Service Provider name. Mettre GoogleApps comme nom de fournisseur de service. ../media/icons/terminal.png ../media/icons/terminal.png ../../../media/documentation/manager-menu-application-logo.png ../../../media/documentation/manager-menu-application-logo.png JDLL JDLL http://www.private.com http://www.private.com <s0>APACHEVERSION</s0>: Apache major version (default: 2) <s0>APACHEVERSION</s0> : version majeure d'Apache (défaut : 2) <s148>//"userobm_vacation_enable" => ,</s148> <s148>//"userobm_vacation_enable" => ,</s148> ../../../media/documentation/manager-saml-service-sp-slo.png ../../../media/documentation/manager-saml-service-sp-slo.png documentation:liferay_2.png documentation:liferay_2.png Artifact Resolution Résolution des artifacts <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> Crypt::Rijndael Crypt::Rijndael Verify that: Verifier que : <s0>Path</s0>: keep <c1>^/openidserver/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/openidserver/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. The IDP name is asked, enter it and click OK. Le nom d'IDP est demandé, entrer-le et cliquer sur OK. Then edit rules and headers. Éditer ensuite les règles et en-têtes. <s0>Preauthentication key</s0>: the one you grab from zmprov command <s0>Clef de pré-authentification key</s0> : celle récupérée de la commande zmprov ../../documentation/1.4/samlservice.html#authentication_contexts ../../documentation/1.4/samlservice.html#authentication_contexts A <a0>CAS server</a0> with <a1>SAML authentication</a1> Un <a0> serveur CAS</a0> avec une <a1>authentification SAML</a1> ~50 ~50 documentation:1.4:selfmadeapplication ↵ documentation:1.4:selfmadeapplication ↵ You need to create yourself the directory and set write access to Apache user. Il faut créer soi-même le répertoire et y donner un accès en écriture pour l'utilisateur Apache. LockUserName LockUserName LemonLDAP::NG can be used as a proxy between those protocols LemonLDAP::NG peut être utilisé comme proxy entre ces protocoles You must register SP metadata here. Il faut enregistrer les métadatas du SP ici. Local documentation is open to all: La documentation locale est ouverte à tous : <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend <a0>activedirectoryminihowto</a0><br1/> <a0>activedirectoryminihowto</a0><br1/> Several IDPs are allowed, in this case the user will choose the IDP he wants. Plusieurs IDPs peuvent être autorisés, dans ce cas l'utilisateur peut choisir l'IDP qu'il souhaite. documentation:1.4:securetoken documentation:1.4:securetoken Date of session creation Date et heure (timestamp) de la création de la session Just set the authentication type to <c0>config</c0> and indicate <a1>DN</a1> and password inside the file <c2>config.php</c2>: Mettre juste le type d'authentification à <c0>config</c0> et indiquer le <a1>DN</a1> et le mot-de-passe dans le fichier <c2>config.php</c2>: Groups Groupes http://search.cpan.org/perldoc?Apache::Session::Informix http://search.cpan.org/perldoc?Apache::Session::Informix The database password Le mot de passe de la base de données <s0>(?i)</s0> means case no sensitive. <s0>(?i)</s0> signifie insensible à la casse. documentation:1.0:fileconfbackend documentation:1.0:fileconfbackend <s78>//"userobm_delegation_target" => ,</s78> <s78>//"userobm_delegation_target" => ,</s78> <s7>}</s7> <s8>)</s8><s9>;</s9> <s7>}</s7> <s8>)</s8><s9>;</s9> <s17># Your nice code here</s17>   <s17># Le joli code ici :</s17>   /_detail/screenshots/1.0/pastel/password.png?id=screenshots /_detail/screenshots/1.0/pastel/password.png?id=screenshots As same for groups: a group rule may involve another, previously computed group. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment. /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml Download them here and <a0>install pre-required packages</a0>. Les télécharger ici et <a0>installer les paquets pre-requis</a0>. <s1>Can be used to secure another backend</s1> for remote servers. <s1>Peut être utilisé pour sécuriser un autre backend</s1> pour des serveurs distants. <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> A start date and an end date (to open or close the service even the entry already exists) Des dates de début et de fin (pour restreindre l'accès aux services même si l'entrée existe) /_detail/logos/logo_ucanss.png?id=references /_detail/logos/logo_ucanss.png?id=references <s0>Portal <a1>URL</a1></s0>: <a2>URL</a2> of internal portal <s0><a1>URL</a1> du portail</s0> : <a2>URL</a2> du portail interne logos:logo_rbn.png logos:logo_rbn.png /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword A Zimbra Handler is called Un handler Zimbra est appelé With YUM Avec YUM <s13>SetHandler</s13> perl-<s14>script</s14> <s13>SetHandler</s13> perl-<s14>script</s14> <s0>ERASECONFIG</s0>: set to 0 if you want to keep your configuration files (default: 1) <s0>ERASECONFIG</s0> : mettre à 0 pour conserver les fichiers de configuration (défaut : 1) <a0>exported variables</a0> collected from UserDB backend les <a0>variables exportées</a0> collectées depuis le backend utilisateur <s0>One <a1>IP</a1> only by user</s0>: a user can not open 2 sessions with different <a2>IP</a2>. <s0>Une <a1>IP</a1> par utilisateur</s0> : un utilisateur ne peut ouvrir 2 sessions avec différentes adresses <a2>IP</a2>. ../../documentation/1.4/extendedfunctions.html ../../documentation/1.4/extendedfunctions.html But you can make your own, see Skin customization below. On peut faire le sien, voir comment personnaliser le thème ci-dessous. <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> Drupal module activation Activation du module Drupal # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main pastel pastel <a0>MediaWiki</a0> is a wiki software, used by the well known <a1>Wikipedia</a1>. <a0>MediaWiki</a0> est un logiciel wiki utilisé par le très connu <a1>Wikipedia</a1>. Those macros are calculated only at the first usage and stored in the local session cache (only for this server) and only if the user access to the related applications. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. ../../documentation/1.4/writingrulesand_headers.html#rules ../../documentation/1.4/writingrulesand_headers.html#rules Yubikey Yubikey $description eq "LDAP administrator" $description eq "LDAP administrator" This works if the user has only one role per application. Ceci fonctionne si l'utilisateur a seulement un rôle par application. This can be used to protect applications relying on <c0>REMOTE_USER</c0> environment variable in reverse proxy mode. Ceci permet de protéger des applications nécessitant la variable d'environnement <c0>REMOTE_USER</c0> en mode reverse-proxy. <s0>require</s0> Lemonldap::NG::Portal::SharedConf; <s0>require</s0> Lemonldap::NG::Portal::SharedConf; ^/index.php\?logout ^/index.php\?logout User clicks on the logout link in Portal L'utilisateur clique sur le bouton déconnexion du portail Access rule in virtual host Règle d'accès à un hôte virtuel <s12>ErrorDocument</s12> 401 /login.pl <s12>ErrorDocument</s12> 401 /login.pl If you want to access to other datas, you have to use Google in <c2>General Parameters</c2> > <c3>Authentication modules > User module</c3>. Pour accéder aux autres données, utiliser Google in <c2>Paramètres generaux</c2> > <c3>Modules d'authentification > Modules d'utilisateurs</c3>. Then <a2>CAS</a2> service has to show a correct error when service ticket validation will fail. Ainsi le service <a2>CAS</a2> doit afficher une erreur lorsque la validation du ticket échoue. apacheAuthnLevel apacheAuthnLevel First step: create a rule to grant access only if the user has a role in the application: Première étape : créer une règle pour autoriser l'accès seulement si l'utilisateur dispose d'un rôle dans l'application: For example, a <a0>LL::NG</a0> server can be: Par exemple, un serveur <a0>LL::NG</a0> peut être : apt-get install libapache2-mod-auth-kerb apt-get install libapache2-mod-auth-kerb You can not start with an empty configuration, so read <a0>how to change configuration backend</a0> to convert your existing configuration into another one. On ne peut démarrer avec une configuration vide, il faut donc lire <a0>comment changer de backend de configuration</a0> pour convertir une configuration existante en une autre. ~1000 ~1000 <s0>Encryption key</s0>: key used to crypt some data, should not be known by other applications <s0>Clef de chiffrement</s0> : clef utilisée pour chiffrer certaines données, ne doit être connue d'aucune autre application You can change the default skin in Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Default skin</c3>. On peut changer le thème par défaut dans le manager : <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Skin</c3>. You can use '*' character. On peut utiliser le caractère '*'. That is why it is important to set APACHEUSER variable when you launch “make install” C'est pourquoi il est important de renseigner la variable APACHEUSER lorsqu'on lance “make install” <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> Logout user from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ Sympa shared secret Secret partagé de Sympa Then, go in <c0><a1>CAS</a1> parameters</c0>: Aller ensuite dans <c0>Paramètres <a1>CAS</a1></c0> : User rejected because VirtualHost XXXX has no configuration User rejected because VirtualHost XXXX has no configuration <s0>Server <a1>URL</a1></s0>: <a2>CAS</a2> server <a3>URL</a3> (must use https://) <s0><a1>URL</a1> du serveur</s0> : <a3>URL</a3> du serveur <a2>CAS</a2> (doit utiliser https://) Port Port By default, <a0>SSO</a0> cookie is hidden, so protected applications cannot get <a1>SSO</a1> session key. Par défaut, le cookie <a0>SSO</a0> est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session <a1>SSO</a1>. Leave blank to deactivate the feature. Laissez vide pour désactiver cette fonctionnalité. Go to the Manager and <a0>create a new virtual host</a0> for Drupal. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Drupal. lemonldap-ng-portal: contains authentication portal and menu lemonldap-ng-portal : contient le portail d'authentification et le menu You will find here screenshots of the new features. On trouve ici les captures d'écran des nouvelles fonctionnalités. OBM_MAIL OBM_MAIL <a0>LL::NG</a0> portal is a modular component. Le portail <a0>LL::NG</a0> est un composant modulaire. Connection password Mot-de-passe de connexion Null Null <s13># OpenID Issuer</s13> <s13># Fournisseur d'identité OpenID</s13> press press Installation and configuration Installation et configuration http://search.cpan.org/perldoc?Apache::Session::File http://search.cpan.org/perldoc?Apache::Session::File ../../css/print.css ../../css/print.css Apache Apache <s4>require</s4> Lemonldap::NG::Portal::Menu; <s4>require</s4> Lemonldap::NG::Portal::Menu; http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm Oracle Oracle This will use email as login name (for accounting, session explorer,…). L'adresse email est utilisée comme nom de compte (pour la traçabilité, l'explorateur de session,…). <s134>//"userobm_web_list" => ,</s134> <s134>//"userobm_web_list" => ,</s134> /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Display reset password form Affiche le module de réinitialisation de mot-de-passe Authen::SASL Authen::SASL /_detail/screenshots/1.0/impact/portal.png?id=screenshots /_detail/screenshots/1.0/impact/portal.png?id=screenshots We advice to deactivate other options, cause users will use <a0>LL::NG</a0> portal to modify or reset their password. Il est conseillé de désactiver les autres options, car les utilisateurs utiliseront le portail <a0>LL::NG</a0> pour modifier ou réinitialiser leur mot-de-passe. OpenID server Serveur OpenID So for Handler on different physical servers than the Portal, a user with an expired session can still be authorized still the cache expires. Ainsi pour les agents installés sur des serveurs physiquement différent de celui hébergeant le portail, un utilisateur dont la session a expiré peut toujours être autorisé jusqu'à expiration du cache. OpenID allowed domains Domaines autorisés pour OpenID Automatic REMOTE_USER Automatic REMOTE_USER <s0>absolute <a1>URL</a1></s0> if it is run by handler (e.g. /admin/index.php?param=foo). <s0>l'<a1>URL</a1> absolue</s0> si elle est appelée par un agent (e.g. /admin/index.php?param=foo). documentation:status_standard.png documentation:status_standard.png Check configStorage and configStorageOptionsor file permissions. Vérifier les options configStorage and configStorageOptions ou les droits associés à ces fichiers. Choose one of the following method: Choisir l'une des méthodes suivantes : Sessions Sessions <s0>Trusted domains</s0>: domains on which the user can be redirected after login on portal. <s0>Domaines approuvés</s0> : domaines vers lesquels l'utilisateur peut être redirigé après authentification sur le portail. Developer access Accès développeurs cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images password.png password.png <s15>RewriteEngine</s15> <s16>On</s16> <s15>RewriteEngine</s15> <s16>On</s16> <s0>One session only by user</s0>: a user can not open 2 sessions with the same account. <s0>Une session seulement par utilisateur</s0> : on ne peut ouvrir 2 sessions avec le même compte. <s0>NameVirtualHost</s0> *:<s1>80</s1> <s0>NameVirtualHost</s0> *:<s1>80</s1> ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database Handlers have a session cache, with a default lifetime of 10 minutes. Les agents disposent d'un cache de session d'une durée de vie par défaut de 10 minutes. In Manager, click on <a0>SAML</a0> service providers and the button <c1>New service provider</c1>. Dans le manager, cliquer sur fournisseurs de service <a0>SAML</a0> puis sur le bouton <c1>Nouveau fournisseur de service</c1>. http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html <s2>RewriteEngine</s2> <s3>On</s3> <s2>RewriteEngine</s2> <s3>On</s3> vi /etc/yum.repos.d/lemonldap-ng.repo vi /etc/yum.repos.d/lemonldap-ng.repo default => $ssoRoles =~ /ou=aaa,ou=roles/ default => $ssoRoles =~ /ou=aaa,ou=roles/ The Zimbra email and calendar server is available for Linux, Mac <a1>OS</a1> X and virtualization platforms. Le serveur de messagerie et calendrier Zimbra est disponible pour Linux, Mac OS X et les plateformes de virtualisation. http://packages.debian.org/search?keywords=lemonldap-ng http://packages.debian.org/search?keywords=lemonldap-ng ../pages/documentation/1.1/mrtg.html ../pages/documentation/1.1/mrtg.html http://openid.net/specs/openid-authentication-2_0.html http://openid.net/specs/openid-authentication-2_0.html perl-Lemonldap-NG-Handler: CPAN - Handler modules perl-Lemonldap-NG-Handler : CPAN - modules agent portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> Password found from login process (only if <a0>password store in session</a0> is configured) Mot-de-passe fournit lors du processus d'authentification (seulement si le <a0>stockage du mot-de-passe dans la sessions</a0> est configuré) ../media/logos/logo_gn.png ../media/logos/logo_gn.png It is possible to store any additional session data. Il est possible de stocker d'autres données de session. Then on Linux server: Ensuite sur le serveur Linux : /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <s0>Check conditions</s0>: set to Off to disable conditions checking on authentication responses. <s0>Vérifier les conditions</s0> : active ou désactive, l'examen des conditions dans les réponses d'authentification. <a0>LL::NG</a0> Null backend is a transparent backend: Le backend Null de <a0>LL::NG</a0> est un backend transparent : It can be seen in system processes, for example: Il peut être vu dans les processus du système, par exemple : </<s23>Location</s23>>   </<s23>Location</s23>>   Edit <c0>lemonldap-ng.ini</c0>, and activate status in the <c1>handler</c1> section: Éditer <c0>lemonldap-ng.ini</c0>, et activer le statut dans la section <c1>handler</c1> : liblemonldap-ng-handler-perl: Handler files liblemonldap-ng-handler-perl : fichiers des agents Error messages Messages d'erreur In 1.3, <a0>LL::NG</a0> have a captcha feature which is used in this case. Dans la version 1.3, <a0>LL::NG</a0> dispose d'une fonctionnalité "captcha" qui est utilisée dans ce cas. icons:colors.png icons:colors.png If you are protecting Dokuwiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Dokuwiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. User owns <a0>SSO cookies</a0> on the main domain (see <s1><a2>Login kinematics</a2></s1>) L'utilisateur dispose d'un <a0>cookie SSO</a0> dans le domaine principal (voir la <s1><a2>cinématique de connexion</a2></s1>) To allow this, use <a1>SOAP</a1> for configuration access, or use a network service like <a2>SQL database</a2> or <a3>LDAP directory</a3>. Pour contourner ce problème, utiliser <a1>SOAP</a1> pour l'accès à la configuration ou un service réseau tel une <a2>base de donnée SQL</a2> ou un <a3>annuaire LDAP</a3>. See <a0>Writing rules and headers</a0> chapter. Voir le chapître <a0>Écrire les règles et en-têtes</a0>. msmith msmith Upgrade from 1.3 Mise à jour depuis la version 1.3 <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options upgrade upgrade Sébastien BAHLOUL Sébastien BAHLOUL ^/c/portal/logout => logout_sso ^/c/portal/logout => logout_sso Returns cookie(s) name and values Retourne nom(s) et valeur(s) du(des) cookie(s) soapSessionService soapSessionService <c0>accept</c0>: all authenticated users can pass <c0>accept</c0>: tout utilisateur authentifié est autorisé $_authChoice $_authChoice http://lasso.entrouvert.org/ http://lasso.entrouvert.org/ http://facebook.com http://facebook.com When using this module, <a0>LL::NG</a0> portal will be called only if Apache does not return “401 Authentication required”, but this is not the Apache behaviour: if the auth module fails, Apache returns 401. En utilisant ce module, le portail <a0>LL::NG</a0> est appelé uniquement si Apache ne retourne pas “401 Authentication required”, aucune bascule n'est donc possible. install_bin (/usr/local/lemonldap-ng/bin) install_bin (/usr/local/lemonldap-ng/bin) If you have more than one role for an application, you can join those roles with a separator (ex: ||): Si plusieurs rôles peuvent être donnés dans la même application, on peut joindre ces rôles avec un séparateur (ex : ||): For example to store authentication mode, you can set in <c1>Session data to store</c1> a new key <c2>$_auth</c2> with value <c3>Authentication mode</c3>. Par exemple pour stocker le mode d'authentification, on peut créer une nouvelle clef dans <c1>données de session à stocker</c1> nommée <c2>$_auth</c2> avec comme valeur <c3>mode d'authentification</c3>. For apache configuration, you may have to remove the old symbolic link, if not done by the RPM: Pour la configuration apache, il faut peut-être supprimer l'ancien lien symbolique si ce n'est pas fait par le RPM: documentation/current/start.html documentation/current/start.html <<s14>IfModule</s14> mod_rewrite.c> <<s14>IfModule</s14> mod_rewrite.c> Value: <c0>$uid</c0> Valeur : <c0>$uid</c0> ../../documentation/1.4/authad.html ../../documentation/1.4/authad.html Script files Fichiers de script <a0>SlideShare</a0><br1/> <a0>SlideShare</a0><br1/> See <s0><a1>Form replay</a1></s0> to learn how to configure form replay to POST data on protected applications. Voir <s0><a1>Rejeu des formulaires</a1></s0> pour savoir comment configurer le rejeu des formulaires pour poster des données à une applications protégée. <s0>Allow proxied authentication</s0>: allow an authentication response to be issued from another IDP that the one we register (proxy IDP). <s0>Authentification proxy autorisée</s0> : autorise qu'une réponse d'authentification soit issue d'un autre IDP que celui enregistré (proxy IDP). <s0>Timeout</s0>: server idle timeout. <s0>Timeout</s0> : délai maximum de connexion. Description Description Required attributes: Attibuts requis : Configuration key of IDP used for authentication Clef de configuration de l'IDP utilisé pour l'authentification http://deb.entrouvert.org/ http://deb.entrouvert.org/ <a0>DBI</a0> Connection user Nom de connexion <a0>DBI</a0> Authentication table and user table can be the same. Les tables d'authentification et utilisateurs peuvent être confondues. You can also pass parameters to the make install command, with this syntax: On peut aussi passer des paramètres à la commande make install, avec cette syntaxe : <a10>loginhistory</a10><br11/> <a10>loginhistory</a10><br11/> <s15>AuthType</s15> Kerberos <s15>AuthType</s15> Kerberos dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] http://zimbra.example.com/zimbrasso http://zimbra.example.com/zimbrasso ../pages/wiki/dokuwiki.html ../pages/wiki/dokuwiki.html Configure Single Sign On cookie and portal URL Configurer le cookie SSO (Single Sign On) et l'URL du portail Your old Apache configuration should have been saved, you need to port your specificities in new Apache configuration files: L'ancienne configuration Apache devrait avoir été sauvée, il faut réporter les changements locaux dans le nouveau fichier de configuration Apache : <a4>highavailability</a4><br5/> <a4>highavailability</a4><br5/> Configuration objects use standard object class: <c0>applicationProcess</c0>. Les objets de configuration utilisent une classe d'objet standard : <c0>applicationProcess</c0>. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Google for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Google comme module d'authentication. Portal provides also many other features (see <a5>portal</a5> for more) Le portail fournit également de nombreux autres services (voir <a5>portail</a5> pour plus d'informations) In Manager, set syslog facility in <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>Syslog facility</c2>. Dans le manager, choisir la facilité syslog dans <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>Facilité syslog</c2>. The choosen backends will be registered in session: Les backends choisits enregistrent dans la session : Directory Directory <a0>Using Apache::Session::MySQL</a0> <e1>(if you choose this option, then read <a2>how to increase MySQL performances</a2>)</e1> <a0>Utiliser Apache::Session::MySQL</a0> <e1>(il est alors conseillé de lire <a2>comment améliorer les performances de MySQL</a2>)</e1> You can download the code here: <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> Il est possible de télécharger le code ici : <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> But you will rather prefer to use an Apache authentication module, like for example <a0>LDAP authentication module</a0>: Il est souvent souhaitable d'utiliser un module d'authentification Apache, tel par exemple le <a0>module d'authentification LDAP</a0> : <a0>managerprotection</a0><br1/> <a0>managerprotection</a0><br1/> ../pages/documentation/1.1/ldapminihowto.html ../pages/documentation/1.1/ldapminihowto.html Multi LDAP#Openldap; LDAP#ActiveDirectory Multi LDAP#Openldap; LDAP#ActiveDirectory Configuration overview Vue d'ensemble de la configuration mysqladmin create lemonldapng mysqladmin create lemonldapng There are two ways to configure <a0>SSO</a0> with Sympa: Il y a deux façons de configurer le <a0>SSO</a0> avec Sympa : All this work is transparent for the user, he cannot see what data are posted by <a1>LL::NG</a1>. Tout ce travail est transparent pour l'utilisateur et il ne peut voir ce qui est envoyé par <a1>LL::NG</a1>. Import custom functions in LemonLDAP::NG Importer les fonctions personnalisées dans LemonLDAP::NG customfooter.tpm : <a0>HTML</a0> code in the footer div customfooter.tpm : code <a0>HTML</a0> inséré dans le div de pied-de-page <a4>extendedfunctions</a4><br5/> <a4>extendedfunctions</a4><br5/> Since LemonLDAP::NG 1.2, the <a0>demonstration backend</a0> is configured by default. Depuis la version 1.2 de LemonLDAP::NG, le <a0>backend de démonstration</a0> est sélectionné par défaut. <s155>//"userobm_samba_logon_script" => ,</s155> <s155>//"userobm_samba_logon_script" => ,</s155> <a6>liferay</a6><br7/> <a6>liferay</a6><br7/> If a user does not comply with any condition, he is prompted a customized message. Si un utilisateur ne remplit pas une condition, il est averti par un message personnalisé. You may want to use the <a0>Mutliple authentication backend</a0> to fail back to another authentication for user without Kerberos ticket. On peut souhaiter utiliser le <a0>backend d'authentification multiple</a0> pour retomber sur un autre système d'authentification pour les utilisateurs sans ticket Kerberos. /index.php?Access=admin /index.php?Access=admin ../../documentation/1.4/highavailability.html ../../documentation/1.4/highavailability.html This mode must not be used for other purpose than test and demonstration! Ces mode ne doit pas être utilisé pour autre chose que des tests et démonstrations ! Windows 2003 server: Windows 2003 server : Spring Security (ACEGI) Sécurité Spring (ACEGI) Some characters are encoded in URLs by the browser (such as space,…). Certains caractères sont encodés dans les URLs par le navigateur (tels les espaces,…). jsonfileconfbackend jsonfileconfbackend <s0>Protected URLs</s0>: Regexp of URLs for which the secure token will be sent, separated by spaces <s0>URLs protégées</s0> : expressions régulières correspondant aux URLs pour lesquels un jeton sécurisé doit être envoyé, separées par des espaces Fast CGI support Support FastCGI cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ Auth-Admin Auth-Admin Use MySQL for Lemonldap::NG sessions Utiliser MySQL pour les sessions de Lemonldap::NG <a0>HTML</a0>::Template <a0>HTML</a0>::Template /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom An error occurs on server side: SERVER_ERROR (500) Une erreur est survenue côté serveur : SERVER_ERROR (500) <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <s0>on</s0>: always display <s0>on</s0> : toujours afficher icons:neotux.png icons:neotux.png #compilation #compilation #presentation #presentation /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications <a0>LL::NG</a0> can be configured to provides <a1>2 cookies</a1>: <a0>LL::NG</a0> peut être configuré pour fournir <a1>2 cookies</a1>: Then fill the two fields; Renseigner ensuite les deux champs ; <s0>Variables</s0>: user information, macros and groups used to fill <a1>SSO</a1> session <s0>Variables</s0> : informations utilisateur, macros et groupes utilisés pour renseigner la session <a1>SSO</a1> LinShare LinShare Parameter list Liste des paramètres You can use the same Facebook access token in your applications. On peut réutiliser le même ticket d'accès Facebook dans les applications. This mechanism can only work with authentication backends using a login/password form (<a0>LDAP</a0>, <a1>DBI</a1>, …) Ce mécanisme peut seulement fonctionner avec un backend d'authentification utilisant un formulaire login/mot-de-passe (<a0>LDAP</a0>, <a1>DBI</a1>, …) So if the http cookie is stolen, sensitive applications stay secured. Ainsi, si le cookie http cookie est volé, les applications sensibles restent protégées. <s0>Value</s0> Service <a1>URL</a1> (<a2>CAS</a2> service identifier) <s0>Value</s0> Service <a1>URL</a1> (identifiant de service <a2>CAS</a2>) <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> https://github.com/9h37/django-lemonldap https://github.com/9h37/django-lemonldap Just add this file to OpenLDAP schemas by including it in <c0>slapd.conf</c0>: Ajouter simplement ce fichier aux schémas OpenLDAP en l'incluant dans <c0>slapd.conf</c0>: <s0>Value</s0>: application logout <a1>URL</a1> <s0>Valeur</s0> : <a1>URL</a1> de déconnexion de l'application ../../../media/documentation/status_standard.png ../../../media/documentation/status_standard.png documentation:latest:ssocookie documentation:latest:ssocookie ../../../documentation/1.4/portalmenu.html#categories_and_applications ../../../documentation/1.4/portalmenu.html#categories_and_applications ../pages/documentation/1.1/authchoice.html ../pages/documentation/1.1/authchoice.html Zimbra can also be connected to <a0>LL::NG</a0> via <a1>SAML protocol</a1> (see <a2>Zimbra blog</a2>). Zimbra peut aussi être connecté à <a0>LL::NG</a0> via le <a1>protocole SAML</a1> (voir le <a2>blog de Zimbra</a2>). ../../../../media/applications/phpldapadmin_logo.png ../../../../media/applications/phpldapadmin_logo.png AuthLDAPFilter AuthLDAPFilter http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps Translations Traductions <a0>CAS</a0> force authentication renewal Forcer le renouvellement d'authentification <a0>CAS</a0> ../../media/icons/flags/fr.png ../../media/icons/flags/fr.png They are available at the EntityID <a0>URL</a0>, by default: <a1>http://auth.example.com/saml/metadata</a1>. Elles sont disponibles à l'<a0>URL</a0> EntityID, par défaut : <a1>http://auth.example.com/saml/metadata</a1>. http://test1.example.com/status http://test1.example.com/status dbiAuthUser dbiAuthUser ipAddr <e0>WHATTOTRACE</e0> ipAddr <e0>WHATTOTRACE</e0> Only current application is concerned by logout_app* targets. Seule l'application est concernée par les cibles logout_app*. Maintenance mode Mode maintenance documentation:1.4:soapminihowto documentation:1.4:soapminihowto ../documentation/current/sessions.html ../documentation/current/sessions.html applications:dokuwiki_logo.png applications:dokuwiki_logo.png If <a0>LL::NG</a0> is the only software installed in Apache, the virtual host feature may not have already been activated. Si <a0>LL::NG</a0> est le seul logiciel installé sur Apache, la fonctionnalité d'hôte virtuel peut ne pas avoir été activée. Menu organization: tree or accordion L'organisation du menu : arbre ou accordéon Facebook uses <a1>OAuth2</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Facebook, other applications can trust Facebook and let you in). Facebook utilise le protocole <a1>OAuth2</a1> pour autoriser les applications à réutiliser son propre prcessus d'authentification (ce qui signifie que si on est connecté à Facebook, d'autres applications peuvent agréer Facebook et accepter l'utilisateur). Template parameters Paramètres des modèles If you use Facebook as user database, declare values in exported variables : Si on utilise Facebook comme base de données utilisateurs, déclarer les valeurs dans les « variables exportées » : /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay Bugtracker, Service Management Bugtracker, gestion de services /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> MediaWiki virtual host in Apache Hôte virtuel Mediawiki dans le manager For example, to proxy <a0>https://www.public.com</a0> to <a1>http://www.private.com</a1>: Par exemple, pour relayer <a0>https://www.public.com</a0> en <a1>http://www.private.com</a1>: ../pages/documentation/1.1/upgrade.html ../pages/documentation/1.1/upgrade.html LemonLDAP::NG does not manage Apache configuration LemonLDAP::NG ne gère pas la configuration d'Apache → Your browser loops between portal and handler, it is probably a cookie problem. → le navigateur boucle entre le portail et l'agent, il s'agit probablement d'un problème. Config::IniFiles Config::IniFiles mailConfirmBody mailConfirmBody You should change the <c0>Allow</c0> directive to match administration <a1>IP</a1>, or use another Apache protection mean. On peut changer la directive <c0>Allow</c0> pour réserver l'adresse <a1>IP</a1> d'administration, ou utiliser une autre protection. <s0>Cookie expiration time</s0>: by default, <a1>SSO</a1> cookie is a session cookie, which mean it will be destroyed when the browser is closed. <s0>Durée de vie du cookie</s0> : par défaut, le cookie <a1>SSO</a1> est un cookie de session, ce qui signifie qu'il n'est pas conservé lorsque le navigateur est clos. Web sites install : Installer les sites web : <s113>//"userobm_address2" => ,</s113> <s113>//"userobm_address2" => ,</s113> <<s10>IfModule</s10> auth_kerb_module> <<s10>IfModule</s10> auth_kerb_module> This does not include Apache configuration which is not managed by LemonLDAP::NG Ceci n'inclue pas la configuration propre d'Apache qui n'est pas gérée par LemonLDAP::NG This will provide the auxiliary object class <c0>ssoUser</c0> with attributes: Il fournit les classes auxiliaires <c0>ssoUser</c0> avec les attributs : caPath caPath vi /etc/lemonldap-ng/apache2.conf.rpmsave vi /etc/lemonldap-ng/apache2.conf.rpmsave Apache rewrite rules must have been activated in <a0>Apache portal configuration</a0>: Le module Rewrite d'Apache doit être activé dans la <a0>configuration Apache du portail</a0>: <s0>Default NameID format</s0>: if no NameID format is requested, or the NameID format undefined, this NameID format will be used. <s0>Format de NameID par défaut</s0> : si aucun fiormat de NameID n'est demandé, ou si le format n'est pas défini, ce format de NameID sera utilisé. Proxy Proxy /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots The Handler must be loaded before any protected virtual host. L'agent doit être chargé avant tout hôte virtuel à protéger. PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 Source RPM RPM sources SAML Identity Provider Fournisseur d'identité SAML <s0>Encryption mode</s0>: set the encryption mode for this IDP (None, NameID or Assertion). <s0>Mode de chiffrement</s0> : fixe le mode de chiffrement pour cet IDP (None, NameID ou Assertion). /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots _lassoIdentityDump _lassoIdentityDump documentation:1.4:fileconfbackend documentation:1.4:fileconfbackend The first rule that matches is applied. La première règle qui correspond est appliquée. Headers sent En-têtes envoyés dwho@badwolf.org dwho@badwolf.org documentation:1.4:applications:zimbra documentation:1.4:applications:zimbra See also <a0>Debian/Ubuntu installation documentation</a0>. Voir aussi la <a0>documentation d'installation Debian/Ubuntu</a0>. ../../media/documentation/lemonldap-ng-architecture.png ../../media/documentation/lemonldap-ng-architecture.png Memcached session backend Backend de session Memcached Prepare your new lemonldap-ng.ini file Preparer le nouveau lemonldap-ng.ini file You may use the <a2>securedCookie</a2> options to avoid session hijacking. Vous devriez utilisez les options <a2>securedCookie</a2> pour éviter le vol de session. Restart Apache and try to log on Manager. Redémarrer Apache et tenter de se connecter au manager. This user will not be available anymore if you configure a new authentication backend! Cet utilisateur n'est plus disponible si on change de backend d'authentification ! ldapVersion ldapVersion ^/forum/ ^/forum/ Restrict access to the directories only to the Apache server. Restreindre l'accès à ces répertoires au seul utilisateur Apache. http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur <s0>Passive authentication</s0>: set IsPassive flag in authentication request <s0>Authentification passive</s0> : positionne le drapeau IsPassive dans la requête d'authentification Core Core → LemonLDAP::NG uses a key to crypt/decrypt some datas. → LemonLDAP::NG utilise une clef pour chiffrer/déchiffrer certaines données. Browseable session backend (<a0>Apache::Session::Browseable</a0>) works exactly like Apache::Session::* corresponding module but add indexes that increase <a1>session explorer</a1> and <a2>session restrictions</a2> performances. Le backend de session explorable (<a0>Apache::Session::Browseable</a0>) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'<a1>explorateur de session</a1> et les <a2>restrictions de sessions</a2>. In particular, it use Apache2 threads capabilities so to optimize performances, prefer using <a0>mpm-worker</a0>. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence <a0>mpm-worker</a0>. documentation:1.0:sqlconfbackend documentation:1.0:sqlconfbackend <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s0><a1>URL</a1></s0>: optional, can be used to redirect on another <a2>URL</a2> (for example <a3>https://authssl.example.com</a3>). <s0><a1>URL</a1></s0> : optionnel, peut être utilisée pour rediriger l'utilisateur vers une autre <a2>URL</a2> (par exemple <a3>https://authssl.example.com</a3>). Authentication Authorization Accounting Authentification Autorisation Traçabilité FPW FPW Authentication: select row in authentication table matching user and password Authentification : selectionne la ligne de la table d'authentification contenant l'utilisateur et le mot-de-passe portalDisplayResetPassword portalDisplayResetPassword Crypt::OpenSSL::Bignum Crypt::OpenSSL::Bignum http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html documentation:1.4:applications:spring documentation:1.4:applications:spring Install packages Installer les paquets ldapAuthnLevel ldapAuthnLevel http://www.linux-ha.org/wiki/Heartbeat http://www.linux-ha.org/wiki/Heartbeat You can define keys for <a0>SAML</a0> message signature and encryption. Vous pouver définir des clefs pour la signature et le chiffrement des messages <a0>SAML</a0>. ../pages/wiki/syntax.html ../pages/wiki/syntax.html It is recommended to use ModPerl::Registry instead of using cgi-script as described in Apache configuration file example (portal-apache2.conf): Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf): Protect the Manager by Apache Protéger le Manager par Apache <a0>DBI</a0> Password hash Hachage de mot-de-passe <a0>DBI</a0> Notification uid for all users Nom de compte de notification pour tous les utilisateurs documentation:manager-portalskin.png documentation:manager-portalskin.png documentation:manager-authchoice.png documentation:manager-authchoice.png Documentation for latest stable version Documentation for latest stable version action=logout$ action=logout$ <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> For example, for a full access, excepted week-end: Par exemple, pour un accès total excepté le week-end: documentation:1.4:redirections documentation:1.4:redirections Then, go in <c0>Twitter parameters</c0>: Allez ensuite dans <c0>Paramètres Twitter</c0> : <a0>URI</a0> of the server <a0>URI</a0> du serveur Declare custom functions Declarer les fonctions personnalisées It is set in LemonLDAP::NG utilities directory (<c0>convertConfig</c0>). Il se traouve dans le répertoire des utilitaires LemonLDAP::NG (<c0>convertConfig</c0>). If you have run the Debian/Ubuntu install command, just use: Pour la commande d'installation Debian/Ubuntu, utiliser simplement : Restrict network access to the database. Restreindre l'accès réseau à la base de données. <s0><a1>SSO</a1> logout</s0>: the request is not forwarded to application, only the <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1></s0>: la requête n'est pas transmise à l'application, seule la session <a2>SSO</a2> est fermée documentation:1.4:applications:tomcat ↵ documentation:1.4:applications:tomcat ↵ Launch that: Lancer ceci : Then creating a notification for <c0>alluserscustom</c0> will display the notification for all users. Ainsi, créer une notification pour <c0>alluserscustom</c0> affichera la notification à tous les utilisateurs. Documentation is available for configuration backends : Cette documentation est valable pour les backends de configuration : Then a user that try to access to one of the following <e0>will be granted</e0> ! Alors l'utilisateur qui tente d'accéder à l'une des URL suivantes <e0>sera autorisé</e0> ! authorize: check if user is authorizated to access to this <a0>URL</a0> authorize : vérifie si l'utilisateur est autorisé à accèder à cette <a0>URL</a0> ../../documentation/1.4/error.html ../../documentation/1.4/error.html HTTP Auth HTTP Auth You can also use the binary value from the logonHours attribute of Active Directory La valeur binaire de l'attribut logonHours d'Active Directory peut également être utilisée ../../css/all.css ../../css/all.css http://drupal.org/project/Webserver_auth http://drupal.org/project/Webserver_auth Custom functions allow to extend <a0>LL::NG</a0>, they can be used in <a1>headers</a1>, <a2>rules</a2> or <a3>form replay data</a3>. Les fonctions personnalisées permettent d'étendre <a0>LL::NG</a0>, elles peuvent être utilisées dans les <a2>règles</a2>, les <a1>en-têtes</a1> et les <a3>données à rejouer dans les formulaires</a3>. It means that if the IDP propose to close session earlier than the default LemonLDAP::NG timeout, the session _utime will be modified so that session is erased at the date indicated by the IDP. Celà signifie que si l'IDP propose de clore la session au-delà de la durée de vie par défaut dans LemonLDAP::NG, la valeur de _utime sera modifiée afin que la session ne soit effacée qu'au moment indiqué par l'IDP. <<s1>Location</s1> /index.pl/adminSessions> <<s1>Location</s1> /index.pl/adminSessions> This requires <a2>Perl CAS module</a2>. Ceci nécessite un <a2>module Perl CAS</a2>. <s0>unprotect</s0>: no authentication will be asked to access surveys <s0>unprotect</s0> : aucune authentification n'est nécessaire pour accéder aux surveillances ../index.html ../index.html The Django connector is available on GitHub: <a0>https://github.com/9h37/django-lemonldap</a0> Le connecteur Django est disponible sur GitHub : <a0>https://github.com/9h37/django-lemonldap</a0> <a12>authcas</a12><br13/> <a12>authcas</a12><br13/> <s0>Portal <a1>URL</a1></s0>: remote portal <a2>URL</a2> <s0>Portail <a1>URL</a1></s0>: <a2>URL</a2> du portail distant ../../../documentation/1.4/rbac.html ../../../documentation/1.4/rbac.html <a6>authapache</a6><br7/> <a6>authapache</a6><br7/> User has no access authorization: FORBIDDEN (403) L'utilisateur ne dispose pas de droits d'accès : FORBIDDEN (403) ../../documentation/1.0/fileconfbackend.html ../../documentation/1.0/fileconfbackend.html Headers En-têtes Since MySQL performances are very bad using this, if you want to store sessions in a MySQL database, prefer one of the following Ceci dégrade fortement les performances de MySQL, si vous voulez stocker les sessions dans une base de données MySQL, utilisez l'une des solutions suivantes http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER <s0>ad.example.com</s0>: <a1>DNS</a1> of Active Directory <s0>ad.example.com</s0> : nom <a1>DNS</a1> du serveur Active Directory lastname lastname Command Line Interface (CLI) Interface en ligne de commande (CLI) -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? ../../documentation/1.4/logs.html ../../documentation/1.4/logs.html <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Example<s8><s9></OrganizationName<s10>></s10></s9></s8> <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Exemple<s8><s9></OrganizationName<s10>></s10></s9></s8> Choose one of the following: Choisir l'une des options suivantes : To use custom files, delete links and copy them into your skin folder: Pour utiliser des fichiers personnalisés, effacer les liens et copier les fichiers dans le répertoire du thème : /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots Magic authentication Authentification magique https://verifier.login.persona.org/verify https://verifier.login.persona.org/verify portalUserAttr portalUserAttr casAttr casAttr You can set them the same way: On peut les renseigner par la même voie : documentation:1.4:ldapminihowto documentation:1.4:ldapminihowto <s0>Documentation</s0>: use <a1>OmegaT</a1> to translate offline documentation and configure it: <s0>Documentation</s0>: utilisez <a1>OmegaT</a1> pour traduire la dcumentation hors-ligne et configurez le : ../pages/documentation/1.1/authcas.html ../pages/documentation/1.1/authcas.html ../../../media/applications/bugzilla_logo.png ../../../media/applications/bugzilla_logo.png On CentOS/RHEL: Sur CentOS/RHEL : In this case, you can choose a different module to manage <a1>SAML</a1> sessions. Dans ce cas, vous devez utiliser un module différent pour gérer les sessions <a1>SAML</a1>. You can manage roles with the <a0>RBAC model</a0> or by using groups. On peut gérer les rôles avec le <a0>modèle RBAC</a0> ou en utilisant les groupes. Null authentication level Niveau d'authentification de Null icons:knewsticker.png icons:knewsticker.png ^/pub/ ^/pub/ <s0>Password change</s0>: form to change the password <s0>Changement de mot-de-passe</s0> : formulaire de changement de mot-de-passe <a6>phpldapadmin</a6><br7/> <a6>phpldapadmin</a6><br7/> </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> (&(mail=$mail)(objectClass=person)) (&(mail=$mail)(objectClass=person)) default => $ssoRoles =~ /ou=bbb,ou=roles/ default => $ssoRoles =~ /ou=bbb,ou=roles/ /_detail/logos/logo_ministere_justice.jpg?id=references /_detail/logos/logo_ministere_justice.jpg?id=references PHP PHP You can set a custom logo by choosing <c1>My logo</c1>, set the logo file name, and copy the logo file in portal applications logos directory On peut sélectionner un logo personnalisé en choisissant <c1>Mon logo</c1>, en indiquant le nom du fichier et en le copiant dans le répertoire des logos des applications https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 documentation:1.4:applications:sympa documentation:1.4:applications:sympa service_name Centralized auth service service_name Centralized auth service User tries to access to an application in the secondary <a0>LL::NG</a0> structure without having a session in this area Un utilisateur essaie d'accéder à une application du système <a0>LL::NG</a0> secondaire sans avoir de session dans cette aire <s0>Redirect on error</s0>: use 302 instead 500 or 503 <s0>Redirection pour les erreurs</s0> : utilise 302 au lieu de 500 ou 503 ../../documentation/1.4/security.html ../../documentation/1.4/security.html <s0>Name</s0>: <a1>SAML</a1> attribute name. <s0>Nom</s0>: Nom de l'attribut <a1>SAML</a1>. portal/skins/common/mail_confirm.tpl portal/skins/common/mail_confirm.tpl [libdefaults] [libdefaults] <a0>LL::NG</a0> can propose a password reset form, for users who loose their password (this kind of application is also called a self service password interface). <a0>LL::NG</a0> peut proposer un formulaire de réinitialisation de mot-de-passe pour les utilisateurs qui ont perdu leur mot-de-passe (ce type d'application est également appelée interface de mot-de-passe self-service). Security parameters Paramètres de sécurité Handler use the default Apache error code for the following cases: Les agents utilisent le code d'erreur d'Apache dans les cas suivants : logos:logo_linagora.png logos:logo_linagora.png <s0>Master's <a1>IP</a1> address</s0>: the <a2>IP</a2> addresses of servers which are accredited to authenticate user. <s0>Adresse <a1>IP</a1> du maître</s0> : les adresses <a2>IP</a2> des serveurs autorisés à authentifier les utilisateurs. An application name (to allow access by applications and not by group of users) Un nom d'application (pour autoriser l'accès aux applications sans utiliser les groupes) You have to use “Multi” as authentication module. Il est possible d'utiliser le module d'authentification “Multi”. documentation:1.4:start documentation:1.4:start You cannot use the <c0>unprotect</c0> rule because Drupal navigation is based on query strings (?q=admin, ?q=user, etc.), and unprotect rule only works on <a1>URL</a1> patterns. Vous ne pouvez pas utiliser la règle <c0>unprotect</c0> car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'<a1>URL</a1>. The portal <a0>URL</a0> <s1>must</s1> be inside <a2>SSO</a2> domain. L'<a0>URL</a0> du portail <s1>doit</s1> être dans le domaine <a2>SSO</a2>. tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* <s0>Portal</s0>: the portal redirect on itself in many cases (credentials POST, <a1>SAML</a1>, etc.) le <s0>portail</s0> : le portail redirige vers lui-même dans plusieurs cas (POST d'authentification, <a1>SAML</a1>, etc...) LemonLDAP::NG provides a script to change configuration backend easily keeping history. LemonLDAP::NG fournit un script pour changer aisément de backend de configuration en conservant l'historique. So you can have a full <a0>AAA</a0> protection for your web space as described below. Vous vouvez ainsi avoir une protection <a0>AAA</a0> complète pour votre espace web tel qu'indiqué ci-dessus. zimbra zimbra Theme (<a0>jQuery UI theme</a0>). Thème (<a0>thème jQuery-UI</a0>). nullAuthnLevel nullAuthnLevel install_site (all sites including install_doc_site) install_site (all sites including install_doc_site) <a10>authbrowserid</a10><br11/> <a10>authbrowserid</a10><br11/> SQL configuration Configuration SQL Service configuration Configuration du service Attribute Service Service d'attribut netid_http_header HTTP_AUTH_USER netid_http_header HTTP_AUTH_USER Twitter application secret Secret d'application Twitter documentation:1.4:internalproxy documentation:1.4:internalproxy Since version 1.90 of Apache::Session, you can use Apache::Session::MySQL::NoLock instead Depuis la version 1.90 d'Apache::Session, on peut utiliser Apache::Session::MySQL::NoLock à la place <a10>mysqlminihowto</a10><br11/> <a10>mysqlminihowto</a10><br11/> For security reasons, the password is not shown in sessions explorer. Pour des raisons de sécurité, le mot-de-passe n'est pas affiché dans l'explorateur de sessions. Portal creates <a0>SSO cookies</a0> with session key as value Le portail crée le <a0>cookie SSO</a0> avec la clef de la session comme valeur <<s1>IfModule</s1> mod_rewrite.c> <<s1>IfModule</s1> mod_rewrite.c> It can be upgraded using buildPortalWSDL script. Il peut être mis à jour en utilisant le script buildPortalWSDL. uidR uidR Can't locate /usr/share/lemonldap-ng/configStorage.pl Can't locate /usr/share/lemonldap-ng/configStorage.pl make debian-install make debian-install LemonLDAP::NG Portal Portail LemonLDAP::NG Notifications trough SOAP Notifications via SOAP <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> Reporting a bug Rapporter un bogue Install Authen::Radius Installer Authen::Radius This function will check the day and the hour of current request, and compare it to allowed days and hours. Cette fonction examine le jour et l'heure de la requête courante et la compare aux jours et heures autorisés. /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml checkXSS checkXSS authChoiceParam authChoiceParam Self service reset (send a mail to the user with a to change the password) Self-service de réinitialisation (envoie un mail à l'utilisateur pour changer son mot-de-passe) <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ http://www.linuxpicnic.org/ http://www.linuxpicnic.org/ ../media/logos/logo_linagora.png ../media/logos/logo_linagora.png <a0>DBI</a0> Connection password Mot-de-passe de connexion <a0>DBI</a0> ../../documentation/1.4/soapconfbackend.html ../../documentation/1.4/soapconfbackend.html #a #a #b #b #f #f #e #e #d #d The file name default separator is <c0>_</c0>, this can be a problem if you register notifications for users having <c1>_</c1> in their login. Le séparateur par défaut des noms de fichiers est <c0>_</c0>, ce qui peut poser problème si on enregistre des notifications pour des utilsateur ayant un caractère <c1>_</c1> dans leur nom de connexion. <s0>Target attribute</s0>: name of the attribute in the groups storing the link to the user (default: member). <s0>Attribut cible</s0> : nom de l'attribut du groupe stockant le lien vers l'utilisateur (défaut: member). #c #c #j #j #i #i #h #h ../../documentation/1.4/authyubikey.html ../../documentation/1.4/authyubikey.html #g #g #n #n Then create the keytab. Créer ensuite le fichier keytab. #m #m #l #l /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers #r #r <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> #q #q #p #p #o #o #u #u notifyOther notifyOther #v #v <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> #s #s Even if LL:NG can catch logout <a0>URL</a0> trough <a1>virtual host rules</a1>, you can have the need to forward a logout to other applications, to close their local sessions. Même si LL:NG peut intercepter les <a0>URL</a0> de déconnexion via les <a1>règles de d'hôte virtuel</a1>, on peut avoir besoin de propager la déconnexion à d'autres applications, pour clore leurs sessions locales. This method requires to execute a command on the Active Directory server, and then transfer the keytab on Linux server. Cette méthode nécessite d'exécuter une commande sur le serveur Active Directory et ensuite de transférer le fichier keytab sur le serveur Linux. #t #t #z #z <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> #w #w LINAGORA LINAGORA The new password is sent to user Le nouveau mot-de-passe est envoyé à l'utilisateur Go in the Manager and set the session module (for example <a0>Apache::Session::Postgres</a0> for PostgreSQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le Manager et choisir le module de session (par exemple <a0>Apache::Session::Browseable::Postgres</a0> pour PostgreSQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter les paramètres suivants (sensible à la casse): <s0>handler-apache2.conf</s0> : Handler declaration, reload and sample virtual hosts <s0>handler-apache2.conf</s0> : déclaration du handler, rechargement et exemple d'hôte virtuel documentation:1.4:logs documentation:1.4:logs There are packages available here: <a0>http://deb.entrouvert.org/</a0>. Les paquets sont disponibles ici : <a0>http://deb.entrouvert.org/</a0>. insert a label <s0>“LMAUTH”</s0> ahead of the loop insérer le label <s0>“LMAUTH”</s0> en tête de la boucle <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <a0>CAS</a0>_gateway <a0>CAS</a0>_gateway http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth ../../documentation/1.4/applications/authbasic.html ../../documentation/1.4/applications/authbasic.html OBM Apache configuration must be loaded <s0>after</s0> <a1>LL::NG</a1> <a2>Apache configuration</a2>. La configuration du serveur Apache d'OBM doit être chargée <s0>après</s0> <a2>celle</a2> de <a1>LL::NG</a1>. You also need to know the technical name of configuration parameter to do this. Il est également nécessaire de connaître le nom technique du paramètre de configuration pour le faire. ../../documentation/1.4/idpopenid.html#shared_attributes_sreg ../../documentation/1.4/idpopenid.html#shared_attributes_sreg applications:http_logo.png applications:http_logo.png <s0>handler</s0>: parameters only for Handler <s0>manager</s0> : paramètres réservés aux agents JCOS JCOS <s2>SetHandler</s2> perl-<s3>script</s3> <s2>SetHandler</s2> perl-<s3>script</s3> <s6>AuthBasicProvider</s6> ldap <s6>AuthBasicProvider</s6> ldap if you use “CDBI” or “RDBI” system, the notifications will be stored in the same database as configuration and in a table called “notifications”. si “CDBI” ou “RDBI” est utilisé, les notifications sont stockées dans la même base de données que la configuration et la table est nommée “notifications”. Install Installation <s163>//"userobm_nomade_dateend" => ,</s163> <s163>//"userobm_nomade_dateend" => ,</s163> Logout rule (for example logout_app_sso) Règle de déconnexion (par exemple logout_app_sso) applications:limesurvey_logo.png applications:limesurvey_logo.png ../../documentation/current/ssocookie.html#sso_cookie ../../documentation/current/ssocookie.html#sso_cookie Then, go in <c0>Null parameters</c0>: Aller ensuite dans les <c0>paramètres Null</c0>: Force HTTPS in redirection Indicateur HTTPS pour les redirections LemonLDAP::NG configuration is build around Apache virtual hosts. La configuration de LemonLDAP::NG est construite autour des hôtes virtuels Apache. http://wiki.sbay.org/ http://wiki.sbay.org/ Search user: select row in user table matching user Recherche de l'utilisateur : selectionne la ligne de la table utilisateurs correspondant à l'utilisateur Indeed, a virtual host can contain several applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). En effet, un hôte virtuel peut contenir plusieurs applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). ../../../media/icons/warehause.png ../../../media/icons/warehause.png ldapGroupAttributeNameSearch ldapGroupAttributeNameSearch Proxy tickets will be collected at authentication phase and stored in user session under the form: Les tickets de proxy seront collectés lors de la phase d'authentification et stockés dans la session utilisateur sous la forme : <a0>SAML</a0> authentication and issuer Authentification ou fourniture d'identité <a0>SAML</a0> Category and application key can have a digit as first character, which will allow to display categories in the right order (categories and applications are displayed in alphabetical order). Les clefs des categories et des applications peuvent commencer par un chiffre ce qui permet de les afficher dans le bon ordre (catégories et applications sont affichées dans l'ordre alphabétique). http://auth.ucanss.fr/ http://auth.ucanss.fr/ <s54>//"userobm_password_type" => ,</s54> <s54>//"userobm_password_type" => ,</s54> ~500 ~500 ../../../documentation/1.4/header_remote_user_conversion.html ../../../documentation/1.4/header_remote_user_conversion.html logout_url http://sympa.example.com/wws/logout logout_url http://sympa.example.com/wws/logout Portal menu Menu du portail The portal is the main component of <a0>LL::NG</a0>. Le portail est le principal composant de <a0>LL::NG</a0>. Database must be prepared exactly like in <a0>SQL session backend</a0> except that a field must be added for each data to index. La base de donnée doit être préparée exactement comme celle du <a0>backend de session SQL</a0> si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer. the portal is in the declared domain le portail est dans le domaine déclaré /var/lib/lemonldap-ng/sessions/lock /var/lib/lemonldap-ng/sessions/lock documentation:ha-apache.png documentation:ha-apache.png <a0>User database</a0>: where collect user information <a0>Base de données utilisateurs</a0> : où collecter les informations utilisateurs MediaWiki MediaWiki ldapGroupAttributeNameUser ldapGroupAttributeNameUser To protect the manager by <a0>LL::NG</a0>, you just have to set this in <c1>lemonldap-ng.ini</c1> configuration file (section [manager]): Pour protéger le manager par <a0>LL::NG</a0>, il suffit de mettre ceci dans le fichier de configuration <c1>lemonldap-ng.ini</c1> (section [manager]) : Be sure that mod_rewrite is installed and that SAML2 rewrite rules are activated in <a0>Apache portal configuration</a0>: Assurez-vous que mod_rewrite est installé et que les règles de réécriture SAML2 sont activées dans la <a0>configuration Apache du portail</a0>: <s0><a1>SAML</a1> identity providers</s0>: Registered IDP <s0>Fournisseurs d'identité <a1>SAML</a1></s0> : IDP enregistrés <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> Local macros is a special feature of handler that permit to have macros useable localy only. Les macros locales sont une fonctionnalité spéciale des agents qui permettent d'avoir des macros utilisables localement seulement. Perl-CAS module installation Installation du module Perl-CAS yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* <s0>Key</s0>: Service ID <s0>Clef</s0> : Service ID ../pages/documentation/1.1/applications/drupal.html ../pages/documentation/1.1/applications/drupal.html If the packages are stored in a yum repository: Si les paquets sont stockés dans un dépôt yum : ../documentation/presentation.html#login ../documentation/presentation.html#login You have to install <c0>HttpAuthPlugin.php</c0> in the <c1>extensions/</c1> directory of your MediaWiki installation: Il faut installer <c0>HttpAuthPlugin.php</c0> dans le répertoire <c1>extensions/</c1> de MediaWiki : <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> user; admin user; admin <a0>DBI</a0> UserDB connection user Compte de connexion UserDB <a0>DBI</a0> The default value of this wilcard is <c0>allusers</c0>, but you can change it if <c1>allusers</c1> is a known identifier in your system. La valeur par défaut de cette carte blanche est <c0>allusers</c0>, mais on peut la changer si <c1>allusers</c1> est un nom d'utilisateur. <s0>Site Name</s0>: Name that will be displayed in the BrowserID login window <s0>Nom du site</s0> : Nom qui sera affiché dans la fenêtre d'authentification BrowserID <s99>//"userobm_fax2" => ,</s99> <s99>//"userobm_fax2" => ,</s99> 'default_expires_in' => 600,? 'default_expires_in' => 600,? using external identity provider (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, other <a4>LL::NG</a4> system, …) utilisant un fournisseur d'identité externe (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, autres systèmes <a4>LL::NG</a4>, …) In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Radius for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Radius pour l'authentification. ../pages/documentation/1.1/authslave.html ../pages/documentation/1.1/authslave.html ../../documentation/1.4/installdeb.html ../../documentation/1.4/installdeb.html </<s17>IfModule</s17>>   </<s17>IfModule</s17>>   First name Prénom lemonldap_ng_manager_1340022440100.png lemonldap_ng_manager_1340022440100.png If you plan to forward user's password to OBM, then you have to <a0>keep the password in session</a0>. S'il est prévu de transmettre le mot-de-passe utilisateur à OBM, <a0>conserver le mot-de-passe dans la session</a0>. Auth-SuperAdmin Auth-SuperAdmin documentation:1.4:idpcas documentation:1.4:idpcas ); ); 0.9.4_logout_menu.png 0.9.4_logout_menu.png Bordeaux Bordeaux ../../documentation/1.4/ldapsessionbackend.html ../../documentation/1.4/ldapsessionbackend.html <s0>passThrough</s0> (optional): Allow anonymous access or not. <s0>passThrough</s0> (optionnel) : Autorise ou non l'accès anonyme. <s0>dirName</s0>: directory where notifications are stored. <s0>dirName</s0> : répertoire dans lequel sont stockées les notifications. Change rights on keytab file: Changer les droits sur le fichier keytab : The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots Some applications need the <c0>REMOTE_USER</c0> environment variable to get the connected user, which is not set in reverse-proxy mode. Certaines applications ont besoin de la variable d'environnement <c0>REMOTE_USER</c0> pour connaître le nom d'utilisateur connecté, qui n'est pas renseignée en mode reverse-proxy. KrbMethodK5Passwd <s17>Off</s17> KrbMethodK5Passwd <s17>Off</s17> <s5># Uncomment this line if you use Lemonldap::NG menu</s5> <s5># Décommenter cette ligne si le menu Lemonldap::NG est utilisé</s5> First configuration steps Premiers pas de configuration ../../documentation/1.4/applications/mediawiki.html ../../documentation/1.4/applications/mediawiki.html In <c0>General Parameters</c0> > <c1>Authentication modules</c1>, set: Dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1>, choisir : documentation:manager-saml-idp-attribute.png documentation:manager-saml-idp-attribute.png Issuer databases use rules les règles d'utilisation des bases de données des fournisseur d'identité <a2>applications</a2><br3/> <a2>applications</a2><br3/> Note that you have to use UTF-8 characters Notez que vous devez utiliser des caractères UTF-8 Choose for example <a0>http://zimbra.example.com/zimbrasso</a0> as <a1>SSO</a1> <a2>URL</a2> and <a3>set it in application menu</a3>. Choisir par exemple <a0>http://zimbra.example.com/zimbrasso</a0> comme <a2>URL</a2> <a1>SSO</a1> et <a3>insérer la dans le menu application</a3>. ldapServer ldapServer <s0>Transient</s0>: NameID is generated <s0>Transient</s0>: le NameID est généré So write your rules using normal characters. Il faut donc écrire les règles en utilisant les caractères normaux. You can simply checkout sources with the following command: Utilisez simplement la commande suivante pour télécharger les sources : ../../../media/applications/django_logo.png ../../../media/applications/django_logo.png Portal translation Traduction du portail ../pages/documentation/1.1/parameterlist.html ../pages/documentation/1.1/parameterlist.html http://perldoc.perl.org/functions/print.html http://perldoc.perl.org/functions/print.html Real session backend Backend de session réel ../pages/documentation/1.4/authwebid.html ../pages/documentation/1.4/authwebid.html <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> Identity provider Fournisseur d'identité remoteGlobalStorageOptions remoteGlobalStorageOptions As administrator, go in Google Apps control panel and click on Advanced tools: Comme administrateur, aller dans le panneau de contrôle Google Apps et cliquer sur les outils avancés click (Advanced tools) : Allow only one session per user N'autoriser qu'une session par utilisateur <s0>SSLCertificateKeyFile</s0>: Server private key <s0>SSLCertificateKeyFile</s0> : clef privée du serveur Lasso Lasso An access rule Une règle d'accès Then, go in <c0>Slave parameters</c0>: Ensuite, aller dans les <c0>paramètres Slave</c0>: Forbidden and Server error Accès interdits et erreurs du serveur Other Autres phpLDAPadmin local configuration Configuration locale phpLDAPadmin The PasswordDBDemo will allow you to change the password with some basic checks, but as the data are hard coded, the password will never be really changed. PasswordDBDemo permet de changer de mot-de-passe avec quelques tests de base, mais comme les données sont codées en dur, le mot-de-passe ne sera jamais réellement changé. Applications protection Protection des applications mailreset_step5.png mailreset_step5.png notificationWildcard notificationWildcard download.html download.html The configuration can be changed in <c0>etc/manager-apache2.conf</c0>, for example to restrict the <a1>IP</a1> allowed to access the Manager: Cette configuration peut être changée dans <c0>etc/manager-apache2.conf</c0>, par exemple pour restreindre les adresses <a1>IP</a1> autorisées à accéder au manager : /_detail/icons/personal.png?id=documentation%3A1.4%3Astart /_detail/icons/personal.png?id=documentation%3A1.4%3Astart Admin Magazin Admin Magazin You can modify the default behavior for people without value in ssoLogonHours. Il est possible de modifier le comportement par défaut pour les utilisateurs ne disposant pas d'une valeur ssoLogonHours. <a0>Password database</a0>: where change password <a0>Base de données des mots-de-passe</a0> : où changer le mot-de-passe Configuration interface access is not protected by Apache but by LemonLDAP::NG itself (see <c0>lemonldap-ng.ini</c0>): L'accès à l'interface de configuration n'est pas protégée par Apache mais par LemonLDAP::NG lui-même (voir <c0>lemonldap-ng.ini</c0>) : <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> Daniel RIVIERE Daniel RIVIERE <s16>}</s16> <s17>)</s17><s18>;</s18> <s16>}</s16> <s17>)</s17><s18>;</s18> http://httpd.apache.org/docs/current/howto/auth.html http://httpd.apache.org/docs/current/howto/auth.html Then: Ensuite : <a0>URL</a0> pattern: <c1>default</c1> Expression sur l'<a0>URL</a0> : <c1>default</c1> Example for macros: Exemples de macros: Apache configuration file on <a0>LL::NG</a0> reverse proxy (hosting <a1>LL::NG</a1> Handler): le fichier de configuration d'Apache sur le reverse-proxy <a0>LL::NG</a0> (celui qui héberge l'agent <a1>LL::NG</a1>): $ENV{REMOTE_ADDR} =~ /^192\.168/ $ENV{REMOTE_ADDR} =~ /^192\.168/ <a8>filesessionbackend</a8><br9/> <a8>filesessionbackend</a8><br9/> Build: Build: <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> Access control possible by creating one user for Manager (write) and another for portal and handlers (read) Contrôle d'accès possible en créant un compte pour le manager (écriture) et un autre pour le portail et les agents (lecture) Sessions are stored as files in a single directory. Les sessions sont stockées dans des fichiers dans un unique répertoire. portalDisplayLogout portalDisplayLogout ldapGroupRecursive ldapGroupRecursive encode_base64($givenName." ".$surName) encode_base64($givenName." ".$surName) To add these attributes, go in Manager, <c0>Variables</c0> » <c1>Exported Variables</c1>. Pour ajouter ces attributs, aller dans le manager, <c0>Variables</c0> » <c1>Variables exportées</c1>. We can distinguish several kind of variables: On peut distinguer plusieurs types de variables : Lemonldap-ng.ini parameters Paramètres lemonldap-ng.ini You must register IDP metadata here. Il faut enregistrer les métadatas de l'IDP ici. For example, we will use 3 roles: Par exemple, en utilisant 3 rôles : https://developer.mozilla.org/en-US/docs/Mozilla/Persona https://developer.mozilla.org/en-US/docs/Mozilla/Persona documentation:manager-menu-application-logo.png documentation:manager-menu-application-logo.png <a0>CAS</a0>_renew <a0>CAS</a0>_renew <a16>authdbi</a16><br17/> <a16>authdbi</a16><br17/> lemonldap-ng-portal-auth.png lemonldap-ng-portal-auth.png Give the uid (for accounting) Donne l'uid (pour la traçabilité) ../pages/documentation/1.1/portalcustom.html ../pages/documentation/1.1/portalcustom.html ../../../media/applications/tomcat_logo.png ../../../media/applications/tomcat_logo.png Name of IDP used for authentication Nom de l'IDP utilisé pour l'authentification </<s7>Directory</s7>> </<s7>Directory</s7>> <s0>Common domain</s0>: Name of the common domain (where common cookie is available). <s0>Domaine commun</s0> : Nom du domaine commun (où le cookie commun est disponible). documentation:1.4:installrpm documentation:1.4:installrpm http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html Real name Real name proxyOptions proxyOptions Define here: Definir ici : Activation Activation Lemonldap::NG::Handler Lemonldap::NG::Handler You can define more than one form replay <a0>URL</a0> per virtual host. Il est possible de définir plusieurs <a0>URL</a0> de rejeu de formulaires par hôte virtuel. ../pages/documentation/1.1/customfunctions.html ../pages/documentation/1.1/customfunctions.html Convert existing configuration Convertir la configuration existante Lanyrd Lanyrd Apache configuration file on application server (hosting the application): le fichier de configuration d'Apache sur le serveur d'application (celui qui héberge l'application): ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> Activate auto accept timer Activer le compte-à-rebours d'acceptation automatique → Some <a0>URL</a0> parameters contain forbidden characters. → Certains paramètres de l'<a0>URL</a0> contiennent des caractères interdits. Dedicated to administrators Dédié aux administrateurs documentation/current/installrpm.html#yum_repository documentation/current/installrpm.html#yum_repository <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> General performances Performances générales <s0>Authorizated domain</s0>: <s0>Domaines autorisés</s0> : Applications listed bellow are known to be easy to integrate in <a0>LL::NG</a0>. Les applications listées ci-dessous sont connues pour être faciles à intégrer à <a0>LL::NG</a0>. <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> Binding Méthode Date of session last modification Date de la dernière modification de la session Old sessions are deleted by a cron script. Les anciennes sessions sont effacées par un script cron. Commit Commit <a0>LL::NG</a0> can be configured to restrict OpenID exchange using a white or a black list of domains. <a0>LL::NG</a0> peut être configuré pour restreindre les échanges OpenID en utilisant les listes blanches ou noires de domaines. ../../documentation/1.4/formreplay.html ../../documentation/1.4/formreplay.html 22 22 #local_file #local_file documentation:manager-saml-service-sp-slo.png documentation:manager-saml-service-sp-slo.png <s0>Password field name</s0>: name of authentication table column hosting password <s0>Nom du champ mot-de-passe</s0> : nom de la colonne de la table d'authentification contenant le mot-de-passe <s0>Clément “KPTN” OUDOT</s0>: project leader, lead developer, graphics, documentation, community management <s0>Clément “KPTN” OUDOT</s0> : Leader du projet, développeur principal, graphisme, documentation, gestion de la communauté Rules Règles Facebook Facebook https://metacpan.org/module/Apache::Session::Flex https://metacpan.org/module/Apache::Session::Flex You need to give access to status path in the Handler Apache configuration: Il faut autoriser l'accès au chemin du statut dans le configuration Apache de l'agent : remotePortal remotePortal <s0><a1>URL</a1> parameter</s0>: parameter name used to set choice value (default: <c2>lmAuth</c2>) Paramètres d'<s0><a1>URL</a1></s0> : nom du paramètre utilisé pour stocker la valeur du choix (défaut: <c2>lmAuth</c2>) <s0>Key name</s0>: Text displayed on choice tab. <s0>Nom de clef</s0> : Texte à afficher sur l'onglet. <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com Be careful with URL parameters Attention aux paramètres des URL 31 31 Linux Tag Linux Tag <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> Go to <c0>Portal</c0> » <c1>Settings</c1>: Aller dans <c0>Portal</c0> » <c1>Settings</c1>: <s21>Deny</s21> from <s22>all</s22> <s21>Deny</s21> from <s22>all</s22> Registered users on Google Apps with the same email than those used by <a0>LL::NG</a0> (email will be the NameID exchanged between Google Apps and <a1>LL::NG</a1>) Enregistrer les utilisateurs dans Google Apps avec la même adresse mail que celle utilisée dans <a0>LL::NG</a0> (l'adresse mail sera le NameID échangé entre Google Apps et <a1>LL::NG</a1>) Headers are associations between an header name and a perl expression that returns a string. Les en-têtes sont des associations entre un nom d'en-tête et une expression perl qui retourne une chaîne. As passwords will not be managed by <a0>LL::NG</a0>, you can disable <a1>menu password module</a1>. Comme les mots-de-passe ne sernt pas gérés par <a0>LL::NG</a0>, il est possile de désactiver le <a1>module mots-de-passe du menu</a1>. When portal is installed, a file named portal.wsdl is created. Lorsque le portail est installé, un fichier nommé portal.wsdl est créé. You might want to display different skin depending on the <a0>URL</a0> that was called before being redirected to the portal, or the <a1>IP</a1> address of the user. On peut vouloir utiliser différents thèmes en fonction de l'<a0>URL</a0> demandée avant la redirection au portail ou en fonction de l'adresse <a1>IP</a1> de l'utilisateur. For Active Directory, the default authentication filter is: Pour Active Directory, le filtre d'authentification par défaut est : Zimbra preauthentication <a0>URL</a0> <a0>URL</a0> de pré-authentification Zimbra <a0>LL::NG</a0> can be used to prompt users with a message. <a0>LL::NG</a0> peut être utilisé pour présenter des messages aux utilisateurs. You can show them using <a0>Facebook Graph API explorer</a0> On peut les voir en utilisant l'<a0>explorateur de l'API Graph de Facebook</a0> #google_apps_control_panel #google_apps_control_panel 20 20 ^/minig ^/minig <s7>Options</s7> +ExecCGI <s7>Options</s7> +ExecCGI example.com = EXAMPLE.COM example.com = EXAMPLE.COM <a2>ldapminihowto</a2><br3/> <a2>ldapminihowto</a2><br3/> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> http://lemonldap.ow2.org/NG/devel-doc/ http://lemonldap.ow2.org/NG/devel-doc/ <s0>accept</s0>: all authenticated users will access surveys <s0>accept</s0> : tous les utilisateurs authentifiés peuvent accéder aux surveillances <a0>The status page</a0> can be read by <a1>MRTG</a1> using the script <s2>lmng-mrtg</s2> that can be found in manager example directory. <a0>La page de statut</a0> peut être lue par <a1>MRTG</a1> en utilisant le script <s2>lmng-mrtg</s2> qui peut être trouvé dans le répertoire "example" du manager. /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars ../../../media/documentation/configuration-ldap.png ../../../media/documentation/configuration-ldap.png API documentation Documentation de l'interface de programmation (API) Select the key, and export it (button <c0>Download this file</c0>): Selectionner la clef, et l'exporter (bouton <c0>Download this file</c0>): /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki As J2EE servlet container, Tomcat provides standard security feature, like authentication: the application deployed in Tomcat can delegate its authentication to Tomcat. Comme conteneur de servlet J2EE, Tomcat fournit les fonctionnalités de sécurité standards, telles l'authentification : une application déployée dans Tomcat peut déléguer son authentification à Tomcat. The choice will concern three backends: Ce choix concerne 3 backends: ../pages/documentation/1.4/authgoogle.html ../pages/documentation/1.4/authgoogle.html <a0>LL::NG</a0> can act as an <a1>SAML</a1> 2.0 Identity Provider, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en fournisseur d'identité <a1>SAML</a1> 2.0, ce qui permet de fédérer <a2>LL::NG</a2> avec : Example with the portal: Exemple avec le portail : Language Langue https://authssl.example.com https://authssl.example.com Restart Apache to purge it. Redémarrer Apache pour le purger. DEB bundle Paquets DEB <a0>IP</a0> of the user (can be the X Forwarded For <a1>IP</a1> if trusted proxies are configured) <a0>IP</a0> de l'utilisateur (peut être celle de l'en-tête X-Forwarded-For si des proxies agréés ont été configurés) http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication ../../documentation/1.4/authfacebook.html ../../documentation/1.4/authfacebook.html You can add this YUM repository to get recent packages: Ajouter ces dépôts YUM pour obtenir les paquets récents : LemonLDAP::NG Handler Agent LemonLDAP::NG (handler) <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <a2>translations</a2><br3/> <a2>traductions</a2><br3/> Main differences with mod_proxy: Principales différences avec mod_proxy : authentication_portal_1340022238188.png authentication_portal_1340022238188.png By default, a user can open several <a0>sessions</a0>. Par défaut, un utilisateur peut ouvrir plusieurs <a0>sessions</a0>. $authenticationLevel > 2 $authenticationLevel > 2 documentation:1.4:applications:authbasic documentation:1.4:applications:authbasic Try <a0>http://test1.example.com</a0> or <a1>http://test2.example.com</a1> Essayez <a0>http://test1.example.com</a0> ou <a1>http://test2.example.com</a1> Your database must have a specific table to host sessions. Il faut dédier une table pour héberger les sessions. <s0>Memcached servers</s0>: addresses of Memcached servers, separated with spaces. <s0>Serveurs Memcached</s0> : adresses des serveurs Memcached, separés par des espaces. Handler build the preauth request and redirect user on Zimbra preauth <a0>URL</a0> Le handler construit la requête de pré-authentification et redirige l'utilisateur sur l'<a0>URL</a0> de pré-authentification de Zimbra Here are some examples for main databases servers. Quelques exemples pour les serveurs principaux. You can now the upload the certificate (<c0>cert.pem</c0>) on Google Apps. Télécharger ensuite le certificat (<c0>cert.pem</c0>) dans Google Apps. /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots By hand in Liferay administration screens À la main dans les écrans d'administration de Liferay http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions <s0><a1>SAML</a1> 2 Service</s0>: <a2>SAML</a2> metadata administration <s0>Service <a1>SAML</a1></s0> : administration des métadonnées <a2>SAML</a2> <a0>CAS</a0>_pgtFile <a0>CAS</a0>_pgtFile Category parameters: Paramètres des catégories : ../../../../media/documentation/googleapps-export-priv-key.png ../../../../media/documentation/googleapps-export-priv-key.png An authorization is defined by: Une autorisation est définie pas : Body for password mail Corps du message de changement de mot-de-passe IssuerDB IssuerDB Modify Manager protection Modifier la protection du manager SVN access Accès au dépôt SVN twitterKey twitterKey So, to keep user password in session, you cannot just export the password variable in session. Donc pour conserver le mot-de-passe utilisateur dans la session, on ne peut seulement exporter la variable mot-de-passe dans la session. <s0>Success mail content</s0> (optional): Content of mail sent when password is changed <s0>Contenu du message</s0> (optionnel) : contenu du courriel envoyé lorsque le mot-de-passe est changé jre > 1.4 jre > 1.4 OBM_UID OBM_UID _password _password menu.png menu.png <s0>Use rule</s0>: a rule to allow user to use this module, set to 1 to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Form replay allows you to open a session on a protected application by replaying the form POST without asking anything to the user. Le rejeu de formulaire permet d'ouvrir une session dans une application protégée par un formulaire POST sans rien demander à l'utilisateur. ../documentation/current/writingrulesand_headers.html ../documentation/current/writingrulesand_headers.html <s0>Server hostname</s0>: this is the hostname or <a1>IP</a1> address of the Radius server <s0>Nom d'hôte du serveur</s0> : le nom d'hôte ou l'adresse <a1>IP</a1> du serveur Radius You can do it either by uploading the file, or get it from SP metadata <a0>URL</a0> (this require a network link between your server and the SP). Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas du SP (à condition d'avoir un lien réseau entre le serveur et le SP): $uid $uid http://www.mediawiki.org http://www.mediawiki.org Configuration database Base de données de la configuration update-alternatives --config editor update-alternatives --config editor ../pages/documentation/1.1/applications/obm.html ../pages/documentation/1.1/applications/obm.html <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. portal.png portal.png These errors can be catch trough Apache <c0>ErrorDocument</c0> directive, to redirect user on a specific page: Ces erreurs peuvent être interceptées via la directive <c0>ErrorDocument</c0> d'Apache pour rediriger les utilisateurs vers une page spécifique : You can also use a FastCGI server using index.fcgi given in portal examples. On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail. This should be set as Default. Peut être défini par défaut. ../download.html ../download.html If you need to add a template parameter for your customization, then add to <c0>lemonldap-ng.ini</c0>: Pour ajouter un paramètre de modèle, l'ajouter dans <c0>lemonldap-ng.ini</c0>: ../pages/documentation/1.1/portal.html ../pages/documentation/1.1/portal.html http://search.cpan.org/search?query=DBD%3A%3A&mode=module http://search.cpan.org/search?query=DBD%3A%3A&mode=module ../../documentation/presentation.html#login ../../documentation/presentation.html#login ../../documentation/1.4/idpopenid.html#security ../../documentation/1.4/idpopenid.html#security You can then choose any other module for users and password but if you want to totally delegate authentication to BrowserID, choose <a0>None</a0> for users and password. On peut ensuite choisir n'importe quel autre module de gestion des utilisateurs et des mots-de-passe mais pour déléguer totalement l'authentification à BrowserID, choisir <a0>None</a0> pour la gestion des utilisateurs et des mots de passe. ../pages/documentation/1.1/filesessionbackend.html ../pages/documentation/1.1/filesessionbackend.html /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword Access rule: <c0>$groups =~ /\badministrators\b/</c0> Règle d'accès : <c0>$groups =~ /\badministrators\b/</c0> Nick name Nick name Oliver BOIREAU Oliver BOIREAU Multi values separator Séparateur des multiples valeurs authentication_portal_1340022292201.png authentication_portal_1340022292201.png Content Management System Système de gestion de contenu <s0>Optimized</s0> for <a1>session explorer</a1> and <a2>single session</a2> features. <s0>Optimisé</s0> pour l'<a1>explorateur de sessions</a1> et les fonctionnalités de <a2>session unique</a2>. <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> First parameter passed to the custom function is the requested <a0>URL</a0>, that is Le premier paramètre passé à la fonction personnalisée est l'<a0>URL</a0> demandée, c'est à dire Nb users Nb d'utilisateurs Databases (DBI) Bases de données (DBI) Quick start tutorial Tutoriel rapide <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> mailto:lemonldap-ng-dev@ow2.org mailto:lemonldap-ng-dev@ow2.org An <a0>URL</a0> pattern (or <c1>default</c1> to match other URLs) Une expression sur l'<a0>URL</a0> (ou <c1>default</c1> pour les URLs ne correspondant pas aux règles) In this case you will have two Apache configuration files: Dans ce cas 2 fichiers de configuration Apache doivent être renseignés : logout_sso http://intranet/ logout_sso http://intranet/ documentation:latest:logs documentation:latest:logs ../../documentation/1.4/performances.html#macros_and_groups ../../documentation/1.4/performances.html#macros_and_groups ../pages/documentation/1.4/loginhistory.html ../pages/documentation/1.4/loginhistory.html /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote <s0>Mail session key</s0>: session field where to find user mail (by default: mail) <s0>Clef de session mail</s0> : champ de session pour trouver l'adresse mail des utilisateurs (par défaut : mail) FOSDEM FOSDEM } [domain_realm] } [domain_realm] Warning: key is not defined, set it in the manager ! Warning: key is not defined, set it in the manager ! ../../../media/screenshots/1.1/notifications/sample_notification.png ../../../media/screenshots/1.1/notifications/sample_notification.png Give a non ascii data Done une valeur non-ascii Password reset Réinitialisation de mots-de-passe accept accept IssuerDB use Utilisation de IssuerDB <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm documentation:1.4:changeconfbackend documentation:1.4:changeconfbackend Install the package <c0>lemonldap-ng-conf</c0> on all server which contains one of those packages. Installer le paquet <c0>lemonldap-ng-conf</c0> sur tous les serveurs qui contiennent un de ces paquets. portalRequireOldPassword portalRequireOldPassword Shared attributes (SREG) Attributs partagés (SREG) <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> Allow only one <a0>IP</a0> address per user N'autoriser qu'une adresse <a0>IP</a0> par utilisateur ../../documentation/1.4/soapminihowto.html ../../documentation/1.4/soapminihowto.html <a0>SAML</a0> can use different NameID formats. <a0>SAML</a0> peut utiliser plusieurs formats de NameID. documentation:1.4:authslave documentation:1.4:authslave http://github.com/oremj/mediawiki-http-auth/downloads http://github.com/oremj/mediawiki-http-auth/downloads In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose OpenID for authentication and/or users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>OpenID</a2> pour les modules authentification, utilisateurs et/ou mots-de-passe. iso2unicode($name) iso2unicode($name) Default Défaut Restart all your Apache servers Redémarrer tous vos serveurs Apache See <a0>Writing rules and headers</a0> for more. Voir <a0>Écrire les règles et en-têtes</a0> pour plus d'informations. <a0>CAS</a0> force gateway authentication Forcer l'authentification de passerelle <a0>CAS</a0> Deny access to /config/ directory Interdire l'accès au répertoire /config/ c:/my hardisk/tomcat/ c:/my hardisk/tomcat/ ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy <s0>How do users authenticate?</s0>: by login <s0>How do users authenticate?</s0>: by login documentation:googleapps-manager-application.png documentation:googleapps-manager-application.png <s0>configuration</s0>: where configuration is stored <s0>configuration</s0> : où la configuration est stockée <s0><a1>Notifications</a1></s0>: prompt users with a message if found in the notification database <s0><a1>Notifications</a1></s0> : interrompt les utilisateurs avec un message s'il est trouvé dans la base de données des notifications <s0>Cookie name</s0>: name of the cookie, can be changed to avoid conflicts with other LemonLDAP::NG installations <s0>Nom de cookie</s0> : nom du cookie, peut être changé pour éviter les conflits avec d'autres installations LemonLDAP::NG <a0>LL::NG</a0> can use a lot of databases as authentication, users and password backend: <a0>LL::NG</a0> peut utiliser de nombreuses bases de données comme backend d'authentification, d'utilisateurs et de mots de passe : <s0>Check <a1>XSS</a1> Attacks</s0>: Set to 'Off' to disable <a2>XSS</a2> checks. <s0>Contrôler les attaques <a1>XSS</a1></s0> : mettre à 'désactivé' pour désactiver la détection des attaques <a2>XSS</a2>. <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> https://upgrade.yubico.com/getapikey/ https://upgrade.yubico.com/getapikey/ <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> applications:googleapps_logo.png applications:googleapps_logo.png The portal is the visible part of LemonLDAP::NG, all user interactions are displayed on it. Le portail est la partie visible de LemonLDAP::NG, toutes les interactions utilisateurs y sont affichées. language language ../media/screenshots/1.1/mailreset/mailreset_step5.png ../media/screenshots/1.1/mailreset/mailreset_step5.png Metadata Métadata Disable all signature flags in <c0>Options</c0> » <c1>Signature</c1>, except <c2>Sign <a3>SSO</a3> message</c2> which should be to <c4>On</c4> Désactiver toutes les cases dans <c0>Options</c0> » <c1>Signature</c1>, excepté <c2>Signer les messages <a3>SSO</a3></c2> qui doit être activée /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay Code snippet Exemple de code MediWiki local configuration Configuration locale MediaWiki documentation:latest:portalcustom documentation:latest:portalcustom Order your rules Ordonner les règles <s88>//"userobm_photo_id" => ,</s88> <s88>//"userobm_photo_id" => ,</s88> Local groups Groupes locaux ../pages/documentation/1.1/activedirectoryminihowto.html ../pages/documentation/1.1/activedirectoryminihowto.html This concerns all parameters for the Organization metadata section: Ceci concerne tous les paramètres de la section "organization" des métadatas : <s0>Reset value</s0>: value to set in reset attribute to activate password reset (default: TRUE). <s0>Valeur de reset</s0> : valeur à mettre dans l'attribut reset pour activer la réinitialisation du mot-de-passe (défaut : TRUE). Check if <a0>URL</a0> asked is valid Vérifie que l'<a0>URL</a0> demandée est validée <s0>DNSDOMAIN</s0>: Main <a1>DNS</a1> domain (default: example.com) <s0>DNSDOMAIN</s0> : domaine <a1>DNS</a1> proncipal (défaut : example.com) ../../documentation/1.4/authchoice.html ../../documentation/1.4/authchoice.html <s146>//"userobm_nomade_local_copy" => ,</s146> <s146>//"userobm_nomade_local_copy" => ,</s146> Available bindings are: Les déclarations disponibles sont : You can for example set up a fail-over cluster with <a0>Heartbeat</a0> and <a1>HAproxy</a1>, like this: Par exemple on peut créer un cluster avec <a0>Heartbeat</a0> et <a1>HAproxy</a1> : <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> ../../documentation/1.4/installrpm.html ../../documentation/1.4/installrpm.html → Check grantSessionRule parameter. → Vérifier le paramètre grantSessionRule. <a0>LL::NG</a0> uses <a1>Apache SSL module</a1>, like any other <a2>Apache authentication module</a2>, with extra features: <a0>LL::NG</a0> utilise le <a1>module SSL d'Apache</a1>, comme n'importe quel <a2>module d'authentification d'Apache</a2> avec quelques fonctionnalités supplémentaires : http://www.switch.ch/aai/support/tools/wayf.html http://www.switch.ch/aai/support/tools/wayf.html GLib GLib <s153>//"userobm_samba_home" => ,</s153> <s153>//"userobm_samba_home" => ,</s153> documentation:manager-formreplay-newurl.png documentation:manager-formreplay-newurl.png Trusted domains Domaines agréés ../media/icons/flags/ua.png ../media/icons/flags/ua.png If OpenID is used as users database, attributes will be requested to the server with SREG extention. Si OpenID est utilisé comme base d'utilisateurs, les attributs sont demandés en utilisant l'extension SREG d'OpenID. http://phpldapadmin.sourceforge.net http://phpldapadmin.sourceforge.net Import or generate security keys Importer ou generer les clefs de securité You need to register a new application on Twitter to get <a0>API</a0> key and <a1>API</a1> secret. Vous devez enregistrer votre nouvelle application dans Twitter pour obtenir la clef de l'<a0>API</a0> et son secret<a1></a1>. Parameters for <a0>DBI</a0> backend are the same as <a1>DBI configuration backend</a1>. Les paramètres pour le backend <a0>DBI</a0> sont les mêmes que ceux du <a1>backend de configuration DBI</a1>. syslog syslog → The host is not known by LemonLDAP::NG. → L'hôte n'est pas connu de LemonLDAP::NG. <s0>IDP resolution cookie name</s0>: by default, it's the <a1>LL::NG</a1> cookie name suffixed by <c2>idp</c2>, for example: <c3>lemonldapidp</c3>. <s0>Nom du cookie de résolution de l'IDP</s0>: par défaut, c'est le nom du cookie <a1>LL::NG</a1> auquel est adjoint <c2>idp</c2>, par exemple: <c3>lemonldapidp</c3>. Backends Backends /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra RBAC model Modèle RBAC screenshots:1.1:mailreset:mailreset_step2.png screenshots:1.1:mailreset:mailreset_step2.png <s0>default_access</s0> (optional): what result to return if <s1>logon_hours</s1> is empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>logon_hours</s1> est vide By default, configuration is stored in <a0>files</a0>, so access trough network is not possible. Par défaut, la configuration est stockée dans des <a0>fichiers</a0>, donc l'accès par le réseau n'est en général pas possible. <s0>Port</s0>: port of the application (by default, 80 for http, 443 for https) <s0>Port</s0> : port de l'application (par défaut, 80 pour http, 443 pour https) <a0>LL::NG</a0> can use SAML2 to get user identity and grab some attributes defined in user profile on its Identity Provider (IDP). <a0>LL::NG</a0> peut utiliser SAML2 pour obtenir l'identité et d'autres attributs definis dans le profil utilisateur défini chez son fournisseur d'identité (IDP). default_realm = EXAMPLE.COM [realms] default_realm = EXAMPLE.COM [realms] With this organization, you can set roles to user within specific application. Avec cette organisation, on peut définir les rôles de l'utilisateur au sein de chaque application. documentation:liferay_1.png documentation:liferay_1.png <a0>LL::NG</a0> use cron jobs to: <a0>LL::NG</a0> utilise des tâches planifiées pour : documentation:1.4:sessions documentation:1.4:sessions decreased (-1) if the portal autocompletion is allowed (see <a0>portal customization</a0>) diminué (-1) si l'autocompletion est autorisée sur le portail (voir <a0>Personnalisation du portail</a0>) <a0>DBI</a0> user Utilisateur <a0>DBI</a0> ../../../../css/all.css ../../../../css/all.css ../pages/documentation/1.1/authldap.html ../pages/documentation/1.1/authldap.html This means that if several Handlers are deployed, each will manage its own statistics. Donc si plusieurs agents sont déployés, chacun gère ses propres statistiques. Sessions are deleted by a scheduled task. Les sessions sont effacées par des tâches planifiées. <a0>LL::NG</a0> can also act as <a1>OpenID server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur OpenID</a1>, ce qui permet également d'interconnecter deux systèmes <a2>LL::NG</a2>. ../../../../media/documentation/googleapps-ssoconfig.png ../../../../media/documentation/googleapps-ssoconfig.png <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> A request to the main session database is done (trough <a1>SOAP session backend</a1>) to be sure that the session exists. Une requête à la base de données des sessions principale est effectuée (via le <a1>backend de session SOAP</a1>) pour être sûr que la session existe. KrbMethodNegotiate <s12>On</s12> KrbMethodNegotiate <s12>On</s12> ../pages/documentation/1.1/applications/liferay.html ../pages/documentation/1.1/applications/liferay.html Jean-Thomas CHECCO Jean-Thomas CHECCO cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts A login is considered as successful if user get authenticated and is granted a session; as failed, if he fails to authenticate or if he is not allowed to open a session. Une connexion est considérée comme réussie si l'utilisateur est authentifié et autorisé à ouvrir une session ; comme échouée, sinon. Authentication process main steps are: Les étapes du processus d'authentication sont : portal portail Portal creates a session to store user data Le portail crée une session et y stocke les données ../pages/documentation/1.1/idpopenid.html ../pages/documentation/1.1/idpopenid.html If you choose to use MySQL, read <a0>how to increase MySQL performances</a0>. Si MySQL est choisi, lire <a0>comment augmenter les performances de MySQL</a0>. _openid_<e0>id</e0> _openid_<e0>id</e0> icons:jabber_protocol.png icons:jabber_protocol.png The main portal is configured to use <a0>CDA</a0>. Le portail principal est configuré pour utiliser le <a0>CDA</a0>. GRR GRR Translators that want to help us are welcome ! Les traducteurs qui veulent nous aider sont les bienvenus ! Display other sessions Affiche les autres sessions lemonldap-ng-portal-password.png <lemonldap-ng-portal-password.png Remote cookie name Nom du cookie distant <a4>memcachedsessionbackend</a4><br5/> <a4>memcachedsessionbackend</a4><br5/> We will explain how to use the latest: <a0>HTTP Auth</a0>. Nous expliquons ici comment utiliser le dernier : <a0>HTTP Auth</a0>. documentation:1.4:authremote documentation:1.4:authremote By default, Apache configuration files will be installed in <c0>/usr/local/lemonldap-ng/etc/</c0>. Par défaut les fichiers de configuration d'Apache seront installés dans <c0>/usr/local/lemonldap-ng/etc/</c0>. LDAP server Serveur LDAP applications:spring_logo.png applications:spring_logo.png </<s10>Directory</s10>>   </<s10>Directory</s10>>   Advanced configuration Configuration avancée LemonLDAP::NG is a modular WebSSO (Single Sign On) based on Apache::Session modules. LemonLDAP::NG est en WebSSO (Single Sign On) modulaire basé sur les modules Apache::Session. Portal gets the session key Le portail récupère la clef de session SOAP configuration backend proxy le proxy de backend de configuration SOAP SOAP configuration backend Backend de configuration SOAP Get the tarball Récupérer l'archive Code to replace: Code à remplacer : <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> checkDate($ssoStartDate, $ssoEndDate) checkDate($ssoStartDate, $ssoEndDate) <s0>François-Xavier DELTOMBE</s0>: developer, tester <s0>François-Xavier DELTOMBE</s0> : developeur, testeur <a0>Configure the Apache server</a0> that host the portal to use the Apache Kerberos authentication module <a0>Configurer le serveur Apache</a0> qui héberge le portail utilisant le module d'authentification Kerberos d'Apache /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice internal_email_by_netid 1 internal_email_by_netid 1 <s0>OpenID login</s0>: the session key used to match OpenID login. <s0>Identificant OpenID</s0> : la clef de session utilisée pour correspondre au login OpenID. Convert HTTP header into environment variable Convertir les en-têtes HTTP en variables d'environnement logos:logo_abuledu.png logos:logo_abuledu.png Thomas CHEMINEAU Thomas CHEMINEAU <<s9>Location</s9> /index.pl/sessions> <<s9>Location</s9> /index.pl/sessions> lemonldap-ng-handler: contains Apache Handler implementation (agent) lemonldap-ng-handler : contient l'implémentation de l'agent pour Apache (handler) notification notification <s0>SLO binding</s0>: force binding to use for SLO (http-redirect, http-post, etc.) <s0>Méthode SLO</s0> : force la méthode à utiliser pour le SLO (http-redirect, http-post, etc.) ou=sessions,dc=example,dc=com ou=sessions,dc=example,dc=com <s0>Authorized domains</s0>: white list or black list of OpenID client domains (<s1><a2>see below</a2></s1>). <s0>Domaines autorisés</s0> : liste blanche ou noire des domaines clients OpenID (<s1><a2>voir ci-dessous</a2></s1>). applications:zimbra_logo.png applications:zimbra_logo.png To manage the other way (<a0>LL::NG</a0> → Google Apps), you can add a dedicated <a1>logout forward rule</a1>: Pour gérer l'autre voie (<a0>LL::NG</a0> → Google Apps), ajouter une <a1>règle de redirection après déconnexion</a1>: <s0>deleteSession</s0>: delete a session <s0>deleteSession</s0> : efface une session <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s0>roleSeparator</s0> (optional): role values separator. <s0>roleSeparator</s0> (optionnel) : séparateur des valeurs de rôle. ../media/logos/logo_bpi.png ../media/logos/logo_bpi.png ../../documentation/1.4/authapache.html ../../documentation/1.4/authapache.html Contact Contact install_handler_libs install_handler_libs SVN nightly builds Extraction nocturne du dépôt SVN ../../../media/icons/personal.png ../../../media/icons/personal.png Datas around the authentication process. Données concernant le processus d'authentification. Options: redirection port and protocol Des options : port de redirection et protocole <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ baseurl=http://lemonldap-ng.org/rpm6/ baseurl=http://lemonldap-ng.org/rpm6/ Manager virtual host is used to serve configuration interface and local documentation. L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. <s0>Exceptions</s0>: allow anonymous access for specific URLs (connectors, etc.) <s0>Exceptions</s0> : autoriser l'accès anonyme pour les URLs spécifiques (connecteurs, etc.) /_detail/icons/terminal.png?id=documentation /_detail/icons/terminal.png?id=documentation <s0>Verification <a1>URL</a1></s0>: <a2>URL</a2> used to verifiy the BrowserID assertion. <s0><a1>URL</a1> de vérification</s0> : <a2>URL</a2> utilisée pour vérifier l'assertion BrowserID. /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring To do this in Manager, go in General Parameters > Advanced Parameters > Notifications. pour ce faire dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications. <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI The conditions are checked in alphabetical order of comments. Les conditions sont examinées dans l'ordre alphabétique des commentaires. For CentOS/RHEL: Pour CentOS/RHEL : RDBI RDBI Standard virtual host directives, to serve portal pages: Directives standard d'hôte virtuel pour servir les pages du portail : <s4>Allow</s4> from <s5>all</s5> <s4>Allow</s4> from <s5>all</s5> <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> Password -> ... Password -> ... documentation:1.4:rbac documentation:1.4:rbac rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html The chosen logo file must be in portal applications logos directory (<c0>portal/skins/common/apps/</c0>). Le logo choisi doit se trouver dans le répertoire des logos des applications (<c0>portal/skins/common/apps/</c0>). documentation:1.4:managerprotection documentation:1.4:managerprotection You need <a0>Web::ID</a0> package. Le paquet <a0>Web::ID</a0> est nécessaire. yum install lemonldap-ng yum install lemonldap-ng http://www.youtube.com/watch?v=OJGB6jdN34Q http://www.youtube.com/watch?v=OJGB6jdN34Q Apache is not configured to authenticate users ! Apache is not configured to authenticate users ! Order of categories in the menu Ordre des catégories dans le menu You can allow these users instead of reject them: On peut autoriser ces utilisateurs au lieu de les rejeter : http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ <a10>formreplay</a10><br11/> <a10>formreplay</a10><br11/> clean Handler cache nettoyer le cache des agents <s1>ServerName</s1> zimbra.example.com   <s1>ServerName</s1> zimbra.example.com   user login nom de connexion <s0>notice</s0> for good authentications or external exchange (<a1>SAML</a1>, OpenID,…) <s0>notice</s0> pour les authentifications réussies et les échanges externes (<a1>SAML</a1>, OpenID,…) <s0>Mail headers</s0>: <s0>En-têtes de courriel</s0> : Install it to trust packages: L'installer pour certifier les paquets : <s0>Application list</s0>: display categories and applications allowed for the user <s0>Liste des applications</s0> : affiche les catégories et applications autorisée pour l'utilisateur portalSkin portalSkin ldapPpolicyControl ldapPpolicyControl <a0>LL::NG</a0> can delegate authentication to Apache, so it is possible to use any <a1>Apache authentication module</a1>, for example: <a0>LL::NG</a0> peut déléguer l'authentification à Apache, ainsi il est possible d'utiliser tous les <a1>modules d'authentification Apache</a1>, par exemple: <s0>Confirmation mail subject</s0>: Subject of mail sent when password change is asked (default: [LemonLDAP::NG] Password reset confirmation) <s0>Sujet du message de confirmation</s0> : sujet du courriel envoyé lorsque le changement de mot-de-passe est demandé (défaut: [LemonLDAP::NG] Password reset confirmation) Build your packages Construire les paquets <a0>SOAP based</a0> for client-server software, specific development, … <a0>Basé sur SOAP</a0> pour les logiciels client-serveur, les développements spécifiques, … Advanced features Fonctionnalités avancées <s0>Application name</s0> (optional): Application name (visible in Twitter) <s0>Nom d'application</s0> (optionel) : nom de l'application (visible dans Twitter) Main internal databases are: Les principales bases de données internes sont : nickname nickname Performances Performances <a0>LL::NG</a0> can use a white list or a black list to filter allowed OpenID domains. <a0>LL::NG</a0> peut utiliser une liste blanche ou noire pour filtrer les domaines OpenID autorisés. /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart Reload virtual host Recharger l'hôte virtuel <s0><a1>URL</a1></s0>: <a2>URL</a2> of your society <s0><a1>URL</a1></s0>: <a2>URL</a2> de votre organisation Informix Informix _whatToTrace ipAddr _whatToTrace ipAddr <s0>Allow login from IDP</s0>: allow a user to connect directly from an IDP link. <s0>Authentification depuis le fournisseur autorisée</s0> : autorise l'utilisateur à se connecter directement depuis un lien de l'IDP. PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> <s0>Path</s0>: keep <c1>^/cas/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/cas/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. <s9>Options</s9> +ExecCGI   <s9>Options</s9> +ExecCGI   Then, go in <c0>WebID parameters</c0>: Ensuite, aller dans les <c0>paramètres WebID</c0>: authChoiceModules authChoiceModules /_detail/icons/wizard.png?id=documentation /_detail/icons/wizard.png?id=documentation translation memory directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ Répertoire des mémoires de traduction = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ Zimbra preauth key Clef de pré-authentification Zimbra applications:bugzilla_logo.png applications:bugzilla_logo.png <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> LemonLDAP::NG allows to store user logins and login attempts in their persistent session. LemonLDAP::NG permet de stocker les connexions et tentatives dans les sessions persistantes. All lemonldap-ng tools are in /usr/share/lemonldap-ng/bin/ Tous les outils lemonldap-ng se trouvent dans /usr/share/lemonldap-ng/bin/ ../../../../media/documentation/liferay_6.png ../../../../media/documentation/liferay_6.png <s0>Store user password in session data</s0>: see <a1>password store documentation</a1>. <s0>Stocker le mot-de-passe de l'utilisateur dans les données de session</s0> : voir la <a1>documentation sur le stockage du mot-de-passe</a1>. If the rule evaluation is true, the corresponding skin is applied. Si la règle correspond, le thème correspondant est appliqué. <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ The configuration is done in Apache, in a virtual host. La configuration est effectuée dans Apache, dans les hôtes virtuels. documentation:1.4:authapache documentation:1.4:authapache ../pages/documentation/1.1/managerprotection.html ../pages/documentation/1.1/managerprotection.html This module is also available on <a0>GitHub</a0>. Ce module est également disponible sur <a0>GitHub</a0>. ../pages/documentation/1.1/fileconfbackend.html ../pages/documentation/1.1/fileconfbackend.html <s0><a1>HTML</a1> templates</s0>: in <lang> tags, add your translation, they will be automaticaly used Les <s0>modèles <a1>HTML</a1></s0>: dans les balises <lang>, ajoutez vos traductions, elles seront automatiquement utilisées <a0>DBI</a0> Pivot from user table Pivot <a0>DBI</a0> pour la table utilisateur Authorization Autorisations This scheme expect a parameter, which is the authentication chain. Ce dispositif nécessite un paramètre : la chaîne d'authentification. <a0>Identity provider</a0>: how forward user identity <a0>Fournisseur d'identité</a0> : comment transférer l'identité Timestamp of session creation Date et heure (timestamp) de la création de la session <s0>Mandatory</s0>: if set to On, then session will not open if this attribute is not given by IDP. <s0>Obligatoire</s0> : si activé, les sessions ne seront ouvertes que si l'attribut est fourni par l'IDP. <s0>Key</s0>: application name <s0>Key</s0> : nom d'application http://static.springsource.org/spring-security/site/ http://static.springsource.org/spring-security/site/ <s0>headers_map</s0>: map OBM internal field to <a1>LL::NG</a1> header <s0>headers_map</s0>: établit la correspondance entre les champs internes d'OBM et les en-têtes <a1>LL::NG</a1> MySQL MySQL 'directory_umask' => '007',? 'directory_umask' => '007',? Notification send function (index.pl/notification): Fonction d'envoi de notifications (index.pl/notification): A computer with a GNU/Linux or recent UNIX system Un serveur équipé d'un GNU/Linux ou d'un système UNIX récent <a0>LL::NG</a0> is designed using <a1>Model–View–Controller software architecture</a1>, so you just have to <a2>change HTML/CSS files</a2> to custom portal. <a0>LL::NG</a0> a été conçu en utilisant <a1>l'architecture logicielle Modèle–Vue–Controlleur</a1>, ainsi vous avez juste à <a2>modifier les fichiers HTML/CSS</a2> pour personnaliser son portail. To learn more about using Apache as reverse-proxy, see <a2>Apache documentation</a2>. Pour en savoir plus sur l'utilisation d' Apache en reverse-proxy, consultez la <a2>documentation d'Apache</a2>. This needs some hacking because the Apache Kerberos authentication module do not work if <c0>require valid-user</c0> is not set. Ceci requiert quelques astuces car le module d'authentification Kerberos d'Apache ne fonctionne pas si <c0>require valid-user</c0> n'est pas indiqué. See the README to know how install and configure it. Voir le README pour l'installer et le configurer. firstname firstname Bibliothèque Publique d'Information Bibliothèque Publique d'Information Known problems Problèmes connus secureTokenExpiration secureTokenExpiration The configuration is the same as the <a0>LDAP module</a0>. La configuration est la même que mour le <a0>module LDAP</a0>. documentation:1.4:fastcgi documentation:1.4:fastcgi ../pages/playground/playground.html ../pages/playground/playground.html <a0>DBI</a0> Password column Colonne du mot-de-passe <a0>DBI</a0> }?); }?); You have to change it to match your admin user (or use other conditions like group membership, or any other rule based on a session variable). Il faut la changer pour correspondre au nouvel administrateur (ou utiliser une autre conditions telle l'appartenance aux groupes ou tout autre règle basée sur des variables de session). This protocol does not define any attributes exchange mechanism, so only authentication is managed. Ce protocole ne définit aucun mécanisme d'échange d'attribut, donc seule l'authentification est gérée. LemonLDAP::NG is also able to <a0>catch logout request</a0> on protected applications, with different behavior: LemonLDAP::NG peut également <a0>intercepter les requêtes de déconnexion</a0> des applications protégées, avec différent comportements : dbiAuthChain dbiAuthChain The menu is displayed if authentication is successful. Le menu est affiché si l'authentification est réussie. Certificate authorities file Fichiers des autorités de certification Handler status page Page de statut de l'agent <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> dwho dwho ../../../../media/documentation/googleapps-menu.png ../../../../media/documentation/googleapps-menu.png Local cache Cache local vi LocalSettings.php vi LocalSettings.php You can add this repository to have recent packages: Ajouter ce dépôt pour avoir les paquets les plus récents : Each module can be activated trough a rule, using user session information. Chaque module peut être activé via une règle en utilisant les informations de session de l'utilisateur. You have to create the branch by yourself Il faut toutefois créer manuellement la branche documentation:1.4:logoutforward documentation:1.4:logoutforward <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> Configure MediaWiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Mediawiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. ../pages/contact.html ../pages/contact.html Use <a0>our own YUM repository</a0>. Utiliser <a0>votre propre dépôt YUM</a0>. ../../../css/print.css ../../../css/print.css managerTreeAutoClose managerTreeAutoClose appsListOrder appsListOrder Secondary LL::NG structure Systèe LL::NG secondaire Configuration text editor Éditeur de configuration en mode text Stack multiple backends (AuthMulti) Empiler de multiples backends (AuthMulti) <a0>Django</a0> is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. <a0>Django</a0> est un framework web de haut niveau écrit en Python qui favorise le développement rapide et propre et un design pragmatique. Home Accueil When you use the multiple sessions restriction parameters, sessions are parsed for each authentication unless you use an <a0>Apache::Session::Browseable</a0> module. Lorsque sont activées les paramètres de restriction d'ouverture de session, celles-ci sont toutes examinées à chaque nouvelle authentification sauf lorsqu'un module de la famille <a0>Apache::Session::Browseable</a0> est utilisé. Then the second rule will be applied first, so every authenticated user will access to <c0>/pub/admin</c0> directory. Alors la seconde règle est appliquée en premier, donc tous les utilisateurs authentifiés pourront accéder au répertoire <c0>/pub/admin</c0>. "\@example.com" "\@example.com" protect the manager by Apache configuration protéger le manager par configuration d'Apache documentation:1.0:applications documentation:1.0:applications A day has 24 hours, and a week 7 days, so the value contains 168 bits, converted into 42 hexadecimal characters. Un jour a 24 heures et une semaine 7 jours, donc la valeur contient 168 bits, convertie en 42 caractères hexadécimaux. ../documentation/current/installrpm.html ../documentation/current/installrpm.html Such configuration can have some security problems: Une telle configuration peut engendrer des problèmes de sécurité : ../../documentation/1.4/portalcustom.html ../../documentation/1.4/portalcustom.html It is recommended to use optional_no_ca since WebID doesn't use certificate authorities : Il est recommandé d'utiliser « optional_no_ca » car WebID n'utilise pas d'autorité de certification : <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Example<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Exemple<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> documentation:remote-principle.png documentation:remote-principle.png The configuration name is the same that files, so lmConf-1, lmConf-2, etc. Le nom de la configuration est le même que pour File : lmConf-1, lmConf-2, etc... Install the module: Installer le module : An <a0>OpenID server</a0> with <a1>CAS authentication</a1> Un <a0>serveur OpenID</a0> avec une <a1>authentification CAS</a1> pages/contact.html pages/contact.html <s0>Want Assertions Signed</s0>: set to On to require that received assertions are signed. <s0>Exiger des assertions signées</s0> : mettre à « activé » pour exiger de recevoir des assertions signées. ../pages/documentation/1.1/safejail.html ../pages/documentation/1.1/safejail.html /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/icons/access.png?id=documentation%3A1.4%3Astart /_detail/icons/access.png?id=documentation%3A1.4%3Astart You can add, delete or modify a virtual host here. Il est possible d'ajouter, effacer ou modifier un hôte virtuel ici. <a0>Google Apps</a0> can use <a1>SAML</a1> to authenticate users, behaving as an <a2>SAML</a2> service provider, as explained <a3>here</a3>. <a0>Les applications Google</a0> peuvent utiliser <a1>SAML</a1> pour authentifier les utilisateurs, en se comportant comme des fournisseurs de service <a2>SAML</a2>, tel qu'expliqué <a3>ici</a3>. Yubikey secret key Clef secrète Yubikey Configure LemonLDAP::NG to use MySQL as main database Configurer LemonLDAP::NG pour utiliser MySQL comme base de données principale name nom They will be tested in the specified order. Ils seront testés dans l'ordre indiqué. HTTPS HTTPS documentation:1.4:applications:googleapps ↵ documentation:1.4:applications:googleapps ↵ /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice Gendarmerie Nationale Gendarmerie Nationale <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s0>Use Safe jail</s0>: set to 'Off' to disable Safe jail. <s0>Utiliser la cage sécurisée</s0> : mettre à 'Désctivé' pour désactiver la cage sécurisée (Safe). ../../documentation/quickstart.html#apache ../../documentation/quickstart.html#apache <a0>Facebook</a0> is a famous social network service. <a0>Facebook</a0> est un célèbre réseau social. ref: a reference that can be used later to know what has been notified and when ref : une référence qui peut être utilisée plus tard pour connaître ce qui a été notifié et quand Template parameters are defined in source code. Des paramètres modèles sont définis dans le code source. <s0>Current</s0>: to extract all configuration history <s0>Current</s0> : pour extraire tout l'historique de la configuration A name Un nom managerCss managerCss <a2>Lanyrd</a2> <br3/> <a2>Lanyrd</a2> <br3/> Apache authentication module will set the <c0>REMOTE_USER</c0> environment variable, which will be used by <a1>LL::NG</a1> to get authenticated user. Les modules d'authentification Apache renseignent la variable d'environnement <c0>REMOTE_USER</c0>, qui sera utilisée par <a1>LL::NG</a1> pour obtenir le nom d'utilisateur authentifié. domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> Users Utilisateurs <s156>// ---- Unused values ? <s156>// ---- Unused values ? ../media/icons/xfmail.png ../media/icons/xfmail.png screenshots:1.1:mailreset:mailreset_step3.png screenshots:1.1:mailreset:mailreset_step3.png https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s13>Deny</s13> from <s14>all</s14> <s13>Deny</s13> from <s14>all</s14> <a16>prereq</a16><br17/> <a16>prereq</a16><br17/> Configure local cache first. Configurer d'abord le cache local. <a2>Dailymotion</a2> <a2>Dailymotion</a2> lemonldap-ng-users@ow2.org lemonldap-ng-users@ow2.org You need to use Apache 2 with mod_perl 2, even if some simple configuration can run under Apache 1.3 Il est nécessaire d'utiliser Apache 2 avec mod_perl 2, même si une configuration simple peut fonctionner avec Apache 1.3 documentation:1.4:sqlconfbackend documentation:1.4:sqlconfbackend It can be used just to share authentication or to share user's attributes following the <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3> specification. Ce peut être utilisé pour partager l'authentification et pour partager les attributs utilisateurs en suivant les spécifications <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3>. Security recommendation Recommendation de sécurité Writing rules and headers Écrire les règles et en-têtes To allow the Login History tab in Menu, configure it in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules</c3> (see <a4>portal menu configuration</a4>). Pour activer l'onglet de l'historique de connexion dans le menu, le configurer dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Modules</c3> (voir la <a4>configuration du menu du portail</a4>). /_detail/icons/bug.png?id=contact /_detail/icons/bug.png?id=contact ../pages/documentation/1.4/jsonfileconfbackend.html ../pages/documentation/1.4/jsonfileconfbackend.html Liferay virtual host in Apache Hôte virtuel Liferay dans le manager Configuration and sessions in MySQL Configuration et sessions dans MySQL BrowserID (Mozilla Persona) BrowserID (Mozilla Persona) http://search.cpan.org/perldoc?Apache::Session::MySQL http://search.cpan.org/perldoc?Apache::Session::MySQL ../../documentation/1.4/prereq.html ../../documentation/1.4/prereq.html Note that variables designed by $xx correspond to the name of the <a0>exported variables</a0> or <a1>macro names</a1>. Noter que les variables designées par $xx correspondent au nom de <a0>variables exportées</a0> ou de <a1>noms de macro</a1>. exportedHeaders exportedHeaders documentation:1.4:browseablesessionbackend documentation:1.4:browseablesessionbackend Please see the next chapter to learn how build an official tarball from SVN files. Voir le chapître suivant pour savoir comment construire une archive officielle depuis les fichiers SVN. make dist make dist my-profile.eu my-profile.eu Deletion example in Perl Exemple d'effacement en Perl Entry Identifier Identifiant d'entrée <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> http://mail.ow2.org/wws/arc/lemonldap-ng-changes http://mail.ow2.org/wws/arc/lemonldap-ng-changes <s0><s1><Organization<s2>></s2></s1></s0> <s0><s1><Organization<s2>></s2></s1></s0> ../../documentation/1.4/authgoogle.html ../../documentation/1.4/authgoogle.html https://metacpan.org/module/Apache::Session::Browseable::Redis https://metacpan.org/module/Apache::Session::Browseable::Redis Handler does not see <a0>SSO cookies</a0> (because it is not in main domain) and redirects user on Portal L'agent n'intercepte pas de <a0>cookie SSO</a0> (car il n'est pas dans le même domaine) et redirige l'utilisateur vers le portail http://www.php.net/session_start http://www.php.net/session_start dbiUserPassword dbiUserPassword ../../../download.html#contributions ../../../download.html#contributions For the certificate, you can build it from the signing private key registered in Manager. Pour le certificate, vous pouvez le construire en signant la clef privée enregistrée dans le Manager. Kerberos client for Linux Client Kerberos pour Linux ldapGroupBase ldapGroupBase Choose “Apache” as authentication module <e0>(“General Parameters » Authentication modules » Authentication module”)</e0> Choisir “Apache” comme module d'authentification <e0>(“Paramètres généraux » Modules d'authentification » Module d'authentification”)</e0> managerPassword managerPassword applications:drupal_logo.png applications:drupal_logo.png get user attributes obtenir les attributs utilisateurs An apache virtual host protected by LemonLDAP::NG Handler must be registered in LemonLDAP::NG configuration. Un hôte virtuel apache protégé par un agent LemonLDAP::NG doit être enregistré dans la configuration LemonLDAP::NG. documentation:liferay_6.png documentation:liferay_6.png <s0>Set macros</s0>: compute configured macros <s0>Installe les macros</s0> : calcule les macros demandées Access rule Règle d'accès <s79>//"userobm_delegation" => ,</s79> <s79>//"userobm_delegation" => ,</s79> dbiPasswordMailCol dbiPasswordMailCol <s17>RewriteRule</s17> ^/openidserver/.* /index.pl <s17>RewriteRule</s17> ^/openidserver/.* /index.pl Grant LemonLDAP::NG access Autoriser l'accès pour LemonLDAP::NG http://www.lambdaprobe.org http://www.lambdaprobe.org The prefix 1.3.6.1.4.1.10943 is owned by <a0>LINAGORA</a0> (See <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). Le préfixe 1.3.6.1.4.1.10943 est propriété de <a0>LINAGORA</a0> (Voir <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). http://www.wikipedia.org http://www.wikipedia.org apt-get update apt-get update ldapBindDN ldapBindDN The log level can be set with Apache <c0>LogLevel</c0> parameter. Le niveau de journalisation peut être configuré via le paramètre <c0>LogLevel</c0> d'Apache. /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote ../pages/documentation/1.1/exportedvars.html ../pages/documentation/1.1/exportedvars.html openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem For security reason, a cookie provided for a domain cannot be sent to another domain. Pour des raisons de sécurité, un cookie fournit par un domaine ne peut être transmit à un autre. Cache::Cache Cache::Cache <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> You can also use Facebook as user database. On peut également utiliser Facebook comme base de données utilisateurs. <s0>Activation</s0>: Set to On to enable Common Domain Cookie support. <s0>Activation</s0> : mettre à « activé » pour activer le support du domaine commun de cookie. http://modauthkerb.sourceforge.net/ http://modauthkerb.sourceforge.net/ Logout user from current application and from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ → User session has expired or handler does not have access to the same Apache::Session database than the portal → La session de l'utilisateur a expiré ou l'agent n'a pas accès à la même base de données Apache::Session que le portail ../pages/documentation/1.4/internalproxy.html ../pages/documentation/1.4/internalproxy.html For example, to forward login (<c0>$uid</c0>) and password (<c1>$_password</c1> if <a2>password is stored in session</a2>): Par exemple, pour exporter l'identifiant (<c0>$uid</c0>) et le mot-de-passe (<c1>$_password</c1> si <a2>le mot-de-passe est stocké dans la session</a2>): /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice Authentication contexts Contextes d'authentification By default, anonymous bind is used. Par défaut, une connexion anonyme est utilisée. ../../documentation/1.4/applications/googleapps.html ../../documentation/1.4/applications/googleapps.html phpLDAPadmin will connect to the directory with a static <a0>DN</a0> and password, and so will not request authentication anymore. phpLDAPadmin se connecte au serveur avec un <a0>DN</a0> et un mot-de-passe statique et ne requiert ainsi aucune authentification. Use MySQL for Lemonldap::NG configuration Utiliser MySQL pour la configuration de Lemonldap::NG Session lifetime for cronjob Durée de vie des sessions pour la tâche planifiée Include LemonLDAP::NG configuration in your main Apache configuration: Incluez la configuration LemonLDAP::NG dans celle d'Apache : Choice of any certificate attribute as user main login Choix de n'importe quel attribut du certificat comme nom d'utilisateur principal rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz Apache based protection allow to be independent from WebSSO, so Manager will always be reachable even if WebSSO configuration is corrupted. Une protection basée sur Apache permet d'être indépendant du WebSSO, ainsi le manager est toujours accessible même si la configuration du WebSSO est corrompue. Access to configuration Accès à la configuration http://mb-c.pro/en/archives/7657 http://mb-c.pro/en/archives/7657 You can create a special virtual host and use <a0>Apache rewrite module</a0> to switch between open and protected hosts: Vous pouvez créer un hôte virtuel particulier et utiliser <a0>le module rewrite d'Apache</a0> pour choisir entre le site ouvert et le protégé : Fail2ban Fail2ban Select <c0>Metadata</c0>, and unprotect the field to paste the following value: Selectionner <c0>Metadata</c0>, et déprotéger le champ pour y mettre : Regular expression Expression régulière <s0>Authenticate</s0>: contact authentication database to check credentials <s0>Authentifie</s0> : contacte le dispositif d'authentication pour vérification Stack multiple backends Empiler de multiples backends css/screen.css css/screen.css cp ValveLemonLDAPNG.jar server/lib/ cp ValveLemonLDAPNG.jar server/lib/ Install cron jobs Installer les tâches planifiées (cron) <s0>Allowed modules</s0>: click on <c1>New choice</c1> to add a choice. <s0>Modules autorisés</s0> : cliquer sur <c1>Nouveau choix</c1> pour ajouter un choix. Virtual host Hôte virtuel ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> translations traductions <a2>header_remote_user_conversion</a2><br3/> <a2>header_remote_user_conversion</a2><br3/> portalDisplayAppslist portalDisplayAppslist <s0>ldapConfBase</s0>: Notifications branch <a1>DN</a1>. <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des notifications. icons:flags:fr.png icons:flags:fr.png checkLogonHours($ssoLogonHours, '', '', '1') checkLogonHours($ssoLogonHours, '', '', '1') 1_admin 1_admin User choice done if <a0>authentication choice</a0> was used Choix de l'utilisateur si le <a0>backend d'authentification Choice</a0> a été utilisé A virtual host contains: Un hôte vituel contient : Role Based Access Control (RBAC) Contrôle d'accès basé sur les rôles (RBAC) Manager menu organization Organisation du menu du manager ../pages/documentation/1.1/authnull.html ../pages/documentation/1.1/authnull.html Any <a0>SAML</a0> Service Provider, for example: Tout fournisseur de service <a0>SAML</a0>, par exemple: To achieve this, you can create a rule in the Manager: select <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Skin display rules</c3> on click on “New key”. Pour le réaliser, il faut créer une règle dans le manager : choisir <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Règle d'affichage du thème</c3> et cliquer sur “Nouvelle clef”. Remote LL::NG LL::NG distant <s0>User</s0>: where collect user data <s0>Utilisateurs</s0>: où trouver les données utilisateurs authenticate users authentifier les utilisateurs Handler gets session get from cookie and gets session L'agent récupère la session en utilisant la valeur du cookie ^/obm-sync ^/obm-sync Roles as simple values of a user attribute Rôles comme simple valeur d'attribut utilisateur Here are some advices: Il y a deux avis : So you have just to declare this header for the virtual host in Manager. Il suffit donc de déclarer cet en-tête pour l'hôte virtuel dans le manager. <s16># SOAP functions for configuration access (disabled by default)</s16> <s16># Fonctions SOAP pour accéder à la configuration (désactivées par défaut)</s16> <s0>POST <a1>URL</a1></s0>: /login.php <s0><a1>URL</a1> POST</s0>: /login.php Install dependencies on your system Installer les dépendances sur le système Using Redis, you just have to prepare Redis database. Pour utiliser Redis, il faut preparer la base de données. It simplifies the build of a protected area with a few changes in the application. Il simplifie la construction d'une aire protégée avec peu d'impact sur les applications. notifications_explorer_create.png notifications_explorer_create.png http://test1.example.com http://test1.example.com Twitter application key Clef d'application de Twitter If you define mail contents in Manager, <a0>HTML</a0> templates will not be used. Si les contenus sont définis dans le manager, les modèles <a0>HTML</a0> ne sont pas utilisés. <s0><a1>SAML</a1> service providers</s0>: Registered SP <s0>Fournisseurs de service <a1>SAML</a1></s0> : SP enregistrés portalDisplayChangePassword portalDisplayChangePassword For each IDP, you can configure attributes that are collected. Pour chaque IDP, il faut configurer les attributs à collecter. /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat It should works on every browser: Ça doit marcher avec tous les navigateurs : apt-cache search lemonldap-ng apt-cache search lemonldap-ng By default, the manager is restricted to the user 'dwho' (default backend is Demo). Par défaut, l'accès au manager est restreint à l'utilisateur "dwho" (le backend par défaut est Demo). If no value, disable group searching. La recherche des groupes est désactivé si cette valeur est vide. <s0><a1>Notifications</a1></s0>: messages displayed to connected users <s0><a1>Notifications</a1></s0>: messages à afficher aux utilisateurs connectés ../../../media/screenshots/1.1/mailreset/mailreset_step3.png ../../../media/screenshots/1.1/mailreset/mailreset_step3.png <s0>SSLCertificateFile</s0>: Server certificate <s0>SSLCertificateFile</s0> : certificat serveur ../css/screen.css ../css/screen.css The path to the lock directory Le chemin du répertoire des verrous ../../../media/documentation/ha-apache.png ../../../media/documentation/ha-apache.png It is advised to use separate session backends for standard sessions, <a0>SAML</a0> sessions and <a1>CAS</a1> sessions, in order to manage index separately. Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, <a0>SAML</a0> et <a1>CAS</a1> afin de gérer séparemment les index. http://linuxfr.org/news/sortie-de-lemonldapng-11 http://linuxfr.org/news/sortie-de-lemonldapng-11 /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/share/lemonldap-ng/bin/lemonldap-ng-cli File session backend Backend de sessions File If no value, will use first NameID Format activated in metadata. Si aucune valeur n'est indiquée, le premier format de NameID activé dans les métadatas sera utilisé. documentation:1.4:cda documentation:1.4:cda <s11>AuthType</s11> Kerberos <s11>AuthType</s11> Kerberos <s0>Mail filter</s0>: Filter to find user from its mail (default: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0>Filtre mail</s0> : filtre pour trouver l'utilisateur à partir de son mail (défaut: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0><a1>CAS</a1> login</s0>: the session key used to fill user login (value will be transmitted to <a2>CAS</a2> clients). <s0>Identifiant <a1>CAS</a1></s0> : la clef de session à utiliser pour compléter le login (valeur transmise au clients <a2>CAS</a2>). This includes the application list which is now set in the <c1>applicationList</c1> parameter from <c2>[portal]</c2> section, for example: Ceci inclut la liste des applications qui se trouve désormais dans le paramètre <c1>applicationList</c1> de la section <c2>[portal]</c2>, par exemple: http://search.cpan.org/perldoc?Apache2::URI#unescape_url http://search.cpan.org/perldoc?Apache2::URI#unescape_url authenticate: check if user is authenticated; if not, redirect it to the portal authenticate : vérifie que l'utilisateur est authentifié ; sinon, il est redirigé vers le portail Nov 2011: <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> Nov 2011 : <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> Next, configure SOAP for your remote servers Ensuite, configurer SOAP pour les serveurs distants → The specified virtual host was not configured in Manager. → L'hôte virtuel utilisé n'est pas configuré dans le manager. ../../../media/applications/drupal_logo.png ../../../media/applications/drupal_logo.png 2 kind of files may be translated: 2 types de fichiers peuvent être traduits : By default, mail content are empty in order to use <a0>HTML</a0> templates: Par défaut, les messages sont vides afin d'utiliser les modèles <a0>HTML</a0> : Then, go in <c0>Yubikey parameters</c0>: Ensuite, aller dans les <c0>paramètres Yubikey</c0>: KrbVerifyKDC <s14>Off</s14> KrbVerifyKDC <s14>Off</s14> Restart Apache Redémarrer Apache googleapps googleapps Then click on <c0>New POST data</c0> and add all data with their values, for example: Cliquer ensuite sur <c0>Nouvelle donnée POST</c0> et ajouter chaque donnée avec sa valeur, par exemple : LemonLDAP::NG wiki uses Dokuwiki! Le wiki LemonLDAP::NG est un Dokuwiki ! /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice authenticationLevel authenticationLevel Put LemonLDAP::NG tarball in %_topdir/SOURCES Mettre l'archive LemonLDAP::NG dans %_topdir/SOURCES Berlin Berlin This module is not part of <a0>LL::NG</a0> distibution, and can be found on CPAN: <a1>Apache::Session::LDAP</a1>. Ce module ne fait pas partie de la distribution <a0>LL::NG</a0>, et se trouve sur le CPAN : <a1>Apache::Session::LDAP</a1>. dbiUser dbiUser ../pages/screenshots.html ../pages/screenshots.html /_detail/icons/colors.png?id=documentation%3A1.4%3Astart /_detail/icons/colors.png?id=documentation%3A1.4%3Astart The secondary portal is declared in the Manager of the main <a1>LL::NG</a1> structure (else user will be rejected). Le portail secondaire est declaré dans le Manager du système <a1>LL::NG</a1> principal comme une application (sinon les utilisateurs seront rejetés). Distinguished name Nom distinct (distinguished name) <a0>error</a0><br1/> <a0>error</a0><br1/> To protect the manager, you have to choose one or both of : Pour protéger le manager, il faut choisir l'une où les deux solutions : ../../documentation/1.4/customfunctions.html ../../documentation/1.4/customfunctions.html ../../../media/icons/utilities.png ../../../media/icons/utilities.png Certificate Certificat Use <a0>packages provided by Debian</a0>. Utiliser les <a0>paquets fournis par Debian</a0>. screenshots:1.1:mailreset:mailreset_step5.png screenshots:1.1:mailreset:mailreset_step5.png ../pages/documentation/1.1/logoutforward.html ../pages/documentation/1.1/logoutforward.html CMS, Portal CMS, Portail http://en.wikipedia.org/wiki/Central_Authentication_Service http://fr.wikipedia.org/wiki/Central_Authentication_Service You can also add some other parameters On peut également ajouter quelques autres paramètres SMTPServer SMTPServer For example with this rule on the <c0>access</c0> parameter: Par exemple avec cette règle sur le paramètre <c0>access</c0> : a2enmod perl a2enmod perl These parameters are not mandatory to run <a0>SAML</a0> service, but can help to customize it: Ces paramètres ne sont pas obligatoires pour faire fonctionner le service <a0>SAML</a0>, mais peuvent aider à leur personnalisation : <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> User tries to access protected application, his request is catched by Handler Lorsqu'un utilisateur tente d'accéder à une application protégée, il est intercepté par l'agent (handler) Variables that can be used in rules and headers Variables qui peuvent être utilisées dans les règles et en-têtes <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> Catch error pages: Capture des pages d'erreur : This page do not reference all error messages, but only the frequentest Cette page ne référence pas tous les messages d'erreur, mais simplement les plus fréquents http://search.cpan.org/perldoc?Apache::Session::Oracle http://search.cpan.org/perldoc?Apache::Session::Oracle <s0>STORAGECONFFILE</s0>: location of default storage configuration file (default: /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) <s0>STORAGECONFFILE</s0> : emplacement du du fichier de configuration du stockage par défaut (défaut : /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) An example is given under the source tree : lemonldap-ng-portal/example/index.fcgi Un exemple est disponible dans l'arborescence des sources : lemonldap-ng-portal/example/index.fcgi nothing here... rien ici... For example, to allow only users with a strong authentication level: Par exemple, pour n'autoriser que les utilisateurs authentifiés fortement : proxy proxy It can works with external modules to extends its functionalities. Il peut utiliser des modules externes pour étendre ses fonctionnalités. <s0>Authentication level</s0>: authentication level for this module. <s0>Niveau d'authentification</s0> : niveau d'authentification accordé à ce module. Only the condition is not mandatory. Seule la condition n'est pas exigée. Then in exported variables, you can ask only for : Ensuite dans les « variables exportées », on ne peut demander que : <s0>Recursive</s0>: activate recursive group functionality (default: 0). <s0>Récursivité</s0> : active la fonctionnalité récursive (défaut: 0). HyperText Markup Language HyperText Markup Language <s0>Set local groups</s0>: compute configured groups <s0>Installe les groupes locaux</s0> : calcule les groupes demandés par la configuration ../../documentation/1.4/managerprotection.html ../../documentation/1.4/managerprotection.html admin_server = ad.example.com admin_server = ad.example.com Sympa configuration Configuration Sympa Connection settings can be configured differently for authentication process and user process. Les paramètres de connexion peuvent être configurés différemment pour les processus d'authentification et de recherche d'utilisateur. /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay By default, login time and <a0>IP</a0> address are stored in history, and the error message prompted to the user for failed logins. Par défaut, le tampon de date et l'adresse <a0>IP</a0> sont stockés dans l'historique et le message d'erreur affiché à l'utilisateur en cas d'échec. <s0>+1h</s0>: one hour from session creation <s0>+1h</s0> : une heure après la création de la session overload any <a0>LL::NG</a0> <a1>parameter</a1> when a specific backend is used surcharger n'importe quel <a1>paramètre</a1> <a0>LL::NG</a0> en fonction du backend utilisé <s0>Extract form info</s0>: get login/password, certificate, environment variable (depending on authentication module) <s0>Extrait les informations du formulaire</s0>: récupère le couple compte/mot-de-passe, le certificat, une variable d'environnement (suivant le module d'authentification) This configuration is usable if you want to expose your internal <a2>SSO</a2> portal to another network (DMZ). Cette configuration est utilisable l'on soujaite exposer un portail <a2>SSO</a2> interne à une autre réseau (DMZ). <s0>Default rule</s0>: who can access to the application <s0>Règle default</s0> : qui peut accéder à l'application http://auth.example.com/saml/metadata http://auth.example.com/saml/metadata </<s12>IfModule</s12>>   </<s12>IfModule</s12>>   /_detail/icons/flags/ua.png?id=press /_detail/icons/flags/ua.png?id=press ../documentation/current/notifications.html ../documentation/current/notifications.html TLS client Client TLS Change password: update password column in authentication table matching user Changement de mot-de-passe : met à jour le champ mot-de-passe de la table d'authentification correspondant à l'utilisateur <s11># Perl script</s11> <s11># Perl script</s11> DokuWiki offline version DokuWiki version hors-ligne Full access control Contrôle d'accès complet Demonstration backend has hard coded user accounts: Le backend de démonstration dispose de compte codés en dur : Generic articles Articles génériques Allow only users with a LimeSurvey role Autorise seulement les utilisateurs avec un rôle LimeSurvey /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart http://linuxfr.org/news/sortie-de-lemonldapng-version-10 http://linuxfr.org/news/sortie-de-lemonldapng-version-10 <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> Inside this jail, you can access to: Dans cette cage, on peut accéder aux éléments suivants : By default, default values are used. Sauf modification, les valeurs par défaut sont utilisées. Log with the dwho account and go on <a0>http://manager.example.com</a0> Connectez-vous avec le compte dwho sur <a0>http://manager.example.com</a0> ../media/icons/personal.png ../media/icons/personal.png <s0>Display Name</s0>: should be displayed on IDP, this is often your society name <s0>Nom affiché (display name)</s0> : peut être affiché par le fournisseur d'identité (IDP), this is often your society name Create a redirection script, called login.pl: Créer un script de redirection, appelé login.pl: ../../documentation/1.4/authwebid.html ../../documentation/1.4/authwebid.html <<s0>VirtualHost</s0>> <<s0>VirtualHost</s0>> <s0>none</s0>: no access control, the server will answer without checking if the user is authorized for the service (this is the default) <s0>none</s0> : pas de contrôle d'accès, le serveur répond sans contrôler si l'utilisateur est autorisé à accéder au service (c'est la valeur par défaut) To avoid having group dn stored in sessions datas, you can use a macro to rewrite memberOf: Pour éviter de stocker les dn dans votre base de sessions, vous pouvez utiliser une macro pour réécrire memberOf : <a0>Outlook Web App</a0> <br1/> <a0>Outlook Web App</a0> <br1/> http://search.cpan.org/dist/Apache-Session-LDAP/ http://search.cpan.org/dist/Apache-Session-LDAP/ PerlResponseHandler ModPerl::Registry PerlResponseHandler ModPerl::Registry valeur valeur ^/logout ^/logout The GPG key can be downloaded here: <a0>rpm-gpg-key-ow2</a0> La clef GPG peut être téléchargée ici : <a0>rpm-gpg-key-ow2</a0> <s0>Change as user</s0>: enable to perform password modification with credentials of connected user. <s0>Change comme utilisateur</s0> : active la modification du mot-de-passe avec les éléments d'authentification de l'utilisateur connecté. → You tried to activate Status module without localStorage. → Le module Status est activé sans localStorage. SOAP SOAP <a0>Authentication</a0>: how check user credentials <a0>Authentification</a0> : comment examiner les données utilisateur d'authentification ldapBase ldapBase Radius authentication level Niveau d'authentification de Radius <a0>LL::NG</a0> can delegate authentication to an OpenID server. <a0>LL::NG</a0> peut deleguer l'authentification à un serveur OpenID. <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> LDAP session backend Backend de sessions LDAP icons:chat.png icons:chat.png <s11>}</s11><s12>,</s12> <s11>}</s11><s12>,</s12> For example, macro “macro1” will be computed before macro “macro2”: so, expression of macro2 may involve value of macro1. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. <s0>Signed Authentication Request</s0>: set to On to always sign authentication request. <s0>Requête d'authentification signée</s0> : mettre à « activé » pour toujours signer les requêtes d'authentifications. If the message contains check boxes, the user has to check all of them else he can not access to the portal and get his session cookie. Si le message contient des cases à cocher, l'utilisateur doit toutes les cocher, sinon il ne peut obtenir de cookie de session. Test::POD Test::POD Attributes and macros Attributs et macros documentation:1.4:installtarball documentation:1.4:installtarball Manager translation Traduction du manager You should grab some informations: Il faut récolter quelques informations: Default use case: Cas général: Before, you have to create the virtual host <c0>manager.your.domain</c0> in the manager and set a <a1>rules</a1>, else access to the manager will be denied. Avant, il faut créer l'hôte virtuel <c0>manager.your.domain</c0> dans le manager et mettre une <a1>règle</a1>, sinon l'accès au manager sera interdit. PerlOutputFilterHandler Lemonldap::NG::Handler::Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu A little floating menu can be added to application with this simple Apache configuration: Un petit menu flottant peut être ajouté aux applications par une seimple configuration Apache : Then each parameter is one value of the attribute <c0>description</c0>, prefixed by its key. Ensuite, chaque paramètre est une valeur de l'attribut <c0>description</c0>, prefixé par sa clef. Apache virtual host Hôte virtuel Apache : Multi modules display Affichage des modules de Multi ../../documentation/1.4/loginhistory.html ../../documentation/1.4/loginhistory.html icons:utilities.png icons:utilities.png <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> → The cache has been created by another user than Apache's user. → Le cache a été créé par un autre utilisateur que celui d'Apache. <s0>Writer <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> IDP to write the cookie. <s0><a1>URL</a1> d'écriture</s0> : <a2>URL</a2> utilisée par l'IdP <a3>SAML</a3> pour écrire le cookie. ../media/icons/wizard.png ../media/icons/wizard.png <s0>Javascript protection</s0>: set httpOnly flag, to avoid cookie been caught by javascript code <s0>Protection Javascript</s0> : active le drapeau httpOnly pour éviter que le cookie ne soit accessible par code javascript To allow the manager to reload the configuration, register the reload virtual host name in the hosts of the server: Pour autoriser le manager à recharger la configuration, enregistrer le nom d'hôte virtuel de rechargement dans le fichier hosts du serveur : ../media/screenshots/1.1/mailreset/mailreset_step3.png ../media/screenshots/1.1/mailreset/mailreset_step3.png This page can be browsed for example by <a0>MRTG</a0> using the <a1>MRTG monitoring script</a1>. Cette page peut être parcourue par exemple par <a0>MRTG</a0> en utilisant le <a1>script de surveillance MRTG</a1>. Display-Name Display-Name Time to test L'heure est aux tests <notification> element(s) : élément(s) <notification> : Attribute Authority Autorité d'attributs Changelog Journal des changements sudo apachectl configtest sudo apachectl restart sudo apachectl configtest sudo apachectl restart sudo make install sudo make install You can customize logs by redefining userNotice() and userError() methods, directly in <c0>lemonldap-ng.ini</c0> On peut personnaliser les fonctions de journalisation en redéfinissant les méthodes userNotice() et userError(), directement dans <c0>lemonldap-ng.ini</c0> User ID User ID Send login in Auth-User: Envoi de l'identifiant dans Auth-User: Redirection to the remote type portal Redirection vers le portail de type remote Montreal Montréal screenshots:1.1:notifications:sample_notification.png screenshots:1.1:notifications:sample_notification.png install_portal_libs install_portal_libs documentation:1.4:authldap documentation:1.4:authldap OW2 Con OW2 Con The faster. Le plus rapide. In this case, see <a1>how convert header into environment variable</a1>. Dans ce cas, voir <a1>comment convertir les en-têtes en variable d'environnement</a1>. Users module: <a0>SAML</a0> Module utilisateurs : <a0>SAML</a0> http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 Zimbra Handler parameters Paramètres du handler Zimbra Note that groups are computed after macros, so a group rule may involve a macro value. Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro. http://zimbra.lan/service/preauth http://zimbra.lan/service/preauth After configuring <a0>SAML</a0> Service, you can export metadata to your partner Service Provider. Après avoir configuré le service <a0>SAML</a0>, exporter les métadonnéesvers le fournisseur de service partenaire. ../media/logos/logo_ucanss.png ../media/logos/logo_ucanss.png Your EntityID, often use as metadata <a0>URL</a0>, by default #PORTAL#/saml/metadata. Votre EntityID, souvent utilisé comme <a0>URL</a0> des métadatas, par défaut #PORTAL#/saml/metadata. <s166>)</s166><s167>,</s167> <s166>)</s166><s167>,</s167> <a22>authgoogle</a22><br23/> <a22>authgoogle</a22><br23/> <a0>LL::NG</a0> is compatible with the <a1>CAS</a1> protocol <a2>versions 1.0 and 2.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole <a1>CAS</a1> <a2>versions 1.0 et 2.0</a2>. <s0>Multiple domains</s0>: enable <a1>cross domain mechanism</a1> (without this, you cannot extend <a2>SSO</a2> to other domains) <s0>Domaines multiples</s0> : active le <a1>mécanisme inter-domaines</a1> (sans ceci, on ne peut pas étendre le <a2>SSO</a2> aux autres domaines) Put your own files instead of <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: Placer vos propres fichiers au lieu de <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: ../pages/references.html ../pages/references.html Kerberos Kerberos You can also find on this page the SVN tarball if you want to test latest features. On peut aussi trouver sur cette page l'archive SVN pour tester les dernières évolutions. Change the base <a0>URL</a0> for EL6 packages: Changer l'<a0>URL</a0> de base pour les paquets EL6 : documentation:1.0:portal documentation:1.0:portal ldapPwdEnc ldapPwdEnc documentation:1.4:error documentation:1.4:error ../pages/default_sidebar.html ../pages/default_sidebar.html Logging application access Trace des accès aux applications Freshmeat Freshmeat Starting performances Performances au démarrage ldapBindPassword ldapBindPassword <s0><a1>API</a1> key</s0>: <a2>API</a2> key from Twitter <s0>Clef d'<a1>API</a1></s0>: clef d'<a2>API</a2> donnée par Twitter documentation:1.4:configvhost documentation:1.4:configvhost To edit <a0>SSO</a0> cookie parameters, go in Manager, <c1>General Parameters</c1> > <c2>Cookies</c2>: Pour modifier les paramètres du cookie <a0>SSO</a0>, aller dans le manager, <c1>Paramètres généraux</c1> > <c2>Cookies</c2> : <a0>tomcat</a0><br1/> <a0>tomcat</a0><br1/> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> ^/(?i)index.php\?.*access.*access ^/(?i)index.php\?.*access.*access Header name Nom d'en-tête Restrict /admin to administrators group Restreint /admin au groupe des administrateurs You must allow access to Manager <a0>IP</a0>. Il faut autoriser l'accès à l'adresse <a0>IP</a0> du manager. documentation:conferences documentation:conferences For example, to configure the <c0>File</c0> configuration backend: Par exemple, pour configurer le backend de configuration <c0>File</c0> : lemonldap-ng-dev@ow2.org lemonldap-ng-dev@ow2.org Configure your <a0>DNS</a0> server to resolve names with your server <a1>IP</a1>. Configurer le serveur <a0>DNS</a0> pour résoudre les noms avec l'adresse <a1>IP</a1> de votre serveur. Browseable session backend Backend de session explorable Configure the <c0>Auth-User</c0> <a1>header</a1>. Configurer l'<a1>en-tête</a1> <c0>Auth-User</c0>. Heidelberg Heidelberg <s0>Anti iframe protection</s0>: will kill parent frames to avoid some well known attacks <s0>Protection anti-iframe</s0> : ferme la frame parente pour éviter des attaques bien connues Mpm-worker works faster and LemonLDAP::NG use the thread system for best performance. Mpm-worker est plus rapide et LemonLDAP::NG utilise le système de threads pour de meilleures performances. Timezone of the user, set with javascript from standard login form (will be empty if other authentication methods are used) Timezone de l'utilisateur, renseignée par javascript dans le formulaire d'authentification (vide si une autres méthode d'authentification est utilisée) https://gist.github.com/njh/2432427 https://gist.github.com/njh/2432427 <s0>Authentication</s0>: how authenticate users <s0>Authentification</s0>: comment authentifier les utilisateurs Export sAMAccountName in a variable declared in <a0>exported variables</a0> Exporter sAMAccountName dans la liste des <a0>variables exportées</a0> documentation:latest:notifications documentation:latest:notifications Must be secured by network access control. Doit être securisé par un contrôle d'accès réseau. Apache authentication level Niveau d'authentification d'Apache unprotect unprotect Form replay parameters Paramètres de rejeu de formulaires logout_app_sso http://intranet/ logout_app_sso http://intranet/ Demonstration Démonstration If <c0><a1>CAS</a1> login</c0> is not set, it uses <c2>General Parameters</c2> » <c3>Logs</c3> » <c4>REMOTE_USER</c4> data, which is set to <c5>uid</c5> by default Si le <c0>login <a1>CAS</a1></c0> n'est pas défini, la donnée <c2>Paramètres généraux</c2> » <c3>Journalisation</c3> » <c4>REMOTE_USER</c4> est utilisée, mise à <c5>uid</c5> par défaut <s32>}</s32><s33>;</s33> <s32>}</s32><s33>;</s33> You can change it quick with a sed command. On peut le changer rapidement par une commande sed. ../documentation/current/prereq.html ../documentation/current/prereq.html Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Apache for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Apache pour l'authentification. ../pages/documentation/1.1/error.html ../pages/documentation/1.1/error.html 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 For remote servers, you can use <a0>SOAP session backend</a0> in cunjunction to increase security for remote server that access through an unsecure network Pour les serveurs distants, vous pouvez utiliser le <a0>module SOAP d'accès aux sessions</a0> en complément pour augmenter la sécurité de ces serveurs qui accèdent aux sessions au travers d'un réseau non sûr Parameters: Paramètres: Update your /etc/hosts to map <a0>SSO</a0> URLs to localhost: Mettez à jour votre /etc/hosts pour faire correspondre les URLs du <a0>SSO</a0> à votre machine : LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> checkLogonHours checkLogonHours To see available actions, do: Pour connaître les actions possibles, lancer : This is also true for: C'est disponible pour : <a0>LL::NG</a0> can delegate authentication to a <a1>CAS</a1> server. <a0>LL::NG</a0> peut déléguer l'authentification à un serveur <a1>CAS</a1>. Installation from the tarball Installation depuis l'archive https://metacpan.org/release/Net-Facebook-Oauth2 https://metacpan.org/release/Net-Facebook-Oauth2 <<s12>Files</s12> *.pl> <<s12>Files</s12> *.pl> FastCGI support Support FastCGI "admin0\@global.virt" : $uid "admin0\@global.virt" : $uid https://auth.sso.sbay.org/ https://auth.sso.sbay.org/ User is redirected on protected application, with his new cookie L'utilisateur est redirigé vers l'application demandée avec son nouveau cookie <a0>CAS</a0> authentication will automatically add a <a1>logout forward rule</a1> on <a2>CAS</a2> server logout <a3>URL</a3> in order to close <a4>CAS</a4> session on <a5>LL::NG</a5> logout. L'authentification <a0>CAS</a0> ajoute automatiquement une <a1>règle de renvoi après déconnexion</a1> sur l'<a3>URL</a3> de déconnexion du serveur <a2>CAS</a2> afin de clore la session <a4>CAS</a4> lors de la déconnexion <a5>LL::NG</a5>. By default, Tomcat provides a file called <c0>users.xml</c0> to manage authentication: Par défaut, Tomcat fournit un fichier nommé <c0>users.xml</c0> pour gérer l'authentification : Handler Agent (Handler) Register partner Service Provider on LemonLDAP::NG Enregistrer le fournisseur de service dans LemonLDAP::NG Press Presse customhead.tpl : <a0>HTML</a0> header markups (like <a1>CSS</a1>, js inclusion) customhead.tpl : en-têtes <a0>HTML</a0> (tels les inclusions <a1>CSS</a1>, js) <s0># Uncomment this to activate status module</s0> <s0># Uncomment this to activate status module</s0> ../media/logos/sgs_white_small.jpg ../media/logos/sgs_white_small.jpg /_detail/logos/logo_bpi.png?id=references /_detail/logos/logo_bpi.png?id=references [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 ../../../documentation/1.4/logoutforward.html ../../../documentation/1.4/logoutforward.html <a0>Using Apache::Session::Browseable::MySQL</a0> (recommended for best performances) <a0>Utiliser Apache::Session::Browseable::MySQL</a0> (recommandé pour de meilleures performances) /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots <s0>PREFIX</s0>: installation directory (default: /usr/local) <s0>PREFIX</s0> : répertoire d'installation (défaut : /usr/local) Architecture Architecture Logout Déconnexion Force port in redirection Force le port dans les redirections This mechanism can be used to secure access for remote servers that cross an unsecured network to access to <a0>LL::NG</a0> databases. Ce mécanisme peut être utilisé pour sécuriser l'accès des serveurs distants qui traversent des réseaux non sécurisés pour accéder aux bases de données de <a0>LL::NG</a0>. Protect the Manager Protéger le manager Authentication level Niveau d'authentification documentation:1.1:upgrade documentation:1.1:upgrade These options are only here to override default values. Ces options ne sont à utiliser que pour surcharger les valeurs par défaut. ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/applications/zimbra.html ../pages/documentation/1.1/applications/zimbra.html Configuration can be stored in several formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) but must be shared over the network if you use more than 1 server. La configuration peut être stockée sous plusieurs formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) mais doit être partégée via le réseau si on utilise plus d'un serveur. For example, if you are using <a0>AD as authentication backend</a0>, you can use sAMAccountName for the Windows NameID format. Par exemple, si vous utilisez <a0>Active-Directory comme système d'authentification</a0>, vous pouvez utiliser sAMAccountName come format de NameID Windows. You can choose other Makefile targets: On peut choisir d'autres cibles du Makefile : To do this, use the Manager, and go in <c0>Virtual Hosts</c0> branch. Pour ce faire, utiliser le manager, et aller dans la branche <c0>Virtual Hosts</c0>. <s0>getAttributes(cookieValue)</s0>: get elements stored in session <s0>getAttributes(cookieValue)</s0> : retourne les éléments stockés dans la session passwordDB passwordDB insert a loop around the <a0>HTML</a0> printing, starting with the object creation <e1>(→new)</e1> insérer une boucle autour de l'affichage <a0>HTML</a0>, démarrant avec la création de l'objet <e1>(→new)</e1> To create a variable, you've just to map a user attributes in <a0>LL::NG</a0> using <c1>Variables</c1> » <c2>Exported variables</c2>. Pour créer une variable, il faut simplement associer des attributs utilisateurs dans <a0>LL::NG</a0> en utilisant <c1>Variables</c1> » <c2>Variables exportées</c2>. ../../../media/icons/gpg.png ../../../media/icons/gpg.png Storage Stockage Authorization is controlled only by Handlers. Les autorisations sont vérifiées seulement par les agents (handlers). Apache::Session Apache::Session CDBI / RDBI CDBI / RDBI If you are using packages, they should have done the upgrade process for you, but you can check here that all is in order. Lorsqu'on utilise les paquets, ils doivent faire d'eux-même la mise à jour, mais on peut vérifier ici que tout est en ordre. <s0><a1>Identity provider proxy</a1></s0>: <a2>LL::NG</a2> can be used as proxy translator between systems talking <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … <s0><a1>Proxy de fournisseurs d'identités</a1></s0> : <a2>LL::NG</a2> peut être utilisé comme traducteur mandataire entre systèmes comprenant <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … Error messages are defined in source code. Les messages d'erreur sont définis dans le code source. $mailR $mailR bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] Three options: Trois options : Since MySQL does not have always transaction feature, Apache::Session::MySQL has been designed to use MySQL locks. Comme MySQL ne dispose pas toujours de dispositif de transaction, Apache::Session::MySQL a été conçu en utilisant les verrous MySQL. <<s14>IfModule</s14> auth_kerb_module> <<s14>IfModule</s14> auth_kerb_module> notificationStorage notificationStorage Configure the <a0>access rules</a0>. Configurer les <a0>règles d'accès</a0>. Secure configuration access Securiser l'accès à la configuration Before installing the packages, install all <a0>dependencies</a0>. Avant d'installer les paquets, installer toutes les <a0>dépendances</a0>. <s0>LmCookieDomainToReplace</s0>: string to replace in <c1>Set-Cookie</c1> header <s0>LmCookieDomainToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Set-Cookie</c1> /_detail/icons/xfmail.png?id=contact /_detail/icons/xfmail.png?id=contact ../../../documentation/1.4/configlocation.html#apache ../../../documentation/1.4/configlocation.html#apache <s0>Chain</s0>: <a1>DBI</a1> chain, including database driver name and database name (for example: dbi:mysql:database=lemonldapng;host=localhost). <s0>Chaîne</s0> : chaîne <a1>DBI</a1>, contenant le nom de driver et le nom de la base de données (par exemple : dbi:mysql:database=lemonldapng;host=localhost). See <a0>how configure logging in Tomcat</a0> . Voir <a0>how configure logging in Tomcat</a0> . RPMs are available on the <a0>Download page</a0>. Les paquets RPM sont disponibles sur la <a0>page de téléchargement</a0>. ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> <s84>//"userobm_archive" => ,</s84> <s84>//"userobm_archive" => ,</s84> See <a0>Debian Lenny upgrade</a0>. Voir la <a0>mise à jour de Debian Lenny</a0>. ../../documentation/1.4/browseablesessionbackend.html ../../documentation/1.4/browseablesessionbackend.html Portal checks authentication Le portail examine les données d'authentification PerlHeaderParserHandler My::Package   PerlHeaderParserHandler My::Package   See <a0>https://developers.facebook.com/apps</a0> on how to do that. Voir <a0>https://developers.facebook.com/apps</a0> pour en savoir plus. <s0>Regexp for password generation</s0>: Regular expression used to generate the password (default: [A-Z]{3}[a-z]{5}.\d{2}) <s0>Regexp pour la génération de mot-de-passe</s0> : expression régulière utilisée pour générer le mot-de-passe (défaut : [A-Z]{3}[a-z]{5}.\d{2}) <s0>Redirect on forbidden</s0>: use 302 instead 403 <s0>Redirections pour les accès interdits</s0> : utilise 302 au lieu de 403 Password backend Module de gestion de mots-de-passe Each field can be filled with static values or data from user's session. Chaque champ peut être construit avec des valeurs statiques ou des données issues de la session utilisateur. <s0>Resolution Rule</s0>: rule that will be applied to preselect an IDP for a user. <s0>Règle de résolution</s0> : règle à appliquer pour pré-sélectionner cet IDP. <a24>authldap</a24><br25/> <a24>authldap</a24><br25/> If not set, the secret token is calculated using the general encryption key. S'il n'est pas renseigné, le jeton secret est calculé en utilisant la clef de chiffrement générale. The plugin will check the <c1>REMOTE_USER</c1> environment variable to get the connected user. Ce plugin utilise la variable d'environnement <c1>REMOTE_USER</c1> pour récupérer le nom d'utilisateur connecté. ../../../media/documentation/manager-authchoice.png ../../../media/documentation/manager-authchoice.png Compatible password modification Compatibilité des modifications de mots-de-passe perl-Lemonldap-NG-Manager: CPAN - Manager modules perl-Lemonldap-NG-Manager : CPAN - modules manager This concerns all parameters for the Attribute Authority metadata section Ceci concerne tous les paramètres de la section « autorité d'attributs » des métadatas http://search.cpan.org/perldoc?Apache::Session::Redis http://search.cpan.org/perldoc?Apache::Session::Redis generic_sso generic_sso Common Domain Cookie is also know as <a0>WAYF Service</a0>. Le domaine commun de cookie est également connu comme <a0>service WAYF</a0>. http://vhost.example.com/appli1 http://vhost.example.com/appli1 http://vhost.example.com/appli2 http://vhost.example.com/appli2 Delete other session Efface les autres sessions (session unique par utilisateur) Contrary to <a0>multiple backend stacking</a0>, backend choice will present all available authentication methods to users, who will choose the one they want. Contrairement au <a0>dispositif de multiples backends</a0>, le dispositif de choix de backend présente à l'utilisateur toutes les méthodes d'authentification disponibles pour qu'il puisse choisir. documentation:1.4:safejail documentation:1.4:safejail You can configure here which field of <a2>LL::NG</a2> session will be associated to a NameID format. Vous pouvez indiquer ici l'attribut de session de <a2>LL::NG</a2> qui sera associé au format du NameID. Configuration of LemonLDAP::NG Configuration de LemonLDAP::NG Perl auto-protected CGI CGI aito-protégée Perl Filters Filters Name Nom <s93>//"userobom_phone2" => ,</s93> <s93>//"userobom_phone2" => ,</s93> https://developers.facebook.com/tools/explorer https://developers.facebook.com/tools/explorer ../pages/documentation/1.1/nosqlsessionbackend.html ../pages/documentation/1.1/nosqlsessionbackend.html logos:logo_bpi.png logos:logo_bpi.png user user <c0>ValveLemonLDAPNG.jar</c0> is created under <c1>/dist</c1> directory. <c0>ValveLemonLDAPNG.jar</c0> est créé dans le répertoire <c1>/dist</c1>. 2009 2009 Configuration <s0>is not saved</s0> if errors occur. La configuration <s0>n'est pas sauvée</s0> en cas d'erreur. Use “Active Directory” as authentication, userDB and passwordDBbackends, Utiliser “Active Directory” comme systèmes d'authentification, de gestion des utilisateurs et des mots-de-passe, ../media/logos/logo-ul.png ../media/logos/logo-ul.png stack several times the same module with a different name empiler plusieurs fois le même module avec un nom différent LemonLDAP::NG is used to protect access to intranet. LemonLDAP::NG est utilisé pour protéger l'accès à l'Intranet. LemonLDAP::NG provide a script that allows to edit configuration without graphical interface, this script is called <c0>lmConfigEditor</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme <c0>lmConfigEditor</c0> et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin : Edit /etc/fail2ban/jail.conf Editer /etc/fail2ban/jail.conf <s136>//"userobm_mail_perms" => ,</s136> <s136>//"userobm_mail_perms" => ,</s136> Sources are currently available on OW2. Les sources sont disponibles sur OW2. In Debian/Ubuntu, install the library through apt-get command Pour Debian/Ubuntu, installer la librairie via la commande apt-get You can also get the <a0>LemonLDAP::NG archive</a0> and make the package yourself: On peut également construire les paquets à partir de l'<a0>archive LemonLDAP::NG</a0> : <s0>Handler</s0>: Apache modules used to protect applications <s0>Agent</s0> (Handler): module Apache utilisé pour protéger les applications Easy to customize Facile à personnaliser icons:bug.png icons:bug.png http://search.cpan.org/perldoc?Apache::Session::Sybase http://search.cpan.org/perldoc?Apache::Session::Sybase references Références <s0>Mail content</s0>: <s0>Contenu du courriel</s0> : <s154>//"userobm_samba_home_drive" => ,</s154> <s154>//"userobm_samba_home_drive" => ,</s154> Go to <c0>Configuration</c0> » <c1>Authentication</c1>: Aller dans <c0>Configuration</c0> » <c1>Authentication</c1>: Protected sites: Sites protégés: http://auth.example.com/saml/singleSignOn http://auth.example.com/saml/singleSignOn Change configuration in lemonldap-ng.ini : Changer la configuration dans lemonldap-ng.ini : 2012 2012 2011 2011 Connection login Login de connexion <s0>auth.example.com</s0>: <a1>DNS</a1> of the portal <s0>auth.example.com</s0> : nom <a1>DNS</a1> du portail 2010 2010 uid: coudot uid: coudot <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> Older versions Versions précédentes <s0>Authentication level</s0>: authentication level for this module <s0>Niveau d'authentification</s0> : niveau d'authentification pour ce module Now you have access to the SP parameters list. Il est ensuite possible d'accéder à la liste des paramètre du SP : <e0>Exemple with MySQL</e0>: <e0>Exemple avec MySQL</e0> : <s0>Key</s0>: application identifier <s0>Clef</s0> : identifiant d'application /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu "" : ($mail =~ /^([^@]+)/)[0] . "" : ($mail =~ /^([^@]+)/)[0] . Country Country <s0>Cookie name</s0> (optional): name of the cookie of primary portal, if different from secondary portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail primaire, s'il est différent de celui du portail secondaire xguimard xguimard <s0>Adapt session lifetime</s0>: session lifetime will be adapted from <c1>SessionNotOnOrAfter</c1> value found in authentication response. <s0>Adaptation de la durée de vie de la session</s0> : la durée de vie de la session sera adaptée sur la base de la valeur de <c1>SessionNotOnOrAfter</c1> dans les réponses d'authentification. You may rather use standards protocols like <a1>SAML</a1>, <a2>OpenID</a2> or <a3>CAS</a3>. Il est préférable d'utiliser des protocoles standards tels <a1>SAML</a1>, <a2>OpenID</a2> ou <a3>CAS</a3>. in the value field, set the field name. dans le champ valeur, mettre le nom du champ. Do not forget to add OBM in <a0>applications menu</a0>. Ne pas oblier d'ajouter OBM dans le <a0>menu des applications</a0>. Index Index Just remember its <a0>DN</a0> for LemonLDAP::NG configuration. Il faut juste retenir le <a0>DN</a0> pour la configuration de LemonLDAP::NG. Email Email Packages and archives Paquets et archives checkLogonHours($ssoLogonHours) checkLogonHours($ssoLogonHours) Example of a protected virtual host for a local application: Exemple d'hôte virtuel protégé pour une application locale : ../../documentation/1.4/variables.html ../../documentation/1.4/variables.html Macros Macros ../pages/documentation/1.1/configvhost.html ../pages/documentation/1.1/configvhost.html When <c0>Choice</c0> is selected for authentication, values for Users and Password modules are not used anymore. Lorsque <c0>Choice</c0> est selectionné pour l'authentification, les valeurs pour les modules utilisateur et mots-de-passe ne sont plus utilisées. To get more information on user (name, mail, etc.), you have to read <a0>HTTP headers</a0>. Pour obtenir plus d'information sur l'utilisateur (nom, adresse de courriel, etc...), il faut lire les <a0>en-têtes HTTP</a0>. documentation:1.4:authproxy documentation:1.4:authproxy See <s0><a1>security chapter</a1></s0> to learn more about writing good rules. Voir le <s0><a1>chapître sécurité</a1></s0> pour apprendre comment écrire de bonnes règles. de fr Another <a0>LL::NG</a0> system configured with <a1>SAML authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification SAML</a1> Issuer module (can be multivalued) Module fournisseur (peut-être multivalué) http://jira.ow2.org http://jira.ow2.org When <a0>LL::NG</a0> is configured as OpenID identity provider, users can share their authentication using [PORTAL]/openidserver/[login] where: Lorsque <a0>LL::NG</a0> est configuré en fournisseur d'identité OpenID, les utilisateurs peuvent partager leur authentification en utilisant [PORTAIL]/openidserver/[login] où : domain domain Users can see their own history in menu, if menu module <c0>Login history</c0> is enabled. Les utilisateurs peuvent voir leur historique dans le menu, si le module <c0>historique de connexion</c0> est activé. <s0>+30s</s0>: 30 seconds from session creation <s0>+30s</s0> : 30 secondes après la création de la session NoSQL (Redis) NoSQL (Redis) In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Choice for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Choice pour l'authentification. dn dn Handler performance Performance des agents (handlers) documentation/current/installdeb.html#llng_repository documentation/current/installdeb.html#llng_repository Then it creates the session (with attribute filter) Il crée la sessions (avec le filtre d'attributs) Access Control List Liste de contrôle d'accès Install rpm-build package Install rpm-build package <s0>One user by <a1>IP</a1> address</s0>: 2 users can not open a session with the same <a2>IP</a2>. <s0>Un utilisateur par adresse <a1>IP</a1></s0> : 2 utilisateurs ne peuvent ouvrir de sessions avec la même adresse <a2>IP</a2>. ../../documentation/1.4/configlocation.html#portal ../../documentation/1.4/configlocation.html#portal ldapSetPassword ldapSetPassword <c0>skip</c0>: all is open! <c0>skip</c0> : tout est ouvert ! Easy import/export through LDIF files Import/export facilité via les fichiers LDIF dbi:mysql:dbname=sessions dbi:mysql:dbname=sessions Just run the tar command: Lancer implement la commande tar : name => foaf:name nom => foaf:name Syslog facility Facilité syslog Advanced Avancé You can then set the access rule. Définir ensuite les règles d'accès. Central Authentication Service Central Authentication Service quickstart Démarrage rapide en fr Tomcat Tomcat RPM RPM ldapGroupAttributeNameGroup ldapGroupAttributeNameGroup Liferay can use <a0>LL::NG</a0> as an <a1>SSO</a1> provider but you have to manage how users are created: Liferay peut utiliser <a0>LL::NG</a0> comme fournisseur <a1>SSO</a1> mais il faut gérer la création des comptes utilisateurs : Authentication module: <a0>SAML</a0> Module d'authentification : <a0>SAML</a0> Required : Requis : You can change this behavior and set a cookie duration, for example: On peut changer ce comportement et mettre une durée de vie, par exemple : And fill it: et le remplir : http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 <a8>limesurvey</a8><br9/> <a8>limesurvey</a8><br9/> /_detail/icons/tux.png?id=contact /_detail/icons/tux.png?id=contact <s0>Require old password</s0>: used only in the password changing module of the menu, will check the old password before updating it <s0>Exige l'ancien mot-de-passe</s0> : utilisé seulement dans le module de changement du mot-de-passe du menu, vérifie l'ancien mot-de-passse avant de le changer Dokuwiki local configuration Configuration locale Dokuwiki <s0>.css</s0>: <a1>CSS</a1> (styles) <s0>.css</s0>: <a1>CSS</a1> (styles) to the configuration backend au système de stockage de la configuration Authentication Authentification Date of validation of the notification <e0>id</e0> Date de validation de la notification <e0>id</e0> Fields: Champs : Manager skin Thème du manager <s0>Enable Single Sign-On</s0>: check the box. <s0>Enable Single Sign-On</s0>: sélectionner. Zimbra preauthentication key Clef de pré-authentification Zimbra ../pages/documentation/1.1/applications/mediawiki.html ../pages/documentation/1.1/applications/mediawiki.html Configure Bugzilla virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Bugzilla comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Exported variables Variables exportées ant ant LemonLDAP::NG Common Fichiers communs LemonLDAP::NG Edit the file “auth.conf”, for example: Éditer le fichier “auth.conf” de Sympa, par exemple : Choice modules Modules de "Choice" managerSkin managerSkin Here are some screenshots of 1.2 new features. Ici se trouvent quelques captures d'écran illustrant les nouvelles fonctionnalités de la version 1.2. mailCharset mailCharset It is a Single Sign On protocol similar to OpenID, but based on user email address rather than a <a0>URL</a0>. C'est un protocole d'authentification unique (Single Sign On) similaire à OpenID, mais basé sur l'adresse emailde l'utilisateur au lieu d'une <a0>URL</a0>. Multi CAS;LDAP Multi CAS;LDAP cfgNum int not null primary key, cfgNum int not null primary key, By default, you will have a manager virtual host define in configuration. Par défaut, il existe un hôte virtuel défini dans la configuration. <a0>LL::NG</a0> can use two tables: <a0>LL::NG</a0> peut utiliser deux tables : 0.9.4_application_menu.png 0.9.4_application_menu.png documentation:quickstart documentation:quickstart <s0>manager</s0>: parameters only for Manager <s0>manager</s0> : paramètres réservés au manager If they really do not please you, override them! S'ils ne conviennent pas, il peuvent être surchargés. <s138>//"userobm_mail_server_id" => ,</s138> <s138>//"userobm_mail_server_id" => ,</s138> ldap.auth.enabled=true ldap.auth.enabled=true It provides many features: Il fournit de nombreuses fonctionnalités : You should use an <a0>extended LDAP schema</a0> (or any users database extension), but this can works with standard attributes. Il est préférable d'utiliser un <a0>schéma LDAP étendu</a0> (ou toute extension de base de données utilisateur), mais ça peut fonctionner avec les attributs standard. Apache logging Journaux d'Apache Clément OUDOT's blog Blog de Clément OUDOT ../../css/screen.css ../../css/screen.css <s131>//"userobm_expresspostal" => ,</s131> <s131>//"userobm_expresspostal" => ,</s131> ipAddr ipAddr the manager (for internal use only) le manager (à usage interne seulement) yum install mod_auth_kerb yum install mod_auth_kerb <s3>{</s3> <s3>{</s3> <a0>DBI</a0> connection string Chaîne de connexion <a0>DBI</a0> To post user's password, you must enable <a0>password storing</a0>. Pour envoyer le mot-de-passe utilisateur, il faut activer le <a0>stockage du mot-de-passe</a0>. documentation:1.4:mrtg documentation:1.4:mrtg → You do not use the new configuration syntax for application list. → La nouvelle syntaxe de configuration de la liste des applications n'est pas utilisée. <a0>SREG</a0> permit the share of 8 attributes: <a0>SREG</a0> permet le partage de 8 attributs : <a0>LL::NG</a0> can also act as <a1>CAS server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur CAS</a1>, ce qui peut servir à connecter deux systèmes <a2>LL::NG</a2>. This mechanism allow to do <a0>SSO</a0> on application with an unsafe link between Handler and the application, but with a safe link with the Memcached server. Ce mécanisme permet de faire du <a0>SSO</a0> sur une application sans lien sécurisé entre l'agent et l'application, mais avec un lien sûr avec le serveur Memcached. Example 2: single table Example 2: single table http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous As this may be a security hole, password store in session is not activated by default Comme ce peut être un trou de sécurité, ce stockage en session n'est pas activé par défaut Liferay Liferay <a0>LL::NG</a0> can act as an OpenID 2.0 Server, that can allow to federate <a1>LL::NG</a1> with: <a0>LL::NG</a0> peut agir comme un serveur OpenID 2.0, ce qui permet de fédérer <a1>LL::NG</a1> avec : <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> Choose <a0>DBI</a0> type (RDBI, CDBI or <a1>DBI</a1>) Choisir le type <a0>DBI</a0> (RDBI, CDBI or <a1>DBI</a1>) http://oss.oetiker.ch/mrtg/ http://oss.oetiker.ch/mrtg/ Easy to integrate Facile à intégrer You can use LemonLDAP::NG in an heterogeneous world: the authentication portal and the manager can work in any version of Apache even if mod_perl is not compiled, with ModPerl::Registry or not,… or behind any web server able to launch CGIs. On peut utiliser LemonLDAP::NG dans un monde hétérogène : le portail d'authentification et le manager peuvent fonctionner sur n'importe quelle version d'Apache même si mod_perl n'est pas compilé, avec ModPerl::Registry ou non,… ou derrière n'importe quel serveur apte à lancer des CGIs. Google proposes to allow applications to reuse its own authentication process using <a0>OpenID</a0> protocol (it means, if your are connected to Google, other applications can trust Google and let you in). Google propose d'autoriser les applications à réutiliser son propre processus d'authentification en utilisant le protocole <a0>OpenID</a0> (ce qui signifie que si on est connecté à Google, d'autres applications peuvent agréer Google et accepter l'utilisateur). documentation:liferay_4.png documentation:liferay_4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 dbiAuthTable dbiAuthTable You <s1>must</s1> provide a full <a2>URI</a2> (for example /skins/common/lemonldap-ng_square.png) and use HTTPS on the portal <s1>Il faut</s1> fournir une <a2>URI</a2> complète (par exemple /skins/common/lemonldap-ng_square.png) et utiliser HTTPS pour le portail SSLAuthnLevel SSLAuthnLevel storePassword storePassword ../documentation/current/start.html#authentication_users_and_password_databases ../documentation/current/start.html#authentication_users_and_password_databases Lyon Lyon Access rules values can be: Les valeurs des règles d'accès peuvent être : by <a0>IP</a0> par adresses <a0>IP</a0> ../../documentation/1.4/portal.html ../../documentation/1.4/portal.html <s0>Secret token</s0>: used to check integrity of OpenID response. <s0>Secret token</s0> : utilisé pour vérifier l'integrité des réponses OpenID. a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf _authChoice _authChoice ../../documentation/1.4/authdbi.html ../../documentation/1.4/authdbi.html 20090301000000Z 20090301000000Z You need to adapt some parameters: Certains paramètres doivent être adaptés : <s15>Deny</s15> from <s16>all</s16> <s15>Deny</s15> from <s16>all</s16> /_detail/icons/tutorials.png?id=documentation /_detail/icons/tutorials.png?id=documentation http://jira.ow2.org/browse/LEMONLDAP-176 http://jira.ow2.org/browse/LEMONLDAP-176 With aptitude Avec aptitude http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ Some-Thing Some-Thing Edit <c0>/etc/krb5.conf</c0>: Editer <c0>/etc/krb5.conf</c0>: OBM_USERPASSWORD OBM_USERPASSWORD http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://openid.net/specs/openid-authentication-1_1.html http://openid.net/specs/openid-authentication-1_1.html LDAP performances Performances LDAP Do not forget to save your changes! Ne pas oublier de sauvegarder les changements ! Login History Historique de connexion Secure Token expiration Expiration du jeton sécurisé /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> http://freeradius.org/mod_auth_radius/ http://freeradius.org/mod_auth_radius/ This is mandatory if you want to use an Apache authentication module, which is run by Apache before showing the LemonLDAP::NG portal page. Obligatoire toutefois si on veut utiliser un module d'authentification Apache, qui sont lancés par Apache avant d'afficher la page du portail LemonLDAP::NG. ../pages/documentation/1.1/mysqlminihowto.html ../pages/documentation/1.1/mysqlminihowto.html Authentication table: where login and password are stored La table d'authentification : où les logins and et mots-de-passe sont stockés As Handlers keep configuration in cache, when configuration change, it should be updated in Handlers. Comme les agents gardent leur configuration en cache, lorsque la configuration est changée elle doit être mise à jour dans les agents. REMOTE_USER environment variable (with local Handler or SetEnvIf trick) la variable d'environnement REMOTE_USER (avec un agent local ou une conversion SetEnvIf) <s152>//"userobm_samba_perms" => ,</s152> <s152>//"userobm_samba_perms" => ,</s152> <s59>//"userobm_kind" => ,</s59> <s59>//"userobm_kind" => ,</s59> Functions parameters: Paramètres de la fonction : zimbraSsoUrl zimbraSsoUrl Modify password if asked Modifie le mot-de-passe si demandé documentation:manager-saml-service-sp-ac.png documentation:manager-saml-service-sp-ac.png /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin The upgrade process will also have migrate old configuration files into <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. Le processus de mise-à-jour va également migrer les anciens fichiers de configuration dans <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. <s0>Opening conditions</s0>: rules which are evaluated before granting session. <s0>Conditions d'ouverture</s0> : règles à évaluer avant d'autoriser l'ouverture de session. http://code.google.com/p/redis/ http://code.google.com/p/redis/ Configure LemonLDAP::NG to use SOAP proxy mechanism Configurer LemonLDAP::NG pour utiliser le mécanisme mandataire SOAP http://auth.example.com/openidserver/foo.bar http://auth.example.com/openidserver/foo.bar echo "127.0.0.1 reload.example.com" >> /etc/hosts echo "127.0.0.1 reload.example.com" >> /etc/hosts documentation:1.4:parameterlist documentation:1.4:parameterlist To test this, you can build your own WebID certificate using one of : Pour tester ceci, on peut se construire son propre certificat WebID en utilisant au choix : http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> documentation:1.4:configlocation documentation:1.4:configlocation OpenID OpenID The AuthDemo and UserDBDemo will allow you to log in and get the standard attributes (uid, cn and mail). AuthDemo et UserDBDemo permettent de se connecter et d'avoir les attributs standards (uid, cn et mail). <s147>//"userobm_email_nomade" => ,</s147> <s147>//"userobm_email_nomade" => ,</s147> Password protected transport Transport protégé du mot-de-passe Upgrade Mise à jour How to choose? Comment choisir ? Internal Proxy Proxy interne <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> The database username Le login de la base de données You can find all suitable information here: <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> Les informations appropriées se trouvent ici : <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> mailConfirmSubject mailConfirmSubject ../../documentation/1.4/mrtg.html ../../documentation/1.4/mrtg.html /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y <a0>Session explorer</a0> will not work L'<a0>explorateur de session</a0> ne fonctionne pas https://metacpan.org/module/Web::ID::Certificate::Generator https://metacpan.org/module/Web::ID::Certificate::Generator This can be useful to allow an third party application to access a virtual host with users credentials by sending a Basic challenge to it. Ce peut être pratique pour autoriser une application cliente à accéder à un hôte virtuel avec un authentifiant en envoyant un en-tête basique. Download Téléchargement <a0>LL::NG</a0> rely on a session mechanism with the session ID as a shared secret between the user (in <a1>SSO cookie</a1>) and the <a2>session database</a2>. <a0>LL::NG</a0> utilise un mécanisme de session basé sur un identifiant de session secret partagé entre l'utilisateur (dans un <a1>cookie SSO</a1>) et la <a2>base des sessions</a2>. ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> This is not the case of <a0>Memcached</a0> for example. C'est par exemple le cas de <a0>Memcached</a0>. ../../../media/documentation/manager_access_rule.png ../../../media/documentation/manager_access_rule.png JSON JSON <a0>LL::NG</a0> try to find the user in users database with the given information <a0>LL::NG</a0> tente de trouver l'utilisateur dans la base de données avec l'information donnée ../media/icons/tutorials.png ../media/icons/tutorials.png screenshots:1.1:mailreset:mailreset_step1.png screenshots:1.1:mailreset:mailreset_step1.png pages/documentation.html pages/documentation.html Portal (pastel theme) Portail (thème pastel) ../../documentation/1.4/safejail.html ../../documentation/1.4/safejail.html SSLVar SSLVar Try also to create a global notification (to the uid “allusers”), and connect with any user, the message will be prompted. Essayer alors de créer une notification globale (à l'utilisateur “allusers”), et se connecter avec n'importe quel compte, le message sera affiché. <s0>Path</s0>: keep <c1>^/saml/</c1> unless you have change <a2>SAML</a2> end points suffix in <a3>SAML service configuration</a3>. <s0>Chemin</s0> : laisser <c1>^/saml/</c1> sauf si les suffixes des points d'accès <a2>SAML</a2> ont été modifiés sans la <a3>configuration du service SAML</a3>. <s5>Deny</s5> from <s6>all</s6> <s5>Deny</s5> from <s6>all</s6> Memcached servers Serveurs memcached documentation:dia_dit_roles.png documentation:dia_dit_roles.png This parameter is used by <a0>SAML IDP</a0> to fill the authentication context in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour renseigner le contexte d'authentification dans les réponses. condition: condition to display the notification, can use all session variables. condition : condition pour afficher la notification, peut utiliser toutes les variables de session. # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection casStorage casStorage Use Safe Jail Utiliser la cage sécurisée <a0>URI</a0> of the page which receive POST data (optional if it is the same as the page holding the form) L'<a0>URI</a0> de la page qui reçoit les données POST (optionnel s'il s'agit de la même que celle qui héberge le formulaire) yum install perl-Authen-Radius yum install perl-Authen-Radius → The configuration cannot be loaded. → La configuration ne peut être chargée. You need to get a preauth key from Zimbra server. Il est nécessaire de récupérer une clef de pré-authentification auprès du serveur Zimbra. Specific default values for filters to match AD schema Valeurs spécifiques par défaut des filtres pour correspondre au schéma AD ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay As <a0>DBI</a0> is a login/password based module, the authentication level can be: Comme <a0>DBI</a0> est un module de type login/mot-de-passe, le niveau d'authentification peut être : Région Basse-Normandie Région Basse-Normandie Handler stores user data in its cache Il stocke ces données dans son cache documentation/conferences.html documentation/conferences.html To do it, uncomment the <c0>NameVirtualHost</c0> line in <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1>: Pour ce faire, décommenter la ligne <c0>NameVirtualHost</c0> dans <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1> : http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html You will need to install a Dokuwiki plugin, available on <a0>download page</a0>. Il faut installer le plugin Dokuwiki disponible sur la <a0>page de téléchargement</a0>. Use it Les utiliser Datas concerning the first connection to the portal Données concernant la première connexion au portail value valeur ../pages/documentation/1.4/authradius.html ../pages/documentation/1.4/authradius.html accordeon_dark.png accordeon_dark.png Variable name Nom de Variable <s0>Authentication table</s0>: authentication table name <s0>Table d'authentification</s0> : nom de la table d'authentification Configure user and password Configurer le nom de compte et le mot-de-passe Cookie expiration Expiration du cookie http://perldoc.perl.org/MIME/Base64.html http://perldoc.perl.org/MIME/Base64.html The authentication level given to users authenticated with this module. Le niveau d'authentification accordé aux utilisateurs authentifiés par ce module. ../documentation/current/installdeb.html ../documentation/current/installdeb.html Ministère de la Justice Ministère de la Justice User tries to access a protected application in a different domain L'utilisateur tente d'accéder à une application protégée d'un autre domaine <s0>Handler</s0>: user is redirected if he has no <a1>SSO</a1> cookie (or in <a2>CDA</a2> mode) les <s0>agents (handlers)</s0> : l'utilisateur y est redirigé s'il n'a pas de cookie <a1>SSO</a1> (ou en mode <a2>CDA</a2>) KrbServiceName HTTP/auth.example.com KrbServiceName HTTP/auth.example.com <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki <s0>NameID format</s0>: force NameID format here (email, persistent, transient, etc.). <s0>Format du NameID</s0> : force le format du NameID (email, persistent, transient, etc.). Prerequisites and dependencies Pré-requis et dépendances ../../documentation/1.4/start.html#configuration_database ../../documentation/1.4/start.html#configuration_database SQL session backend Backend de sessions SQL Statistics are displayed when calling the status path on an Handler (for example: <a0>http://test1.example.com/status</a0>). Les statistiques sont affichées lors des appels au chemin du statut sur un agent (par exemple : <a0>http://test1.example.com/status</a0>). <s6>require</s6> Lemonldap::NG::Portal::Menu; <s6>require</s6> Lemonldap::NG::Portal::Menu; [login] is the user login (or any other session information, <s0><a1>see below</a1></s0>) [login] est le nom de connexion (ou tout autre information de session, <s0><a1>voir ci-dessous</a1></s0>) XML menu configuration is deprecated. XML menu configuration is deprecated. login: $uid (uid of the user) login: $uid (uid de l'utilisateur) A value Une valeur Else, you will lock access to Manager and will never access it anymore. Sinon, on risque de verrouiller l'accès au manager et ne plus pouvoir y accéder. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Slave for authentication or users module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Slave</a2>) pour les modules authentification ou utilisateurs. documentation:1.4:activedirectoryminihowto documentation:1.4:activedirectoryminihowto _passwordDB _passwordDB All fields name and values Tous les noms de champs et leurs valeurs LimeSurvey virtual host in Apache Hôte virtuel LimeSurvey dans Apache tree_light.png tree_light.png Documentation Documentation Functioning Fonctionnement start.html start.html <a0>SlideShare</a0> <br1/> <a0>SlideShare</a0> <br1/> The messages are stored with the levels : Les messages sont stockés avec les niveaux : See <a2>Twitter FAQ</a2> on how to do that:. Reportez-vous à la <a2>FAQ Twitter</a2> pour en savoir plus. id id Download the latest version: Télécharger la dernière version : <s0>Build cookie</s0>: build <a1>SSO cookies</a1> with session ID <s0>Construit les cookies</s0>: construit les <a1>cookies SSO</a1> avec l'identifiant de session Documentation below explains how set index on ipAddr and _whatToTrace; Adapt it to configure the index you need. La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace; à adapter pour configurer les index nécessaires. Virtual host in Apache Hôte virtuel dans Apache <a8>mrtg</a8><br9/> <a8>mrtg</a8><br9/> Regular expression for random password Expression rationnelle pour la génération aléatoire des mots-de-passe Create OBM virtual host (for example obm.example.com) in <a0>LL::NG</a0> configuration: <c1>Virtual Hosts</c1> » <c2>New virtual host</c2>. Créer l'hôte virtuel OBM (par exemple obm.example.com) dans la configuration <a0>LL::NG</a0> : <c1>Hôtes virtuels</c1> » <c2>Nouvel hôte virtuel</c2>. Goal But http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 Example for MySQL : Exemple pour MySQL : LockPassword LockPassword _session_id _session_id ../../documentation/1.4/idpcas.html ../../documentation/1.4/idpcas.html <s0># Best performance under ModPerl::Registry</s0> <s1># Uncomment this to increase performance of Portal</s1> <Perl> <s0># Meilleures performances sous ModPerl::Registry</s0> <s1># A décommenter pour augmenter les performances du portail</s1> <Perl> <a2>Video</a2> <a2>Vidéo</a2> See full parameters list Voir la liste complète des paramètres <a0>Spring Security</a0> is the new ACEGI name. <a0>Spring Security</a0> est le nouveau nom d'ACEGI. <a0>LL::NG</a0> can easy talk to other authentication systems using <a1>SAML</a1>, OpenID, <a2>CAS</a2>. <a0>LL::NG</a0> peut aisément dialoguer avec d'autres systèmes d'authentification en utilisant <a1>SAML</a1>, OpenID, <a2>CAS</a2>. By default, <a0>DNS</a0> domain is <c1>example.com</c1>. Par défaut, le domaine <a0>DNS</a0> est <c1>example.com</c1>. This documentation explains how configure <a0>SAML</a0> service in <a1>LL::NG</a1>, in particular: Cette documentation explique comment configurer le service <a0>SAML</a0> dans <a1>LL::NG</a1>, en particulier : ../../../media/screenshots/1.1/mailreset/mailreset_step1.png ../../../media/screenshots/1.1/mailreset/mailreset_step1.png dirName dirName <s0>Password</s0>: where change the password <s0>Mots-de-passe</s0>: où changer les mots-de-passe <s0>Name</s0>: display text <s0>Nom</s0> : texte à afficher Configuration backend Stockage de la configuration Open links in new window Ouvre les liens dans une nouvelle fenêtre ../../documentation/1.4/installtarball.html ../../documentation/1.4/installtarball.html You can choose to install only one component by choosing the package <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> or <c2>lemonldap-ng-manager</c2>. On peut n'installer qu'un seul composant en choisissant le paquet <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> ou <c2>lemonldap-ng-manager</c2>. Date of birth Date of birth samlStorageOptions samlStorageOptions useRedirectOnError useRedirectOnError This attribute is set by LemonLDAP::NG when <a1>password was reset by mail</a1> and the user choose to generate the password (default: enabled). Cet attribut est activé par LemonLDAP::NG lorsque <a1>le mot-de-passe a été réinitialisé par mail</a1> et que l'utilisateur a choisi de générer le mot-de-passe (défaut : activé). %_topdir /home/user/build %dist .el5 %rhel 5 %_topdir /home/user/build %dist .el5 %rhel 5 This function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail to use it. Cette fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> ../pages/documentation/1.1/sqlsessionbackend.html ../pages/documentation/1.1/sqlsessionbackend.html <s0>Xavier GUIMARD</s0>: historic project leader, developer, Debian packager, administrator of big Lemonldap::NG instances <s0>Xavier GUIMARD</s0> : Leader historique du projet, developpeur, empaqueteur Debian, administrateur de grosses installations de Lemonldap::NG ../../documentation/1.4/mysqlminihowto.html ../../documentation/1.4/mysqlminihowto.html ../pages/documentation/1.4/fastcgi.html ../pages/documentation/1.4/fastcgi.html Logout user from current application and redirect it to the menu Déconnecte l'utilisateur de l'application courante et le redirige vers le menu /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla etc. etc... Development Développement mailTimeout mailTimeout accordeon_light.png accordeon_light.png This How To explains how change this default behavior to protect Manager with other rules. Ce document explique comment changer ce comportement par défaut pour protéger le manager avec d'autres règles. yubikeyAuthnLevel yubikeyAuthnLevel <s1>ServerName</s1> test2.example.com   <s1>ServerName</s1> test2.example.com   LWP::UserAgent LWP::UserAgent icons:xfmail.png icons:xfmail.png But sometimes other data are needed (in particular to use <a0>extended functions</a0>): Parfois d'autres données sont nécessaire (en particulier pour utiliser les <a0>fonctions étendues</a0>): Bugzilla virtual host in Apache Hôte virtuel Apache hébergeant Bugzilla If you are protecting Drupal with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Drupal est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. For example: Par exemple : ../../documentation/1.4/logoutforward.html ../../documentation/1.4/logoutforward.html Allow only admin and superadmin roles Autorisé seulement pour les rôles admin et superadmin Get the packages Obtenir ces paquets /_detail/screenshots/1.0/pastel/menu.png?id=screenshots /_detail/screenshots/1.0/pastel/menu.png?id=screenshots logos:sgs_white_small.jpg logos:sgs_white_small.jpg notificationStorageOptions notificationStorageOptions /_detail/logos/logo-ul.png?id=references /_detail/logos/logo-ul.png?id=references http://portal/index.pl/sessions http://portal/index.pl/sessions Go to the Manager and <a0>create a new virtual host</a0> for phpLDAPadmin. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour phpLDAPadmin. <s0>SSLOptions</s0>: set to <c1>+StdEnvVars</c1> to get certificate fields in environment variables <s0>SSLOptions</s0> : mettre à <c1>+StdEnvVars</c1> pour obtenir les champs du certificat dans les variables d'environnement In Manager, go in <c0>General Parameters</c0> » <c1>Authentication modules</c1> and choose Remote for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Remote pour les modules authentification et utilisateurs. User backend Module utilisateurs <a0>Download</a0> the plugin and copy the files in dokuwiki <c1>inc/auth/</c1> directory: <a0>Télécharger</a0> le plugin et le copier dans le répertoire dokuwiki <c1>inc/auth/</c1> : You can modify location of default storage configuration file in configure target: On peut modifier l'emplacement du fichier de configuration du stockage par défaut dans la cible configure : http://httpd.apache.org/docs/2.2/mod/core.html#loglevel http://httpd.apache.org/docs/2.2/mod/core.html#loglevel The access to phpLDAPadmin will be protected by LemonLDAP::NG with specific access rules. L'accès à phpLDAPadmin sera protégé par LemonLDAP::NG avec une règle particulière d'accès. Besides, macros and groups are computed in alphanumeric order, that is, in the order they are displayed in the manager. Egalement, les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Lemonldap::NG::Portal::SharedConf->compile( Lemonldap::NG::Portal::SharedConf->compile( If you configure form replay with <a0>LL::NG</a0>, the Handler will catch configured POST <a1>URL</a1> and send a POST query to the target page (which can be different of the caught page). En configurant le rejeu de formulaire avec <a0>LL::NG</a0>, l'agent intercepte les <a1>URL</a1> configurées et envoie une requête POST à la page cible (qui peut être différente de la première). http://search.cpan.org/perldoc?DBI http://search.cpan.org/perldoc?DBI zimbraAccountKey zimbraAccountKey ../../documentation/1.4/ldapconfbackend.html ../../documentation/1.4/ldapconfbackend.html Authentication portal Portails d'authentification Use SOAP for Lemonldap::NG sessions Utiliser SOAP pour les sessions Lemonldap::NG Not shareable between servers except if used in conjunction with <a0>SOAP configuration backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> documentation:1.4:filesessionbackend documentation:1.4:filesessionbackend Disabling Safe jail Désactiver la cage sécurisée See <a0>Apache::Session::Memcached</a0> for optional parameters. Voir <a0>Apache::Session::Memcached</a0> pour les paramètres optionnels. SAP SAP <a0>CAS</a0>_authnLevel <a0>CAS</a0>_authnLevel When you use <a0>SOAP sessions backend</a0>, it is recommended to use read-only <a1>URL</a1> (<a2>http://portal/index.pl/sessions</a2>). Lorsqu'on utilise le <a0>backend de session SOAP</a0>, il est recommandé d'utiliser l'<a1>URL</a1> en lecture seule (<a2>http://portal/index.pl/sessions</a2>). <s0>Logout rule</s0>: catch OBM logout <s0>Règle logout</s0> : intercepter la déconnexion OBM <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0>Searched attributes</s0>: name(s) of the attribute storing the name of the group, spaces separated (default: cn). <s0>Attributs recherchés</s0> : nom(s) de l'attribut stocké dans le nom du groupe, séparés par des virgules (défaut: cn). /_detail/logos/logo_abuledu.png?id=references /_detail/logos/logo_abuledu.png?id=references And the mail filter is: Et le filtre d'adresse mail est : If so, you can redirect users to a <a0>HTML</a0> page that explain that it is safe to close browser after disconnect. Dans ce cas, il faut rediriger les utilisateurs vers une page <a0>HTML</a0> qui explique qu'il est préférable de clore son navigateur après déconnexion. Connection between Linux and Active Directory - method 2 Connexion entre Linux et Active Directory - méthode 2 <s0>Access control policy</s0>: define if access control should be done on <a1>CAS</a1> service. <s0>Politique de contrôle d'accès</s0> : definit si le contrôle d'accès doit être fait sur le service <a1>CAS</a1>. ../../../media/documentation/lasso.png ../../../media/documentation/lasso.png <a0>CAS</a0> server <a1>URL</a1> <a1>URL</a1> du serveur <a0>CAS</a0> <s0>Identity provider</s0>: <a1>LL::NG</a1> is able to provide identity service using: <s0>Fournisseur d'identité</s0> : <a1>LL::NG</a1> peut fournir un service d'identité en utilisant : AuthBasic Handler Agent AuthBasic singleUserByIP singleUserByIP You need <a0>Auth::Yubikey_WebClient</a0> package. Le paquet <a0>Auth::Yubikey_WebClient</a0> est nécessaire. <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> Connection between Linux and Active Directory - method 1 Connexion entre Linux et Active Directory - méthode 1 Use comment to correct this: Utiliser des commentaires pour corriger ça : Application Programming Interface Interface de programmation <s0>SSLCACertificateFile</s0>: CA certificate to validate client certificates <s0>SSLCACertificateFile</s0> : certificat d'autorité pour valider les certificats clients http://www.yubico.com http://www.yubico.com field champ Cross Domain Authentication Authentification inter-domaines kinit ssokerberos@EXAMPLE.COM kinit ssokerberos@EXAMPLE.COM Imagine you've set your directory schema to store roles as values of ssoRoles, an attribute of the user. On suppose que le schéma d'annuaire a été prévu pour stocker les rôles comme valeur de ssoRoles, un attribut utilisateur. </<s31>Location</s31>> </<s31>Location</s31>> string chaîne APT-GET APT-GET Edit Dokuwiki local configuration (<c0>conf/local.php</c0>) and set <c1>lemonldap</c1> as authentication type: Éditer la configuration locale Dokuwiki (<c0>conf/local.php</c0>) et indiquer <c1>lemonldap</c1> comme type d'authentification : LockDataSource LockDataSource rtyler@badwolf.org rtyler@badwolf.org Other parameters Autres paramètres <s0>Auth-Cn</s0>: $cn <s0>Auth-Cn</s0>: $cn <a0>Integrating applications</a0> in <a1>LL::NG</a1> is easy since its dialog with applications is based on <a2>customizable HTTP headers</a2>. <a0>Integrer des applications</a0> dans <a1>LL::NG</a1> est facile car leur dialogue est basé sur des <a2>en-têtes HTTP personnalisables</a2>. Exported variables are the variables available to <a0>write rules and headers</a0>. Les variables exportées sont des variables disponibles pour <a0>écrire des règles d'accès et des en-têtes</a0>. ~7500 ~7500 The location <a0>URL</a0> end is based on the <c1>service_id</c1> defined in Sympa apache configuration. La fin de l'<a0>URL</a0> est construite à partir du <c1>service_id</c1> defini dans la configuration Apache de Sympa. <s0>Header for user login</s0>: header that contains the user main login <s0>En-tête identifiant l'utilisateur</s0> : en-tête contenant le nom de connexion http://www.yubico.com/yubikey http://www.yubico.com/yubikey Other components needs just a read access. Les autres composants n'ont besoin que d'un accès en lecture. With RPM Avec RPM KrbVerifyKDC <s18>Off</s18> KrbVerifyKDC <s18>Off</s18> Reset password by mail Réinitialisation des mots-de-passe par courriel Session Session cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots Example: interoperability between 2 organizations Exemple : interoperabilité entre 2 organisations Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' http://lanyrd.com/2011/rmll-2/sffqx/ http://lanyrd.com/2011/rmll-2/sffqx/ This requires to configure <a0>LL::NG</a0> as an <s1><a2>SAML Identity Provider</a2></s1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <s1><a2>fournisseur d'identité SAML</a2></s1>. <s0>Account type</s0>: for Zimbra this can be name, id or foreignKey (by default: id) <s0>Type de compte</s0> : pour Zimbra, ce peut être name, id ou foreignKey (par défaut : id) Extended functions Fonctions étendues /_detail/icons/flags/fr.png?id=documentation%3Aconferences /_detail/icons/flags/fr.png?id=documentation%3Aconferences http://en.wikipedia.org/wiki/OAuth2 http://en.wikipedia.org/wiki/OAuth2 When receiving the request, the real authentication context will be mapped ton an internal authentication level (see <a1>how configure the mapping</a1>), that you can check to allow or deny session creation. À la réception de la requête, le contexte d'authentification réel est traduit en un niveau d'authentification interne (voir <a1>comment configurer la translation</a1>), utilisable pour accorder ou non la création de session. <a0>Liferay</a0> is an enterprise portal. <a0>Liferay</a0> est un portail d'entreprise. sn sn No <a0>IRC</a0> client? Pas de client <a0>IRC</a0> ? One remote portal that delegates authentication to the second organization (just an other file on the same server) Un portail distant qui délègue l'authentification à la seconde organisation (juste un autre fichier sur le même serveur) <s0>Sessions timeout</s0>: Maximum lifetime of a session. <s0>Durée de vie maximale des sessions</s0> : durée de vie maximale des sessions. ../../../../media/applications/mediawiki_logo.png ../../../../media/applications/mediawiki_logo.png mailreset_step3.png mailreset_step3.png documentation:1.4:applications documentation:1.4:applications css/print.css css/print.css The Manager let you define comments in rules, to order them: Le manager permet de définir des commentaires de règles, ce qui permet de les ordonner : ../pages/documentation/1.1/installrpm.html ../pages/documentation/1.1/installrpm.html Databases Bases de données The <c0>reload</c0> target is managed in Apache configuration, inside a virtual host protected by LemonLDAP::NG Handler, for example: La cible <c0>reload</c0> est gérée dans la configuration d'Apache, dans un hôte virtuel protégé par LemonLDAP::NG Handler, par exemple: AbulEdu AbulEdu Create user and role: Créer un utilisateur et un rôle : ../../documentation/1.4/sessions.html ../../documentation/1.4/sessions.html In other cases which result on impossibility to authenticate user, to retrieve data or to create a session, nothing is stored. Dans les autres cas résultant de l'impossibilité d'authentifier l'utilisateur ou de récupérer les données pour créer la session, rien n'est stocké. index/alphabetical.html index/alphabetical.html Secure reverse-proxies Securiser les proxies inverses <s0>Friendly Name</s0>: optional, <a1>SAML</a1> attribute friendly name. <s0>Nom alternatif</s0>: optionnel, nom alternatif de l'attribut <a1>SAML</a1>. documentation:1.4:portalmenu documentation:1.4:portalmenu Enable LL::NG sites Activer les sites LL::NG loginHistory loginHistory Zimbra virtual host in Apache Hôte virtuel Zimbra dans le manager <s149>//"userobm_vacation_datebegin" => ,</s149> <s149>//"userobm_vacation_datebegin" => ,</s149> For now, ldapgroups contains “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” Pour l'instant, ldapgroups contient “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” exportedAttr exportedAttr coudot@example.com coudot@example.com ../../../../media/documentation/liferay_1.png ../../../../media/documentation/liferay_1.png Configuration parameters are: Les paramètres de configuration sont : http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime <<s0>VirtualHost</s0> *> <<s0>VirtualHost</s0> *> This tutorial will guide you into a minimal installation and configuration procedure. Ce tutoriel vous guidera pour réaliser une installation et une configuration minimale. Note that if you use FastCGI, you must restart Apache to enable changes. Noter que si on utilise FastCGI, il faut redémarrer Apache pour activer les changements. LemonLDAP::NG configuration is stored in a backend that allows all modules to access it. La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder. In this case, authentication is not a response to an issued authentication request, and we have less control on conditions. Dans ce cas, l'authentification n'est pas une réponse à une requête d'authentification ce qui diminue les capacités de contrôle. MediaWiki virtual host in Manager Hôte virtuel Mediawiki dans le manager remember: '1' (checked box) remember: '1' (une case à cocher) Using LemonLDAP::NG with Active-Directory Utiliser Lemonldap::NG avec Active-Directory <s0>Want Authentication Request Signed</s0>: set to On to require that received authentication request are signed. <s0>Exiger des requêtes d'authentification signées</s0> : mettre à « activer » pour exiger de recevoir des requêtes d'authentification signées. deny deny documentation:1.4:writingrulesand_headers documentation:1.4:writingrulesand_headers Roles as entries in the directory Rôles comme entrée d'annuaire <a0>handlerauthbasic</a0><br1/> <a0>handlerauthbasic</a0><br1/> System Système <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> The request on logout <a0>URL</a0> will be sent after user is disconnected, so you should unprotect this <a1>URL</a1> if it is protected by an <a2>LL::NG</a2> Handler. Cette requête vers l'<a0>URL</a0> de déconnexion est envoyée après la déconnexion de l'utilisateur, il faut donc déprotéger cette <a1>URL</a1> si elle est protégée par un agent <a2>LL::NG</a2>. <a2>mediawiki</a2><br3/> <a2>mediawiki</a2><br3/> ../pages/documentation/1.1/prereq.html ../pages/documentation/1.1/prereq.html Due to a conflict between <a0>LL::NG</a0> form replay and Apache mod_proxy (see <a1>issue</a1>), you cannot use form replay on proxied applications, unless you use <a2>LL::NG</a2> <a3>internal proxy</a3>: Suite à un conflit entre le rejeu de formulaires <a0>LL::NG</a0> et mod_proxy d'Apache (voir les <a1>problèmes</a1>), on ne peut utiliser le rejeu de formulaires sur des applications derrière un proxy sauf si on utilise le <a3>proxy interne</a3> de <a2>LL::NG</a2> : sympaMailKey sympaMailKey qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); However, certificate will not be really validated by other <a0>SAML</a0> components (expiration date, common name, etc.), but will just be a public key wrapper. Toutefois, le certificat ne sera pas réellement validé par les autres composants <a0>SAML</a0> (date d'expiration, nom commun, etc.), mais simplement vu comme un conteneur de clef publique. Install it to trust RPMs: L'installer pour certifier les RPMs: Spring Security provides a default <c0>pre-authentication</c0> mechanism that can be used to connect your J2EE application to <a1>LL::NG</a1>. Spring Security fournit un mécansime de <c0>pre-authentification</c0> par défaut qui peut être utilisé pour connecter une application J2EE à <a1>LL::NG</a1>. Secondary portal check if remote session is available. Le portail secondaire vérifie que la session distante est valable. Web::ID::Certificate::Generator Web::ID::Certificate::Generator https://auth.abuledu.net/ https://auth.abuledu.net/ Attributes from user backend Attributs récupérés du module utilisateur install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) employeeNumber employeeNumber Register partner Identity Provider on LemonLDAP::NG Enregistrer le fournisseur d'identité partenaire dans LemonLDAP::NG ../../documentation/1.4/applications/zimbra.html ../../documentation/1.4/applications/zimbra.html <s29>Deny</s29> from <s30>all</s30> <s29>Deny</s29> from <s30>all</s30> ../../documentation/1.4/nosqlsessionbackend.html ../../documentation/1.4/nosqlsessionbackend.html zimbraUrl zimbraUrl Packages are available on the <a0>Download page</a0>. Les paquets sont disponibles sur la <a0>page de téléchargement</a0>. ../pages/documentation/1.1/changeconfbackend.html ../pages/documentation/1.1/changeconfbackend.html <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> Session activity timeout requires Handlers to have a write access to sessions database. Le délai d'expiration des sessions nécessite que les agents aient un accès en écriture à la base des sessions. <s0>Display deleted sessions</s0>: display deleted sessions on authentication phase. <s0>Afficher les sessions effacées</s0> : affiche les sessions effacées lors de la phase d'authentification. To achieve this, follow these steps: Pour le réussir, suivre ces étapes : Restrict network access to the redis server. Restreignez l'accès réseau au serveur Redis. ../pages/documentation/1.4/authad.html ../pages/documentation/1.4/authad.html <s29>Allow</s29> from <s30>all</s30> <s29>Allow</s29> from <s30>all</s30> ../../documentation/1.4/configlocation.html#apache ../../documentation/1.4/configlocation.html#apache ../../../media/documentation/manager-saml-idp-metadata.png ../../../media/documentation/manager-saml-idp-metadata.png yubikeyClientID yubikeyClientID dbiTable dbiTable RPM bundle Paquets RPM Active Directory Active Directory documentation:configuration-ldap.png documentation:configuration-ldap.png Google+ Google+ If this regex matches, the line is ignored. Si cette expression régulière correspond, la ligne est ignorée. You have to run this command on Active Directory: Il faut lancer cette commande dans Active Directory: LemonLDAP::NG is highly scalable, so easy to insert behind a load-balancer: LemonLDAP::NG est hautement scalable, donc facile à insérer derière un répartisseur de charge : Core team Équipe prinicpale ../pages/documentation/1.1/status.html ../pages/documentation/1.1/status.html <s0>Force UTF-8</s0>: this will force UTF-8 conversion of attributes values collected from IDP. <s0>Forcer l'UTF-8</s0> : force la conversion UTF-8 des valeurs d'attributs collectées depuis l'IDP. ../documentation/current/authdemo.html ../documentation/current/authdemo.html LemonLDAP::NG configuration can be managed in a local file with <a0>INI format</a0>. La configuration LemonLDAP::NG peut être gérée par un fichier local au <a0>format INI</a0>. <s18>DirectoryIndex</s18> index.pl index.html <s18>DirectoryIndex</s18> index.pl index.html Comment Commentaire http://search.cpan.org/~mmims/Net-Twitter/ http://search.cpan.org/~mmims/Net-Twitter/ /_detail/icons/flags/fr.png?id=press /_detail/icons/flags/fr.png?id=press There are no <e0>global</e0> authorizations except the right to open a session in the portal. Il n'y a pas d'autorisation <e0>globale</e0>, à l'exception de la règle accordant l'ouverture de session dans le portail. <a2>Lanyrd</a2> <a2>Lanyrd</a2> If you use TLS, you can set any of the <a0>Net::LDAP</a0> start_tls() sub like <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. En utilisant TLS, il est possible d'utiliser toutes les options de la fonction start_tls() <a0>Net::LDAP</a0> telle <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. Logs settings Journalisation all together (based on user <a0>choice</a0>, <a1>rules</a1>, …) tous en même temps (basé sur le <a0>choix</a0> utilisateur, les <a1>règles</a1>, …) <s0><a1>API</a1> client ID</s0>: <a2>API</a2> client ID from Yubico <s0>Identifiant client de l'<a1>API</a1></s0> : identifiant client de l'<a2>API</a2> obtenu auprès de Yubico <a30>authopenid</a30><br31/> <a30>authopenid</a30><br31/> Not shareable between servers except if used in conjunction with <a0>SOAP session backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> OpenLDAP schema Schéma OpenLDAP dbiAuthnLevel dbiAuthnLevel _user _user <s13>Allow</s13> from <s14>all</s14> <s13>Allow</s13> from <s14>all</s14> Lemonldap::NG::Portal Lemonldap::NG::Portal See <a0>performances</a0> to know how to use macros and groups in rules. Voir <a0>performances</a0> pour comprendre l'intérêt des macros et groupes dans les règles. Manager tree autoClose Auto-fermeture de l'arbre du manager ../../documentation/1.3/upgrade.html ../../documentation/1.3/upgrade.html You have to create the table by yourself: Il faut créer soi-même la table : <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> ../pages/documentation/1.4/authbrowserid.html ../pages/documentation/1.4/authbrowserid.html Lock files are stored in another directory. Les fichiers verrous sont stockés dans un autre répertoire. a15a18c8bb17e6f67886a9af1898c018b9f5a072 a15a18c8bb17e6f67886a9af1898c018b9f5a072 <a0>Create a protocol proxy</a0> <e1>(<a2>SAML</a2> to OpenID, <a3>CAS</a3> to <a4>SAML</a4> ,…)</e1> <a0>Créer un proxy de protocoles </a0> <e1>(<a2>SAML</a2> vers OpenID, <a3>CAS</a3> vers <a4>SAML</a4> ,…)</e1> See <a0>Redis session backend</a0>. Voir <a0>backend de session Redis</a0>. documentation/current/prereq.html#apt-get documentation/current/prereq.html#apt-get contact contact Enable SSL in Apache Activer SSL dans Apache </<s19>IfModule</s19>> </<s19>IfModule</s19>> documentation:googleapps-ssoconfig.png documentation:googleapps-ssoconfig.png <s0>auto</s0>: display only if the user can access it <s0>auto</s0> : n'afficher que si l'utilisateur peut y accéder <s0>New window</s0>: open menu links in new window <s0>Nouvelle fenêtre</s0> : ouvre les liens du menu dans de nouvelles fenêtres ../../../documentation/1.4/writingrulesand_headers.html#headers ../../../documentation/1.4/writingrulesand_headers.html#headers Optional attributes: Attributs optionnels : ../../documentation/1.4/authradius.html ../../documentation/1.4/authradius.html Main <a0>DNS</a0> domain Domaine <a0>DNS</a0> principal These rules can be set trough Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules activation</c3>. Ces règles peuvent être modifiées via le manager : <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Activation des modules</c3>. Frameworks Frameworks http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm <s135>//"userobm_web_all" => ,</s135> <s135>//"userobm_web_all" => ,</s135> 0 if not 0 sinon Yubikey public ID size Taille de l'ID public Yubikey The team L'équipe /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart managerTreeJqueryCss managerTreeJqueryCss Wordpress, GLPI, OBM, Dokuwiki, … Wordpress, GLPI, OBM, Dokuwiki, … <a1>LL::NG</a1> can restrict this: <a1>LL::NG</a1> peut restreindre cet usage : Auth-Cn Auth-Cn Users: will not collect any data (but you can still register environment variables in session) Utilisateurs : ne collecte aucune donnée (mais il est possible d'enregistrer des variables d'environement dans la session) If no binding defined, the default binding in IDP metadata will be used. Si aucune méthode n'est définie, la méthode par défaut des métadatas de l'IDP sera utilisée. <a0>LL::NG</a0> Manager has a session explorer module that can be used to browse opened sessions: Le gestionnaire de <a0>LL::NG</a0> dispose d'un explorateur de sessions qui peut être utilisé pour parcourir sessions ouvertes : You will configure Zimbra virtual host like other <a0>protected virtual host</a0> but you will use Zimbra Handler instead of default Handler. Configurer l'hôte virtuel Zimbra comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser le handler Zimbra au lieu du handler par défaut. ../../documentation/1.4/idpsaml.html ../../documentation/1.4/idpsaml.html <s15>require</s15> valid-<s16>user</s16> <s15>require</s15> valid-<s16>user</s16> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> ../pages/documentation/1.1/ldapconfbackend.html ../pages/documentation/1.1/ldapconfbackend.html <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <a0>CAS</a0> attribute for login Attribut <a0>CAS</a0> pour le nom de connexion The <a0>DBI</a0> string La chaîne <a0>DBI</a0> using own database (<a0>LDAP</a0>, <a1>SQL</a1>, …) utilisant une base de données propre (<a0>LDAP</a0>, <a1>SQL</a1>, …) Zimbra account session key Clef de session de compte Zimbra ../../../../media/applications/liferay_logo.png ../../../../media/applications/liferay_logo.png Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q <s0>Double cookie for single session</s0>: as same, two cookies are delivered, but only one session is written in session database <s0>Double cookie pour session unique</s0> : de même, deux cookies sont délivrés, mais une seule session n'est écrite dans la base de données ASF-WS ASF-WS phpLDAPadmin virtual host in Apache Hôte virtuel phpLDAPadmin dans le manager In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose WebID for authentication module. Dans le manager, aller dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisir WebID comme module d'authentication. <a0>CAS</a0> issuer Fourniture d'identité <a0>CAS</a0> documentation:1.4:applications:obm documentation:1.4:applications:obm AuthApache authentication Authentification AuthApache unicode2iso($name) unicode2iso($nom) Timestamp of last authentication time Date et heure (timestamp) de la dernière authentification ~3 ~3 ~5 ~5 YUM YUM <s0>Extracted certificate field</s0>: field of the certificate affected to $user internal variable <s0>Champ extrait du certificat</s0> : champ du certificat affecté à la variable interne $user Examples with a <a0>configured header</a0> named 'Auth-User': Exemples avec un <a0>en-tête configuré</a0> nommé 'Auth-User': <s0>Location</s0>: Access Point for <a1>SSO</a1> request. <s0>Location</s0>: Point d'accès pour les requêtes <a1>SSO</a1>. documentation:1.4:authopenid documentation:1.4:authopenid Mini howtos Mini howtos Screenshots Captures d'écran LDAP LDAP /_detail/logos/logo_linagora.png?id=references /_detail/logos/logo_linagora.png?id=references <a0>LL::NG</a0> can use federation protocols (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) independently to: <a0>LL::NG</a0> peut utiliser des protocoles de fédération (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) indépendamment pour : /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa Lemonldap::NG::Handler::SharedConf: No cookie found Lemonldap::NG::Handler::SharedConf: No cookie found <s3># Uncomment this line if you use Lemonldap::NG menu</s3> <s3># Décommentez cette ligne si vous utilisez le menu Lemonldap::NG</s3> ../../media/documentation/lemonldapng-sso.png ../../media/documentation/lemonldapng-sso.png iso2unicode iso2unicode → You use the Apache authentication backend, but Apache is not or bad configured (no REMOTE_USER send to LemonLDAP::NG). → Le backend d'authentification Apache est utilisé, mais Apache n'est pas ou mal configuré (la variable d'environnement REMOTE_USER n'est pas envoyée à LemonLDAP::NG). <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>You have new authorizations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>You have been granted to access to appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>You have been granted to access to appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>I know that I can access to appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>I know that I can access to appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>This is your first access on this system<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Be a nice user and do not break it please.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Of course I am not evil!<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>Vous avez de nouvelles autorisations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>Vous êtes autorisé à accéder à appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>Vous êtes autorisé à accéder à appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>Je reconnais savoir que je peux accéder à appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>Je reconnais savoir que je peux accéder à appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>Ceci est votre premier accès à ce système<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Soyez sage et ne le cassez pas.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Bien sûr, je ne suis pas méchant !<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> So he is “user” on application “BBB” and “admin” on application “<a0>AAA</a0>”. Ainsi, il est “user” sur l'application “BBB” et “admin” sur l'application “<a0>AAA</a0>”. Main features Fonctionnalités principales documentation:manager-saml-idp-list.png documentation:manager-saml-idp-list.png ../../documentation/1.4/activedirectoryminihowto.html ../../documentation/1.4/activedirectoryminihowto.html <a0>RBAC</a0> stands for Role Based Access Control. <a0>RBAC</a0> signifie contrôle d'accès basé sur les rôles (Role Based Access Control). IRC IRC 0_bad 0_bad <s8>require</s8> SOAP::Lite; </Perl> <s8>require</s8> SOAP::Lite; </Perl> It means that if you modify some settings here, you will have to share again the metadata with other providers. Ceci signifie que si vous modifiez quelque chose ici, vous devez ré-exporter les metadatas aux autres fournisseurs. convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini applications:phpldapadmin_logo.png applications:phpldapadmin_logo.png For application BBB: Pour l'application BBB : Notification format Format des notifications css/all.css css/all.css cd myskin ln -s ../pastel/*.tpl . cd myskin ln -s ../pastel/*.tpl . $_password $_password mailUrl mailUrl documentation:1.4:exportedvars documentation:1.4:exportedvars http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword References are listed in alphabetic order. Les références sont listées dans l'ordre alphabétique. Do this in the control panel or in the configuration file: Faire ceci dans le panneau de contrôle ou dans le fichier de configuration : <a8>authbasic</a8><br9/> <a8>authbasic</a8><br9/> icons:warehause.png icons:warehause.png <s0># boolean macro</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># other macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Use a boolean macro in a rule</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Use a string macro in a HTTP header</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> <s0># macro booléenne</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># autre macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Utiliser une macro booléenne dans une règle</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Utiliser une macro chaîne dans un en-tête HTTP</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> ../../documentation/1.4/memcachedsessionbackend.html ../../documentation/1.4/memcachedsessionbackend.html If your function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail. Si la fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. Backend choice by users Backend choisit par l'utilisateur Data to store as REMOTE_USER (used also in Apache logs) Donnée à utiliser comme REMOTE_USER (également utilisée dans les journaux d'Apache) specification spécification An <a0>enterprise Google Apps account</a0> Un <a0>compte applicatif Google entreprise</a0> secret secret Just set the <a3>LL::NG</a3> Handler <a4>IP</a4> on this attribute in order to add more security. Indiquer seulement l'adresse <a4>IP</a4> du handler <a3>LL::NG</a3> dans cet attribut pour ajouter plus de sécurité. <s0>info</s0> for user actions <s0>info</s0> pour les actions utilisateurs documentation:1.4:notifications documentation:1.4:notifications Web based for normal users: Basé sur du web pour les utilisateurs normaux : /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal <s0>HTTPS</s0>: use https as protocol <s0>HTTPS</s0> : utilise https comme protocole This objectClass is included in every core schemas. Cet objectClass est inclus dans tous les schémas de base. <s0>Display</s0>: <s0>Affichage</s0> : <a0>DBI</a0> UserDB table Table UserDB <a0>DBI</a0> /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots install_manager_libs install_manager_libs See <a0>mod_proxy</a0> and <a1>mod_rewrite</a1> documentation for more about configuring Apache reverse-proxies. Voir les documentation de <a0>mod_proxy</a0> et <a1>mod_rewrite</a1> pour plus d'information sur la configuration du proxy inverse d'Apache. This can happend when you use lmConfigEditor or launch <s0>cron files</s0> with a different user than Apache process. Ceci peut arriver lorsqu'on utilise lmConfigEditor ou lorsqu'on lance les <s0>fichiers cron</s0> avec un utilisateur différent de celui du processus Apache. <a2>IBM Lotus iNotes</a2> <a2>IBM Lotus iNotes</a2> Sympa Handler parameters Paramètres du handler Sympa <a4>Joind.in</a4> <a4>Joind.in</a4> mailOnPasswordChange mailOnPasswordChange <s24>}</s24><s25>,</s25> <s24>}</s24><s25>,</s25> http://mail.ow2.org/wws/arc/lemonldap-ng-dev http://mail.ow2.org/wws/arc/lemonldap-ng-dev Syslog Syslog ../../documentation/1.4/start.html#sessions_database ../../documentation/1.4/start.html#sessions_database mailFrom mailFrom <s0>Password</s0>: Connection password <s0>Mot-de-passe</s0> : mot-de-passe du compte de connexion The difference with <a0>remote authentication</a0> is that the client will never be redirect to the main <a1>LL::NG</a1> portal. La différence avec <a0>l'authentification "Remote"</a0> est que le client n'est jamais redirigé vers le portail <a1>LL::NG</a1> principal. multi multi $uidR $uidR If secured cookie is enabled, the portal <a3>URL</a3> <s4>must</s4> be HTTPS. Si le cookie sécurisé est activé, l'<a3>URL</a3> du portail <s4>doit</s4> être en HTTPS. </<s11>Directory</s11>>   </<s11>Directory</s11>>   To change it: Pour le changer : ../pages/documentation/1.1/extendedfunctions.html ../pages/documentation/1.1/extendedfunctions.html Logs Journaux The LDIF view of such entry can be: La vue LDIF d'une telle entrée ressemble à : Menu modules activation rules les règles d'activation des modules du menu http://perldoc.perl.org/functions/join.html http://perldoc.perl.org/functions/join.html Password Mot-de-passe If you want to become member of <a1>LL::NG</a1> team ask to <a2>lemonldap-ng-dev@ow2.org</a2>. SI vous souhaitez devenir membre de l'équipe <a1>LL::NG</a1> demandez-le également à <a2>lemonldap-ng-dev@ow2.org</a2>. This script is called <c0>lemonldap-ng-cli</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: Ce script se nomme <c0>lemonldap-ng-cli</c0> et se trouve dans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin: <s85>//"userobm_hidden" => ,</s85> <s85>//"userobm_hidden" => ,</s85> First steps Premiers pas ../../documentation/1.4/applications/sympa.html ../../documentation/1.4/applications/sympa.html Configuration of Apache virtual host Configuration de l'hôte virtuel Apache http://search.cpan.org/perldoc?DBD::Oracle http://search.cpan.org/perldoc?DBD::Oracle for index.pl, set it in new(): pour index.pl, le mettre dans new() : ../../../media/applications/spring_logo.png ../../../media/applications/spring_logo.png Header En-tête Protect only the administration pages Protéger seulement la page d'administration <s0>faketicket</s0>: if the user has no access, a fake ticket is built, and the user is redirected to <a1>CAS</a1> service. <s0>faketicket</s0> : si l'utilisateur n'a pas accès, un faux ticket est construit, et l'utilisateur est redirigé vers le service <a1>CAS</a1>. /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <s94>//"userobm_mobile" => ,</s94> <s94>//"userobm_mobile" => ,</s94> Tarball Archive documentation:1.4:applications:dokuwiki documentation:1.4:applications:dokuwiki You can add a link in <a0>application menu</a0> to display Google Apps to users. Il est possible d'ajouter un lien dans le <a0>menu application</a0> pour afficher Google Apps. http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz Hide old password in reset form Masquer l'ancien mot-de-passe dans le formulaire de réinitialisation userDB userDB documentation:1.0:ldapconfbackend documentation:1.0:ldapconfbackend /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml User found from login process Nom d'utilisateur trouvé dans le processus d'authentification aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) The normal portal has a link included in the authentication form pointing to the remote portal for the users of the other organization Le portail normal dispose d'un lien dans le formulaire d'authentification pointant vers le portail destiné aux utilisateurs de l'autre organisation Follow <a0>LDAP session backend</a0> doc Suivre la documentation <a0>backend de sessions LDAP</a0> ../../documentation/1.4/rbac.html ../../documentation/1.4/rbac.html Firefox has detected that the server is redirecting the request for this address in a way that will never complete Firefox has detected that the server is redirecting the request for this address in a way that will never complete <s0>Persistent</s0>: NameID is restored from previous sessions <s0>Persistent</s0>: le NameID est restoré depuis la session précédente ../../documentation/1.4/applications/phpldapadmin.html ../../documentation/1.4/applications/phpldapadmin.html The user will be redirected on portal <a0>URL</a0> with error in the <c1>lmError</c1> <a2>URL</a2> parameter. L'utilisateur sera redirigé vers l'<a0>URL</a0> du portail avec une erreur dans le paramètre <c1>lmError</c1> de l'<a2>URL</a2>. <s114>//"userobm_address3" => ,</s114> <s114>//"userobm_address3" => ,</s114> Test notification Tester les notifications In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose <a2>CAS</a2> for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>CAS</a2> pour l'authentification. ../../../media/applications/glpi_logo.png ../../../media/applications/glpi_logo.png Then restart Apache. Redémarrer Apache ensuite. Note that this feature is interesting only for the Lemonldap::NG systems protecting a high number of applications Notez que cette fonctionnalité n'est intéressante que pour les systèmes Lemonldap::NG protégeant un grand nombre d'applications vi /root/SSOExtensions.pm vi /root/SSOExtensions.pm http://search.cpan.org/perldoc?CGI http://search.cpan.org/perldoc?CGI If not authenticated (or authentication is forced) try to find it (userDB module) and to authenticate it (auth module), create session, calculate groups and macros and store them. Si ce n'est pas le cas (ou si l'authentification est forcée) tente de le trouver (module userDB) et de l'authentifier (module d'authentification), crée la session, calcule les groupes et macros et les stocke <s0>General Parameters</s0>: authentication modules, portal, etc. <s0>Paramètres généraux</s0> : modules d'authentification, portail, etc... <s0>CDBI</s0> : very simple storage <s0>CDBI</s0> : stockage très simple Find other documentation on <a0>Firewall Services site</a0>. Une autre documentation est disponible sur <a0>Firewall Services site</a0>. documentation:1.4:idpopenid documentation:1.4:idpopenid <a14>portalmenu</a14><br15/> <a14>portalmenu</a14><br15/> How it works Fonctionnement http://auth.example.com/?logout=1 http://auth.example.com/?logout=1 In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Proxy for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Proxy pour les modules authentification et utilisateurs. http://lanyrd.com/2012/ow2-con12/scbcwz/ http://lanyrd.com/2012/ow2-con12/scbcwz/ To bypass this, follow the documentation of <a0>AuthApache module</a0> Pour outrepasser ceci, suivre la documentation du <a0>module AuthApache</a0> radiusServer radiusServer Apache::Session::Browseable::MySQL doesn't use locks so performances are keeped. Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances. <s3>RewriteRule</s3> ^/openidserver/.* /index.pl <s3>RewriteRule</s3> ^/openidserver/.* /index.pl To do this, go in Manager > General Parameters > Advanced Parameters > Security > Use Safe Jail and disable it. Pour ce faire, aller dans le manager > Paramètres généraux > Paramètres avancés > Sécurité > Utiliser la cage sécurisée et la désactiver. <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> ../../documentation/1.4/authslave.html ../../documentation/1.4/authslave.html Add on your <c0>server.xml</c0> file a new valve entry like this (in host section): Ajouter dans le fichier <c0>server.xml</c0> une nouvelle valve comme ci-dessous (dans la section host): http://perldoc.perl.org/Safe.html http://perldoc.perl.org/Safe.html After logout process, the user is redirected on portal, or on a configured <a0>URL</a0>. Après déconnexion, l'utilisateur est redirigé vers une <a0>URL</a0> configurée ou vers le portail. See also Voir aussi OBM_GROUPS OBM_GROUPS Third step: provide the role to the application. Troisième étape : fournir le rôle à l'application. ../../documentation/1.4/soapservices.html ../../documentation/1.4/soapservices.html One standard portal Un portail standard It returns 1 if this match, 0 else. Elle retourne 1 si c'est bon, 0 sinon. Configure Liferay virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Liferay comme n'importe quel autre <a0>hôte virtuel protégé</a0>. To install them on system: Pour les installer sur le système : ../../documentation/1.4/soapsessionbackend.html ../../documentation/1.4/soapsessionbackend.html In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Facebook for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Facebook comme module d'authentication. Twitter Twitter Password is not a common attribute. Le mot-de-passe n'est pas un attribut commun. caFile caFile /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/screenshots/1.0/pastel/portal.png?id=screenshots /_detail/screenshots/1.0/pastel/portal.png?id=screenshots ldapPort ldapPort <a0>DokuWiki</a0> is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. <a0>DokuWiki</a0> est un wiki simple et standard principalement destiné à la création de documents de toute nature. ldapRaw ldapRaw Exported variables in the Manager Variables exportées dans le manager sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl documentation:manager-formreplay-newdata.png documentation:manager-formreplay-newdata.png Perl Perl http://lanyrd.com/2012/solutionslinux/sryym/ http://lanyrd.com/2012/solutionslinux/sryym/ https://auth.example.com/ https://auth.example.com/ Installation on RedHat/CentOS Installation sur RedHat/CentOS <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> Go to the Manager and <a0>create a new virtual host</a0> for Dokuwiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Dokuwiki. Option <c0>–enctypes</c0> requires msktutil > 0.4 L'option <c0>–enctypes</c0> requiert msktutil > 0.4 ../../../media/applications/sympa_logo.png ../../../media/applications/sympa_logo.png The <a0>LDAP schema extension</a0> can be used to store this value. L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker cette valeur. CAS identity provider Fournisseur d'identité CAS Notification activation Activation des notifications mail mail New Service Provider Nouveau fournisseur de service To make the portal start faster when the server is relaunched, add those lines in Apache configuration file (as described in portal-apache2.conf): Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf): <s0>Display other sessions </s0>: display other sessions on authentication phase, with a link to delete them. <s0>Afficher les autres sessions</s0> : affiche les autres sessions ouvertes lors de la phase d'authentification avec un lien pour les effacer. Last name Nom When you know the key of the variable, you just have to prefix it with the dollar sign to use it, for example to test if <c0>uid</c0> variable match <c1>coudot</c1> : En connaissant le nom d'une variable, il suffit de la préfixer avec un signe dollar pour l'utiliser, par exemple pour savoir si la variable <c0>uid</c0> contient <c1>coudot</c1> : For application <a0>AAA</a0>: Pour l'application AAA : Crypt::OpenSSL::X509 Crypt::OpenSSL::X509 http://www.liferay.com/ http://www.liferay.com/ Key (<a0>LL::NG</a0> name) Clef (nom <a0>LL::NG</a0>) <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> Upgrade to 1.0 Mise à jour vers la version 1.0 Upgrade to 1.1 Mise à jour vers la version 1.1 ../../../css/screen.css ../../../css/screen.css Upgrade to 1.2 Mise à jour vers la version 1.2 Upgrade to 1.3 Mise à jour vers la version 1.3 LemonLDAP::NG provides a proxy that can replace the use of Apache mod_proxy. LemonLDAP::NG fournit un proxy qui peut remplacer l'utilisation de mod_proxy d'Apache. <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> The SP name is asked, enter it and click OK. Le nom de SP est demandé, entrer-le et cliquer sur OK. To use this feature only locally, edit <c0>lemonldap-ng.ini</c0> in section [all]: Pour utiliser cette fonctionnalité seulement localement, éditer <c0>lemonldap-ng.ini</c0> dans la section [all]: To configure sessions, go in Manager, <c0>General Parameters</c0> » <c1>Sessions</c1>: Pour configurer les sessions, aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Sessions</c1> : ../media/logos/logo_rbn.png ../media/logos/logo_rbn.png it may be the <e3>backbone</e3> of a heterogeneous architecture. il peut être le <e3>pivot</e3> d'une architecture hétérogène. Go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Custom functions</c2> and set: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Fonctions personnalisées</c2> et indiquer : Macros and groups are calculated during authentication process by the portal: Les macros et les groupes sont calculées pendant le processus d'authentification par le portail : Enable <a0>LL::NG</a0> sites in Apache: Activer les sites <a0>LL::NG</a0> dans Apache : <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> userPivot userPivot A mail with a token is sent to user Un courriel avec une valeur est envoyé à l'utilisateur startTime startTime ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab globalStorage globalStorage This parameter is set by the portal and use javascript to get the connected user timezone. Ce paramètre est géré par le portail et utilise javascript pour obtenir le fuseau de l'utilisateur connecté. Remember to change the access rule in Manager virtual host to allow new administrators. Ne pas oublier de changer la règle d'accès à l'hôte virtuel du manager pour autoriser les nouveaux administrateurs. fullname fullname ../../documentation/1.4/configlocation.html ../../documentation/1.4/configlocation.html ../../../media/icons/neotux.png ../../../media/icons/neotux.png In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Database (<a2>DBI</a2>) for authentication, users and/or password modules. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir "base de données" (<a2>DBI</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. Notifications system Systèmes de notification Then, go in <c0>Radius parameters</c0>: Ensuite, aller dans les <c0>paramètres Radius</c0>: if a user can access directly to the hidden application, it can bypass <a0>LL::NG</a0> protection Si un utilisateur peut accéder directement à l'application cachée, peut contourner la protection de <a0>LL::NG</a0> Then you got this value inside the Auth-Roles header: On les obtient dans l'en-tête Auth-Roles : applications:sympa_logo.png applications:sympa_logo.png Using notification system Utiliser le système de notification <s2>require</s2> Lemonldap::NG::Portal::SharedConf; <s2>require</s2> Lemonldap::NG::Portal::SharedConf; Skin rules Règle du thème /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots lemonldap-ng-testpage.png lemonldap-ng-testpage.png Sessions are stored using <a0>Apache::Session</a0> modules family. Les sessions sont stockées en utilisant les modules de la famille <a0>Apache::Session</a0>. ../pages/documentation/1.4/authfacebook.html ../pages/documentation/1.4/authfacebook.html The configuration is done in config.php: La configuration est effectuée via config.php: <s0>List</s0>: domains list (comma separated values) <s0>Liste</s0> : liste des domaines (séparés par des virgules) Backend Backend → When you upgrade from Debian Lenny with customized index.pl files, you must upgrade them. → Lors d'une mise à jour d'une Debian Lenny avec un fichier index.pl personnalisé, il faut le mettre à jour. http://sourcesup.cru.fr/projects/perlcas/ http://sourcesup.cru.fr/projects/perlcas/ Using this, we can do a very simple interoperability system between 2 organizations using two <a0>LL::NG</a0> structures: En utilisant ce système, on peut avoir une simple interopérabilité entre 2 organisations utilisant chacune leur système <a0>LL::NG</a0> : String::Random String::Random <s0>Authentication filter</s0>: Filter to find user from its login (default: <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) <s0>Filtre d'authentication</s0> : filtre pour trouver l'utilisateur à partir de son login (défaut : <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) High Availability Haute disponibilité reloadTime reloadTime If no proxied services defined, <a0>CAS</a0> authentication will not activate the <a1>CAS</a1> proxy mode. Si aucun service proxifié n'est défini, l'authentification <a0>CAS</a0> n'activera pas le mode proxy <a1>CAS</a1>. ../../../media/documentation/manager-formreplay-newdata.png ../../../media/documentation/manager-formreplay-newdata.png http://perldoc.perl.org/functions/exit.html http://perldoc.perl.org/functions/exit.html <a12>portalcustom</a12><br13/> <a12>portalcustom</a12><br13/> http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel <a0>CDA</a0> activation Activation du <a0>CDA</a0> Validation of the session: external user has now a local session Validation de la session : l'utilisateur externe dispose ainsi d'un session locale After configuring <a0>SAML</a0> Service, you can export metadata to your partner Identity Provider. Après avoir configuré le service <a0>SAML</a0> Service, exporter les metadatas vers le fournisseur d'identité partenaire. This mode allow to test LemonLDAP::NG without any third-party software. Ce mode permet de tester LemonLDAP::NG sans aucun autre programme tiers. Configuration is in /etc/lemonldap-ng La configuration se trouve dans /etc/lemonldap-ng Then, go in <c0>OpenID parameters</c0>: Ensuite, aller dans les <c0>paramètres OpenID</c0> : You can change the separator with the <c2>fileNameSeparator</c2> option, and set another value, for example <c3>@</c3>. On peut changer ce séparateur en changeant la valeur de l'option <c2>fileNameSeparator</c2> par exemple <c3>@</c3>. 'cache_root' => '/tmp',? 'cache_root' => '/tmp',? We suppose that LimeSurvey is installed in /var/www/html/limesurvey On suppose que LimeSurvey est installé dans /var/www/html/limesurvey Convert::PEM Convert::PEM Main parameters Paramètres principaux Then go in Manager, <c0>Virtual Hosts</c0> » <e1>virtualhost</e1> » <c2>Form replay</c2> and click on <c3>Add POST <a4>URL</a4></c3>. Aller ensuite dans le manager, <c0>Hôtes virtuels</c0> » <e1>hôte virtuel</e1> » <c2>Rejeu de formulaires</c2> et cliquer sur <c3>Nouvelle <a4>URL</a4> POST</c3>. #perl_auto-protected_cgi #perl_auto-protected_cgi service_id lemonldapng service_id lemonldapng ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> You can also configure the authentication level for this module. il est également possible de configurer le niveau d'authentification pour ce module. <s77>//"userobm_account_dateexp" => ,</s77> <s77>//"userobm_account_dateexp" => ,</s77> http://fedoraproject.org/wiki/EPEL/ http://fedoraproject.org/wiki/EPEL/ lemonldap_ng_session_explorer_1340022388573.png lemonldap_ng_session_explorer_1340022388573.png Create table: Créer la table: If no value, the default NameID format is Email. Si aucune valeur n'est indiquée, le format de NameID par défaut est Email. Form replay Rejeu de formulaires Manager theme Thème du manager <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> Go to the Manager and <a0>create a new virtual host</a0> for MediaWiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Mediawiki. logos:logo-ul.png logos:logo-ul.png http://fr.lutece.paris.fr http://fr.lutece.paris.fr <c0>deny</c0>: nobody is welcomed <c0>deny</c0>: personne n'est autorisé SAML service configuration Configuration du service SAML Each SREG attribute will be associated to a user session key. Chaque attribut SREG est associé à une clef de session utilisateur. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Yubikey for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Yubikey comme module d'authentication. LimeSurvey configuration Configuration de LimeSurvey You can also add a condition. Il est possibe d'ajouter une condition. XSS attack detected XSS attack detected LinuxFR LinuxFR Standards attributes, like uid, cn or mail, are often enough to configure access rules and headers. Les attributs standards, tels uid, cn ou mail, sont souvent suffisant pour configurer les règles d'accès et en-têtes. CAS CAS <s144>//"userobm_nomade_perms" => ,</s144> <s144>//"userobm_nomade_perms" => ,</s144> ^/(css|js)/ ^/(css|js)/ <s0>SREG mapping</s0>: link between SREG attributes and session keys (<s1><a2>see below</a2></s1>). <s0>Associations SREG</s0> : liens entre les attributs SREG et les clefs de session (<s1><a2>voir ci-dessous</a2></s1>). ../../documentation/1.4/portalcustom.html#other_parameters ../../documentation/1.4/portalcustom.html#other_parameters For example, to send it in an header: Par exemple, pour l'envoyer dans un en-tête : GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout You only need a reload <a0>URL</a0> per physical servers, as Handlers share the same configuration cache on each physical server. Une <a0>URL</a0> par serveur physique est nécessaire, car les agents partagent le même cache de configuration pour chaque serveur physique. To change it, go in General Parameters > Advanced Parameters > Notifications > Wildcard for all users, and set for example <c0>alluserscustom</c0>. Pour le changer, aller dans Paramètres généraux > Paramètres avancés > Notifications > Carte blanche pour tous les utilisateurs, et mettre par exemple <c0>alluserscustom</c0>. Changing the domain value will not update other configuration parameters, like virtual host names, portal <a0>URL</a0>, etc. Changer la valeur du domaine ne met pas à jour les autres paramètres tels les noms d'hôtes virtuels, l'<a0>URL</a0> du portail, etc... tchemineau@example.com tchemineau@example.com <s25># another HTML code</s25> <s26>}</s26> <s25># autre code HTML</s25> <s26>}</s26> Menu modules Modules du menu LemonLDAP::NG 1.0 release Sortie de LemonLDAP::NG 1.0 Lemonldap::NG::Common Lemonldap::NG::Common You will need to collect all attributes needed to create a user in OBM, this includes: Il faut collecter tous les attributs nécessaires pour créer un compte OBM : Build <a0>cookie(s)</a0> Construit le ou les <a0>cookies</a0> Sybase Sybase Below are documented internal variables. Ci-dessous sont documentées les variables internes. Common Domain Cookie Domaine commun de cookie $_auth $_auth Configure Sympa virtual host like other <a0>protected virtual host</a0> but protect only magic authentication <a1>URL</a1>. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais ne protéger que l'authentification magique. On Debian/Ubuntu: Sur Debian/Ubuntu : Security Sécurité ../../documentation/1.4/applications.html ../../documentation/1.4/applications.html Use <a0>our own Debian repository</a0>. Utiliser <a0>votre propre dépôt Debian</a0>. <s0>Requested authentication context</s0>: this context is declared in authentication request. <s0>Contexte d'authentification demandé</s0> : ce contexte est déclaré dans la requête d'authentification. /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic ../../documentation/1.4/prereq.html#yum ../../documentation/1.4/prereq.html#yum <s0>apply</s0>: reload <a1>URL</a1> for distant Hanlders <s0>apply</s0> : les <a1>URL</a1> de rechargement des agents distants The Manager displays main branches: Le manager affiche des branches principales : Kinematics Cinématique <s0>end</s0>: End date (GMT) <s0>end</s0>: date de fin (GMT) ../../../../media/applications/limesurvey_logo.png ../../../../media/applications/limesurvey_logo.png <s0>Manager</s0>: used to manage LemonLDAP::NG configuration and to explore sessions. <s0>Manager</s0>: utilisé pour gérer la configuration LemonLDAP::NG et explorer les sessions. Security Assertion Markup Language Security Assertion Markup Language See also <a0>general kinematics presentation</a0>. Voir aussi la <a0>présentation de la cinématique générale</a0>. portalOpenLinkInNewWindow portalOpenLinkInNewWindow High availability Haute disponibilité <s3># DocumentRoot</s3> <s3># DocumentRoot</s3> documentation:1.4:applications:limesurvey documentation:1.4:applications:limesurvey http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ applications:tomcat_logo.png applications:tomcat_logo.png ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../pages/documentation/1.1/resetpassword.html ../pages/documentation/1.1/resetpassword.html Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! You need <a0>Net::Twitter</a0> package, with a very recent version (>3). Vous devez installer une version récente (>3) du paquet <a0>Net::Twitter</a0>. Extended attributes and object classes use this prefix: 1.3.6.1.4.1.10943.10.2. Les attributs étendus et classes d'objet utilisent ce préfixe : 1.3.6.1.4.1.10943.10.2. <a0>CAS</a0> Session backend options Options du module de stockage <a0>CAS</a0> Prepare the LDAP server and the LL::NG configuration file Préparer le serveur LDAP et le fichier de configuration LL::NG RMLL/LSM RMLL/LSM documentation:1.4:extendedfunctions ↵ documentation:1.4:extendedfunctions ↵ <a0>LL::NG</a0> provides a special function named <a1>basic</a1> to build this header. <a0>LL::NG</a0> fournit une fonction spéciale nommée <a1>basic</a1> pour construire cet en-tête. Example: <a2>http://auth.example.com</a2> Exemple: <a2>http://auth.example.com</a2> dbiUserChain dbiUserChain Double cookie Double cookie logos:logo_ministere_justice.jpg logos:logo_ministere_justice.jpg wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz You can now use your function in a macro, an header or an access rule, for example: Les fonctions peuvent être utilisées dans une macro, un en-tête ou une règle d'accès, par exemple: It will be prompted if you generate keys, else you can set it in the <c0>Private key password</c0>. Il vous sera demandé à la génération de la clef ou vous pouvez l'entrer dans le champ <c0>Mot-de-passe de la clef privée</c0>. Next run ant command: Lancer ensuite la commande ant : documentation:lemonldapng-sso.png documentation:lemonldapng-sso.png timeout timeout Main <a0>external databases</a0> are: Les principales <a0>bases de données externes</a0> sont : URL contains a non protected host URL contains a non protected host Redis session backend Module de stockage des sessions Redis It manages both authentication and authorization and provides headers for accounting. Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. <s0>VHOSTLISTEN</s0>: how listen parameter is configured for virtual hosts in Apache (default: *:80) <s0>VHOSTLISTEN</s0> : comment est configuré le paramètre d'écoute des hôtes virtuels dans Apache (défaut : *:80) CAS (authentication module) CAS (module d'authentification) You need <a0>Net::Facebook::Oauth2</a0> package. La paquet <a0>Net::Facebook::Oauth2</a0> est nécessaire. MRTG monitoring Supervision MRTG icons:flags:us.png icons:flags:us.png remoteCookieName remoteCookieName documentation:googleapps-menu.png documentation:googleapps-menu.png If Multi is used for authentication and user database, it will try to use the same module. Si Multi est utilisé pour l'authentification et la base utilisateurs, il essaiera d'utiliser le même module. ^/(?i)index.php\?.*access=admin ^/(?i)index.php\?.*access=admin <s0>Display</s0>: As Google Apps is not a protected application, set to <c1>On</c1> to always display it <s0>Display</s0> : comme Google Apps n'est pas une application protégée, indiquer <c1>On</c1> pour toujours l'afficher Offline Hors ligne http://www.slideshare.net/coudot/lemonldapng-un-websso-libre http://www.slideshare.net/coudot/lemonldapng-un-websso-libre /_detail/screenshots/1.0/dark/password.png?id=screenshots /_detail/screenshots/1.0/dark/password.png?id=screenshots <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> This is a security point, to prevent someone to create a session by sending custom headers. Il s'agit d'un élément de sécurité pour éviter à quelqu'un de créer une session en envoyant des en-têtes personnalisés. <a0>SAML</a0> service configuration is a common step to configure <a1>LL::NG</a1> as <a2>SAML SP</a2> or <a3>SAML IDP</a3>. La configuration du service <a0>SAML</a0> est une étape commune pour configurer <a1>LL::NG</a1> comme <a2>fournisseur de service SAML (SP)</a2> ou <a3>fournisseur d'identité SAML (IDP)</a3>. <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 $uid eq “root” $uid eq “root” ../../../documentation/1.4/configvhost.html ../../../documentation/1.4/configvhost.html Google Apps has a configuration parameter to redirect user on a specific <a0>URL</a0> after Google Apps logout (see <a1>Google Apps control panel</a1>). Google Apps ne dispose pas de paramètre de configuration pour rediriger les utilisateurs vers une <a0>URL</a0> spécifique après la déconnexion Google Apps (voir <a1>Google Apps control panel</a1>). New code: Nouveau code: http://www.jdll.org/node/206 http://www.jdll.org/node/206 You should now use the Manager to configure all <a0>applications and categories</a0>, and then comment or remove the <c1>applicationList</c1> parameter from <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. Il est désormais possible d'utiliser le manager pour configurer toutes les <a0>applications et catégories</a0>, ensuite commenter ou supprimer le paramètre <c1>applicationList</c1> de <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. <a3>XSS</a3> checks will still be done with warning in logs, but this will not prevent the process to continue. Le contrôle <a3>XSS</a3> continuera à être effectué mais avec seulement des avertissements dans les journaux sans empêcher le processus de continuer. Gaultier HUBERT Gaultier HUBERT applications:liferay_logo.png applications:liferay_logo.png Form page <a0>URI</a0>: /login.php <a0>URI</a0> de la page de formulaire : /login.php Google Apps Google Apps Login history Historique de connexion <s0>syntax</s0> (optional): <c1>hexadecimal</c1> (default) or <c2>octetstring</c2> <s0>syntax</s0> (optionnel) : <c1>hexadecimal</c1> (défaut) ou <c2>octetstring</c2> <s0><a1>SSO</a1> and Application logout</s0>: the request is forwarded to application and <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1> et applicative</s0>: la requête est transmise à l'application et la session <a2>SSO</a2> est fermée <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Manager interface</s0>: all messages are grouped in lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. L'<s0>interface du Manager</s0>: tous les messages sont regroupés dans lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. ../pages/documentation/1.1/redirections.html ../pages/documentation/1.1/redirections.html SMTPAuthPass SMTPAuthPass Override logging functions Surcharger les fonctions de journalisation <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> documentation:1.4:loginhistory documentation:1.4:loginhistory Dates Dates X509 X509 Integrate existing applications Integrer des applications existantes Available parameters are: Paramètres disponibles : Go to the Manager and <a0>create a new virtual host</a0> for Bugzilla. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Bugzilla. Delay between check of local configuration Delai entre 2 examens de la configuration locale PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm documentation:manager-saml-service-authn-contexts.png documentation:manager-saml-service-authn-contexts.png ../../documentation/1.4/performances.html#apachesession_performances ../../documentation/1.4/performances.html#apachesession_performances mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ <a0>CDA</a0> is set if the handler is not in the same domain Le <a0>CDA</a0> ne fonctionne que si l'agent n'est pas dans le même domaine This allows to use different databases for these process. Ceci autorise à utiliser deux bases de données différentes pour ces deux processus. Erwan LEGALL Erwan LEGALL POD unit tests Tests unitaires POD Secure Token Handler Agent jeton sécurisé Edit configuration Editer la configuration <a18>presentation</a18><br19/> <a18>presentation</a18><br19/> 0.9.4_password_reset.png 0.9.4_password_reset.png <s0>Renew authentication</s0>: force authentication renewal on <a1>CAS</a1> server <s0>Renouveler l'authentification</s0> : force le renouvellement de l'authentification sur le serveur <a1>CAS</a1> <s0>dbiChain</s0>: <a1>DBI</a1> connection. <s0>dbiChain</s0> : chaîne de connexion <a1>DBI</a1>. ../pages/documentation/1.1/idpcas.html ../pages/documentation/1.1/idpcas.html https https Logout forward Propagation de déconnexion <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0>: <a1>DN</a1> of AD technical account <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0> : <a1>DN</a1> du compte AD technique documentation:latest:prereq documentation:latest:prereq Cookie security Sécurité du cookie Operating System Système d'exploitation Example 1: two tables Exemple 1 : deux tables documentation:lasso.png documentation:lasso.png Modules Modules <s0>Use rule</s0>: a rule to allow user to use this module, set to <c1>1</c1> to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Email::Date::Format Email::Date::Format ../../../media/documentation/manager-saml-idp-list.png ../../../media/documentation/manager-saml-idp-list.png /_detail/icons/personal.png?id=contact /_detail/icons/personal.png?id=contact You must also install the database connector (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) Il faut également installer le connecteur à la base de données (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) ../pages/documentation/conferences.html ../pages/documentation/conferences.html <s162>//"userobm_nomade_datebegin" => ,</s162> <s162>//"userobm_nomade_datebegin" => ,</s162> Configuration backend parameters Paramètres des backends de configuration To summary available options: Pour résumer les options disponibles : External user clicks to be redirected to the remote type portal L'utilisateur externe clique pour être redirigé vers le second portail user email Email de l'utilisateur A little macro: Une petite macro : <s5>AuthType</s5> Basic <s5>AuthType</s5> Basic <s0>Mail sender</s0>: address seen in the “From” field (default: noreply@[DOMAIN]) <s0>Expéditeur</s0> : adresse vue dans le champ “From” (défaut : noreply@[DOMAINE]) User password is now available in <c0>$_password</c0> variable. Le mot-de-passe utilisateur est désormais disponible dans la variable <c0>$_password</c0>. With the above solution, all the Drupal site will be protected, so no anonymous access will be allowed. Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé. Authentication with Kerberos Authentification avec Kerberos A web browser launched from the computer (to access localhost) Un navigateur web lançé depuis ce serveur (pour accéder à la boucle locale) ../../documentation/1.4/start.html#sessions_databases ../../documentation/1.4/start.html#sessions_databases using Apache authentication system (used for <a0>SSL</a0>, <a1>Kerberos</a1>, <a2>HTTP basic authentication</a2>, …) utilisant le système d'authentification d'Apache (utilisé pour <a0>SSL</a0>, <a1>Kerberos</a1>, l'<a2>authentification HTTP basique</a2>, …) Translators Translators <s87>//"userobm_local" => ,</s87> <s87>//"userobm_local" => ,</s87> These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>. Cesparamètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>. <s0>Value</s0>: SREG attribute name: <s0>Valeur</s0> : noms d'attributs SREG : <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> Zimbra also features archiving and discovery for compliance. Zimbra propose aussi l'archivage et discovery for compliance. Go to the Manager and <a0>create a new virtual host</a0> for Liferay. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Liferay. Official repository Dépôt officiel <s0>Page <a1>URL</a1></s0>: <a2>URL</a2> of password reset page (default: [PORTAL]/mail.pl) <s0><a1>URL</a1> de la page</s0> : <a2>URL</a2> de la page de réinitialisation de mot-de-passe (défaut : [PORTAL]/mail.pl) http://search.cpan.org/perldoc?Apache::Session::Browseable http://search.cpan.org/perldoc?Apache::Session::Browseable ~150 ~150 one unsecured for other applications un non-sécurisé pour les autres applications timezone timezone You can use #PORTAL# in values to replace the portal <a0>URL</a0>. Vous pouvez utiliser le mot clef #PORTAL# dans les valeurs pour remplacer l'<a0>URL</a0> du portail. </<s4>IfModule</s4>> </<s4>IfModule</s4>> Do not restrict /public/ Ne pas restreindre /public/ <s21>Allow</s21> from <s22>all</s22> <s21>Allow</s21> from <s22>all</s22> Authentication, Authorization and Accounting (AAA) mechanisms Mécanismes d'authentification, d'autorisation et de traçabilité (AAA) Zimbra can be deployed on-premises or as a hosted email solution. Zimbra peut être déployé sur site ou hébergé telle une messagerie. Slave Slave cd trunk cd trunk Mail From address Adresse source des messages documentation:1.4:jsonfileconfbackend documentation:1.4:jsonfileconfbackend LemonLDAP::NG can also use syslog (only for user actions). LemonLDAP::NG peut également utiliser syslog (seulement pour les actions utilisateurs). mailreset_step2.png mailreset_step2.png <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: catch logout request <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: intercepte les requêtes de déconnexion http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 American Standard Code for Information Interchange American Standard Code for Information Interchange For example, we change it to <c2>ow2.org</c2>: Par exemple, pour le changer en <c2>ow2.org</c2>: Configure the portal to use the remote <a0>LL::NG</a0> structure. Configurer le portail pour qu'il utilise le système <a0>LL::NG</a0> distant. ../../documentation/1.4/applications/liferay.html ../../documentation/1.4/applications/liferay.html <s0>APACHEGROUP</s0>: group running Apache <s0>APACHEGROUP</s0>: groupe de fonctionnement d'Apache Use extended functions Utiliser les fonctions étendues field varchar(255) NOT NULL DEFAULT '', field varchar(255) NOT NULL DEFAULT '', ../../documentation/1.4/notifications.html ../../documentation/1.4/notifications.html email email /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... Identity Provider Fournisseur d'identité <a0>Sympa</a0> is a mailing list manager. <a0>Sympa</a0> est un gestionnaire de listes de diffusion. <text>: paragraph to display: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifText”>…</p> <text> : paragraphe à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifText”>…</p> http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>: Ces paramètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>: lemonldap-ng-portal-appslist.png lemonldap-ng-portal-appslist.png Use custom functions Utiliser les fonctions personnalisées ../../../media/documentation/manager-saml-private-key.png ../../../media/documentation/manager-saml-private-key.png sudo make postconf sudo make postconf Display applications list Affiche la liste des applications <a0>Session restrictions</a0> will not work Les <a0>restrictions de session</a0> ne fonctionnent pas Else, all data are copied in the session database. Sinon, toutes les données sont copiées. Net::OpenID::Server > 1.00 Net::OpenID::Server > 1.00 _idp _idp You have to update them by yourself. Il faut les mettre à jour soi-même. Then create symbolic links on template files, as you might not want to rewrite all <a0>HTML</a0> code (else, do as you want). Créer ensuite des liens symboliques pour éviter de réécrire tous les fichiers <a0>HTML</a0> (sauf si c'est souhaité). <s0>Change password <a1>URL</a1></s0>: where users can change their password. <s0>Change password <a1>URL</a1></s0>: où les utilisateurs peuvent changer leur mot-de-passe. <s0>sessions/</s0>: read only access to sessions (enough for distant Handlers) <s0>sessions/</s0> : accès en lecture seule aux sessions (suffisant pour les agents distants) To refresh it, you have to set an handler on the same server to use the refresh mechanism or to restart the server after each configuration change. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement. <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> 'cache_depth' => 5,? 'cache_depth' => 5,? <s6># ...</s6> } <s6># ...</s6> } You can add this object class to any entry of your directory. Cette classe d'objets peut être ajoutée à toute entrée de l'annuaire. ../../documentation/1.4/applications/obm.html ../../documentation/1.4/applications/obm.html <s0>RDBI</s0> : triple store storage <s0>RDBI</s0> : stockage en triplets references.html references.html /_detail/icons/knewsticker.png?id=contact /_detail/icons/knewsticker.png?id=contact ../../documentation/1.4/performances.html#handler_performance ../../documentation/1.4/performances.html#handler_performance The common domain is used by <a0>SAML SP</a0> to find an Identity Provider for the user, and by <a1>SAML IDP</a1> to register itself in user's IDP list. Le domaine commun est utilisé par le <a0>SP SAML</a0> pour trouver le fournisseur d'identité de l'utilisateur et par l'<a1>IdP SAML</a1> pour s'enregistrer dans la liste des IDP. Several extensions allows to configure <a0>SSO</a0> on MediaWiki: Plusieurs extensions permettent de configurer le <a0>SSO</a0> dans MediaWiki : <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s0>Attribute to store</s0>: the session key that will be stored in Memcached. <s0>Attribut à stocker</s0> : la clef de session qui doit être stockée dans Memcached. Conferences Conférences ../../../media/documentation/lemonldap-ng-packages.png ../../../media/documentation/lemonldap-ng-packages.png Run this to update packages cache: Lancer ceci pour rafraîchir le cache : Menu modules display Affichage des modules du menu http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 Redirection to the portal of the main area and normal authentication (if not done before) Redirection vers le portail principal et authentification normale (sauf si déjà faite) Close kerberos connection: Fermer la connexion kerberos : Roles are entries, below branches representing applications. Les rôles sont des entrées, les branches subordonnées représentant les applications. You can enter a password to protect private key with a password. Vous pouvez entrer un mot de passe de protection de la clef privée. 0.9.3 0.9.3 0.9.4 0.9.4 A click on a key will display the associated value. Un click sur la clef affiche la valeur associée. http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 BrowserID BrowserID secureTokenHeader secureTokenHeader mailSessionKey mailSessionKey authentication authentification <a0>URL</a0> for mail reset <a0>URL</a0> pour la réinitialisation par courriel IO::String IO::String You can also adapt Apache access control: On peut également adapter le contrôle d'accès d'Apache : http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://wiki.zimbra.com/index.php?title=Preauth http://wiki.zimbra.com/index.php?title=Preauth macros macros Go on Drupal administration interface and enable the Webserver Auth module. Aller dans l'interface administration et activer le module Webserver Auth. vi /etc/apt/sources.list.d/lemonldap-ng.list vi /etc/apt/sources.list.d/lemonldap-ng.list Portal Portail icons:terminal.png icons:terminal.png Nantes Nantes Drivers Drivers Proxy portal <a0>URL</a0> <a0>URL</a0> du portail mandataire /usr/share/lemonldap-ng/bin/lmConfigEditor /usr/share/lemonldap-ng/bin/lmConfigEditor First check and install the <a0>prerequisites</a0>. D'abord vérifier et installer les <a0>pré-requis</a0>. OBM is shipped with a <a0>LL::NG</a0> plugin with these features: OBM est livré avec un composant <a0>LL::NG</a0> apportant les fonctionnalités suivantes : _userDB _userDB These parameters can be overwritten in LemonLDAP::NG ini file, in the section <c0>apply</c0>. Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section <c0>apply</c0>. <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> Macros and groups are stored in session database. Les macros et les groupes sont stockées dans la base de données des sessions. External portal Portail externe Modify the portal virtual host: Modifier l'hôte virtuel du portail : Read-only functions (index.pl/sessions or index.pl/adminSessions paths): Fonctions en lecture seule (chemins index.pl/sessions ou index.pl/adminSessions) : Please use lmMigrateConfFiles2ini to migrate your menu configuration Please use lmMigrateConfFiles2ini to migrate your menu configuration You can use Null backend to bypass some authentication process steps. Le backend Null peut être utilisé pour sauter des étapes du processus d'authentication. globalStorageOptions globalStorageOptions User name session field Champ de session stockant le nom d'utilisateur Installation on RHEL/CentOS with packages Installation sur RHEL/CentOS avec les paquets Portal URL URL du portail TikiWiki, … TikiWiki, … PerlSetVar LmProxyPass http://APPLICATION/ PerlSetVar LmProxyPass http://APPLICATION/ activate <a0>CDA</a0> in <c1>General Parameters</c1> » <c2>Cookies</c2> » <c3>Multiple domains</c3> activer le <a0>CDA</a0> dans <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> All <a1>Apache::Session</a1> style modules are useable except for some features. Tous les modules de type <a1>Apache::Session</a1> sont utilisables excepté pour quelques fonctionnalités. By default, user will be redirected on portal if no <a0>URL</a0> defined, or on the specified <a1>URL</a1> if any. Par défaut, l'utilisateur est redirigé vers le portail si aucune <a0>URL</a0> n'est définie ou vers l'<a1>URL</a1> indiquée sinon. ldap://localhost ldap://localhost The <a0>LDAP schema extension</a0> can be used to store these values L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker ces valeurs. start Commencer SSOExtensions::function1 SSOExtensions::function1 ../../documentation/1.4/redirections.html ../../documentation/1.4/redirections.html LemonLDAP::NG - Offline Version LemonLDAP::NG - Version hors-ligne /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <a0>SSO</a0> on OBM web interface <a0>SSO</a0> sur l'interface web d'OBM Package GPG signature Signature GPG des paquets <br0/> <br0/> portalAntiFrame portalAntiFrame documentation:1.4:memcachedsessionbackend documentation:1.4:memcachedsessionbackend Portal performances Performances du portail tree_dark.png tree_dark.png Consent to share attribute <e0>id</e0> trough OpenID Consentement de partage de l'attribut <e0>id</e0> via OpenID ldapChangePasswordAsUser ldapChangePasswordAsUser http://en.wikipedia.org/wiki/Outlook_Web_App http://en.wikipedia.org/wiki/Outlook_Web_App As described in <a0>performances chapter</a0>, you can use macros, local macros,… Comme indiqué au <a0>chapître performances</a0>, on peut utiliser des macros, macros locales,… Error log: all messages emitted by the program, depending on the configured log level Journaux d'erreur (ErrorLog) : tous les messages emis par le programme, suivant le niveau de journalisation configuré (LogLevel) PostGreSQL PostGreSQL http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN documentation:1.4:applications:tomcat documentation:1.4:applications:tomcat ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> Configuration backend can be set in the <a0>local configuration file</a0>, in <c1>configuration</c1> section. Le backend de configuration peut être indiqué dans le <a0>fichier local de configuration</a0>, dans la section <c1>configuration</c1>. http://www.slideshare.net/coudot/rmll-2011-websso http://www.slideshare.net/coudot/rmll-2011-websso ../../documentation/1.4/authldap.html#schema_extension ../../documentation/1.4/authldap.html#schema_extension It is recommended to secure the channel between reverse-proxies and application to be sure that only request coming from the <a0>LL::NG</a0> protected reverse-proxies are allowed. Il est donc recommandé de sécurisé le canal entre le proxy inverse et l'application pour être sûr que seules les requêtes issues des proxies inverses protégés par <a0>LL::NG</a0> sont autorisées. These files must be included in Apache configuration, either with <c0>Include</c0> directives in <c1>httpd.conf</c1> (see <a2>quick start example</a2>), or with symbolic links in Apache configuration directory (like <c3>/etc/httpd/conf.d</c3>). Ces fichiers doivent être inclus dans la configuration d'Apache, soit par des directives <c0>Include</c0> dans le fichier <c1>httpd.conf</c1> (voir <a2>démarrage rapide</a2>), ou via un lien symbolique dans de répertoire de configuration d'Apache (type <c3>/etc/httpd/conf.d</c3>). Protection scheme Schéma de protection /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots Then go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Password management</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Gestion des mots-de-passe</c2> : Uncheck it to disable <a1>SAML</a1> authentication (for example, if your Identity Provider is down). Le désélectionner désactive l'authentification <a1>SAML</a1> (à utiliser, si votre fournisseur d'identité est hors service). Alphabetical Index Index alphabétique Since version 0.9.4, LemonLDAP::NG can be used to notify some messages to users: if a user has a message, the message will be displayed when he will access to the portal. Depuis la version 0.9.4, LemonLDAP::NG peut être utilisé pour notifier des messages aux utilisateurs : si un utilisateur a un message, celui-ci est affiché lorsqu'il accède au portail. ../../../../media/applications/tomcat_logo.png ../../../../media/applications/tomcat_logo.png 1800+ 1800+ The real accounting has to be done by the application itself since <a0>SSO</a0> logs can not understand transactions. La réelle traçabilité doit être faite par l'application elle-même car les journaux du <a0>SSO</a0> ne peuvent interprêter les transactions. <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections lemonldap-ng-changes@ow2.org lemonldap-ng-changes@ow2.org Schema Schéma Secure Token allow requests in error Le jeton sécurisé autorise les requêtes en cas d'erreur ../media/icons/chat.png ../media/icons/chat.png Offline 0.1 Hors-ligne 0.1 ~100 ~100 <s0>Check <a1>SSO</a1> message signature</s0>: check <a2>SSO</a2> message signature <s0>Vérification de la signature des messages <a1>SSO</a1></s0> : vérifie la signature des messages <a2>SSO</a2> ../pages/documentation/1.1/passwordstore.html ../pages/documentation/1.1/passwordstore.html ../../../../media/applications/spring_logo.png ../../../../media/applications/spring_logo.png You should be able to find a package for your distribution with a little search on the web. Il est possible de trouver un paquet pour beaucoup de distributions avec une petite recherche sur le web. Then use openssl to generate an auto-signed certificate: Ensuite, utiliser openssl pour générer un certificat auto-signé : # Values: TEXT # ignoreregex = # Values: TEXT # ignoreregex = documentation:1.4:authsaml documentation:1.4:authsaml <s0>Target <a1>URL</a1></s0>: /process.php <s0><a1>URL</a1> cible</s0> : /process.php aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Each configuration will be represented as an entry, which structural objectClass is <c0>applicationProcess</c0>. Chaque configuration est représentée par une entrée, dont l'objectClass structurel est <c0>applicationProcess</c0>. You can use different type of access: <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> for servers in secured network and <a3>SOAP</a3> for remote servers. On peut utiliser différent typed d'accès : <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> pour les serveurs se trouvant sur le réseau sécurisé et <a3>SOAP</a3> pour les autres. Yverdon Yverdon When the user accept the notification, the reference is stored in his persistent session. Lorsque l'utilisateur accepte la notification, la référence est stockée dans ses données de session persistentes. http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU static: 'StaticValue' (a static value) static: 'StaticValue' (une valeur statique) lemonldap-ng-doc: contains <a0>HTML</a0> documentation and project docs (README, etc.) lemonldap-ng-doc : contient la documentation <a0>HTML</a0> et celle du projet (README, etc...) <s0>EXAMPLE.COM</s0>: Kerberos realm <s0>EXAMPLE.COM</s0> : royaume Kerberos skip skip This is the default configuration backend. C'est le backend de configuration par défaut. SSLCertificateKeyFile ... SSLCertificateKeyFile ... <s0>warn</s0> for failed authentications <s0>warn</s0> pour les échecs d'authentifications Authentication protocols Authentication protocols ../../../media/applications/dokuwiki_logo.png ../../../media/applications/dokuwiki_logo.png ../../../../media/applications/zimbra_logo.png ../../../../media/applications/zimbra_logo.png Cross Site Scripting Cross Site Scripting http://www.jasig.org/cas/protocol http://www.jasig.org/cas/protocol Comments can be used to order your rules: rules are applied in the alphabetical order of comment (or regexp in there is no comment). Les commentaires peuvent être utilisés pour ordonner les règles : elles sont appliquées dans l'ordre alphabétique des commentaires (ou des expressions régulières à défaut de commentaire). Contributions Contributions http://lanyrd.com/2011/confoo/sddcy/ http://lanyrd.com/2011/confoo/sddcy/ <a0>LL::NG</a0> can protect any Apache hosted application including Apache reverse-proxy mechanism. <a0>LL::NG</a0> peut protéger toute application hébergée par Apache y compris le mécanisme de proxy inverse d'Apache. <s21># special html code for admins</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s21># code html spécial pour les administrateurs</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s0>all</s0>: parameters for all modules <s0>all</s0> : paramètres pour tous les modules For example, in portal/index.pl: Par exemple, dans portal/index.pl: User table Table utilisateurs See <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> for more information. Voir <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> pour plus d'information. EXAMPLE.COM = { EXAMPLE.COM = { Mail, Agenda, Groupware Mail, Agenda, Groupware documentation:1.4:authwebid documentation:1.4:authwebid yubikeyPublicIDSize yubikeyPublicIDSize Add it to trustedDomains (or set <c0>*</c0> in trustedDomains to accept all). L'ajouter à trustedDomains (ou mettre <c0>*</c0> dans trustedDomains pour tout accepter). Configure attributes: Configurer les attributs : Insertion example in Perl Exemple d'insertion en Perl If one is missing, the user is not created. Si l'un est manquant, le compte ne sera pas créé. So to improve performances, avoid too complex rules by using the macro or the groups or local macros. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales. Then use the <c0>SiteMinder</c0> tab to configure <a1>SSO</a1>: Utiliser ensuite le paragraphe <c0>SiteMinder</c0> pour configurer le <a1>SSO</a1> : <s1>SetHandler</s1> perl-<s2>script</s2> <s1>SetHandler</s1> perl-<s2>script</s2> documentation:1.4:passwordstore documentation:1.4:passwordstore WebID WebID These regular expressions read the 'ou' value of the <a0>DN</a0> of the role of the concerned application. Ces expressions régulières lisent la valeur 'ou' du <a0>DN</a0> du rôle de l'application concernée. Reply address Adresse de réponse and edit /etc/fail2ban/filter.d/lemonldap.conf et editer /etc/fail2ban/filter.d/lemonldap.conf Save the configuration and exit the Manager. Sauver la configuration et quitter le manager. Now configure all <a0>SAML</a0> parameters: Puis configurer tous les paramètres <a0>SAML</a0> : /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice See the following chapters: Voir les chapîtres suivants : ----</s156> ----</s156> /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots include /usr/share/lemonldap-ng/ressources/sso.schema include /usr/share/lemonldap-ng/ressources/sso.schema documentation:1.4:performances documentation:1.4:performances Header value Valeur d'en-tête DataSource DataSource File location Emplacement du fichier documentation:features documentation:features <s0>Check last logins</s0>: displays a checkbox on login form, allowing user to check his login history right after opening session <s0>Vérifier l'historique</s0> : affiche une case à cocher sur le formulaire d'authentification permettant à l'utilisateur d'examiner son historique de connexion après l'ouverture de la session Portal produce a <c0>notice</c0> message in <a1>Apache logs or syslog</a1> when a user authenticates (or fails to authenticate) and logs out. Le portail génère un message de niveau <c0>notice</c0> <a1>dans les journaux d'Apache ou dans syslog</a1> lorsqu'un utilisateur d'authentifie (ou échoue) ou se déconnecte. ../../documentation/1.4/authcas.html ../../documentation/1.4/authcas.html <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> SHA1 SHA1 ../../documentation/1.4/applications/django.html ../../documentation/1.4/applications/django.html /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice Access rules: check user's right on <a0>URL</a0> patterns Des règles d'accès : examine les droits de l'utilisateur via des expressions sur les <a0>URL</a0> ../pages/documentation/1.1/applications/spring.html ../pages/documentation/1.1/applications/spring.html install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> Register LemonLDAP::NG on partner Identity Provider Enregistrer LemonLDAP::NG dans le fournisseur d'identité partenaire One or more roles (to send to the protected applications) Un ou plusieurs rôles (à envoyer aux applications protégées) No parameters needed. Aucun paramètres n'est requis. Lemonldap::NG handlers use a local cache to store sessions (for 10 minutes). Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). For example, if these rules are used without comments: Par exemple, si ces règles sont utilisées sans commentaires : You can fix default values by editing these values in <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1>: On peut fixer les valeurs par défaut en éditant ces valeurs dans le fichier <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1> : Configure LimeSurvey virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel LimeSurvey comme n'importe quel autre <a0>hôte virtuel protégé</a0>. ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> Portal redirects user on protected application with his session ID as <a0>URL</a0> parameter Portal redirige l'utilisateur vers l'application demandée avec son identifiant de session en paramètre de l'<a0>URL</a0> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Logout forward</c2> and click on <c3>Add a key</c3>, then fill: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Transfert de la déconnexion</c2> et cliquer sur <c3>Ajouter une clef</c3>, renseigner ensuite : You will be prompted. Le message sera affiché. Application parameters: Paramètres des applications : mysuperpassword mysuperpassword <s0>Users</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Utilisateurs</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) Servers Servers /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend This method requires the <c0>msktutil</c0> program on Linux server. Cette méthode nécessite le programme <c0>msktutil</c0> sur le serveur Linux. ../../../../media/documentation/liferay_5.png ../../../../media/documentation/liferay_5.png ../../documentation/1.4/selfmadeapplication.html ../../documentation/1.4/selfmadeapplication.html Change it: Le Changer : documentation:1.4:authbrowserid documentation:1.4:authbrowserid Skin name Nom du thème Body for confirmation mail Corps du message de confirmation https://www.portail.crbn.fr https://www.portail.crbn.fr Session identifier (carried in cookie) Identifiant de session (porté par le cookie) OpenID secret token Secret OpenID If you install packages on 64bits system, create those symbolic links: Pour installer les paquets sur un système 64bits, créeer ces liens symboliques : Java (Spring) Java (Spring) number numero ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers Then, go in <c0>Proxy parameters</c0>: Ensuite, aller dans les <c0>paramètres Proxy</c0> : ../../../media/documentation/manager-saml-namid-formats.png ../../../media/documentation/manager-saml-namid-formats.png Authentication, users and password databases Bases de données d'authentification, des utilisateurs et des mots-de-passe By default, only the configured authentication backend is available for users. Par défaut, seul le backend configuré est accessible aux utilisateurs. Single Sign On cookie, domain and portal URL Cookie SSO, URL du portail et domaine <s0>Key name</s0>: name of the key in LemonLDAP::NG session <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG documentation:lemonldap-ng-packages.png documentation:lemonldap-ng-packages.png /_detail/logos/logo_rbn.png?id=references /_detail/logos/logo_rbn.png?id=references This is a well known security framework for J2EE applications. C'est le très connu framework de sécurité des applications J2EE. <s104>//"userobm_direction" => ,</s104> <s104>//"userobm_direction" => ,</s104> documentation:1.4:applications:bugzilla documentation:1.4:applications:bugzilla https://twitter.com https://twitter.com To use it (with MySQL for example), choose “Apache::Session::Browseable::MySQL” as “Apache::Session module” and use the following parameters: Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants : Use Kerberos with Multiple authentication backend Utiliser Kerberos avec plusieurs backend d'authentification Session backend Module de stockage des sessions Then you can access to user datas On peut ensuite accéder aux données de l'utilisateur Install <a0>Webserver Auth</a0> module, by downloading it, and unarchive it in the drupal modules/ directory. Télécharger et installer le module <a0>Webserver Auth</a0>, en le décompressant dans le répertoire modules/. <s1># DocumentRoot</s1> <s1># DocumentRoot</s1> If you are protecting MediaWiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Mediawiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. documentation:1.4:configlocation ↵ documentation:1.4:configlocation ↵ Expression Expression Check Apache configuration and restart: Vérifier la configuration d'Apache et redémarrer : <a2>idpopenid</a2><br3/> <a2>idpopenid</a2><br3/> <a0>LL::NG</a0> can catch a GET request and transform it internally in a POST request. <a0>LL::NG</a0> peut intercepter uen requête GET et la transformer en interne en requête POST. Indeed, by default, users without logon hours values are rejected. Sinon, par défaut, les utilisateurs sans créneau horaire de connexion sont rejetés. <s0>Reset attribute</s0>: name of password reset attribute (default: pwdReset). <s0>Attribut reset</s0> : nom de l'attribut reset du mot-de-passe (défaut : pwdReset). You can test any <a0>URL</a0> to see if it's protected using testUri(). On peut tester toute <a0>URL</a0> pour voir si elle est protégée en utilisant testUri(). ../../../media/documentation/manager-saml-service-authn-contexts.png ../../../media/documentation/manager-saml-service-authn-contexts.png http://lanyrd.com/2011/ldapcon/sgqdf/ http://lanyrd.com/2011/ldapcon/sgqdf/ Setup Mise en marche In the manager: set <a0>Apache::Session::Redis</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Redis</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse): <s0>Set groups</s0>: request user database to find groups <s0>Installe les groupes</s0> : interroge la base de données utilisateurs pour trouver les groupes <s0>User</s0>: Connection user <s0>Utilisateur</s0> : compte de connexion documentation:latest:writingrulesand_headers documentation:latest:writingrulesand_headers Local cache parameters Paramètres du cache local <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> With dpkg Avec dpkg documentation:lemonldap-ng-architecture.png documentation:lemonldap-ng-architecture.png There are no <e0>global</e0> headers. Il n'y a pas d'en-tête <e0>global</e0>. Role Rôle documentation/current/installdeb.html#official_repository documentation/current/installdeb.html#official_repository dpkg -i liblemonldap-ng-* lemonldap-ng* dpkg -i liblemonldap-ng-* lemonldap-ng* <a0>LL::NG</a0> CGIs <e1>(Portal, Manager,…)</e1> can be used under a <a2>FastCGI system</a2> very easily. Les CGI de <a0>LL::NG</a0> <e1>(portail, manager,…)</e1> peuvent être utilisées facilement dans un environnement <a2>Fast CGI</a2>. ../../documentation/1.4/applications/limesurvey.html ../../documentation/1.4/applications/limesurvey.html useSafeJail useSafeJail ../css/print.css ../css/print.css LemonLDAP::NG configuration (edited by the Manager) is in /var/lib/lemonldap-ng/conf/ La configuration LemonLDAP::NG (editée par le manager) se trouve dans /var/lib/lemonldap-ng/conf/ Little effort is required to translate the encoded string back into the user name and password, and many popular security tools will decode the strings “on the fly”. Un petit effort est requis pour décoder ces chaînes et de nombreux outils de sécurité les décodent à la volée. Userlogout => logout_sso Userlogout => logout_sso secureTokenAttribute secureTokenAttribute For example, the user name Aladdin and password open sesame would be combined as Aladdin:open sesame – which is equivalent to QWxhZGRpbjpvcGVuIHNlc2FtZQ== when encoded in Base64. Par exemple, le nom Aladdin et le mot-de-passe "open sesame" vont être assemblés en "Aladdin:open sesame" – dont l'équivalent est QWxhZGRpbjpvcGVuIHNlc2FtZQ== en Base64. Reload virtual host: Hôte virtuel pour le rechargement : By default, the RelayState session is deleted when it is read. Par défaut, la session RelayState est détruite lorsqu'elle est lue. Configuration reload will then be effective in less than 10 minutes. Le rechargement de la configuration sera effectif en moins de 10 minutes. Then fill all inputs to create the notification. Remplir ensuite tous les champs pour créer la notification. http://fedoraproject.org/wiki/EPEL/FAQ#howtouse http://fedoraproject.org/wiki/EPEL/FAQ#howtouse WSDL file Fichier WSDL Build Construction ../css/all.css ../css/all.css Configuration reload Rechargement de la configuration radiusSecret radiusSecret Liferay administration Administration Liferay https://metacpan.org/release/Web-ID https://metacpan.org/release/Web-ID <a10>portal</a10><br11/> <a10>portal</a10><br11/> updateTime updateTime See the full description of the protocol here: <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> Voir la description complète du protocole ici : <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> <a0>CAS</a0>_url <a0>CAS</a0>_url ../../../media/applications/saplogo.gif ../../../media/applications/saplogo.gif ../../../media/documentation/ha-sessions-configuration.png ../../../media/documentation/ha-sessions-configuration.png Getting sources from SVN repository Obtenir les sources depuis le dépôt SVN <s0>ldapConfBase</s0>: <a1>DN</a1> of configuration branch <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des configurations Configure sessions specificities Configurer les spécificités des sessions <s0># Get attributes (or macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Test if user is member of a Lemonldap::NG group (or LDAP mapped group)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> <s0># Obtenir des attributs (ou macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Tester si l'utilisateur est membre d'un groupe Lemonldap::NG (ou d'un groupe LDAP translaté)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> A <a0>Apache::Session::Browseable::Redis</a0> has been created, it is the faster (except for session explorer, defeated by Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) Un module <a0>Apache::Session::Browseable::Redis</a0> a été créé, c'est le plus rapide (excepté pour l'explorateur de sessions, battu par Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) /_detail/icons/flags/us.png?id=documentation%3Aconferences /_detail/icons/flags/us.png?id=documentation%3Aconferences LemonLDAP::NG can export <a0>HTTP headers</a0> either using a proxy or protecting directly the application. LemonLDAP::NG peut exporter des <a0>en-têtes HTTP</a0> qu'on l'utilise sur une reverse-proxy ou directement sur le serveur à protéger <s0>Allow requests in error</s0>: allow a request that has generated an error in token generation to be forwarded to the protected application without secure token (default: yes) <s0>Autorise les requêtes en cas d'erreur</s0> : autorise la requête qui a généré une erreur dans la génération du jeton à être transféré à l'application protégé sans jeton sécurisé (défaut : oui) A skin will often refer to the <c0>common</c0> skin, which is not a real skin, but shared skin objects (like scripts, images and <a1>CSS</a1>). Un thème se réfère souvent au thème <c0>common</c0>, qui n'est pas un thème réel mais contient des objects partagés (tels les scripts, images et <a1>CSS</a1>). ../pages/documentation/1.1/soapsessionbackend.html ../pages/documentation/1.1/soapsessionbackend.html Can be left blank for plain text passwords. Peut être vide pour le stockage des mots-de-passe en clair. In Manager, you can configure categories and applications in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Categories and applications</c3>. Dans le manager, on peut configurer les catégories et applications dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Catégories et applications</c3>. <s0><a1>Application menu</a1></s0>: display authorized applications in categories <s0><a1>Menu des applications</a1></s0> : affiche les applications autorisées dans les catégories Bruxelles Bruxelles CDBI CDBI import your own private and public keys (<c0>Load from a file</c0> input) importer vos propres clefs privées et publiques (entrée <c0>Charger depuis un fichier</c0>) date: creation date (format YYYY-MM-DD) date : date de création (format AAAA-MM-JJ) Also, all backends parameters are displayed. Ainsi tous les paramètres des backends sont affichés. /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots In this case, <a1>LL::NG</a1> acts like an SAML2 Service Provider (SP). Dans ce cas, <a1>LL::NG</a1> agit comme un fournisseur de service SAML2 (SP). ../pages/documentation/quickstart.html ../pages/documentation/quickstart.html Example of status page: Exemple de page de statut : <s0><a1>API</a1> secret key</s0>: <a2>API</a2> secret key from Yubico <s0>Clef secrète de l'<a1>API</a1></s0> : clef secrète de l'<a2>API</a2> obtenue auprès de Yubico multi <s0>=></s0> <s1>{</s1> multi <s0>=></s0> <s1>{</s1> Follow <a0>SOAP sessions backend</a0> page Suivre la documentation <a0>backend de sessions SOAP</a0> randomPasswordRegexp randomPasswordRegexp The <a0>Yubikey</a0> is a small material token shipped by <a1>Yubico</a1>. <a0>Yubikey</a0> est un petit matériel d'authentification vendu par <a1>Yubico</a1>. <s0>Domain</s0>: validity domain for the cookie (the cookie will not be sent on other domains) <s0>Domaine</s0> : domaine de valaidité du cookie (le cookie n'est pas envoyé vers d'autres domaines) ../../documentation/1.4/fileconfbackend.html ../../documentation/1.4/fileconfbackend.html Let's go On y va <s0>Sign <a1>SSO</a1> message</s0>: sign <a2>SSO</a2> message <s0>Signature des messages <a1>SSO</a1></s0> : signe les messages <a2>SSO</a2> Run Test LemonLDAP::NG configuration is mainly a key/value structure, so Manager will present all keys into a structured tree. La configuration de LemonLDAP::NG est essentiellement une structure clef/valeur, ainsi le manager présente toutes les clefs en un arbre structuré. Mail Mail accept (or whatever you want) accept (ou la valeur désirée) You can refer to <a0>parameter list</a0> to find it. Se référer à la <a0>liste des paramètres</a0> pour le trouver. In the Manager, select node <a0>SAML</a0> service providers and click on New service provider: Dans le manager, selectionner le noeud fournisseurs de service <a0>SAML</a0> et cliquer sur Nouveau fournisseur de service : On your main server, configure a <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> backend Sur le serveur principal, configurer un backend <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> Password change form (in menu) Formulaire de changement de mot-de-passe (dans le menu) DataSource -> dbi:mysql:sessions;host=... DataSource -> dbi:mysql:sessions;host=... documentation:1.4:authssl documentation:1.4:authssl Then select <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: Ensuite sélectionner <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: <s0>Sessions activity timeout</s0>: Maximum inactivity duration. <s0>Délai d'expiration des sessions</s0> : durée maximale d'inactivité. /_detail/screenshots/1.0/dark/portal.png?id=screenshots /_detail/screenshots/1.0/dark/portal.png?id=screenshots BrowserID is also known as Mozilla Persona. BrowserID est également connu sous le nom de « Mozilla Persona ». Twitter authentication level Niveau d'authentification de Twitter By default, if user process connection settings are empty, authentication process connection settings will be used. Par défaut, si les paramètres de processus de connexion utilisateur sont vides , ceux d'authentification seront utilisés. Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Zimbra</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Zimbra</c3>, et éditer les clefs suivantes : <s161>//"userobm_system" => ,</s161> <s161>//"userobm_system" => ,</s161> <s0>Force authentication</s0>: set ForceAuthn flag in authentication request <s0>Authentification forcée</s0> : positionne le drapeau ForceAuthn dans la requête d'authentification First, configure your real backend Premièrement, configurer le backend réel To keep Memcached performance level and <a0>LL::NG</a0> features, you can replace <a1>Memcached</a1> by <a2>Redis</a2> using <a3>NoSQL session backend</a3>. Pour maintenir un niveau de performance tel celui de Memcached et préserver les fonctionnalités de <a0>LL::NG</a0>, on peut remplacer <a1>Memcached</a1> par <a2>Redis</a2> en utilisant le <a3>backend de sessions NoSQL</a3>. http://haproxy.1wt.eu/ http://haproxy.1wt.eu/ The sources are available on <a0>download page</a0>. Les sources sont disponibles sur la <a0>page de téléchargement</a0>. documentation:1.4:formreplay documentation:1.4:formreplay POST data <a0>URI</a0>: /process.php <a0>URI</a0> où envoyer les données : /process.php This requires to request user old password (see <a1>portal customization</a1>). Nécessite de requérir l'ancien mot-de-passe (voir <a1>personnalisation du portail</a1>). It returns: Elle retourne : <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> ../pages/documentation/1.4/variables.html ../pages/documentation/1.4/variables.html <s0>Other</s0>: <s0>Autres</s0> : http://fosdem.org/2012/schedule/event/lemonldapng http://fosdem.org/2012/schedule/event/lemonldapng PerlHandler Lemonldap::NG::Handler::Proxy PerlHandler Lemonldap::NG::Handler::Proxy You've simply to insert a notification and connect to the portal using the same UID. Il suffit d'insérer une notification et de se connecter au portail en utilisant le même UID. <s0>Mail field name</s0>: name of authentication table column hosting mail (for password reset) <s0>Nom du chmap mail</s0> : nom de la colonne de la table d'authentification contenant le mail (pour la réinitialisation du mot-de-passe) Some articles published somewhere in the world wide web. Quelques articles publiés quelque part sur le web. <s16># Directory index</s16> <s16># Directory index</s16> http://httpd.apache.org/docs/current/mod/mod_proxy.html http://httpd.apache.org/docs/current/mod/mod_proxy.html documentation:exportedvars.png documentation:exportedvars.png Local file Fichier local Remote Remote ../pages/download.html ../pages/download.html localStorage localStorage Timezone Timezone http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf ../../documentation/1.4/handlerauthbasic.html ../../documentation/1.4/handlerauthbasic.html ../documentation/current/ssocookie.html#sso_cookie ../documentation/current/ssocookie.html#sso_cookie ../../documentation/1.4/start.html#identity_provider ../../documentation/1.4/start.html#identity_provider documentation:liferay_7.png documentation:liferay_7.png <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf In the Manager, select node <c0><a1>SAML</a1> identity providers</c0> and click on <c2>New identity provider</c2>: Dans le Manager, selectionner le noeud <c0>Fournisseurs d'identité <a1>SAML</a1></c0> et cliquer sur <c2>Nouveau fournisseur d'identité</c2> : <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> documentation:1.4:portalcustom documentation:1.4:portalcustom /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart <a0>parameterlist</a0><br1/> <a0>parameterlist</a0><br1/> /_detail/screenshots/1.0/impact/password.png?id=screenshots /_detail/screenshots/1.0/impact/password.png?id=screenshots <s0>portal full <a1>URL</a1></s0> if custom function is run by portal (e.g. <a2>https://auth.example.com/</a2>) <s0>l'<a1>URL</a1> complète du portail</s0> si la fonction personnalisée est appelée par le portail (i.e. <a2>https://auth.example.com/</a2>) ../../documentation/1.4/authremote.html ../../documentation/1.4/authremote.html After redirection, normal authentication in the remote portal Après redirection, authentification normale sur le portail distant (celui de son organisation) soapAuthService soapAuthService <a0>CAS</a0> access control policy Politique de contrôle d'accès <a0>CAS</a0> Apache Tomcat Apache Tomcat <a0>LL::NG</a0> use 2 internal databases to store its configuration and sessions. <a0>LL::NG</a0> utilise 2 bases de données interne pour stocker ses configuration et sessions. <a4>YouTube</a4> <a4>YouTube</a4> Habib ZITOUNI Habib ZITOUNI If this session is lost, Google will ask a confirmation for each requested attribute. Si cette session est perdue, Google redemandera confirmation pour chaque attribut demandé. https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt The session expires after 2 hours by default. Toute session expire au boût de 2 heures par défaut. <s12>{</s12> <s12>{</s12> If no encryption keys are defined, signature keys are used for signature and encryption. Si aucune clef de chiffrement n'est définie, la clef de signature est aussi utilisée pour le chiffrement. http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/authbrowserid.html ../../documentation/1.4/authbrowserid.html <s0>Shared key</s0>: correspond to the cookie parameter of sympa.conf <s0>Clef prépartagée</s0> : correspond au paramètre du cookie dans sympa.conf Configuration and sessions access by SOAP Accès à la configuration et aux sessions par SOAP documentation:manager-saml-sp-new.png documentation:manager-saml-sp-new.png <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl mailR mailR The portal Le portail /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots For MySQL, you need to set additional parameters: Pour MySQL, il faut ajouter quelques paramètres : cookieName cookieName This file is called <c1>lemonldap-ng.ini</c1> and has the following sections: Le fichier est nommé <c1>lemonldap-ng.ini</c1> et dispose des sections suivantes : <a2>bugzilla</a2><br3/> <a2>bugzilla</a2><br3/> ../../../media/documentation/manager-saml-idp-new.png ../../../media/documentation/manager-saml-idp-new.png You can first check on <a1>LemonLDAP::NG JIRA project</a1> that your bug is not already referenced, and then create it (with a registered account). Commencez par vérifier sur <a1>le site JIRA du projet LemonLDAP::NG</a1> que votre bogue n'est pas déjà référencé, et créez le sinon (avec un compte préalablement créé). Radius server Serveur Radius <s0>Account session key</s0>: session field used as Zimbra user account (by default: uid) <s0>clef de session compte</s0> : champ de session utilisé comme compte utilisateur Zimbra (par défaut : uid) Datas are stored as key/values (no-strings values are serialized). Les données sont stockées en clef/valeur (les valeurs autres que chaînes sont sérialisés). ../pages/documentation/1.1/applications/limesurvey.html ../pages/documentation/1.1/applications/limesurvey.html documentation:1.4:authdemo documentation:1.4:authdemo rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf Secure Token header En-tête du jeton sécurisé <a0>Apache::Session::Redis</a0> is the faster shareable session backend <a0>Apache::Session::Redis</a0> est le module de stockage des sessions en réseau le plus rapide http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml Configure security settings Configurer les paramètres de sécurité Google Apps control panel Panneua de contrôle Google Apps managerDn managerDn documentation:1.4:selfmadeapplication documentation:1.4:selfmadeapplication icons:wizard.png icons:wizard.png ../pages/documentation/1.1/idpsaml.html ../pages/documentation/1.1/idpsaml.html For example, if real sessions are stored in <a0>files</a0>: Par exemple, si les sessions réelels sont stockées dans des <a0>fichiers</a0> : Set exported variables Définir les variables exportées Display logout module Affiche le module de déconnexion UCANSS UCANSS applications:mediawiki_logo.png applications:mediawiki_logo.png ../../documentation/1.4/securetoken.html ../../documentation/1.4/securetoken.html The user can choose a new password or ask to generate one L'utilisateur peut choisir un nouveau mot de passe ou demander sa génération UserName -> user Password -> password Index -> ipAddr uid UserName -> user Password -> password Index -> ipAddr uid perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. <s0>Auth-Mail</s0>: $mail <s0>Auth-Mail</s0>: $mail documentation:1.4:highavailability documentation:1.4:highavailability screenshots captures d'écran ../pages/translations.html ../pages/translations.html portal is in a https virtualhost if securedCookie is set le portail est dans un hôte virtuel https si securedCookie est activé <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> Assertion Consumer Consommateur d'assertions Bugzilla Bugzilla protection protection Full name Nom complet Nov 2011: <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> Nov 2011 : <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> You can also display a check box on the authentication form, to allow user to see their login history before beeing redirected to the protected application (see <a0>portal customization</a0>). on peut aussi afficher une case à cocher dans le formulaire d'authentification pour autoriser l'utilisateur à voir son historique de connexion avant d'être redirigé vers l'application protégée (voir la <a0>personnalisation du portail</a0>). ...   </<s4>VirtualHost</s4>> ...   </<s4>VirtualHost</s4>> Session key containing email address La clef de session contient l'adresse mail If a user is redirected from handler to portal for authentication and once he is authenticated, portal redirects him to the redirection <a0>URL</a0>. Si un utilisateur est redirigé depuis un agent vers le portail pour s'authentifier et s'il est déjà authentifié, le portail le redirige vers l'<a0>URL</a0> de redirection. phpLDAPadmin will have no idea of the user connected to the WebSSO. phpLDAPadmin ne connaît donc pas le nom du l'utilisateur connecté au WebSSO. Allow form autocompletion Autorise l'autocompletion du formulaire ssoStartDate ssoStartDate Menu style preferences are stored in cookies (1 year duration). Les préférences du menu sont stockées dans des cookies (valables 1 an). But you have to allow sessions web services, see <a0>SOAP sessions backend</a0>. Il faut en revanche autoriser le service web des sessions, voir le <a0>backend de sessions SOAP</a0>. Zimbra virtual host in Manager Hôte virtuel Zimbra dans le manager /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay ../../documentation/1.4/applications/tomcat.html ../../documentation/1.4/applications/tomcat.html Key name Nom de la clef Then edit MediaWiki local settings Éditer ensuite les paramètres locaux MediaWiki <s0>Username control</s0>: Regular expression used to check user login syntax. <s0>Contrôle du nom d'utilisateur</s0> : expression régulière utilisée pour vérifier la syntaxe du nom d'utilisateur. <s0>table</s0>: Notifications table name. <s0>table</s0> : nom de la table des notifications. User table: where user data are stored (mail, name, etc.) La table utilisateurs : où les données utilisateurs sont stockées (mail, nom, etc.) Authorization => "Basic ".encode_base64("$uid:$_password") Authorization => "Basic ".encode_base64("$uid:$_password") rtyler rtyler YUM repository Dépôt YUM The script uses the <c0>editor</c0> system command, that links to your favorite editor. Ce script utilise la commande système <c0>editor</c0>, qui est liée à l'éditeur favori. http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod ../../../media/documentation/exportedvars.png ../../../media/documentation/exportedvars.png In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose BrowserID for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir BrowserID pour l'authentification. Register what module was used for authentication, user data, password, … Enregistre les modules utilisés pour l'authentification, les données utilisateurs, les mots-de-passe, … <s0>getCookies(user,password)</s0>: authentication system. <s0>getCookies(user,password)</s0> : système d'authentification. phpLDAPadmin virtual host in Manager Hôte virtuel phpLDAPadmin dans le manager ldapgroups -> memberOf ldapgroups -> memberOf http://en.wikipedia.org/wiki/IBM_Lotus_iNotes http://en.wikipedia.org/wiki/IBM_Lotus_iNotes All pages Toutes les pages a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf ../pages/documentation/1.1/authopenid.html ../pages/documentation/1.1/authopenid.html In other words, take the time to configure this part before sharing metadata. En d'autres mots, prenez le temps de bien configurer cette partie avant de partager les metadatas. Single Sign On Authentification unique (Single Sign On) <s6>Options</s6> +ExecCGI <s6>Options</s6> +ExecCGI dbiAuthLoginCol dbiAuthLoginCol Integration in Active Directory (LDAP and Kerberos) Integration dans Active Directory (LDAP et Kerberos) Name of the cookie Nom du cookie <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> /_detail/screenshots/1.0/impact/menu.png?id=screenshots /_detail/screenshots/1.0/impact/menu.png?id=screenshots Declare module in Apache configuration Declarer le module dans la configuration d'Apache <a0>Twitter</a0> is a famous microblogging server. <a0>Twitter</a0> est un serveur de microblog célèbre. <s5>Allow</s5> from <s6>all</s6> <s5>Allow</s5> from <s6>all</s6> ../pages/start.html ../pages/start.html It needs 4 modules to work: Il a besoin de 4 modules pour fonctionner : documentation:ha-sessions-configuration.png documentation:ha-sessions-configuration.png ../../../media/icons/access.png ../../../media/icons/access.png http://www.sympa.org http://www.sympa.org They can then be forwarded to applications trough <a0>HTTP headers</a0>. Ils peuvent être transférés aux applications via les <a0>en-têtes HTTP</a0>. documentation:manager-saml-private-key.png documentation:manager-saml-private-key.png Choice <a0>URL</a0> parameter Paramètre d'<a0>URL</a0> pour "Choice" DBI DBI LL::NG LL::NG Authentication: will create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : créé une session sans demander quoi que ce soit (mais enregistre l'adresse <a0>IP</a0> cliente et la date de création) CREATE TABLE lmConfig ( CREATE TABLE lmConfig ( <s0>Logo</s0>: file name to use as logo <s0>Logo</s0> : nom de fichier à utiliser comme logo For example, in handler/MyHandler.pm: Par exemple, dans handler/MyHandler.pm: KrbMethodNegotiate <s16>On</s16> KrbMethodNegotiate <s16>On</s16> Configure Sympa virtual host like other <a0>protected virtual host</a0> but use Sympa Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0>. https://metacpan.org/module/Apache::Session::Browseable::LDAP https://metacpan.org/module/Apache::Session::Browseable::LDAP It sends an OTP, which is validated against Yubico server. Il envoie un mot-de-passe à valeur unique (OTP) qui est validé par un serveur Yubico. zimbraBy zimbraBy Extract Extraction Examples: Exemples : Key Clef Apache::Session performances Performances d'Apache::Session <s0>error</s0>: if user has no access, an error is shown on the portal, the user is not redirected to <a1>CAS</a1> service <s0>error</s0> : si l'utilisateur n'a pas accès, une erreur est affichée sur le portail, l'utilisateur n'est pas redirigé vers le service <a1>CAS</a1> uid: 123456789012 uid: 123456789012 /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications Notification backend Module de stockage des notifications LemonLDAP::NG 1.1 release Sortie de LemonLDAP::NG 1.1 Restrict /admin/ directory to user bart.simpson Restreindre le répertoire /admin/ à l'utilisateur bart.simpson For debugging, this valve can print some helpful information in debug level. Pour le debogage, cette valve peut tracer quelques information utiliser. SHA SHA ../../documentation/1.4/ldapminihowto.html ../../documentation/1.4/ldapminihowto.html by users par utilisateurs Storage directory Répertoire de stockage The NameID is the main user identifier, carried in <a1>SAML</a1> messages. NameID est l'identifiant principal de l'utilisateur transmis dans les messages <a1>SAML</a1>. If you can not access the Manager anymore, you can unprotect it by editing <c0>lemonldap-ng.in</c0> and changing the <c1>protection</c1> parameter: SI l'accès au manager est perdu, on peut le déprotéger en éditant <c0>lemonldap-ng.in</c0> et en changeant le paramètre <c1>protection</c1> : Lasso session dump Dump de session Lasso checkDate checkDate psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng If you modify directly the skin files, your modifications will certainly be erased on the next upgrade. Les modifications apportées directement sur les fichiers thèmes risquent d'être perdus à la prochaine mise-à-jour. The value will be used to display the data. Cette valeur sera utilisée pour afficher les données. cookieExpiration cookieExpiration ^/caldav ^/caldav ../pages/documentation/1.1/authproxy.html ../pages/documentation/1.1/authproxy.html An <a0>SAML server</a0> with <a1>OpenID authentication</a1> Un <a0>serveur SAML</a0> avec une <a1>authentification OpenID</a1> KrbAuthRealms EXAMPLE.COM KrbAuthRealms EXAMPLE.COM ldapPasswordResetAttributeValue ldapPasswordResetAttributeValue <s0>Grant session</s0>: check rights to open <a1>SSO</a1> session <s0>Autorise la session</s0> : vérifie le droit d'ouvrir une session <a1>SSO</a1> icons:kmultiple.png icons:kmultiple.png documentation:1.4:authtwitter documentation:1.4:authtwitter Take a look at <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. Voir <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. A special <a0>URL</a0> is declared in application menu (like <a1>http://zimbra.example.com/zimbrasso</a1>) Une <a0>URL</a0> spéciale est declarée dans le menu des applications (telle <a1>http://zimbra.example.com/zimbrasso</a1>) LemonLDAP::NG used as <a0>CAS</a0> server. LemonLDAP::NG utilisé comme serveur <a0>CAS</a0>. Allow no certificate to chain with other authentication methods Autoriser les clients sans certificat dans le chaînage avec d'autres méthodes d'authentification ../../documentation/1.4/cda.html ../../documentation/1.4/cda.html Connectors Connecteurs Accept all authenticated users: Accepte tout utilisateur authentifié : Manual download Téléchargement manuel Tomcat valve Valve Tomcat If your sessions explorer is on the same server that the portal, either use the <s0>adminSessions</s0> end point in Manager configuration, or override the <c1>globalStorage</c1> and <c2>globalStorageOptions</c2> parameters in section all (and not portal) of <c3>lemonldap-ng.ini</c3>. Si l'explorateur de sessions est sur le même serveur que le portail, utiliser soit la terminaison <s0>adminSessions</s0> dans la configuration eu manager, ou surcharger les paramètres <c1>globalStorage</c1> et <c2>globalStorageOptions</c2> dans la section all (et pas portal) de <c3>lemonldap-ng.ini</c3>. <s0>Reader <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> SP to read the cookie. <s0><a1>URL</a1> de lecture</s0> : <a2>URL</a2> utilisée par le SP <a3>SAML</a3> pour lire le cookie. ../../../media/documentation/manager-portalskin.png ../../../media/documentation/manager-portalskin.png Delete other session if <a0>IP</a0> differs Efface les autres sessions de l'utilisateur si les adresses <a0>IP</a0> diffèrent zimbraPreAuthKey zimbraPreAuthKey CGI CGI secureTokenUrls secureTokenUrls You need to register a new application on Facebook to get an application ID and a secret. Il faut enregistrer la nouvelle application dans Facebook pour obtenir un identifiant d'application et un secret. <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <e0>WHATTOTRACE</e0> must be replaced by the attribute or macro configured in the What To Trace parameter (REMOTE_USER) <e0>WHATTOTRACE</e0> doit être remplacé par l'attribut ou la macro configurée dans le paramètre indiquant le champ utilisateur à stocker dans les journaux (REMOTE_USER) http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 documentation:1.4:resetpassword documentation:1.4:resetpassword http://lanyrd.com/2011/jcos/sdrbd/ http://lanyrd.com/2011/jcos/sdrbd/ to the sessions storage backend au système de stockage des sessions icons:gpg.png icons:gpg.png documentation:1.4:authcas documentation:1.4:authcas /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac <a0>SAML</a0> token Jeton <a0>SAML</a0> <s5>RewriteRule</s5> ^/saml/.* /index.pl <s5>RewriteRule</s5> ^/saml/.* /index.pl <a0>DBI</a0> table name Nom de table <a0>DBI</a0> Follow <a0>SOAP configuration backend</a0> page Suivre la documentation <a0>backend de configuration SOAP</a0> Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Apache Kerberos module Module Kerberos d'Apache ../../documentation/1.4/idpopenid.html ../../documentation/1.4/idpopenid.html Internet Explorer Internet Explorer lemonldap-ng-manager: contains administration interface and session explorer lemonldap-ng-manager : contient l'interface d'administration et l'explorateur de session Then you <e0>only</e0> have to write <c1>myskin/css/styles.css</c1> and add your media to <c2>myskin/images</c2>. Il suffit ensuite d'écrire <c1>myskin/css/styles.css</c1> et d'ajouter les médias dans <c2>myskin/images</c2>. remoteGlobalStorage remoteGlobalStorage Access rules and HTTP headers Règles d'accès et en-têtes HTTP Remote Session backend Backend de sessions distant If you use features like <a0>SAML</a0> (authentication and issuer), <a1>CAS</a1> (issuer) and password reset self-service, you also need to index some fields. Lorsqu'on utilise des fonctionnalités telles <a0>SAML</a0> (authentification ou fournisseur d'identité), <a1>CAS</a1> (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs. Since 1.1.0, a notification explorer is available in Manager, and notifications can be done for all users, with the possibility to display conditions. Depuis la version 1.1.0, un explorateur de notifications est disponible dans le manager, et les notifications peuvent être faites pour tous les utilisateurs, avec possibilité d'affichage conditionnel. ../pages/documentation/presentation.html ../pages/documentation/presentation.html <s0><a1>Sessions</a1></s0>: where sessions are stored. <s0><a1>Sessions</a1></s0>: où sont stockées les sessions. Session expiration: sessions will never expire (server side) Expiration des sessions : les sessions n'expirent jamais (du côté serveur) -1 if this <a0>URL</a0> is not known by <a1>LL::NG</a1> configuration -1 si cette <a0>URL</a0> n'est pas connue de la configuration de <a1>LL::NG</a1> documentation:1.4:samlservice documentation:1.4:samlservice Rule for session granting Règle pour l'autorisation d'ouverture de session <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> OBM_GIVENNAME OBM_GIVENNAME <a2>django</a2><br3/> <a2>django</a2><br3/> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> Extend variables using macros and groups Étendre les variables en utilisant les macros et groups <a0>OBM</a0> is enterprise-class messaging and collaboration platform for workgroup or enterprises with many thousands users. <a0>OBM</a0> est une plateforme collaborative et de messagerie pour entreprises ou groupes de travail comprenant plusieurs milliers d'utilisateurs. Change <s0>mydomain.org</s0> (in <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) into your Google Apps domain. Changer <s0>mydomain.org</s0> (dans <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) en votre domaine Google Apps. It has a simple but powerful syntax which makes sure the data files remain readable outside the Wiki and eases the creation of structured texts. Il dispose d'une syntaxe simple mais puissante qui fait que les fichiers de données restent lisibles en dehors du Wiki, et facilite la création de textes structurés. ../../../media/applications/obm_logo.png ../../../media/applications/obm_logo.png Set <c0>Email</c0> in <c1>Options</c1> » <c2>Authentication Response</c2> » <c3>Default NameID format</c3> Mettre <c0>Email</c0> dans <c1>Options</c1> » <c2>Réponse d'authentification</c2> » <c3>Format NameID par défaut</c3> Radius Radius Social Networks and News Réseaux sociaux et nouvelles If a user is not authenticated and attempts to connect to an area protected by a LemonLDAP::NG compatible Handler, he is redirected to a portal. Si un utilisateur n'est pas authentifié et tente de se connecter à une application protégée par un agent compatible LemonLDAP::NG, il est redirigé vers le portail. You have then to install all the downloaded packages: Il faut ensuite installer tous les paquets téléchargés : Another <a0>LL::NG</a0> system configured with <a1>OpenID authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification OpenID</a1> SSLVerifyClient optional_no_ca ... </VirtualHost> SSLVerifyClient optional_no_ca ... </VirtualHost> <s0>ServerName</s0> auth.example.com   <s0>ServerName</s0> auth.example.com   <a0>CAS</a0> Session backend Module de stockage <a0>CAS</a0> hideOldPassword hideOldPassword <s0>Sign-out page <a1>URL</a1></s0>: this in not the SLO access point (Google Apps does not support SLO), but the main logout page. <s0>Sign-out page <a1>URL</a1></s0>: il ne s'agit pas du point d'accès de déconnexion globale (SLO) (Google Apps ne le supporte pas), mais de la page de déconnexion. Go to the Manager and <a0>create a new virtual host</a0> for Sympa. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Sympa. <<s1>Location</s1> /status> <<s1>Location</s1> /status> <s0>url_logout</s0>: <a1>URL</a1> used by OBM to logout, will be caught by <a2>LL::NG</a2> <s0>url_logout</s0>: <a1>URL</a1> utilisée par OBM pour les déconnexions, sera appelée par <a2>LL::NG</a2> Restrict /js/ and /css/ directory to authenticated users Restreindre les répertoires /js/ et /css/ aux utilisateurs authentifiés <a0>WebID</a0> is a way to uniquely identify a person, company, organisation, or other agent using a <a1>URI</a1> and a certificate. <a0>WebID</a0> est un moyen d'identification unique de personnes, entreprises, organisation, ou autre agent en utilisant une <a1>URI</a1> et un certificat. Main components Composants principaux For each binding you can set: Pour chaque déclaration, vous pouvez indiquer : Integrate your own application Integrer ses propres applications Initiate the Kerberos connection: Initialiser la connexion Kerberos : http://www.google.com/apps/ http://www.google.com/apps/ http://lasso.entrouvert.org http://lasso.entrouvert.org ../../documentation/1.4/samlservice.html#general_options ../../documentation/1.4/samlservice.html#general_options ../../../media/applications/limesurvey_logo.png ../../../media/applications/limesurvey_logo.png gender gender Secure Token Memcached servers Serveurs Memcached pour le jeton sécurisé PerlSetVar LmProxyPass http://www.private.com/ PerlSetVar LmProxyPass http://www.private.com/ So Apache::Session module is not a problem for handlers. Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. CPAN test reports: Rapports de test du CPAN: You need some prerequisites: Certains pré-requis sont nécessaire : Skin customization Personnalisation du thème http://en.wikipedia.org/wiki/Doctor_Who http://en.wikipedia.org/wiki/Doctor_Who <s0>Secured cookie</s0>: 4 options: <s0>Cookie sécurisé</s0> : 4 options : <s0>Login history</s0>: display user's last logins and last failed logins <s0>Historique de connexion</s0> : affiche les derniers succès et échecs de connexion We will use the macros to do that. On utilise les macros pour ça. Python (Django) Python (Django) Build the tarball from SVN Construire l'archive depuis SVN Authentication response Réponse d'authentification User owns <a0>SSO cookies</a0> on the main domain (see <a1>Login kinematics</a1>) Les utilisateurs possèdent des <a0>cookies SSO</a0> dans le domaine principal (voir la <a1>cinématique de connexion</a1>) Store user password in session Stocker le mot-de-passe utilisateur dans la session /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart All rules are concerned: Toutes les règles sont concernées : <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> icons:flags:de.png icons:flags:de.png POST data Données POST It is compliant with the <a0>form replay</a0> feature Il est compatible avec le <a0>rejeu de formulaire</a0> ../documentation/current/ssocookie.html ../documentation/current/ssocookie.html Conditions: Conditions : https://my-profile.eu/ https://my-profile.eu/ Then, go in <c0>BrowserID parameters</c0>: Ensuite, aller dans les <c0>paramètres BrowserID</c0>: documentation:liferay_5.png documentation:liferay_5.png You can inspect a user session with the sessions explorer (in Manager) On peut inspecter une session utilisateur avec l'explorateur de sessions (accessible depuis le manager) http://en.wikipedia.org/wiki/FastCGI http://en.wikipedia.org/wiki/FastCGI ~40 000 ~40 000 documentation:latest:installrpm documentation:latest:installrpm In the manager: set <a0>Apache::Session::Memcached</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Memcached</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse) : Protocol and port Protocole et port You can do it either by uploading the file, or get it from IDP metadata <a0>URL</a0> (this require a network link between your server and the IDP): Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas de l'IDP (à condition d'avoir un lien réseau entre le serveur et l'IDP): In Portal virtual host, you will find several configuration parts: Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration : Then Zimbra do the <a0>SSO</a0> by setting a cookie in user's browser Ensuite Zimbra génère son cookie <a0>SSO</a0> dans le navigateur de l'utilisateur http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng <a0>URI</a0> of the page which contains the form L'<a0>URI</a0> de la page qui contient le formulaire <s0>Activation</s0>: set to <c1>On</c1> <s0>Activation</s0> : mettre à <c1>Activé</c1>. ../../../media/screenshots/1.1/mailreset/mailreset_step2.png ../../../media/screenshots/1.1/mailreset/mailreset_step2.png any files sharing system (NFS, NAS, SAN,…) tout système de partage de fichiers (NFS, NAS, SAN,…) /_detail/screenshots/1.0/dark/menu.png?id=screenshots /_detail/screenshots/1.0/dark/menu.png?id=screenshots icons:xeyes.png icons:xeyes.png This documentation just explains how to set up the <a0>SSO</a0> part. Cette documentation explique seulement comment activer la partie <a0>SSO</a0>. /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation http://www.fitzdsl.net/?p=286 http://www.fitzdsl.net/?p=286 To bypass this, <a0>LL::NG</a0> can remember what password was given by user on authentication phase. Pour contourner ce problème, <a0>LL::NG</a0> peut se souvenir du mot-de-passe utilisé dans la phase d'authentification. ../media/icons/bug.png ../media/icons/bug.png A time profile (allowed hours and day of the week) Un profil de temps (heures et jours de la semaine autorisés) <a0>LL::NG</a0> provides a valve, available on <a1>download page</a1>. <a0>LL::NG</a0> fournit une valve, disponible sur <a1>page de téléchargement</a1>. One user tries to access to the portal Un utilisateur tente d'accéder au portail Dokuwiki virtual host in Apache Hôte virtuel Dokuwiki dans le manager SGS SGS This feature can be enabled and configured in Manager, in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Login History</c2>. Cette fonctionnalité peut être activée et configurée dans le manager dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Historique de connexion</c2>. Some applications using it Quelques applications l'utilisant LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> <s150>//"userobm_vacation_dateend" => ,</s150> <s150>//"userobm_vacation_dateend" => ,</s150> documentation:1.4:idpsaml documentation:1.4:idpsaml ../media/logos/logo_abuledu.png ../media/logos/logo_abuledu.png ../pages/documentation/1.1/memcachedsessionbackend.html ../pages/documentation/1.1/memcachedsessionbackend.html Sunday is the first day. Dimanche est le premier jour. ../pages/documentation/1.1/notifications.html ../pages/documentation/1.1/notifications.html server server Subject for confirmation mail Sujet du message de confirmation ../../documentation/1.4/portalmenu.html#categories_and_applications ../../documentation/1.4/portalmenu.html#categories_and_applications documentation:1.4:authad documentation:1.4:authad That message can contain session data as user attributes or macros. Ce message peut contenir des données de session tels les attributs ou les macros. http://en.wikipedia.org/wiki/OAuth http://fr.wikipedia.org/wiki/OAuth msmith@badwolf.org msmith@badwolf.org mailReplyTo mailReplyTo Auth-Mail Auth-Mail ../../documentation/1.4/sqlsessionbackend.html ../../documentation/1.4/sqlsessionbackend.html vi /var/lib/lemonldap-ng/portal/login.pl vi /var/lib/lemonldap-ng/portal/login.pl Lemonldap::NG::Manager Lemonldap::NG::Manager yubikeySecretKey yubikeySecretKey <s0>complicatedpassword</s0>: Password of AD technical account <s0>complicatedpassword</s0>: mot-de-passe du compte AD technique Choose and configure your main sessions storage system Choisir et configurer le système principal de stockage des sessions Feature Fonctionnalité documentation.html documentation.html You can also use caFile and caPath parameters. On peut également utiliser les paramètres caFile et caPath. <s0>External databases</s0>: not managed by LemonLDAP::NG, for example user database Les <s0>bases de données externes</s0>: non gérées par LemonLDAP::NG, par exemple la base des utilisateurs <a0>idpcas</a0><br1/> <a0>idpcas</a0><br1/> Clément OUDOT Clément OUDOT Copy <c0>ValveLemonLDAPNG.jar</c0> in <c1><TOMCAT_HOME>/server/lib</c1>: Copier <c0>ValveLemonLDAPNG.jar</c0> dans <c1><TOMCAT_HOME>/server/lib</c1>: When you commit <a0>OmegaT</a0> files in svn repository, don't push backup files. Lorsque vous validez les fichiers <a0>OmegaT</a0> dans le dépôt svn, n'y poussez pas les fichiers de sauvegarde. <s4>Deny</s4> from <s5>all</s5> <s4>Deny</s4> from <s5>all</s5> or: ou : <a0>CAS</a0>_CAFile <a0>CAS</a0>_CAFile groups groups _lassoSessionDump _lassoSessionDump <s0>Internal databases</s0>: only used by LemonLDAP::NG Les <s0>bases de données internes</s0>: utilisées seulement par LemonLDAP::NG <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> 1.2 1.2 http://www.svwux.org/ http://www.svwux.org/ You can find all versions on <a0>OW2 forge download page</a0>. Vous pouvez trouver toutes les versions sur <a0>la page de téléchargement de la forge OW2</a0>. /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation 1.1 1.1 http://manager.example.com http://manager.example.com <<s8>IfModule</s8> mod_rewrite.c> <<s8>IfModule</s8> mod_rewrite.c> As you may have guessed, these accounts are famous characters from the TV show <a0>Doctor Who</a0>. Comme on peut le voir, ces comptes sont les fameux caractères du show TV <a0>Doctor Who</a0>. SQL SQL <a0>LL::NG</a0> validate the token and propose a password change form <a0>LL::NG</a0> valide la valeur et propose un formulaire de changement de mot-de-passe ../../documentation/presentation.html#kinematics ../../documentation/presentation.html#kinematics Don't forget to install cron files ! N'oubliez pas d'installer les fichiers cron ! If <c0>exportedAttr</c0> is set, only those attributes are copied in the session database of the secondary <a1>LL::NG</a1> structure. Si <c0>exportedAttr</c0> est défini, seuls ces attributs sont copiés dans la base des sessions du système <a1>LL::NG</a1> secondaire. ../../documentation/1.4/idpopenid.html#configuration ../../documentation/1.4/idpopenid.html#configuration <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> HASH of login success and failures Table des connexion réussies ou échouées <s0>off</s0>: never display <s0>off</s0> : ne jamais afficher Default skin Thème par défaut documentation:manager-saml-idp-metadata.png documentation:manager-saml-idp-metadata.png ../../documentation/1.4/performances.html ../../documentation/1.4/performances.html Unoptimized for <a0>session explorer</a0> and <a1>single session</a1> features. Pas optimisé pour l'<a0>exlorateur de sessions</a0> et les fonctionnalités de <a1>session unique</a1>. ../../../media/screenshots/1.1/mailreset/mailreset_step5.png ../../../media/screenshots/1.1/mailreset/mailreset_step5.png OpenID authentication level Niveau d'authentification d'OpenID Application menu Menu application authenticate user authentifier les utilisateurs SSL authentication Authentification SSL $uid eq "coudot" $uid eq "coudot" 105.000 105.000 By default, Manager is protected to allow only the demonstration user “dwho”. Par défaut, le manager est protégé et n'autorise que l'utilisateur de démonstration “dwho”. Forward logout to applications Propager les déconnexions aux applications ../documentation/current/logs.html ../documentation/current/logs.html http://www.slideshare.net/coudot/sl2011-lemon-ldapng http://www.slideshare.net/coudot/sl2011-lemon-ldapng ../../../../css/print.css ../../../../css/print.css Session-ID => $_session_id Session-ID => $_session_id <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0>: at the indicated time and date (but this is probably a bad idea) <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0> : jusqu'à la date indiquée (généralement une mauvaise idée) Go in the Manager and set the session module (<a0>Apache::Session::Browseable::MySQL</a0> for MySQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le manager et mettre le module de session (<a0>Apache::Session::Browseable::MySQL</a0> pour MySQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter le paramètre suivant (sensible à la casse) : If some of your servers are not in the same (secured) network than the database, it is recommended to use <a3>SOAP access</a3> for those servers. Si certains des serveurs ne se trouvent pas sur le même réseau (securisé) que la même base de données, il est recommandé d'utiliser <a3>l'accès SOAP</a3> pour ces serveurs. It can be a brake for the portal: En revanche, ce peut-être un frein pour le portail : _idpConfKey _idpConfKey Go to the Manager and <a0>create a new virtual host</a0> for Zimbra. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Zimbra. For full install: Pour une installation complète : Université de Limoges Université de Limoges ($uid =~ /^admin0/i)[0] ? ($uid =~ /^admin0/i)[0] ? ../../../media/documentation/manager-saml-idp-attribute.png ../../../media/documentation/manager-saml-idp-attribute.png Write custom functions library Écrire une librairie de fonctions personnalisées Now imagine the following DIT: On suppose le schéma suivant : .example.com = EXAMPLE.COM .example.com = EXAMPLE.COM <s0>David COUTADEUR</s0>: developer, tester <s0>David COUTADEUR</s0> : developeur, testeur SSL SSL <s0>Secret token</s0>: a secret token used to secure transmissions between OpenID client and server (<s1><a2>see below</a2></s1>). <s0>Jeton secret</s0> : le jeton secret utilisé pour sécuriser les transmissions entre le client et le server OpenID (<s1><a2>voir ci-dessous</a2></s1>). rm custom* cp ../pastel/custom* . rm custom* cp ../pastel/custom* . Service Provider Fournisseur de service The <c0>ProxyPreserveHost</c0> directive will forward the Host header to the protected application.<br1/> La directive <c0>ProxyPreserveHost</c0> transfère l'en-tête Host à l'application protégée.<br1/> CAS server Serveur CAS <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <a14>logs</a14><br15/> <a14>logs</a14><br15/> /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability This kind of <a0>SSO</a0> mechanism is not clean, and can lead to problems, like local password blocking, local session not well closed, etc. Ce type de mécanisme <a0>SSO</a0> n'est pas parfait et peut générer des problèmes tels des blocages de mots-de-passe, sessions locales mal closes, etc... <s0>CRONDIR</s0>: Cronfile directory (default: $PREFIX/etc/lemonldap-ng/cron.d) <s0>CRONDIR</s0> : répertoire des fichiers cron (défaut: $PREFIX/etc/lemonldap-ng/cron.d) http://xmlns.com/foaf/spec/#sec-crossref http://xmlns.com/foaf/spec/#sec-crossref <s0><a1>PGT</a1> file</s0>: temporary file where proxy tickets are stored (by default, <c2>/tmp/pgt.txt</c2>) <s0>Fichier <a1>PGT</a1></s0> : fichier temporaire où les tickets de proxy sont stockés (par défaut, <c2>/tmp/pgt.txt</c2>) ../pages/documentation/1.1/authdbi.html ../pages/documentation/1.1/authdbi.html Handler parameters Paramètres de l'agent <s0>Local <a1>SSO</a1> <a2>URL</a2> pattern</s0>: regular expression to match the <a3>SSO</a3> <a4>URL</a4> (by default: ^/zimbrasso$) <s0>Expression de correspondance de l'<a2>URL</a2> <a1>SSO</a1></s0> : expression régulière de correspondance de l'<a4>URL</a4> <a3>SSO</a3> (par défaut : ^/zimbrasso$) http://test2.example.com http://test2.example.com Configure Dokuwiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Dokuwiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. The generated tarball is in the current directory. L'archive générée est dans le répertoire courant. <s31>...</s31> <s31>...</s31> Name: <c0>Auth-User</c0> Nom : <c0>Auth-User</c0> Auth-Roles => $bbbRoles Auth-Roles => $bbbRoles each area has 2 portals: chacune a 2 portails: documentation:remote-interoperability.png documentation:remote-interoperability.png Some can be mandatory, so if they are not returned by IDP, the session will not open. Certains peuvent être obligatoires, et s'ils ne sont pas retournés par l'IDP, la session n'est pas ouverte. Session opening Ouverture de session <s3>RewriteRule</s3> ^/cas/.* /index.pl <s3>RewriteRule</s3> ^/cas/.* /index.pl <s151>//"userobm_vacation_message" => ,</s151> <s151>//"userobm_vacation_message" => ,</s151> <e0>Example with MySQL</e0>: <e0>Exemple avec MySQL</e0>: ../../../media/applications/linshare_logo.png ../../../media/applications/linshare_logo.png Notifications Notifications http://memcached.org/ http://memcached.org/ ... other SSL parameters ... ... autres paramètres SSL ... You can also configure jetlag (if all of your users use the same timezone): On peut aussi configurer jetlag (si tous les utilisateurs utilisent le même fuseau): Rule name Nom de la règle You just have to share configuration and sessions databases between those servers: Il faut juste partager les bases de données de configuration et des sessions entre ces serveurs : <s0>User source attribute</s0>: name of the attribute in users entries used in the link (default: dn). <s0>Attribut source utilisateur</s0> : nom de l'attribut utilisateur utilisé dans le lien (défaut: dn). The real user identifier is stored in a Memcached server and the protected application can the request the Memcached server to get user identifier. L'identifiant utilisateur réel est stockédans un serveur Memcached et l'application protégée peut requérir le serveur Memcached pour obtenir l'identifiant utilisateur. gen-webid-cert.sh gen-webid-cert.sh http://mail.ow2.org/wws/arc/lemonldap-ng-users http://mail.ow2.org/wws/arc/lemonldap-ng-users The statistics are collected trough a daemon launched by the Handler. Ces statistiques sont collectées via un démon lancé par l'agent. <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> sympaSecret sympaSecret <s0>Auto login</s0>: set to 1 to use auto login. <s0>Authentification automatique</s0> : mettre à 1 pour utiliser la connexion automatique. tomcat >= 5.5 tomcat >= 5.5 The digit will not be shown on portal page. Le chiffre ne sera pas affiché sur la page portail. LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> For tests with <c0>example.com</c0>, launch the following : Pour les tests avec <c0>example.com</c0>, lancer ce qui suit : Xavier GUIMARD Xavier GUIMARD Just configure the <a0>access rules</a0>. Configurer simplement la <a0>règle d'accès</a0>. Then go to trunk directory: Aller ensuite dans le répertoire trunk : _lastAuthnUTime _lastAuthnUTime Use the name you want but this values in the value field. Utiliser n'importe quel nom de clef mais ces valeurs dans le champ « valeur ». Headers are used to give user datas to the application. Les en-têtes sont utilisés pour donner aux applications les données utilisateurs. securedCookie securedCookie documentation:1.4:authradius documentation:1.4:authradius For block brute force attack with fail2ban pour bloquer les attaques en force brute avec fail2ban ../pages/documentation/1.4/authdemo.html ../pages/documentation/1.4/authdemo.html For databases like PostgreSQL, don't forget to add “Commit” with a value of 1 Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1 MBConsulting MBConsulting Access protected application Accéder aux applications protégées logos:logo_gn.png logos:logo_gn.png 1 if user is superadmin 1 si l'utilisateur est super-administrateur When all modifications are done, click on <c0>Save</c0> to store configuration. Lorsque toutes les modifications sont effectuées, cliquer sur <c0>Sauver</c0> pour enregistrer la configuration. To define keys, you can: Pour définir les clefs, vous pouvez : <a6>fileconfbackend</a6><br7/> <a6>fileconfbackend</a6><br7/> Login login Anti frame protection Protection anti-frame Windows 2008 server: Windows 2008 server : SMTPAuthUser SMTPAuthUser ../media/icons/flags/fr.png ../media/icons/flags/fr.png http://en.wikipedia.org/wiki/SAML http://fr.wikipedia.org/wiki/SAML Portal (dark theme) Portail (thème dark) ../../documentation/presentation.html#cross_domain_authentication_cda ../../documentation/presentation.html#cross_domain_authentication_cda Be careful with some applications which doesn't verify Lemonldap::NG headers after having created their own cookies. Faire attention avec certaines applications qui ne vérifient pas les en-têtes Lemonldap::NG après avoir créé leurs propres cookies. http://en.wikipedia.org/wiki/Basic_access_authentication http://fr.wikipedia.org/wiki/HTTP_Authentification Add an Apache access control to avoid other access. Ajouter un contrôle d'accès Apache pour éviter les autres accès. rpm --import rpm-gpg-key-ow2 rpm --import rpm-gpg-key-ow2 Auth-User Auth-User ../../../../media/applications/bugzilla_logo.png ../../../../media/applications/bugzilla_logo.png Some Apache::Session module are not useable by Lemonldap::NG such as Apache::Session::Memcached since this module does not offer capability to browse sessions Certains modules Apache::Session ne sont pas utilisables par Lemonldap::NG tel Apache::Session::Memcached, car ce module n'offre pas de dispositif de parcours des sessions <s132>//"userobm_host_id" => ,</s132> <s132>//"userobm_host_id" => ,</s132> ../pages/documentation/1.1/highavailability.html ../pages/documentation/1.1/highavailability.html This can be used to notify right changes,… See <a1>notifications</a1> for more. Ceci peut être utilisé pour notifier des changements de droits,... Consultez la page <a1>notifications</a1> pour plus d'information. Rule Règle Proxy LL::NG Proxy LL::NG You will need a very recent version of Lasso (>= 2.3.0). Vous devez utiliser une version récente de Lasso (>= 2.3.0). server based restriction (like Apache “allow/deny” mechanism) restrictions basées sur le serveur (tel le mécanisme “allow/deny” d'Apache) You can use the following rules instead: On peut utiliser les règles suivantes à la place : http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> All data is stored in plain text files – no database is required. Toutes les données sont stockées dans des fichiers texte, aucune base de données n'est nécessaire. one with read/write rights for servers hosting the manager une avec des droits en lecture/écriture pour les serveurs hébergeant le manager localStorageOptions localStorageOptions → The specified node is not the uploaded tree. → Le nœud spécifié n'est pas dans l'arbre chargé. ../../../../media/applications/googleapps_logo.png ../../../../media/applications/googleapps_logo.png You have access to all environment variable, like user <a1>IP</a1> address. Toutes les variables d'environnement sont disponibles, telle l'adresse <a1>IP</a1> de l'utilisateur. <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> SAML2 implementation is based on <a0>Lasso</a0>. L'implementation SAML est basée sur <a0>Lasso</a0>. https://www.djangoproject.com/ https://www.djangoproject.com/ Twitter application name Nom d'application Twitter <s0>Get user info</s0>: contact user database to collect attributes <s0>Récupère les informations utilisateur</s0> : contacte la base de données utilisateurs pour les obtenir <a14>authchoice</a14><br15/> <a14>authchoice</a14><br15/> Check if user is already authenticated Vérifie si l'utilisateur n'est pas déjà authentifié Portal SOAP services Services SOAP du portail Edit ~/.rpmmacros and set your build parameters (example for RHEL5): Editer ~/.rpmmacros et mettre les paramètres de construction (exemple pour RHEL5): mailSubject mailSubject <s0>User attribute</s0>: which session attribute will be used to display <c1>Connected as</c1> in the menu <s0>Attribut utilisateur</s0> : attribut de session à utiliser pour afficher <c1>Connecté en tant que</c1> dans le menu ../../documentation/features.html#session_explorer ../../documentation/features.html#session_explorer Example of a protected virtual host with LemonLDAP::NG as reverse proxy: Exemple d'hôte virtuel protégé avec Lemonldap::NG en proxy-inverse : <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> Extraction Extraction /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots Drupal Drupal apt-get install libauthen-radius-perl apt-get install libauthen-radius-perl Cache backend Module du cache local LL::NG based protection Protection basée sur LL::NG <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> ../pages/documentation/1.1/soapminihowto.html ../pages/documentation/1.1/soapminihowto.html Notification backend options Options du module de stockage des notifications To customize a skin, the simplest way is to create a new skin folder: Pour personnaliser un thème, la meilleure façon est de créer un nouveau répertoire : When you set a parameter in <c0>lemonldap-ng.ini</c0>, it will override the parameter from the global configuration. Lorsqu'un paramètre et fixé dans <c0>lemonldap-ng.ini</c0>, il surcharge le paramètre issu de la configuration globale. Define headers used in OBM mapping, for example: Definir les en-têtes utilisés pour les correspondances OBM, par exemple : General parameters Paramètres généraux SlideShare SlideShare Memcached Memcached /_detail/logos/logo_gn.png?id=references /_detail/logos/logo_gn.png?id=references <s0>Use reset attribute</s0>: enable to use the password reset attribute. <s0>Utiliser l'attribut reset</s0> : activé pour utiliser l'attribut reset du mot-de-passe. Portal and Manager skins have not evolved a lot since 1.0, so 1.0 screenshots are still up to date. Les thèmes du portail et du manager n'ont pas beaucoup évolué depuis la version 1.0, donc les captures d'écran 1.0 restent valables. User XXXX was not granted to open session User XXXX was not granted to open session <s0>Reply address</s0>: address seen in the “Reply-To” field <s0>Adresse pour la réponse</s0> : adresse vue dans le champ “Reply-To” ... ... http://www.php.net/empty http://www.php.net/empty <a0>Rules</a0> are applied in alphabetical order (comment and regular expression). Les <a0>règles</a0> sont appliquées dans l'ordre alphabétique (commentaires et expressions régulières). http://auth.example.com http://auth.example.com We split databases in two categories: Nous scindons les bases de données en deux catégories : Casimir ANTUNES Casimir ANTUNES apt-key add rpm-gpg-key-ow2 apt-key add rpm-gpg-key-ow2 Binaries install : Installer les exécutables : Your module has to be loaded by Apache (for example after Handler load): Le module doit être chargé par Apache (par exemple après le chargement de l'agent) : See <a0>SAML service</a0> configuration chapter. Voir le chapître de configuration du <a0>service SAML</a0>. http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://en.wikipedia.org/wiki/OpenID http://fr.wikipedia.org/wiki/OpenID Database Interface Database Interface dbi:Pg:dbname=sessions;host=10.2.3.1 dbi:Pg:dbname=sessions;host=10.2.3.1 You can also use <portal>?logout=1 as logout_url to remove LemonLDAP::NG session when “disconnect” is chosen. On peut aussi utiliser <portal>?logout=1 comme URL de déconnexion pour supprimer la session LemonLDAP::NG lorsque la déconnexion est demandée. twitterAuthnLevel twitterAuthnLevel <s0><a1>DBI</a1></s0> which has been deprecated: it is a read-only backend that exists just for compatibility with older versions of LemonLDAP::NG. <s0><a1>DBI</a1></s0> devenu obsolète : il reste un backend en lecture seule qui n'existe que pour la compatibilité avec les anciennes versions de LemonLDAP::NG. Variables Variables by date par date documentation:1.2:upgrade documentation:1.2:upgrade <s0>isAuthorizedURI(cookieValue,url)</s0>: check if user is granted to access to the function <s0>isAuthorizedURI(cookieValue,url)</s0> : vérifie si l'utilisateur est autorisé à accéder à la fonction <s7># Uncomment this line if you use portal SOAP capabilities</s7> <s7># Décommenter cette ligne si les fonctions SOAP du portail sont utilisées</s7> mkdir /tmp/MyNamespace/2: Permission denied ... mkdir /tmp/MyNamespace/2: Permission denied ... Register LemonLDAP::NG on partner Service Provider Enregistrer LemonLDAP::NG sur le fournisseur de service partenaire <s0>Format</s0> (optional): <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots http://www.limesurvey.org http://www.limesurvey.org Persistent Session backend options Options du backend des sessions persistantes Usage Utilisation LDAP configuration backend Backend de configuration LDAP Currently, the module is simply handling a Radius Authentication request and has been tested only against a FreeRadius server. Actuellement, ce module traite simplement une requête d'authentification Radius et n'a été testé que sur un serveur FreeRadius. Past and present contributors Contributeurs passé et présent Handler Redirections Redirections des agents /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots For tests with the configured domain, launch the following : Pour les tests avec le domaine configuré, lancer : Superadmin: no one can stop him! Superadmin : personne ne peut l'arrêter ! 2_pub 2_pub portal/skins/common/mail_password.tpl portal/skins/common/mail_password.tpl To configure your new skin in Manager, select the custom skin, and enter your skin name in the configuration field. Pour configurer le nouveau thème dans le manager, selectionner le thème personnalisé et entrer le nom du nouveau thème dans le champ. Proxy cookie name Nom du cookie du proxy useXForwardedForIP useXForwardedForIP <s0>Binary attributes</s0>: regular expression matching binary attributes (see <a1>Net::LDAP</a1> documentation). <s0>Attributs binaires</s0> : expression régulière correspondant aux attributs binaires (voir la documentation <a1>Net::LDAP</a1>). activeTimer activeTimer Write good rules Écrire de bonnes règles ldapConfBase ldapConfBase <a2>passwordstore</a2><br3/> <a2>passwordstore</a2><br3/> Password: will not change any password Mots-de-passe : ne change aucun mot-de-passe ../../../media/screenshots/1.1/manager/notifications_explorer_create.png ../../../media/screenshots/1.1/manager/notifications_explorer_create.png documentation:1.4:upgrade documentation:1.4:upgrade SAML Service Service SAML If the OpenID consumer ask for data, users will be prompted to accept or not the data sharing. Si le client OpenID demande des données utilisateurs, ceux-ci sont questionnés pour accepter ou non le partage. <a0>DBI</a0> Connection chain Chaîne de connexion <a0>DBI</a0> /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay Links Links <subtitle>: subtitle to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <subtitle> : sous-titre : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> It will open a dialog to choose: Une boîte de dialoque s'ouvre pour choisir : <s0><a1>Portal</a1></s0>: used to authenticate users, display applications list and provides identity provider service (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). <s0><a1>Portail</a1></s0>: utilisé pour authentifier les utilisateurs, afficher la liste des applications et fournir le service d'identité (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software The configuration will be store under a specific branch, for example <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. La configuration est stockée dans une branche spécifique, par exemple <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. <a0>DBI</a0> Mail column Colonne mail <a0>DBI</a0> http://www.tux.in.ua/articles/2810 http://www.tux.in.ua/articles/2810 Prepare the database Preparer la base de données Change default DNS domain Changer le domaine DNS par défaut Fill values here: Renseigner les valeurs ici : http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ dbiPassword dbiPassword Now we have to send the right role to the right application trough LemonLDAP::NG. Il faut maintenant envoyer le bon rôle à la bonne application via LemonLDAP::NG. <s0>Logout</s0>: logout button <s0>Déconnexion</s0> : bouton de déconnexion data longblob ); data longblob ); ../pages/documentation/1.1/authapache.html ../pages/documentation/1.1/authapache.html liblemonldap-ng-portal-perl: Portal files liblemonldap-ng-portal-perl : fichiers du portail /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help ssoLogonHours ssoLogonHours <s9>Options</s9> +ExecCGI <s9>Options</s9> +ExecCGI Mounir GZADY Mounir GZADY Here are the main options used by <a0>LL::NG</a0>: Ci-dessous les principales options utilisées par <a0>LL::NG</a0> : No configuration found No configuration found ../pages/documentation/1.1/authyubikey.html ../pages/documentation/1.1/authyubikey.html ../../documentation/1.4/configvhost.html ../../documentation/1.4/configvhost.html Restart all your remote Apache servers Redémarrer tous les serveurs Apache distants <s0>newSession</s0>: create a session (return attributes) <s0>newSession</s0> : crée une session (retourne les attributs) KrbMethodK5Passwd <s13>Off</s13> KrbMethodK5Passwd <s13>Off</s13> <s45>//"userobm_domain_id" => ,</s45> <s45>//"userobm_domain_id" => ,</s45> Portal customization Personnalisation du portail ../../documentation/1.1/upgrade.html ../../documentation/1.1/upgrade.html <s0>SSLUserName</s0> (optional): certificate field that will be used to identify user in <a1>LL::NG</a1> portal virtual host <s0>SSLUserName</s0> (optionnel) : champ du certificat à utiliser pour identifier pour identifier un utilisateur dans l'hôte virtuel du portail <a1>LL::NG</a1> <a12>logoutforward</a12><br13/> <a12>logoutforward</a12><br13/> <s0>LmLocationToReplace</s0>: string to replace in <c1>Location</c1> header <s0>LmLocationToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Location</c1> ../pages/documentation/1.1/formreplay.html ../pages/documentation/1.1/formreplay.html Apache configuration Configuration d'Apache Create sessions table: Créer la table des sessions : ../documentation/current/start.html#configuration_database ../documentation/current/start.html#configuration_database This protocol is implementated in an <a2>LL::NG</a2> specific Handler. Ce protocole est implementé dans un handler spécifique de <a2>LL::NG</a2>. documentation:1.4:variables documentation:1.4:variables twitterAppName twitterAppName <a1>Of course, there are other differences</a1>. <a1>Il y a bien sur d'autres différences</a1>. ../../../media/documentation/manager-menu-application.png ../../../media/documentation/manager-menu-application.png ../pages/documentation/1.1/authremote.html ../pages/documentation/1.1/authremote.html <a0>DBI</a0> authentication level Niveau d'authentification <a0>DBI</a0> ../../documentation/1.4/federationproxy.html ../../documentation/1.4/federationproxy.html </<s15>Location</s15>>   </<s15>Location</s15>>   To avoid problems, <a0>LL::NG</a0> decode them using <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. Pour éviter les problèmes, <a0>LL::NG</a0> les décode en utilisant <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Twitter for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Twitter comme module d'authentication. <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <<s17>IfModule</s17> mod_dir.c> <<s17>IfModule</s17> mod_dir.c> rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* Another <a0>LL::NG</a0> system configured with <a1>CAS authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification CAS</a1> documentation:1.4:soapconfbackend documentation:1.4:soapconfbackend Portal recognizes the user with its <a0>SSO cookies</a0>, and see he is coming from a different domain Le portail reconnaît l'utilisateur par son <a0>cookie SSO</a0> et voit qu'il sollicite une application d'un domaine différent You can also use the same user for all. On peut également utiliser le même compte pour tous. ../pages/documentation/1.1/authssl.html ../pages/documentation/1.1/authssl.html <a20>press</a20><br21/> <a20>press</a20><br21/> ssoEndDate ssoEndDate documentation:1.4:authnull documentation:1.4:authnull <s0>User Header</s0>: Auth-User (case sensitive) <s0>User Header</s0>: Auth-User (case sensitive) ../../documentation/1.4/status.html ../../documentation/1.4/status.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://twitter.com/lemonldapng http://twitter.com/lemonldapng Connector Connecteur Example : Exemple : <s0><a1>CAS</a1> session module name and options</s0>: choose a specific module if you do not want to mix <a2>CAS</a2> sessions and normal sessions (see <a3>why</a3>). <s0>Nom et options du module session <a1>CAS</a1></s0> : choisir un module spécifique pour ne pas mêler les sessions <a2>CAS</a2> et les sessions normales (voir <a3>pourquoi</a3>). Authentication and UserDB Authentification et base d'utilisateurs No <a0>headers</a0> are required. Aucun <a0>en-tête</a0> n'est nécessaire. Variables are stored in the user session. Les variables sont stockées dans la session utilisateur. <s0>Mail charset</s0>: Charset used for the body of the mail (default: utf-8) <s0>Jeu de caractères du courriel</s0> : jeu de caractère utilisé pour le corps du message (défaut : utf-8) ../../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../../documentation/1.4/configvhost.html#lemonldapng_configuration <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> lemonldap_ng_sample_protected_application_1340022329086.png lemonldap_ng_sample_protected_application_1340022329086.png Form replay data les données à rejouer dans les formulaires Get the tarball on <a0>download page</a0> and follow next steps (or install using <a1>RPM</a1> or <a2>Debian</a2> packages): Récupérez l'archive sur la <a0>page de téléchargement</a0> et suivez les étapes suivantes (ou installez les paquets <a1>RPM</a1> ou <a2>Debian</a2>): <s0>Group source attribute</s0>: name of the attribute in groups entries used in the link, for recursive group search (default: dn). <s0>Attribut source du groupe</s0> : nom de l'attribut dans l'entrée groupe utilisé dans le lien pour la recherche récursive de groupe (défaut : dn). ../../documentation/1.4/portalmenu.html ../../documentation/1.4/portalmenu.html mailreset_step4.png mailreset_step4.png A skin is composed of different files: Un thème est composé de différents fichiers : Adapt the reload virtual host name to the domain you configured. Adapter le nom d'hôte virtuel de rechargement au domaine configuré. User is redirected on portal and his <a0>SSO cookies</a0> is empty L'utilisateur est redirigé vers le portail et son <a0>cookie SSO</a0> est vide mailreset_step1.png mailreset_step1.png To use TLS, set <c0>ldap+tls://server</c0> and to use LDAPS, set <c1>ldaps://server</c1> instead of server name. Pour utiliser TLS, utiliser <c0>ldap+tls://server</c0> et pour utiliser LDAPS, indiquer <c1>ldaps://server</c1> au lieu du nom de serveur. /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart documentation:1.4:applications:phpldapadmin documentation:1.4:applications:phpldapadmin You must read the man page corresponding to your database (<a0>Apache::Session::MySQL</a0>, …) to learn more about parameters. Il faut consulter la page de manuel correspondant à la base de données (<a0>Apache::Session::MySQL</a0>, …) pour connaître les paramètres. Exported attributes Attributs exportés Prerequisites Pré-requis <s0>Application logout</s0>: the request is forwarded to application but <a1>SSO</a1> session is not closed <s0>Déconnexion applicative</s0>: la requête est transmise à l'application mais la session <a1>SSO</a1> n'est pas détruite Change <s0>mydomain.org</s0> into your Google Apps domain Mettre <s0>mydomain.org</s0> dans le domaine Google Apps Some examples: Quelques exemples: https://metacpan.org/module/Apache::Session::Browseable https://metacpan.org/module/Apache::Session::Browseable /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots <s0>fileNameSeparator</s0>: file name separator. <s0>fileNameSeparator</s0> : séparateur de nom de fichier. ../media/logos/logo_ministere_justice.jpg ../media/logos/logo_ministere_justice.jpg </<s6>IfModule</s6>>   </<s6>IfModule</s6>>   SAML sessions module name and options Options et nom du module de sessions SAML <s0>adminSessions/</s0>: read/write access to sessions (required for distant Portal, distant Manager or distant Handlers which modify sessions) <s0>adminSessions/</s0> : accès en lecture/écriture aux sessions (nécessaire pour les portails ou manager distants ou les handlers distants qui modifient les sessions) PRIMARY KEY (cfgNum,field) PRIMARY KEY (cfgNum,field) It is stored in session datas under the name <s0>$_facebookToken</s0> Il est stocké dans les données de session sous le nom <s0>$_facebookToken</s0> cd lemonldap-ng-* make make configure make test sudo make install cd lemonldap-ng-* make make configure make test sudo make install documentation:1.4:federationproxy documentation:1.4:federationproxy documentation:1.4:authmulti documentation:1.4:authmulti Status module activation Activation du module de statut tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages https://auth.linagora.com/ https://auth.linagora.com/ http://journeesperl.fr/fpw2011/talk/3383 http://journeesperl.fr/fpw2011/talk/3383 LemonLDAP::NG provide a script that allows to edit configuration items in non interactive mode. LemonLDAP::NG fournit un script qui autorise l'édition d'éléments de configuration en mode non-interactif. Zimbra application in menu Application Zimbra dans le menu http://search.cpan.org/perldoc?Apache::Session http://search.cpan.org/perldoc?Apache::Session aptitude install lemonldap-ng aptitude install lemonldap-ng In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>CAS</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> et configurer : Safe can be very annoying when we use <a0>extended functions</a0> or <a1>custom functions</a1>. Safe peut être très gênant lorsqu'on utilise les <a0>fonctions étendues</a0> ou les <a1>fonctions personnalisées</a1>. http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev NTLM NTLM Postal code Postal code kdestroy kdestroy (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? <s1>RewriteEngine</s1> <s2>On</s2> <s1>RewriteEngine</s1> <s2>On</s2> Custom functions Fonctions personnalisées make make test make make test ../../documentation/1.4/writingrulesand_headers.html#headers ../../documentation/1.4/writingrulesand_headers.html#headers LemonLDAP::NG configuration Configuration de LemonLDAP::NG Configure your tomcat home in <c0>build.properties</c0> files. Configurer votre tomcat home dans le fichier <c0>build.properties</c0>. Customizable NameID formats are: Les formats de NameID personnalisables sont : RMLL RMLL <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> Extract from the <a0>Wikipedia article</a0>: Extrait de <a0>l'article Wikipedia</a0>: ^/public/ ^/public/ Kinematics: Cinématique : make ubuntu-install make ubuntu-install ../../documentation/1.4/filesessionbackend.html ../../documentation/1.4/filesessionbackend.html ../pages/documentation/1.1/sessions.html ../pages/documentation/1.1/sessions.html https://wikit.firewall-services.com/doku.php?id=lemonldap_ng https://wikit.firewall-services.com/doku.php?id=lemonldap_ng <s0>Force authentication</s0>: set to 'On' to force authentication when user connects to portal, even if he has a valid session <s0>Forcer l'authentification</s0> : mettre à 'Activé' pour forcer l'authentification lorsque l'utilisateur accède au portail même s'il dispose d'une session valide Define at least: Definir au moins : ../media/rpm-gpg-key-ow2 ../media/rpm-gpg-key-ow2 Edit also OBM Apache configuration to enable <a0>LL::NG</a0> Handler: Éditer également la configuration du serveur Apache d'OBM pour activer les en-têtes <a0>LL::NG</a0> : multiValuesSeparator multiValuesSeparator Go in Manager, and: Aller dans le manager et : ^/pub/admin/ ^/pub/admin/ unicode2iso unicode2iso openIdIDPList openIdIDPList You just need to know the ID of the error (look at Portal/Simple.pm) and then add to <c0>lemonldap-ng.ini</c0>: Il suffit de connaître l'ID de l'erreur (voir Portal/Simple.pm) et de l'ajouter dans <c0>lemonldap-ng.ini</c0> : <s0>SSLVerifyClient</s0>: set to <c1>optional</c1> to allow user with a bad certificate to access to <a2>LL::NG</a2> portal page. <s0>SSLVerifyClient</s0> : mettre à <c1>optional</c1> pour autoriser les utilisateurs ne disposant pas d'un certificat valide à accéder à la page du portail <a2>LL::NG</a2> Get the tarball from <a0>download page</a0>. Récupérer l'archive depuis la <a0>page de téléchargement</a0>. This script must be run as root, it will then use the Apache user and group to access configuration. Ce script doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration. Auto login Auto login More than one server can be set here separated by spaces or commas. Plusieurs serveurs peuvent être renseignés séparés par des virgules ou espaces. Notification delete function: Fonction d'effacement de notification : Add a floating menu Ajouter un menu flottant Zimbra syncs to smartphones (iPhone, BlackBerry) and desktop clients like Outlook and Thunderbird. Zimbra se synchronise avec les smartphones (iPhone, BlackBerry) et les clients lourds de bureau tels Outlook et Thunderbird. <a20>authfacebook</a20><br21/> <a20>authfacebook</a20><br21/> <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s0>dbiUser</s0>: <a1>DBI</a1> user. <s0>dbiUser</s0> : utilisateur <a1>DBI</a1>. <a0>Download the Lasso tarball</a0> and compile it on your system. <a0>Téléchargez l'archive Lasso</a0> et compilez là sur votre système. We include some template files that can be customized: Nous incluons des fichiers modèles qui peuvent être personnalisés : Certificate authorities directory Répertoire des autorités de certification Configuration access Accès à la configuration LemonLDAP::NG Manager Gestionnaire LemonLDAP::NG <s0>get_key_from_all_sessions</s0>: list all sessions and return asked keys <s0>get_key_from_all_sessions</s0> : liste toutes les sessions et retourne les clefs demandées screenshots:1.1:manager:notifications_explorer_create.png screenshots:1.1:manager:notifications_explorer_create.png <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> documentation/features.html documentation/features.html Give display name Donne le nom à afficher vi /var/www/html/limesurvey/config.php vi /var/www/html/limesurvey/config.php Form replay with Apache mod_proxy Rejeu de formulaires avec le mod_proxy d'Apache Protected application sends response to Handler L'application protégée renvoie sa réponse à l'agent <s0>Shared secret</s0>: this is the passphrase to use to connect to the Radius server <s0>Secret partagé</s0> : la phrase de passe à utiliser pour se connecter au serveur Radius $_userDB $_userDB If a modification is done, the configuration is saved with a new configuration number. Si une modification est effectuée, la configuration est sauvée avec un nouveau numéro. documentation:manager-menu-application.png documentation:manager-menu-application.png Headers are defined inside a virtualhost and takes effect only on it. Les en-têtes sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Manage virtual hosts Gérer les hôtes virtuels Authentication module Module d'authentication If the user do a new password reset request but there is already a request pending, the user can ask the confirmation mail to be resent. Si l'utilisateur effectue une nouvelle demande de réinitialisation mais qu'une requête est déjà en attente, il peut demander une ré-expédition du courriel. Event Événement MD5 MD5 dbiUserUser dbiUserUser XXXX was not found in tree XXXX was not found in tree If you modify <c0>/saml/metadata</c0> suffix you have to change corresponding Apache rewrite rule. Si vous modifiez le suffixe <c0>/saml/metadata</c0>, vous devez changer la règle de réécriture d'Apache. ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/samlservice.html ../pages/documentation/1.1/samlservice.html $groups $groups <a28>authnull</a28><br29/> <a28>authnull</a28><br29/> Domain Name System Domain Name System http://www.iana.org/assignments/enterprise-numbers http://www.iana.org/assignments/enterprise-numbers <<s25>Location</s25> /index.pl/notification> <<s25>Location</s25> /index.pl/notification> documentation:1.4:customfunctions documentation:1.4:customfunctions ../../../media/applications/zimbra_logo.png ../../../media/applications/zimbra_logo.png Example for groups: Exemples de groupes: ^/config/ ^/config/ Status module can not be loaded without localStorage parameter Status module can not be loaded without localStorage parameter Prepare database Préparer la base de données ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/passwordstore.html ../../documentation/1.4/passwordstore.html No headers are needed. Aucun en-tête n'est nécessaire. _utime _utime Configure the following <a0>headers</a0>. Configurer les <a0>en-têtes</a0> suivants. Cookie Javascript protection Protection Javascript du cookie translations.html translations.html Remember that rules written on GET parameters must be tested. Rappel : les règles poratnt sur des paramètres GET doivent être testées. ../../documentation/1.4/applications/bugzilla.html ../../documentation/1.4/applications/bugzilla.html Else, current configuration is kept. Sinon, la configuration courante est gardée. Manager tree JQuery <a0>CSS</a0> file Fichier <a0>CSS</a0> de l'arbre JQuery du manager POST data: use form replay Des données POST : à utiliser pour répondre aux formulaires 10.0.0.1:20000 10.0.0.2:20000 10.0.0.1:20000 10.0.0.2:20000 When installing <a0>LL::NG</a0>, the Manager can only be accessed with the demo account <c1>dwho</c1>. Lorsqu'on installe <a0>LL::NG</a0>, le manager n'est accessible que via le compte de démonstration <c1>dwho</c1>. Proxy backend to be used in conjunction with another session backend. Backend proxy à utiliser avec un autre backend de sessions. [PORTAL] is the portal <a0>URL</a0> [PORTAIL] est l'<a0>URL</a0> du portail <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> install_examples_site (/usr/local/lemonldap-ng/examples) install_examples_site (/usr/local/lemonldap-ng/examples) Redirection to the portal of the secondary area (transparent) Redirection vers le portail secondaire (transparent) <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> NameID formats Formats de NameID ../pages/documentation/1.1/writingrulesand_headers.html ../pages/documentation/1.1/writingrulesand_headers.html Auth-Roles => $ssoRoles Auth-Roles => $ssoRoles Cascading Style Sheets Cascading Style Sheets https://cas.unilim.fr/ https://cas.unilim.fr/ Go to the Manager and <a0>create a new virtual host</a0> for LimeSurvey. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour LimeSurvey. Install and launch a <a0>Redis server</a0>. Installez et lancer un <a0>serveur Redis</a0>. Pages where this menu is displayed can be restricted, for example: Les pages où ce menu est affiché peuvent être restreintes, par exemple : secureTokenMemcachedServers secureTokenMemcachedServers Reset password on next logon workflow Réinitialisation du mot-de-passe à la connexion suivante ../../documentation/1.4/security.html#write_good_rules ../../documentation/1.4/security.html#write_good_rules Issy Les Moulineaux Issy-les-Moulineaux You can prefix the key name with a digit to order them. Il est possible d'ordonner les noms de clefs en utilisant un préfixe numérique. <s0>Response Location</s0>: Access Point for <a1>SSO</a1> response. <s0>Response Location</s0> : Point d'accès pour les réponses <a1>SSO</a1>. Location Lieu logos:logo_ucanss.png logos:logo_ucanss.png These options are used to build redirection <a0>URL</a0> (when user is not logged, or for <a1>CDA</a1> requests). Ces options sont utilisées dans la construction des <a0>URL</a0> de redirection (lorsque l'utilisateur n'est pas connecté ou pour les requêtes <a1>CDA</a1>). Sessions database Base de données des sessions A macro is stored as attributes: it can contain boolean results or any string Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères Now we will add Google Apps as a new <a0>SAML</a0> Service Provider: Ajouter ensuite Google Apps comme nouveau fournisseur de service <a0>SAML</a0> : Safe jail Cage sécurisée Presentation Présentation Speaker Conférencier <a0>SSO cookies</a0> is not detected, so Handler redirects user to Portal Si le <a0>cookies SSO</a0> n'est pas détecté, l'agent redirige l'utilisateur vers le portail ../pages/documentation/1.1/applications/authbasic.html ../pages/documentation/1.1/applications/authbasic.html <a0>LL::NG</a0> can also act as <a1>SAML IDP</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir comme un <a1>IDP SAML</a1>, ce qui permet d'interconnecter deux systèmes <a2>LL::NG</a2>. ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ConFoo ConFoo <a0>SAML</a0> Session backend options Options du module de stockage <a0>SAML</a0> ../../documentation/1.4/fastcgi.html ../../documentation/1.4/fastcgi.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html documentation:1.4:sqlsessionbackend documentation:1.4:sqlsessionbackend You can also choose a different session module to split <a0>SSO</a0> sessions and <a1>SAML</a1> sessions. Vous pouvez également utiliser un module différent pour répartir les sessions <a0>SSO</a0> et <a1>SAML</a1>. Reset password by mail (self service) Réinitialiser les mots-de-passe par mail (self-service) Use redirect on error Utiliser les redirections en cas d'erreur Redis server Serveur Redis Go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>SAML</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2><a3>SAML</a3> et configurer : <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword LockDirectory LockDirectory References Références ../../documentation/1.0/upgrade.html ../../documentation/1.0/upgrade.html cp HttpAuthPlugin.php extenstions/ cp HttpAuthPlugin.php extenstions/ documentation:1.4:ldapconfbackend documentation:1.4:ldapconfbackend 1f777a6581e478499f4284e54fe2d4a4e513dfff 1f777a6581e478499f4284e54fe2d4a4e513dfff The user click on the link in the mail L'utilisateur clique sur le lien dans le courriel LL::NG as federation protocol proxy LL::NG en proxy de fédération de protocoles Portal (impact theme) Portail (thème impact) Prefer then the other solutions (see below). Si c'est le cas, utiliser une autre solution (voir ci-dessous). The portal is the biggest component of Lemonldap::NG. Le portail est le composant le plus gros de Lemonldap::NG. Google Apps does not support Single Logout (SLO). Google Apps ne supporte pas le Single Logout (SLO). LemonLDAP::NG allows to override any configuration parameter directly in script file. LemonLDAP::NG autorise la surcharge de tout paramètre de configuration directement dans les fichiers de script. postcode postcode variables variables Proxy Granting Ticket Proxy Granting Ticket This option can then be overridden for each Service Provider. Cette option peut être surchargée pour chaque fournisseur de service. ../../documentation/1.4/parameterlist.html ../../documentation/1.4/parameterlist.html Authentication backend Module d'authentification Dokuwiki virtual host in Manager Hôte virtuel Dokuwiki dans le manager http://httpd.apache.org/docs/current/mod/mod_ssl.html http://httpd.apache.org/docs/current/mod/mod_ssl.html ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> http://webchat.freenode.net http://webchat.freenode.net http://lanyrd.com/2012/fosdem/spfqq/ http://lanyrd.com/2012/fosdem/spfqq/ Create two macros (inside <c0>Variables</c0> » <c1>Macros</c1>): Créer deux macros (dans <c0>Variables</c0> » <c1>Macros</c1>): <a0>LWP::UserAgent</a0> parameters Paramètre <a0>LWP::UserAgent</a0> ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../pages/documentation/1.1/cda.html ../pages/documentation/1.1/cda.html 'namespace' => 'MyNamespace'? 'namespace' => 'MyNamespace'? lemonldap-ng: meta-package, contains no file but dependencies on other packages lemonldap-ng : meta-paquet qui ne contient aucun fichier mais des dépendances vers les autres paquets Jan 2012: <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Jan 2012 : <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Roadmap Feuille de route ../pages/documentation/1.1/applications/tomcat.html ../pages/documentation/1.1/applications/tomcat.html This objectClass allow attributes <c1>cn</c1> and <c2>description</c2>. Cet classe d'objet autorise les attributs <c1>cn</c1> et <c2>description</c2>. Jquery (javascript framework) is included in tarball and RPMs, but is a dependency on Debian official releases Jquery (framework javascript) est inclus dans l'archive et les RPMs, mais est une dépendance des versions officielles Debian Prepare the database and the LL::NG configuration file Preparer la base de donnée et le fichier de configuration LL::NG documentation:1.4:security documentation:1.4:security Manager (sessions explorer) Manager (explorateur de sessions) <s0>Check SLO message signature</s0>: check SLO message signature <s0>Vérifie la signature des messages SLO</s0> : vérifie la signature des messages SLO See <a0>translations</a0>. Voir <a0>traductions</a0>. ../../../media/applications/phpldapadmin_logo.png ../../../media/applications/phpldapadmin_logo.png Anonymous access Accès anonyme They are extracted from the users database by the <a1>users module</a1>. Elles sont extraites de la base de données des utilisateurs par le <a1>module utilisateurs</a1>. The default rule is: La règle par défaut est : Use LDAP for sessions Utiliser LDAP pour les sessions Accounting Traçabilité checkLogonHours($ssoLogonHours, '', $_timezone) checkLogonHours($ssoLogonHours, '', $_timezone) Back to main index Retour à l'index principal All static content (examples, <a0>CSS</a0>, images, etc.) is in /usr/share/lemonldap-ng/ Tous le contenu statique (exemples, <a0>CSS</a0>, images, etc...) se trouve dans /usr/share/lemonldap-ng/ <s0>Confirmation mail content</s0> (optional): Content of mail sent when password change is asked <s0>Contenu du message de confirmation</s0> (optionnel) : contenu du courriel envoyé lorsque le changement de mot-de-passe est demandé notifyDeleted notifyDeleted You have to install mod_ssl for Apache. Installer mod_ssl pour Apache. See <a0>how to do this</a0> on Zimbra wiki. Voir <a0>comment le faire</a0> sur le wiki Zimbra. Use with caution. À utiliser avec précaution. By default, notifications will be stored in the same database as configuration: Par défaut, les notifications sont stockées dans la même base de données que la configuration : http://search.cpan.org/perldoc?DBD::Pg http://search.cpan.org/perldoc?DBD::Pg It is also used by <a2>SAML SP</a2> to fill the authentication level in user session, based on authentication response authentication context. Il est également utilisé par le <a2>SP SAML</a2> pour définir le niveau d'authentification dans la session de l'utilisateur en se basant sur la réponse d'authentification. This documentation will focus on Kerberos authentication module, that can allow for example to set transparent authentication for Active Directory users (as Active Directory is a Kerberos server). Cette documentation se focalise sur le module d'authentification Kerberos qui permet par exemple de rendre transparente l'authentification sur Active Directory (car Active Directory est un serveur Kerberos). xguimard@example.com xguimard@example.com <s168>)</s168><s169>;</s169> <s168>)</s168><s169>;</s169> download Téléchargement To extend <a0>SSO</a0> on several domains, a cross-domain mechanism is implemented in LemonLDAP::NG. Pour étendre le <a0>SSO</a0> sur plusieurs domaines, un mécanisme inter-domaines est intégré à LemonLDAP::NG. <a0>safejail</a0><br1/> <a0>safejail</a0><br1/> $groups =~ /\badmin\b/ $groups =~ /\badmin\b/ Go on <a0>http://auth.example.com</a0> and log with one of the demonstration account. Allez sur <a0>http://auth.example.com</a0> et connectez-vous avec l'un des comptes de démonstration Protect the Manager by LL::NG Protéger le manager par LL::NG Portal <a0>URL</a0> is the address used to redirect users on the authentication portal by: L'<a0>URL</a0> du portail est l'adresse utilisée pour rediriger les utilisateurs bers le portail d'authentification par : /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay Install the new lemonldap-ng.ini file at the place of the old file in all <a0>LL::NG</a0> servers Installer le nouveau fichier lemonldap-ng.ini à la place de l'ancien dans tous les serveurs <a0>LL::NG</a0> twitterSecret twitterSecret <s6>require</s6> SOAP::Lite; </Perl> <s6>require</s6> SOAP::Lite; </Perl> Pascal PEJAC Pascal PEJAC /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability <a0>CAS</a0> CA file Fichier d'AC de <a0>CAS</a0> <a1>Try Freenode Webchat</a1>! <a1>Essayez le client web Freenode</a1> ! https://developers.facebook.com/apps https://developers.facebook.com/apps phpLDAPadmin phpLDAPadmin Use /adminSessions if the Handler need to modify the session, for example if you configured an idle timeout. Utiliser /adminSessions si l'agent doit modifier la session, par exemple si on configure un délai d'inactivité des sessions. /_detail/logos/sgs_white_small.jpg?id=references /_detail/logos/sgs_white_small.jpg?id=references Radius secret Secret Radius http://dev.twitter.com/pages/api_faq http://dev.twitter.com/pages/api_faq To get attributes values in session, declare them in <a0>exported variables</a0> Pour utiliser ces valeurs dans les sessions, il faut les déclarer dans les <a0>variables exportées</a0> Most of configuration can be done trough LemonLDAP::NG Manager (by default <a0>http://manager.example.com</a0>). La majeure partie de la configuration peut être réalisée via le manager LemonLDAP::NG (par défaut <a0>http://manager.example.com</a0>). All handlers download the whole configuration, so many servers can serve the same virtual hosts Tous les agents téléchargent intégralement la configuration, donc plusieurs serveurs peuvent servir le même hôte virtuel icons:personal.png icons:personal.png Each virtual host is a protected resource, with access rules, headers, POST data and options. Chaque hôte virtuel est une ressource protégée, avec règles d'accès, en-têtes, options et données POST. by double <a0>IP</a0> (sessions opened by the same user from multiple computers) par double <a0>IP</a0> (sessions ouvertes par le même utilisateur sur plusieurs machines) Xavier GUIMARD<br0/> Xavier GUIMARD<br0/> exportedVars exportedVars documentation:manager_access_rule.png documentation:manager_access_rule.png documentation:1.4:authdbi documentation:1.4:authdbi The cookie $id isn't yet available: Object does not exist in the data store The cookie $id isn't yet available: Object does not exist in the data store documentation:1.4:prereq documentation:1.4:prereq See <a0>Manager protection documentation</a0> to know how to use Apache modules or <a1>LL::NG</a1> to manage access to Manager. Voir la <a0>documentation de protection du manager</a0> pour savoir comment utiliser les modules d'Apache ou <a1>LL::NG</a1> pour gérer l'accès au manager. customheader.tpl : <a0>HTML</a0> code int the header div customheader.tpl : code <a0>HTML</a0> inséré dans le div d'en-tête </<s18>IfModule</s18>> </<s18>IfModule</s18>> These settings can be overriden per virtual host, see <a0>virtual host management</a0>. Ces paramètres peuvent être surchargés dans chaque hôte virtuel, voir la <a0>gestion des hôtes virtuels</a0>. <a2>exportedvars</a2><br3/> <a2>exportedvars</a2><br3/> http://auth.example.com/index.pl/sessions http://auth.example.com/index.pl/sessions ^/admin/ ^/admin/ http://www.omegat.org/ http://www.omegat.org/ http://drupal.org http://drupal.org Remote Session backend options Options du backend de sessions distant <s0>List type</s0>: choose white list to define allowed domains or black list to define forbidden domains <s0>Type de liste</s0> : choisir liste blanche pour définir la liste exhaustive des domaines autorisés ou liste noire pour lister les domaines interdits Example Exemple http://joind.in/2862 http://joind.in/2862 <s0>Success mail subject</s0>: Subject of mail sent when password is changed (default: [LemonLDAP::NG] Your new password) <s0>Sujet du message de succès</s0> : sujet du courriel lorsque le mot-de-passe est changé (défaut : [LemonLDAP::NG] Your new password) casStorageOptions casStorageOptions documentation:1.4:installdeb documentation:1.4:installdeb In this case you will be able to use <c1>$_password</c1> to fill any password POST field. Dans ce cas, la variable <c1>$_password</c1> peut être utilisée dans tous les champs à envoyer. You can set one or several <a3>IP</a3> addresses, separated by spaces, or let this parameter empty to disable the checking. Plusieurs adresses <a3>IP</a3> separées par des espaces peuvent être entrées, ou ce paramètre peut rester vide pour désactiver ce contrôle. Then set: et indiquez : <a0>DBI</a0> password Mot-de-passe <a0>DBI</a0> The redirection from portal can be done either with code 303 (See Other), or with a JavaScript redirection. Cette redirection du portail peut être effectuée via le code 303 (See Other) ou par une redirection JavaScript. images and other media files images et autres médias This message is displayed only when you upgrade from a version older than 1.0 Ce message n'est affiché que lors d'une mise à jour depuis une version inférieure à la 1.0 yum update yum update <s0># SOAP functions for sessions management (disabled by default)</s0> <s0># Gestion des fonctions SOAP functions pour la gestion des sessions (désactivée par défaut)</s0> Configuration Configuration <s0># SAML2 Issuer</s0> <s0># Fournisseur d'identité SAML2</s0> persistentStorage persistentStorage documentation:1.4:ldapsessionbackend documentation:1.4:ldapsessionbackend Variables can be used in rules and headers. Les variables peuvent être utilisées dans les règles et en-têtes. <s0>WebID whitelist</s0>: list of space separated hosts granted to host FOAF document. <s0>Liste blanche WebID</s0> : liste de noms d'hôtes, séparés par des espaces, autorisés à héberger les documents FOAF. http://search.cpan.org/perldoc?Apache::Session::Postgres http://search.cpan.org/perldoc?Apache::Session::Postgres Authentication choice will also be registered in session: Le choix d'authentication est également enregistré dans la session : You just have to activate Notifications in the Manager (General Parameters > Advanced Parameters > Notifications > Activation) or in lemonldap-ng.ini: Il suffit d'activer les notifications dans le manager (Paramètres généraux > Paramètres avancés > Notifications > Activation) ou dans lemonldap-ng.ini : During this period, user can ask the confirmation mail to be resent (default: session timeout value) Durant cette période, l'utilisateur peut demander que le courriel soit ré-émis (défaut : durée de vie de la session) <a0>DBI</a0> UserDB connection password Mot-de-passe de connexion UserDB <a0>DBI</a0> The request validity time is a configuration parameter. La durée de validité de la requête est un paramètre de configuration. internal variables, managed by LemonLDAP::NG les variables internes, gérées par LemonLDAP::NG Apache portal SSL configuration Configuration SSL du portail dans Apache <s0>Auth-User</s0>: $uid <s0>Auth-User</s0>: $uid install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) Indeed, this variable is set by the Handler on the physical server hosting the Handler, and not on other servers where the Handler is not installed. Toutefois, cette variable est renseignée par l'agent dans le serveur physique l'hébergeant mais pas dans les autres serveurs sans agents. ../documentation/current/portalcustom.html ../documentation/current/portalcustom.html Give a static value Donne une valeur statique OW2 annual conference Conférence annuelle OW2 <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> /_detail/icons/lists.png?id=documentation%3A1.4%3Astart /_detail/icons/lists.png?id=documentation%3A1.4%3Astart SSO cookie Cookie SSO Some options are available: Quelques options sont disponibles : ../../documentation/1.4/applications/spring.html ../../documentation/1.4/applications/spring.html ../pages/documentation/1.1/rbac.html ../pages/documentation/1.1/rbac.html Next create the configuration branch where you want. Créer ensuite la branche des configurations n'importe où. Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... macros are used to extend (or rewrite) <s0><a1>exported variables</a1></s0>. Les macros sont utilisées pour étendre (ou réécrire) les <s0><a1>variables exportées</a1></s0>. http://lanyrd.com/2011/fpw2011/sfhcb/ http://lanyrd.com/2011/fpw2011/sfhcb/ This works like <a0>File backend</a0>, except that data are serialized in JSON. Il fonctionne comme le <a0>backend File</a0>, si ce n'est que les données sont sérialisées au format JSON. <a0>CAS</a0> <a1>PGT</a1> temporary file Fichier temporaire <a1>PGT</a1> de <a0>CAS</a0> To enable <a0>LL::NG</a0> authentication plugin, go in <c1>/etc/obm/obm_conf.inc</c1>: Pour activer le composant d'authentification <a0>LL::NG</a0>, aller dans <c1>/etc/obm/obm_conf.inc</c1>: Hamza AISSAT Hamza AISSAT documentation:1.0:upgrade documentation:1.0:upgrade ../../../media/icons/jabber_protocol.png ../../../media/icons/jabber_protocol.png To work with <a0>LL::NG</a0> it requires: Pour fonctionner avec <a0>LL::NG</a0> il faut : ../pages/documentation/1.1/securetoken.html ../pages/documentation/1.1/securetoken.html Open SSO session Ouvrez une session SSO Strasbourg Strasbourg <s0>logon_hours</s0>: string representing allowed logon hours (GMT) <s0>logon_hours</s0> : chaîne représentant les heures autorisées (GMT) ../../../documentation/1.4/passwordstore.html ../../../documentation/1.4/passwordstore.html Net::OpenID::Consumer > 1.00 Net::OpenID::Consumer > 1.00 groups are stored as space-separated strings in the special attribute “groups”: it contains the names of groups whose rules were returned true for the current user les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant File configuration backend Backend de configuration File Send “Lastname, firstname” in Auth-Name: Envoi de “Lastname, firstname” dans Auth-Name: cda cda ../../../media/icons/kmultiple.png ../../../media/icons/kmultiple.png <a0>LL::NG</a0> uses <a1>Perl Authen::Radius </a1> as a simple authentication backend. <a0>LL::NG</a0> utilise <a1>Authen::Radius de Perl</a1> comme simple backend d'authentification. /_detail/icons/flags/de.png?id=press /_detail/icons/flags/de.png?id=press South Bay Community Network South Bay Community Network <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> Access rule: <c0>accept</c0> Règle d'accès : <c0>accept</c0> <a2>Lutece</a2> <a2>Lutece</a2> port port Outlook Web Access, … Outlook Web Access, … <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <s7>Allow</s7> from <s8>all</s8> <s7>Allow</s7> from <s8>all</s8> https://websso.dmz.bpi.fr/ https://websso.dmz.bpi.fr/ In the schema above, the user has the following values: Dans le schéma ci-dessus, l'utilisateur dispose des entrées suivantes : documentation:1.4:applications:googleapps documentation:1.4:applications:googleapps mailto:lemonldap-ng-users@ow2.org mailto:lemonldap-ng-users@ow2.org Required for PostgreSQL Requis pour PostgreSQL <a4>performances</a4><br5/> <a4>performances</a4><br5/> Proxy backend to be used in conjunction with another configuration backend. Backend proxy à utiliser avec un autre backend de configuration. You can define how many logins and failed logins will be stored. On peut définir le nombre de connexions et d'échecs à stocker. Apache based protection Protection basée sur Apache All identity provider protocols can be used simultaneously Tous les protocoles de fournisseur d'identité peuvent être utilisés simultanément In Debian/Ubuntu mod_ssl is already shipped in <c0>apache2.2-common</c0> package. Dans Debian/Ubuntu mod_ssl est installé avec le paquet <c0>apache2.2-common</c0>. Drupal virtual host in Apache Hôte virtuel Apache hébergeant Drupal ../../documentation/features.html#session_restrictions ../../documentation/features.html#session_restrictions ../../../documentation/1.4/idpsaml.html ../../../documentation/1.4/idpsaml.html http://jira.ow2.org/browse/LEMONLDAP http://jira.ow2.org/browse/LEMONLDAP lemonldapng lemonldapng LemonLDAP::NG <a0>SSO cookies</a0> are generated by <a1>Apache::Session</a1>, they are as secure as a 128-bit random cookie. Les <a0>cookies SSO</a0> de LemonLDAP::NG sont générés par <a1>Apache::Session</a1>, ils sont aussi sûrs que tout cookie basé sur un aléa de 128 bits. ...   </<s3>VirtualHost</s3>> ...   </<s3>VirtualHost</s3>> UserName -> ... UserName -> ... By default, LemonLDAP::NG uses Apache logs to store user actions and other messages: Par défaut, LemonLDAP::NG utilise les journaux d'Apache pour journaliser les actions des utilisateurs et autre messages : You can write <a0>rules</a0> matching any component of <a1>URL</a1> to protect including GET parameters, but be careful. On peut écrire des <a0>règles</a0> qui examine n'importe quel composant de l'<a1>URL</a1> à protéger y compris les paramètres GET, mais il faut faire attention. ../media/icons/flags/de.png ../media/icons/flags/de.png change password (with server side password policy management) changer les mots-de-passe (avec la gestion de la politique de mot-de-passe côté serveur) qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); User provisioning (account auto creation at first connection) Importation des comptes utilisateurs (auto-création à la première connexion) After choosing the file name (for example lemonldapn-ng-priv.key), download the key on your disk. Après avoir choisi le nom de fichier (par exemple lemonldapn-ng-priv.key), le télécharger sur le disque. Configure Drupal virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Drupal comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Access to Liferay (first time): Accès à Liferay (première connexion): ../pages/documentation/1.1/applications/bugzilla.html ../pages/documentation/1.1/applications/bugzilla.html ../../documentation/1.4/resetpassword.html ../../documentation/1.4/resetpassword.html documentation:liferay_3.png documentation:liferay_3.png <s0>+3M</s0>: three months from session creation <s0>+3M</s0> : trois mois après la création de la session Parameter redirections Paramètrer les redirections chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock <a0>URL</a0> used before being redirected to the portal (empty if portal was used as entry point) <a0>URL</a0> utilisée avant d'être redirigé vers le portail (vide si le portail a été utilisé comme point d'entrée) Datas related to <a0>SAML</a0> protocol Donnée relative au protocole <a0>SAML</a0> Zimbra Zimbra Project = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(where zz is your international code, example: “fr” for France)</e1> Projet = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> uid uid PostgreSQL PostgreSQL <a0>URL</a0> pattern: <c1>^/admin/</c1> Expression sur l'<a0>URL</a0> : <c1>^/admin/</c1> ../../documentation/1.4/jsonfileconfbackend.html ../../documentation/1.4/jsonfileconfbackend.html <a2>redirections</a2><br3/> <a2>redirections</a2><br3/> It means that you manage authorizations to access applications by checking the role(s) of the user, and provide this role to the application. Celà signifie qu'on gère les autorisations d'accès aux applications en examinant le(s) rôle(s) de l'utilisateur et en fournissant ce(s) rôle(s) à l'application. Organization Organisation ../../documentation/1.4/samlservice.html ../../documentation/1.4/samlservice.html ../pages/documentation/1.1/ssocookie.html ../pages/documentation/1.1/ssocookie.html Admin Admin 0.9.4_password_menu.png 0.9.4_password_menu.png Examples for <a0>LDAP</a0>: Exemples pour <a0>LDAP</a0> : LemonLDAP::NG will do some checks on configuration and display errors and warnings if any. LemonLDAP::NG effectue ensuite quelques tests sur la configuration et affiche les éventuelles erreurs et avertissements. ../../../../media/documentation/googleapps-sso.png ../../../../media/documentation/googleapps-sso.png The “default” rule is only applied if no other rule match La règle “default” n'est appliquée que si aucune autre règle ne correspond <s0># group</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Use a group in a rule</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> <s0># groupe</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Utiliser un groupe dans une règle</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> DNS DNS ../../documentation/1.4/authsaml.html ../../documentation/1.4/authsaml.html <s0>Virtual Hosts</s0>: access rules, headers, etc. <s0>Hôtes virtuels</s0> : règles d'accès, en-têtes, etc... ../../documentation/1.4/authopenid.html ../../documentation/1.4/authopenid.html status status Uniform Resource Identifier Uniform Resource Identifier GLPI GLPI Create database: Créer la base de données : documentation/presentation.html documentation/presentation.html Portal destroys session and redirects user on itself with an empty <a0>SSO cookies</a0> Le portail détruit la session et redirige l'utilisateur sur lui-même avec un <a0>cookie SSO</a0> vide Use LDAP for configuration Utiliser LDAP pour la configuration Clone Clone Before enabling Manager protection by <a0>LL::NG</a0>, you must have configured how users authenticate on Portal, and test that you can log in without difficulties. Avant d'activer la protection du manager par <a0>LL::NG</a0>, il faut avoir configuré la méthode d'authentification sur le portail et véifier qu'on peut s'y connecter sans difficultés. Same with remote server configured with the same host name: La même chose avec le serveur distant configuré avec le même nom d'hôte : documentation:1.4:applications:liferay documentation:1.4:applications:liferay However, it is not advised to edit such files, as they are part of the program, and will be erased at next upgrade. Toutefois, il n'est pas recommandé d'éditer ces fichiers car ils font partie du logiciel et peuvent être écrasés lors des mises à jour. SAML / Shibboleth identity provider Fournisseur d'identité SAML / Shibboleth To configure the user identifier in access log, go in Manager, <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>REMOTE_USER</c2>. Pour configurer l'identifiant utilisateur dans les journaux d'accès, aller dans le manager, <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>REMOTE_USER</c2>. documentation:latest:authdemo documentation:latest:authdemo Choose and configure your main configuration storage system Choisir et configurer le système principal de stockage de la configuration <s0>getMenuApplications(cookieValue)</s0>: return a list of authorizated applications (based on menu calculation) <s0>getMenuApplications(cookieValue)</s0>: retourne une liste des applications autorisées (basée sur le calcul du menu) Parameters for File backend are the same as <a0>File configuration backend</a0>. Les paramètres pour le backend File sont les mêmes que ceux du <a0>backend de configuration File</a0>. purge old sessions purger les anciennes sessions user full name Nom complet de l'utilisateur icons:access.png icons:access.png Manager protection Protection du manager Reload the Manager to see the order that will be used Recharger le manager pour voir l'ordre dans lequel elles seront appliquées <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> documentation:1.4:nosqlsessionbackend documentation:1.4:nosqlsessionbackend ../../../../media/applications/http_logo.png ../../../../media/applications/http_logo.png Enable mod_perl if not already loaded: Activer mod_perl si ce n'est déjà fait : <s0>Preauthentication <a1>URL</a1></s0>: Zimbra preauthentication <a2>URL</a2>, either with full <a3>URL</a3> (ex: <a4>http://zimbra.lan/service/preauth</a4>), either only with path (ex: /service/preauth) (by default: /service/preauth) <s0><a1>URL</a1> de pré-authentification</s0> : <a2>URL</a2> de pré-authentification Zimbra, soit l'<a3>URL</a3> complète (ex : <a4>http://zimbra.lan/service/preauth</a4>), soit seulement le chemin absolu (ex : /service/preauth) (par défaut : /service/preauth) <s0>Validity time of a password reset request</s0>: number of seconds for password reset request validity. <s0>Durée de validité de la requête de réinitialisation de mot-de-passe</s0> : nombre de secondes pour la validité de la requête de réinitialisation. ../../documentation/1.4/authldap.html ../../documentation/1.4/authldap.html Source directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/doc/ Répertoire des sources = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/doc/ Configure your SQL database Configurer la base de données SQL Restart fail2ban Redémarrer fail2ban See <a0>Yubico API</a0> page. Voir la page <a0>Yubico API</a0>. Second step: get the role name for the application. Seconde étape : obtenir le rôle dans cette application. LDAPCon LDAPCon <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> Follow the <a0>next steps</a0> Suivre les <a0>étapes suivantes</a0> You can also use symbolic links in <c0>conf.d</c0> Apache directory. On peut aussi utiliser des liens symboliques dans le répertiore <c0>conf.d</c0> d'Apache. ssoRoles: user ssoRoles: admin ssoRoles: user ssoRoles: admin Then, go in <c0>Remote parameters</c0>: Ensuite, aller dans les <c0>paramètres Remote</c0> : Authorization => basic($uid,$_password) Authorization => basic($uid,$_password) To encode the redirection <a0>URL</a0>, the handler will use some Apache environment variables and also configuration settings: Pour encoder l'<a0>URL</a0> de redirection, l'agent utilise des variables d'environnement Apache et des paramètres de configuration : Fields to index Champs à indexer Using Redis, you just have to add the “Index” parameter in <c0>General parameters</c0> » <c1>Sessions</c1> » <c2>Session storage</c2> » <c3>Apache::Session module</c3> : Pour utiliser Redis, il faut ajouter le paramètre “Index” dans <c0>Paramètres généraux</c0> » <c1>Sessions</c1> » <c2>Stockage des sessions</c2> » <c3>Module Apache::Session</c3> : <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> ~17000 ~17000 <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> ../../../../media/applications/dokuwiki_logo.png ../../../../media/applications/dokuwiki_logo.png If your table is not named lmConfig, set it's name in <c0>dbiTable</c0> parameter. Si la table ne se nomme pas lmConfig, mettre son nom dans le paramètre <c0>dbiTable</c0>. svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap Siteminder Authentication Siteminder Authentication get groups where user is registered obtenir les groupes dont l'utilisateur est membre ../../../documentation/1.4/extendedfunctions.html#basic ../../../documentation/1.4/extendedfunctions.html#basic This timeout allows to purge sessions of lost RelayState. Ce délai permet de supprimer les sessions des RelayState perdus. Go in Manager and click on <c0><a1>SAML</a1> 2 Service</c0> node. Allez dans le Manager et cliquez sur le nœud <c0>Service <a1>SAML</a1> 2</c0>. Simple usage example: Exemple d'usage simple : <s0><a1>API</a1> secret</s0>: <a2>API</a2> secret from Twitter <s0>Secret d'<a1>API</a1></s0>: secret d'<a2>API</a2> donné par Twitter mailto:lemonldap-ng-changes@ow2.org mailto:lemonldap-ng-changes@ow2.org <s0>Login field name</s0>: name of authentication table column hosting login <s0>Nom du champ de compte</s0> : nom de la colonne de la table d'authentification contenant le login ../media/icons/knewsticker.png ../media/icons/knewsticker.png Using <a0>LL::NG</a0> in reverse proxy mode, you will not have the <c1>REMOTE_USER</c1> environment variable set. Lorsque <a0>LL::NG</a0> est utilisé en mode reverse-proxy, la variable d'environnement <c1>REMOTE_USER</c1> n'est pas renseignée. The following table list fields to index depending on the feature you want to increase performance: Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances : /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay User-Email User-Email <a0>LL::NG</a0> will then display a form with an OpenID input, wher users will type their OpenID login. <a0>LL::NG</a0> affiche alors un formulaire dans lequel les utilisateurs peuvent entrer leur identifiant OpenID. Configure LemonLDAP::NG to use LDAP as main database Configurer LemonLDAP::NG pour utiliser LDAP comme base de données principale Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Security</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> : ../../../../media/applications/obm_logo.png ../../../../media/applications/obm_logo.png Mail reset feature Fonctionnalité de réinitialisation de mot-de-passe If authentication succeed, Portal collect user data Si l'authentication est acceptée, le portail récupère les données de l'utilisateur Liferay virtual host in Manager Hôte virtuel Liferay dans le manager Overloading is not available trough the manager La surcharge n'est pas paramètrable dans le manager Documentation install : Installer la documentation : It can be configured globally, or inside a virtual host. Il peut être configuré globalement, ou dans chaque hôte virtuel. http://search.cpan.org/search?query=Safe&mode=module http://search.cpan.org/search?query=Safe&mode=module Then you will be able to use it in your template like this: On peut ensuite l'utiliser dans le modèle comme suit : Secure Token attribute Attribut du jeton sécurisé <a2>features</a2><br3/> <a2>features</a2><br3/> You can also disable internal Sympa authentication to keep only LemonLDAP::NG by removing user_table paragraph Il est également possible de désactiver l'authentification interne de Sympa pour ne garder que celle de LemonLDAP::NG en supprimant le paragraphe user_table ../../documentation/1.4/authnull.html ../../documentation/1.4/authnull.html You have to set its value in Manager. Il faut en indiquer une dans le manager. Safe module is used to eval expressions in headers, rules, etc. Le module Safe est utilisé pour évaluer les expressions dans les en-têtes, règles, etc... $uid eq "bart.simpson" $uid eq "bart.simpson" Note that all <a0>LL::NG</a0> components must have access : Tous les composants de <a0>LL::NG</a0> doivent avoir accès : Interactive <s0>management of user passwords</s0>: <s0>Gestion interactive des mots-de-passe des utilisateurs</s0>: http://httpd.apache.org/docs/current/mod/mod_setenvif.html http://httpd.apache.org/docs/current/mod/mod_setenvif.html documentation:1.4:mysqlminihowto documentation:1.4:mysqlminihowto password: $_password (password of the user) password: $_password (mot-de-passe de l'utilisateur) You can preselect IDP with an IDP resolution rule. Il est possible de pré-selectionner l'IDP par une règle de résolution. ldapUsePasswordResetAttribute ldapUsePasswordResetAttribute or to use lemonldap-ng.ini, install it (one line only) in [portal] section: ou pour utiliser lemonldap-ng.ini, écrire (sur une seule ligne) dans la section [portal] : 1 if user is admin 1 si l'utilisateur est administrateur File session backend is the more simple session database. Le backend de sessions File est la plus simple des bases de données. /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions liblemonldap-ng-common-perl: configuration and common files liblemonldap-ng-common-perl : fichiers communs et de configuration The path to the main directory Le chemin du répertoire principal The module must be loaded by Apache (LoadModule directive). Ce module doit être chargé par Apache (directive LoadModule). Secure Token protected URLs URL protégées du jeton sécurisé <a0>Configuring the virtual hosts</a0> is not sufficient to display an application in the menu. <a0>Configurer les hôtes virtuels</a0> n'est pas suffisant pour afficher une application dans le menu. </<s7>Location</s7>>   </<s7>Location</s7>>   ../../documentation/1.4/portalmenu.html#menu_modules ../../documentation/1.4/portalmenu.html#menu_modules You can import a certificate containing the public key instead the raw public key. Vous pouver importer un certificat contenant la clef publique au lieu d'une simple clef. <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   Don't forget to create an index on the field used to find users (uid by default) N'oubliez pas de créer un index sur le champ utilisé pour trouver les utilisateurs (uid par défaut) You should have configured <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>, Il est nécessaire d'avoir configuré <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>, http://search.cpan.org/perldoc?LWP::UserAgent http://search.cpan.org/perldoc?LWP::UserAgent _notification_<e0>id</e0> _notification_<e0>id</e0> Configure the connection string (see <a0>DBI manual page</a0>) Configurer la chaîne de connexion (voir la <a0>page de manuel DBI</a0>) ldapTimeout ldapTimeout More information about Safe on <a0>CPAN</a0> Plus d'information sur Safe sur le <a0>CPAN</a0> ../../../css/all.css ../../../css/all.css ^/Microsoft-Server-ActiveSync ^/Microsoft-Server-ActiveSync http://perldoc.perl.org/functions/package.html http://perldoc.perl.org/functions/package.html ../pages/documentation/1.1/authtwitter.html ../pages/documentation/1.1/authtwitter.html Service configuration will be used to generate <a0>LL::NG</a0> <a1>SAML</a1> metadata, that will be shared with other providers. La configuration du service est utilisée pour générer les métadatas <a1>SAML</a1> de <a0>LL::NG</a0>, qui sont partagées avec les autres fournisseurs. Internet Relay Chat Internet Relay Chat <s0>Backgound color</s0>: Background color displayed in the BrowserID login window <s0>Couleur d'arrière plan</s0> : Couleur d'arrière plan affichée dans la fenêtre d'authentification BrowserID This configuration storage can be shared between different hosts using: Ce type de stockage de configuration peut être partagé entre différents serveurs en utilisant : http://httpd.apache.org/docs/2.2/mod/mod_proxy.html http://httpd.apache.org/docs/2.2/mod/mod_proxy.html install_handler_site (/usr/local/lemonldap-ng/handler) install_handler_site (/usr/local/lemonldap-ng/handler) <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> http://lanyrd.com/2011/jdll/smdct/ http://lanyrd.com/2011/jdll/smdct/ When the text is pasted, click on the Apply button to keep the value. Lorsque le texte est collé, cliquer sur le bouton appliquer pour sauver la valeur. Glossary directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ Répertoire des glossaires = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> Shareable Partageable <a0>Probe</a0> <br1/> <a0>Probe</a0> <br1/> So the above example can also be written like this: Ainsi l'exemple ci-dessous peut être écrit simplement : ../../documentation/1.4/authdemo.html ../../documentation/1.4/authdemo.html Mail charset Table de caractères des mails Zimbra account type Type de compte Zimbra dbiAuthPasswordCol dbiAuthPasswordCol tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test http://perldoc.perl.org/functions/shift.html http://perldoc.perl.org/functions/shift.html It can be used to delete a session Il peut être utilisé pour effacer une session documentation/current/prereq.html#yum documentation/current/prereq.html#yum <a0>browseablesessionbackend</a0><br1/> <a0>browseablesessionbackend</a0><br1/> Apache SSL global configuration Configuration globale de ssl dans Apache <s0>Response Location</s0>: Access Point for SLO response. <s0>Response Location</s0>: Point d'accès pour les réponses SLO. https://www.public.com https://www.public.com This name is used in entry <a0>DN</a0>, for example <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. Ce nom est utilisé dans l'entrée <a0>DN</a0>, par exemple <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. Each <a0>LL::NG</a0> authentication module has an authentication level, which can be associated to an <a1>SAML authentication context</a1>. Chaque module d'authentification de <a0>LL::NG</a0> dispose d'un niveau d'authentification qui peut être associé à un <a1>contexte d'authentification SAML</a1>. dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... documentation:latest:installdeb documentation:latest:installdeb <a0>Apache::Session::Browseable</a0> is a wrapper for other Apache::Session modules that add the capability to manage indexes. <a0>Apache::Session::Browseable</a0> est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. Genève Genève ../../documentation/1.4/start.html#configuration ../../documentation/1.4/start.html#configuration locationRules locationRules LimeSurvey virtual host in Manager Hôte virtuel LimeSurvey dans le manager ../../../media/documentation/remote-interoperability.png ../../../media/documentation/remote-interoperability.png Custom-Header => function1($uid) Custom-Header => function1($uid) <s8># SOAP functions for sessions access (disabled by default)</s8> <s8># Fonctions SOAP pour l'accès aux sessions (désactivées par défaut)</s8> ../../../media/applications/liferay_logo.png ../../../media/applications/liferay_logo.png ../pages/documentation/1.1/performances.html ../pages/documentation/1.1/performances.html Zimbra local <a0>SSO</a0> <a1>URL</a1> pattern Expression d'<a1>URL</a1> <a0>SSO</a0> locale pour Zimbra if you use “File” system and your “dirName” is set to /usr/local/lemonldap-ng/conf/, the notifications will be stored in /usr/local/lemonldap-ng/notifications/ si “File” est utilisé et que “dirName” vaut /usr/local/lemonldap-ng/conf/, les notifications seront stockées dans /usr/local/lemonldap-ng/notifications/ /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots In <c0>General</c0>, fill at least the following information: Dans <c0>General</c0>, remplir au moins les informations suivantes : SOAP session backend Backend de sessions SOAP Paris Paris Reverse proxy Proxy inverse And run the “dist” target: Lancer la cible “dist” : LemonLDAP::NG ships 3 Apache configuration files: LemonLDAP::NG fournit 3 fichiers de configuration Apache : lemonldap-ng-conf: contains default configuration (<a0>DNS</a0> domain: example.com) lemonldap-ng-conf : contient la configuration par défaut (domaine <a0>DNS</a0> : example.com) Debian/Ubuntu Debian/Ubuntu Admin: can create surveys Admin : peut créer des surveillances SAML SAML Find us on Freenode, channel #lemonldap-ng Retrouvez-nous sur Freenode, canal #lemonldap-ng ../../../media/documentation/manager-saml-service-sp-ac.png ../../../media/documentation/manager-saml-service-sp-ac.png OpenID authentication can proposed as an alternate authentication scheme using the <a0>authentication choice</a0> method. L'authentification OpenID peut être proposée en choix alternatif en utilisant la méthode d'authentification <a0>choice</a0>. documentation:1.4:soapservices documentation:1.4:soapservices SAML connectors Connecteurs SAML Accept some specificities: Autres possibilités : <s5># Uncomment this line if you use portal SOAP capabilities</s5> <s5># Décommentez cette ligne si vous utilisez les capacités SOAP du portail</s5> http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://en.wikipedia.org/wiki/Role-based_access_control http://en.wikipedia.org/wiki/Role-based_access_control http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html documentation:1.4:portal documentation:1.4:portal _timezone _timezone (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> The next time you will access Manager, it will be trough <a0>LL::NG</a0>. En retournant vers le manager, ce sera via <a0>LL::NG</a0>. <s145>//"userobm_nomade_enable" => ,</s145> <s145>//"userobm_nomade_enable" => ,</s145> documentation:1.4:authchoice documentation:1.4:authchoice ../pages/documentation/1.1/authmulti.html ../pages/documentation/1.1/authmulti.html documentation:presentation documentation:presentation When a user access a Handler without a cookie, he is redirected on portal, and the target <a0>URL</a0> is encoded in redirection <a1>URL</a1> (to redirect user after authentication process). Lorsqu'un utilisateur accède à un agent sans cookie, il est redirigé vers le portail, et l'<a0>URL</a0> cible est encodée dans l'<a1>URL</a1> de redirection (pour rediriger l'utilisateur après authentification). Your application can know the connected user using: Une application peut connaître l'utilisateur connecté en utilisant : <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> Note that Apache::Session::Browseable::MySQL doesn't use MySQL locks. Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL. Before installing the packages, install <a0>dependencies</a0>. Avant d'installer les paquets, installer les <a0>dépendances</a0>. PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> To use LemonLDAP::NG, you have to run an Apache server compiled with mod-perl Pour utiliser LemonLDAP::NG, il faut disposer d'un serveur compilé avec mod-perl </<s15>Files</s15>>   </<s15>Files</s15>>   Example: Exemple : The AuthBasic Handler is a special Handler that will us AuthBasic to authenticate to a virtual host, and then play authorizations rules to allow access to the virtual host. L'agent AuthBasic est un agent spécial qui utilise l'authentification web basique pour authentifier dans un hôte virtuel et qui utilise ensuite les règles d'autorisation pour valider les accès à l'hôte virtuel. Exploitation Exploitation AuthCAS AuthCAS <s1>ServerName</s1> auth.example.com   <s1>ServerName</s1> auth.example.com   Put all custom <a3>HTML</a3> code in the custom template files. Mettre tous les codes <a3>HTML</a3> personnalisés dans les fichiers modèles personnalisés. ../../../../media/documentation/liferay_2.png ../../../../media/documentation/liferay_2.png If <c0>OpenID login</c0> is not set, it uses <c1>General Parameters</c1> » <c2>Logs</c2> » <c3>REMOTE_USER</c3> data, which is set to <c4>uid</c4> by default Si l'<c0>identifiant OpenID</c0> n'est pas renseigné, la donnée <c1>Paramètres généraux</c1> » <c2>Journalisation</c2> » <c3>REMOTE_USER</c3> est utilisée, mise à <c4>uid</c4> par défaut ../pages/documentation/1.1/applications/googleapps.html ../pages/documentation/1.1/applications/googleapps.html mailLDAPFilter mailLDAPFilter <a0>DN</a0> of sessions branch <a0>DN</a0> de la branche des sessions LimeSurvey LimeSurvey <a0>LL::NG</a0> can act as an <a1>CAS</a1> server, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en serveur <a1>CAS</a1>, ce qui permet de fédérer <a2>LL::NG</a2> avec : Eric GERMAN Eric GERMAN uid: the user login (it must correspond to the attribute set in whatToTrace parameter, uid by default), or the wildcard string (by default: <c0>allusers</c0>) if the notification should be displayed for every user. uid : le nom de connexion de l'utilisateur (il doit correspondre à l'attribut utilisé dans le paramètre whatToTrace, uid par défaut), ou la carte blanche (par défaut : <c0>allusers</c0>) si la notification doit être affichée à tous les utilisateurs. The # host must be matched by a group named "host". The # host must be matched by a group named "host". <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> Subject for password mail Sujet du message de changement de mot de passe ../pages/documentation/1.1/selfmadeapplication.html ../pages/documentation/1.1/selfmadeapplication.html This key must be stored directly in portal index.pl file or in lemonldap-ng.ini: Cette clef doit être stockée directement dans le fichier index.pl du portail ou dans lemonldap-ng.ini : Use XForwardedFor for <a0>IP</a0> Utiliser XForwardedFor comme <a0>IP</a0> cliente ../../documentation/1.4/authssl.html ../../documentation/1.4/authssl.html documentation:1.4:applications:django documentation:1.4:applications:django Schema extension Extension de schéma <s0>+10y</s0>: ten years from session creation <s0>+10y</s0> : dix ans après la création de la session <s0>time_correction</s0> (optional): hours to add or to subtract <s0>time_correction</s0> (optionnel) : heures à ajouter ou soustraire /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml su - postgres createuser lemonldap-ng -P su - postgres createuser lemonldap-ng -P cfgNum int(11) NOT NULL, cfgNum int(11) NOT NULL, <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> logout_sso logout_sso If you activate proxy mode, you must create the <a0>PGT</a0> file on your system, for example: Si le mode proxy est activé, il faut créer le fichier <a0>PGT</a0> sur le système, par exemple : Steps: Étapes : provide identities to other systems fournir une identité à d'autres systèmes If for an obscure reason, the WebSSO is not working and you want to access the Manager, remove the protection in <c0>lemonldap-ng.ini</c0>. Si pour une quelconque raison le WebSSO ne fonctionne pas, pour accéder au manager, supprimer la protection dans <c0>lemonldap-ng.ini</c0>. LemonLDAP::NG uses Safe jail to evaluate all expressions: LemonLDAP::NG utilise une cage sécurisée pour évaluer toutes les expressions : ../pages/documentation/1.4/applications/django.html ../pages/documentation/1.4/applications/django.html http://herve.vanmeerbeck.free.fr/?p=53 http://herve.vanmeerbeck.free.fr/?p=53 Soap Soap LemonLDAP::NG allows to use this model. LemonLDAP::NG permet d'utiliser ce modèle. <s0><a1>SSO</a1> binding</s0>: force binding to use for <a2>SSO</a2> (http-redirect, http-post, etc.) <s0>Méthode <a1>SSO</a1></s0> : force la méthode à utiliser pour le <a2>SSO</a2> (http-redirect, http-post, etc.) ../../../../media/applications/drupal_logo.png ../../../../media/applications/drupal_logo.png http://www.linagora.com http://www.linagora.com <s0>Object class</s0>: objectClass of the groups (default: groupOfNames). <s0>Classe d'object</s0>: objectClass du groupe (défaut: groupOfNames). Cache backend options Options du module du cache local You can: Vous pouvez : Sympa mail session key Clef de session mail pour Sympa LDAPFilter LDAPFilter use any key name you want. utiliser n'importe quel nom de clef. <s0># rule</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># header</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> <s0># règle</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># en-tête</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> ../../../../media/documentation/liferay_3.png ../../../../media/documentation/liferay_3.png 1 if user is authorizated to access to it 1 si l'utilisateur est autorisé à y accéder CustomSOAPServices CustomSOAPServices Yubikey client ID ID client Yubikey Uniform Resource Locator Uniform Resource Locator In this case, you might want to disabling it. Dans ces cas, on peut vouloir le désactiver. ../pages/documentation/1.1/logs.html ../pages/documentation/1.1/logs.html http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl You can use different dbiUser strings : Plusieurs chaînes dbiUser sont utilisables : kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com A session key can be associated to more than one SREG attribute. Une clef de session peut être associée à un ou plusieurs attributs SREG. http://www.bugzilla.org http://www.bugzilla.org Debian Debian User clicks on the link <c0>Reset my password</c0> L'utilisateur clique sur le lien <c0>Réinitialiser mon mot-de-passe</c0> documentation:manager-saml-namid-formats.png documentation:manager-saml-namid-formats.png <a0>SAML</a0> IDP preselection Préselection d'IDP <a0>SAML</a0> <a0>Memcached</a0> can be used with <a1>LL::NG</a1>, but some features will not work since Memcached doesn't provide any parsing system: <a0>Memcached</a0> peut être utilisé avec <a1>LL::NG</a1>, mais quelques fonctionnalités ne marcheront pas car Memcached ne fournit pas de dispositif de parcours des données : The <a0>encode_base64</a0> subroutine Fonction <a0>encode_base64</a0> ../documentation/1.0/applications.html ../documentation/1.0/applications.html <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> Apache rewrite rules Régles de réécriture d'Apache In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2>OpenID</c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2>OpenID</c2> et configurer : …. …. Windows Windows singleIP singleIP applications:obm_logo.png applications:obm_logo.png The content of the SVN tarball is not the same as the official tarball. Le contenu de l'archive SVN n'est pas le même que l'officielle. documentation:latest:start documentation:latest:start <s0>Key</s0>: internal session key, can be prefixed by <c1>!</c1> to make the attribute required <s0>Clef</s0> : clef de session interne, peut être prefixé par <c1>!</c1> pour exiger ces attributs JSON File configuration backend Backend de configuration en fichier JSON http://mb-c.pro/fr/archives/1468 http://mb-c.pro/fr/archives/1468 Sebastien DIAZ Sebastien DIAZ /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay For example <c1>{ldapPort}389</c1>. Par exemple <c1>{ldapPort}389</c1>. You can also copy/paste the metadata: just click on the Edit button. Il est également possible de copier-coller les métadatas : cliquer simplement sur le bouton éditer. You can also add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : Toolinux Toolinux value longblob, value longblob, ../../../../media/documentation/liferay_7.png ../../../../media/documentation/liferay_7.png ../../../media/applications/http_logo.png ../../../media/applications/http_logo.png Restart Apache: Redémarrez Apache: Often the redirection takes some time because it is user's first access to the protected app, so a new app session has to be created : JavaScript redirection improves user experience by informing that authentication is performed, and by preventing from clicking again on the button because it is too slow. Souvent la redirection prend du temps car c'est le premier accès de l'utilisateur à l'application protégée et il faut créer la session applicative ; la redirection JavaScript améliore le ressenti utilisateur en l'informant que l'authentification est réussie et en évitant qu'il clique de nouveau sur le bouton. </<s8>Directory</s8>> </<s8>Directory</s8>> The logout request will be sent even if the user did not use the application. La requête de déconnexion est envoyée même si l'utilisateur ne s'est pas connecté à l'application. Categories and applications Catégories et applications /_detail/icons/flags/us.png?id=press /_detail/icons/flags/us.png?id=press ssoRoles ssoRoles Any <a0>CAS</a0> consumer N'importe quel client <a0>CAS</a0> <s0>Facebook application ID</s0>: the application ID you get <s0>ID de l'application Facebook</s0> : l'identifiant d'application obtenu /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart Encoded characters Caractères encodés <s0>Gateways authentication</s0>: force transparent authentication on <a1>CAS</a1> server <s0>Authentification des passerelles</s0> : force l'authentification transparente sur le serveur <a1>CAS</a1> generate new public and private keys (<c0>Generate</c0> button) générer de nouvelles clefs publiques et privées (bouton <c0>Générer</c0>) <s0>portal</s0>: parameters only for Portal <s0>portal</s0> : paramètres réservés au portail General options Options générales Use Apache::Session::Browseable Utiliser Apache::Session::Browseable LemonLDAP::NG LemonLDAP::NG Net::Twitter Net::Twitter documentation:1.4:applications:drupal documentation:1.4:applications:drupal This avoid to have to many datas stored. Ce dispositif évite de stocker trop de données. <s0>Default</s0>: will this binding be used by default for authentication response. <s0>Défaut</s0> : déclaration utilisée par défaut pour les réponses d'authentification. kdc = ad.example.com kdc = ad.example.com Tests Tests http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ touch /tmp/pgt.txt touch /tmp/pgt.txt LemonLDAP::NG provides these packages: LemonLDAP::NG fournit ces paquets : To know more about the jail, check <a0>Safe module documentation</a0>. Pour en savoir plus sur la cage, consulter la <a0>documentation du module Safe</a0>. Solutions Linux Solutions Linux ../../../documentation/1.4/writingrulesand_headers.html#rules ../../../documentation/1.4/writingrulesand_headers.html#rules 1.0 and 1.1 1.0 et 1.1 <a4>ldapsessionbackend</a4><br5/> <a4>ldapsessionbackend</a4><br5/> SOAP proxy mechanism SOAP proxy mechanism If needed, you can <a0>recompile the valve from the sources</a0>. Si besoin, <a0>recompiler la valve depuis les sources</a0>. ../../../media/documentation/dia_dit_roles.png ../../../media/documentation/dia_dit_roles.png You can install Lemonldap::NG using <a0>packages</a0> (rpm or deb) or by hand as described below. Vous pouvez installer Lemonldap::NG en utilisant des <a0>paquets</a0> (rpm ou deb) ou à la main comme décrit ci-après. ../../documentation/1.4/upgrade.html ../../documentation/1.4/upgrade.html http://www.solutionslinux.fr/ http://www.solutionslinux.fr/ Before transmission, the username and password are encoded as a sequence of base-64 characters. Avant la transmission, le nom et le mot de passe sont encodés en base-64. Password module Module mots-de-passe http://httpd.apache.org/docs/2.2/mod/mod_ssl.html http://httpd.apache.org/docs/2.2/mod/mod_ssl.html Bugzilla administration Administration de Bugzilla ../media/icons/tux.png ../media/icons/tux.png Auth-Password => $_password Auth-Password => $_password Single Logout Single Logout (SLO) Install prerequisites Installer les pré-requis Login as administrator: Se connecter comme administrateur: <s0>Name</s0>: internal name <s0>Name</s0>: nom interne Configure phpLDAPadmin virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel phpLDAPadmin comme n'importe quel autre <a0>hôte virtuel protégé</a0>. If not Go on Manager, and declare Manager as a new <a0>virtual host</a0>, for example <c1>manager.example.com</c1>. Si non, aller dans le manager et déclarer le manager comme un nouvel <a0>hôte virtuel</a0>, par exemple <c1>manager.example.com</c1>. Indeed, any <a0>Perl DBD driver</a0> can be used. Ainsi, tout <a0>driver Perl DBD</a0> peut être utilisé. SOAP services Services SOAP <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> ../../documentation/1.4/applications/dokuwiki.html ../../documentation/1.4/applications/dokuwiki.html _auth _auth Then, go in <c0>Facebook parameters</c0>: Ensuite, aller dans les <c0>paramètres Facebook</c0>: ../pages/documentation/1.4/handlerauthbasic.html ../pages/documentation/1.4/handlerauthbasic.html <s2># Load Zimbra Handler</s2> <s2># Load Zimbra Handler</s2> <a0>Lanyrd</a0> <br1/> <a0>Lanyrd</a0> <br1/> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> ../../../../media/documentation/googleapps-manager-application.png ../../../../media/documentation/googleapps-manager-application.png You should be redirected to <a0>LL::NG</a0> Portal. On doit être redirigé vers le portail <a0>LL::NG</a0>. <s0>Secured cookie</s0>: the cookie can only be sent over HTTPS <s0>Cookie sécurisé</s0> : le cookie peut être envoyé via HTTPS <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> But you can forward this key if it is really needed: Mais on peut le transmettre tout de même si nécessaire : Handler Status Page de statut de l'agent <a0>LL::NG</a0> is compatible with the OpenID Authentication protocol <a1>version 2.0</a1> and <a2>version 1.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole d'authentification OpenID <a1>version 2.0</a1> et <a2>version 1.0</a2>. http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml <s0>Search base</s0>: <a1>DN</a1> of groups branch. <s0>Base de recherche</s0> : <a1>DN</a1> de la branche des groupes. <s0>Facebook application secret</s0>: the corresponding secret <s0>Secret de l'application Facebook</s0> : le secret correspondant The “Multi” system can : Le système “Multi” peut : OpenID identity provider Fournisseur d'identité OpenID Mediawiki Mediawiki <s0>dbiPassword</s0>: <a1>DBI</a1> password. <s0>dbiPassword</s0> : mot-de-passe <a1>DBI</a1>. http://tomcat.apache.org/ http://tomcat.apache.org/ <s0>Sign SLO message</s0>: sign SLO message <s0>Signature des messages SLO</s0> : signe les messages de déconnexion SLO (single logout) <a4>federationproxy</a4><br5/> <a4>federationproxy</a4><br5/> sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini Each module can be disabled using the <c0>Null</c0> backend. Chaque module peut être désactivé en utilisant le backend <c0>Null</c0>. <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s0>Token expiration</s0>: time in seconds for token expiration (remove from Memcached server). <s0>Expiration du jeton</s0> : délai en secondes pour l'expiration du jeton (effacement du serveur Memcached). You need to forward the password, which can be the user main password (if <a0>password is stored in session</a0>, or any user attribute (if you keep secondary passwords in users database). Il est nécessaire d'exporter le mot-de-passe, qui peut être le mot-de-passe principal de l'utilisateur (si <a0>le mot-de-passe est stocké dans la session</a0>, ou n'importe quel attribut utilisateur (si d'autres mots-de-passe sont stockés dans la base de données des utilisateurs). Session backend options Options du module de stockage des sessions To protect a virtual host in Apache, the LemonLDAP::NG Handler must be activated (see <a0>Apache global configuration</a0>). Pour protéger un hôte virtuel dans Apache, l'agent LemonLDAP::NG doit être activé (voir <a0>configuration globale d'Apache</a0>). sample_notification.png sample_notification.png <s0>Activation</s0>: set to <c1>On</c1>. <s0>Activation</s0> : mettre à <c1>Activé</c1>. <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm <s164>//"userobm_location" => ,</s164> <s164>//"userobm_location" => ,</s164> <s0>New</s0>: to write all configuration history <s0>New</s0> : pour écrire l'historique de la configuration <s0>.js</s0>: Javascript <s0>.js</s0>: Javascript documentation/quickstart.html documentation/quickstart.html chown apache /etc/lemonldap-ng/auth.keytab chown apache /etc/lemonldap-ng/auth.keytab Lemonldap::NG manage applications by their hostname (Apache's virtualHosts). Lemonldap::NG gère les applications par leurs noms d'hôtes(hôtes virtuels d'Apache). dbiAuthPasswordHash dbiAuthPasswordHash firewalls (but be careful if more than 1 server is behind the firewall) pare-feux (attention toutefois si plus d'une application se trouve derrière le pare-feu) Require old password (change) Impose la présentation de l'ancien mot-de-passe dans les changements Else it just will be sent trough an attribute response, if explicitly requested in an attribute request. Sinon, il ne sera envoyé dans les réponses que s'il est explicitement demandé dans les requêtes d'attributs. <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0>deleteNotification</s0>: delete notification(s) for a user (see <a1>Notifications system</a1> for more) <s0>deleteNotification</s0> : efface une ou plusieurs notifications d'un utilisateur (voir le <a1>système des notifications</a1>) ../../documentation/1.4/authmulti.html ../../documentation/1.4/authmulti.html http://jqueryui.com/themeroller/ http://jqueryui.com/themeroller/ http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight configStorage configStorage User enters his email (or another information) in the password reset form L'utilisateur entre son adresse de courriel (ou une autre information) dans le formulaire de réinitialisation radiusAuthnLevel radiusAuthnLevel Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Sympa</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Sympa</c3>, et éditer les clefs suivantes : Hosted application Application hébergée <a4>authad</a4><br5/> <a4>authad</a4><br5/> # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. http://search.cpan.org/perldoc?Apache::Session::Memcached http://search.cpan.org/perldoc?Apache::Session::Memcached <s11>RewriteRule</s11> ^/cas/.* /index.pl <s11>RewriteRule</s11> ^/cas/.* /index.pl http://forge.ow2.org/project/showfiles.php?group_id=274 http://forge.ow2.org/project/showfiles.php?group_id=274 User authenticates on Portal L'utilisateur d'authentifie sur le portail _samlToken _samlToken Packages from <a0>Debian repository</a0> may not be up to date. Les paquets du <a0>dépôt Debian</a0> peuvent ne pas être à jour. icons:tutorials.png icons:tutorials.png http://www.php.net/array http://www.php.net/array ../../documentation/1.2/upgrade.html ../../documentation/1.2/upgrade.html screenshots.html screenshots.html Required parameters Paramètres exigés You can change default parameters using the “notificationStorage” and “notificationStorageOptions” parameters with the same syntax as configuration storage parameters. On peut changer les paramètres par défaut en utilisant les paramètres “notificationStorage” et “notificationStorageOptions” avec la même syntaxe que les paramètres de stockage de la configuration. Use SOAP for Lemonldap::NG configuration Utiliser SOAP pour la configuration Lemonldap::NG <s22>}</s22> <s23>}</s23><s24>,</s24> <s22>}</s22> <s23>}</s23><s24>,</s24> <a0>LL::NG</a0> has a logout forward mechanism, that will add a step in logout process, to send logout requests (indeed, GET requests on application logout <a1>URL</a1>) inside hidden iframes. <a0>LL::NG</a0> dispose d'un dispositif de propagation de déconnexion qui ajoute une étape à ce processus pour envoyer des requêtes de déconnexion (en pratique, des requêtes GET vers des <a1>URL</a1> de déconnexion) dans des iframes cachées. You have to grant read/write access for the manager component. Il faut autoriser l'accès en lecture et écriture pour le manager. If you upgraded <a0>LL::NG</a0>, check all <a1>upgrade notes</a1>. Pour mettre à jour <a0>LL::NG</a0>, lisez toutes les <a1>notes de mise à jour</a1>. <a0>Apache Tomcat</a0> is an open source software implementation of the Java Servlet and JavaServer Pages technologies. <a0>Apache Tomcat</a0> est une implémentation libre des technologies Java Servlet et JavaServer Pages. <s0>Developers</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Développeurs</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) <s133>//"userobm_web_perms" => ,</s133> <s133>//"userobm_web_perms" => ,</s133> If this attribute is missed all hosts are allowed. Si cet attribut est manquant, toutes les adresses seront autorisées. If you set <c0>useLocalConf</c0> to 1 in lemonldap-ng.ini (section [Portal]), the portal will use only a cached configuration. En mettant <c0>useLocalConf</c0> à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. dbiUserTable dbiUserTable This concerns all parameters for the Service Provider metadata section: Ceci concerne tous les paramètres de la section « fournisseur de service » des metadatas : http://search.cpan.org/~mart/Net-OpenID-Consumer/ http://search.cpan.org/~mart/Net-OpenID-Consumer/ ../../documentation/1.4/writingrulesand_headers.html ../../documentation/1.4/writingrulesand_headers.html User can now access to the protected application L'utilisateur peut maintenant accéder aux applications ../../../media/applications/mediawiki_logo.png ../../../media/applications/mediawiki_logo.png Protect your application Protéger une application <s0>setAttributes(cookieValue,hashtable)</s0>: update a session <s0>setAttributes(cookieValue,hashtable)</s0> : met à jour une session ../pages/press.html ../pages/press.html http://www.jcos.fr http://www.jcos.fr dob dob You have to include them in Apache main configuration, for example: Il faut les inclure dans la configuration d'Apache, par exemple : documentation documentation You can also use WebID as user database. On peut également utiliser WebID comme base de données utilisateurs. When status feature is activated, Handlers and portal will collect statistics and save them in their local cache. Lorsque la fonctionnalité "status" est activée, les agents et le portail collectent des statistiques et les sauvegardent dans le cache local http://www.dokuwiki.org/ http://www.dokuwiki.org/ Handler detects <a0>URL</a0> parameter and create a <a1>SSO cookies</a1> on its domain, with session ID as value L'agent détecte le paramètre d'<a0>URL</a0> et crée le <a1>cookie SSO</a1> dans son domaine, avec la valeur de l'identifiant de session This mode is not compatible with a lot of browsers which block pop-ups. Ce mode n'est pas compatible avec de nombreux navigateurs qui bloquent les pop-ups. The <a0>SSO</a0> cookie is build by the portal (as described in the <a1>login kinematic</a1>), or by the Handler for cross domain authentication (see <a2>CDA kinematic</a2>). Le cookie <a0>SSO</a0> est construit par le portail (tel que décrit dans la <a1>cinématique de connexion</a1>) ou par l'agent (handler) lors des authentification inter-domaines (voir <a2>la cinématique de l'authentification inter-domaine</a2>). When you change cookie expiration time, it is written on the user hard disk unlike session cookie Lorsqu'on change la durée de vie du cookie, il est écrit sur le disque dur de l'utilisateur contrairement à un cookie de session ../pages/documentation/1.1/sqlconfbackend.html ../pages/documentation/1.1/sqlconfbackend.html Cross Domain Authentication (CDA) Authentification inter-domaines (CDA) Sympa Sympa Rules can also be used to intercept logout <a0>URL</a0>: Les règles peuvent également être utilisées pour intercepter les <a0>URL</a0> de déconnexion : For each attribute, you can set: Pour chaque attribut, on peut indiquer : <s0>UTF8 metadata conversion</s0>: set to On to force partner's metadata conversion. <s0>Conversion des métadatas un UTF8</s0> : mettre à « activé » pour forcer la conversion des métadata des partenaires. You need to get an client ID and a secret key from Yubico. Un identifiant client et une clef secrète doivent être obtenues auprès de Yubico. <a0>LL::NG</a0> is a web single-sign-on system, but unlike some systems it can manage rights on applications based on regular expressions on <a1>URL</a1>. <a0>LL::NG</a0> est un système d'authentification web unique (WebSSO), mais contrairement à d'autres, il peut gérer les droits d'accès en utilisant des expressions rationnelles sur les <a1>URL</a1> demandées. Configure the <a0>access rules</a0> and define the following <a1>headers</a1>: Configurer les <a0>règles d'accès</a0> et definir les <a1>en-têtes</a1> suivants : dark dark ../../../media/applications/googleapps_logo.png ../../../media/applications/googleapps_logo.png login login Applications Applications http://perldoc.perl.org/functions/return.html http://perldoc.perl.org/functions/return.html /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots User: can answer to surveys User : peut répondre aux surveillances <s0>Authentication level</s0>: authentication level for Radius module <s0>Niveau d'authentification</s0> : niveau d'authentification pour Radius samlStorage samlStorage Then go in <c0>Options</c0> to define: Aller ensuite dans <c0>Options</c0> pour définir : The integration with <a0>LL::NG</a0> is the following: L'intégration avec <a0>LL::NG</a0> est la suivante : Key steps : Etapes clefs : maintenance maintenance http://en.wikipedia.org/wiki/INI_file http://en.wikipedia.org/wiki/INI_file You can add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : ../../../media/documentation/manager-formreplay-newurl.png ../../../media/documentation/manager-formreplay-newurl.png http://openid.net/specs/openid-simple-registration-extension-1_0.html http://openid.net/specs/openid-simple-registration-extension-1_0.html <s0>Key name</s0>: name of the key in LemonLDAP::NG session (for example “uid” will then be used as $uid in access rules) <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG (par exemple “uid” équivaut à $uid dans les règles d'accès) Authentication with login/password Authentification par nom-de-compte/mot-de-passe Detailled configuration backends documentation is available <a0>here</a0>. La configuration détaillée des backends de stockage est disponible <a0>ici</a0>. Now ldapgroups contains “admin su” Maintenant, ldapgroups contient “admin su” Disabling it can lead to security issues. La désactiver peut engendrer des trous de sécurité. Dokuwiki Dokuwiki You may also create these macros to manage OBM administrator account (<c0>Variables</c0> » <c1>Macros</c1>): Il est également possible de créer ces macros pour gérer le compte administrateur OBM (<c0>Variables</c0> » <c1>Macros</c1>): documentation:googleapps-sso.png documentation:googleapps-sso.png Install and launch a <a0>Memcached server</a0>. Installer et lancer un <a0>serveur Memcached</a0>. Upgrade from 1.3 to 1.4 Mettre à jour de la version 1.3 vers la version 1.4 Gender Gender If you use the binary value (Active Directory), use this: Si une valeur binaire est utilisée (Active Directory) : You just have to configure a directory writable by Apache user and set it in [configuration] section in your lemonldap-ng.ini file: Il suffit de configurer un répertoire accessible en écriture à l'utilisateur Apache et l'indiquer dans la section [configuration] du fichier lemonldap-ng.ini : portalAutocomplete portalAutocomplete <a0>CAS</a0> authentication level Niveau d'authentification <a0>CAS</a0> macro and groups les macro et groupes Redirect user to the asked <a0>URL</a0> or display menu Redirige l'utilisateur vers l'<a0>URL</a0> demandée ou affiche le menu <a0>CAS</a0> proxied services Services mandatés de <a0>CAS</a0> <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl Skin files Fichiers thèmes <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> ../documentation/current/start.html#sessions_database ../documentation/current/start.html#sessions_database LemonLDAP::NG portal menu has 4 modules: Le menu du portail LemonLDAP::NG est composé de 4 modules : <s59><s60></bean<s61>></s61></s60></s59> <s59><s60></bean<s61>></s61></s60></s59> http://mail.ow2.org/wws/subscribe/lemonldap-ng-users http://mail.ow2.org/wws/subscribe/lemonldap-ng-users Enable protection on Manager, by editing <c0>lemonldap-ng.ini</c0>: Activer la protection du manager, en éditant <c0>lemonldap-ng.ini</c0>: <a0>DBI</a0> UserDB connection chain Chaîne de connexion UserDB <a0>DBI</a0> whatToTrace whatToTrace <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> Browseable (SQL, Redis or LDAP) Browseable (SQL, Redis ou LDAP) Internal portal Portail interne <a26>authmulti</a26><br27/> <a26>authmulti</a26><br27/> ../../../../media/applications/sympa_logo.png ../../../../media/applications/sympa_logo.png Access rules Règles d'accès http://obm.org http://obm.org (&(sAMAccountName=$user)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) ../pages/documentation/1.1/header_remote_user_conversion.html ../pages/documentation/1.1/header_remote_user_conversion.html <s0>Sessions module options</s0>: <s0>Options du module de sessions</s0> : ../pages/documentation/1.1/applications/sympa.html ../pages/documentation/1.1/applications/sympa.html <a0>LL::NG</a0> configured as <a1>SAML Identity Provider</a1> <a0>LL::NG</a0> configuré comme <a1>fournisseur d'identité SAML</a1> yum install mod_ssl yum install mod_ssl SQL configuration backends Backends de configuration SQL Destination directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/po-doc/zz (where zz is your international code, example: “fr” for France) Répertoire de destination = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/po-doc/zz (où zz est votre code international, exemple: “fr” pour le français) <s0>Proxied services</s0>: list of services for which a proxy ticket is requested: <s0>Services Proxifiés</s0> : liste des services pour lesquels un ticket de proxy est requis : This part is based on <a0>SimpleSAMLPHP documentation</a0>. Cette section est basée sur la <a0>documentation SimpleSAMLPHP</a0>. ../pages/documentation/1.1/installdeb.html ../pages/documentation/1.1/installdeb.html Set '*' to accept all. Mettre '*' pour tout accepter. Display deleted sessions Affiche les sessions effacées Zimbra use a specific <a0>preauthentication protocol</a0> to provide <a1>SSO</a1> on its application. Zimbra utilise un <a0>protocole de pré-authentification</a0> pour s'intégrer à un <a1>SSO</a1>. Google Google User module Module utilisateurs <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> Selected by default during installation. Sélectionné par défaut lors de l'installation. Create a database if necessary: Créer une base de données si nécessaire : Create new notifications with notifications explorer Créer de nouvelles notifications avec l'explorateur des notifications ../pages/documentation/1.1/ldapsessionbackend.html ../pages/documentation/1.1/ldapsessionbackend.html <s9>RewriteEngine</s9> <s10>On</s10> <s9>RewriteEngine</s9> <s10>On</s10> When modifying a value, always click on the <c0>Apply</c0> button if available, to be sure the value is saved. Lorsqu'une valeur est modifiée, cliquer toujours sur le bouton <c0>Appliquer</c0> s'il est affiché pour être sûr que la valeur soit sauvegardée. <s0>OTP public ID part size</s0>: Part of Yubikey OTP that will be used as the media identifier (default: 12) <s0>Taille de la partie publique de l'OTP</s0> : Partie du mot-de-passe unique Yubikey utilisée pour identifier les matériels (défaut: 12) Mailing lists Mailing lists documentation:latest:sessions documentation:latest:sessions <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> Handler sends the response to user Celui-ci la renvoie à l'utilisateur For example, to preselect this IDP for users coming from 129.168.0.0/16 network: Par exemple, pour pré-sélectionner cet IDP pour les utilisateurs provenant dui réseau 129.168.0.0/16 : <a4>references</a4><br5/> <a4>références</a4><br5/> Manager (configuration management) Manager (gestion de la configuration) <<s0>IfModule</s0> mod_rewrite.c> <<s0>IfModule</s0> mod_rewrite.c> <s165>//"userobm_education" => ,</s165> <s165>//"userobm_education" => ,</s165> http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview This function will check the date of current request, and compare it to a start date and an end date. Cette fonction examine la date de la requête en cours et la compare avec une date de début et de fin. Configuration and sessions in LDAP Configuration et sessions dans LDAP In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Null for authentication, users or password module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Null</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. Update translations Télécharger les traductions When all is ok, click on <c0>Create</c0>. Lorsque tout est bon, cliquer sur <c0>Créer</c0>. The notifications module uses a wildcard to manage notifications for all users. Le module de notifications utilise une carte blanche pour gérer les notifications destinées à tous les utilisateurs. Authorizations are defined inside a virtualhost and takes effect only on it. Les autorisations sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Configure the virtual host like other <a0>protected virtual host</a0> but use Secure Token Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser l'agent jeton sécurisé au lieu de l'agent par défaut. Send mail on password change Envoyer des courriels lors des changements de mots-de-passe Auth-Roles => $aaaRoles Auth-Roles => $aaaRoles Link Apache configuration Lier la configuration d'Apache HTTP Basic Authentication Authentification basique HTTP cn=admin,dc=example,dc=password cn=admin,dc=example,dc=password You can also use different user/password for your servers by overriding parameters <c0>globalStorage</c0> and <c1>globalStorageOptions</c1> in lemonldap-ng.ini file. On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres <c0>globalStorage</c0> et <c1>globalStorageOptions</c1> dans le fichier lemonldap-ng.ini. PerlModule Lemonldap::NG::Handler::Proxy PerlModule Lemonldap::NG::Handler::Proxy perl-Lemonldap-NG-Common: CPAN - Shared modules perl-Lemonldap-NG-Common : CPAN - modules partagés ldapGroupAttributeName ldapGroupAttributeName ../../documentation/1.4/ssocookie.html ../../documentation/1.4/ssocookie.html These options override service signature options (see <a0>SAML service configuration</a0>). Ces options surchargent les options de signature du service (voir la <a0>configuration du service SAML</a0>). documentation:1.4:authyubikey documentation:1.4:authyubikey Those capabilities can be used simultaneously or separately. Ces capacités peuvent être utilisées simultanément ou séparemment. These options can then be overridden for each Identity Provider. Ces options peuvent être surchargées pour chaque fournisseur d'identité. Nb protected applications Nb d'applications protégées http://www.mediawiki.org/wiki/Extension:HttpAuth http://www.mediawiki.org/wiki/Extension:HttpAuth documentation:1.4:handlerauthbasic documentation:1.4:handlerauthbasic Django Django “static-value” “static-value” ldapGroupObjectClass ldapGroupObjectClass one with just read rights for other servers une avec seulement des droits en lecture pour les autres serveurs <s1>ServerName</s1> www.public.com   <s1>ServerName</s1> www.public.com   The value will be use in metadata main markup: Cette valeur est utilisé dans les metadatas : checkLogonHours($ssoLogonHours, '', '+2') checkLogonHours($ssoLogonHours, '', '+2') ../../documentation/1.4/header_remote_user_conversion.html ../../documentation/1.4/header_remote_user_conversion.html Known supported applications Applications connues pour être supportées Sympa virtual host in Apache Hôte virtuel Sympa dans le manager <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> http://tomcat.apache.org/tomcat-5.5-doc/logging.html http://tomcat.apache.org/tomcat-5.5-doc/logging.html <s0>newNotification(xmlString)</s0>: insert a notification for a user (see <a1>Notifications system</a1> for more) <s0>newNotification(xmlString)</s0> : insert une notification pour un utilisateur (voir le <a1>système de notifications</a1> pour plus d'information) <s0>Magic authentication</s0>: a special <a1>SSO</a1> <a2>URL</a2> is protected by <a3>LL::NG</a3>, Sympa will display a button for users who wants to use this feature. <s0>Magic authentication</s0>: une <a2>URL</a2> <a1>SSO</a1> spéciale est protégée pas <a3>LL::NG</a3>, Sympa affiche un bouton pour les utilisateurs souhaitant bénéficier de cette fonction. Change the user attribute to store in Apache logs <e0>(“General Parameters » Logs » REMOTE_USER”)</e0>: use the variable declared above Changer l'attribut utilisateur à stocker dans les journaux d'Apache <e0>(“Paramètres généraux » Journaux » REMOTE_USER”)</e0> : utiliser la variable ci-dessus tar zxvf lemonldap-ng-*.tar.gz tar zxvf lemonldap-ng-*.tar.gz <check>: paragraph to display with a checkbox: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifCheck”><input type=“checkbox” />…</p> <check> : paragraphe à afficher avec une case à cocher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifCheck”><input type=“checkbox” />…</p> ../../documentation/1.4/start.html#authentication_users_and_password_databases ../../documentation/1.4/start.html#authentication_users_and_password_databases → User does not have Lemonldap::NG cookie, handler redirect it to the portal → L'utilisateur ne dispose pas d'un cookie Lemonldap::NG, l'agent le redirige vers le portail If using <a0>LL::NG</a0> as reverse proxy, configure the <c1>Auth-User</c1> <a2>header</a2>, else no headers are needed. Si <a0>LL::NG</a0> est utilisé par reverse-proxy, configurer l'<a2>en-tête</a2> <c1>Auth-User</c1>, aucun autre en-tête n'est utile. Load Handler in Apache memory: Charger l'agent dans la mémoire d'Apache : sudo make install PARAM=VALUE PARAM=VALUE ... sudo make install PARAM=VALUE PARAM=VALUE ... contact.html contact.html The Tomcat Valve is only available for tomcat 5.5 or greater. La valve Tomcat est uniquement disponible pour les versions 5.5 et supérieures de Tomcat. ../../../media/documentation/remote-principle.png ../../../media/documentation/remote-principle.png http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps secureTokenAllowOnError secureTokenAllowOnError This module is a <a0>LL::NG</a0> specific identity federation protocol. Ce module fournit un protocole de fédération d'identité spécifique à <a0>LL::NG</a0>. <s0>Enabled</s0>: Yes <s0>Enabled</s0>: Yes ../../media/icons/flags/us.png ../../media/icons/flags/us.png Click on a column header to sort table. Cliquez sur un en-tête de colonne pour trier le tableau. RHEL/CentOS/Fedora RHEL/CentOS/Fedora <a8>playground</a8><br9/> <a8>playground</a8><br9/> screenshots:1.1:mailreset:mailreset_step4.png screenshots:1.1:mailreset:mailreset_step4.png ../pages/documentation/features.html ../pages/documentation/features.html Follow the <a0>next steps</a0>. Suivre les <a0>étapes suivantes</a0>. In Bugzilla administration interface, go in <c0>Parameters</c0> » <c1>User authentication</c1> Dans l'interface d'administration, allez dans <c0>Parameters</c0> » <c1>User authentication</c1> <s0>Location</s0>: Access Point for <a1>SSO</a1> request and response. <s0>Location</s0>: Point d'accès des requêtes et réponses <a1>SSO</a1>. <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> httpOnly httpOnly dbiAuthPassword dbiAuthPassword <s24># SOAP functions for notification insertion (disabled by default)</s24> <s24># Fonctions SOAP pour insérer des notifications (désactivées par défaut)</s24> <s0>+10m</s0>: ten minutes from session creation <s0>+10m</s0> : dix minutes après la création de la session http://www.google.com/calendar/hosted/mydomain.org/render http://www.google.com/calendar/hosted/mydomain.org/render *.partner.com *.partenaire.com Then you can take any virtual host, and simply add this line to protect it: Ainsi n'importe quel hôte virtuel peut être protégé en ajoutant cette ligne : We use <a0>OW2 JIRA</a0> to list bugs and features. Nous utilisons <a0>OW2 JIRA</a0> pour tous les bogues et fonctionnalités. A cup of coffee (or tea, we are open minded) Une tasse de café (ou de thé, nous sommes ouverts) /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots <s0>RelayState session timeout</s0>: timeout for RelayState sessions. <s0>Durée de vie d'une session RelayState</s0> : durée de vie d'une session RelayState. tchemineau tchemineau <s0>User table</s0>: user table name <s0>Table utilisateurs</s0> : nom de la table utilisateurs Do not allow several users for 1 <a0>IP</a0> Ne pas autoriser plusieurs utilisateurs venant de la même adresse <a0>IP</a0> password password impact impact documentation:1.4:authgoogle documentation:1.4:authgoogle ../../../../css/screen.css ../../../../css/screen.css It can not be used to share sessions between different servers except if you share directories (with NFS,…) or if you use <a0>SOAP proxy</a0>. Il ne peut être utilisé pour partager les sessions entre serveurs sauf si les répertoires sont partagés (avec NFS,…) ou en utilisant le <a0>proxy SOAP</a0>. trustedDomains trustedDomains ^/limesurvey/admin/ ^/limesurvey/admin/ You need to disable default Manager protection in lemonldap-ng.ini to rely only on Apache: Il faut alors désactiver la protection du manager dans lemonldap-ng.ini pour la confier à Apache : <a18>authdemo</a18><br19/> <a18>authdemo</a18><br19/> Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Secure Token</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Jeton sécurisé</c3>, et éditer les clefs suivantes : ../../documentation/1.0/sqlconfbackend.html ../../documentation/1.0/sqlconfbackend.html Logging portal access Trace des authentification Handler inform Apache of connected user (parameter <c0>whatToTrace</c0>), so you can see user login in Apache access logs. L'agent fournit à Apache l'identifiant de l'utilisateur (paramètre <c0>whatToTrace</c0>), ainsi vous pouvez voir l'identifiant dans les journaux d'accès d'Apache. You can use one or a combination of: On peut utiliser un ou plusieurs solution : Authentication: will check user login in a header and create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : recherche le nom d'utilisateur dans un en-tête et crée la session sans exiger de mot-de-passe (mais enregistre l'adresse <a0>IP</a0> cliente et la date) /_detail/icons/chat.png?id=contact /_detail/icons/chat.png?id=contact <<s17>Location</s17> /index.pl/config> <<s17>Location</s17> /index.pl/config> casAccessControlPolicy casAccessControlPolicy documentation:googleapps-export-priv-key.png documentation:googleapps-export-priv-key.png managerCssTheme managerCssTheme Copy en subroutine to zz <e1>(where zz is your international code, example: “fr” for France)</e1> then translate messages. Copiez la fonction en en zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> et traduisez ensuite les messages. PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com All other elements will be removed including <a0>HTML</a0> elements like <b>. Tous les autres éléments seront supprimés y compris les balises <a0>HTML</a0> telles <b>. Apache (Kerberos, NTLM, OTP, ...) Apache (Kerberos, NTLM, OTP, ...) /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots Write session path is needed only if you use a remote session explorer or a remote portal Le chemin d'écriture de session n'est nécessaire que si on utilise un explorateur de session ou un portail distant <a0>DBI</a0> Login column Colonne de nom de connexion <a0>DBI</a0> default default Other NameID formats are automatically managed: Les autres formats de NameID sont automatiquement gérés : MySQL example (suppose that our servers are in 10.0.0.0/24 network): Exemple MySQL (on suppose que les serveurs sont sur le réseau 10.0.0.0/24): Session restrictions Resctriction d'ouverture de session OBM, RoundCube, Sympa, MediaWiki,… OBM, RoundCube, Sympa, MediaWiki,… <s0>Control existing session</s0>: detect <a1>SSO</a1> session, apply configured constraints (1 session per user, 1 session per <a2>IP</a2>, …) <s0>Recherche d'une session valide</s0> : détecte les sessions <a1>SSO</a1>, applique les contraintes configurées (1 session par utilisateur, 1 session par <a2>IP</a2>, …) <s7># CAS Issuer</s7> <s7># Fournisseur d'identité CAS</s7> <s0>Auto login</s0> is very secure for Sympa 5, as Sympa cookie is only exchanged between <a1>LL::NG</a1> Handler and Sympa (user cannot see it) <s0>Auto login</s0> est très sécurisé pour Sympa 5 car le cookie Sympa est seulement échangé entre le handler <a1>LL::NG</a1> et Sympa (les utilisateurs ne le voient pas) ../pages/documentation/1.1/configlocation.html ../pages/documentation/1.1/configlocation.html If you run Debian testing or unstable, the packages are directly installable: Pour les utilisateurs de Debian testing ou unstable, les paquets sont directement installables : ../../documentation/1.4/exportedvars.html ../../documentation/1.4/exportedvars.html By alphabetical order: Par ordre alphabétique : <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> ../../documentation/1.4/authtwitter.html ../../documentation/1.4/authtwitter.html Internet Protocol Internet Protocol Connection Connexion PerlHandler Lemonldap::NG::Handler::Proxy   PerlHandler Lemonldap::NG::Handler::Proxy   apache2ctl configtest apache2ctl restart apache2ctl configtest apache2ctl restart The Secure Token Handler is a special Handler that create a token for each request and send it to the protected application. L'agent jeton sécurisé est un agent particulier qui crée un jeton pour chaque requête et l'envoie à l'application protégée. /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey Internal Proxy (lmProxy) Proxy interne (lmProxy) Mail reset request timeout Délai maximal des requêtes de réinitialisation des mails https://github.com/coudot/apache-session-ldap https://github.com/coudot/apache-session-ldap How to change configuration backend Comment changer le backend de configuration <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> For Debian/Ubuntu, you can use: Pour Debian/Ubuntu, utiliser : ../pages/documentation/1.1/soapservices.html ../pages/documentation/1.1/soapservices.html <s0>Store</s0>: store user info in session database <s0>Stocke</s0>: stocke les données utilisateurs dans la base de données des sessions File File LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> ../pages/menu1.html ../pages/menu1.html <a0>LL::NG</a0> is compatible with <a1>LDAP password policy</a1>: <a0>LL::NG</a0> est compatible avec <a1>la politique de mots-de-passe LDAP</a1> : So on each main portal, internal users can access normally, and users issued from the other organization have just to click on the link: Ainsi sur chacun des portails principaux, les utilisateurs internes peuvent accéder normalement et les utilisateurs de l'autre organisation n'ont qu'à cliquer sur le lien : mailBody mailBody perl-Lemonldap-NG-Portal: CPAN - Portal modules perl-Lemonldap-NG-Portal : CPAN - modules portail ../media/icons/flags/us.png ../media/icons/flags/us.png vi /etc/sympa/auth.conf vi /etc/sympa/auth.conf We call “database” a backend where we can read or write a data. Nous appelons “base de données” un dispositif dans lequel nous pouvons lire et écrire des données. SAML2 SAML2 apachectl configtest apachectl restart apachectl configtest apachectl restart administrator administrator Handler check access rule and send headers to protected applications L'agent vérifie les droits d'accès à l'application et envoie des en-têtes HTTP à l'application protégée http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel icons:flags:ua.png icons:flags:ua.png documentation:1.4:authfacebook documentation:1.4:authfacebook ../../../media/icons/colors.png ../../../media/icons/colors.png
lemonldap-ng-1.4.6/omegat.files/fr/glossary/0000775000175000017500000000000012542740736020602 5ustar clementclementlemonldap-ng-1.4.6/omegat.files/fr/fr-level1.tmx0000664000175000017500000527630512605703456021306 0ustar clementclement
Go in Manager, General Parameters » Sessions » Store user password in session data and set to On. Aller dans le manager, paramètres généraux » Sessions » Stocker le mot-de-passe dans les données de session et le mettre à Activer. OID prefix Préfixe OID In Manager, click on notifications explorer and then on the Create button. Dans le manager, cliquer sur l'explorateur des notifications et ensuite sur le bouton Créer. Extract and build the module: Extraire et compiler le module: This parameter is used by SAML IDP to fill the NameID in authentication responses. Ce paramètre est utilisé par l'IdP SAML pour construire le NameID dans les réponses d'authentification. ../pages/documentation/1.1/federationproxy.html ../pages/documentation/1.1/federationproxy.html ^/index.php\?.*access=admin ^/index.php\?.*access=admin documentation:1.4:applications:mediawiki documentation:1.4:applications:mediawiki coudot coudot You can also use the internal proxy to replace Apache mod_proxy configuration. On peut aussi utiliser le proxy interne pour remplacer mod_proxy d'Apache. PerlInitHandler My::Handler PerlInitHandler My::Handler Install all build dependencies (see BuildRequires in lemonldap-ng.spec) Installer toutes les dépendances de construction (voir BuildRequires dans lemonldap-ng.spec) Persistent Session backend Backend des sessions persistantes default_sidebar default_sidebar This requires Perl OpenID consumer module with at least version 1.0. Ceci requiert le module client OpenID pour Perl, version au moins supérieure ou égale à 1.0. Login field name in user table: name of user table column hosting login Nom du champ login dans la table utilisateur : nom de la colonne de la table utilisateur contenant le login CAS_proxiedServices CAS_proxiedServices This requires to configure LL::NG as an SAML Identity Provider. Ceci nécessite de configurer LL::NG comme fournisseur d'identité SAML. Allow only one session per IP address N'autoriser qu'une session par adresse IP Multi overridden parameters Paramètres surchargés pour "Multi" Bugzilla is server software designed to help you manage software development. Bugzilla est un logiciel serveur conçu pour assister la gestion de développement logiciel. Provides identity if asked Fournit l'identitié si demandée Sympa virtual host in Manager Hôte virtuel Sympa dans le manager documentation:1.4:extendedfunctions documentation:1.4:extendedfunctions documentation:1.4:status documentation:1.4:status Address: set one of Google Apps URL (all Google Apps product a distinct URL), for example http://www.google.com/calendar/hosted/mydomain.org/render Address : indiquer une des URL de Google Apps (chaque application Google Apps produit une URL distincte), par exemple http://www.google.com/calendar/hosted/mydomain.org/render SQL configuration backend (called RDBI or CDBI) Backend de configuration SQL (appelé RDBI ou CDBI) Session key containing mail address: name of the session key containing email address. Clef de session contenant l'adresse mail : nom de la clef de session contenant l'adresse de courriel. "url_logout" => "https://OBMURL/logout", "url_logout" => "https://OBMURL/logout", fastcgi fastcgi This schema shows the dependencies between modules: Ce schéma montre les dépendancesentre ces modules : Regexp::Assemble Regexp::Assemble It is targeted at developer teams, workgroups and small companies. Il est destiné aux équipes de développeurs, groupes de travail ou petites entreprises. 2 2 1 1 0 0 If you disallow this, you should also disallow direct login form IDP, because proxy restriction is set in authentication requests. En interdisant ceci, on risque d'interdire aussi les authentification directe des IDP car la restriction est indiquée dans la requête d'authentification. CA file: CA certificate used to validate CAS server certificate Fichier CA : certificat de la CA utilisée pour valider le certificat du serveur CAS menu1 menu1 openIdSecret openIdSecret SAML 2.0 / Shibboleth SAML 2.0 / Shibboleth Now you have access to the IDP parameters list: Il est ensuite possible d'accéder à la liste des paramètre de l'IDP : Use rule comments to order your rules Utiliser les commentaires pour ordonner les règles Sub elements: Éléments subordonnés : D D Other modules must be installed only if you planned to use the related feature. Les autres modules ne doivent être installés que s'il est prévu d'utiliser les fonctionnalités associées. E E RHEL/CentOS 6 RHEL/CentOS 6 Site Logo: Logo that will be displayed in the BrowserID login window. Logo du site : Logo qui sera affiché dans la fenêtre d'authentification BrowserID. F F Local macros Macros locales G G RHEL/CentOS 5 RHEL/CentOS 5 A A DocumentRoot /usr/local/lemonldap-ng/htdocs/portal/ DocumentRoot /usr/local/lemonldap-ng/htdocs/portal/ B B The convertConfig utility reads 2 LL::NG configuration files (lemonldap-ng.ini): L'utilitaire convertConfig lit 2 fichiers de configuration LL::NG (lemonldap-ng.ini) : C C L L If you enable auto completion, authentication level will be decreased (-1) as you do not ask the user to type its password (it could be in browser passwords wallet). En activant l'auto-complétion, le niveau d'authentification est décru (-1) car on ne demande plus à l'utilisateur de taper son mot-de-passe (il peut être protégé dans le navigateur). M M N N O O H H I I Cookie name (optional): name of the cookie of internal portal, if different from external portal Nom du cookie (optionnel) : nom du cookie du portail interne s'il est différent de celui du portail externe J J 0.9.4_authentication_portal.png 0.9.4_authentication_portal.png U U T T /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots W W V V The following sample parameters will be used: Les paramètres suivants sont utilisés pour l'exemple : Q Q GRANT SELECT,INSERT,UPDATE,LOCK TABLES ON lmConfig.* GRANT SELECT,INSERT,UPDATE,LOCK TABLES ON lmConfig.* By default, the main session module is used to store SAML temporary data (like relay-states), but SAML sessions need to use a session module compatible with the sessions restrictions feature. Par défautBy, le module de session principal est utilisé pour stocker les données temporaires SAML (tel les états de relais), mais les sessions SAML doivent disposer d'un module compatible avec les fonctionnalités de restrictions des sessions. Auto complete: allow the browser to remember the password (for password based authentication backends) Auto complétion : autorise le navigateur à retenir le mot-de-passe (pour les backends d'authentification basés sur des mots-de-passe) Issuer rewrite rules (requires mod_rewrite): Règles de réécriture pour la fourniture d'identité (requiert mod_rewrite): P P You just have to create error_zz and msg_zz subroutines (where zz is your international code, example: “fr” for France) by copying error_en and msg_en. Vous avez simplement à créer les fonctions error_zz et msg_zz (où zz est votre code international, exemple: “fr” pour le français) en copiant error_en et msg_en. Unifying authentications (federation) Unifier les authentifications (fédération) S S R R Z Z _cas_id _cas_id Yubikey authentication level Niveau d'authentification de Yubikey ../../download.html ../../download.html Access log: the issuer of each request is identified Journaux d'accès (AccessLog) : l'utilisateur de chaque requête est identifié http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en 'delete_user' => $_SERVER['HTTP_AUTH_SUPERADMIN'], 'delete_user' => $_SERVER['HTTP_AUTH_SUPERADMIN'], Options Options documentation:1.3:upgrade documentation:1.3:upgrade basic($uid,$_password) basic($uid,$_password) Unable to clear local cache Unable to clear local cache Key: category identifier Clef : identifiant de catégorie Installation Installation Remote portal Portail distant Example: http://auth.example.com/?logout=1 Exemple: http://auth.example.com/?logout=1 APACHEUSER: user running Apache APACHEUSER : utilisateur de fonctionnement d'Apache If you need it, you can rebuild RPMs: Si besoin, on peut reconstruire les RPMs : 127.0.0.1:6379 127.0.0.1:6379 http://lasso.entrouvert.org/download/ http://lasso.entrouvert.org/download/ You can set the default access to: Il est possible de mettre l'accès par défaut à : Zimbra is open source server software for email and collaboration - email, group calendar, contacts, instant messaging, file storage and web document management. Zimbra est un logiciel serveur collaboratif et de messagerie open-source - messagerie, calendrier de groupe, contacts, messagerie instantanée, stockage de fichiers et gestion de documents web. If the user has these values inside its entry: Si l'utilisateur dispose de ces valeurs dans son entrée : ../pages/documentation/1.1/applications/phpldapadmin.html ../pages/documentation/1.1/applications/phpldapadmin.html liblemonldap-ng-manager-perl: Manager files liblemonldap-ng-manager-perl : fichiers du manager Macros and groups Macros et groupes Any OpenID consumer N'importe quel client OpenID Wildcard Carte blanche ../../documentation/1.4/authproxy.html ../../documentation/1.4/authproxy.html http://marcelhaise.com/rmll2009/#LemonLDAP http://marcelhaise.com/rmll2009/#LemonLDAP The Active Directory module is based on the LDAP module, with these features: Le module Active Directory est basé sur le module LDAP, avec ces caractéristiques : You can also use yum on local RPMs file: On peut aussi utiliser yum sur des fichiers RPMs locaux : grantSessionRule grantSessionRule ../pages/documentation/1.1/installtarball.html ../pages/documentation/1.1/installtarball.html # For MediaWiki < 1.13 $wgHooks['AutoAuthenticate'][] = array($wgAuth,'autoAuthenticate'); # For MediaWiki < 1.13 $wgHooks['AutoAuthenticate'][] = array($wgAuth,'autoAuthenticate'); Distinguished Name Distinguished Name basic basic ../../documentation/1.4/changeconfbackend.html ../../documentation/1.4/changeconfbackend.html //"userobm_mail_server_hostname" => , //"userobm_mail_server_hostname" => , https://plus.google.com/u/0/101819048603406959766/ https://plus.google.com/u/0/101819048603406959766/ <title>: title to display: will be inserted in HTML page enclosed in <h2 class=“notifText”>… <title> : titre à afficher : sera inséré dans la page HTML encadré dans <h2 class=“notifText”>… A specific persistent session is created with this module, to store attribute values returned by Google. Une session persistente est créée avec ce module pour stocker les valeurs d'attribut renvoyées par Google. ../../documentation/1.0/ldapconfbackend.html ../../documentation/1.0/ldapconfbackend.html /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay See prerequisites and dependencies chapter for more. Voir le chapître pré-requis et dépendances. The module can be found here. Le module peut être trouvé ici. Twitter use OAuth protocol to allow applications to reuse its own authentication process (it means, if your are connected to Twitter, other applications can trust Twitter and let you in). Twitter utilise le protocole OAuth pour autoriser les applications à réutiliser son propre processus d'authentification (ce qui signifie que si vous êtes connecté à Twitter, d'autres applications peuvent agréer Twitter et vous laisser entrer). unprotect: all is open, but authenticated users are seen as authenticated unprotect : tout est ouvert, mais les utilisateurs authentifiés sont vus comme tels ../pages/documentation/1.1/portalmenu.html ../pages/documentation/1.1/portalmenu.html As LL::NG works like classic WebSSO (like Siteminder™), many other applications are easy to integrate. Comme LL::NG fonctionne comme un WebSSO classique (tel Siteminder™), de nombreuses applications sont faciles à integrer. country country Cache: cache for configuration and sessions Cache: cache pour la configuration et les sessions You need to know the technical name of configuration parameter to do this. Il est nécessaire de connaître le nom technique du paramètre de configuration pour le faire. Location: Access Point for SLO request. Location: Point d'accès pour les requêtes de SLO. customFunctions customFunctions start: Start date (GMT) start : date de début (GMT) Display change password module Affiche le module de changement de mot-de-passe protect the manager by LL::NG protéger le manager par LL::NG The file auth.keytab should then be copied (with a secure media) to the Linux server (for example in /etc/lemonldap-ng). Le fichier auth.keytab doit ensuite être copié (par un média sûr) sur le serveur Linux (par exemple dans /etc/lemonldap-ng). Custom XSLT file Fichier XSLT personnalisé If enabled, if the user group is a member of another group (group of groups), all parents groups will be stored as user's groups. Si activé et si le groupe de l'utilisateur est membre d'un autre groupe (groupes de groupes), tous les groupes parents seront considérés comme groupes de l'utilisateur. Drupal virtual host in Manager Hôte virtuel Drupal dans le manager You can change the graphical aspect of the Manager, by clicking on the Menu style button. L'aspect graphique du manager peut être modifié en cliquant sur le bouton style de menu. The “default” access rule is used if no other access rule match the current URL. La règle d'accès “default” est utilisée si aucune règle ne correspond à l'URL courante. /index.php?access=admin&access=other /index.php?access=admin&access=other Magic authentication allows to mix standard Sympa authentication and SSO Magic authentication autorise l'utilisation de l'authentification Sympa et SSO DBI Authentication table Table d'authentification DBI UserName UserName SAML Session backend Module de stockage SAML Either checkout or export the SVN repository, or extract the SVN tarball to get the SVN files on your disk. Au choix, importer le dépôt SVN ou extraire l'archive SVN pour importer les fichiers. singleSession singleSession Crypt::OpenSSL::RSA Crypt::OpenSSL::RSA Signature Signature LL::NG needs a storage system to store its own configuration (managed by the manager). LL::NG a besoin d'un dispositif de stockage de sa propre configuration (gérée par le manager). Core modules must be installed on the system. Les modules "core" doivent être installés sur le système. _saml_id ProxyID _nameID _assert_id _art_id _session_id _saml_id ProxyID _nameID _assert_id _art_id _session_id Lasso identity dump Dump de l'identité Lasso Authentication table Table d'authentification Manager Manager This value will be used to know to which recipient the has to be sent (default: mail). Cette valeur peut être utilisée pour savoir à quel destinataire doit être envoyé le courriel (défaut : mail). <Files *.pl> <Files *.pl> ../../../media/documentation/manager-saml-sp-new.png ../../../media/documentation/manager-saml-sp-new.png Skin thème http://www.w3.org/wiki/WebID http://www.w3.org/wiki/WebID Multiple sessions, you can restrict the number of open sessions: Sessions multiples, on peut retreindre le nombre de sessions ouvertes : logout_app https://auth.example.com/ logout_app https://auth.example.com/ //"userobm_mail_ext_perms" => , //"userobm_mail_ext_perms" => , Please always try to find another solution to protect your application with LL::NG. Il est en général préférable de trouver une autre solution pour protéger les applications avec LL::NG. declare secondary portal in General Parameters » Advanced Parameters » Security » Trusted domains declarer le second portail dans Paramètres généraux » Paramètres avancés » Sécurité » Domaines approuvés For each variable, The first field is the name which will be used in rules, macros or headers and the second field is the name of the user database field. Pour chaque variable, le premier champ est le nom qui servira dans les règles, macros ou en-têtes et le second est le nom du champ dans la base de données utilisateurs. icons:lists.png icons:lists.png documentation:1.4:soapsessionbackend documentation:1.4:soapsessionbackend _url _url you've restart all Apache server after having change cookie name or domain tous les serveurs Apache ont été rechargés après un changement du nom de cookie ou du domaine For example, to override configured skin for portal: Par exemple, pour surcharger l'apparence du portail : default_access (optional): what result to return if start and end are empty default_access (optionnel) : resultat à retourner si start et end sont vides See How to change configuration backend to known how to change this. Voir Comment changer le backend de configuration. documentation:1.4:header_remote_user_conversion documentation:1.4:header_remote_user_conversion rbac rbac http://www.zimbra.com/ http://www.zimbra.com/ Session expiration Expiration des sessions It will use the authentication level registered in user session to match the SAML authentication context. Il utilise le niveau d'authentification enregistré dans la session de l'utilisateur pour établir le contexte d'authentification SAML. documentation:1.4:applications:liferay ↵ documentation:1.4:applications:liferay ↵ Installation on Debian/Ubuntu with packages Installation sur Debian/Ubuntu avec les paquets LemonLDAP::NG is shipped with 3 skins: LemonLDAP::NG est fournit avec 3 thèmes : Each user has a ssoRoles attributes, which values are the DN of the corresponding roles. Chaque utilisateur a des attributs ssoRoles, dont les valeurs sont les DN des rôles correspondants. Mandatory: if set to “On”, then this attribute will be sent in authentication response. Obligatoire : si activé, cet attribut sera envoyé dans les réponses d'authentification. Wiki Wiki To update translations, ask to lemonldap-ng-dev@ow2.org to update your files. Pour télécharger les traductions, demandez à lemonldap-ng-dev@ow2.org pour les mettres en ligne. Format: optional, SAML attribute format. Format (optionnel) : format de l'attribut SAML. ../../../media/icons/lists.png ../../../media/icons/lists.png ../../documentation/1.4/internalproxy.html ../../documentation/1.4/internalproxy.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html documentation:manager-saml-idp-new.png documentation:manager-saml-idp-new.png ../documentation/current/writingrulesand_headers.html#headers ../documentation/current/writingrulesand_headers.html#headers Read/Write functions (index.pl/adminSessions paths): Fonctions en lecture/écriture (chemin index.pl/adminSessions) : The reset password link must be activated, see portal customization. Le lien de réinitialisation de mot-de-passe doit être activé, voir la personnalisation du portail. <Perl> <Perl> MRTG configuration example: Exemple de configuration MRTG : icons:tux.png icons:tux.png _issuerDB _issuerDB You can use 0 or 1 to disable/enable the module, or use a more complex rule. On peut utiliser 0 ou 1 pour activer/désactiver chaque module ou utiliser une règle plus complexe. Leave blank to use Mozilla default verification URL (https://verifier.login.persona.org/verify) Laisser vide pour utiliser l'URL de vérification par défaut de Mozilla (https://verifier.login.persona.org/verify) LimeSurvey has a webserver authentication mode that allows to integrate it directly into LemonLDAP::NG. LimeSurvey dispose d'un mode d'authentification par serveur web qui permet de l'integrer directement dans LemonLDAP::NG. http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes (o/n) n (o/n) n ../pages/documentation.html ../pages/documentation.html Session history is always visible in session explorer for administrators. L'historique des sessions est toujours visible dans l'explorateur de sessions pour les administrateurs. Auto login: a special LL::NG Handler will generate Sympa cookie (for Sympa 5 only !) Auto login: handler spécial de LL::NG qui génère le cookie Sympa (pour Symp 5 seulement !) You can then choose any other module for users and password. Vous pouvez ensuite choisir vos modules d'utilisateurs et de mots-de-passe. Dokuwiki plugin Extension pour Dokuwiki persistentStorageOptions persistentStorageOptions Session explorer Explorateur de sessions Go to %_topdir Aller dans %_topdir http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 ../pages/documentation/1.1/security.html ../pages/documentation/1.1/security.html LL::NG repository Dépôt LL::NG macros are used to extend (or rewrite) exported variables. les macros sont utilisées pour étendre (ou réécrire) les variables exportées. LL::NG can also request proxy tickets for its protected services. LL::NG peut également requérir des tickets de proxy pour les services qu'il protège. the portal le portail [manager] protection = manager [manager] protection = manager Portal URL URL du portail ~10 ~10 $givenName $givenName SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /etc/httpd/certs/ow2.cert SSLCertificateKeyFile /etc/httpd/certs/ow2.key SSLCACertificateFile /etc/httpd/certs/ow2-ca.cert SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /etc/httpd/certs/ow2.cert SSLCertificateKeyFile /etc/httpd/certs/ow2.key SSLCACertificateFile /etc/httpd/certs/ow2-ca.cert → Local cache cannot be cleard, check the localStorage and localStorageOptions or file permissions → Le cache local ne peut être effacé, regarder les options localStorage and localStorageOptions ou les droits associés à ces fichiers dbiChain dbiChain ssoName ssoName ../../../media/applications/grr_logo.png ../../../media/applications/grr_logo.png The portal of the secondary LL::NG structure is configured to delegate authentication to a remote portal. Le portail du système LL::NG secondaire est configuré pour déléguer l'authentification à un portail distant. Go in Manager, General Parameters » Cookies » Multiple domains and set to On. Aller dans le manager, Paramètres généraux » Cookies » Domaines multiples et sélectioonner "activer" http://www.google.com/apps/intl/en/business/index.html http://www.google.com/apps/intl/en/business/index.html ../../../../media/documentation/liferay_4.png ../../../../media/documentation/liferay_4.png documentation:1.4:ssocookie documentation:1.4:ssocookie ../pages/documentation/1.1/soapconfbackend.html ../pages/documentation/1.1/soapconfbackend.html Authentication request Requête d'authentification Bugzilla virtual host in Manager Hôte virtuel Bugzilla dans le manager ../documentation/1.0/portal.html ../documentation/1.0/portal.html Advantages: Avantages : Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available Les fichiers de configuration Apache se trouvent dans /etc/lemonldap-ng et liés dans /etc/apache2/sites-available Compilation Compilation Note that SAML protocol is more secured than OpenID, so when your partners are known, prefer SAML. Noter que le protocole SAML est plus securisé que OpenID, ainsi si les partenaires sont connus, preférer SAML. ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ Portal Redirections Redirections du portail Set SAML end points Indiquer les points d'entrées SAML Authentication service of course Le service d'authentification bien sûr $_passwordDB $_passwordDB Digest::HMAC Digest::HMAC ../../../media/icons/xeyes.png ../../../media/icons/xeyes.png openIdAuthnLevel openIdAuthnLevel svn checkout svn+ssh://developername@svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn+ssh://nomDuDeveloppeur@svn.forge.objectweb.org/svnroot/lemonldap Krb5KeyTab /etc/lemonldap-ng/auth.keytab Krb5KeyTab /etc/lemonldap-ng/auth.keytab Go to My Account: Aller dans My account: So you can configure it to authenticate users using a federation protocol and simultaneously to provide identities using other(s) federation protocols. Ainsi on peut le configurer pour authentifier les utilisateurs en utilisant un protocole de fédération et simultanément pour fournir les identités en en utilisant en autre. http://grr.mutualibre.org/documentation/body.php?id=35 http://grr.mutualibre.org/documentation/body.php?id=35 </SPSSODescriptor> </md:EntityDescriptor> </SPSSODescriptor> </md:EntityDescriptor> It is also possible to redirect the user without using ErrorDocument: the Handler will not return 403, 500, 503 code, but code 302 (REDIRECT). Il est également possible de rediriger les utilisateurs sans utiliser ErrorDocument : l'agent ne retournera pas les codes 403, 500, 503 mais le code 302 (REDIRECT). manager-apache2.conf: Manager virtual host manager-apache2.conf : hôte virtuel du manager See how to change configuration backend. Voir comment changer de backend de configuration. Portal messages: all messages are grouped in lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. Les messages du portail: tous les messages sont regroupés dans lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. Undefined: Default NameID format is used Undefined: le format de NameID par défaut est utilisé ldapPasswordResetAttribute ldapPasswordResetAttribute Configuration: where configuration is stored. Configuration: où est stocké la configuration. createdb -O lemonldap-ng lemonldap-ng createdb -O lemonldap-ng lemonldap-ng If you manage different timezones, you have to take the jetlag into account in ssoLogonHours values, or use the $_timezone parameter. Si plusieurs fuseaux sont utilisés, le jetlag doit être introduit dans le compte dans la valeur ssoLogonHours, ou utiliser le paramètre $_timezone. SMTP / Reset password by mail SMTP / réinitialisation de mot-de-passe par courriel Check XSS Attacks Recherche les attaques XSS Store password in session Stockage du mot-de-passe en session Name: Auth-Name Nom: Auth-Name Replace MySQL by Apache::Session::Flex Remplacer MySQL par Apache::Session::Flex http://freshmeat.net/projects/lemonldapng http://freshmeat.net/projects/lemonldapng At least, check if it is not a known application, or try to adapt its source code. Ainsi, vérifier si l'application est connue ou essayer d'adapter le code source. Note that if the user is already authenticated on the first portal, all redirections are transparent. Noter que si l'utilisateur est déjà authentifié sur le premier portail, toutes les redirections sont transparentes. press.html press.html OBM OBM Skin: the name of the skin to use. Thème : le nom du thème à utiliser. ldapconfbackend ldapconfbackend email_http_header HTTP_MAIL email_http_header HTTP_MAIL Address: URL of application Adresse : URL de l'application If you upgrade from older versions, please follow first: Pour les mises à jour depuis des versions plus anciennes, suivre d'abord : "userobm_password" => "HTTP_OBM_USERPASSWORD", "userobm_password" => "HTTP_OBM_USERPASSWORD", ../pages/documentation/1.1/browseablesessionbackend.html ../pages/documentation/1.1/browseablesessionbackend.html //"userobm_status" => , //"userobm_status" => , http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 You can then add the Manager as an application in the menu. On peut aussi ajouter le manager dans les applications du menu. Then, go in Choice Parameters: Ensuite, aller dans les paramètres Choice: ->uri('urn:Lemonldap::NG::Common::CGI::SOAPService') ->uri('urn:Lemonldap::NG::Common::CGI::SOAPService') When session is granted, the Handler will then check the authorizations like the standard Handler. Lorsque la session est validée, l'agent examine les autorisations comme un agent standard. Changes: lemonldap-ng-changes@ow2.org ( Subscribe | Archives ) Changements: lemonldap-ng-changes@ow2.org ( Souscrire | Archives ) Main LL::NG structure Système LL::NG principal Set GoogleApps as Service Provider name. Mettre GoogleApps comme nom de fournisseur de service. ../media/icons/terminal.png ../media/icons/terminal.png ../../../media/documentation/manager-menu-application-logo.png ../../../media/documentation/manager-menu-application-logo.png JDLL JDLL http://www.private.com http://www.private.com APACHEVERSION: Apache major version (default: 2) APACHEVERSION : version majeure d'Apache (défaut : 2) //"userobm_vacation_enable" => , //"userobm_vacation_enable" => , ../../../media/documentation/manager-saml-service-sp-slo.png ../../../media/documentation/manager-saml-service-sp-slo.png documentation:liferay_2.png documentation:liferay_2.png Artifact Resolution Résolution des artifacts "debug_level" => "NONE", // "debug_header_name" => "HTTP_OBM_UID", // "group_header_name" => "HTTP_OBM_GROUPS", "debug_level" => "NONE", // "debug_header_name" => "HTTP_OBM_UID", // "group_header_name" => "HTTP_OBM_GROUPS", Crypt::Rijndael Crypt::Rijndael Verify that: Verifier que : Path: keep ^/openidserver/ unless you have change Apache portal configuration file. Chemin : laisser ^/openidserver/ sauf si le fichier de configuration Apache du portail a été modifiée. The IDP name is asked, enter it and click OK. Le nom d'IDP est demandé, entrer-le et cliquer sur OK. Then edit rules and headers. Éditer ensuite les règles et en-têtes. Preauthentication key: the one you grab from zmprov command Clef de pré-authentification key : celle récupérée de la commande zmprov ../../documentation/1.4/samlservice.html#authentication_contexts ../../documentation/1.4/samlservice.html#authentication_contexts A CAS server with SAML authentication Un serveur CAS avec une authentification SAML ~50 ~50 documentation:1.4:selfmadeapplication ↵ documentation:1.4:selfmadeapplication ↵ You need to create yourself the directory and set write access to Apache user. Il faut créer soi-même le répertoire et y donner un accès en écriture pour l'utilisateur Apache. LockUserName LockUserName LemonLDAP::NG can be used as a proxy between those protocols LemonLDAP::NG peut être utilisé comme proxy entre ces protocoles You must register SP metadata here. Il faut enregistrer les métadatas du SP ici. Local documentation is open to all: La documentation locale est ouverte à tous : <user username="role1" password="tomcat" roles="role1"/> <user username="role1" password="tomcat" roles="role1"/> ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend activedirectoryminihowto activedirectoryminihowto Several IDPs are allowed, in this case the user will choose the IDP he wants. Plusieurs IDPs peuvent être autorisés, dans ce cas l'utilisateur peut choisir l'IDP qu'il souhaite. documentation:1.4:securetoken documentation:1.4:securetoken Date of session creation Date et heure (timestamp) de la création de la session Just set the authentication type to config and indicate DN and password inside the file config.php: Mettre juste le type d'authentification à config et indiquer le DN et le mot-de-passe dans le fichier config.php: Groups Groupes http://search.cpan.org/perldoc?Apache::Session::Informix http://search.cpan.org/perldoc?Apache::Session::Informix The database password Le mot de passe de la base de données (?i) means case no sensitive. (?i) signifie insensible à la casse. documentation:1.0:fileconfbackend documentation:1.0:fileconfbackend //"userobm_delegation_target" => , //"userobm_delegation_target" => , } ); } ); # Your nice code here   # Le joli code ici :   /_detail/screenshots/1.0/pastel/password.png?id=screenshots /_detail/screenshots/1.0/pastel/password.png?id=screenshots As same for groups: a group rule may involve another, previously computed group. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment. /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml Download them here and install pre-required packages. Les télécharger ici et installer les paquets pre-requis. Can be used to secure another backend for remote servers. Peut être utilisé pour sécuriser un autre backend pour des serveurs distants. AuthLDAPBindDN "ou=websso,ou=applications,dc=example,dc=com" AuthLDAPBindDN "ou=websso,ou=applications,dc=example,dc=com" A start date and an end date (to open or close the service even the entry already exists) Des dates de début et de fin (pour restreindre l'accès aux services même si l'entrée existe) /_detail/logos/logo_ucanss.png?id=references /_detail/logos/logo_ucanss.png?id=references Portal URL: URL of internal portal URL du portail : URL du portail interne logos:logo_rbn.png logos:logo_rbn.png /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword A Zimbra Handler is called Un handler Zimbra est appelé With YUM Avec YUM SetHandler perl-script SetHandler perl-script ERASECONFIG: set to 0 if you want to keep your configuration files (default: 1) ERASECONFIG : mettre à 0 pour conserver les fichiers de configuration (défaut : 1) exported variables collected from UserDB backend les variables exportées collectées depuis le backend utilisateur One IP only by user: a user can not open 2 sessions with different IP. Une IP par utilisateur : un utilisateur ne peut ouvrir 2 sessions avec différentes adresses IP. ../../documentation/1.4/extendedfunctions.html ../../documentation/1.4/extendedfunctions.html But you can make your own, see Skin customization below. On peut faire le sien, voir comment personnaliser le thème ci-dessous. 'failedLoginNumber' => '5', 'failedLoginNumber' => '5', Drupal module activation Activation du module Drupal # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main pastel pastel MediaWiki is a wiki software, used by the well known Wikipedia. MediaWiki est un logiciel wiki utilisé par le très connu Wikipedia. Those macros are calculated only at the first usage and stored in the local session cache (only for this server) and only if the user access to the related applications. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. ../../documentation/1.4/writingrulesand_headers.html#rules ../../documentation/1.4/writingrulesand_headers.html#rules Yubikey Yubikey $description eq "LDAP administrator" $description eq "LDAP administrator" This works if the user has only one role per application. Ceci fonctionne si l'utilisateur a seulement un rôle par application. This can be used to protect applications relying on REMOTE_USER environment variable in reverse proxy mode. Ceci permet de protéger des applications nécessitant la variable d'environnement REMOTE_USER en mode reverse-proxy. require Lemonldap::NG::Portal::SharedConf; require Lemonldap::NG::Portal::SharedConf; ^/index.php\?logout ^/index.php\?logout User clicks on the logout link in Portal L'utilisateur clique sur le bouton déconnexion du portail Access rule in virtual host Règle d'accès à un hôte virtuel ErrorDocument 401 /login.pl ErrorDocument 401 /login.pl If you want to access to other datas, you have to use Google in General Parameters > Authentication modules > User module. Pour accéder aux autres données, utiliser Google in Paramètres generaux > Modules d'authentification > Modules d'utilisateurs. Then CAS service has to show a correct error when service ticket validation will fail. Ainsi le service CAS doit afficher une erreur lorsque la validation du ticket échoue. apacheAuthnLevel apacheAuthnLevel First step: create a rule to grant access only if the user has a role in the application: Première étape : créer une règle pour autoriser l'accès seulement si l'utilisateur dispose d'un rôle dans l'application: For example, a LL::NG server can be: Par exemple, un serveur LL::NG peut être : apt-get install libapache2-mod-auth-kerb apt-get install libapache2-mod-auth-kerb You can not start with an empty configuration, so read how to change configuration backend to convert your existing configuration into another one. On ne peut démarrer avec une configuration vide, il faut donc lire comment changer de backend de configuration pour convertir une configuration existante en une autre. ~1000 ~1000 Encryption key: key used to crypt some data, should not be known by other applications Clef de chiffrement : clef utilisée pour chiffrer certaines données, ne doit être connue d'aucune autre application You can change the default skin in Manager: General Parameters > Portal > Customization > Default skin. On peut changer le thème par défaut dans le manager : paramètres généraux > Portail > Personnalisation > Skin. You can use '*' character. On peut utiliser le caractère '*'. That is why it is important to set APACHEUSER variable when you launch “make install” C'est pourquoi il est important de renseigner la variable APACHEUSER lorsqu'on lance “make install” "userobm_description" => "HTTP_OBM_DESCRIPTION", "userobm_description" => "HTTP_OBM_DESCRIPTION", Logout user from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ Sympa shared secret Secret partagé de Sympa Then, go in CAS parameters: Aller ensuite dans Paramètres CAS : User rejected because VirtualHost XXXX has no configuration User rejected because VirtualHost XXXX has no configuration Server URL: CAS server URL (must use https://) URL du serveur : URL du serveur CAS (doit utiliser https://) Port Port By default, SSO cookie is hidden, so protected applications cannot get SSO session key. Par défaut, le cookie SSO est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session SSO. Leave blank to deactivate the feature. Laissez vide pour désactiver cette fonctionnalité. Go to the Manager and create a new virtual host for Drupal. Aller dans le manager et créer un nouvel hôte virtuel pour Drupal. lemonldap-ng-portal: contains authentication portal and menu lemonldap-ng-portal : contient le portail d'authentification et le menu You will find here screenshots of the new features. On trouve ici les captures d'écran des nouvelles fonctionnalités. OBM_MAIL OBM_MAIL LL::NG portal is a modular component. Le portail LL::NG est un composant modulaire. Connection password Mot-de-passe de connexion Null Null # OpenID Issuer # Fournisseur d'identité OpenID press press Installation and configuration Installation et configuration http://search.cpan.org/perldoc?Apache::Session::File http://search.cpan.org/perldoc?Apache::Session::File ../../css/print.css ../../css/print.css Apache Apache require Lemonldap::NG::Portal::Menu; require Lemonldap::NG::Portal::Menu; http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm Oracle Oracle This will use email as login name (for accounting, session explorer,…). L'adresse email est utilisée comme nom de compte (pour la traçabilité, l'explorateur de session,…). //"userobm_web_list" => , //"userobm_web_list" => , /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Display reset password form Affiche le module de réinitialisation de mot-de-passe Authen::SASL Authen::SASL /_detail/screenshots/1.0/impact/portal.png?id=screenshots /_detail/screenshots/1.0/impact/portal.png?id=screenshots We advice to deactivate other options, cause users will use LL::NG portal to modify or reset their password. Il est conseillé de désactiver les autres options, car les utilisateurs utiliseront le portail LL::NG pour modifier ou réinitialiser leur mot-de-passe. OpenID server Serveur OpenID So for Handler on different physical servers than the Portal, a user with an expired session can still be authorized still the cache expires. Ainsi pour les agents installés sur des serveurs physiquement différent de celui hébergeant le portail, un utilisateur dont la session a expiré peut toujours être autorisé jusqu'à expiration du cache. OpenID allowed domains Domaines autorisés pour OpenID Automatic REMOTE_USER Automatic REMOTE_USER absolute URL if it is run by handler (e.g. /admin/index.php?param=foo). l'URL absolue si elle est appelée par un agent (e.g. /admin/index.php?param=foo). documentation:status_standard.png documentation:status_standard.png Check configStorage and configStorageOptionsor file permissions. Vérifier les options configStorage and configStorageOptions ou les droits associés à ces fichiers. Choose one of the following method: Choisir l'une des méthodes suivantes : Sessions Sessions Trusted domains: domains on which the user can be redirected after login on portal. Domaines approuvés : domaines vers lesquels l'utilisateur peut être redirigé après authentification sur le portail. Developer access Accès développeurs cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images password.png password.png RewriteEngine On RewriteEngine On One session only by user: a user can not open 2 sessions with the same account. Une session seulement par utilisateur : on ne peut ouvrir 2 sessions avec le même compte. NameVirtualHost *:80 NameVirtualHost *:80 ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database Handlers have a session cache, with a default lifetime of 10 minutes. Les agents disposent d'un cache de session d'une durée de vie par défaut de 10 minutes. In Manager, click on SAML service providers and the button New service provider. Dans le manager, cliquer sur fournisseurs de service SAML puis sur le bouton Nouveau fournisseur de service. http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html RewriteEngine On RewriteEngine On vi /etc/yum.repos.d/lemonldap-ng.repo vi /etc/yum.repos.d/lemonldap-ng.repo default => $ssoRoles =~ /ou=aaa,ou=roles/ default => $ssoRoles =~ /ou=aaa,ou=roles/ The Zimbra email and calendar server is available for Linux, Mac OS X and virtualization platforms. Le serveur de messagerie et calendrier Zimbra est disponible pour Linux, Mac OS X et les plateformes de virtualisation. http://packages.debian.org/search?keywords=lemonldap-ng http://packages.debian.org/search?keywords=lemonldap-ng ../pages/documentation/1.1/mrtg.html ../pages/documentation/1.1/mrtg.html http://openid.net/specs/openid-authentication-2_0.html http://openid.net/specs/openid-authentication-2_0.html perl-Lemonldap-NG-Handler: CPAN - Handler modules perl-Lemonldap-NG-Handler : CPAN - modules agent portalSkin => 'dark', portalSkin => 'dark', Password found from login process (only if password store in session is configured) Mot-de-passe fournit lors du processus d'authentification (seulement si le stockage du mot-de-passe dans la sessions est configuré) ../media/logos/logo_gn.png ../media/logos/logo_gn.png It is possible to store any additional session data. Il est possible de stocker d'autres données de session. Then on Linux server: Ensuite sur le serveur Linux : /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Check conditions: set to Off to disable conditions checking on authentication responses. Vérifier les conditions : active ou désactive, l'examen des conditions dans les réponses d'authentification. LL::NG Null backend is a transparent backend: Le backend Null de LL::NG est un backend transparent : It can be seen in system processes, for example: Il peut être vu dans les processus du système, par exemple : </Location>   </Location>   Edit lemonldap-ng.ini, and activate status in the handler section: Éditer lemonldap-ng.ini, et activer le statut dans la section handler : liblemonldap-ng-handler-perl: Handler files liblemonldap-ng-handler-perl : fichiers des agents Error messages Messages d'erreur In 1.3, LL::NG have a captcha feature which is used in this case. Dans la version 1.3, LL::NG dispose d'une fonctionnalité "captcha" qui est utilisée dans ce cas. icons:colors.png icons:colors.png If you are protecting Dokuwiki with LL::NG as reverse proxy, convert header into REMOTE_USER environment variable. Si Dokuwiki est protégé par un reverse-proxy LL::NG, convertir l'en-tête en variable d'environnement REMOTE_USER. User owns SSO cookies on the main domain (see Login kinematics) L'utilisateur dispose d'un cookie SSO dans le domaine principal (voir la cinématique de connexion) To allow this, use SOAP for configuration access, or use a network service like SQL database or LDAP directory. Pour contourner ce problème, utiliser SOAP pour l'accès à la configuration ou un service réseau tel une base de donnée SQL ou un annuaire LDAP. See Writing rules and headers chapter. Voir le chapître Écrire les règles et en-têtes. msmith msmith Upgrade from 1.3 Mise à jour depuis la version 1.3 <Valve className="org.lemonLDAPNG.SSOValve" userKey="AUTH-USER" roleKey="AUTH-ROLE" roleSeparator="," allows="127.0.0.1"/> <Valve className="org.lemonLDAPNG.SSOValve" userKey="AUTH-USER" roleKey="AUTH-ROLE" roleSeparator="," allows="127.0.0.1"/> ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options upgrade upgrade Sébastien BAHLOUL Sébastien BAHLOUL ^/c/portal/logout => logout_sso ^/c/portal/logout => logout_sso Returns cookie(s) name and values Retourne nom(s) et valeur(s) du(des) cookie(s) soapSessionService soapSessionService accept: all authenticated users can pass accept: tout utilisateur authentifié est autorisé $_authChoice $_authChoice http://lasso.entrouvert.org/ http://lasso.entrouvert.org/ http://facebook.com http://facebook.com When using this module, LL::NG portal will be called only if Apache does not return “401 Authentication required”, but this is not the Apache behaviour: if the auth module fails, Apache returns 401. En utilisant ce module, le portail LL::NG est appelé uniquement si Apache ne retourne pas “401 Authentication required”, aucune bascule n'est donc possible. install_bin (/usr/local/lemonldap-ng/bin) install_bin (/usr/local/lemonldap-ng/bin) If you have more than one role for an application, you can join those roles with a separator (ex: ||): Si plusieurs rôles peuvent être donnés dans la même application, on peut joindre ces rôles avec un séparateur (ex : ||): For example to store authentication mode, you can set in Session data to store a new key $_auth with value Authentication mode. Par exemple pour stocker le mode d'authentification, on peut créer une nouvelle clef dans données de session à stocker nommée $_auth avec comme valeur mode d'authentification. For apache configuration, you may have to remove the old symbolic link, if not done by the RPM: Pour la configuration apache, il faut peut-être supprimer l'ancien lien symbolique si ce n'est pas fait par le RPM: documentation/current/start.html documentation/current/start.html <IfModule mod_rewrite.c> <IfModule mod_rewrite.c> Value: $uid Valeur : $uid ../../documentation/1.4/authad.html ../../documentation/1.4/authad.html Script files Fichiers de script SlideShare SlideShare See Form replay to learn how to configure form replay to POST data on protected applications. Voir Rejeu des formulaires pour savoir comment configurer le rejeu des formulaires pour poster des données à une applications protégée. Allow proxied authentication: allow an authentication response to be issued from another IDP that the one we register (proxy IDP). Authentification proxy autorisée : autorise qu'une réponse d'authentification soit issue d'un autre IDP que celui enregistré (proxy IDP). Timeout: server idle timeout. Timeout : délai maximum de connexion. Description Description Required attributes: Attibuts requis : Configuration key of IDP used for authentication Clef de configuration de l'IDP utilisé pour l'authentification http://deb.entrouvert.org/ http://deb.entrouvert.org/ DBI Connection user Nom de connexion DBI Authentication table and user table can be the same. Les tables d'authentification et utilisateurs peuvent être confondues. You can also pass parameters to the make install command, with this syntax: On peut aussi passer des paramètres à la commande make install, avec cette syntaxe : loginhistory loginhistory AuthType Kerberos AuthType Kerberos dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] http://zimbra.example.com/zimbrasso http://zimbra.example.com/zimbrasso ../pages/wiki/dokuwiki.html ../pages/wiki/dokuwiki.html Configure Single Sign On cookie and portal URL Configurer le cookie SSO (Single Sign On) et l'URL du portail Your old Apache configuration should have been saved, you need to port your specificities in new Apache configuration files: L'ancienne configuration Apache devrait avoir été sauvée, il faut réporter les changements locaux dans le nouveau fichier de configuration Apache : highavailability highavailability Configuration objects use standard object class: applicationProcess. Les objets de configuration utilisent une classe d'objet standard : applicationProcess. In Manager, go in General Parameters > Authentication modules and choose Google for authentication module. Dans le manager, allez dans Paramètres generaux > Modules d'authentification et choisissez Google comme module d'authentication. Portal provides also many other features (see portal for more) Le portail fournit également de nombreux autres services (voir portail pour plus d'informations) In Manager, set syslog facility in General Parameters > Logging > Syslog facility. Dans le manager, choisir la facilité syslog dans Paramètres généraux > Journalisation > Facilité syslog. The choosen backends will be registered in session: Les backends choisits enregistrent dans la session : Directory Directory Using Apache::Session::MySQL (if you choose this option, then read how to increase MySQL performances) Utiliser Apache::Session::MySQL (il est alors conseillé de lire comment améliorer les performances de MySQL) You can download the code here: http://github.com/oremj/mediawiki-http-auth/downloads Il est possible de télécharger le code ici : http://github.com/oremj/mediawiki-http-auth/downloads But you will rather prefer to use an Apache authentication module, like for example LDAP authentication module: Il est souvent souhaitable d'utiliser un module d'authentification Apache, tel par exemple le module d'authentification LDAP : managerprotection managerprotection ../pages/documentation/1.1/ldapminihowto.html ../pages/documentation/1.1/ldapminihowto.html Multi LDAP#Openldap; LDAP#ActiveDirectory Multi LDAP#Openldap; LDAP#ActiveDirectory Configuration overview Vue d'ensemble de la configuration mysqladmin create lemonldapng mysqladmin create lemonldapng There are two ways to configure SSO with Sympa: Il y a deux façons de configurer le SSO avec Sympa : All this work is transparent for the user, he cannot see what data are posted by LL::NG. Tout ce travail est transparent pour l'utilisateur et il ne peut voir ce qui est envoyé par LL::NG. Import custom functions in LemonLDAP::NG Importer les fonctions personnalisées dans LemonLDAP::NG customfooter.tpm : HTML code in the footer div customfooter.tpm : code HTML inséré dans le div de pied-de-page extendedfunctions extendedfunctions Since LemonLDAP::NG 1.2, the demonstration backend is configured by default. Depuis la version 1.2 de LemonLDAP::NG, le backend de démonstration est sélectionné par défaut. //"userobm_samba_logon_script" => , //"userobm_samba_logon_script" => , liferay liferay If a user does not comply with any condition, he is prompted a customized message. Si un utilisateur ne remplit pas une condition, il est averti par un message personnalisé. You may want to use the Mutliple authentication backend to fail back to another authentication for user without Kerberos ticket. On peut souhaiter utiliser le backend d'authentification multiple pour retomber sur un autre système d'authentification pour les utilisateurs sans ticket Kerberos. /index.php?Access=admin /index.php?Access=admin ../../documentation/1.4/highavailability.html ../../documentation/1.4/highavailability.html This mode must not be used for other purpose than test and demonstration! Ces mode ne doit pas être utilisé pour autre chose que des tests et démonstrations ! Windows 2003 server: Windows 2003 server : Spring Security (ACEGI) Sécurité Spring (ACEGI) Some characters are encoded in URLs by the browser (such as space,…). Certains caractères sont encodés dans les URLs par le navigateur (tels les espaces,…). jsonfileconfbackend jsonfileconfbackend Protected URLs: Regexp of URLs for which the secure token will be sent, separated by spaces URLs protégées : expressions régulières correspondant aux URLs pour lesquels un jeton sécurisé doit être envoyé, separées par des espaces Fast CGI support Support FastCGI cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ Auth-Admin Auth-Admin Use MySQL for Lemonldap::NG sessions Utiliser MySQL pour les sessions de Lemonldap::NG HTML::Template HTML::Template /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom An error occurs on server side: SERVER_ERROR (500) Une erreur est survenue côté serveur : SERVER_ERROR (500) <Directory /var/lib/lemonldap-ng/portal/> <Directory /var/lib/lemonldap-ng/portal/> on: always display on : toujours afficher icons:neotux.png icons:neotux.png #compilation #compilation #presentation #presentation /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications LL::NG can be configured to provides 2 cookies: LL::NG peut être configuré pour fournir 2 cookies: Then fill the two fields; Renseigner ensuite les deux champs ; Variables: user information, macros and groups used to fill SSO session Variables : informations utilisateur, macros et groupes utilisés pour renseigner la session SSO LinShare LinShare Parameter list Liste des paramètres You can use the same Facebook access token in your applications. On peut réutiliser le même ticket d'accès Facebook dans les applications. This mechanism can only work with authentication backends using a login/password form (LDAP, DBI, …) Ce mécanisme peut seulement fonctionner avec un backend d'authentification utilisant un formulaire login/mot-de-passe (LDAP, DBI, …) So if the http cookie is stolen, sensitive applications stay secured. Ainsi, si le cookie http cookie est volé, les applications sensibles restent protégées. Value Service URL (CAS service identifier) Value Service URL (identifiant de service CAS) "auto_update_force_user" => true, "auto_update_force_user" => true, my $portal = Lemonldap::NG::Portal::SharedConf->new({ multi => { my $portal = Lemonldap::NG::Portal::SharedConf->new({ multi => { https://github.com/9h37/django-lemonldap https://github.com/9h37/django-lemonldap Just add this file to OpenLDAP schemas by including it in slapd.conf: Ajouter simplement ce fichier aux schémas OpenLDAP en l'incluant dans slapd.conf: Value: application logout URL Valeur : URL de déconnexion de l'application ../../../media/documentation/status_standard.png ../../../media/documentation/status_standard.png documentation:latest:ssocookie documentation:latest:ssocookie ../../../documentation/1.4/portalmenu.html#categories_and_applications ../../../documentation/1.4/portalmenu.html#categories_and_applications ../pages/documentation/1.1/authchoice.html ../pages/documentation/1.1/authchoice.html Zimbra can also be connected to LL::NG via SAML protocol (see Zimbra blog). Zimbra peut aussi être connecté à LL::NG via le protocole SAML (voir le blog de Zimbra). ../../../../media/applications/phpldapadmin_logo.png ../../../../media/applications/phpldapadmin_logo.png AuthLDAPFilter AuthLDAPFilter http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps Translations Traductions CAS force authentication renewal Forcer le renouvellement d'authentification CAS ../../media/icons/flags/fr.png ../../media/icons/flags/fr.png They are available at the EntityID URL, by default: http://auth.example.com/saml/metadata. Elles sont disponibles à l'URL EntityID, par défaut : http://auth.example.com/saml/metadata. http://test1.example.com/status http://test1.example.com/status dbiAuthUser dbiAuthUser ipAddr WHATTOTRACE ipAddr WHATTOTRACE Only current application is concerned by logout_app* targets. Seule l'application est concernée par les cibles logout_app*. Maintenance mode Mode maintenance documentation:1.4:soapminihowto documentation:1.4:soapminihowto ../documentation/current/sessions.html ../documentation/current/sessions.html applications:dokuwiki_logo.png applications:dokuwiki_logo.png If LL::NG is the only software installed in Apache, the virtual host feature may not have already been activated. Si LL::NG est le seul logiciel installé sur Apache, la fonctionnalité d'hôte virtuel peut ne pas avoir été activée. Menu organization: tree or accordion L'organisation du menu : arbre ou accordéon Facebook uses OAuth2 protocol to allow applications to reuse its own authentication process (it means, if your are connected to Facebook, other applications can trust Facebook and let you in). Facebook utilise le protocole OAuth2 pour autoriser les applications à réutiliser son propre prcessus d'authentification (ce qui signifie que si on est connecté à Facebook, d'autres applications peuvent agréer Facebook et accepter l'utilisateur). Template parameters Paramètres des modèles If you use Facebook as user database, declare values in exported variables : Si on utilise Facebook comme base de données utilisateurs, déclarer les valeurs dans les « variables exportées » : /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay Bugtracker, Service Management Bugtracker, gestion de services /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity [portal] globalStorage = Apache::Session::File globalStorageOptions = { 'Directory' => '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/', } [portal] globalStorage = Apache::Session::File globalStorageOptions = { 'Directory' => '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/', } MediaWiki virtual host in Apache Hôte virtuel Mediawiki dans le manager For example, to proxy https://www.public.com to http://www.private.com: Par exemple, pour relayer https://www.public.com en http://www.private.com: ../pages/documentation/1.1/upgrade.html ../pages/documentation/1.1/upgrade.html LemonLDAP::NG does not manage Apache configuration LemonLDAP::NG ne gère pas la configuration d'Apache → Your browser loops between portal and handler, it is probably a cookie problem. → le navigateur boucle entre le portail et l'agent, il s'agit probablement d'un problème. Config::IniFiles Config::IniFiles mailConfirmBody mailConfirmBody You should change the Allow directive to match administration IP, or use another Apache protection mean. On peut changer la directive Allow pour réserver l'adresse IP d'administration, ou utiliser une autre protection. Cookie expiration time: by default, SSO cookie is a session cookie, which mean it will be destroyed when the browser is closed. Durée de vie du cookie : par défaut, le cookie SSO est un cookie de session, ce qui signifie qu'il n'est pas conservé lorsque le navigateur est clos. Web sites install : Installer les sites web : //"userobm_address2" => , //"userobm_address2" => , <IfModule auth_kerb_module> <IfModule auth_kerb_module> This does not include Apache configuration which is not managed by LemonLDAP::NG Ceci n'inclue pas la configuration propre d'Apache qui n'est pas gérée par LemonLDAP::NG This will provide the auxiliary object class ssoUser with attributes: Il fournit les classes auxiliaires ssoUser avec les attributs : caPath caPath vi /etc/lemonldap-ng/apache2.conf.rpmsave vi /etc/lemonldap-ng/apache2.conf.rpmsave Apache rewrite rules must have been activated in Apache portal configuration: Le module Rewrite d'Apache doit être activé dans la configuration Apache du portail: Default NameID format: if no NameID format is requested, or the NameID format undefined, this NameID format will be used. Format de NameID par défaut : si aucun fiormat de NameID n'est demandé, ou si le format n'est pas défini, ce format de NameID sera utilisé. Proxy Proxy /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots The Handler must be loaded before any protected virtual host. L'agent doit être chargé avant tout hôte virtuel à protéger. PerlSetVar LmCookieDomainToReplace private.com,public.com </VirtualHost> PerlSetVar LmCookieDomainToReplace private.com,public.com </VirtualHost> http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 Source RPM RPM sources SAML Identity Provider Fournisseur d'identité SAML Encryption mode: set the encryption mode for this IDP (None, NameID or Assertion). Mode de chiffrement : fixe le mode de chiffrement pour cet IDP (None, NameID ou Assertion). /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots _lassoIdentityDump _lassoIdentityDump documentation:1.4:fileconfbackend documentation:1.4:fileconfbackend The first rule that matches is applied. La première règle qui correspond est appliquée. Headers sent En-têtes envoyés dwho@badwolf.org dwho@badwolf.org documentation:1.4:applications:zimbra documentation:1.4:applications:zimbra See also Debian/Ubuntu installation documentation. Voir aussi la documentation d'installation Debian/Ubuntu. ../../media/documentation/lemonldap-ng-architecture.png ../../media/documentation/lemonldap-ng-architecture.png Memcached session backend Backend de session Memcached Prepare your new lemonldap-ng.ini file Preparer le nouveau lemonldap-ng.ini file You may use the securedCookie options to avoid session hijacking. Vous devriez utilisez les options securedCookie pour éviter le vol de session. Restart Apache and try to log on Manager. Redémarrer Apache et tenter de se connecter au manager. This user will not be available anymore if you configure a new authentication backend! Cet utilisateur n'est plus disponible si on change de backend d'authentification ! ldapVersion ldapVersion ^/forum/ ^/forum/ Restrict access to the directories only to the Apache server. Restreindre l'accès à ces répertoires au seul utilisateur Apache. http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur Passive authentication: set IsPassive flag in authentication request Authentification passive : positionne le drapeau IsPassive dans la requête d'authentification Core Core → LemonLDAP::NG uses a key to crypt/decrypt some datas. → LemonLDAP::NG utilise une clef pour chiffrer/déchiffrer certaines données. Browseable session backend (Apache::Session::Browseable) works exactly like Apache::Session::* corresponding module but add indexes that increase session explorer and session restrictions performances. Le backend de session explorable (Apache::Session::Browseable) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'explorateur de session et les restrictions de sessions. In particular, it use Apache2 threads capabilities so to optimize performances, prefer using mpm-worker. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence mpm-worker. documentation:1.0:sqlconfbackend documentation:1.0:sqlconfbackend <security:custom-authentication-provider /> <security:custom-authentication-provider /> URL: optional, can be used to redirect on another URL (for example https://authssl.example.com). URL : optionnel, peut être utilisée pour rediriger l'utilisateur vers une autre URL (par exemple https://authssl.example.com). Authentication Authorization Accounting Authentification Autorisation Traçabilité FPW FPW Authentication: select row in authentication table matching user and password Authentification : selectionne la ligne de la table d'authentification contenant l'utilisateur et le mot-de-passe portalDisplayResetPassword portalDisplayResetPassword Crypt::OpenSSL::Bignum Crypt::OpenSSL::Bignum http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html documentation:1.4:applications:spring documentation:1.4:applications:spring Install packages Installer les paquets ldapAuthnLevel ldapAuthnLevel http://www.linux-ha.org/wiki/Heartbeat http://www.linux-ha.org/wiki/Heartbeat You can define keys for SAML message signature and encryption. Vous pouver définir des clefs pour la signature et le chiffrement des messages SAML. ../pages/wiki/syntax.html ../pages/wiki/syntax.html It is recommended to use ModPerl::Registry instead of using cgi-script as described in Apache configuration file example (portal-apache2.conf): Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf): Protect the Manager by Apache Protéger le Manager par Apache DBI Password hash Hachage de mot-de-passe DBI Notification uid for all users Nom de compte de notification pour tous les utilisateurs documentation:manager-portalskin.png documentation:manager-portalskin.png documentation:manager-authchoice.png documentation:manager-authchoice.png Documentation for latest stable version Documentation for latest stable version action=logout$ action=logout$ # SOAP functions for sessions management (disabled by default) <Location /index.pl/adminSessions> # SOAP functions for sessions management (disabled by default) <Location /index.pl/adminSessions> For example, for a full access, excepted week-end: Par exemple, pour un accès total excepté le week-end: documentation:1.4:redirections documentation:1.4:redirections Then, go in Twitter parameters: Allez ensuite dans Paramètres Twitter : URI of the server URI du serveur Declare custom functions Declarer les fonctions personnalisées It is set in LemonLDAP::NG utilities directory (convertConfig). Il se traouve dans le répertoire des utilitaires LemonLDAP::NG (convertConfig). If you have run the Debian/Ubuntu install command, just use: Pour la commande d'installation Debian/Ubuntu, utiliser simplement : Restrict network access to the database. Restreindre l'accès réseau à la base de données. SSO logout: the request is not forwarded to application, only the SSO session is closed Déconnexion SSO: la requête n'est pas transmise à l'application, seule la session SSO est fermée documentation:1.4:applications:tomcat ↵ documentation:1.4:applications:tomcat ↵ Launch that: Lancer ceci : Then creating a notification for alluserscustom will display the notification for all users. Ainsi, créer une notification pour alluserscustom affichera la notification à tous les utilisateurs. Documentation is available for configuration backends : Cette documentation est valable pour les backends de configuration : Then a user that try to access to one of the following will be granted ! Alors l'utilisateur qui tente d'accéder à l'une des URL suivantes sera autorisé ! authorize: check if user is authorizated to access to this URL authorize : vérifie si l'utilisateur est autorisé à accèder à cette URL ../../documentation/1.4/error.html ../../documentation/1.4/error.html HTTP Auth HTTP Auth You can also use the binary value from the logonHours attribute of Active Directory La valeur binaire de l'attribut logonHours d'Active Directory peut également être utilisée ../../css/all.css ../../css/all.css http://drupal.org/project/Webserver_auth http://drupal.org/project/Webserver_auth Custom functions allow to extend LL::NG, they can be used in headers, rules or form replay data. Les fonctions personnalisées permettent d'étendre LL::NG, elles peuvent être utilisées dans les règles, les en-têtes et les données à rejouer dans les formulaires. It means that if the IDP propose to close session earlier than the default LemonLDAP::NG timeout, the session _utime will be modified so that session is erased at the date indicated by the IDP. Celà signifie que si l'IDP propose de clore la session au-delà de la durée de vie par défaut dans LemonLDAP::NG, la valeur de _utime sera modifiée afin que la session ne soit effacée qu'au moment indiqué par l'IDP. <Location /index.pl/adminSessions> <Location /index.pl/adminSessions> This requires Perl CAS module. Ceci nécessite un module Perl CAS. unprotect: no authentication will be asked to access surveys unprotect : aucune authentification n'est nécessaire pour accéder aux surveillances ../index.html ../index.html The Django connector is available on GitHub: https://github.com/9h37/django-lemonldap Le connecteur Django est disponible sur GitHub : https://github.com/9h37/django-lemonldap authcas authcas Portal URL: remote portal URL Portail URL: URL du portail distant ../../../documentation/1.4/rbac.html ../../../documentation/1.4/rbac.html authapache authapache User has no access authorization: FORBIDDEN (403) L'utilisateur ne dispose pas de droits d'accès : FORBIDDEN (403) ../../documentation/1.0/fileconfbackend.html ../../documentation/1.0/fileconfbackend.html Headers En-têtes Since MySQL performances are very bad using this, if you want to store sessions in a MySQL database, prefer one of the following Ceci dégrade fortement les performances de MySQL, si vous voulez stocker les sessions dans une base de données MySQL, utilisez l'une des solutions suivantes http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER ad.example.com: DNS of Active Directory ad.example.com : nom DNS du serveur Active Directory lastname lastname Command Line Interface (CLI) Interface en ligne de commande (CLI) -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? ../../documentation/1.4/logs.html ../../documentation/1.4/logs.html <OrganizationName xml:lang="en">Example</OrganizationName> <OrganizationName xml:lang="en">Exemple</OrganizationName> Choose one of the following: Choisir l'une des options suivantes : To use custom files, delete links and copy them into your skin folder: Pour utiliser des fichiers personnalisés, effacer les liens et copier les fichiers dans le répertoire du thème : /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots Magic authentication Authentification magique https://verifier.login.persona.org/verify https://verifier.login.persona.org/verify portalUserAttr portalUserAttr casAttr casAttr You can set them the same way: On peut les renseigner par la même voie : documentation:1.4:ldapminihowto documentation:1.4:ldapminihowto Documentation: use OmegaT to translate offline documentation and configure it: Documentation: utilisez OmegaT pour traduire la dcumentation hors-ligne et configurez le : ../pages/documentation/1.1/authcas.html ../pages/documentation/1.1/authcas.html ../../../media/applications/bugzilla_logo.png ../../../media/applications/bugzilla_logo.png On CentOS/RHEL: Sur CentOS/RHEL : In this case, you can choose a different module to manage SAML sessions. Dans ce cas, vous devez utiliser un module différent pour gérer les sessions SAML. You can manage roles with the RBAC model or by using groups. On peut gérer les rôles avec le modèle RBAC ou en utilisant les groupes. Null authentication level Niveau d'authentification de Null icons:knewsticker.png icons:knewsticker.png ^/pub/ ^/pub/ Password change: form to change the password Changement de mot-de-passe : formulaire de changement de mot-de-passe phpldapadmin phpldapadmin </Directory>   </VirtualHost> </Directory>   </VirtualHost> (&(mail=$mail)(objectClass=person)) (&(mail=$mail)(objectClass=person)) default => $ssoRoles =~ /ou=bbb,ou=roles/ default => $ssoRoles =~ /ou=bbb,ou=roles/ /_detail/logos/logo_ministere_justice.jpg?id=references /_detail/logos/logo_ministere_justice.jpg?id=references PHP PHP You can set a custom logo by choosing My logo, set the logo file name, and copy the logo file in portal applications logos directory On peut sélectionner un logo personnalisé en choisissant Mon logo, en indiquant le nom du fichier et en le copiant dans le répertoire des logos des applications https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 documentation:1.4:applications:sympa documentation:1.4:applications:sympa service_name Centralized auth service service_name Centralized auth service User tries to access to an application in the secondary LL::NG structure without having a session in this area Un utilisateur essaie d'accéder à une application du système LL::NG secondaire sans avoir de session dans cette aire Redirect on error: use 302 instead 500 or 503 Redirection pour les erreurs : utilise 302 au lieu de 500 ou 503 ../../documentation/1.4/security.html ../../documentation/1.4/security.html Name: SAML attribute name. Nom: Nom de l'attribut SAML. portal/skins/common/mail_confirm.tpl portal/skins/common/mail_confirm.tpl [libdefaults] [libdefaults] LL::NG can propose a password reset form, for users who loose their password (this kind of application is also called a self service password interface). LL::NG peut proposer un formulaire de réinitialisation de mot-de-passe pour les utilisateurs qui ont perdu leur mot-de-passe (ce type d'application est également appelée interface de mot-de-passe self-service). Security parameters Paramètres de sécurité Handler use the default Apache error code for the following cases: Les agents utilisent le code d'erreur d'Apache dans les cas suivants : logos:logo_linagora.png logos:logo_linagora.png Master's IP address: the IP addresses of servers which are accredited to authenticate user. Adresse IP du maître : les adresses IP des serveurs autorisés à authentifier les utilisateurs. An application name (to allow access by applications and not by group of users) Un nom d'application (pour autoriser l'accès aux applications sans utiliser les groupes) You have to use “Multi” as authentication module. Il est possible d'utiliser le module d'authentification “Multi”. documentation:1.4:start documentation:1.4:start You cannot use the unprotect rule because Drupal navigation is based on query strings (?q=admin, ?q=user, etc.), and unprotect rule only works on URL patterns. Vous ne pouvez pas utiliser la règle unprotect car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'URL. The portal URL must be inside SSO domain. L'URL du portail doit être dans le domaine SSO. tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* Portal: the portal redirect on itself in many cases (credentials POST, SAML, etc.) le portail : le portail redirige vers lui-même dans plusieurs cas (POST d'authentification, SAML, etc...) LemonLDAP::NG provides a script to change configuration backend easily keeping history. LemonLDAP::NG fournit un script pour changer aisément de backend de configuration en conservant l'historique. So you can have a full AAA protection for your web space as described below. Vous vouvez ainsi avoir une protection AAA complète pour votre espace web tel qu'indiqué ci-dessus. zimbra zimbra Theme (jQuery UI theme). Thème (thème jQuery-UI). nullAuthnLevel nullAuthnLevel install_site (all sites including install_doc_site) install_site (all sites including install_doc_site) authbrowserid authbrowserid SQL configuration Configuration SQL Service configuration Configuration du service Attribute Service Service d'attribut netid_http_header HTTP_AUTH_USER netid_http_header HTTP_AUTH_USER Twitter application secret Secret d'application Twitter documentation:1.4:internalproxy documentation:1.4:internalproxy Since version 1.90 of Apache::Session, you can use Apache::Session::MySQL::NoLock instead Depuis la version 1.90 d'Apache::Session, on peut utiliser Apache::Session::MySQL::NoLock à la place mysqlminihowto mysqlminihowto For security reasons, the password is not shown in sessions explorer. Pour des raisons de sécurité, le mot-de-passe n'est pas affiché dans l'explorateur de sessions. Portal creates SSO cookies with session key as value Le portail crée le cookie SSO avec la clef de la session comme valeur <IfModule mod_rewrite.c> <IfModule mod_rewrite.c> It can be upgraded using buildPortalWSDL script. Il peut être mis à jour en utilisant le script buildPortalWSDL. uidR uidR Can't locate /usr/share/lemonldap-ng/configStorage.pl Can't locate /usr/share/lemonldap-ng/configStorage.pl make debian-install make debian-install LemonLDAP::NG Portal Portail LemonLDAP::NG Notifications trough SOAP Notifications via SOAP <security:custom-filter position="PRE_AUTH_FILTER" /> <security:custom-filter position="PRE_AUTH_FILTER" /> Reporting a bug Rapporter un bogue Install Authen::Radius Installer Authen::Radius This function will check the day and the hour of current request, and compare it to allowed days and hours. Cette fonction examine le jour et l'heure de la requête courante et la compare aux jours et heures autorisés. /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml checkXSS checkXSS authChoiceParam authChoiceParam Self service reset (send a mail to the user with a to change the password) Self-service de réinitialisation (envoie un mail à l'utilisateur pour changer son mot-de-passe) $uid eq "dwho" $uid eq "dwho" sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ http://www.linuxpicnic.org/ http://www.linuxpicnic.org/ ../media/logos/logo_linagora.png ../media/logos/logo_linagora.png DBI Connection password Mot-de-passe de connexion DBI ../../documentation/1.4/soapconfbackend.html ../../documentation/1.4/soapconfbackend.html #a #a #b #b #f #f #e #e #d #d The file name default separator is _, this can be a problem if you register notifications for users having _ in their login. Le séparateur par défaut des noms de fichiers est _, ce qui peut poser problème si on enregistre des notifications pour des utilsateur ayant un caractère _ dans leur nom de connexion. Target attribute: name of the attribute in the groups storing the link to the user (default: member). Attribut cible : nom de l'attribut du groupe stockant le lien vers l'utilisateur (défaut: member). #c #c #j #j #i #i #h #h ../../documentation/1.4/authyubikey.html ../../documentation/1.4/authyubikey.html #g #g #n #n Then create the keytab. Créer ensuite le fichier keytab. #m #m #l #l /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers #r #r <md:EntityDescriptor entityID="google.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> <md:EntityDescriptor entityID="google.com" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> #q #q #p #p #o #o #u #u notifyOther notifyOther #v #v [portal] portalSkin = dark [portal] portalSkin = dark #s #s Even if LL:NG can catch logout URL trough virtual host rules, you can have the need to forward a logout to other applications, to close their local sessions. Même si LL:NG peut intercepter les URL de déconnexion via les règles de d'hôte virtuel, on peut avoir besoin de propager la déconnexion à d'autres applications, pour clore leurs sessions locales. This method requires to execute a command on the Active Directory server, and then transfer the keytab on Linux server. Cette méthode nécessite d'exécuter une commande sur le serveur Active Directory et ensuite de transférer le fichier keytab sur le serveur Linux. #t #t #z #z <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.google.com/a/mydomain.org/acs" index="1" /> <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.google.com/a/mydomain.org/acs" index="1" /> #w #w LINAGORA LINAGORA The new password is sent to user Le nouveau mot-de-passe est envoyé à l'utilisateur Go in the Manager and set the session module (for example Apache::Session::Postgres for PostgreSQL) in General parameters » Sessions » Session storage » Apache::Session module and add the following parameters (case sensitive): Aller dans le Manager et choisir le module de session (par exemple Apache::Session::Browseable::Postgres pour PostgreSQL) dans Paramètres généraux » Sessions » Stockage des sessions » Module Apache::Session et ajouter les paramètres suivants (sensible à la casse): handler-apache2.conf : Handler declaration, reload and sample virtual hosts handler-apache2.conf : déclaration du handler, rechargement et exemple d'hôte virtuel documentation:1.4:logs documentation:1.4:logs There are packages available here: http://deb.entrouvert.org/. Les paquets sont disponibles ici : http://deb.entrouvert.org/. insert a label “LMAUTH” ahead of the loop insérer le label “LMAUTH” en tête de la boucle 'LDAP#ActiveDirectory' => { 'LDAP#ActiveDirectory' => { CAS_gateway CAS_gateway http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth ../../documentation/1.4/applications/authbasic.html ../../documentation/1.4/applications/authbasic.html OBM Apache configuration must be loaded after LL::NG Apache configuration. La configuration du serveur Apache d'OBM doit être chargée après celle de LL::NG. You also need to know the technical name of configuration parameter to do this. Il est également nécessaire de connaître le nom technique du paramètre de configuration pour le faire. ../../documentation/1.4/idpopenid.html#shared_attributes_sreg ../../documentation/1.4/idpopenid.html#shared_attributes_sreg applications:http_logo.png applications:http_logo.png handler: parameters only for Handler manager : paramètres réservés aux agents JCOS JCOS SetHandler perl-script SetHandler perl-script AuthBasicProvider ldap AuthBasicProvider ldap if you use “CDBI” or “RDBI” system, the notifications will be stored in the same database as configuration and in a table called “notifications”. si “CDBI” ou “RDBI” est utilisé, les notifications sont stockées dans la même base de données que la configuration et la table est nommée “notifications”. Install Installation //"userobm_nomade_dateend" => , //"userobm_nomade_dateend" => , Logout rule (for example logout_app_sso) Règle de déconnexion (par exemple logout_app_sso) applications:limesurvey_logo.png applications:limesurvey_logo.png ../../documentation/current/ssocookie.html#sso_cookie ../../documentation/current/ssocookie.html#sso_cookie Then, go in Null parameters: Aller ensuite dans les paramètres Null: Force HTTPS in redirection Indicateur HTTPS pour les redirections LemonLDAP::NG configuration is build around Apache virtual hosts. La configuration de LemonLDAP::NG est construite autour des hôtes virtuels Apache. http://wiki.sbay.org/ http://wiki.sbay.org/ Search user: select row in user table matching user Recherche de l'utilisateur : selectionne la ligne de la table utilisateurs correspondant à l'utilisateur Indeed, a virtual host can contain several applications (http://vhost.example.com/appli1, http://vhost.example.com/appli2). En effet, un hôte virtuel peut contenir plusieurs applications (http://vhost.example.com/appli1, http://vhost.example.com/appli2). ../../../media/icons/warehause.png ../../../media/icons/warehause.png ldapGroupAttributeNameSearch ldapGroupAttributeNameSearch Proxy tickets will be collected at authentication phase and stored in user session under the form: Les tickets de proxy seront collectés lors de la phase d'authentification et stockés dans la session utilisateur sous la forme : SAML authentication and issuer Authentification ou fourniture d'identité SAML Category and application key can have a digit as first character, which will allow to display categories in the right order (categories and applications are displayed in alphabetical order). Les clefs des categories et des applications peuvent commencer par un chiffre ce qui permet de les afficher dans le bon ordre (catégories et applications sont affichées dans l'ordre alphabétique). http://auth.ucanss.fr/ http://auth.ucanss.fr/ //"userobm_password_type" => , //"userobm_password_type" => , ~500 ~500 ../../../documentation/1.4/header_remote_user_conversion.html ../../../documentation/1.4/header_remote_user_conversion.html logout_url http://sympa.example.com/wws/logout logout_url http://sympa.example.com/wws/logout Portal menu Menu du portail The portal is the main component of LL::NG. Le portail est le principal composant de LL::NG. Database must be prepared exactly like in SQL session backend except that a field must be added for each data to index. La base de donnée doit être préparée exactement comme celle du backend de session SQL si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer. the portal is in the declared domain le portail est dans le domaine déclaré /var/lib/lemonldap-ng/sessions/lock /var/lib/lemonldap-ng/sessions/lock documentation:ha-apache.png documentation:ha-apache.png User database: where collect user information Base de données utilisateurs : où collecter les informations utilisateurs MediaWiki MediaWiki ldapGroupAttributeNameUser ldapGroupAttributeNameUser To protect the manager by LL::NG, you just have to set this in lemonldap-ng.ini configuration file (section [manager]): Pour protéger le manager par LL::NG, il suffit de mettre ceci dans le fichier de configuration lemonldap-ng.ini (section [manager]) : Be sure that mod_rewrite is installed and that SAML2 rewrite rules are activated in Apache portal configuration: Assurez-vous que mod_rewrite est installé et que les règles de réécriture SAML2 sont activées dans la configuration Apache du portail: SAML identity providers: Registered IDP Fournisseurs d'identité SAML : IDP enregistrés "auto_update" => true, "auto_update" => true, Local macros is a special feature of handler that permit to have macros useable localy only. Les macros locales sont une fonctionnalité spéciale des agents qui permettent d'avoir des macros utilisables localement seulement. Perl-CAS module installation Installation du module Perl-CAS yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* Key: Service ID Clef : Service ID ../pages/documentation/1.1/applications/drupal.html ../pages/documentation/1.1/applications/drupal.html If the packages are stored in a yum repository: Si les paquets sont stockés dans un dépôt yum : ../documentation/presentation.html#login ../documentation/presentation.html#login You have to install HttpAuthPlugin.php in the extensions/ directory of your MediaWiki installation: Il faut installer HttpAuthPlugin.php dans le répertoire extensions/ de MediaWiki : session_start();   $_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'];   if ((!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['REMOTE_USER'])) || $_COOKIE[$wgDBserver . 'UserID']) { session_start();   $_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'];   if ((!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['REMOTE_USER'])) || $_COOKIE[$wgDBserver . 'UserID']) { user; admin user; admin DBI UserDB connection user Compte de connexion UserDB DBI The default value of this wilcard is allusers, but you can change it if allusers is a known identifier in your system. La valeur par défaut de cette carte blanche est allusers, mais on peut la changer si allusers est un nom d'utilisateur. Site Name: Name that will be displayed in the BrowserID login window Nom du site : Nom qui sera affiché dans la fenêtre d'authentification BrowserID //"userobm_fax2" => , //"userobm_fax2" => , 'default_expires_in' => 600,? 'default_expires_in' => 600,? using external identity provider (SAML, OpenID, CAS, Twitter, other LL::NG system, …) utilisant un fournisseur d'identité externe (SAML, OpenID, CAS, Twitter, autres systèmes LL::NG, …) In Manager, go in General Parameters > Authentication modules and choose Radius for authentication. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Radius pour l'authentification. ../pages/documentation/1.1/authslave.html ../pages/documentation/1.1/authslave.html ../../documentation/1.4/installdeb.html ../../documentation/1.4/installdeb.html </IfModule>   </IfModule>   First name Prénom lemonldap_ng_manager_1340022440100.png lemonldap_ng_manager_1340022440100.png If you plan to forward user's password to OBM, then you have to keep the password in session. S'il est prévu de transmettre le mot-de-passe utilisateur à OBM, conserver le mot-de-passe dans la session. Auth-SuperAdmin Auth-SuperAdmin documentation:1.4:idpcas documentation:1.4:idpcas ); ); 0.9.4_logout_menu.png 0.9.4_logout_menu.png Bordeaux Bordeaux ../../documentation/1.4/ldapsessionbackend.html ../../documentation/1.4/ldapsessionbackend.html passThrough (optional): Allow anonymous access or not. passThrough (optionnel) : Autorise ou non l'accès anonyme. dirName: directory where notifications are stored. dirName : répertoire dans lequel sont stockées les notifications. Change rights on keytab file: Changer les droits sur le fichier keytab : The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) my $cgi = new CGI; ... my $cgi = new CGI; ... /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots Some applications need the REMOTE_USER environment variable to get the connected user, which is not set in reverse-proxy mode. Certaines applications ont besoin de la variable d'environnement REMOTE_USER pour connaître le nom d'utilisateur connecté, qui n'est pas renseignée en mode reverse-proxy. KrbMethodK5Passwd Off KrbMethodK5Passwd Off # Uncomment this line if you use Lemonldap::NG menu # Décommenter cette ligne si le menu Lemonldap::NG est utilisé First configuration steps Premiers pas de configuration ../../documentation/1.4/applications/mediawiki.html ../../documentation/1.4/applications/mediawiki.html In General Parameters > Authentication modules, set: Dans Paramètres généraux > Modules d'authentification, choisir : documentation:manager-saml-idp-attribute.png documentation:manager-saml-idp-attribute.png Issuer databases use rules les règles d'utilisation des bases de données des fournisseur d'identité applications applications Note that you have to use UTF-8 characters Notez que vous devez utiliser des caractères UTF-8 Choose for example http://zimbra.example.com/zimbrasso as SSO URL and set it in application menu. Choisir par exemple http://zimbra.example.com/zimbrasso comme URL SSO et insérer la dans le menu application. ldapServer ldapServer Transient: NameID is generated Transient: le NameID est généré So write your rules using normal characters. Il faut donc écrire les règles en utilisant les caractères normaux. You can simply checkout sources with the following command: Utilisez simplement la commande suivante pour télécharger les sources : ../../../media/applications/django_logo.png ../../../media/applications/django_logo.png Portal translation Traduction du portail ../pages/documentation/1.1/parameterlist.html ../pages/documentation/1.1/parameterlist.html http://perldoc.perl.org/functions/print.html http://perldoc.perl.org/functions/print.html Real session backend Backend de session réel ../pages/documentation/1.4/authwebid.html ../pages/documentation/1.4/authwebid.html "userobm_fax" => "HTTP_OBM_FACSIMILETELEPHONENUMBER", "userobm_fax" => "HTTP_OBM_FACSIMILETELEPHONENUMBER", __PACKAGE__->init( __PACKAGE__->init( Identity provider Fournisseur d'identité remoteGlobalStorageOptions remoteGlobalStorageOptions As administrator, go in Google Apps control panel and click on Advanced tools: Comme administrateur, aller dans le panneau de contrôle Google Apps et cliquer sur les outils avancés click (Advanced tools) : Allow only one session per user N'autoriser qu'une session par utilisateur SSLCertificateKeyFile: Server private key SSLCertificateKeyFile : clef privée du serveur Lasso Lasso An access rule Une règle d'accès Then, go in Slave parameters: Ensuite, aller dans les paramètres Slave: Forbidden and Server error Accès interdits et erreurs du serveur Other Autres phpLDAPadmin local configuration Configuration locale phpLDAPadmin The PasswordDBDemo will allow you to change the password with some basic checks, but as the data are hard coded, the password will never be really changed. PasswordDBDemo permet de changer de mot-de-passe avec quelques tests de base, mais comme les données sont codées en dur, le mot-de-passe ne sera jamais réellement changé. Applications protection Protection des applications mailreset_step5.png mailreset_step5.png notificationWildcard notificationWildcard download.html download.html The configuration can be changed in etc/manager-apache2.conf, for example to restrict the IP allowed to access the Manager: Cette configuration peut être changée dans etc/manager-apache2.conf, par exemple pour restreindre les adresses IP autorisées à accéder au manager : /_detail/icons/personal.png?id=documentation%3A1.4%3Astart /_detail/icons/personal.png?id=documentation%3A1.4%3Astart Admin Magazin Admin Magazin You can modify the default behavior for people without value in ssoLogonHours. Il est possible de modifier le comportement par défaut pour les utilisateurs ne disposant pas d'une valeur ssoLogonHours. Password database: where change password Base de données des mots-de-passe : où changer le mot-de-passe Configuration interface access is not protected by Apache but by LemonLDAP::NG itself (see lemonldap-ng.ini): L'accès à l'interface de configuration n'est pas protégée par Apache mais par LemonLDAP::NG lui-même (voir lemonldap-ng.ini) : "userobm_town" => "HTTP_OBM_L", "userobm_town" => "HTTP_OBM_L", Daniel RIVIERE Daniel RIVIERE } ); } ); http://httpd.apache.org/docs/current/howto/auth.html http://httpd.apache.org/docs/current/howto/auth.html Then: Ensuite : URL pattern: default Expression sur l'URL : default Example for macros: Exemples de macros: Apache configuration file on LL::NG reverse proxy (hosting LL::NG Handler): le fichier de configuration d'Apache sur le reverse-proxy LL::NG (celui qui héberge l'agent LL::NG): $ENV{REMOTE_ADDR} =~ /^192\.168/ $ENV{REMOTE_ADDR} =~ /^192\.168/ filesessionbackend filesessionbackend Build: Build: [portal] multi = {'LDAP#Openldap'=>{ldapServer=>'ldap1.example.com',LDAPFilter=>'(uid=$user)'},'LDAP#ActiveDirectory'=>{ldapServer=>'ldaps://ad.example.com',LDAPFilter=>'(&(sAMAccountName=$user)(objectClass=person))'}} [portal] multi = {'LDAP#Openldap'=>{ldapServer=>'ldap1.example.com',LDAPFilter=>'(uid=$user)'},'LDAP#ActiveDirectory'=>{ldapServer=>'ldaps://ad.example.com',LDAPFilter=>'(&(sAMAccountName=$user)(objectClass=person))'}} Access control possible by creating one user for Manager (write) and another for portal and handlers (read) Contrôle d'accès possible en créant un compte pour le manager (écriture) et un autre pour le portail et les agents (lecture) Sessions are stored as files in a single directory. Les sessions sont stockées dans des fichiers dans un unique répertoire. portalDisplayLogout portalDisplayLogout ldapGroupRecursive ldapGroupRecursive encode_base64($givenName." ".$surName) encode_base64($givenName." ".$surName) To add these attributes, go in Manager, Variables » Exported Variables. Pour ajouter ces attributs, aller dans le manager, Variables » Variables exportées. We can distinguish several kind of variables: On peut distinguer plusieurs types de variables : Lemonldap-ng.ini parameters Paramètres lemonldap-ng.ini You must register IDP metadata here. Il faut enregistrer les métadatas de l'IDP ici. For example, we will use 3 roles: Par exemple, en utilisant 3 rôles : https://developer.mozilla.org/en-US/docs/Mozilla/Persona https://developer.mozilla.org/en-US/docs/Mozilla/Persona documentation:manager-menu-application-logo.png documentation:manager-menu-application-logo.png CAS_renew CAS_renew authdbi authdbi lemonldap-ng-portal-auth.png lemonldap-ng-portal-auth.png Give the uid (for accounting) Donne l'uid (pour la traçabilité) ../pages/documentation/1.1/portalcustom.html ../pages/documentation/1.1/portalcustom.html ../../../media/applications/tomcat_logo.png ../../../media/applications/tomcat_logo.png Name of IDP used for authentication Nom de l'IDP utilisé pour l'authentification </Directory> </Directory> Common domain: Name of the common domain (where common cookie is available). Domaine commun : Nom du domaine commun (où le cookie commun est disponible). documentation:1.4:installrpm documentation:1.4:installrpm http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html Real name Real name proxyOptions proxyOptions Define here: Definir ici : Activation Activation Lemonldap::NG::Handler Lemonldap::NG::Handler You can define more than one form replay URL per virtual host. Il est possible de définir plusieurs URL de rejeu de formulaires par hôte virtuel. ../pages/documentation/1.1/customfunctions.html ../pages/documentation/1.1/customfunctions.html Convert existing configuration Convertir la configuration existante Lanyrd Lanyrd Apache configuration file on application server (hosting the application): le fichier de configuration d'Apache sur le serveur d'application (celui qui héberge l'application): ldapServer => 'ldap1.example.com', ldapServer => 'ldap1.example.com', Activate auto accept timer Activer le compte-à-rebours d'acceptation automatique → Some URL parameters contain forbidden characters. → Certains paramètres de l'URL contiennent des caractères interdits. Dedicated to administrators Dédié aux administrateurs documentation/current/installrpm.html#yum_repository documentation/current/installrpm.html#yum_repository TO lemonldap-ng@manager.host IDENTIFIED BY 'mypassword'; GRANT SELECT ON lmConfig.* TO lemonldap-ng@manager.host IDENTIFIED BY 'mypassword'; GRANT SELECT ON lmConfig.* General performances Performances générales Authorizated domain: Domaines autorisés : Applications listed bellow are known to be easy to integrate in LL::NG. Les applications listées ci-dessous sont connues pour être faciles à intégrer à LL::NG. my $res = $r->result(); my $res = $r->result(); Binding Méthode Date of session last modification Date de la dernière modification de la session Old sessions are deleted by a cron script. Les anciennes sessions sont effacées par un script cron. Commit Commit LL::NG can be configured to restrict OpenID exchange using a white or a black list of domains. LL::NG peut être configuré pour restreindre les échanges OpenID en utilisant les listes blanches ou noires de domaines. ../../documentation/1.4/formreplay.html ../../documentation/1.4/formreplay.html 22 22 #local_file #local_file documentation:manager-saml-service-sp-slo.png documentation:manager-saml-service-sp-slo.png Password field name: name of authentication table column hosting password Nom du champ mot-de-passe : nom de la colonne de la table d'authentification contenant le mot-de-passe Clément “KPTN” OUDOT: project leader, lead developer, graphics, documentation, community management Clément “KPTN” OUDOT : Leader du projet, développeur principal, graphisme, documentation, gestion de la communauté Rules Règles Facebook Facebook https://metacpan.org/module/Apache::Session::Flex https://metacpan.org/module/Apache::Session::Flex You need to give access to status path in the Handler Apache configuration: Il faut autoriser l'accès au chemin du statut dans le configuration Apache de l'agent : remotePortal remotePortal URL parameter: parameter name used to set choice value (default: lmAuth) Paramètres d'URL : nom du paramètre utilisé pour stocker la valeur du choix (défaut: lmAuth) Key name: Text displayed on choice tab. Nom de clef : Texte à afficher sur l'onglet. #!/usr/bin/perl use Lemonldap::NG::Common::CGI qw(fastcgi); use Lemonldap::NG::Portal::SharedConf; # ... LMAUTH: while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) { #!/usr/bin/perl use Lemonldap::NG::Common::CGI qw(fastcgi); use Lemonldap::NG::Portal::SharedConf; # ... LMAUTH: while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) { ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com Be careful with URL parameters Attention aux paramètres des URL 31 31 Linux Tag Linux Tag if($cgi->testUri('http://test3.example.com/') { if($cgi->testUri('http://test3.example.com/') { Go to Portal » Settings: Aller dans Portal » Settings: Deny from all Deny from all Registered users on Google Apps with the same email than those used by LL::NG (email will be the NameID exchanged between Google Apps and LL::NG) Enregistrer les utilisateurs dans Google Apps avec la même adresse mail que celle utilisée dans LL::NG (l'adresse mail sera le NameID échangé entre Google Apps et LL::NG) Headers are associations between an header name and a perl expression that returns a string. Les en-têtes sont des associations entre un nom d'en-tête et une expression perl qui retourne une chaîne. As passwords will not be managed by LL::NG, you can disable menu password module. Comme les mots-de-passe ne sernt pas gérés par LL::NG, il est possile de désactiver le module mots-de-passe du menu. When portal is installed, a file named portal.wsdl is created. Lorsque le portail est installé, un fichier nommé portal.wsdl est créé. You might want to display different skin depending on the URL that was called before being redirected to the portal, or the IP address of the user. On peut vouloir utiliser différents thèmes en fonction de l'URL demandée avant la redirection au portail ou en fonction de l'adresse IP de l'utilisateur. For Active Directory, the default authentication filter is: Pour Active Directory, le filtre d'authentification par défaut est : Zimbra preauthentication URL URL de pré-authentification Zimbra LL::NG can be used to prompt users with a message. LL::NG peut être utilisé pour présenter des messages aux utilisateurs. You can show them using Facebook Graph API explorer On peut les voir en utilisant l'explorateur de l'API Graph de Facebook #google_apps_control_panel #google_apps_control_panel 20 20 ^/minig ^/minig Options +ExecCGI Options +ExecCGI example.com = EXAMPLE.COM example.com = EXAMPLE.COM ldapminihowto ldapminihowto 'templatelist' => 'default,basic,MyOrgTemplate', 'templatelist' => 'default,basic,MyOrgTemplate', [portal]   # Custom template parameters tpl_myparam = world [portal]   # Custom template parameters tpl_myparam = world http://lemonldap.ow2.org/NG/devel-doc/ http://lemonldap.ow2.org/NG/devel-doc/ accept: all authenticated users will access surveys accept : tous les utilisateurs authentifiés peuvent accéder aux surveillances The status page can be read by MRTG using the script lmng-mrtg that can be found in manager example directory. La page de statut peut être lue par MRTG en utilisant le script lmng-mrtg qui peut être trouvé dans le répertoire "example" du manager. /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars ../../../media/documentation/configuration-ldap.png ../../../media/documentation/configuration-ldap.png API documentation Documentation de l'interface de programmation (API) Select the key, and export it (button Download this file): Selectionner la clef, et l'exporter (bouton Download this file): /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki As J2EE servlet container, Tomcat provides standard security feature, like authentication: the application deployed in Tomcat can delegate its authentication to Tomcat. Comme conteneur de servlet J2EE, Tomcat fournit les fonctionnalités de sécurité standards, telles l'authentification : une application déployée dans Tomcat peut déléguer son authentification à Tomcat. The choice will concern three backends: Ce choix concerne 3 backends: ../pages/documentation/1.4/authgoogle.html ../pages/documentation/1.4/authgoogle.html LL::NG can act as an SAML 2.0 Identity Provider, that can allow to federate LL::NG with: LL::NG peut agir en fournisseur d'identité SAML 2.0, ce qui permet de fédérer LL::NG avec : Example with the portal: Exemple avec le portail : Language Langue https://authssl.example.com https://authssl.example.com Restart Apache to purge it. Redémarrer Apache pour le purger. DEB bundle Paquets DEB IP of the user (can be the X Forwarded For IP if trusted proxies are configured) IP de l'utilisateur (peut être celle de l'en-tête X-Forwarded-For si des proxies agréés ont été configurés) http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication ../../documentation/1.4/authfacebook.html ../../documentation/1.4/authfacebook.html You can add this YUM repository to get recent packages: Ajouter ces dépôts YUM pour obtenir les paquets récents : LemonLDAP::NG Handler Agent LemonLDAP::NG (handler) "auto_update_force_group" => false, "auto_update_force_group" => false, 'LDAP#ActiveDirectory' => { 'LDAP#ActiveDirectory' => { translations traductions Main differences with mod_proxy: Principales différences avec mod_proxy : authentication_portal_1340022238188.png authentication_portal_1340022238188.png By default, a user can open several sessions. Par défaut, un utilisateur peut ouvrir plusieurs sessions. $authenticationLevel > 2 $authenticationLevel > 2 documentation:1.4:applications:authbasic documentation:1.4:applications:authbasic Try http://test1.example.com or http://test2.example.com Essayez http://test1.example.com ou http://test2.example.com Your database must have a specific table to host sessions. Il faut dédier une table pour héberger les sessions. Memcached servers: addresses of Memcached servers, separated with spaces. Serveurs Memcached : adresses des serveurs Memcached, separés par des espaces. Handler build the preauth request and redirect user on Zimbra preauth URL Le handler construit la requête de pré-authentification et redirige l'utilisateur sur l'URL de pré-authentification de Zimbra Here are some examples for main databases servers. Quelques exemples pour les serveurs principaux. You can now the upload the certificate (cert.pem) on Google Apps. Télécharger ensuite le certificat (cert.pem) dans Google Apps. /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots By hand in Liferay administration screens À la main dans les écrans d'administration de Liferay http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions SAML 2 Service: SAML metadata administration Service SAML : administration des métadonnées SAML CAS_pgtFile CAS_pgtFile Category parameters: Paramètres des catégories : ../../../../media/documentation/googleapps-export-priv-key.png ../../../../media/documentation/googleapps-export-priv-key.png An authorization is defined by: Une autorisation est définie pas : Body for password mail Corps du message de changement de mot-de-passe IssuerDB IssuerDB Modify Manager protection Modifier la protection du manager SVN access Accès au dépôt SVN twitterKey twitterKey So, to keep user password in session, you cannot just export the password variable in session. Donc pour conserver le mot-de-passe utilisateur dans la session, on ne peut seulement exporter la variable mot-de-passe dans la session. Success mail content (optional): Content of mail sent when password is changed Contenu du message (optionnel) : contenu du courriel envoyé lorsque le mot-de-passe est changé jre > 1.4 jre > 1.4 OBM_UID OBM_UID _password _password menu.png menu.png Use rule: a rule to allow user to use this module, set to 1 to always allow. Règle d'utilisation : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Form replay allows you to open a session on a protected application by replaying the form POST without asking anything to the user. Le rejeu de formulaire permet d'ouvrir une session dans une application protégée par un formulaire POST sans rien demander à l'utilisateur. ../documentation/current/writingrulesand_headers.html ../documentation/current/writingrulesand_headers.html Server hostname: this is the hostname or IP address of the Radius server Nom d'hôte du serveur : le nom d'hôte ou l'adresse IP du serveur Radius You can do it either by uploading the file, or get it from SP metadata URL (this require a network link between your server and the SP). Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'URL de métadatas du SP (à condition d'avoir un lien réseau entre le serveur et le SP): $uid $uid http://www.mediawiki.org http://www.mediawiki.org Configuration database Base de données de la configuration update-alternatives --config editor update-alternatives --config editor ../pages/documentation/1.1/applications/obm.html ../pages/documentation/1.1/applications/obm.html [manager]   # Manager protection: by default, the manager is protected by a demo account. [manager]   # Manager protection: by default, the manager is protected by a demo account. portal.png portal.png These errors can be catch trough Apache ErrorDocument directive, to redirect user on a specific page: Ces erreurs peuvent être interceptées via la directive ErrorDocument d'Apache pour rediriger les utilisateurs vers une page spécifique : You can also use a FastCGI server using index.fcgi given in portal examples. On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail. This should be set as Default. Peut être défini par défaut. ../download.html ../download.html If you need to add a template parameter for your customization, then add to lemonldap-ng.ini: Pour ajouter un paramètre de modèle, l'ajouter dans lemonldap-ng.ini: ../pages/documentation/1.1/portal.html ../pages/documentation/1.1/portal.html http://search.cpan.org/search?query=DBD%3A%3A&mode=module http://search.cpan.org/search?query=DBD%3A%3A&mode=module ../../documentation/presentation.html#login ../../documentation/presentation.html#login ../../documentation/1.4/idpopenid.html#security ../../documentation/1.4/idpopenid.html#security You can then choose any other module for users and password but if you want to totally delegate authentication to BrowserID, choose None for users and password. On peut ensuite choisir n'importe quel autre module de gestion des utilisateurs et des mots-de-passe mais pour déléguer totalement l'authentification à BrowserID, choisir None pour la gestion des utilisateurs et des mots de passe. ../pages/documentation/1.1/filesessionbackend.html ../pages/documentation/1.1/filesessionbackend.html /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword Access rule: $groups =~ /\badministrators\b/ Règle d'accès : $groups =~ /\badministrators\b/ Nick name Nick name Oliver BOIREAU Oliver BOIREAU Multi values separator Séparateur des multiples valeurs authentication_portal_1340022292201.png authentication_portal_1340022292201.png Content Management System Système de gestion de contenu Optimized for session explorer and single session features. Optimisé pour l'explorateur de sessions et les fonctionnalités de session unique. <user username="both" password="tomcat" roles="tomcat,role1"/> </tomcat-users> <user username="both" password="tomcat" roles="tomcat,role1"/> </tomcat-users> First parameter passed to the custom function is the requested URL, that is Le premier paramètre passé à la fonction personnalisée est l'URL demandée, c'est à dire Nb users Nb d'utilisateurs Databases (DBI) Bases de données (DBI) Quick start tutorial Tutoriel rapide "server_ip_address" => "localhost", "server_ip_address" => "localhost", mailto:lemonldap-ng-dev@ow2.org mailto:lemonldap-ng-dev@ow2.org An URL pattern (or default to match other URLs) Une expression sur l'URL (ou default pour les URLs ne correspondant pas aux règles) In this case you will have two Apache configuration files: Dans ce cas 2 fichiers de configuration Apache doivent être renseignés : logout_sso http://intranet/ logout_sso http://intranet/ documentation:latest:logs documentation:latest:logs ../../documentation/1.4/performances.html#macros_and_groups ../../documentation/1.4/performances.html#macros_and_groups ../pages/documentation/1.4/loginhistory.html ../pages/documentation/1.4/loginhistory.html /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote Mail session key: session field where to find user mail (by default: mail) Clef de session mail : champ de session pour trouver l'adresse mail des utilisateurs (par défaut : mail) FOSDEM FOSDEM } [domain_realm] } [domain_realm] Warning: key is not defined, set it in the manager ! Warning: key is not defined, set it in the manager ! ../../../media/screenshots/1.1/notifications/sample_notification.png ../../../media/screenshots/1.1/notifications/sample_notification.png Give a non ascii data Done une valeur non-ascii Password reset Réinitialisation de mots-de-passe accept accept IssuerDB use Utilisation de IssuerDB Order deny,allow Order deny,allow /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm documentation:1.4:changeconfbackend documentation:1.4:changeconfbackend Install the package lemonldap-ng-conf on all server which contains one of those packages. Installer le paquet lemonldap-ng-conf sur tous les serveurs qui contiennent un de ces paquets. portalRequireOldPassword portalRequireOldPassword Shared attributes (SREG) Attributs partagés (SREG) Options +ExecCGI +FollowSymLinks Options +ExecCGI +FollowSymLinks Allow only one IP address per user N'autoriser qu'une adresse IP par utilisateur ../../documentation/1.4/soapminihowto.html ../../documentation/1.4/soapminihowto.html SAML can use different NameID formats. SAML peut utiliser plusieurs formats de NameID. documentation:1.4:authslave documentation:1.4:authslave http://github.com/oremj/mediawiki-http-auth/downloads http://github.com/oremj/mediawiki-http-auth/downloads In Manager, go in General Parameters > Authentication modules and choose OpenID for authentication and/or users. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir OpenID pour les modules authentification, utilisateurs et/ou mots-de-passe. iso2unicode($name) iso2unicode($name) Default Défaut Restart all your Apache servers Redémarrer tous vos serveurs Apache See Writing rules and headers for more. Voir Écrire les règles et en-têtes pour plus d'informations. CAS force gateway authentication Forcer l'authentification de passerelle CAS Deny access to /config/ directory Interdire l'accès au répertoire /config/ c:/my hardisk/tomcat/ c:/my hardisk/tomcat/ ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: Our 128K link to the outside world #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: Requests OK from test.example.com MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: Our 128K link to the outside world #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: Requests OK from test.example.com MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy How do users authenticate?: by login How do users authenticate?: by login documentation:googleapps-manager-application.png documentation:googleapps-manager-application.png configuration: where configuration is stored configuration : où la configuration est stockée Notifications: prompt users with a message if found in the notification database Notifications : interrompt les utilisateurs avec un message s'il est trouvé dans la base de données des notifications Cookie name: name of the cookie, can be changed to avoid conflicts with other LemonLDAP::NG installations Nom de cookie : nom du cookie, peut être changé pour éviter les conflits avec d'autres installations LemonLDAP::NG LL::NG can use a lot of databases as authentication, users and password backend: LL::NG peut utiliser de nombreuses bases de données comme backend d'authentification, d'utilisateurs et de mots de passe : Check XSS Attacks: Set to 'Off' to disable XSS checks. Contrôler les attaques XSS : mettre à 'désactivé' pour désactiver la détection des attaques XSS. print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { https://upgrade.yubico.com/getapikey/ https://upgrade.yubico.com/getapikey/ "userobm_ext_id" => "HTTP_OBM_SERIALNUMBER", "userobm_ext_id" => "HTTP_OBM_SERIALNUMBER", applications:googleapps_logo.png applications:googleapps_logo.png The portal is the visible part of LemonLDAP::NG, all user interactions are displayed on it. Le portail est la partie visible de LemonLDAP::NG, toutes les interactions utilisateurs y sont affichées. language language ../media/screenshots/1.1/mailreset/mailreset_step5.png ../media/screenshots/1.1/mailreset/mailreset_step5.png Metadata Métadata Disable all signature flags in Options » Signature, except Sign SSO message which should be to On Désactiver toutes les cases dans Options » Signature, excepté Signer les messages SSO qui doit être activée /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay Code snippet Exemple de code MediWiki local configuration Configuration locale MediaWiki documentation:latest:portalcustom documentation:latest:portalcustom Order your rules Ordonner les règles //"userobm_photo_id" => , //"userobm_photo_id" => , Local groups Groupes locaux ../pages/documentation/1.1/activedirectoryminihowto.html ../pages/documentation/1.1/activedirectoryminihowto.html This concerns all parameters for the Organization metadata section: Ceci concerne tous les paramètres de la section "organization" des métadatas : Reset value: value to set in reset attribute to activate password reset (default: TRUE). Valeur de reset : valeur à mettre dans l'attribut reset pour activer la réinitialisation du mot-de-passe (défaut : TRUE). Check if URL asked is valid Vérifie que l'URL demandée est validée DNSDOMAIN: Main DNS domain (default: example.com) DNSDOMAIN : domaine DNS proncipal (défaut : example.com) ../../documentation/1.4/authchoice.html ../../documentation/1.4/authchoice.html //"userobm_nomade_local_copy" => , //"userobm_nomade_local_copy" => , Available bindings are: Les déclarations disponibles sont : You can for example set up a fail-over cluster with Heartbeat and HAproxy, like this: Par exemple on peut créer un cluster avec Heartbeat et HAproxy : my $res = $r->result(); my $res = $r->result(); ../../documentation/1.4/installrpm.html ../../documentation/1.4/installrpm.html → Check grantSessionRule parameter. → Vérifier le paramètre grantSessionRule. LL::NG uses Apache SSL module, like any other Apache authentication module, with extra features: LL::NG utilise le module SSL d'Apache, comme n'importe quel module d'authentification d'Apache avec quelques fonctionnalités supplémentaires : http://www.switch.ch/aai/support/tools/wayf.html http://www.switch.ch/aai/support/tools/wayf.html GLib GLib //"userobm_samba_home" => , //"userobm_samba_home" => , documentation:manager-formreplay-newurl.png documentation:manager-formreplay-newurl.png Trusted domains Domaines agréés ../media/icons/flags/ua.png ../media/icons/flags/ua.png If OpenID is used as users database, attributes will be requested to the server with SREG extention. Si OpenID est utilisé comme base d'utilisateurs, les attributs sont demandés en utilisant l'extension SREG d'OpenID. http://phpldapadmin.sourceforge.net http://phpldapadmin.sourceforge.net Import or generate security keys Importer ou generer les clefs de securité You need to register a new application on Twitter to get API key and API secret. Vous devez enregistrer votre nouvelle application dans Twitter pour obtenir la clef de l'API et son secret. Parameters for DBI backend are the same as DBI configuration backend. Les paramètres pour le backend DBI sont les mêmes que ceux du backend de configuration DBI. syslog syslog → The host is not known by LemonLDAP::NG. → L'hôte n'est pas connu de LemonLDAP::NG. IDP resolution cookie name: by default, it's the LL::NG cookie name suffixed by idp, for example: lemonldapidp. Nom du cookie de résolution de l'IDP: par défaut, c'est le nom du cookie LL::NG auquel est adjoint idp, par exemple: lemonldapidp. Backends Backends /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra RBAC model Modèle RBAC screenshots:1.1:mailreset:mailreset_step2.png screenshots:1.1:mailreset:mailreset_step2.png default_access (optional): what result to return if logon_hours is empty default_access (optionnel) : resultat à retourner si logon_hours est vide By default, configuration is stored in files, so access trough network is not possible. Par défaut, la configuration est stockée dans des fichiers, donc l'accès par le réseau n'est en général pas possible. Port: port of the application (by default, 80 for http, 443 for https) Port : port de l'application (par défaut, 80 pour http, 443 pour https) LL::NG can use SAML2 to get user identity and grab some attributes defined in user profile on its Identity Provider (IDP). LL::NG peut utiliser SAML2 pour obtenir l'identité et d'autres attributs definis dans le profil utilisateur défini chez son fournisseur d'identité (IDP). default_realm = EXAMPLE.COM [realms] default_realm = EXAMPLE.COM [realms] With this organization, you can set roles to user within specific application. Avec cette organisation, on peut définir les rôles de l'utilisateur au sein de chaque application. documentation:liferay_1.png documentation:liferay_1.png LL::NG use cron jobs to: LL::NG utilise des tâches planifiées pour : documentation:1.4:sessions documentation:1.4:sessions decreased (-1) if the portal autocompletion is allowed (see portal customization) diminué (-1) si l'autocompletion est autorisée sur le portail (voir Personnalisation du portail) DBI user Utilisateur DBI ../../../../css/all.css ../../../../css/all.css ../pages/documentation/1.1/authldap.html ../pages/documentation/1.1/authldap.html This means that if several Handlers are deployed, each will manage its own statistics. Donc si plusieurs agents sont déployés, chacun gère ses propres statistiques. Sessions are deleted by a scheduled task. Les sessions sont effacées par des tâches planifiées. LL::NG can also act as OpenID server, that allows to interconnect two LL::NG systems. LL::NG peut également agir en serveur OpenID, ce qui permet également d'interconnecter deux systèmes LL::NG. ../../../../media/documentation/googleapps-ssoconfig.png ../../../../media/documentation/googleapps-ssoconfig.png 'create_survey' => $_SERVER['HTTP_AUTH_ADMIN'] || $_SERVER['HTTP_AUTH_SUPERADMIN'], 'create_survey' => $_SERVER['HTTP_AUTH_ADMIN'] || $_SERVER['HTTP_AUTH_SUPERADMIN'], A request to the main session database is done (trough SOAP session backend) to be sure that the session exists. Une requête à la base de données des sessions principale est effectuée (via le backend de session SOAP) pour être sûr que la session existe. KrbMethodNegotiate On KrbMethodNegotiate On ../pages/documentation/1.1/applications/liferay.html ../pages/documentation/1.1/applications/liferay.html Jean-Thomas CHECCO Jean-Thomas CHECCO cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts A login is considered as successful if user get authenticated and is granted a session; as failed, if he fails to authenticate or if he is not allowed to open a session. Une connexion est considérée comme réussie si l'utilisateur est authentifié et autorisé à ouvrir une session ; comme échouée, sinon. Authentication process main steps are: Les étapes du processus d'authentication sont : portal portail Portal creates a session to store user data Le portail crée une session et y stocke les données ../pages/documentation/1.1/idpopenid.html ../pages/documentation/1.1/idpopenid.html If you choose to use MySQL, read how to increase MySQL performances. Si MySQL est choisi, lire comment augmenter les performances de MySQL. _openid_id _openid_id icons:jabber_protocol.png icons:jabber_protocol.png The main portal is configured to use CDA. Le portail principal est configuré pour utiliser le CDA. GRR GRR Translators that want to help us are welcome ! Les traducteurs qui veulent nous aider sont les bienvenus ! Display other sessions Affiche les autres sessions lemonldap-ng-portal-password.png <lemonldap-ng-portal-password.png Remote cookie name Nom du cookie distant memcachedsessionbackend memcachedsessionbackend We will explain how to use the latest: HTTP Auth. Nous expliquons ici comment utiliser le dernier : HTTP Auth. documentation:1.4:authremote documentation:1.4:authremote By default, Apache configuration files will be installed in /usr/local/lemonldap-ng/etc/. Par défaut les fichiers de configuration d'Apache seront installés dans /usr/local/lemonldap-ng/etc/. LDAP server Serveur LDAP applications:spring_logo.png applications:spring_logo.png </Directory>   </Directory>   Advanced configuration Configuration avancée LemonLDAP::NG is a modular WebSSO (Single Sign On) based on Apache::Session modules. LemonLDAP::NG est en WebSSO (Single Sign On) modulaire basé sur les modules Apache::Session. Portal gets the session key Le portail récupère la clef de session SOAP configuration backend proxy le proxy de backend de configuration SOAP SOAP configuration backend Backend de configuration SOAP Get the tarball Récupérer l'archive Code to replace: Code à remplacer : 'key' => 'q`e)kJE%<&wm>uaA', 'key' => 'q`e)kJE%<&wm>uaA', checkDate($ssoStartDate, $ssoEndDate) checkDate($ssoStartDate, $ssoEndDate) François-Xavier DELTOMBE: developer, tester François-Xavier DELTOMBE : developeur, testeur Configure the Apache server that host the portal to use the Apache Kerberos authentication module Configurer le serveur Apache qui héberge le portail utilisant le module d'authentification Kerberos d'Apache /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice internal_email_by_netid 1 internal_email_by_netid 1 OpenID login: the session key used to match OpenID login. Identificant OpenID : la clef de session utilisée pour correspondre au login OpenID. Convert HTTP header into environment variable Convertir les en-têtes HTTP en variables d'environnement logos:logo_abuledu.png logos:logo_abuledu.png Thomas CHEMINEAU Thomas CHEMINEAU <Location /index.pl/sessions> <Location /index.pl/sessions> lemonldap-ng-handler: contains Apache Handler implementation (agent) lemonldap-ng-handler : contient l'implémentation de l'agent pour Apache (handler) notification notification SLO binding: force binding to use for SLO (http-redirect, http-post, etc.) Méthode SLO : force la méthode à utiliser pour le SLO (http-redirect, http-post, etc.) ou=sessions,dc=example,dc=com ou=sessions,dc=example,dc=com Authorized domains: white list or black list of OpenID client domains (see below). Domaines autorisés : liste blanche ou noire des domaines clients OpenID (voir ci-dessous). applications:zimbra_logo.png applications:zimbra_logo.png To manage the other way (LL::NG → Google Apps), you can add a dedicated logout forward rule: Pour gérer l'autre voie (LL::NG → Google Apps), ajouter une règle de redirection après déconnexion: deleteSession: delete a session deleteSession : efface une session 'configurator' => $_SERVER['HTTP_AUTH_SUPERADMIN'], 'configurator' => $_SERVER['HTTP_AUTH_SUPERADMIN'], roleSeparator (optional): role values separator. roleSeparator (optionnel) : séparateur des valeurs de rôle. ../media/logos/logo_bpi.png ../media/logos/logo_bpi.png ../../documentation/1.4/authapache.html ../../documentation/1.4/authapache.html Contact Contact install_handler_libs install_handler_libs SVN nightly builds Extraction nocturne du dépôt SVN ../../../media/icons/personal.png ../../../media/icons/personal.png Datas around the authentication process. Données concernant le processus d'authentification. Options: redirection port and protocol Des options : port de redirection et protocole Alias /doc/ /usr/local/lemonldap-ng/htdocs/doc/ Alias /doc/ /usr/local/lemonldap-ng/htdocs/doc/ baseurl=http://lemonldap-ng.org/rpm6/ baseurl=http://lemonldap-ng.org/rpm6/ Manager virtual host is used to serve configuration interface and local documentation. L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. Exceptions: allow anonymous access for specific URLs (connectors, etc.) Exceptions : autoriser l'accès anonyme pour les URLs spécifiques (connecteurs, etc.) /_detail/icons/terminal.png?id=documentation /_detail/icons/terminal.png?id=documentation Verification URL: URL used to verifiy the BrowserID assertion. URL de vérification : URL utilisée pour vérifier l'assertion BrowserID. /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring To do this in Manager, go in General Parameters > Advanced Parameters > Notifications. pour ce faire dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications. $_auth eq LDAP or $_auth eq DBI $_auth eq LDAP or $_auth eq DBI The conditions are checked in alphabetical order of comments. Les conditions sont examinées dans l'ordre alphabétique des commentaires. For CentOS/RHEL: Pour CentOS/RHEL : RDBI RDBI Standard virtual host directives, to serve portal pages: Directives standard d'hôte virtuel pour servir les pages du portail : Allow from all Allow from all RewriteRule ^/saml/.* /index.pl </IfModule> RewriteRule ^/saml/.* /index.pl </IfModule> Password -> ... Password -> ... documentation:1.4:rbac documentation:1.4:rbac rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html The chosen logo file must be in portal applications logos directory (portal/skins/common/apps/). Le logo choisi doit se trouver dans le répertoire des logos des applications (portal/skins/common/apps/). documentation:1.4:managerprotection documentation:1.4:managerprotection You need Web::ID package. Le paquet Web::ID est nécessaire. yum install lemonldap-ng yum install lemonldap-ng http://www.youtube.com/watch?v=OJGB6jdN34Q http://www.youtube.com/watch?v=OJGB6jdN34Q Apache is not configured to authenticate users ! Apache is not configured to authenticate users ! Order of categories in the menu Ordre des catégories dans le menu You can allow these users instead of reject them: On peut autoriser ces utilisateurs au lieu de les rejeter : http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ formreplay formreplay clean Handler cache nettoyer le cache des agents ServerName zimbra.example.com   ServerName zimbra.example.com   user login nom de connexion notice for good authentications or external exchange (SAML, OpenID,…) notice pour les authentifications réussies et les échanges externes (SAML, OpenID,…) Mail headers: En-têtes de courriel : Install it to trust packages: L'installer pour certifier les paquets : Application list: display categories and applications allowed for the user Liste des applications : affiche les catégories et applications autorisée pour l'utilisateur portalSkin portalSkin ldapPpolicyControl ldapPpolicyControl LL::NG can delegate authentication to Apache, so it is possible to use any Apache authentication module, for example: LL::NG peut déléguer l'authentification à Apache, ainsi il est possible d'utiliser tous les modules d'authentification Apache, par exemple: Confirmation mail subject: Subject of mail sent when password change is asked (default: [LemonLDAP::NG] Password reset confirmation) Sujet du message de confirmation : sujet du courriel envoyé lorsque le changement de mot-de-passe est demandé (défaut: [LemonLDAP::NG] Password reset confirmation) Build your packages Construire les paquets SOAP based for client-server software, specific development, … Basé sur SOAP pour les logiciels client-serveur, les développements spécifiques, … Advanced features Fonctionnalités avancées Application name (optional): Application name (visible in Twitter) Nom d'application (optionel) : nom de l'application (visible dans Twitter) Main internal databases are: Les principales bases de données internes sont : nickname nickname Performances Performances LL::NG can use a white list or a black list to filter allowed OpenID domains. LL::NG peut utiliser une liste blanche ou noire pour filtrer les domaines OpenID autorisés. /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart Reload virtual host Recharger l'hôte virtuel URL: URL of your society URL: URL de votre organisation Informix Informix _whatToTrace ipAddr _whatToTrace ipAddr Allow login from IDP: allow a user to connect directly from an IDP link. Authentification depuis le fournisseur autorisée : autorise l'utilisateur à se connecter directement depuis un lien de l'IDP. PerlResponseHandler ModPerl::Registry </Files> PerlResponseHandler ModPerl::Registry </Files> Path: keep ^/cas/ unless you have change Apache portal configuration file. Chemin : laisser ^/cas/ sauf si le fichier de configuration Apache du portail a été modifiée. Options +ExecCGI   Options +ExecCGI   Then, go in WebID parameters: Ensuite, aller dans les paramètres WebID: authChoiceModules authChoiceModules /_detail/icons/wizard.png?id=documentation /_detail/icons/wizard.png?id=documentation translation memory directory = [path/to/trunk/build/lemonldap-ng]/omegat.files/zz/tm/ Répertoire des mémoires de traduction = [chemin/vers/trunk/build/lemonldap-ng]/omegat.files/zz/tm/ Zimbra preauth key Clef de pré-authentification Zimbra applications:bugzilla_logo.png applications:bugzilla_logo.png package SSOExtensions;   sub function1 { package SSOExtensions;   sub function1 { LemonLDAP::NG allows to store user logins and login attempts in their persistent session. LemonLDAP::NG permet de stocker les connexions et tentatives dans les sessions persistantes. All lemonldap-ng tools are in /usr/share/lemonldap-ng/bin/ Tous les outils lemonldap-ng se trouvent dans /usr/share/lemonldap-ng/bin/ ../../../../media/documentation/liferay_6.png ../../../../media/documentation/liferay_6.png Store user password in session data: see password store documentation. Stocker le mot-de-passe de l'utilisateur dans les données de session : voir la documentation sur le stockage du mot-de-passe. If the rule evaluation is true, the corresponding skin is applied. Si la règle correspond, le thème correspondant est appliqué. DocumentRoot /usr/local/lemonldap-ng/htdocs/manager/ DocumentRoot /usr/local/lemonldap-ng/htdocs/manager/ The configuration is done in Apache, in a virtual host. La configuration est effectuée dans Apache, dans les hôtes virtuels. documentation:1.4:authapache documentation:1.4:authapache ../pages/documentation/1.1/managerprotection.html ../pages/documentation/1.1/managerprotection.html This module is also available on GitHub. Ce module est également disponible sur GitHub. ../pages/documentation/1.1/fileconfbackend.html ../pages/documentation/1.1/fileconfbackend.html HTML templates: in <lang> tags, add your translation, they will be automaticaly used Les modèles HTML: dans les balises <lang>, ajoutez vos traductions, elles seront automatiquement utilisées DBI Pivot from user table Pivot DBI pour la table utilisateur Authorization Autorisations This scheme expect a parameter, which is the authentication chain. Ce dispositif nécessite un paramètre : la chaîne d'authentification. Identity provider: how forward user identity Fournisseur d'identité : comment transférer l'identité Timestamp of session creation Date et heure (timestamp) de la création de la session Mandatory: if set to On, then session will not open if this attribute is not given by IDP. Obligatoire : si activé, les sessions ne seront ouvertes que si l'attribut est fourni par l'IDP. Key: application name Key : nom d'application http://static.springsource.org/spring-security/site/ http://static.springsource.org/spring-security/site/ headers_map: map OBM internal field to LL::NG header headers_map: établit la correspondance entre les champs internes d'OBM et les en-têtes LL::NG MySQL MySQL 'directory_umask' => '007',? 'directory_umask' => '007',? Notification send function (index.pl/notification): Fonction d'envoi de notifications (index.pl/notification): A computer with a GNU/Linux or recent UNIX system Un serveur équipé d'un GNU/Linux ou d'un système UNIX récent LL::NG is designed using Model–View–Controller software architecture, so you just have to change HTML/CSS files to custom portal. LL::NG a été conçu en utilisant l'architecture logicielle Modèle–Vue–Controlleur, ainsi vous avez juste à modifier les fichiers HTML/CSS pour personnaliser son portail. To learn more about using Apache as reverse-proxy, see Apache documentation. Pour en savoir plus sur l'utilisation d' Apache en reverse-proxy, consultez la documentation d'Apache. This needs some hacking because the Apache Kerberos authentication module do not work if require valid-user is not set. Ceci requiert quelques astuces car le module d'authentification Kerberos d'Apache ne fonctionne pas si require valid-user n'est pas indiqué. See the README to know how install and configure it. Voir le README pour l'installer et le configurer. firstname firstname Bibliothèque Publique d'Information Bibliothèque Publique d'Information Known problems Problèmes connus secureTokenExpiration secureTokenExpiration The configuration is the same as the LDAP module. La configuration est la même que mour le module LDAP. documentation:1.4:fastcgi documentation:1.4:fastcgi ../pages/playground/playground.html ../pages/playground/playground.html DBI Password column Colonne du mot-de-passe DBI }?); }?); You have to change it to match your admin user (or use other conditions like group membership, or any other rule based on a session variable). Il faut la changer pour correspondre au nouvel administrateur (ou utiliser une autre conditions telle l'appartenance aux groupes ou tout autre règle basée sur des variables de session). This protocol does not define any attributes exchange mechanism, so only authentication is managed. Ce protocole ne définit aucun mécanisme d'échange d'attribut, donc seule l'authentification est gérée. LemonLDAP::NG is also able to catch logout request on protected applications, with different behavior: LemonLDAP::NG peut également intercepter les requêtes de déconnexion des applications protégées, avec différent comportements : dbiAuthChain dbiAuthChain The menu is displayed if authentication is successful. Le menu est affiché si l'authentification est réussie. Certificate authorities file Fichiers des autorités de certification Handler status page Page de statut de l'agent AuthName "LL::NG Manager" AuthName "LL::NG Manager" dwho dwho ../../../../media/documentation/googleapps-menu.png ../../../../media/documentation/googleapps-menu.png Local cache Cache local vi LocalSettings.php vi LocalSettings.php You can add this repository to have recent packages: Ajouter ce dépôt pour avoir les paquets les plus récents : Each module can be activated trough a rule, using user session information. Chaque module peut être activé via une règle en utilisant les informations de session de l'utilisateur. You have to create the branch by yourself Il faut toutefois créer manuellement la branche documentation:1.4:logoutforward documentation:1.4:logoutforward print "Connected user: ".$_SERVER{HTTP_AUTH_USER}; print "Connected user: ".$_SERVER{HTTP_AUTH_USER}; Configure MediaWiki virtual host like other protected virtual host. Configurer l'hôte virtuel Mediawiki comme n'importe quel autre hôte virtuel protégé. ../pages/contact.html ../pages/contact.html Use our own YUM repository. Utiliser votre propre dépôt YUM. ../../../css/print.css ../../../css/print.css managerTreeAutoClose managerTreeAutoClose appsListOrder appsListOrder Secondary LL::NG structure Systèe LL::NG secondaire Configuration text editor Éditeur de configuration en mode text Stack multiple backends (AuthMulti) Empiler de multiples backends (AuthMulti) Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Django est un framework web de haut niveau écrit en Python qui favorise le développement rapide et propre et un design pragmatique. Home Accueil When you use the multiple sessions restriction parameters, sessions are parsed for each authentication unless you use an Apache::Session::Browseable module. Lorsque sont activées les paramètres de restriction d'ouverture de session, celles-ci sont toutes examinées à chaque nouvelle authentification sauf lorsqu'un module de la famille Apache::Session::Browseable est utilisé. Then the second rule will be applied first, so every authenticated user will access to /pub/admin directory. Alors la seconde règle est appliquée en premier, donc tous les utilisateurs authentifiés pourront accéder au répertoire /pub/admin. "\@example.com" "\@example.com" protect the manager by Apache configuration protéger le manager par configuration d'Apache documentation:1.0:applications documentation:1.0:applications A day has 24 hours, and a week 7 days, so the value contains 168 bits, converted into 42 hexadecimal characters. Un jour a 24 heures et une semaine 7 jours, donc la valeur contient 168 bits, convertie en 42 caractères hexadécimaux. ../documentation/current/installrpm.html ../documentation/current/installrpm.html Such configuration can have some security problems: Une telle configuration peut engendrer des problèmes de sécurité : ../../documentation/1.4/portalcustom.html ../../documentation/1.4/portalcustom.html It is recommended to use optional_no_ca since WebID doesn't use certificate authorities : Il est recommandé d'utiliser « optional_no_ca » car WebID n'utilise pas d'autorité de certification : <OrganizationDisplayName xml:lang="en">Example</OrganizationDisplayName> <OrganizationDisplayName xml:lang="en">Exemple</OrganizationDisplayName> documentation:remote-principle.png documentation:remote-principle.png The configuration name is the same that files, so lmConf-1, lmConf-2, etc. Le nom de la configuration est le même que pour File : lmConf-1, lmConf-2, etc... Install the module: Installer le module : An OpenID server with CAS authentication Un serveur OpenID avec une authentification CAS pages/contact.html pages/contact.html Want Assertions Signed: set to On to require that received assertions are signed. Exiger des assertions signées : mettre à « activé » pour exiger de recevoir des assertions signées. ../pages/documentation/1.1/safejail.html ../pages/documentation/1.1/safejail.html /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/icons/access.png?id=documentation%3A1.4%3Astart /_detail/icons/access.png?id=documentation%3A1.4%3Astart You can add, delete or modify a virtual host here. Il est possible d'ajouter, effacer ou modifier un hôte virtuel ici. Google Apps can use SAML to authenticate users, behaving as an SAML service provider, as explained here. Les applications Google peuvent utiliser SAML pour authentifier les utilisateurs, en se comportant comme des fournisseurs de service SAML, tel qu'expliqué ici. Yubikey secret key Clef secrète Yubikey Configure LemonLDAP::NG to use MySQL as main database Configurer LemonLDAP::NG pour utiliser MySQL comme base de données principale name nom They will be tested in the specified order. Ils seront testés dans l'ordre indiqué. HTTPS HTTPS documentation:1.4:applications:googleapps ↵ documentation:1.4:applications:googleapps ↵ /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice Gendarmerie Nationale Gendarmerie Nationale 'manage_template' => $_SERVER['HTTP_AUTH_SUPERADMIN'], 'manage_template' => $_SERVER['HTTP_AUTH_SUPERADMIN'], Use Safe jail: set to 'Off' to disable Safe jail. Utiliser la cage sécurisée : mettre à 'Désctivé' pour désactiver la cage sécurisée (Safe). ../../documentation/quickstart.html#apache ../../documentation/quickstart.html#apache Facebook is a famous social network service. Facebook est un célèbre réseau social. ref: a reference that can be used later to know what has been notified and when ref : une référence qui peut être utilisée plus tard pour connaître ce qui a été notifié et quand Template parameters are defined in source code. Des paramètres modèles sont définis dans le code source. Current: to extract all configuration history Current : pour extraire tout l'historique de la configuration A name Un nom managerCss managerCss Lanyrd Lanyrd Apache authentication module will set the REMOTE_USER environment variable, which will be used by LL::NG to get authenticated user. Les modules d'authentification Apache renseignent la variable d'environnement REMOTE_USER, qui sera utilisée par LL::NG pour obtenir le nom d'utilisateur authentifié. domain => 'acme.com', domain => 'acme.com', Users Utilisateurs // ---- Unused values ? // ---- Unused values ? ../media/icons/xfmail.png ../media/icons/xfmail.png screenshots:1.1:mailreset:mailreset_step3.png screenshots:1.1:mailreset:mailreset_step3.png https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F 'superadmin' => $_SERVER['HTTP_AUTH_SUPERADMIN'], 'superadmin' => $_SERVER['HTTP_AUTH_SUPERADMIN'], Deny from all Deny from all prereq prereq Configure local cache first. Configurer d'abord le cache local. Dailymotion Dailymotion lemonldap-ng-users@ow2.org lemonldap-ng-users@ow2.org You need to use Apache 2 with mod_perl 2, even if some simple configuration can run under Apache 1.3 Il est nécessaire d'utiliser Apache 2 avec mod_perl 2, même si une configuration simple peut fonctionner avec Apache 1.3 documentation:1.4:sqlconfbackend documentation:1.4:sqlconfbackend It can be used just to share authentication or to share user's attributes following the OpenID Simple Registration Extension 1.0 (SREG) specification. Ce peut être utilisé pour partager l'authentification et pour partager les attributs utilisateurs en suivant les spécifications OpenID Simple Registration Extension 1.0 (SREG). Security recommendation Recommendation de sécurité Writing rules and headers Écrire les règles et en-têtes To allow the Login History tab in Menu, configure it in General Parameters > Portal > Menu > Modules (see portal menu configuration). Pour activer l'onglet de l'historique de connexion dans le menu, le configurer dans Paramètres généraux > Portail > Menu > Modules (voir la configuration du menu du portail). /_detail/icons/bug.png?id=contact /_detail/icons/bug.png?id=contact ../pages/documentation/1.4/jsonfileconfbackend.html ../pages/documentation/1.4/jsonfileconfbackend.html Liferay virtual host in Apache Hôte virtuel Liferay dans le manager Configuration and sessions in MySQL Configuration et sessions dans MySQL BrowserID (Mozilla Persona) BrowserID (Mozilla Persona) http://search.cpan.org/perldoc?Apache::Session::MySQL http://search.cpan.org/perldoc?Apache::Session::MySQL ../../documentation/1.4/prereq.html ../../documentation/1.4/prereq.html Note that variables designed by $xx correspond to the name of the exported variables or macro names. Noter que les variables designées par $xx correspondent au nom de variables exportées ou de noms de macro. exportedHeaders exportedHeaders documentation:1.4:browseablesessionbackend documentation:1.4:browseablesessionbackend Please see the next chapter to learn how build an official tarball from SVN files. Voir le chapître suivant pour savoir comment construire une archive officielle depuis les fichiers SVN. make dist make dist my-profile.eu my-profile.eu Deletion example in Perl Exemple d'effacement en Perl Entry Identifier Identifiant d'entrée 'notificationWildcard' => 'allusers', 'notificationWildcard' => 'allusers', http://mail.ow2.org/wws/arc/lemonldap-ng-changes http://mail.ow2.org/wws/arc/lemonldap-ng-changes <Organization> <Organization> ../../documentation/1.4/authgoogle.html ../../documentation/1.4/authgoogle.html https://metacpan.org/module/Apache::Session::Browseable::Redis https://metacpan.org/module/Apache::Session::Browseable::Redis Handler does not see SSO cookies (because it is not in main domain) and redirects user on Portal L'agent n'intercepte pas de cookie SSO (car il n'est pas dans le même domaine) et redirige l'utilisateur vers le portail http://www.php.net/session_start http://www.php.net/session_start dbiUserPassword dbiUserPassword ../../../download.html#contributions ../../../download.html#contributions For the certificate, you can build it from the signing private key registered in Manager. Pour le certificate, vous pouvez le construire en signant la clef privée enregistrée dans le Manager. Kerberos client for Linux Client Kerberos pour Linux ldapGroupBase ldapGroupBase Choose “Apache” as authentication module (“General Parameters » Authentication modules » Authentication module”) Choisir “Apache” comme module d'authentification (“Paramètres généraux » Modules d'authentification » Module d'authentification”) managerPassword managerPassword applications:drupal_logo.png applications:drupal_logo.png get user attributes obtenir les attributs utilisateurs An apache virtual host protected by LemonLDAP::NG Handler must be registered in LemonLDAP::NG configuration. Un hôte virtuel apache protégé par un agent LemonLDAP::NG doit être enregistré dans la configuration LemonLDAP::NG. documentation:liferay_6.png documentation:liferay_6.png Set macros: compute configured macros Installe les macros : calcule les macros demandées Access rule Règle d'accès //"userobm_delegation" => , //"userobm_delegation" => , dbiPasswordMailCol dbiPasswordMailCol RewriteRule ^/openidserver/.* /index.pl RewriteRule ^/openidserver/.* /index.pl Grant LemonLDAP::NG access Autoriser l'accès pour LemonLDAP::NG http://www.lambdaprobe.org http://www.lambdaprobe.org The prefix 1.3.6.1.4.1.10943 is owned by LINAGORA (See http://www.iana.org/assignments/enterprise-numbers). Le préfixe 1.3.6.1.4.1.10943 est propriété de LINAGORA (Voir http://www.iana.org/assignments/enterprise-numbers). http://www.wikipedia.org http://www.wikipedia.org apt-get update apt-get update ldapBindDN ldapBindDN The log level can be set with Apache LogLevel parameter. Le niveau de journalisation peut être configuré via le paramètre LogLevel d'Apache. /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote ../pages/documentation/1.1/exportedvars.html ../pages/documentation/1.1/exportedvars.html openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem For security reason, a cookie provided for a domain cannot be sent to another domain. Pour des raisons de sécurité, un cookie fournit par un domaine ne peut être transmit à un autre. Cache::Cache Cache::Cache print "$res notification(s) have been deleted\n"; } print "$res notification(s) have been deleted\n"; } You can also use Facebook as user database. On peut également utiliser Facebook comme base de données utilisateurs. Activation: Set to On to enable Common Domain Cookie support. Activation : mettre à « activé » pour activer le support du domaine commun de cookie. http://modauthkerb.sourceforge.net/ http://modauthkerb.sourceforge.net/ Logout user from current application and from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ → User session has expired or handler does not have access to the same Apache::Session database than the portal → La session de l'utilisateur a expiré ou l'agent n'a pas accès à la même base de données Apache::Session que le portail ../pages/documentation/1.4/internalproxy.html ../pages/documentation/1.4/internalproxy.html For example, to forward login ($uid) and password ($_password if password is stored in session): Par exemple, pour exporter l'identifiant ($uid) et le mot-de-passe ($_password si le mot-de-passe est stocké dans la session): /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice Authentication contexts Contextes d'authentification By default, anonymous bind is used. Par défaut, une connexion anonyme est utilisée. ../../documentation/1.4/applications/googleapps.html ../../documentation/1.4/applications/googleapps.html phpLDAPadmin will connect to the directory with a static DN and password, and so will not request authentication anymore. phpLDAPadmin se connecte au serveur avec un DN et un mot-de-passe statique et ne requiert ainsi aucune authentification. Use MySQL for Lemonldap::NG configuration Utiliser MySQL pour la configuration de Lemonldap::NG Session lifetime for cronjob Durée de vie des sessions pour la tâche planifiée Include LemonLDAP::NG configuration in your main Apache configuration: Incluez la configuration LemonLDAP::NG dans celle d'Apache : Choice of any certificate attribute as user main login Choix de n'importe quel attribut du certificat comme nom d'utilisateur principal rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz Apache based protection allow to be independent from WebSSO, so Manager will always be reachable even if WebSSO configuration is corrupted. Une protection basée sur Apache permet d'être indépendant du WebSSO, ainsi le manager est toujours accessible même si la configuration du WebSSO est corrompue. Access to configuration Accès à la configuration http://mb-c.pro/en/archives/7657 http://mb-c.pro/en/archives/7657 You can create a special virtual host and use Apache rewrite module to switch between open and protected hosts: Vous pouvez créer un hôte virtuel particulier et utiliser le module rewrite d'Apache pour choisir entre le site ouvert et le protégé : Fail2ban Fail2ban Select Metadata, and unprotect the field to paste the following value: Selectionner Metadata, et déprotéger le champ pour y mettre : Regular expression Expression régulière Authenticate: contact authentication database to check credentials Authentifie : contacte le dispositif d'authentication pour vérification Stack multiple backends Empiler de multiples backends css/screen.css css/screen.css cp ValveLemonLDAPNG.jar server/lib/ cp ValveLemonLDAPNG.jar server/lib/ Install cron jobs Installer les tâches planifiées (cron) Allowed modules: click on New choice to add a choice. Modules autorisés : cliquer sur Nouveau choix pour ajouter un choix. Virtual host Hôte virtuel ... </IDPSSODescriptor> ... </IDPSSODescriptor> translations traductions header_remote_user_conversion header_remote_user_conversion portalDisplayAppslist portalDisplayAppslist ldapConfBase: Notifications branch DN. ldapConfBase : DN de la branche des notifications. icons:flags:fr.png icons:flags:fr.png checkLogonHours($ssoLogonHours, '', '', '1') checkLogonHours($ssoLogonHours, '', '', '1') 1_admin 1_admin User choice done if authentication choice was used Choix de l'utilisateur si le backend d'authentification Choice a été utilisé A virtual host contains: Un hôte vituel contient : Role Based Access Control (RBAC) Contrôle d'accès basé sur les rôles (RBAC) Manager menu organization Organisation du menu du manager ../pages/documentation/1.1/authnull.html ../pages/documentation/1.1/authnull.html Any SAML Service Provider, for example: Tout fournisseur de service SAML, par exemple: To achieve this, you can create a rule in the Manager: select General Parameters > Portal > Customization > Skin display rules on click on “New key”. Pour le réaliser, il faut créer une règle dans le manager : choisir paramètres généraux > Portail > Personnalisation > Règle d'affichage du thème et cliquer sur “Nouvelle clef”. Remote LL::NG LL::NG distant User: where collect user data Utilisateurs: où trouver les données utilisateurs authenticate users authentifier les utilisateurs Handler gets session get from cookie and gets session L'agent récupère la session en utilisant la valeur du cookie ^/obm-sync ^/obm-sync Roles as simple values of a user attribute Rôles comme simple valeur d'attribut utilisateur Here are some advices: Il y a deux avis : So you have just to declare this header for the virtual host in Manager. Il suffit donc de déclarer cet en-tête pour l'hôte virtuel dans le manager. # SOAP functions for configuration access (disabled by default) # Fonctions SOAP pour accéder à la configuration (désactivées par défaut) POST URL: /login.php URL POST: /login.php Install dependencies on your system Installer les dépendances sur le système Using Redis, you just have to prepare Redis database. Pour utiliser Redis, il faut preparer la base de données. It simplifies the build of a protected area with a few changes in the application. Il simplifie la construction d'une aire protégée avec peu d'impact sur les applications. notifications_explorer_create.png notifications_explorer_create.png http://test1.example.com http://test1.example.com Twitter application key Clef d'application de Twitter If you define mail contents in Manager, HTML templates will not be used. Si les contenus sont définis dans le manager, les modèles HTML ne sont pas utilisés. SAML service providers: Registered SP Fournisseurs de service SAML : SP enregistrés portalDisplayChangePassword portalDisplayChangePassword For each IDP, you can configure attributes that are collected. Pour chaque IDP, il faut configurer les attributs à collecter. /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat It should works on every browser: Ça doit marcher avec tous les navigateurs : apt-cache search lemonldap-ng apt-cache search lemonldap-ng By default, the manager is restricted to the user 'dwho' (default backend is Demo). Par défaut, l'accès au manager est restreint à l'utilisateur "dwho" (le backend par défaut est Demo). If no value, disable group searching. La recherche des groupes est désactivé si cette valeur est vide. Notifications: messages displayed to connected users Notifications: messages à afficher aux utilisateurs connectés ../../../media/screenshots/1.1/mailreset/mailreset_step3.png ../../../media/screenshots/1.1/mailreset/mailreset_step3.png SSLCertificateFile: Server certificate SSLCertificateFile : certificat serveur ../css/screen.css ../css/screen.css The path to the lock directory Le chemin du répertoire des verrous ../../../media/documentation/ha-apache.png ../../../media/documentation/ha-apache.png It is advised to use separate session backends for standard sessions, SAML sessions and CAS sessions, in order to manage index separately. Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, SAML et CAS afin de gérer séparemment les index. http://linuxfr.org/news/sortie-de-lemonldapng-11 http://linuxfr.org/news/sortie-de-lemonldapng-11 /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/share/lemonldap-ng/bin/lemonldap-ng-cli File session backend Backend de sessions File If no value, will use first NameID Format activated in metadata. Si aucune valeur n'est indiquée, le premier format de NameID activé dans les métadatas sera utilisé. documentation:1.4:cda documentation:1.4:cda AuthType Kerberos AuthType Kerberos Mail filter: Filter to find user from its mail (default: (&(mail=$mail)(objectClass=inetOrgPerson))) Filtre mail : filtre pour trouver l'utilisateur à partir de son mail (défaut: (&(mail=$mail)(objectClass=inetOrgPerson))) CAS login: the session key used to fill user login (value will be transmitted to CAS clients). Identifiant CAS : la clef de session à utiliser pour compléter le login (valeur transmise au clients CAS). This includes the application list which is now set in the applicationList parameter from [portal] section, for example: Ceci inclut la liste des applications qui se trouve désormais dans le paramètre applicationList de la section [portal], par exemple: http://search.cpan.org/perldoc?Apache2::URI#unescape_url http://search.cpan.org/perldoc?Apache2::URI#unescape_url authenticate: check if user is authenticated; if not, redirect it to the portal authenticate : vérifie que l'utilisateur est authentifié ; sinon, il est redirigé vers le portail Nov 2011: LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG Nov 2011 : LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG "userobm_perms" => "HTTP_OBM_PERMS", "userobm_perms" => "HTTP_OBM_PERMS", Next, configure SOAP for your remote servers Ensuite, configurer SOAP pour les serveurs distants → The specified virtual host was not configured in Manager. → L'hôte virtuel utilisé n'est pas configuré dans le manager. ../../../media/applications/drupal_logo.png ../../../media/applications/drupal_logo.png 2 kind of files may be translated: 2 types de fichiers peuvent être traduits : By default, mail content are empty in order to use HTML templates: Par défaut, les messages sont vides afin d'utiliser les modèles HTML : Then, go in Yubikey parameters: Ensuite, aller dans les paramètres Yubikey: KrbVerifyKDC Off KrbVerifyKDC Off Restart Apache Redémarrer Apache googleapps googleapps Then click on New POST data and add all data with their values, for example: Cliquer ensuite sur Nouvelle donnée POST et ajouter chaque donnée avec sa valeur, par exemple : LemonLDAP::NG wiki uses Dokuwiki! Le wiki LemonLDAP::NG est un Dokuwiki ! /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice authenticationLevel authenticationLevel Put LemonLDAP::NG tarball in %_topdir/SOURCES Mettre l'archive LemonLDAP::NG dans %_topdir/SOURCES Berlin Berlin This module is not part of LL::NG distibution, and can be found on CPAN: Apache::Session::LDAP. Ce module ne fait pas partie de la distribution LL::NG, et se trouve sur le CPAN : Apache::Session::LDAP. dbiUser dbiUser ../pages/screenshots.html ../pages/screenshots.html /_detail/icons/colors.png?id=documentation%3A1.4%3Astart /_detail/icons/colors.png?id=documentation%3A1.4%3Astart The secondary portal is declared in the Manager of the main LL::NG structure (else user will be rejected). Le portail secondaire est declaré dans le Manager du système LL::NG principal comme une application (sinon les utilisateurs seront rejetés). Distinguished name Nom distinct (distinguished name) error error To protect the manager, you have to choose one or both of : Pour protéger le manager, il faut choisir l'une où les deux solutions : ../../documentation/1.4/customfunctions.html ../../documentation/1.4/customfunctions.html ../../../media/icons/utilities.png ../../../media/icons/utilities.png Certificate Certificat Use packages provided by Debian. Utiliser les paquets fournis par Debian. screenshots:1.1:mailreset:mailreset_step5.png screenshots:1.1:mailreset:mailreset_step5.png ../pages/documentation/1.1/logoutforward.html ../pages/documentation/1.1/logoutforward.html CMS, Portal CMS, Portail http://en.wikipedia.org/wiki/Central_Authentication_Service http://fr.wikipedia.org/wiki/Central_Authentication_Service You can also add some other parameters On peut également ajouter quelques autres paramètres SMTPServer SMTPServer For example with this rule on the access parameter: Par exemple avec cette règle sur le paramètre access : a2enmod perl a2enmod perl These parameters are not mandatory to run SAML service, but can help to customize it: Ces paramètres ne sont pas obligatoires pour faire fonctionner le service SAML, mais peuvent aider à leur personnalisation : 'loginHistoryEnabled' => '1', 'loginHistoryEnabled' => '1', User tries to access protected application, his request is catched by Handler Lorsqu'un utilisateur tente d'accéder à une application protégée, il est intercepté par l'agent (handler) Variables that can be used in rules and headers Variables qui peuvent être utilisées dans les règles et en-têtes 'email' => $_SERVER['HTTP_AUTH_MAIL'], 'email' => $_SERVER['HTTP_AUTH_MAIL'], Catch error pages: Capture des pages d'erreur : This page do not reference all error messages, but only the frequentest Cette page ne référence pas tous les messages d'erreur, mais simplement les plus fréquents http://search.cpan.org/perldoc?Apache::Session::Oracle http://search.cpan.org/perldoc?Apache::Session::Oracle STORAGECONFFILE: location of default storage configuration file (default: /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) STORAGECONFFILE : emplacement du du fichier de configuration du stockage par défaut (défaut : /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) An example is given under the source tree : lemonldap-ng-portal/example/index.fcgi Un exemple est disponible dans l'arborescence des sources : lemonldap-ng-portal/example/index.fcgi nothing here... rien ici... For example, to allow only users with a strong authentication level: Par exemple, pour n'autoriser que les utilisateurs authentifiés fortement : proxy proxy It can works with external modules to extends its functionalities. Il peut utiliser des modules externes pour étendre ses fonctionnalités. Authentication level: authentication level for this module. Niveau d'authentification : niveau d'authentification accordé à ce module. Only the condition is not mandatory. Seule la condition n'est pas exigée. Then in exported variables, you can ask only for : Ensuite dans les « variables exportées », on ne peut demander que : Recursive: activate recursive group functionality (default: 0). Récursivité : active la fonctionnalité récursive (défaut: 0). HyperText Markup Language HyperText Markup Language Set local groups: compute configured groups Installe les groupes locaux : calcule les groupes demandés par la configuration ../../documentation/1.4/managerprotection.html ../../documentation/1.4/managerprotection.html admin_server = ad.example.com admin_server = ad.example.com Sympa configuration Configuration Sympa Connection settings can be configured differently for authentication process and user process. Les paramètres de connexion peuvent être configurés différemment pour les processus d'authentification et de recherche d'utilisateur. /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay By default, login time and IP address are stored in history, and the error message prompted to the user for failed logins. Par défaut, le tampon de date et l'adresse IP sont stockés dans l'historique et le message d'erreur affiché à l'utilisateur en cas d'échec. +1h: one hour from session creation +1h : une heure après la création de la session overload any LL::NG parameter when a specific backend is used surcharger n'importe quel paramètre LL::NG en fonction du backend utilisé Extract form info: get login/password, certificate, environment variable (depending on authentication module) Extrait les informations du formulaire: récupère le couple compte/mot-de-passe, le certificat, une variable d'environnement (suivant le module d'authentification) This configuration is usable if you want to expose your internal SSO portal to another network (DMZ). Cette configuration est utilisable l'on soujaite exposer un portail SSO interne à une autre réseau (DMZ). Default rule: who can access to the application Règle default : qui peut accéder à l'application http://auth.example.com/saml/metadata http://auth.example.com/saml/metadata </IfModule>   </IfModule>   /_detail/icons/flags/ua.png?id=press /_detail/icons/flags/ua.png?id=press ../documentation/current/notifications.html ../documentation/current/notifications.html TLS client Client TLS Change password: update password column in authentication table matching user Changement de mot-de-passe : met à jour le champ mot-de-passe de la table d'authentification correspondant à l'utilisateur # Perl script # Perl script DokuWiki offline version DokuWiki version hors-ligne Full access control Contrôle d'accès complet Demonstration backend has hard coded user accounts: Le backend de démonstration dispose de compte codés en dur : Generic articles Articles génériques Allow only users with a LimeSurvey role Autorise seulement les utilisateurs avec un rôle LimeSurvey /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart http://linuxfr.org/news/sortie-de-lemonldapng-version-10 http://linuxfr.org/news/sortie-de-lemonldapng-version-10 print "Connected user: ".$ENV{HTTP_AUTH_USER}; print "Connected user: ".$ENV{HTTP_AUTH_USER}; Inside this jail, you can access to: Dans cette cage, on peut accéder aux éléments suivants : By default, default values are used. Sauf modification, les valeurs par défaut sont utilisées. Log with the dwho account and go on http://manager.example.com Connectez-vous avec le compte dwho sur http://manager.example.com ../media/icons/personal.png ../media/icons/personal.png Display Name: should be displayed on IDP, this is often your society name Nom affiché (display name) : peut être affiché par le fournisseur d'identité (IDP), this is often your society name Create a redirection script, called login.pl: Créer un script de redirection, appelé login.pl: ../../documentation/1.4/authwebid.html ../../documentation/1.4/authwebid.html <VirtualHost> <VirtualHost> none: no access control, the server will answer without checking if the user is authorized for the service (this is the default) none : pas de contrôle d'accès, le serveur répond sans contrôler si l'utilisateur est autorisé à accéder au service (c'est la valeur par défaut) To avoid having group dn stored in sessions datas, you can use a macro to rewrite memberOf: Pour éviter de stocker les dn dans votre base de sessions, vous pouvez utiliser une macro pour réécrire memberOf : Outlook Web App Outlook Web App http://search.cpan.org/dist/Apache-Session-LDAP/ http://search.cpan.org/dist/Apache-Session-LDAP/ PerlResponseHandler ModPerl::Registry PerlResponseHandler ModPerl::Registry valeur valeur ^/logout ^/logout The GPG key can be downloaded here: rpm-gpg-key-ow2 La clef GPG peut être téléchargée ici : rpm-gpg-key-ow2 Change as user: enable to perform password modification with credentials of connected user. Change comme utilisateur : active la modification du mot-de-passe avec les éléments d'authentification de l'utilisateur connecté. → You tried to activate Status module without localStorage. → Le module Status est activé sans localStorage. SOAP SOAP Authentication: how check user credentials Authentification : comment examiner les données utilisateur d'authentification ldapBase ldapBase Radius authentication level Niveau d'authentification de Radius LL::NG can delegate authentication to an OpenID server. LL::NG peut deleguer l'authentification à un serveur OpenID. _casPTserviceID = Proxy ticket value _casPTserviceID = Proxy ticket value LDAP session backend Backend de sessions LDAP icons:chat.png icons:chat.png }, }, For example, macro “macro1” will be computed before macro “macro2”: so, expression of macro2 may involve value of macro1. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. Signed Authentication Request: set to On to always sign authentication request. Requête d'authentification signée : mettre à « activé » pour toujours signer les requêtes d'authentifications. If the message contains check boxes, the user has to check all of them else he can not access to the portal and get his session cookie. Si le message contient des cases à cocher, l'utilisateur doit toutes les cocher, sinon il ne peut obtenir de cookie de session. Test::POD Test::POD Attributes and macros Attributs et macros documentation:1.4:installtarball documentation:1.4:installtarball Manager translation Traduction du manager You should grab some informations: Il faut récolter quelques informations: Default use case: Cas général: Before, you have to create the virtual host manager.your.domain in the manager and set a rules, else access to the manager will be denied. Avant, il faut créer l'hôte virtuel manager.your.domain dans le manager et mettre une règle, sinon l'accès au manager sera interdit. PerlOutputFilterHandler Lemonldap::NG::Handler::Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu A little floating menu can be added to application with this simple Apache configuration: Un petit menu flottant peut être ajouté aux applications par une seimple configuration Apache : Then each parameter is one value of the attribute description, prefixed by its key. Ensuite, chaque paramètre est une valeur de l'attribut description, prefixé par sa clef. Apache virtual host Hôte virtuel Apache : Multi modules display Affichage des modules de Multi ../../documentation/1.4/loginhistory.html ../../documentation/1.4/loginhistory.html icons:utilities.png icons:utilities.png 'manage_label' => $_SERVER['HTTP_AUTH_SUPERADMIN'] ); 'manage_label' => $_SERVER['HTTP_AUTH_SUPERADMIN'] ); → The cache has been created by another user than Apache's user. → Le cache a été créé par un autre utilisateur que celui d'Apache. Writer URL: URL used by SAML IDP to write the cookie. URL d'écriture : URL utilisée par l'IdP SAML pour écrire le cookie. ../media/icons/wizard.png ../media/icons/wizard.png Javascript protection: set httpOnly flag, to avoid cookie been caught by javascript code Protection Javascript : active le drapeau httpOnly pour éviter que le cookie ne soit accessible par code javascript To allow the manager to reload the configuration, register the reload virtual host name in the hosts of the server: Pour autoriser le manager à recharger la configuration, enregistrer le nom d'hôte virtuel de rechargement dans le fichier hosts du serveur : ../media/screenshots/1.1/mailreset/mailreset_step3.png ../media/screenshots/1.1/mailreset/mailreset_step3.png This page can be browsed for example by MRTG using the MRTG monitoring script. Cette page peut être parcourue par exemple par MRTG en utilisant le script de surveillance MRTG. Display-Name Display-Name Time to test L'heure est aux tests <notification> element(s) : élément(s) <notification> : Attribute Authority Autorité d'attributs Changelog Journal des changements sudo apachectl configtest sudo apachectl restart sudo apachectl configtest sudo apachectl restart sudo make install sudo make install You can customize logs by redefining userNotice() and userError() methods, directly in lemonldap-ng.ini On peut personnaliser les fonctions de journalisation en redéfinissant les méthodes userNotice() et userError(), directement dans lemonldap-ng.ini User ID User ID Send login in Auth-User: Envoi de l'identifiant dans Auth-User: Redirection to the remote type portal Redirection vers le portail de type remote Montreal Montréal screenshots:1.1:notifications:sample_notification.png screenshots:1.1:notifications:sample_notification.png install_portal_libs install_portal_libs documentation:1.4:authldap documentation:1.4:authldap OW2 Con OW2 Con The faster. Le plus rapide. In this case, see how convert header into environment variable. Dans ce cas, voir comment convertir les en-têtes en variable d'environnement. Users module: SAML Module utilisateurs : SAML http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 Zimbra Handler parameters Paramètres du handler Zimbra Note that groups are computed after macros, so a group rule may involve a macro value. Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro. http://zimbra.lan/service/preauth http://zimbra.lan/service/preauth After configuring SAML Service, you can export metadata to your partner Service Provider. Après avoir configuré le service SAML, exporter les métadonnéesvers le fournisseur de service partenaire. ../media/logos/logo_ucanss.png ../media/logos/logo_ucanss.png Your EntityID, often use as metadata URL, by default #PORTAL#/saml/metadata. Votre EntityID, souvent utilisé comme URL des métadatas, par défaut #PORTAL#/saml/metadata. ), ), authgoogle authgoogle LL::NG is compatible with the CAS protocol versions 1.0 and 2.0. LL::NG est compatible avec le protocole CAS versions 1.0 et 2.0. Multiple domains: enable cross domain mechanism (without this, you cannot extend SSO to other domains) Domaines multiples : active le mécanisme inter-domaines (sans ceci, on ne peut pas étendre le SSO aux autres domaines) Put your own files instead of ow2.cert, ow2.key, ow2-ca.cert: Placer vos propres fichiers au lieu de ow2.cert, ow2.key, ow2-ca.cert: ../pages/references.html ../pages/references.html Kerberos Kerberos You can also find on this page the SVN tarball if you want to test latest features. On peut aussi trouver sur cette page l'archive SVN pour tester les dernières évolutions. Change the base URL for EL6 packages: Changer l'URL de base pour les paquets EL6 : documentation:1.0:portal documentation:1.0:portal ldapPwdEnc ldapPwdEnc documentation:1.4:error documentation:1.4:error ../pages/default_sidebar.html ../pages/default_sidebar.html Logging application access Trace des accès aux applications Freshmeat Freshmeat Starting performances Performances au démarrage ldapBindPassword ldapBindPassword API key: API key from Twitter Clef d'API: clef d'API donnée par Twitter documentation:1.4:configvhost documentation:1.4:configvhost To edit SSO cookie parameters, go in Manager, General Parameters > Cookies: Pour modifier les paramètres du cookie SSO, aller dans le manager, Paramètres généraux > Cookies : tomcat tomcat 'portalSkin' => 'pastel', 'portalSkin' => 'pastel', ^/(?i)index.php\?.*access.*access ^/(?i)index.php\?.*access.*access Header name Nom d'en-tête Restrict /admin to administrators group Restreint /admin au groupe des administrateurs You must allow access to Manager IP. Il faut autoriser l'accès à l'adresse IP du manager. documentation:conferences documentation:conferences For example, to configure the File configuration backend: Par exemple, pour configurer le backend de configuration File : lemonldap-ng-dev@ow2.org lemonldap-ng-dev@ow2.org Configure your DNS server to resolve names with your server IP. Configurer le serveur DNS pour résoudre les noms avec l'adresse IP de votre serveur. Browseable session backend Backend de session explorable Configure the Auth-User header. Configurer l'en-tête Auth-User. Heidelberg Heidelberg Anti iframe protection: will kill parent frames to avoid some well known attacks Protection anti-iframe : ferme la frame parente pour éviter des attaques bien connues Mpm-worker works faster and LemonLDAP::NG use the thread system for best performance. Mpm-worker est plus rapide et LemonLDAP::NG utilise le système de threads pour de meilleures performances. Timezone of the user, set with javascript from standard login form (will be empty if other authentication methods are used) Timezone de l'utilisateur, renseignée par javascript dans le formulaire d'authentification (vide si une autres méthode d'authentification est utilisée) https://gist.github.com/njh/2432427 https://gist.github.com/njh/2432427 Authentication: how authenticate users Authentification: comment authentifier les utilisateurs Export sAMAccountName in a variable declared in exported variables Exporter sAMAccountName dans la liste des variables exportées documentation:latest:notifications documentation:latest:notifications Must be secured by network access control. Doit être securisé par un contrôle d'accès réseau. Apache authentication level Niveau d'authentification d'Apache unprotect unprotect Form replay parameters Paramètres de rejeu de formulaires logout_app_sso http://intranet/ logout_app_sso http://intranet/ Demonstration Démonstration If CAS login is not set, it uses General Parameters » Logs » REMOTE_USER data, which is set to uid by default Si le login CAS n'est pas défini, la donnée Paramètres généraux » Journalisation » REMOTE_USER est utilisée, mise à uid par défaut }; }; You can change it quick with a sed command. On peut le changer rapidement par une commande sed. ../documentation/current/prereq.html ../documentation/current/prereq.html Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance In Manager, go in General Parameters > Authentication modules and choose Apache for authentication. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Apache pour l'authentification. ../pages/documentation/1.1/error.html ../pages/documentation/1.1/error.html 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 For remote servers, you can use SOAP session backend in cunjunction to increase security for remote server that access through an unsecure network Pour les serveurs distants, vous pouvez utiliser le module SOAP d'accès aux sessions en complément pour augmenter la sécurité de ces serveurs qui accèdent aux sessions au travers d'un réseau non sûr Parameters: Paramètres: Update your /etc/hosts to map SSO URLs to localhost: Mettez à jour votre /etc/hosts pour faire correspondre les URLs du SSO à votre machine : LDAPFilter => '(&(sAMAccountName=$user)(objectClass=person))', LDAPFilter => '(&(sAMAccountName=$user)(objectClass=person))', checkLogonHours checkLogonHours To see available actions, do: Pour connaître les actions possibles, lancer : This is also true for: C'est disponible pour : LL::NG can delegate authentication to a CAS server. LL::NG peut déléguer l'authentification à un serveur CAS. Installation from the tarball Installation depuis l'archive https://metacpan.org/release/Net-Facebook-Oauth2 https://metacpan.org/release/Net-Facebook-Oauth2 <Files *.pl> <Files *.pl> FastCGI support Support FastCGI "admin0\@global.virt" : $uid "admin0\@global.virt" : $uid https://auth.sso.sbay.org/ https://auth.sso.sbay.org/ User is redirected on protected application, with his new cookie L'utilisateur est redirigé vers l'application demandée avec son nouveau cookie CAS authentication will automatically add a logout forward rule on CAS server logout URL in order to close CAS session on LL::NG logout. L'authentification CAS ajoute automatiquement une règle de renvoi après déconnexion sur l'URL de déconnexion du serveur CAS afin de clore la session CAS lors de la déconnexion LL::NG. By default, Tomcat provides a file called users.xml to manage authentication: Par défaut, Tomcat fournit un fichier nommé users.xml pour gérer l'authentification : Handler Agent (Handler) Register partner Service Provider on LemonLDAP::NG Enregistrer le fournisseur de service dans LemonLDAP::NG Press Presse customhead.tpl : HTML header markups (like CSS, js inclusion) customhead.tpl : en-têtes HTML (tels les inclusions CSS, js) # Uncomment this to activate status module # Uncomment this to activate status module ../media/logos/sgs_white_small.jpg ../media/logos/sgs_white_small.jpg /_detail/logos/logo_bpi.png?id=references /_detail/logos/logo_bpi.png?id=references [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 ../../../documentation/1.4/logoutforward.html ../../../documentation/1.4/logoutforward.html Using Apache::Session::Browseable::MySQL (recommended for best performances) Utiliser Apache::Session::Browseable::MySQL (recommandé pour de meilleures performances) /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots PREFIX: installation directory (default: /usr/local) PREFIX : répertoire d'installation (défaut : /usr/local) Architecture Architecture Logout Déconnexion Force port in redirection Force le port dans les redirections This mechanism can be used to secure access for remote servers that cross an unsecured network to access to LL::NG databases. Ce mécanisme peut être utilisé pour sécuriser l'accès des serveurs distants qui traversent des réseaux non sécurisés pour accéder aux bases de données de LL::NG. Protect the Manager Protéger le manager Authentication level Niveau d'authentification documentation:1.1:upgrade documentation:1.1:upgrade These options are only here to override default values. Ces options ne sont à utiliser que pour surcharger les valeurs par défaut. ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/applications/zimbra.html ../pages/documentation/1.1/applications/zimbra.html Configuration can be stored in several formats (SQL, File, LDAP) but must be shared over the network if you use more than 1 server. La configuration peut être stockée sous plusieurs formats (SQL, File, LDAP) mais doit être partégée via le réseau si on utilise plus d'un serveur. For example, if you are using AD as authentication backend, you can use sAMAccountName for the Windows NameID format. Par exemple, si vous utilisez Active-Directory comme système d'authentification, vous pouvez utiliser sAMAccountName come format de NameID Windows. You can choose other Makefile targets: On peut choisir d'autres cibles du Makefile : To do this, use the Manager, and go in Virtual Hosts branch. Pour ce faire, utiliser le manager, et aller dans la branche Virtual Hosts. getAttributes(cookieValue): get elements stored in session getAttributes(cookieValue) : retourne les éléments stockés dans la session passwordDB passwordDB insert a loop around the HTML printing, starting with the object creation (→new) insérer une boucle autour de l'affichage HTML, démarrant avec la création de l'objet (→new) To create a variable, you've just to map a user attributes in LL::NG using Variables » Exported variables. Pour créer une variable, il faut simplement associer des attributs utilisateurs dans LL::NG en utilisant Variables » Variables exportées. ../../../media/icons/gpg.png ../../../media/icons/gpg.png Storage Stockage Authorization is controlled only by Handlers. Les autorisations sont vérifiées seulement par les agents (handlers). Apache::Session Apache::Session CDBI / RDBI CDBI / RDBI If you are using packages, they should have done the upgrade process for you, but you can check here that all is in order. Lorsqu'on utilise les paquets, ils doivent faire d'eux-même la mise à jour, mais on peut vérifier ici que tout est en ordre. Identity provider proxy: LL::NG can be used as proxy translator between systems talking SAML, OpenID, CAS, … Proxy de fournisseurs d'identités : LL::NG peut être utilisé comme traducteur mandataire entre systèmes comprenant SAML, OpenID, CAS, … Error messages are defined in source code. Les messages d'erreur sont définis dans le code source. $mailR $mailR bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] Three options: Trois options : Since MySQL does not have always transaction feature, Apache::Session::MySQL has been designed to use MySQL locks. Comme MySQL ne dispose pas toujours de dispositif de transaction, Apache::Session::MySQL a été conçu en utilisant les verrous MySQL. <IfModule auth_kerb_module> <IfModule auth_kerb_module> notificationStorage notificationStorage Configure the access rules. Configurer les règles d'accès. Secure configuration access Securiser l'accès à la configuration Before installing the packages, install all dependencies. Avant d'installer les paquets, installer toutes les dépendances. LmCookieDomainToReplace: string to replace in Set-Cookie header LmCookieDomainToReplace : chaîne à remplacer dans l'en-tête Set-Cookie /_detail/icons/xfmail.png?id=contact /_detail/icons/xfmail.png?id=contact ../../../documentation/1.4/configlocation.html#apache ../../../documentation/1.4/configlocation.html#apache Chain: DBI chain, including database driver name and database name (for example: dbi:mysql:database=lemonldapng;host=localhost). Chaîne : chaîne DBI, contenant le nom de driver et le nom de la base de données (par exemple : dbi:mysql:database=lemonldapng;host=localhost). See how configure logging in Tomcat . Voir how configure logging in Tomcat . RPMs are available on the Download page. Les paquets RPM sont disponibles sur la page de téléchargement. ... </AttributeAuthorityDescriptor> ... </AttributeAuthorityDescriptor> //"userobm_archive" => , //"userobm_archive" => , See Debian Lenny upgrade. Voir la mise à jour de Debian Lenny. ../../documentation/1.4/browseablesessionbackend.html ../../documentation/1.4/browseablesessionbackend.html Portal checks authentication Le portail examine les données d'authentification PerlHeaderParserHandler My::Package   PerlHeaderParserHandler My::Package   See https://developers.facebook.com/apps on how to do that. Voir https://developers.facebook.com/apps pour en savoir plus. Regexp for password generation: Regular expression used to generate the password (default: [A-Z]{3}[a-z]{5}.\d{2}) Regexp pour la génération de mot-de-passe : expression régulière utilisée pour générer le mot-de-passe (défaut : [A-Z]{3}[a-z]{5}.\d{2}) Redirect on forbidden: use 302 instead 403 Redirections pour les accès interdits : utilise 302 au lieu de 403 Password backend Module de gestion de mots-de-passe Each field can be filled with static values or data from user's session. Chaque champ peut être construit avec des valeurs statiques ou des données issues de la session utilisateur. Resolution Rule: rule that will be applied to preselect an IDP for a user. Règle de résolution : règle à appliquer pour pré-sélectionner cet IDP. authldap authldap If not set, the secret token is calculated using the general encryption key. S'il n'est pas renseigné, le jeton secret est calculé en utilisant la clef de chiffrement générale. The plugin will check the REMOTE_USER environment variable to get the connected user. Ce plugin utilise la variable d'environnement REMOTE_USER pour récupérer le nom d'utilisateur connecté. ../../../media/documentation/manager-authchoice.png ../../../media/documentation/manager-authchoice.png Compatible password modification Compatibilité des modifications de mots-de-passe perl-Lemonldap-NG-Manager: CPAN - Manager modules perl-Lemonldap-NG-Manager : CPAN - modules manager This concerns all parameters for the Attribute Authority metadata section Ceci concerne tous les paramètres de la section « autorité d'attributs » des métadatas http://search.cpan.org/perldoc?Apache::Session::Redis http://search.cpan.org/perldoc?Apache::Session::Redis generic_sso generic_sso Common Domain Cookie is also know as WAYF Service. Le domaine commun de cookie est également connu comme service WAYF. http://vhost.example.com/appli1 http://vhost.example.com/appli1 http://vhost.example.com/appli2 http://vhost.example.com/appli2 Delete other session Efface les autres sessions (session unique par utilisateur) Contrary to multiple backend stacking, backend choice will present all available authentication methods to users, who will choose the one they want. Contrairement au dispositif de multiples backends, le dispositif de choix de backend présente à l'utilisateur toutes les méthodes d'authentification disponibles pour qu'il puisse choisir. documentation:1.4:safejail documentation:1.4:safejail You can configure here which field of LL::NG session will be associated to a NameID format. Vous pouvez indiquer ici l'attribut de session de LL::NG qui sera associé au format du NameID. Configuration of LemonLDAP::NG Configuration de LemonLDAP::NG Perl auto-protected CGI CGI aito-protégée Perl Filters Filters Name Nom //"userobom_phone2" => , //"userobom_phone2" => , https://developers.facebook.com/tools/explorer https://developers.facebook.com/tools/explorer ../pages/documentation/1.1/nosqlsessionbackend.html ../pages/documentation/1.1/nosqlsessionbackend.html logos:logo_bpi.png logos:logo_bpi.png user user ValveLemonLDAPNG.jar is created under /dist directory. ValveLemonLDAPNG.jar est créé dans le répertoire /dist. 2009 2009 Configuration is not saved if errors occur. La configuration n'est pas sauvée en cas d'erreur. Use “Active Directory” as authentication, userDB and passwordDBbackends, Utiliser “Active Directory” comme systèmes d'authentification, de gestion des utilisateurs et des mots-de-passe, ../media/logos/logo-ul.png ../media/logos/logo-ul.png stack several times the same module with a different name empiler plusieurs fois le même module avec un nom différent LemonLDAP::NG is used to protect access to intranet. LemonLDAP::NG est utilisé pour protéger l'accès à l'Intranet. LemonLDAP::NG provide a script that allows to edit configuration without graphical interface, this script is called lmConfigEditor and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme lmConfigEditor et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin : Edit /etc/fail2ban/jail.conf Editer /etc/fail2ban/jail.conf //"userobm_mail_perms" => , //"userobm_mail_perms" => , Sources are currently available on OW2. Les sources sont disponibles sur OW2. In Debian/Ubuntu, install the library through apt-get command Pour Debian/Ubuntu, installer la librairie via la commande apt-get You can also get the LemonLDAP::NG archive and make the package yourself: On peut également construire les paquets à partir de l'archive LemonLDAP::NG : Handler: Apache modules used to protect applications Agent (Handler): module Apache utilisé pour protéger les applications Easy to customize Facile à personnaliser icons:bug.png icons:bug.png http://search.cpan.org/perldoc?Apache::Session::Sybase http://search.cpan.org/perldoc?Apache::Session::Sybase references Références Mail content: Contenu du courriel : //"userobm_samba_home_drive" => , //"userobm_samba_home_drive" => , Go to Configuration » Authentication: Aller dans Configuration » Authentication: Protected sites: Sites protégés: http://auth.example.com/saml/singleSignOn http://auth.example.com/saml/singleSignOn Change configuration in lemonldap-ng.ini : Changer la configuration dans lemonldap-ng.ini : 2012 2012 2011 2011 Connection login Login de connexion auth.example.com: DNS of the portal auth.example.com : nom DNS du portail 2010 2010 uid: coudot uid: coudot <bean id="LemonLDAPNGFilter" class= "org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"> <bean id="LemonLDAPNGFilter" class= "org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"> Older versions Versions précédentes Authentication level: authentication level for this module Niveau d'authentification : niveau d'authentification pour ce module Now you have access to the SP parameters list. Il est ensuite possible d'accéder à la liste des paramètre du SP : Exemple with MySQL: Exemple avec MySQL : Key: application identifier Clef : identifiant d'application /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu "" : ($mail =~ /^([^@]+)/)[0] . "" : ($mail =~ /^([^@]+)/)[0] . Country Country Cookie name (optional): name of the cookie of primary portal, if different from secondary portal Nom du cookie (optionnel) : nom du cookie du portail primaire, s'il est différent de celui du portail secondaire xguimard xguimard Adapt session lifetime: session lifetime will be adapted from SessionNotOnOrAfter value found in authentication response. Adaptation de la durée de vie de la session : la durée de vie de la session sera adaptée sur la base de la valeur de SessionNotOnOrAfter dans les réponses d'authentification. You may rather use standards protocols like SAML, OpenID or CAS. Il est préférable d'utiliser des protocoles standards tels SAML, OpenID ou CAS. in the value field, set the field name. dans le champ valeur, mettre le nom du champ. Do not forget to add OBM in applications menu. Ne pas oblier d'ajouter OBM dans le menu des applications. Index Index Just remember its DN for LemonLDAP::NG configuration. Il faut juste retenir le DN pour la configuration de LemonLDAP::NG. Email Email Packages and archives Paquets et archives checkLogonHours($ssoLogonHours) checkLogonHours($ssoLogonHours) Example of a protected virtual host for a local application: Exemple d'hôte virtuel protégé pour une application locale : ../../documentation/1.4/variables.html ../../documentation/1.4/variables.html Macros Macros ../pages/documentation/1.1/configvhost.html ../pages/documentation/1.1/configvhost.html When Choice is selected for authentication, values for Users and Password modules are not used anymore. Lorsque Choice est selectionné pour l'authentification, les valeurs pour les modules utilisateur et mots-de-passe ne sont plus utilisées. To get more information on user (name, mail, etc.), you have to read HTTP headers. Pour obtenir plus d'information sur l'utilisateur (nom, adresse de courriel, etc...), il faut lire les en-têtes HTTP. documentation:1.4:authproxy documentation:1.4:authproxy See security chapter to learn more about writing good rules. Voir le chapître sécurité pour apprendre comment écrire de bonnes règles. de fr Another LL::NG system configured with SAML authentication Un autre système LL::NG configuré avec authentification SAML Issuer module (can be multivalued) Module fournisseur (peut-être multivalué) http://jira.ow2.org http://jira.ow2.org When LL::NG is configured as OpenID identity provider, users can share their authentication using [PORTAL]/openidserver/[login] where: Lorsque LL::NG est configuré en fournisseur d'identité OpenID, les utilisateurs peuvent partager leur authentification en utilisant [PORTAIL]/openidserver/[login] où : domain domain Users can see their own history in menu, if menu module Login history is enabled. Les utilisateurs peuvent voir leur historique dans le menu, si le module historique de connexion est activé. +30s: 30 seconds from session creation +30s : 30 secondes après la création de la session NoSQL (Redis) NoSQL (Redis) In Manager, go in General Parameters > Authentication modules and choose Choice for authentication. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Choice pour l'authentification. dn dn Handler performance Performance des agents (handlers) documentation/current/installdeb.html#llng_repository documentation/current/installdeb.html#llng_repository Then it creates the session (with attribute filter) Il crée la sessions (avec le filtre d'attributs) Access Control List Liste de contrôle d'accès Install rpm-build package Install rpm-build package One user by IP address: 2 users can not open a session with the same IP. Un utilisateur par adresse IP : 2 utilisateurs ne peuvent ouvrir de sessions avec la même adresse IP. ../../documentation/1.4/configlocation.html#portal ../../documentation/1.4/configlocation.html#portal ldapSetPassword ldapSetPassword skip: all is open! skip : tout est ouvert ! Easy import/export through LDIF files Import/export facilité via les fichiers LDIF dbi:mysql:dbname=sessions dbi:mysql:dbname=sessions Just run the tar command: Lancer implement la commande tar : name => foaf:name nom => foaf:name Syslog facility Facilité syslog Advanced Avancé You can then set the access rule. Définir ensuite les règles d'accès. Central Authentication Service Central Authentication Service quickstart Démarrage rapide en fr Tomcat Tomcat RPM RPM ldapGroupAttributeNameGroup ldapGroupAttributeNameGroup Liferay can use LL::NG as an SSO provider but you have to manage how users are created: Liferay peut utiliser LL::NG comme fournisseur SSO mais il faut gérer la création des comptes utilisateurs : Authentication module: SAML Module d'authentification : SAML Required : Requis : You can change this behavior and set a cookie duration, for example: On peut changer ce comportement et mettre une durée de vie, par exemple : And fill it: et le remplir : http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 limesurvey limesurvey /_detail/icons/tux.png?id=contact /_detail/icons/tux.png?id=contact Require old password: used only in the password changing module of the menu, will check the old password before updating it Exige l'ancien mot-de-passe : utilisé seulement dans le module de changement du mot-de-passe du menu, vérifie l'ancien mot-de-passse avant de le changer Dokuwiki local configuration Configuration locale Dokuwiki .css: CSS (styles) .css: CSS (styles) to the configuration backend au système de stockage de la configuration Authentication Authentification Date of validation of the notification id Date de validation de la notification id Fields: Champs : Manager skin Thème du manager Enable Single Sign-On: check the box. Enable Single Sign-On: sélectionner. Zimbra preauthentication key Clef de pré-authentification Zimbra ../pages/documentation/1.1/applications/mediawiki.html ../pages/documentation/1.1/applications/mediawiki.html Configure Bugzilla virtual host like other protected virtual host. Configurer l'hôte virtuel Bugzilla comme n'importe quel autre hôte virtuel protégé. Exported variables Variables exportées ant ant LemonLDAP::NG Common Fichiers communs LemonLDAP::NG Edit the file “auth.conf”, for example: Éditer le fichier “auth.conf” de Sympa, par exemple : Choice modules Modules de "Choice" managerSkin managerSkin Here are some screenshots of 1.2 new features. Ici se trouvent quelques captures d'écran illustrant les nouvelles fonctionnalités de la version 1.2. mailCharset mailCharset It is a Single Sign On protocol similar to OpenID, but based on user email address rather than a URL. C'est un protocole d'authentification unique (Single Sign On) similaire à OpenID, mais basé sur l'adresse emailde l'utilisateur au lieu d'une URL. Multi CAS;LDAP Multi CAS;LDAP cfgNum int not null primary key, cfgNum int not null primary key, By default, you will have a manager virtual host define in configuration. Par défaut, il existe un hôte virtuel défini dans la configuration. LL::NG can use two tables: LL::NG peut utiliser deux tables : 0.9.4_application_menu.png 0.9.4_application_menu.png documentation:quickstart documentation:quickstart manager: parameters only for Manager manager : paramètres réservés au manager If they really do not please you, override them! S'ils ne conviennent pas, il peuvent être surchargés. //"userobm_mail_server_id" => , //"userobm_mail_server_id" => , ldap.auth.enabled=true ldap.auth.enabled=true It provides many features: Il fournit de nombreuses fonctionnalités : You should use an extended LDAP schema (or any users database extension), but this can works with standard attributes. Il est préférable d'utiliser un schéma LDAP étendu (ou toute extension de base de données utilisateur), mais ça peut fonctionner avec les attributs standard. Apache logging Journaux d'Apache Clément OUDOT's blog Blog de Clément OUDOT ../../css/screen.css ../../css/screen.css //"userobm_expresspostal" => , //"userobm_expresspostal" => , ipAddr ipAddr the manager (for internal use only) le manager (à usage interne seulement) yum install mod_auth_kerb yum install mod_auth_kerb { { DBI connection string Chaîne de connexion DBI To post user's password, you must enable password storing. Pour envoyer le mot-de-passe utilisateur, il faut activer le stockage du mot-de-passe. documentation:1.4:mrtg documentation:1.4:mrtg → You do not use the new configuration syntax for application list. → La nouvelle syntaxe de configuration de la liste des applications n'est pas utilisée. SREG permit the share of 8 attributes: SREG permet le partage de 8 attributs : LL::NG can also act as CAS server, that allows to interconnect two LL::NG systems. LL::NG peut également agir en serveur CAS, ce qui peut servir à connecter deux systèmes LL::NG. This mechanism allow to do SSO on application with an unsafe link between Handler and the application, but with a safe link with the Memcached server. Ce mécanisme permet de faire du SSO sur une application sans lien sécurisé entre l'agent et l'application, mais avec un lien sûr avec le serveur Memcached. Example 2: single table Example 2: single table http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous As this may be a security hole, password store in session is not activated by default Comme ce peut être un trou de sécurité, ce stockage en session n'est pas activé par défaut Liferay Liferay LL::NG can act as an OpenID 2.0 Server, that can allow to federate LL::NG with: LL::NG peut agir comme un serveur OpenID 2.0, ce qui permet de fédérer LL::NG avec : my $url = shift; my $url = shift; Choose DBI type (RDBI, CDBI or DBI) Choisir le type DBI (RDBI, CDBI or DBI) http://oss.oetiker.ch/mrtg/ http://oss.oetiker.ch/mrtg/ Easy to integrate Facile à intégrer You can use LemonLDAP::NG in an heterogeneous world: the authentication portal and the manager can work in any version of Apache even if mod_perl is not compiled, with ModPerl::Registry or not,… or behind any web server able to launch CGIs. On peut utiliser LemonLDAP::NG dans un monde hétérogène : le portail d'authentification et le manager peuvent fonctionner sur n'importe quelle version d'Apache même si mod_perl n'est pas compilé, avec ModPerl::Registry ou non,… ou derrière n'importe quel serveur apte à lancer des CGIs. Google proposes to allow applications to reuse its own authentication process using OpenID protocol (it means, if your are connected to Google, other applications can trust Google and let you in). Google propose d'autoriser les applications à réutiliser son propre processus d'authentification en utilisant le protocole OpenID (ce qui signifie que si on est connecté à Google, d'autres applications peuvent agréer Google et accepter l'utilisateur). documentation:liferay_4.png documentation:liferay_4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 dbiAuthTable dbiAuthTable You must provide a full URI (for example /skins/common/lemonldap-ng_square.png) and use HTTPS on the portal Il faut fournir une URI complète (par exemple /skins/common/lemonldap-ng_square.png) et utiliser HTTPS pour le portail SSLAuthnLevel SSLAuthnLevel storePassword storePassword ../documentation/current/start.html#authentication_users_and_password_databases ../documentation/current/start.html#authentication_users_and_password_databases Lyon Lyon Access rules values can be: Les valeurs des règles d'accès peuvent être : by IP par adresses IP ../../documentation/1.4/portal.html ../../documentation/1.4/portal.html Secret token: used to check integrity of OpenID response. Secret token : utilisé pour vérifier l'integrité des réponses OpenID. a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf _authChoice _authChoice ../../documentation/1.4/authdbi.html ../../documentation/1.4/authdbi.html 20090301000000Z 20090301000000Z You need to adapt some parameters: Certains paramètres doivent être adaptés : Deny from all Deny from all /_detail/icons/tutorials.png?id=documentation /_detail/icons/tutorials.png?id=documentation http://jira.ow2.org/browse/LEMONLDAP-176 http://jira.ow2.org/browse/LEMONLDAP-176 With aptitude Avec aptitude http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ Some-Thing Some-Thing Edit /etc/krb5.conf: Editer /etc/krb5.conf: OBM_USERPASSWORD OBM_USERPASSWORD http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://openid.net/specs/openid-authentication-1_1.html http://openid.net/specs/openid-authentication-1_1.html LDAP performances Performances LDAP Do not forget to save your changes! Ne pas oublier de sauvegarder les changements ! Login History Historique de connexion Secure Token expiration Expiration du jeton sécurisé /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword <Directory /usr/local/lemonldap-ng/htdocs/doc/> <Directory /usr/local/lemonldap-ng/htdocs/doc/> http://freeradius.org/mod_auth_radius/ http://freeradius.org/mod_auth_radius/ This is mandatory if you want to use an Apache authentication module, which is run by Apache before showing the LemonLDAP::NG portal page. Obligatoire toutefois si on veut utiliser un module d'authentification Apache, qui sont lancés par Apache avant d'afficher la page du portail LemonLDAP::NG. ../pages/documentation/1.1/mysqlminihowto.html ../pages/documentation/1.1/mysqlminihowto.html Authentication table: where login and password are stored La table d'authentification : où les logins and et mots-de-passe sont stockés As Handlers keep configuration in cache, when configuration change, it should be updated in Handlers. Comme les agents gardent leur configuration en cache, lorsque la configuration est changée elle doit être mise à jour dans les agents. REMOTE_USER environment variable (with local Handler or SetEnvIf trick) la variable d'environnement REMOTE_USER (avec un agent local ou une conversion SetEnvIf) //"userobm_samba_perms" => , //"userobm_samba_perms" => , //"userobm_kind" => , //"userobm_kind" => , Functions parameters: Paramètres de la fonction : zimbraSsoUrl zimbraSsoUrl Modify password if asked Modifie le mot-de-passe si demandé documentation:manager-saml-service-sp-ac.png documentation:manager-saml-service-sp-ac.png /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin The upgrade process will also have migrate old configuration files into /etc/lemonldap-ng/lemonldap-ng.ini. Le processus de mise-à-jour va également migrer les anciens fichiers de configuration dans /etc/lemonldap-ng/lemonldap-ng.ini. Opening conditions: rules which are evaluated before granting session. Conditions d'ouverture : règles à évaluer avant d'autoriser l'ouverture de session. http://code.google.com/p/redis/ http://code.google.com/p/redis/ Configure LemonLDAP::NG to use SOAP proxy mechanism Configurer LemonLDAP::NG pour utiliser le mécanisme mandataire SOAP http://auth.example.com/openidserver/foo.bar http://auth.example.com/openidserver/foo.bar echo "127.0.0.1 reload.example.com" >> /etc/hosts echo "127.0.0.1 reload.example.com" >> /etc/hosts documentation:1.4:parameterlist documentation:1.4:parameterlist To test this, you can build your own WebID certificate using one of : Pour tester ceci, on peut se construire son propre certificat WebID en utilisant au choix : http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng "userobm_lastname" => "HTTP_OBM_SN", "userobm_lastname" => "HTTP_OBM_SN", documentation:1.4:configlocation documentation:1.4:configlocation OpenID OpenID The AuthDemo and UserDBDemo will allow you to log in and get the standard attributes (uid, cn and mail). AuthDemo et UserDBDemo permettent de se connecter et d'avoir les attributs standards (uid, cn et mail). //"userobm_email_nomade" => , //"userobm_email_nomade" => , Password protected transport Transport protégé du mot-de-passe Upgrade Mise à jour How to choose? Comment choisir ? Internal Proxy Proxy interne CREATE TABLE notifications ( CREATE TABLE notifications ( The database username Le login de la base de données You can find all suitable information here: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html Les informations appropriées se trouvent ici : http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html mailConfirmSubject mailConfirmSubject ../../documentation/1.4/mrtg.html ../../documentation/1.4/mrtg.html /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Session explorer will not work L'explorateur de session ne fonctionne pas https://metacpan.org/module/Web::ID::Certificate::Generator https://metacpan.org/module/Web::ID::Certificate::Generator This can be useful to allow an third party application to access a virtual host with users credentials by sending a Basic challenge to it. Ce peut être pratique pour autoriser une application cliente à accéder à un hôte virtuel avec un authentifiant en envoyant un en-tête basique. Download Téléchargement LL::NG rely on a session mechanism with the session ID as a shared secret between the user (in SSO cookie) and the session database. LL::NG utilise un mécanisme de session basé sur un identifiant de session secret partagé entre l'utilisateur (dans un cookie SSO) et la base des sessions. ... </EntityDescriptor> ... </EntityDescriptor> This is not the case of Memcached for example. C'est par exemple le cas de Memcached. ../../../media/documentation/manager_access_rule.png ../../../media/documentation/manager_access_rule.png JSON JSON LL::NG try to find the user in users database with the given information LL::NG tente de trouver l'utilisateur dans la base de données avec l'information donnée ../media/icons/tutorials.png ../media/icons/tutorials.png screenshots:1.1:mailreset:mailreset_step1.png screenshots:1.1:mailreset:mailreset_step1.png pages/documentation.html pages/documentation.html Portal (pastel theme) Portail (thème pastel) ../../documentation/1.4/safejail.html ../../documentation/1.4/safejail.html SSLVar SSLVar Try also to create a global notification (to the uid “allusers”), and connect with any user, the message will be prompted. Essayer alors de créer une notification globale (à l'utilisateur “allusers”), et se connecter avec n'importe quel compte, le message sera affiché. Path: keep ^/saml/ unless you have change SAML end points suffix in SAML service configuration. Chemin : laisser ^/saml/ sauf si les suffixes des points d'accès SAML ont été modifiés sans la configuration du service SAML. Deny from all Deny from all Memcached servers Serveurs memcached documentation:dia_dit_roles.png documentation:dia_dit_roles.png This parameter is used by SAML IDP to fill the authentication context in authentication responses. Ce paramètre est utilisé par l'IdP SAML pour renseigner le contexte d'authentification dans les réponses. condition: condition to display the notification, can use all session variables. condition : condition pour afficher la notification, peut utiliser toutes les variables de session. # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection casStorage casStorage Use Safe Jail Utiliser la cage sécurisée URI of the page which receive POST data (optional if it is the same as the page holding the form) L'URI de la page qui reçoit les données POST (optionnel s'il s'agit de la même que celle qui héberge le formulaire) yum install perl-Authen-Radius yum install perl-Authen-Radius → The configuration cannot be loaded. → La configuration ne peut être chargée. You need to get a preauth key from Zimbra server. Il est nécessaire de récupérer une clef de pré-authentification auprès du serveur Zimbra. Specific default values for filters to match AD schema Valeurs spécifiques par défaut des filtres pour correspondre au schéma AD ... </SPSSODescriptor> ... </SPSSODescriptor> "userobm_service" => "HTTP_OBM_OU", "userobm_service" => "HTTP_OBM_OU", /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay As DBI is a login/password based module, the authentication level can be: Comme DBI est un module de type login/mot-de-passe, le niveau d'authentification peut être : Région Basse-Normandie Région Basse-Normandie Handler stores user data in its cache Il stocke ces données dans son cache documentation/conferences.html documentation/conferences.html To do it, uncomment the NameVirtualHost line in /etc/httpd/conf.d/z-lemonldap-ng-handler.conf: Pour ce faire, décommenter la ligne NameVirtualHost dans /etc/httpd/conf.d/z-lemonldap-ng-handler.conf : http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html You will need to install a Dokuwiki plugin, available on download page. Il faut installer le plugin Dokuwiki disponible sur la page de téléchargement. Use it Les utiliser Datas concerning the first connection to the portal Données concernant la première connexion au portail value valeur ../pages/documentation/1.4/authradius.html ../pages/documentation/1.4/authradius.html accordeon_dark.png accordeon_dark.png Variable name Nom de Variable Authentication table: authentication table name Table d'authentification : nom de la table d'authentification Configure user and password Configurer le nom de compte et le mot-de-passe Cookie expiration Expiration du cookie http://perldoc.perl.org/MIME/Base64.html http://perldoc.perl.org/MIME/Base64.html The authentication level given to users authenticated with this module. Le niveau d'authentification accordé aux utilisateurs authentifiés par ce module. ../documentation/current/installdeb.html ../documentation/current/installdeb.html Ministère de la Justice Ministère de la Justice User tries to access a protected application in a different domain L'utilisateur tente d'accéder à une application protégée d'un autre domaine Handler: user is redirected if he has no SSO cookie (or in CDA mode) les agents (handlers) : l'utilisateur y est redirigé s'il n'a pas de cookie SSO (ou en mode CDA) KrbServiceName HTTP/auth.example.com KrbServiceName HTTP/auth.example.com print '<a href="http://test3.example.com/">click here</a>'; } print '<a href="http://test3.example.com/">click here</a>'; } /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki NameID format: force NameID format here (email, persistent, transient, etc.). Format du NameID : force le format du NameID (email, persistent, transient, etc.). Prerequisites and dependencies Pré-requis et dépendances ../../documentation/1.4/start.html#configuration_database ../../documentation/1.4/start.html#configuration_database SQL session backend Backend de sessions SQL Statistics are displayed when calling the status path on an Handler (for example: http://test1.example.com/status). Les statistiques sont affichées lors des appels au chemin du statut sur un agent (par exemple : http://test1.example.com/status). require Lemonldap::NG::Portal::Menu; require Lemonldap::NG::Portal::Menu; [login] is the user login (or any other session information, see below) [login] est le nom de connexion (ou tout autre information de session, voir ci-dessous) XML menu configuration is deprecated. XML menu configuration is deprecated. login: $uid (uid of the user) login: $uid (uid de l'utilisateur) A value Une valeur Else, you will lock access to Manager and will never access it anymore. Sinon, on risque de verrouiller l'accès au manager et ne plus pouvoir y accéder. In Manager, go in General Parameters > Authentication modules and choose Slave for authentication or users module. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Slave) pour les modules authentification ou utilisateurs. documentation:1.4:activedirectoryminihowto documentation:1.4:activedirectoryminihowto _passwordDB _passwordDB All fields name and values Tous les noms de champs et leurs valeurs LimeSurvey virtual host in Apache Hôte virtuel LimeSurvey dans Apache tree_light.png tree_light.png Documentation Documentation Functioning Fonctionnement start.html start.html SlideShare SlideShare The messages are stored with the levels : Les messages sont stockés avec les niveaux : See Twitter FAQ on how to do that:. Reportez-vous à la FAQ Twitter pour en savoir plus. id id Download the latest version: Télécharger la dernière version : Build cookie: build SSO cookies with session ID Construit les cookies: construit les cookies SSO avec l'identifiant de session Documentation below explains how set index on ipAddr and _whatToTrace; Adapt it to configure the index you need. La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace; à adapter pour configurer les index nécessaires. Virtual host in Apache Hôte virtuel dans Apache mrtg mrtg Regular expression for random password Expression rationnelle pour la génération aléatoire des mots-de-passe Create OBM virtual host (for example obm.example.com) in LL::NG configuration: Virtual Hosts » New virtual host. Créer l'hôte virtuel OBM (par exemple obm.example.com) dans la configuration LL::NG : Hôtes virtuels » Nouvel hôte virtuel. Goal But http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 Example for MySQL : Exemple pour MySQL : LockPassword LockPassword _session_id _session_id ../../documentation/1.4/idpcas.html ../../documentation/1.4/idpcas.html # Best performance under ModPerl::Registry # Uncomment this to increase performance of Portal <Perl> # Meilleures performances sous ModPerl::Registry # A décommenter pour augmenter les performances du portail <Perl> Video Vidéo See full parameters list Voir la liste complète des paramètres Spring Security is the new ACEGI name. Spring Security est le nouveau nom d'ACEGI. LL::NG can easy talk to other authentication systems using SAML, OpenID, CAS. LL::NG peut aisément dialoguer avec d'autres systèmes d'authentification en utilisant SAML, OpenID, CAS. By default, DNS domain is example.com. Par défaut, le domaine DNS est example.com. This documentation explains how configure SAML service in LL::NG, in particular: Cette documentation explique comment configurer le service SAML dans LL::NG, en particulier : ../../../media/screenshots/1.1/mailreset/mailreset_step1.png ../../../media/screenshots/1.1/mailreset/mailreset_step1.png dirName dirName Password: where change the password Mots-de-passe: où changer les mots-de-passe Name: display text Nom : texte à afficher Configuration backend Stockage de la configuration Open links in new window Ouvre les liens dans une nouvelle fenêtre ../../documentation/1.4/installtarball.html ../../documentation/1.4/installtarball.html You can choose to install only one component by choosing the package lemonldap-ng-portal, lemonldap-ng-handler or lemonldap-ng-manager. On peut n'installer qu'un seul composant en choisissant le paquet lemonldap-ng-portal, lemonldap-ng-handler ou lemonldap-ng-manager. Date of birth Date of birth samlStorageOptions samlStorageOptions useRedirectOnError useRedirectOnError This attribute is set by LemonLDAP::NG when password was reset by mail and the user choose to generate the password (default: enabled). Cet attribut est activé par LemonLDAP::NG lorsque le mot-de-passe a été réinitialisé par mail et que l'utilisateur a choisi de générer le mot-de-passe (défaut : activé). %_topdir /home/user/build %dist .el5 %rhel 5 %_topdir /home/user/build %dist .el5 %rhel 5 This function is not compliant with Safe jail, you will need to disable the jail to use it. Cette fonction n'est pas compatible avec la cage saine, il faut désactiver la mise en cage. <role rolename="tomcat"/> <role rolename="tomcat"/> ../pages/documentation/1.1/sqlsessionbackend.html ../pages/documentation/1.1/sqlsessionbackend.html Xavier GUIMARD: historic project leader, developer, Debian packager, administrator of big Lemonldap::NG instances Xavier GUIMARD : Leader historique du projet, developpeur, empaqueteur Debian, administrateur de grosses installations de Lemonldap::NG ../../documentation/1.4/mysqlminihowto.html ../../documentation/1.4/mysqlminihowto.html ../pages/documentation/1.4/fastcgi.html ../pages/documentation/1.4/fastcgi.html Logout user from current application and redirect it to the menu Déconnecte l'utilisateur de l'application courante et le redirige vers le menu /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla etc. etc... Development Développement mailTimeout mailTimeout accordeon_light.png accordeon_light.png This How To explains how change this default behavior to protect Manager with other rules. Ce document explique comment changer ce comportement par défaut pour protéger le manager avec d'autres règles. yubikeyAuthnLevel yubikeyAuthnLevel ServerName test2.example.com   ServerName test2.example.com   LWP::UserAgent LWP::UserAgent icons:xfmail.png icons:xfmail.png But sometimes other data are needed (in particular to use extended functions): Parfois d'autres données sont nécessaire (en particulier pour utiliser les fonctions étendues): Bugzilla virtual host in Apache Hôte virtuel Apache hébergeant Bugzilla If you are protecting Drupal with LL::NG as reverse proxy, convert header into REMOTE_USER environment variable. Si Drupal est protégé par un reverse-proxy LL::NG, convertir l'en-tête en variable d'environnement REMOTE_USER. For example: Par exemple : ../../documentation/1.4/logoutforward.html ../../documentation/1.4/logoutforward.html Allow only admin and superadmin roles Autorisé seulement pour les rôles admin et superadmin Get the packages Obtenir ces paquets /_detail/screenshots/1.0/pastel/menu.png?id=screenshots /_detail/screenshots/1.0/pastel/menu.png?id=screenshots logos:sgs_white_small.jpg logos:sgs_white_small.jpg notificationStorageOptions notificationStorageOptions /_detail/logos/logo-ul.png?id=references /_detail/logos/logo-ul.png?id=references http://portal/index.pl/sessions http://portal/index.pl/sessions Go to the Manager and create a new virtual host for phpLDAPadmin. Aller dans le manager et créer un nouvel hôte virtuel pour phpLDAPadmin. SSLOptions: set to +StdEnvVars to get certificate fields in environment variables SSLOptions : mettre à +StdEnvVars pour obtenir les champs du certificat dans les variables d'environnement In Manager, go in General Parameters » Authentication modules and choose Remote for authentication and users. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Remote pour les modules authentification et utilisateurs. User backend Module utilisateurs Download the plugin and copy the files in dokuwiki inc/auth/ directory: Télécharger le plugin et le copier dans le répertoire dokuwiki inc/auth/ : You can modify location of default storage configuration file in configure target: On peut modifier l'emplacement du fichier de configuration du stockage par défaut dans la cible configure : http://httpd.apache.org/docs/2.2/mod/core.html#loglevel http://httpd.apache.org/docs/2.2/mod/core.html#loglevel The access to phpLDAPadmin will be protected by LemonLDAP::NG with specific access rules. L'accès à phpLDAPadmin sera protégé par LemonLDAP::NG avec une règle particulière d'accès. Besides, macros and groups are computed in alphanumeric order, that is, in the order they are displayed in the manager. Egalement, les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Lemonldap::NG::Portal::SharedConf->compile( Lemonldap::NG::Portal::SharedConf->compile( If you configure form replay with LL::NG, the Handler will catch configured POST URL and send a POST query to the target page (which can be different of the caught page). En configurant le rejeu de formulaire avec LL::NG, l'agent intercepte les URL configurées et envoie une requête POST à la page cible (qui peut être différente de la première). http://search.cpan.org/perldoc?DBI http://search.cpan.org/perldoc?DBI zimbraAccountKey zimbraAccountKey ../../documentation/1.4/ldapconfbackend.html ../../documentation/1.4/ldapconfbackend.html Authentication portal Portails d'authentification Use SOAP for Lemonldap::NG sessions Utiliser SOAP pour les sessions Lemonldap::NG Not shareable between servers except if used in conjunction with SOAP configuration backend or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le backend de configuration SOAP ou un système de partage de fichiers (NFS,…). <Location /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </Location> <Location /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </Location> documentation:1.4:filesessionbackend documentation:1.4:filesessionbackend Disabling Safe jail Désactiver la cage sécurisée See Apache::Session::Memcached for optional parameters. Voir Apache::Session::Memcached pour les paramètres optionnels. SAP SAP CAS_authnLevel CAS_authnLevel When you use SOAP sessions backend, it is recommended to use read-only URL (http://portal/index.pl/sessions). Lorsqu'on utilise le backend de session SOAP, il est recommandé d'utiliser l'URL en lecture seule (http://portal/index.pl/sessions). Logout rule: catch OBM logout Règle logout : intercepter la déconnexion OBM <EntityDescriptor entityID="http://auth.example.com/saml/metadata"> <EntityDescriptor entityID="http://auth.example.com/saml/metadata"> Searched attributes: name(s) of the attribute storing the name of the group, spaces separated (default: cn). Attributs recherchés : nom(s) de l'attribut stocké dans le nom du groupe, séparés par des virgules (défaut: cn). /_detail/logos/logo_abuledu.png?id=references /_detail/logos/logo_abuledu.png?id=references And the mail filter is: Et le filtre d'adresse mail est : If so, you can redirect users to a HTML page that explain that it is safe to close browser after disconnect. Dans ce cas, il faut rediriger les utilisateurs vers une page HTML qui explique qu'il est préférable de clore son navigateur après déconnexion. Connection between Linux and Active Directory - method 2 Connexion entre Linux et Active Directory - méthode 2 Access control policy: define if access control should be done on CAS service. Politique de contrôle d'accès : definit si le contrôle d'accès doit être fait sur le service CAS. ../../../media/documentation/lasso.png ../../../media/documentation/lasso.png CAS server URL URL du serveur CAS Identity provider: LL::NG is able to provide identity service using: Fournisseur d'identité : LL::NG peut fournir un service d'identité en utilisant : AuthBasic Handler Agent AuthBasic singleUserByIP singleUserByIP You need Auth::Yubikey_WebClient package. Le paquet Auth::Yubikey_WebClient est nécessaire. # SOAP functions for configuration access (disabled by default) <Location /index.pl/config> # SOAP functions for configuration access (disabled by default) <Location /index.pl/config> Connection between Linux and Active Directory - method 1 Connexion entre Linux et Active Directory - méthode 1 Use comment to correct this: Utiliser des commentaires pour corriger ça : Application Programming Interface Interface de programmation SSLCACertificateFile: CA certificate to validate client certificates SSLCACertificateFile : certificat d'autorité pour valider les certificats clients http://www.yubico.com http://www.yubico.com field champ Cross Domain Authentication Authentification inter-domaines kinit ssokerberos@EXAMPLE.COM kinit ssokerberos@EXAMPLE.COM Imagine you've set your directory schema to store roles as values of ssoRoles, an attribute of the user. On suppose que le schéma d'annuaire a été prévu pour stocker les rôles comme valeur de ssoRoles, un attribut utilisateur. </Location> </Location> string chaîne APT-GET APT-GET Edit Dokuwiki local configuration (conf/local.php) and set lemonldap as authentication type: Éditer la configuration locale Dokuwiki (conf/local.php) et indiquer lemonldap comme type d'authentification : LockDataSource LockDataSource rtyler@badwolf.org rtyler@badwolf.org Other parameters Autres paramètres Auth-Cn: $cn Auth-Cn: $cn Integrating applications in LL::NG is easy since its dialog with applications is based on customizable HTTP headers. Integrer des applications dans LL::NG est facile car leur dialogue est basé sur des en-têtes HTTP personnalisables. Exported variables are the variables available to write rules and headers. Les variables exportées sont des variables disponibles pour écrire des règles d'accès et des en-têtes. ~7500 ~7500 The location URL end is based on the service_id defined in Sympa apache configuration. La fin de l'URL est construite à partir du service_id defini dans la configuration Apache de Sympa. Header for user login: header that contains the user main login En-tête identifiant l'utilisateur : en-tête contenant le nom de connexion http://www.yubico.com/yubikey http://www.yubico.com/yubikey Other components needs just a read access. Les autres composants n'ont besoin que d'un accès en lecture. With RPM Avec RPM KrbVerifyKDC Off KrbVerifyKDC Off Reset password by mail Réinitialisation des mots-de-passe par courriel Session Session cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots Example: interoperability between 2 organizations Exemple : interoperabilité entre 2 organisations Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' http://lanyrd.com/2011/rmll-2/sffqx/ http://lanyrd.com/2011/rmll-2/sffqx/ This requires to configure LL::NG as an SAML Identity Provider. Ceci nécessite de configurer LL::NG comme fournisseur d'identité SAML. Account type: for Zimbra this can be name, id or foreignKey (by default: id) Type de compte : pour Zimbra, ce peut être name, id ou foreignKey (par défaut : id) Extended functions Fonctions étendues /_detail/icons/flags/fr.png?id=documentation%3Aconferences /_detail/icons/flags/fr.png?id=documentation%3Aconferences http://en.wikipedia.org/wiki/OAuth2 http://en.wikipedia.org/wiki/OAuth2 When receiving the request, the real authentication context will be mapped ton an internal authentication level (see how configure the mapping), that you can check to allow or deny session creation. À la réception de la requête, le contexte d'authentification réel est traduit en un niveau d'authentification interne (voir comment configurer la translation), utilisable pour accorder ou non la création de session. Liferay is an enterprise portal. Liferay est un portail d'entreprise. sn sn No IRC client? Pas de client IRC ? One remote portal that delegates authentication to the second organization (just an other file on the same server) Un portail distant qui délègue l'authentification à la seconde organisation (juste un autre fichier sur le même serveur) Sessions timeout: Maximum lifetime of a session. Durée de vie maximale des sessions : durée de vie maximale des sessions. ../../../../media/applications/mediawiki_logo.png ../../../../media/applications/mediawiki_logo.png mailreset_step3.png mailreset_step3.png documentation:1.4:applications documentation:1.4:applications css/print.css css/print.css The Manager let you define comments in rules, to order them: Le manager permet de définir des commentaires de règles, ce qui permet de les ordonner : ../pages/documentation/1.1/installrpm.html ../pages/documentation/1.1/installrpm.html Databases Bases de données The reload target is managed in Apache configuration, inside a virtual host protected by LemonLDAP::NG Handler, for example: La cible reload est gérée dans la configuration d'Apache, dans un hôte virtuel protégé par LemonLDAP::NG Handler, par exemple: AbulEdu AbulEdu Create user and role: Créer un utilisateur et un rôle : ../../documentation/1.4/sessions.html ../../documentation/1.4/sessions.html In other cases which result on impossibility to authenticate user, to retrieve data or to create a session, nothing is stored. Dans les autres cas résultant de l'impossibilité d'authentifier l'utilisateur ou de récupérer les données pour créer la session, rien n'est stocké. index/alphabetical.html index/alphabetical.html Secure reverse-proxies Securiser les proxies inverses Friendly Name: optional, SAML attribute friendly name. Nom alternatif: optionnel, nom alternatif de l'attribut SAML. documentation:1.4:portalmenu documentation:1.4:portalmenu Enable LL::NG sites Activer les sites LL::NG loginHistory loginHistory Zimbra virtual host in Apache Hôte virtuel Zimbra dans le manager //"userobm_vacation_datebegin" => , //"userobm_vacation_datebegin" => , For now, ldapgroups contains “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” Pour l'instant, ldapgroups contient “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” exportedAttr exportedAttr coudot@example.com coudot@example.com ../../../../media/documentation/liferay_1.png ../../../../media/documentation/liferay_1.png Configuration parameters are: Les paramètres de configuration sont : http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime <VirtualHost *> <VirtualHost *> This tutorial will guide you into a minimal installation and configuration procedure. Ce tutoriel vous guidera pour réaliser une installation et une configuration minimale. Note that if you use FastCGI, you must restart Apache to enable changes. Noter que si on utilise FastCGI, il faut redémarrer Apache pour activer les changements. LemonLDAP::NG configuration is stored in a backend that allows all modules to access it. La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder. In this case, authentication is not a response to an issued authentication request, and we have less control on conditions. Dans ce cas, l'authentification n'est pas une réponse à une requête d'authentification ce qui diminue les capacités de contrôle. MediaWiki virtual host in Manager Hôte virtuel Mediawiki dans le manager remember: '1' (checked box) remember: '1' (une case à cocher) Using LemonLDAP::NG with Active-Directory Utiliser Lemonldap::NG avec Active-Directory Want Authentication Request Signed: set to On to require that received authentication request are signed. Exiger des requêtes d'authentification signées : mettre à « activer » pour exiger de recevoir des requêtes d'authentification signées. deny deny documentation:1.4:writingrulesand_headers documentation:1.4:writingrulesand_headers Roles as entries in the directory Rôles comme entrée d'annuaire handlerauthbasic handlerauthbasic System Système $conf[authtype] = lemonldap; $conf[authtype] = lemonldap; The request on logout URL will be sent after user is disconnected, so you should unprotect this URL if it is protected by an LL::NG Handler. Cette requête vers l'URL de déconnexion est envoyée après la déconnexion de l'utilisateur, il faut donc déprotéger cette URL si elle est protégée par un agent LL::NG. mediawiki mediawiki ../pages/documentation/1.1/prereq.html ../pages/documentation/1.1/prereq.html Due to a conflict between LL::NG form replay and Apache mod_proxy (see issue), you cannot use form replay on proxied applications, unless you use LL::NG internal proxy: Suite à un conflit entre le rejeu de formulaires LL::NG et mod_proxy d'Apache (voir les problèmes), on ne peut utiliser le rejeu de formulaires sur des applications derrière un proxy sauf si on utilise le proxy interne de LL::NG : sympaMailKey sympaMailKey qw(delete header cache read_from_client cookie redirect unescapeHTML)); qw(delete header cache read_from_client cookie redirect unescapeHTML)); However, certificate will not be really validated by other SAML components (expiration date, common name, etc.), but will just be a public key wrapper. Toutefois, le certificat ne sera pas réellement validé par les autres composants SAML (date d'expiration, nom commun, etc.), mais simplement vu comme un conteneur de clef publique. Install it to trust RPMs: L'installer pour certifier les RPMs: Spring Security provides a default pre-authentication mechanism that can be used to connect your J2EE application to LL::NG. Spring Security fournit un mécansime de pre-authentification par défaut qui peut être utilisé pour connecter une application J2EE à LL::NG. Secondary portal check if remote session is available. Le portail secondaire vérifie que la session distante est valable. Web::ID::Certificate::Generator Web::ID::Certificate::Generator https://auth.abuledu.net/ https://auth.abuledu.net/ Attributes from user backend Attributs récupérés du module utilisateur install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) employeeNumber employeeNumber Register partner Identity Provider on LemonLDAP::NG Enregistrer le fournisseur d'identité partenaire dans LemonLDAP::NG ../../documentation/1.4/applications/zimbra.html ../../documentation/1.4/applications/zimbra.html Deny from all Deny from all ../../documentation/1.4/nosqlsessionbackend.html ../../documentation/1.4/nosqlsessionbackend.html zimbraUrl zimbraUrl Packages are available on the Download page. Les paquets sont disponibles sur la page de téléchargement. ../pages/documentation/1.1/changeconfbackend.html ../pages/documentation/1.1/changeconfbackend.html "userobm_datebegin" => "HTTP_OBM_DATEBEGIN", "userobm_datebegin" => "HTTP_OBM_DATEBEGIN", Session activity timeout requires Handlers to have a write access to sessions database. Le délai d'expiration des sessions nécessite que les agents aient un accès en écriture à la base des sessions. Display deleted sessions: display deleted sessions on authentication phase. Afficher les sessions effacées : affiche les sessions effacées lors de la phase d'authentification. To achieve this, follow these steps: Pour le réussir, suivre ces étapes : Restrict network access to the redis server. Restreignez l'accès réseau au serveur Redis. ../pages/documentation/1.4/authad.html ../pages/documentation/1.4/authad.html Allow from all Allow from all ../../documentation/1.4/configlocation.html#apache ../../documentation/1.4/configlocation.html#apache ../../../media/documentation/manager-saml-idp-metadata.png ../../../media/documentation/manager-saml-idp-metadata.png yubikeyClientID yubikeyClientID dbiTable dbiTable RPM bundle Paquets RPM Active Directory Active Directory documentation:configuration-ldap.png documentation:configuration-ldap.png Google+ Google+ If this regex matches, the line is ignored. Si cette expression régulière correspond, la ligne est ignorée. You have to run this command on Active Directory: Il faut lancer cette commande dans Active Directory: LemonLDAP::NG is highly scalable, so easy to insert behind a load-balancer: LemonLDAP::NG est hautement scalable, donc facile à insérer derière un répartisseur de charge : Core team Équipe prinicpale ../pages/documentation/1.1/status.html ../pages/documentation/1.1/status.html Force UTF-8: this will force UTF-8 conversion of attributes values collected from IDP. Forcer l'UTF-8 : force la conversion UTF-8 des valeurs d'attributs collectées depuis l'IDP. ../documentation/current/authdemo.html ../documentation/current/authdemo.html LemonLDAP::NG configuration can be managed in a local file with INI format. La configuration LemonLDAP::NG peut être gérée par un fichier local au format INI. DirectoryIndex index.pl index.html DirectoryIndex index.pl index.html Comment Commentaire http://search.cpan.org/~mmims/Net-Twitter/ http://search.cpan.org/~mmims/Net-Twitter/ /_detail/icons/flags/fr.png?id=press /_detail/icons/flags/fr.png?id=press There are no global authorizations except the right to open a session in the portal. Il n'y a pas d'autorisation globale, à l'exception de la règle accordant l'ouverture de session dans le portail. Lanyrd Lanyrd If you use TLS, you can set any of the Net::LDAP start_tls() sub like ldap+tls://server/verify=none&capath=/etc/ssl. En utilisant TLS, il est possible d'utiliser toutes les options de la fonction start_tls() Net::LDAP telle ldap+tls://server/verify=none&capath=/etc/ssl. Logs settings Journalisation all together (based on user choice, rules, …) tous en même temps (basé sur le choix utilisateur, les règles, …) API client ID: API client ID from Yubico Identifiant client de l'API : identifiant client de l'API obtenu auprès de Yubico authopenid authopenid Not shareable between servers except if used in conjunction with SOAP session backend or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le backend de configuration SOAP ou un système de partage de fichiers (NFS,…). </property> </bean>   <security:authentication-manager alias="authenticationManager" /> </property> </bean>   <security:authentication-manager alias="authenticationManager" /> OpenLDAP schema Schéma OpenLDAP dbiAuthnLevel dbiAuthnLevel _user _user Allow from all Allow from all Lemonldap::NG::Portal Lemonldap::NG::Portal See performances to know how to use macros and groups in rules. Voir performances pour comprendre l'intérêt des macros et groupes dans les règles. Manager tree autoClose Auto-fermeture de l'arbre du manager ../../documentation/1.3/upgrade.html ../../documentation/1.3/upgrade.html You have to create the table by yourself: Il faut créer soi-même la table : "headers_map" => Array( "headers_map" => Array( ../pages/documentation/1.4/authbrowserid.html ../pages/documentation/1.4/authbrowserid.html Lock files are stored in another directory. Les fichiers verrous sont stockés dans un autre répertoire. a15a18c8bb17e6f67886a9af1898c018b9f5a072 a15a18c8bb17e6f67886a9af1898c018b9f5a072 Create a protocol proxy (SAML to OpenID, CAS to SAML ,…) Créer un proxy de protocoles (SAML vers OpenID, CAS vers SAML ,…) See Redis session backend. Voir backend de session Redis. documentation/current/prereq.html#apt-get documentation/current/prereq.html#apt-get contact contact Enable SSL in Apache Activer SSL dans Apache </IfModule> </IfModule> documentation:googleapps-ssoconfig.png documentation:googleapps-ssoconfig.png auto: display only if the user can access it auto : n'afficher que si l'utilisateur peut y accéder New window: open menu links in new window Nouvelle fenêtre : ouvre les liens du menu dans de nouvelles fenêtres ../../../documentation/1.4/writingrulesand_headers.html#headers ../../../documentation/1.4/writingrulesand_headers.html#headers Optional attributes: Attributs optionnels : ../../documentation/1.4/authradius.html ../../documentation/1.4/authradius.html Main DNS domain Domaine DNS principal These rules can be set trough Manager: General Parameters > Portal > Menu > Modules activation. Ces règles peuvent être modifiées via le manager : Paramètres généraux > Portail > Menu > Activation des modules. Frameworks Frameworks http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm //"userobm_web_all" => , //"userobm_web_all" => , 0 if not 0 sinon Yubikey public ID size Taille de l'ID public Yubikey The team L'équipe /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart managerTreeJqueryCss managerTreeJqueryCss Wordpress, GLPI, OBM, Dokuwiki, … Wordpress, GLPI, OBM, Dokuwiki, … LL::NG can restrict this: LL::NG peut restreindre cet usage : Auth-Cn Auth-Cn Users: will not collect any data (but you can still register environment variables in session) Utilisateurs : ne collecte aucune donnée (mais il est possible d'enregistrer des variables d'environement dans la session) If no binding defined, the default binding in IDP metadata will be used. Si aucune méthode n'est définie, la méthode par défaut des métadatas de l'IDP sera utilisée. LL::NG Manager has a session explorer module that can be used to browse opened sessions: Le gestionnaire de LL::NG dispose d'un explorateur de sessions qui peut être utilisé pour parcourir sessions ouvertes : You will configure Zimbra virtual host like other protected virtual host but you will use Zimbra Handler instead of default Handler. Configurer l'hôte virtuel Zimbra comme n'importe quel autre hôte virtuel protégé mais utiliser le handler Zimbra au lieu du handler par défaut. ../../documentation/1.4/idpsaml.html ../../documentation/1.4/idpsaml.html require valid-user require valid-user "userobm_zipcode" => "HTTP_OBM_POSTALCODE", "userobm_zipcode" => "HTTP_OBM_POSTALCODE", ../pages/documentation/1.1/ldapconfbackend.html ../pages/documentation/1.1/ldapconfbackend.html $auth_kind = 'LemonLDAP';   $lemonldap_config = Array( $auth_kind = 'LemonLDAP';   $lemonldap_config = Array( CAS attribute for login Attribut CAS pour le nom de connexion The DBI string La chaîne DBI using own database (LDAP, SQL, …) utilisant une base de données propre (LDAP, SQL, …) Zimbra account session key Clef de session de compte Zimbra ../../../../media/applications/liferay_logo.png ../../../../media/applications/liferay_logo.png Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Double cookie for single session: as same, two cookies are delivered, but only one session is written in session database Double cookie pour session unique : de même, deux cookies sont délivrés, mais une seule session n'est écrite dans la base de données ASF-WS ASF-WS phpLDAPadmin virtual host in Apache Hôte virtuel phpLDAPadmin dans le manager In Manager, go in General Parameters > Authentication modules and choose WebID for authentication module. Dans le manager, aller dans Paramètres generaux > Modules d'authentification et choisir WebID comme module d'authentication. CAS issuer Fourniture d'identité CAS documentation:1.4:applications:obm documentation:1.4:applications:obm AuthApache authentication Authentification AuthApache unicode2iso($name) unicode2iso($nom) Timestamp of last authentication time Date et heure (timestamp) de la dernière authentification ~3 ~3 ~5 ~5 YUM YUM Extracted certificate field: field of the certificate affected to $user internal variable Champ extrait du certificat : champ du certificat affecté à la variable interne $user Examples with a configured header named 'Auth-User': Exemples avec un en-tête configuré nommé 'Auth-User': Location: Access Point for SSO request. Location: Point d'accès pour les requêtes SSO. documentation:1.4:authopenid documentation:1.4:authopenid Mini howtos Mini howtos Screenshots Captures d'écran LDAP LDAP /_detail/logos/logo_linagora.png?id=references /_detail/logos/logo_linagora.png?id=references LL::NG can use federation protocols (SAML, CAS, OpenID) independently to: LL::NG peut utiliser des protocoles de fédération (SAML, CAS, OpenID) indépendamment pour : /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa Lemonldap::NG::Handler::SharedConf: No cookie found Lemonldap::NG::Handler::SharedConf: No cookie found # Uncomment this line if you use Lemonldap::NG menu # Décommentez cette ligne si vous utilisez le menu Lemonldap::NG ../../media/documentation/lemonldapng-sso.png ../../media/documentation/lemonldapng-sso.png iso2unicode iso2unicode → You use the Apache authentication backend, but Apache is not or bad configured (no REMOTE_USER send to LemonLDAP::NG). → Le backend d'authentification Apache est utilisé, mais Apache n'est pas ou mal configuré (la variable d'environnement REMOTE_USER n'est pas envoyée à LemonLDAP::NG). <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <title>You have new authorizations</title> <subtitle>Application 1</subtitle> <text>You have been granted to access to appli-1</text> <subtitle>Application 2</subtitle> <text>You have been granted to access to appli-2</text> <subtitle>Acceptation</subtitle> <check>I know that I can access to appli-1 </check> <check>I know that I can access to appli-2 </check> </notification> <notification uid="allusers" date="2009-01-27" reference="disclaimer" condition="$ipAddr =~ /^192/"> <title>This is your first access on this system</title> <text>Be a nice user and do not break it please.</text> <check>Of course I am not evil!</check> </notification> </root> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <title>Vous avez de nouvelles autorisations</title> <subtitle>Application 1</subtitle> <text>Vous êtes autorisé à accéder à appli-1</text> <subtitle>Application 2</subtitle> <text>Vous êtes autorisé à accéder à appli-2</text> <subtitle>Acceptation</subtitle> <check>Je reconnais savoir que je peux accéder à appli-1 </check> <check>Je reconnais savoir que je peux accéder à appli-2 </check> </notification> <notification uid="allusers" date="2009-01-27" reference="disclaimer" condition="$ipAddr =~ /^192/"> <title>Ceci est votre premier accès à ce système</title> <text>Soyez sage et ne le cassez pas.</text> <check>Bien sûr, je ne suis pas méchant !</check> </notification> </root> So he is “user” on application “BBB” and “admin” on application “AAA”. Ainsi, il est “user” sur l'application “BBB” et “admin” sur l'application “AAA”. Main features Fonctionnalités principales documentation:manager-saml-idp-list.png documentation:manager-saml-idp-list.png ../../documentation/1.4/activedirectoryminihowto.html ../../documentation/1.4/activedirectoryminihowto.html RBAC stands for Role Based Access Control. RBAC signifie contrôle d'accès basé sur les rôles (Role Based Access Control). IRC IRC 0_bad 0_bad require SOAP::Lite; </Perl> require SOAP::Lite; </Perl> It means that if you modify some settings here, you will have to share again the metadata with other providers. Ceci signifie que si vous modifiez quelque chose ici, vous devez ré-exporter les metadatas aux autres fournisseurs. convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini applications:phpldapadmin_logo.png applications:phpldapadmin_logo.png For application BBB: Pour l'application BBB : Notification format Format des notifications css/all.css css/all.css cd myskin ln -s ../pastel/*.tpl . cd myskin ln -s ../pastel/*.tpl . $_password $_password mailUrl mailUrl documentation:1.4:exportedvars documentation:1.4:exportedvars http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword References are listed in alphabetic order. Les références sont listées dans l'ordre alphabétique. Do this in the control panel or in the configuration file: Faire ceci dans le panneau de contrôle ou dans le fichier de configuration : authbasic authbasic icons:warehause.png icons:warehause.png # boolean macro isAdmin -> $uid eq 'foo' or $uid eq 'bar' # other macro displayName -> $givenName." ".$surName   # Use a boolean macro in a rule ^/admin -> $isAdmin # Use a string macro in a HTTP header Display-Name -> $displayName # macro booléenne isAdmin -> $uid eq 'foo' or $uid eq 'bar' # autre macro displayName -> $givenName." ".$surName   # Utiliser une macro booléenne dans une règle ^/admin -> $isAdmin # Utiliser une macro chaîne dans un en-tête HTTP Display-Name -> $displayName ../../documentation/1.4/memcachedsessionbackend.html ../../documentation/1.4/memcachedsessionbackend.html If your function is not compliant with Safe jail, you will need to disable the jail. Si la fonction n'est pas compatible avec la cage saine, il faut désactiver la mise en cage. Backend choice by users Backend choisit par l'utilisateur Data to store as REMOTE_USER (used also in Apache logs) Donnée à utiliser comme REMOTE_USER (également utilisée dans les journaux d'Apache) specification spécification An enterprise Google Apps account Un compte applicatif Google entreprise secret secret Just set the LL::NG Handler IP on this attribute in order to add more security. Indiquer seulement l'adresse IP du handler LL::NG dans cet attribut pour ajouter plus de sécurité. info for user actions info pour les actions utilisateurs documentation:1.4:notifications documentation:1.4:notifications Web based for normal users: Basé sur du web pour les utilisateurs normaux : /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal HTTPS: use https as protocol HTTPS : utilise https comme protocole This objectClass is included in every core schemas. Cet objectClass est inclus dans tous les schémas de base. Display: Affichage : DBI UserDB table Table UserDB DBI /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots install_manager_libs install_manager_libs See mod_proxy and mod_rewrite documentation for more about configuring Apache reverse-proxies. Voir les documentation de mod_proxy et mod_rewrite pour plus d'information sur la configuration du proxy inverse d'Apache. This can happend when you use lmConfigEditor or launch cron files with a different user than Apache process. Ceci peut arriver lorsqu'on utilise lmConfigEditor ou lorsqu'on lance les fichiers cron avec un utilisateur différent de celui du processus Apache. IBM Lotus iNotes IBM Lotus iNotes Sympa Handler parameters Paramètres du handler Sympa Joind.in Joind.in mailOnPasswordChange mailOnPasswordChange }, }, http://mail.ow2.org/wws/arc/lemonldap-ng-dev http://mail.ow2.org/wws/arc/lemonldap-ng-dev Syslog Syslog ../../documentation/1.4/start.html#sessions_database ../../documentation/1.4/start.html#sessions_database mailFrom mailFrom Password: Connection password Mot-de-passe : mot-de-passe du compte de connexion The difference with remote authentication is that the client will never be redirect to the main LL::NG portal. La différence avec l'authentification "Remote" est que le client n'est jamais redirigé vers le portail LL::NG principal. multi multi $uidR $uidR If secured cookie is enabled, the portal URL must be HTTPS. Si le cookie sécurisé est activé, l'URL du portail doit être en HTTPS. </Directory>   </Directory>   To change it: Pour le changer : ../pages/documentation/1.1/extendedfunctions.html ../pages/documentation/1.1/extendedfunctions.html Logs Journaux The LDIF view of such entry can be: La vue LDIF d'une telle entrée ressemble à : Menu modules activation rules les règles d'activation des modules du menu http://perldoc.perl.org/functions/join.html http://perldoc.perl.org/functions/join.html Password Mot-de-passe If you want to become member of LL::NG team ask to lemonldap-ng-dev@ow2.org. SI vous souhaitez devenir membre de l'équipe LL::NG demandez-le également à lemonldap-ng-dev@ow2.org. This script is called lemonldap-ng-cli and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: Ce script se nomme lemonldap-ng-cli et se trouve dans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin: //"userobm_hidden" => , //"userobm_hidden" => , First steps Premiers pas ../../documentation/1.4/applications/sympa.html ../../documentation/1.4/applications/sympa.html Configuration of Apache virtual host Configuration de l'hôte virtuel Apache http://search.cpan.org/perldoc?DBD::Oracle http://search.cpan.org/perldoc?DBD::Oracle for index.pl, set it in new(): pour index.pl, le mettre dans new() : ../../../media/applications/spring_logo.png ../../../media/applications/spring_logo.png Header En-tête Protect only the administration pages Protéger seulement la page d'administration faketicket: if the user has no access, a fake ticket is built, and the user is redirected to CAS service. faketicket : si l'utilisateur n'a pas accès, un faux ticket est construit, et l'utilisateur est redirigé vers le service CAS. /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps //"userobm_mobile" => , //"userobm_mobile" => , Tarball Archive documentation:1.4:applications:dokuwiki documentation:1.4:applications:dokuwiki You can add a link in application menu to display Google Apps to users. Il est possible d'ajouter un lien dans le menu application pour afficher Google Apps. http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz Hide old password in reset form Masquer l'ancien mot-de-passe dans le formulaire de réinitialisation userDB userDB documentation:1.0:ldapconfbackend documentation:1.0:ldapconfbackend /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml User found from login process Nom d'utilisateur trouvé dans le processus d'authentification aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) The normal portal has a link included in the authentication form pointing to the remote portal for the users of the other organization Le portail normal dispose d'un lien dans le formulaire d'authentification pointant vers le portail destiné aux utilisateurs de l'autre organisation Follow LDAP session backend doc Suivre la documentation backend de sessions LDAP ../../documentation/1.4/rbac.html ../../documentation/1.4/rbac.html Firefox has detected that the server is redirecting the request for this address in a way that will never complete Firefox has detected that the server is redirecting the request for this address in a way that will never complete Persistent: NameID is restored from previous sessions Persistent: le NameID est restoré depuis la session précédente ../../documentation/1.4/applications/phpldapadmin.html ../../documentation/1.4/applications/phpldapadmin.html The user will be redirected on portal URL with error in the lmError URL parameter. L'utilisateur sera redirigé vers l'URL du portail avec une erreur dans le paramètre lmError de l'URL. //"userobm_address3" => , //"userobm_address3" => , Test notification Tester les notifications In Manager, go in General Parameters > Authentication modules and choose CAS for authentication. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir CAS pour l'authentification. ../../../media/applications/glpi_logo.png ../../../media/applications/glpi_logo.png Then restart Apache. Redémarrer Apache ensuite. Note that this feature is interesting only for the Lemonldap::NG systems protecting a high number of applications Notez que cette fonctionnalité n'est intéressante que pour les systèmes Lemonldap::NG protégeant un grand nombre d'applications vi /root/SSOExtensions.pm vi /root/SSOExtensions.pm http://search.cpan.org/perldoc?CGI http://search.cpan.org/perldoc?CGI If not authenticated (or authentication is forced) try to find it (userDB module) and to authenticate it (auth module), create session, calculate groups and macros and store them. Si ce n'est pas le cas (ou si l'authentification est forcée) tente de le trouver (module userDB) et de l'authentifier (module d'authentification), crée la session, calcule les groupes et macros et les stocke General Parameters: authentication modules, portal, etc. Paramètres généraux : modules d'authentification, portail, etc... CDBI : very simple storage CDBI : stockage très simple Find other documentation on Firewall Services site. Une autre documentation est disponible sur Firewall Services site. documentation:1.4:idpopenid documentation:1.4:idpopenid portalmenu portalmenu How it works Fonctionnement http://auth.example.com/?logout=1 http://auth.example.com/?logout=1 In Manager, go in General Parameters > Authentication modules and choose Proxy for authentication and users. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Proxy pour les modules authentification et utilisateurs. http://lanyrd.com/2012/ow2-con12/scbcwz/ http://lanyrd.com/2012/ow2-con12/scbcwz/ To bypass this, follow the documentation of AuthApache module Pour outrepasser ceci, suivre la documentation du module AuthApache radiusServer radiusServer Apache::Session::Browseable::MySQL doesn't use locks so performances are keeped. Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances. RewriteRule ^/openidserver/.* /index.pl RewriteRule ^/openidserver/.* /index.pl To do this, go in Manager > General Parameters > Advanced Parameters > Security > Use Safe Jail and disable it. Pour ce faire, aller dans le manager > Paramètres généraux > Paramètres avancés > Sécurité > Utiliser la cage sécurisée et la désactiver. require_once("$IP/extensions/HttpAuthPlugin.php"); require_once("$IP/extensions/HttpAuthPlugin.php"); ../../documentation/1.4/authslave.html ../../documentation/1.4/authslave.html Add on your server.xml file a new valve entry like this (in host section): Ajouter dans le fichier server.xml une nouvelle valve comme ci-dessous (dans la section host): http://perldoc.perl.org/Safe.html http://perldoc.perl.org/Safe.html After logout process, the user is redirected on portal, or on a configured URL. Après déconnexion, l'utilisateur est redirigé vers une URL configurée ou vers le portail. See also Voir aussi OBM_GROUPS OBM_GROUPS Third step: provide the role to the application. Troisième étape : fournir le rôle à l'application. ../../documentation/1.4/soapservices.html ../../documentation/1.4/soapservices.html One standard portal Un portail standard It returns 1 if this match, 0 else. Elle retourne 1 si c'est bon, 0 sinon. Configure Liferay virtual host like other protected virtual host. Configurer l'hôte virtuel Liferay comme n'importe quel autre hôte virtuel protégé. To install them on system: Pour les installer sur le système : ../../documentation/1.4/soapsessionbackend.html ../../documentation/1.4/soapsessionbackend.html In Manager, go in General Parameters > Authentication modules and choose Facebook for authentication module. Dans le manager, allez dans Paramètres generaux > Modules d'authentification et choisissez Facebook comme module d'authentication. Twitter Twitter Password is not a common attribute. Le mot-de-passe n'est pas un attribut commun. caFile caFile /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/screenshots/1.0/pastel/portal.png?id=screenshots /_detail/screenshots/1.0/pastel/portal.png?id=screenshots ldapPort ldapPort DokuWiki is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. DokuWiki est un wiki simple et standard principalement destiné à la création de documents de toute nature. ldapRaw ldapRaw Exported variables in the Manager Variables exportées dans le manager sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl documentation:manager-formreplay-newdata.png documentation:manager-formreplay-newdata.png Perl Perl http://lanyrd.com/2012/solutionslinux/sryym/ http://lanyrd.com/2012/solutionslinux/sryym/ https://auth.example.com/ https://auth.example.com/ Installation on RedHat/CentOS Installation sur RedHat/CentOS [configuration] type = RDBI dbiChain = DBI:mysql:database=lemonldap-ng;host=1.2.3.4 dbiUser = lemonldap dbiPassword = password ; optional dbiTable = mytablename [configuration] type = RDBI dbiChain = DBI:mysql:database=lemonldap-ng;host=1.2.3.4 dbiUser = lemonldap dbiPassword = password ; optional dbiTable = mytablename Go to the Manager and create a new virtual host for Dokuwiki. Aller dans le manager et créer un nouvel hôte virtuel pour Dokuwiki. Option –enctypes requires msktutil > 0.4 L'option –enctypes requiert msktutil > 0.4 ../../../media/applications/sympa_logo.png ../../../media/applications/sympa_logo.png The LDAP schema extension can be used to store this value. L'extension de schéma LDAP peut être utilisée pour stocker cette valeur. CAS identity provider Fournisseur d'identité CAS Notification activation Activation des notifications mail mail New Service Provider Nouveau fournisseur de service To make the portal start faster when the server is relaunched, add those lines in Apache configuration file (as described in portal-apache2.conf): Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf): Display other sessions : display other sessions on authentication phase, with a link to delete them. Afficher les autres sessions : affiche les autres sessions ouvertes lors de la phase d'authentification avec un lien pour les effacer. Last name Nom When you know the key of the variable, you just have to prefix it with the dollar sign to use it, for example to test if uid variable match coudot : En connaissant le nom d'une variable, il suffit de la préfixer avec un signe dollar pour l'utiliser, par exemple pour savoir si la variable uid contient coudot : For application AAA: Pour l'application AAA : Crypt::OpenSSL::X509 Crypt::OpenSSL::X509 http://www.liferay.com/ http://www.liferay.com/ Key (LL::NG name) Clef (nom LL::NG) Order deny,allow Order deny,allow Upgrade to 1.0 Mise à jour vers la version 1.0 Upgrade to 1.1 Mise à jour vers la version 1.1 ../../../css/screen.css ../../../css/screen.css Upgrade to 1.2 Mise à jour vers la version 1.2 Upgrade to 1.3 Mise à jour vers la version 1.3 LemonLDAP::NG provides a proxy that can replace the use of Apache mod_proxy. LemonLDAP::NG fournit un proxy qui peut remplacer l'utilisation de mod_proxy d'Apache. "userobm_town" => "HTTP_OBM_L", "userobm_town" => "HTTP_OBM_L", The SP name is asked, enter it and click OK. Le nom de SP est demandé, entrer-le et cliquer sur OK. To use this feature only locally, edit lemonldap-ng.ini in section [all]: Pour utiliser cette fonctionnalité seulement localement, éditer lemonldap-ng.ini dans la section [all]: To configure sessions, go in Manager, General Parameters » Sessions: Pour configurer les sessions, aller dans le manager, Paramètres généraux » Sessions : ../media/logos/logo_rbn.png ../media/logos/logo_rbn.png it may be the backbone of a heterogeneous architecture. il peut être le pivot d'une architecture hétérogène. Go in Manager, General Parameters » Advanced Parameters » Custom functions and set: Aller dans le manager, Paramètres généraux » Paramètres avancés » Fonctions personnalisées et indiquer : Macros and groups are calculated during authentication process by the portal: Les macros et les groupes sont calculées pendant le processus d'authentification par le portail : Enable LL::NG sites in Apache: Activer les sites LL::NG dans Apache : [configuration] type = File dirName = /var/lib/lemonldap-ng/conf [configuration] type = File dirName = /var/lib/lemonldap-ng/conf userPivot userPivot A mail with a token is sent to user Un courriel avec une valeur est envoyé à l'utilisateur startTime startTime ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab globalStorage globalStorage This parameter is set by the portal and use javascript to get the connected user timezone. Ce paramètre est géré par le portail et utilise javascript pour obtenir le fuseau de l'utilisateur connecté. Remember to change the access rule in Manager virtual host to allow new administrators. Ne pas oublier de changer la règle d'accès à l'hôte virtuel du manager pour autoriser les nouveaux administrateurs. fullname fullname ../../documentation/1.4/configlocation.html ../../documentation/1.4/configlocation.html ../../../media/icons/neotux.png ../../../media/icons/neotux.png In Manager, go in General Parameters > Authentication modules and choose Database (DBI) for authentication, users and/or password modules. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir "base de données" (DBI) pour les modules authentification, utilisateurs et/ou mots-de-passe. Notifications system Systèmes de notification Then, go in Radius parameters: Ensuite, aller dans les paramètres Radius: if a user can access directly to the hidden application, it can bypass LL::NG protection Si un utilisateur peut accéder directement à l'application cachée, peut contourner la protection de LL::NG Then you got this value inside the Auth-Roles header: On les obtient dans l'en-tête Auth-Roles : applications:sympa_logo.png applications:sympa_logo.png Using notification system Utiliser le système de notification require Lemonldap::NG::Portal::SharedConf; require Lemonldap::NG::Portal::SharedConf; Skin rules Règle du thème /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots lemonldap-ng-testpage.png lemonldap-ng-testpage.png Sessions are stored using Apache::Session modules family. Les sessions sont stockées en utilisant les modules de la famille Apache::Session. ../pages/documentation/1.4/authfacebook.html ../pages/documentation/1.4/authfacebook.html The configuration is done in config.php: La configuration est effectuée via config.php: List: domains list (comma separated values) Liste : liste des domaines (séparés par des virgules) Backend Backend → When you upgrade from Debian Lenny with customized index.pl files, you must upgrade them. → Lors d'une mise à jour d'une Debian Lenny avec un fichier index.pl personnalisé, il faut le mettre à jour. http://sourcesup.cru.fr/projects/perlcas/ http://sourcesup.cru.fr/projects/perlcas/ Using this, we can do a very simple interoperability system between 2 organizations using two LL::NG structures: En utilisant ce système, on peut avoir une simple interopérabilité entre 2 organisations utilisant chacune leur système LL::NG : String::Random String::Random Authentication filter: Filter to find user from its login (default: (&(uid=$user)(objectClass=inetOrgPerson))) Filtre d'authentication : filtre pour trouver l'utilisateur à partir de son login (défaut : (&(uid=$user)(objectClass=inetOrgPerson))) High Availability Haute disponibilité reloadTime reloadTime If no proxied services defined, CAS authentication will not activate the CAS proxy mode. Si aucun service proxifié n'est défini, l'authentification CAS n'activera pas le mode proxy CAS. ../../../media/documentation/manager-formreplay-newdata.png ../../../media/documentation/manager-formreplay-newdata.png http://perldoc.perl.org/functions/exit.html http://perldoc.perl.org/functions/exit.html portalcustom portalcustom http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel CDA activation Activation du CDA Validation of the session: external user has now a local session Validation de la session : l'utilisateur externe dispose ainsi d'un session locale After configuring SAML Service, you can export metadata to your partner Identity Provider. Après avoir configuré le service SAML Service, exporter les metadatas vers le fournisseur d'identité partenaire. This mode allow to test LemonLDAP::NG without any third-party software. Ce mode permet de tester LemonLDAP::NG sans aucun autre programme tiers. Configuration is in /etc/lemonldap-ng La configuration se trouve dans /etc/lemonldap-ng Then, go in OpenID parameters: Ensuite, aller dans les paramètres OpenID : You can change the separator with the fileNameSeparator option, and set another value, for example @. On peut changer ce séparateur en changeant la valeur de l'option fileNameSeparator par exemple @. 'cache_root' => '/tmp',? 'cache_root' => '/tmp',? We suppose that LimeSurvey is installed in /var/www/html/limesurvey On suppose que LimeSurvey est installé dans /var/www/html/limesurvey Convert::PEM Convert::PEM Main parameters Paramètres principaux Then go in Manager, Virtual Hosts » virtualhost » Form replay and click on Add POST URL. Aller ensuite dans le manager, Hôtes virtuels » hôte virtuel » Rejeu de formulaires et cliquer sur Nouvelle URL POST. #perl_auto-protected_cgi #perl_auto-protected_cgi service_id lemonldapng service_id lemonldapng ldapgroups -> join(" ",($ldapgroups =~ /cn=(.*?),/g)) ldapgroups -> join(" ",($ldapgroups =~ /cn=(.*?),/g)) You can also configure the authentication level for this module. il est également possible de configurer le niveau d'authentification pour ce module. //"userobm_account_dateexp" => , //"userobm_account_dateexp" => , http://fedoraproject.org/wiki/EPEL/ http://fedoraproject.org/wiki/EPEL/ lemonldap_ng_session_explorer_1340022388573.png lemonldap_ng_session_explorer_1340022388573.png Create table: Créer la table: If no value, the default NameID format is Email. Si aucune valeur n'est indiquée, le format de NameID par défaut est Email. Form replay Rejeu de formulaires Manager theme Thème du manager AuthLDAPBindPassword "secret" AuthLDAPBindPassword "secret" Go to the Manager and create a new virtual host for MediaWiki. Aller dans le manager et créer un nouvel hôte virtuel pour Mediawiki. logos:logo-ul.png logos:logo-ul.png http://fr.lutece.paris.fr http://fr.lutece.paris.fr deny: nobody is welcomed deny: personne n'est autorisé SAML service configuration Configuration du service SAML Each SREG attribute will be associated to a user session key. Chaque attribut SREG est associé à une clef de session utilisateur. In Manager, go in General Parameters > Authentication modules and choose Yubikey for authentication module. Dans le manager, allez dans Paramètres generaux > Modules d'authentification et choisissez Yubikey comme module d'authentication. LimeSurvey configuration Configuration de LimeSurvey You can also add a condition. Il est possibe d'ajouter une condition. XSS attack detected XSS attack detected LinuxFR LinuxFR Standards attributes, like uid, cn or mail, are often enough to configure access rules and headers. Les attributs standards, tels uid, cn ou mail, sont souvent suffisant pour configurer les règles d'accès et en-têtes. CAS CAS //"userobm_nomade_perms" => , //"userobm_nomade_perms" => , ^/(css|js)/ ^/(css|js)/ SREG mapping: link between SREG attributes and session keys (see below). Associations SREG : liens entre les attributs SREG et les clefs de session (voir ci-dessous). ../../documentation/1.4/portalcustom.html#other_parameters ../../documentation/1.4/portalcustom.html#other_parameters For example, to send it in an header: Par exemple, pour l'envoyer dans un en-tête : GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout You only need a reload URL per physical servers, as Handlers share the same configuration cache on each physical server. Une URL par serveur physique est nécessaire, car les agents partagent le même cache de configuration pour chaque serveur physique. To change it, go in General Parameters > Advanced Parameters > Notifications > Wildcard for all users, and set for example alluserscustom. Pour le changer, aller dans Paramètres généraux > Paramètres avancés > Notifications > Carte blanche pour tous les utilisateurs, et mettre par exemple alluserscustom. Changing the domain value will not update other configuration parameters, like virtual host names, portal URL, etc. Changer la valeur du domaine ne met pas à jour les autres paramètres tels les noms d'hôtes virtuels, l'URL du portail, etc... tchemineau@example.com tchemineau@example.com # another HTML code } # autre code HTML } Menu modules Modules du menu LemonLDAP::NG 1.0 release Sortie de LemonLDAP::NG 1.0 Lemonldap::NG::Common Lemonldap::NG::Common You will need to collect all attributes needed to create a user in OBM, this includes: Il faut collecter tous les attributs nécessaires pour créer un compte OBM : Build cookie(s) Construit le ou les cookies Sybase Sybase Below are documented internal variables. Ci-dessous sont documentées les variables internes. Common Domain Cookie Domaine commun de cookie $_auth $_auth Configure Sympa virtual host like other protected virtual host but protect only magic authentication URL. Configurer l'hôte virtuel Sympa comme n'importe quel autre hôte virtuel protégé mais ne protéger que l'authentification magique. On Debian/Ubuntu: Sur Debian/Ubuntu : Security Sécurité ../../documentation/1.4/applications.html ../../documentation/1.4/applications.html Use our own Debian repository. Utiliser votre propre dépôt Debian. Requested authentication context: this context is declared in authentication request. Contexte d'authentification demandé : ce contexte est déclaré dans la requête d'authentification. /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic ../../documentation/1.4/prereq.html#yum ../../documentation/1.4/prereq.html#yum apply: reload URL for distant Hanlders apply : les URL de rechargement des agents distants The Manager displays main branches: Le manager affiche des branches principales : Kinematics Cinématique end: End date (GMT) end: date de fin (GMT) ../../../../media/applications/limesurvey_logo.png ../../../../media/applications/limesurvey_logo.png Manager: used to manage LemonLDAP::NG configuration and to explore sessions. Manager: utilisé pour gérer la configuration LemonLDAP::NG et explorer les sessions. Security Assertion Markup Language Security Assertion Markup Language See also general kinematics presentation. Voir aussi la présentation de la cinématique générale. portalOpenLinkInNewWindow portalOpenLinkInNewWindow High availability Haute disponibilité # DocumentRoot # DocumentRoot documentation:1.4:applications:limesurvey documentation:1.4:applications:limesurvey http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ applications:tomcat_logo.png applications:tomcat_logo.png ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../pages/documentation/1.1/resetpassword.html ../pages/documentation/1.1/resetpassword.html Hello <TMPL_VAR NAME="myparam">! Hello <TMPL_VAR NAME="myparam">! You need Net::Twitter package, with a very recent version (>3). Vous devez installer une version récente (>3) du paquet Net::Twitter. Extended attributes and object classes use this prefix: 1.3.6.1.4.1.10943.10.2. Les attributs étendus et classes d'objet utilisent ce préfixe : 1.3.6.1.4.1.10943.10.2. CAS Session backend options Options du module de stockage CAS Prepare the LDAP server and the LL::NG configuration file Préparer le serveur LDAP et le fichier de configuration LL::NG RMLL/LSM RMLL/LSM documentation:1.4:extendedfunctions ↵ documentation:1.4:extendedfunctions ↵ LL::NG provides a special function named basic to build this header. LL::NG fournit une fonction spéciale nommée basic pour construire cet en-tête. Example: http://auth.example.com Exemple: http://auth.example.com dbiUserChain dbiUserChain Double cookie Double cookie logos:logo_ministere_justice.jpg logos:logo_ministere_justice.jpg wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz You can now use your function in a macro, an header or an access rule, for example: Les fonctions peuvent être utilisées dans une macro, un en-tête ou une règle d'accès, par exemple: It will be prompted if you generate keys, else you can set it in the Private key password. Il vous sera demandé à la génération de la clef ou vous pouvez l'entrer dans le champ Mot-de-passe de la clef privée. Next run ant command: Lancer ensuite la commande ant : documentation:lemonldapng-sso.png documentation:lemonldapng-sso.png timeout timeout Main external databases are: Les principales bases de données externes sont : URL contains a non protected host URL contains a non protected host Redis session backend Module de stockage des sessions Redis It manages both authentication and authorization and provides headers for accounting. Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. VHOSTLISTEN: how listen parameter is configured for virtual hosts in Apache (default: *:80) VHOSTLISTEN : comment est configuré le paramètre d'écoute des hôtes virtuels dans Apache (défaut : *:80) CAS (authentication module) CAS (module d'authentification) You need Net::Facebook::Oauth2 package. La paquet Net::Facebook::Oauth2 est nécessaire. MRTG monitoring Supervision MRTG icons:flags:us.png icons:flags:us.png remoteCookieName remoteCookieName documentation:googleapps-menu.png documentation:googleapps-menu.png If Multi is used for authentication and user database, it will try to use the same module. Si Multi est utilisé pour l'authentification et la base utilisateurs, il essaiera d'utiliser le même module. ^/(?i)index.php\?.*access=admin ^/(?i)index.php\?.*access=admin Display: As Google Apps is not a protected application, set to On to always display it Display : comme Google Apps n'est pas une application protégée, indiquer On pour toujours l'afficher Offline Hors ligne http://www.slideshare.net/coudot/lemonldapng-un-websso-libre http://www.slideshare.net/coudot/lemonldapng-un-websso-libre /_detail/screenshots/1.0/dark/password.png?id=screenshots /_detail/screenshots/1.0/dark/password.png?id=screenshots "userobm_firstname" => "HTTP_OBM_GIVENNAME", // "userobm_title" => "HTTP_OBM_TITLE", "userobm_firstname" => "HTTP_OBM_GIVENNAME", // "userobm_title" => "HTTP_OBM_TITLE", This is a security point, to prevent someone to create a session by sending custom headers. Il s'agit d'un élément de sécurité pour éviter à quelqu'un de créer une session en envoyant des en-têtes personnalisés. SAML service configuration is a common step to configure LL::NG as SAML SP or SAML IDP. La configuration du service SAML est une étape commune pour configurer LL::NG comme fournisseur de service SAML (SP) ou fournisseur d'identité SAML (IDP). "userobm_phone" => "HTTP_OBM_TELEPHONENUMBER", "userobm_phone" => "HTTP_OBM_TELEPHONENUMBER", [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 $uid eq “root” $uid eq “root” ../../../documentation/1.4/configvhost.html ../../../documentation/1.4/configvhost.html Google Apps has a configuration parameter to redirect user on a specific URL after Google Apps logout (see Google Apps control panel). Google Apps ne dispose pas de paramètre de configuration pour rediriger les utilisateurs vers une URL spécifique après la déconnexion Google Apps (voir Google Apps control panel). New code: Nouveau code: http://www.jdll.org/node/206 http://www.jdll.org/node/206 You should now use the Manager to configure all applications and categories, and then comment or remove the applicationList parameter from /etc/lemonldap-ng/lemonldap-ng.ini. Il est désormais possible d'utiliser le manager pour configurer toutes les applications et catégories, ensuite commenter ou supprimer le paramètre applicationList de /etc/lemonldap-ng/lemonldap-ng.ini. XSS checks will still be done with warning in logs, but this will not prevent the process to continue. Le contrôle XSS continuera à être effectué mais avec seulement des avertissements dans les journaux sans empêcher le processus de continuer. Gaultier HUBERT Gaultier HUBERT applications:liferay_logo.png applications:liferay_logo.png Form page URI: /login.php URI de la page de formulaire : /login.php Google Apps Google Apps Login history Historique de connexion syntax (optional): hexadecimal (default) or octetstring syntax (optionnel) : hexadecimal (défaut) ou octetstring SSO and Application logout: the request is forwarded to application and SSO session is closed Déconnexion SSO et applicative: la requête est transmise à l'application et la session SSO est fermée Redirect: redirect user on protected application or on Portal (applications menu) Redirect: redirect user on protected application or on Portal (applications menu) Manager interface: all messages are grouped in lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. L'interface du Manager: tous les messages sont regroupés dans lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. ../pages/documentation/1.1/redirections.html ../pages/documentation/1.1/redirections.html SMTPAuthPass SMTPAuthPass Override logging functions Surcharger les fonctions de journalisation <property name="principalRequestHeader" value="Auth-User"/> <property name="principalRequestHeader" value="Auth-User"/> documentation:1.4:loginhistory documentation:1.4:loginhistory Dates Dates X509 X509 Integrate existing applications Integrer des applications existantes Available parameters are: Paramètres disponibles : Go to the Manager and create a new virtual host for Bugzilla. Aller dans le manager et créer un nouvel hôte virtuel pour Bugzilla. Delay between check of local configuration Delai entre 2 examens de la configuration locale PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm documentation:manager-saml-service-authn-contexts.png documentation:manager-saml-service-authn-contexts.png ../../documentation/1.4/performances.html#apachesession_performances ../../documentation/1.4/performances.html#apachesession_performances mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ CDA is set if the handler is not in the same domain Le CDA ne fonctionne que si l'agent n'est pas dans le même domaine This allows to use different databases for these process. Ceci autorise à utiliser deux bases de données différentes pour ces deux processus. Erwan LEGALL Erwan LEGALL POD unit tests Tests unitaires POD Secure Token Handler Agent jeton sécurisé Edit configuration Editer la configuration presentation presentation 0.9.4_password_reset.png 0.9.4_password_reset.png Renew authentication: force authentication renewal on CAS server Renouveler l'authentification : force le renouvellement de l'authentification sur le serveur CAS dbiChain: DBI connection. dbiChain : chaîne de connexion DBI. ../pages/documentation/1.1/idpcas.html ../pages/documentation/1.1/idpcas.html https https Logout forward Propagation de déconnexion cn=ssokerberos,cn=users,dc=example,dc=com: DN of AD technical account cn=ssokerberos,cn=users,dc=example,dc=com : DN du compte AD technique documentation:latest:prereq documentation:latest:prereq Cookie security Sécurité du cookie Operating System Système d'exploitation Example 1: two tables Exemple 1 : deux tables documentation:lasso.png documentation:lasso.png Modules Modules Use rule: a rule to allow user to use this module, set to 1 to always allow. Règle d'utilisation : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Email::Date::Format Email::Date::Format ../../../media/documentation/manager-saml-idp-list.png ../../../media/documentation/manager-saml-idp-list.png /_detail/icons/personal.png?id=contact /_detail/icons/personal.png?id=contact You must also install the database connector (DBD::Oracle, DBD::Pg,…) Il faut également installer le connecteur à la base de données (DBD::Oracle, DBD::Pg,…) ../pages/documentation/conferences.html ../pages/documentation/conferences.html //"userobm_nomade_datebegin" => , //"userobm_nomade_datebegin" => , Configuration backend parameters Paramètres des backends de configuration To summary available options: Pour résumer les options disponibles : External user clicks to be redirected to the remote type portal L'utilisateur externe clique pour être redirigé vers le second portail user email Email de l'utilisateur A little macro: Une petite macro : AuthType Basic AuthType Basic Mail sender: address seen in the “From” field (default: noreply@[DOMAIN]) Expéditeur : adresse vue dans le champ “From” (défaut : noreply@[DOMAINE]) User password is now available in $_password variable. Le mot-de-passe utilisateur est désormais disponible dans la variable $_password. With the above solution, all the Drupal site will be protected, so no anonymous access will be allowed. Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé. Authentication with Kerberos Authentification avec Kerberos A web browser launched from the computer (to access localhost) Un navigateur web lançé depuis ce serveur (pour accéder à la boucle locale) ../../documentation/1.4/start.html#sessions_databases ../../documentation/1.4/start.html#sessions_databases using Apache authentication system (used for SSL, Kerberos, HTTP basic authentication, …) utilisant le système d'authentification d'Apache (utilisé pour SSL, Kerberos, l'authentification HTTP basique, …) Translators Translators //"userobm_local" => , //"userobm_local" => , These parameters can be configured in Manager, in General Parameters > Advanced parameters > Handler redirections. Cesparamètres peuvent être configurés dans le manager, dans Paramètres généraux > Paramètres avancés > Redirections des agents. Value: SREG attribute name: Valeur : noms d'attributs SREG : my $portal = Lemonldap::NG::Portal::SharedConf->new( my $portal = Lemonldap::NG::Portal::SharedConf->new( Zimbra also features archiving and discovery for compliance. Zimbra propose aussi l'archivage et discovery for compliance. Go to the Manager and create a new virtual host for Liferay. Aller dans le manager et créer un nouvel hôte virtuel pour Liferay. Official repository Dépôt officiel Page URL: URL of password reset page (default: [PORTAL]/mail.pl) URL de la page : URL de la page de réinitialisation de mot-de-passe (défaut : [PORTAL]/mail.pl) http://search.cpan.org/perldoc?Apache::Session::Browseable http://search.cpan.org/perldoc?Apache::Session::Browseable ~150 ~150 one unsecured for other applications un non-sécurisé pour les autres applications timezone timezone You can use #PORTAL# in values to replace the portal URL. Vous pouvez utiliser le mot clef #PORTAL# dans les valeurs pour remplacer l'URL du portail. </IfModule> </IfModule> Do not restrict /public/ Ne pas restreindre /public/ Allow from all Allow from all Authentication, Authorization and Accounting (AAA) mechanisms Mécanismes d'authentification, d'autorisation et de traçabilité (AAA) Zimbra can be deployed on-premises or as a hosted email solution. Zimbra peut être déployé sur site ou hébergé telle une messagerie. Slave Slave cd trunk cd trunk Mail From address Adresse source des messages documentation:1.4:jsonfileconfbackend documentation:1.4:jsonfileconfbackend LemonLDAP::NG can also use syslog (only for user actions). LemonLDAP::NG peut également utiliser syslog (seulement pour les actions utilisateurs). mailreset_step2.png mailreset_step2.png logout_sso, logout_app, logout_app_sso: catch logout request logout_sso, logout_app, logout_app_sso: intercepte les requêtes de déconnexion http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 American Standard Code for Information Interchange American Standard Code for Information Interchange For example, we change it to ow2.org: Par exemple, pour le changer en ow2.org: Configure the portal to use the remote LL::NG structure. Configurer le portail pour qu'il utilise le système LL::NG distant. ../../documentation/1.4/applications/liferay.html ../../documentation/1.4/applications/liferay.html APACHEGROUP: group running Apache APACHEGROUP: groupe de fonctionnement d'Apache Use extended functions Utiliser les fonctions étendues field varchar(255) NOT NULL DEFAULT '', field varchar(255) NOT NULL DEFAULT '', ../../documentation/1.4/notifications.html ../../documentation/1.4/notifications.html email email /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... Identity Provider Fournisseur d'identité Sympa is a mailing list manager. Sympa est un gestionnaire de listes de diffusion. <text>: paragraph to display: will be inserted in HTML page enclosed in <p class=“notifText”>…</p> <text> : paragraphe à afficher : sera inséré dans la page HTML encadré dans <p class=“notifText”>…</p> http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 These parameters can be configured in Manager, in General Parameters > Advanced parameters > Handler redirections: Ces paramètres peuvent être configurés dans le manager, dans Paramètres généraux > Paramètres avancés > Redirections des agents: lemonldap-ng-portal-appslist.png lemonldap-ng-portal-appslist.png Use custom functions Utiliser les fonctions personnalisées ../../../media/documentation/manager-saml-private-key.png ../../../media/documentation/manager-saml-private-key.png sudo make postconf sudo make postconf Display applications list Affiche la liste des applications Session restrictions will not work Les restrictions de session ne fonctionnent pas Else, all data are copied in the session database. Sinon, toutes les données sont copiées. Net::OpenID::Server > 1.00 Net::OpenID::Server > 1.00 _idp _idp You have to update them by yourself. Il faut les mettre à jour soi-même. Then create symbolic links on template files, as you might not want to rewrite all HTML code (else, do as you want). Créer ensuite des liens symboliques pour éviter de réécrire tous les fichiers HTML (sauf si c'est souhaité). Change password URL: where users can change their password. Change password URL: où les utilisateurs peuvent changer leur mot-de-passe. sessions/: read only access to sessions (enough for distant Handlers) sessions/ : accès en lecture seule aux sessions (suffisant pour les agents distants) To refresh it, you have to set an handler on the same server to use the refresh mechanism or to restart the server after each configuration change. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement. <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="tomcat" password="tomcat" roles="tomcat"/> 'cache_depth' => 5,? 'cache_depth' => 5,? # ... } # ... } You can add this object class to any entry of your directory. Cette classe d'objets peut être ajoutée à toute entrée de l'annuaire. ../../documentation/1.4/applications/obm.html ../../documentation/1.4/applications/obm.html RDBI : triple store storage RDBI : stockage en triplets references.html references.html /_detail/icons/knewsticker.png?id=contact /_detail/icons/knewsticker.png?id=contact ../../documentation/1.4/performances.html#handler_performance ../../documentation/1.4/performances.html#handler_performance The common domain is used by SAML SP to find an Identity Provider for the user, and by SAML IDP to register itself in user's IDP list. Le domaine commun est utilisé par le SP SAML pour trouver le fournisseur d'identité de l'utilisateur et par l'IdP SAML pour s'enregistrer dans la liste des IDP. Several extensions allows to configure SSO on MediaWiki: Plusieurs extensions permettent de configurer le SSO dans MediaWiki : # For MediaWiki >= 1.13 #$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); } # For MediaWiki >= 1.13 #$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); } Attribute to store: the session key that will be stored in Memcached. Attribut à stocker : la clef de session qui doit être stockée dans Memcached. Conferences Conférences ../../../media/documentation/lemonldap-ng-packages.png ../../../media/documentation/lemonldap-ng-packages.png Run this to update packages cache: Lancer ceci pour rafraîchir le cache : Menu modules display Affichage des modules du menu http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 Redirection to the portal of the main area and normal authentication (if not done before) Redirection vers le portail principal et authentification normale (sauf si déjà faite) Close kerberos connection: Fermer la connexion kerberos : Roles are entries, below branches representing applications. Les rôles sont des entrées, les branches subordonnées représentant les applications. You can enter a password to protect private key with a password. Vous pouvez entrer un mot de passe de protection de la clef privée. 0.9.3 0.9.3 0.9.4 0.9.4 A click on a key will display the associated value. Un click sur la clef affiche la valeur associée. http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 BrowserID BrowserID secureTokenHeader secureTokenHeader mailSessionKey mailSessionKey authentication authentification URL for mail reset URL pour la réinitialisation par courriel IO::String IO::String You can also adapt Apache access control: On peut également adapter le contrôle d'accès d'Apache : http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://wiki.zimbra.com/index.php?title=Preauth http://wiki.zimbra.com/index.php?title=Preauth macros macros Go on Drupal administration interface and enable the Webserver Auth module. Aller dans l'interface administration et activer le module Webserver Auth. vi /etc/apt/sources.list.d/lemonldap-ng.list vi /etc/apt/sources.list.d/lemonldap-ng.list Portal Portail icons:terminal.png icons:terminal.png Nantes Nantes Drivers Drivers Proxy portal URL URL du portail mandataire /usr/share/lemonldap-ng/bin/lmConfigEditor /usr/share/lemonldap-ng/bin/lmConfigEditor First check and install the prerequisites. D'abord vérifier et installer les pré-requis. OBM is shipped with a LL::NG plugin with these features: OBM est livré avec un composant LL::NG apportant les fonctionnalités suivantes : _userDB _userDB These parameters can be overwritten in LemonLDAP::NG ini file, in the section apply. Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section apply. CREATE TABLE sessions ( CREATE TABLE sessions ( Macros and groups are stored in session database. Les macros et les groupes sont stockées dans la base de données des sessions. External portal Portail externe Modify the portal virtual host: Modifier l'hôte virtuel du portail : Read-only functions (index.pl/sessions or index.pl/adminSessions paths): Fonctions en lecture seule (chemins index.pl/sessions ou index.pl/adminSessions) : Please use lmMigrateConfFiles2ini to migrate your menu configuration Please use lmMigrateConfFiles2ini to migrate your menu configuration You can use Null backend to bypass some authentication process steps. Le backend Null peut être utilisé pour sauter des étapes du processus d'authentication. globalStorageOptions globalStorageOptions User name session field Champ de session stockant le nom d'utilisateur Installation on RHEL/CentOS with packages Installation sur RHEL/CentOS avec les paquets Portal URL URL du portail TikiWiki, … TikiWiki, … PerlSetVar LmProxyPass http://APPLICATION/ PerlSetVar LmProxyPass http://APPLICATION/ activate CDA in General Parameters » Cookies » Multiple domains activer le CDA dans Paramètres généraux » Cookies » Domaines multiples All Apache::Session style modules are useable except for some features. Tous les modules de type Apache::Session sont utilisables excepté pour quelques fonctionnalités. By default, user will be redirected on portal if no URL defined, or on the specified URL if any. Par défaut, l'utilisateur est redirigé vers le portail si aucune URL n'est définie ou vers l'URL indiquée sinon. ldap://localhost ldap://localhost The LDAP schema extension can be used to store these values L'extension de schéma LDAP peut être utilisée pour stocker ces valeurs. start Commencer SSOExtensions::function1 SSOExtensions::function1 ../../documentation/1.4/redirections.html ../../documentation/1.4/redirections.html LemonLDAP::NG - Offline Version LemonLDAP::NG - Version hors-ligne /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps SSO on OBM web interface SSO sur l'interface web d'OBM Package GPG signature Signature GPG des paquets portalAntiFrame portalAntiFrame documentation:1.4:memcachedsessionbackend documentation:1.4:memcachedsessionbackend Portal performances Performances du portail tree_dark.png tree_dark.png Consent to share attribute id trough OpenID Consentement de partage de l'attribut id via OpenID ldapChangePasswordAsUser ldapChangePasswordAsUser http://en.wikipedia.org/wiki/Outlook_Web_App http://en.wikipedia.org/wiki/Outlook_Web_App As described in performances chapter, you can use macros, local macros,… Comme indiqué au chapître performances, on peut utiliser des macros, macros locales,… Error log: all messages emitted by the program, depending on the configured log level Journaux d'erreur (ErrorLog) : tous les messages emis par le programme, suivant le niveau de journalisation configuré (LogLevel) PostGreSQL PostGreSQL http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN documentation:1.4:applications:tomcat documentation:1.4:applications:tomcat ldapServer => 'ldaps://ad.example.com', ldapServer => 'ldaps://ad.example.com', Configuration backend can be set in the local configuration file, in configuration section. Le backend de configuration peut être indiqué dans le fichier local de configuration, dans la section configuration. http://www.slideshare.net/coudot/rmll-2011-websso http://www.slideshare.net/coudot/rmll-2011-websso ../../documentation/1.4/authldap.html#schema_extension ../../documentation/1.4/authldap.html#schema_extension It is recommended to secure the channel between reverse-proxies and application to be sure that only request coming from the LL::NG protected reverse-proxies are allowed. Il est donc recommandé de sécurisé le canal entre le proxy inverse et l'application pour être sûr que seules les requêtes issues des proxies inverses protégés par LL::NG sont autorisées. These files must be included in Apache configuration, either with Include directives in httpd.conf (see quick start example), or with symbolic links in Apache configuration directory (like /etc/httpd/conf.d). Ces fichiers doivent être inclus dans la configuration d'Apache, soit par des directives Include dans le fichier httpd.conf (voir démarrage rapide), ou via un lien symbolique dans de répertoire de configuration d'Apache (type /etc/httpd/conf.d). Protection scheme Schéma de protection /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots Then go in Manager, General Parameters » Advanced Parameters » Password management: Aller dans le manager, Paramètres généraux » Paramètres avancés » Gestion des mots-de-passe : Uncheck it to disable SAML authentication (for example, if your Identity Provider is down). Le désélectionner désactive l'authentification SAML (à utiliser, si votre fournisseur d'identité est hors service). Alphabetical Index Index alphabétique Since version 0.9.4, LemonLDAP::NG can be used to notify some messages to users: if a user has a message, the message will be displayed when he will access to the portal. Depuis la version 0.9.4, LemonLDAP::NG peut être utilisé pour notifier des messages aux utilisateurs : si un utilisateur a un message, celui-ci est affiché lorsqu'il accède au portail. ../../../../media/applications/tomcat_logo.png ../../../../media/applications/tomcat_logo.png 1800+ 1800+ The real accounting has to be done by the application itself since SSO logs can not understand transactions. La réelle traçabilité doit être faite par l'application elle-même car les journaux du SSO ne peuvent interprêter les transactions. Control asked URL: prevent XSS attacks and bad redirections Control asked URL: prevent XSS attacks and bad redirections lemonldap-ng-changes@ow2.org lemonldap-ng-changes@ow2.org Schema Schéma Secure Token allow requests in error Le jeton sécurisé autorise les requêtes en cas d'erreur ../media/icons/chat.png ../media/icons/chat.png Offline 0.1 Hors-ligne 0.1 ~100 ~100 Check SSO message signature: check SSO message signature Vérification de la signature des messages SSO : vérifie la signature des messages SSO ../pages/documentation/1.1/passwordstore.html ../pages/documentation/1.1/passwordstore.html ../../../../media/applications/spring_logo.png ../../../../media/applications/spring_logo.png You should be able to find a package for your distribution with a little search on the web. Il est possible de trouver un paquet pour beaucoup de distributions avec une petite recherche sur le web. Then use openssl to generate an auto-signed certificate: Ensuite, utiliser openssl pour générer un certificat auto-signé : # Values: TEXT # ignoreregex = # Values: TEXT # ignoreregex = documentation:1.4:authsaml documentation:1.4:authsaml Target URL: /process.php URL cible : /process.php aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Each configuration will be represented as an entry, which structural objectClass is applicationProcess. Chaque configuration est représentée par une entrée, dont l'objectClass structurel est applicationProcess. You can use different type of access: SQL, File or LDAP for servers in secured network and SOAP for remote servers. On peut utiliser différent typed d'accès : SQL, File or LDAP pour les serveurs se trouvant sur le réseau sécurisé et SOAP pour les autres. Yverdon Yverdon When the user accept the notification, the reference is stored in his persistent session. Lorsque l'utilisateur accepte la notification, la référence est stockée dans ses données de session persistentes. http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU static: 'StaticValue' (a static value) static: 'StaticValue' (une valeur statique) lemonldap-ng-doc: contains HTML documentation and project docs (README, etc.) lemonldap-ng-doc : contient la documentation HTML et celle du projet (README, etc...) EXAMPLE.COM: Kerberos realm EXAMPLE.COM : royaume Kerberos skip skip This is the default configuration backend. C'est le backend de configuration par défaut. SSLCertificateKeyFile ... SSLCertificateKeyFile ... warn for failed authentications warn pour les échecs d'authentifications Authentication protocols Authentication protocols ../../../media/applications/dokuwiki_logo.png ../../../media/applications/dokuwiki_logo.png ../../../../media/applications/zimbra_logo.png ../../../../media/applications/zimbra_logo.png Cross Site Scripting Cross Site Scripting http://www.jasig.org/cas/protocol http://www.jasig.org/cas/protocol Comments can be used to order your rules: rules are applied in the alphabetical order of comment (or regexp in there is no comment). Les commentaires peuvent être utilisés pour ordonner les règles : elles sont appliquées dans l'ordre alphabétique des commentaires (ou des expressions régulières à défaut de commentaire). Contributions Contributions http://lanyrd.com/2011/confoo/sddcy/ http://lanyrd.com/2011/confoo/sddcy/ LL::NG can protect any Apache hosted application including Apache reverse-proxy mechanism. LL::NG peut protéger toute application hébergée par Apache y compris le mécanisme de proxy inverse d'Apache. # special html code for admins } else { # code html spécial pour les administrateurs } else { all: parameters for all modules all : paramètres pour tous les modules For example, in portal/index.pl: Par exemple, dans portal/index.pl: User table Table utilisateurs See http://httpd.apache.org/docs/2.2/mod/core.html#loglevel for more information. Voir http://httpd.apache.org/docs/2.2/mod/core.html#loglevel pour plus d'information. EXAMPLE.COM = { EXAMPLE.COM = { Mail, Agenda, Groupware Mail, Agenda, Groupware documentation:1.4:authwebid documentation:1.4:authwebid yubikeyPublicIDSize yubikeyPublicIDSize Add it to trustedDomains (or set * in trustedDomains to accept all). L'ajouter à trustedDomains (ou mettre * dans trustedDomains pour tout accepter). Configure attributes: Configurer les attributs : Insertion example in Perl Exemple d'insertion en Perl If one is missing, the user is not created. Si l'un est manquant, le compte ne sera pas créé. So to improve performances, avoid too complex rules by using the macro or the groups or local macros. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales. Then use the SiteMinder tab to configure SSO: Utiliser ensuite le paragraphe SiteMinder pour configurer le SSO : SetHandler perl-script SetHandler perl-script documentation:1.4:passwordstore documentation:1.4:passwordstore WebID WebID These regular expressions read the 'ou' value of the DN of the role of the concerned application. Ces expressions régulières lisent la valeur 'ou' du DN du rôle de l'application concernée. Reply address Adresse de réponse and edit /etc/fail2ban/filter.d/lemonldap.conf et editer /etc/fail2ban/filter.d/lemonldap.conf Save the configuration and exit the Manager. Sauver la configuration et quitter le manager. Now configure all SAML parameters: Puis configurer tous les paramètres SAML : /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice See the following chapters: Voir les chapîtres suivants : ---- ---- /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots include /usr/share/lemonldap-ng/ressources/sso.schema include /usr/share/lemonldap-ng/ressources/sso.schema documentation:1.4:performances documentation:1.4:performances Header value Valeur d'en-tête DataSource DataSource File location Emplacement du fichier documentation:features documentation:features Check last logins: displays a checkbox on login form, allowing user to check his login history right after opening session Vérifier l'historique : affiche une case à cocher sur le formulaire d'authentification permettant à l'utilisateur d'examiner son historique de connexion après l'ouverture de la session Portal produce a notice message in Apache logs or syslog when a user authenticates (or fails to authenticate) and logs out. Le portail génère un message de niveau notice dans les journaux d'Apache ou dans syslog lorsqu'un utilisateur d'authentifie (ou échoue) ou se déconnecte. ../../documentation/1.4/authcas.html ../../documentation/1.4/authcas.html //"userobm_gid" => "HTTP_OBM_GID", //"userobm_gid" => "HTTP_OBM_GID", SHA1 SHA1 ../../documentation/1.4/applications/django.html ../../documentation/1.4/applications/django.html /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice Access rules: check user's right on URL patterns Des règles d'accès : examine les droits de l'utilisateur via des expressions sur les URL ../pages/documentation/1.1/applications/spring.html ../pages/documentation/1.1/applications/spring.html install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) type = LDAP ldapServer = ldap://localhost ldapConfBase = ou=conf,ou=applications,dc=example,dc=com ldapBindDN = cn=manager,dc=example,dc=com ldapBindPassword = secret type = LDAP ldapServer = ldap://localhost ldapConfBase = ou=conf,ou=applications,dc=example,dc=com ldapBindDN = cn=manager,dc=example,dc=com ldapBindPassword = secret Register LemonLDAP::NG on partner Identity Provider Enregistrer LemonLDAP::NG dans le fournisseur d'identité partenaire One or more roles (to send to the protected applications) Un ou plusieurs rôles (à envoyer aux applications protégées) No parameters needed. Aucun paramètres n'est requis. Lemonldap::NG handlers use a local cache to store sessions (for 10 minutes). Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). For example, if these rules are used without comments: Par exemple, si ces règles sont utilisées sans commentaires : You can fix default values by editing these values in lemonldap-ng.ini, section manager: On peut fixer les valeurs par défaut en éditant ces valeurs dans le fichier lemonldap-ng.ini, section manager : Configure LimeSurvey virtual host like other protected virtual host. Configurer l'hôte virtuel LimeSurvey comme n'importe quel autre hôte virtuel protégé. ldapServer => 'ldaps://ad.example.com', ldapServer => 'ldaps://ad.example.com', Portal redirects user on protected application with his session ID as URL parameter Portal redirige l'utilisateur vers l'application demandée avec son identifiant de session en paramètre de l'URL [configuration] type = JSONFile dirName = /var/lib/lemonldap-ng/conf [configuration] type = JSONFile dirName = /var/lib/lemonldap-ng/conf Go in Manager, General parameters » Advanced parameters » Logout forward and click on Add a key, then fill: Aller dans le manager, Paramètres généraux » Paramètres avancés » Transfert de la déconnexion et cliquer sur Ajouter une clef, renseigner ensuite : You will be prompted. Le message sera affiché. Application parameters: Paramètres des applications : mysuperpassword mysuperpassword Users : lemonldap-ng-users@ow2.org ( Subscribe | Archives ) Utilisateurs : lemonldap-ng-users@ow2.org ( Souscrire | Archives ) Servers Servers /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend This method requires the msktutil program on Linux server. Cette méthode nécessite le programme msktutil sur le serveur Linux. ../../../../media/documentation/liferay_5.png ../../../../media/documentation/liferay_5.png ../../documentation/1.4/selfmadeapplication.html ../../documentation/1.4/selfmadeapplication.html Change it: Le Changer : documentation:1.4:authbrowserid documentation:1.4:authbrowserid Skin name Nom du thème Body for confirmation mail Corps du message de confirmation https://www.portail.crbn.fr https://www.portail.crbn.fr Session identifier (carried in cookie) Identifiant de session (porté par le cookie) OpenID secret token Secret OpenID If you install packages on 64bits system, create those symbolic links: Pour installer les paquets sur un système 64bits, créeer ces liens symboliques : Java (Spring) Java (Spring) number numero ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers Then, go in Proxy parameters: Ensuite, aller dans les paramètres Proxy : ../../../media/documentation/manager-saml-namid-formats.png ../../../media/documentation/manager-saml-namid-formats.png Authentication, users and password databases Bases de données d'authentification, des utilisateurs et des mots-de-passe By default, only the configured authentication backend is available for users. Par défaut, seul le backend configuré est accessible aux utilisateurs. Single Sign On cookie, domain and portal URL Cookie SSO, URL du portail et domaine Key name: name of the key in LemonLDAP::NG session Nom de clef : nom de la clef dans la session LemonLDAP::NG documentation:lemonldap-ng-packages.png documentation:lemonldap-ng-packages.png /_detail/logos/logo_rbn.png?id=references /_detail/logos/logo_rbn.png?id=references This is a well known security framework for J2EE applications. C'est le très connu framework de sécurité des applications J2EE. //"userobm_direction" => , //"userobm_direction" => , documentation:1.4:applications:bugzilla documentation:1.4:applications:bugzilla https://twitter.com https://twitter.com To use it (with MySQL for example), choose “Apache::Session::Browseable::MySQL” as “Apache::Session module” and use the following parameters: Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants : Use Kerberos with Multiple authentication backend Utiliser Kerberos avec plusieurs backend d'authentification Session backend Module de stockage des sessions Then you can access to user datas On peut ensuite accéder aux données de l'utilisateur Install Webserver Auth module, by downloading it, and unarchive it in the drupal modules/ directory. Télécharger et installer le module Webserver Auth, en le décompressant dans le répertoire modules/. # DocumentRoot # DocumentRoot If you are protecting MediaWiki with LL::NG as reverse proxy, convert header into REMOTE_USER environment variable. Si Mediawiki est protégé par un reverse-proxy LL::NG, convertir l'en-tête en variable d'environnement REMOTE_USER. documentation:1.4:configlocation ↵ documentation:1.4:configlocation ↵ Expression Expression Check Apache configuration and restart: Vérifier la configuration d'Apache et redémarrer : idpopenid idpopenid LL::NG can catch a GET request and transform it internally in a POST request. LL::NG peut intercepter uen requête GET et la transformer en interne en requête POST. Indeed, by default, users without logon hours values are rejected. Sinon, par défaut, les utilisateurs sans créneau horaire de connexion sont rejetés. Reset attribute: name of password reset attribute (default: pwdReset). Attribut reset : nom de l'attribut reset du mot-de-passe (défaut : pwdReset). You can test any URL to see if it's protected using testUri(). On peut tester toute URL pour voir si elle est protégée en utilisant testUri(). ../../../media/documentation/manager-saml-service-authn-contexts.png ../../../media/documentation/manager-saml-service-authn-contexts.png http://lanyrd.com/2011/ldapcon/sgqdf/ http://lanyrd.com/2011/ldapcon/sgqdf/ Setup Mise en marche In the manager: set Apache::Session::Redis in General parameters » Sessions » Session storage » Apache::Session module and add the following parameters (case sensitive): Dans le manager : indiquez Apache::Session::Redis dans Paramètres généraux » Sessions » Stockage des sessions » Module Apache::Session et ajoutez les paramètres suivant (sensibles à la casse): Set groups: request user database to find groups Installe les groupes : interroge la base de données utilisateurs pour trouver les groupes User: Connection user Utilisateur : compte de connexion documentation:latest:writingrulesand_headers documentation:latest:writingrulesand_headers Local cache parameters Paramètres du cache local print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { With dpkg Avec dpkg documentation:lemonldap-ng-architecture.png documentation:lemonldap-ng-architecture.png There are no global headers. Il n'y a pas d'en-tête global. Role Rôle documentation/current/installdeb.html#official_repository documentation/current/installdeb.html#official_repository dpkg -i liblemonldap-ng-* lemonldap-ng* dpkg -i liblemonldap-ng-* lemonldap-ng* LL::NG CGIs (Portal, Manager,…) can be used under a FastCGI system very easily. Les CGI de LL::NG (portail, manager,…) peuvent être utilisées facilement dans un environnement Fast CGI. ../../documentation/1.4/applications/limesurvey.html ../../documentation/1.4/applications/limesurvey.html useSafeJail useSafeJail ../css/print.css ../css/print.css LemonLDAP::NG configuration (edited by the Manager) is in /var/lib/lemonldap-ng/conf/ La configuration LemonLDAP::NG (editée par le manager) se trouve dans /var/lib/lemonldap-ng/conf/ Little effort is required to translate the encoded string back into the user name and password, and many popular security tools will decode the strings “on the fly”. Un petit effort est requis pour décoder ces chaînes et de nombreux outils de sécurité les décodent à la volée. Userlogout => logout_sso Userlogout => logout_sso secureTokenAttribute secureTokenAttribute For example, the user name Aladdin and password open sesame would be combined as Aladdin:open sesame – which is equivalent to QWxhZGRpbjpvcGVuIHNlc2FtZQ== when encoded in Base64. Par exemple, le nom Aladdin et le mot-de-passe "open sesame" vont être assemblés en "Aladdin:open sesame" – dont l'équivalent est QWxhZGRpbjpvcGVuIHNlc2FtZQ== en Base64. Reload virtual host: Hôte virtuel pour le rechargement : By default, the RelayState session is deleted when it is read. Par défaut, la session RelayState est détruite lorsqu'elle est lue. Configuration reload will then be effective in less than 10 minutes. Le rechargement de la configuration sera effectif en moins de 10 minutes. Then fill all inputs to create the notification. Remplir ensuite tous les champs pour créer la notification. http://fedoraproject.org/wiki/EPEL/FAQ#howtouse http://fedoraproject.org/wiki/EPEL/FAQ#howtouse WSDL file Fichier WSDL Build Construction ../css/all.css ../css/all.css Configuration reload Rechargement de la configuration radiusSecret radiusSecret Liferay administration Administration Liferay https://metacpan.org/release/Web-ID https://metacpan.org/release/Web-ID portal portal updateTime updateTime See the full description of the protocol here: https://developer.mozilla.org/en-US/docs/Mozilla/Persona Voir la description complète du protocole ici : https://developer.mozilla.org/en-US/docs/Mozilla/Persona CAS_url CAS_url ../../../media/applications/saplogo.gif ../../../media/applications/saplogo.gif ../../../media/documentation/ha-sessions-configuration.png ../../../media/documentation/ha-sessions-configuration.png Getting sources from SVN repository Obtenir les sources depuis le dépôt SVN ldapConfBase: DN of configuration branch ldapConfBase : DN de la branche des configurations Configure sessions specificities Configurer les spécificités des sessions # Get attributes (or macros) my $cn = $cgi->user->{cn}   # Test if user is member of a Lemonldap::NG group (or LDAP mapped group) if( $cgi->group('admin') ) { # Obtenir des attributs (ou macros) my $cn = $cgi->user->{cn}   # Tester si l'utilisateur est membre d'un groupe Lemonldap::NG (ou d'un groupe LDAP translaté) if( $cgi->group('admin') ) { A Apache::Session::Browseable::Redis has been created, it is the faster (except for session explorer, defeated by Apache::Session::Browseable::DBI/LDAP >= 1.0) Un module Apache::Session::Browseable::Redis a été créé, c'est le plus rapide (excepté pour l'explorateur de sessions, battu par Apache::Session::Browseable::DBI/LDAP >= 1.0) /_detail/icons/flags/us.png?id=documentation%3Aconferences /_detail/icons/flags/us.png?id=documentation%3Aconferences LemonLDAP::NG can export HTTP headers either using a proxy or protecting directly the application. LemonLDAP::NG peut exporter des en-têtes HTTP qu'on l'utilise sur une reverse-proxy ou directement sur le serveur à protéger Allow requests in error: allow a request that has generated an error in token generation to be forwarded to the protected application without secure token (default: yes) Autorise les requêtes en cas d'erreur : autorise la requête qui a généré une erreur dans la génération du jeton à être transféré à l'application protégé sans jeton sécurisé (défaut : oui) A skin will often refer to the common skin, which is not a real skin, but shared skin objects (like scripts, images and CSS). Un thème se réfère souvent au thème common, qui n'est pas un thème réel mais contient des objects partagés (tels les scripts, images et CSS). ../pages/documentation/1.1/soapsessionbackend.html ../pages/documentation/1.1/soapsessionbackend.html Can be left blank for plain text passwords. Peut être vide pour le stockage des mots-de-passe en clair. In Manager, you can configure categories and applications in General Parameters > Portal > Menu > Categories and applications. Dans le manager, on peut configurer les catégories et applications dans Paramètres généraux > Portail > Menu > Catégories et applications. Application menu: display authorized applications in categories Menu des applications : affiche les applications autorisées dans les catégories Bruxelles Bruxelles CDBI CDBI import your own private and public keys (Load from a file input) importer vos propres clefs privées et publiques (entrée Charger depuis un fichier) date: creation date (format YYYY-MM-DD) date : date de création (format AAAA-MM-JJ) Also, all backends parameters are displayed. Ainsi tous les paramètres des backends sont affichés. /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots In this case, LL::NG acts like an SAML2 Service Provider (SP). Dans ce cas, LL::NG agit comme un fournisseur de service SAML2 (SP). ../pages/documentation/quickstart.html ../pages/documentation/quickstart.html Example of status page: Exemple de page de statut : API secret key: API secret key from Yubico Clef secrète de l'API : clef secrète de l'API obtenue auprès de Yubico multi => { multi => { Follow SOAP sessions backend page Suivre la documentation backend de sessions SOAP randomPasswordRegexp randomPasswordRegexp The Yubikey is a small material token shipped by Yubico. Yubikey est un petit matériel d'authentification vendu par Yubico. Domain: validity domain for the cookie (the cookie will not be sent on other domains) Domaine : domaine de valaidité du cookie (le cookie n'est pas envoyé vers d'autres domaines) ../../documentation/1.4/fileconfbackend.html ../../documentation/1.4/fileconfbackend.html Let's go On y va Sign SSO message: sign SSO message Signature des messages SSO : signe les messages SSO Run Test LemonLDAP::NG configuration is mainly a key/value structure, so Manager will present all keys into a structured tree. La configuration de LemonLDAP::NG est essentiellement une structure clef/valeur, ainsi le manager présente toutes les clefs en un arbre structuré. Mail Mail accept (or whatever you want) accept (ou la valeur désirée) You can refer to parameter list to find it. Se référer à la liste des paramètres pour le trouver. In the Manager, select node SAML service providers and click on New service provider: Dans le manager, selectionner le noeud fournisseurs de service SAML et cliquer sur Nouveau fournisseur de service : On your main server, configure a File, SQL or LDAP backend Sur le serveur principal, configurer un backend File, SQL or LDAP Password change form (in menu) Formulaire de changement de mot-de-passe (dans le menu) DataSource -> dbi:mysql:sessions;host=... DataSource -> dbi:mysql:sessions;host=... documentation:1.4:authssl documentation:1.4:authssl Then select Set up single sign-on (SSO): Ensuite sélectionner Set up single sign-on (SSO): Sessions activity timeout: Maximum inactivity duration. Délai d'expiration des sessions : durée maximale d'inactivité. /_detail/screenshots/1.0/dark/portal.png?id=screenshots /_detail/screenshots/1.0/dark/portal.png?id=screenshots BrowserID is also known as Mozilla Persona. BrowserID est également connu sous le nom de « Mozilla Persona ». Twitter authentication level Niveau d'authentification de Twitter By default, if user process connection settings are empty, authentication process connection settings will be used. Par défaut, si les paramètres de processus de connexion utilisateur sont vides , ceux d'authentification seront utilisés. Go in Manager, Default parameters » Advanced parameters » Special handlers » Zimbra, and edit the different keys: Aller dans le manager, Paramètres par défaut » Paramètres avancés » Handlers spéciaux » Zimbra, et éditer les clefs suivantes : //"userobm_system" => , //"userobm_system" => , Force authentication: set ForceAuthn flag in authentication request Authentification forcée : positionne le drapeau ForceAuthn dans la requête d'authentification First, configure your real backend Premièrement, configurer le backend réel To keep Memcached performance level and LL::NG features, you can replace Memcached by Redis using NoSQL session backend. Pour maintenir un niveau de performance tel celui de Memcached et préserver les fonctionnalités de LL::NG, on peut remplacer Memcached par Redis en utilisant le backend de sessions NoSQL. http://haproxy.1wt.eu/ http://haproxy.1wt.eu/ The sources are available on download page. Les sources sont disponibles sur la page de téléchargement. documentation:1.4:formreplay documentation:1.4:formreplay POST data URI: /process.php URI où envoyer les données : /process.php This requires to request user old password (see portal customization). Nécessite de requérir l'ancien mot-de-passe (voir personnalisation du portail). It returns: Elle retourne : <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <?xml version='1.0' encoding='utf-8'?> <tomcat-users> ../pages/documentation/1.4/variables.html ../pages/documentation/1.4/variables.html Other: Autres : http://fosdem.org/2012/schedule/event/lemonldapng http://fosdem.org/2012/schedule/event/lemonldapng PerlHandler Lemonldap::NG::Handler::Proxy PerlHandler Lemonldap::NG::Handler::Proxy You've simply to insert a notification and connect to the portal using the same UID. Il suffit d'insérer une notification et de se connecter au portail en utilisant le même UID. Mail field name: name of authentication table column hosting mail (for password reset) Nom du chmap mail : nom de la colonne de la table d'authentification contenant le mail (pour la réinitialisation du mot-de-passe) Some articles published somewhere in the world wide web. Quelques articles publiés quelque part sur le web. # Directory index # Directory index http://httpd.apache.org/docs/current/mod/mod_proxy.html http://httpd.apache.org/docs/current/mod/mod_proxy.html documentation:exportedvars.png documentation:exportedvars.png Local file Fichier local Remote Remote ../pages/download.html ../pages/download.html localStorage localStorage Timezone Timezone http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf ../../documentation/1.4/handlerauthbasic.html ../../documentation/1.4/handlerauthbasic.html ../documentation/current/ssocookie.html#sso_cookie ../documentation/current/ssocookie.html#sso_cookie ../../documentation/1.4/start.html#identity_provider ../../documentation/1.4/start.html#identity_provider documentation:liferay_7.png documentation:liferay_7.png include /usr/local/lemonldap-ng/etc/portal-apache2.conf include /usr/local/lemonldap-ng/etc/handler-apache2.conf include /usr/local/lemonldap-ng/etc/manager-apache2.conf include /usr/local/lemonldap-ng/etc/test-apache2.conf include /usr/local/lemonldap-ng/etc/portal-apache2.conf include /usr/local/lemonldap-ng/etc/handler-apache2.conf include /usr/local/lemonldap-ng/etc/manager-apache2.conf include /usr/local/lemonldap-ng/etc/test-apache2.conf In the Manager, select node SAML identity providers and click on New identity provider: Dans le Manager, selectionner le noeud Fournisseurs d'identité SAML et cliquer sur Nouveau fournisseur d'identité : <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> documentation:1.4:portalcustom documentation:1.4:portalcustom /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart parameterlist parameterlist /_detail/screenshots/1.0/impact/password.png?id=screenshots /_detail/screenshots/1.0/impact/password.png?id=screenshots portal full URL if custom function is run by portal (e.g. https://auth.example.com/) l'URL complète du portail si la fonction personnalisée est appelée par le portail (i.e. https://auth.example.com/) ../../documentation/1.4/authremote.html ../../documentation/1.4/authremote.html After redirection, normal authentication in the remote portal Après redirection, authentification normale sur le portail distant (celui de son organisation) soapAuthService soapAuthService CAS access control policy Politique de contrôle d'accès CAS Apache Tomcat Apache Tomcat LL::NG use 2 internal databases to store its configuration and sessions. LL::NG utilise 2 bases de données interne pour stocker ses configuration et sessions. YouTube YouTube Habib ZITOUNI Habib ZITOUNI If this session is lost, Google will ask a confirmation for each requested attribute. Si cette session est perdue, Google redemandera confirmation pour chaque attribut demandé. https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt The session expires after 2 hours by default. Toute session expire au boût de 2 heures par défaut. { { If no encryption keys are defined, signature keys are used for signature and encryption. Si aucune clef de chiffrement n'est définie, la clef de signature est aussi utilisée pour le chiffrement. http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/authbrowserid.html ../../documentation/1.4/authbrowserid.html Shared key: correspond to the cookie parameter of sympa.conf Clef prépartagée : correspond au paramètre du cookie dans sympa.conf Configuration and sessions access by SOAP Accès à la configuration et aux sessions par SOAP documentation:manager-saml-sp-new.png documentation:manager-saml-sp-new.png Order deny,allow Order deny,allow RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/metadata /metadata.pl mailR mailR The portal Le portail /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots For MySQL, you need to set additional parameters: Pour MySQL, il faut ajouter quelques paramètres : cookieName cookieName This file is called lemonldap-ng.ini and has the following sections: Le fichier est nommé lemonldap-ng.ini et dispose des sections suivantes : bugzilla bugzilla ../../../media/documentation/manager-saml-idp-new.png ../../../media/documentation/manager-saml-idp-new.png You can first check on LemonLDAP::NG JIRA project that your bug is not already referenced, and then create it (with a registered account). Commencez par vérifier sur le site JIRA du projet LemonLDAP::NG que votre bogue n'est pas déjà référencé, et créez le sinon (avec un compte préalablement créé). Radius server Serveur Radius Account session key: session field used as Zimbra user account (by default: uid) clef de session compte : champ de session utilisé comme compte utilisateur Zimbra (par défaut : uid) Datas are stored as key/values (no-strings values are serialized). Les données sont stockées en clef/valeur (les valeurs autres que chaînes sont sérialisés). ../pages/documentation/1.1/applications/limesurvey.html ../pages/documentation/1.1/applications/limesurvey.html documentation:1.4:authdemo documentation:1.4:authdemo rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf Secure Token header En-tête du jeton sécurisé Apache::Session::Redis is the faster shareable session backend Apache::Session::Redis est le module de stockage des sessions en réseau le plus rapide http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml Configure security settings Configurer les paramètres de sécurité Google Apps control panel Panneua de contrôle Google Apps managerDn managerDn documentation:1.4:selfmadeapplication documentation:1.4:selfmadeapplication icons:wizard.png icons:wizard.png ../pages/documentation/1.1/idpsaml.html ../pages/documentation/1.1/idpsaml.html For example, if real sessions are stored in files: Par exemple, si les sessions réelels sont stockées dans des fichiers : Set exported variables Définir les variables exportées Display logout module Affiche le module de déconnexion UCANSS UCANSS applications:mediawiki_logo.png applications:mediawiki_logo.png ../../documentation/1.4/securetoken.html ../../documentation/1.4/securetoken.html The user can choose a new password or ask to generate one L'utilisateur peut choisir un nouveau mot de passe ou demander sa génération UserName -> user Password -> password Index -> ipAddr uid UserName -> user Password -> password Index -> ipAddr uid perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. Auth-Mail: $mail Auth-Mail: $mail documentation:1.4:highavailability documentation:1.4:highavailability screenshots captures d'écran ../pages/translations.html ../pages/translations.html portal is in a https virtualhost if securedCookie is set le portail est dans un hôte virtuel https si securedCookie est activé "userobm_company" => "HTTP_OBM_O", "userobm_company" => "HTTP_OBM_O", Assertion Consumer Consommateur d'assertions Bugzilla Bugzilla protection protection Full name Nom complet Nov 2011: ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI Nov 2011 : ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI You can also display a check box on the authentication form, to allow user to see their login history before beeing redirected to the protected application (see portal customization). on peut aussi afficher une case à cocher dans le formulaire d'authentification pour autoriser l'utilisateur à voir son historique de connexion avant d'être redirigé vers l'application protégée (voir la personnalisation du portail). ...   </VirtualHost> ...   </VirtualHost> Session key containing email address La clef de session contient l'adresse mail If a user is redirected from handler to portal for authentication and once he is authenticated, portal redirects him to the redirection URL. Si un utilisateur est redirigé depuis un agent vers le portail pour s'authentifier et s'il est déjà authentifié, le portail le redirige vers l'URL de redirection. phpLDAPadmin will have no idea of the user connected to the WebSSO. phpLDAPadmin ne connaît donc pas le nom du l'utilisateur connecté au WebSSO. Allow form autocompletion Autorise l'autocompletion du formulaire ssoStartDate ssoStartDate Menu style preferences are stored in cookies (1 year duration). Les préférences du menu sont stockées dans des cookies (valables 1 an). But you have to allow sessions web services, see SOAP sessions backend. Il faut en revanche autoriser le service web des sessions, voir le backend de sessions SOAP. Zimbra virtual host in Manager Hôte virtuel Zimbra dans le manager /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay ../../documentation/1.4/applications/tomcat.html ../../documentation/1.4/applications/tomcat.html Key name Nom de la clef Then edit MediaWiki local settings Éditer ensuite les paramètres locaux MediaWiki Username control: Regular expression used to check user login syntax. Contrôle du nom d'utilisateur : expression régulière utilisée pour vérifier la syntaxe du nom d'utilisateur. table: Notifications table name. table : nom de la table des notifications. User table: where user data are stored (mail, name, etc.) La table utilisateurs : où les données utilisateurs sont stockées (mail, nom, etc.) Authorization => "Basic ".encode_base64("$uid:$_password") Authorization => "Basic ".encode_base64("$uid:$_password") rtyler rtyler YUM repository Dépôt YUM The script uses the editor system command, that links to your favorite editor. Ce script utilise la commande système editor, qui est liée à l'éditeur favori. http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod ../../../media/documentation/exportedvars.png ../../../media/documentation/exportedvars.png In Manager, go in General Parameters > Authentication modules and choose BrowserID for authentication. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir BrowserID pour l'authentification. Register what module was used for authentication, user data, password, … Enregistre les modules utilisés pour l'authentification, les données utilisateurs, les mots-de-passe, … getCookies(user,password): authentication system. getCookies(user,password) : système d'authentification. phpLDAPadmin virtual host in Manager Hôte virtuel phpLDAPadmin dans le manager ldapgroups -> memberOf ldapgroups -> memberOf http://en.wikipedia.org/wiki/IBM_Lotus_iNotes http://en.wikipedia.org/wiki/IBM_Lotus_iNotes All pages Toutes les pages a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf ../pages/documentation/1.1/authopenid.html ../pages/documentation/1.1/authopenid.html In other words, take the time to configure this part before sharing metadata. En d'autres mots, prenez le temps de bien configurer cette partie avant de partager les metadatas. Single Sign On Authentification unique (Single Sign On) Options +ExecCGI Options +ExecCGI dbiAuthLoginCol dbiAuthLoginCol Integration in Active Directory (LDAP and Kerberos) Integration dans Active Directory (LDAP et Kerberos) Name of the cookie Nom du cookie <Directory /usr/local/lemonldap-ng/htdocs/manager/> <Directory /usr/local/lemonldap-ng/htdocs/manager/> /_detail/screenshots/1.0/impact/menu.png?id=screenshots /_detail/screenshots/1.0/impact/menu.png?id=screenshots Declare module in Apache configuration Declarer le module dans la configuration d'Apache Twitter is a famous microblogging server. Twitter est un serveur de microblog célèbre. Allow from all Allow from all ../pages/start.html ../pages/start.html It needs 4 modules to work: Il a besoin de 4 modules pour fonctionner : documentation:ha-sessions-configuration.png documentation:ha-sessions-configuration.png ../../../media/icons/access.png ../../../media/icons/access.png http://www.sympa.org http://www.sympa.org They can then be forwarded to applications trough HTTP headers. Ils peuvent être transférés aux applications via les en-têtes HTTP. documentation:manager-saml-private-key.png documentation:manager-saml-private-key.png Choice URL parameter Paramètre d'URL pour "Choice" DBI DBI LL::NG LL::NG Authentication: will create session without prompting any credentials (but will register client IP and creation date) Authentification : créé une session sans demander quoi que ce soit (mais enregistre l'adresse IP cliente et la date de création) CREATE TABLE lmConfig ( CREATE TABLE lmConfig ( Logo: file name to use as logo Logo : nom de fichier à utiliser comme logo For example, in handler/MyHandler.pm: Par exemple, dans handler/MyHandler.pm: KrbMethodNegotiate On KrbMethodNegotiate On Configure Sympa virtual host like other protected virtual host but use Sympa Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre hôte virtuel protégé. https://metacpan.org/module/Apache::Session::Browseable::LDAP https://metacpan.org/module/Apache::Session::Browseable::LDAP It sends an OTP, which is validated against Yubico server. Il envoie un mot-de-passe à valeur unique (OTP) qui est validé par un serveur Yubico. zimbraBy zimbraBy Extract Extraction Examples: Exemples : Key Clef Apache::Session performances Performances d'Apache::Session error: if user has no access, an error is shown on the portal, the user is not redirected to CAS service error : si l'utilisateur n'a pas accès, une erreur est affichée sur le portail, l'utilisateur n'est pas redirigé vers le service CAS uid: 123456789012 uid: 123456789012 /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications Notification backend Module de stockage des notifications LemonLDAP::NG 1.1 release Sortie de LemonLDAP::NG 1.1 Restrict /admin/ directory to user bart.simpson Restreindre le répertoire /admin/ à l'utilisateur bart.simpson For debugging, this valve can print some helpful information in debug level. Pour le debogage, cette valve peut tracer quelques information utiliser. SHA SHA ../../documentation/1.4/ldapminihowto.html ../../documentation/1.4/ldapminihowto.html by users par utilisateurs Storage directory Répertoire de stockage The NameID is the main user identifier, carried in SAML messages. NameID est l'identifiant principal de l'utilisateur transmis dans les messages SAML. If you can not access the Manager anymore, you can unprotect it by editing lemonldap-ng.in and changing the protection parameter: SI l'accès au manager est perdu, on peut le déprotéger en éditant lemonldap-ng.in et en changeant le paramètre protection : Lasso session dump Dump de session Lasso checkDate checkDate psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng If you modify directly the skin files, your modifications will certainly be erased on the next upgrade. Les modifications apportées directement sur les fichiers thèmes risquent d'être perdus à la prochaine mise-à-jour. The value will be used to display the data. Cette valeur sera utilisée pour afficher les données. cookieExpiration cookieExpiration ^/caldav ^/caldav ../pages/documentation/1.1/authproxy.html ../pages/documentation/1.1/authproxy.html An SAML server with OpenID authentication Un serveur SAML avec une authentification OpenID KrbAuthRealms EXAMPLE.COM KrbAuthRealms EXAMPLE.COM ldapPasswordResetAttributeValue ldapPasswordResetAttributeValue Grant session: check rights to open SSO session Autorise la session : vérifie le droit d'ouvrir une session SSO icons:kmultiple.png icons:kmultiple.png documentation:1.4:authtwitter documentation:1.4:authtwitter Take a look at http://xmlns.com/foaf/spec/#sec-crossref. Voir http://xmlns.com/foaf/spec/#sec-crossref. A special URL is declared in application menu (like http://zimbra.example.com/zimbrasso) Une URL spéciale est declarée dans le menu des applications (telle http://zimbra.example.com/zimbrasso) LemonLDAP::NG used as CAS server. LemonLDAP::NG utilisé comme serveur CAS. Allow no certificate to chain with other authentication methods Autoriser les clients sans certificat dans le chaînage avec d'autres méthodes d'authentification ../../documentation/1.4/cda.html ../../documentation/1.4/cda.html Connectors Connecteurs Accept all authenticated users: Accepte tout utilisateur authentifié : Manual download Téléchargement manuel Tomcat valve Valve Tomcat If your sessions explorer is on the same server that the portal, either use the adminSessions end point in Manager configuration, or override the globalStorage and globalStorageOptions parameters in section all (and not portal) of lemonldap-ng.ini. Si l'explorateur de sessions est sur le même serveur que le portail, utiliser soit la terminaison adminSessions dans la configuration eu manager, ou surcharger les paramètres globalStorage et globalStorageOptions dans la section all (et pas portal) de lemonldap-ng.ini. Reader URL: URL used by SAML SP to read the cookie. URL de lecture : URL utilisée par le SP SAML pour lire le cookie. ../../../media/documentation/manager-portalskin.png ../../../media/documentation/manager-portalskin.png Delete other session if IP differs Efface les autres sessions de l'utilisateur si les adresses IP diffèrent zimbraPreAuthKey zimbraPreAuthKey CGI CGI secureTokenUrls secureTokenUrls You need to register a new application on Facebook to get an application ID and a secret. Il faut enregistrer la nouvelle application dans Facebook pour obtenir un identifiant d'application et un secret. DocumentRoot /var/lib/lemonldap-ng/portal/   DocumentRoot /var/lib/lemonldap-ng/portal/   WHATTOTRACE must be replaced by the attribute or macro configured in the What To Trace parameter (REMOTE_USER) WHATTOTRACE doit être remplacé par l'attribut ou la macro configurée dans le paramètre indiquant le champ utilisateur à stocker dans les journaux (REMOTE_USER) http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 documentation:1.4:resetpassword documentation:1.4:resetpassword http://lanyrd.com/2011/jcos/sdrbd/ http://lanyrd.com/2011/jcos/sdrbd/ to the sessions storage backend au système de stockage des sessions icons:gpg.png icons:gpg.png documentation:1.4:authcas documentation:1.4:authcas /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac SAML token Jeton SAML RewriteRule ^/saml/.* /index.pl RewriteRule ^/saml/.* /index.pl DBI table name Nom de table DBI Follow SOAP configuration backend page Suivre la documentation backend de configuration SOAP Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Apache Kerberos module Module Kerberos d'Apache ../../documentation/1.4/idpopenid.html ../../documentation/1.4/idpopenid.html Internet Explorer Internet Explorer lemonldap-ng-manager: contains administration interface and session explorer lemonldap-ng-manager : contient l'interface d'administration et l'explorateur de session Then you only have to write myskin/css/styles.css and add your media to myskin/images. Il suffit ensuite d'écrire myskin/css/styles.css et d'ajouter les médias dans myskin/images. remoteGlobalStorage remoteGlobalStorage Access rules and HTTP headers Règles d'accès et en-têtes HTTP Remote Session backend Backend de sessions distant If you use features like SAML (authentication and issuer), CAS (issuer) and password reset self-service, you also need to index some fields. Lorsqu'on utilise des fonctionnalités telles SAML (authentification ou fournisseur d'identité), CAS (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs. Since 1.1.0, a notification explorer is available in Manager, and notifications can be done for all users, with the possibility to display conditions. Depuis la version 1.1.0, un explorateur de notifications est disponible dans le manager, et les notifications peuvent être faites pour tous les utilisateurs, avec possibilité d'affichage conditionnel. ../pages/documentation/presentation.html ../pages/documentation/presentation.html Sessions: where sessions are stored. Sessions: où sont stockées les sessions. Session expiration: sessions will never expire (server side) Expiration des sessions : les sessions n'expirent jamais (du côté serveur) -1 if this URL is not known by LL::NG configuration -1 si cette URL n'est pas connue de la configuration de LL::NG documentation:1.4:samlservice documentation:1.4:samlservice Rule for session granting Règle pour l'autorisation d'ouverture de session Order deny,allow Order deny,allow OBM_GIVENNAME OBM_GIVENNAME django django "userobm_email" => "HTTP_OBM_MAIL", "userobm_email" => "HTTP_OBM_MAIL", Extend variables using macros and groups Étendre les variables en utilisant les macros et groups OBM is enterprise-class messaging and collaboration platform for workgroup or enterprises with many thousands users. OBM est une plateforme collaborative et de messagerie pour entreprises ou groupes de travail comprenant plusieurs milliers d'utilisateurs. Change mydomain.org (in AssertionConsumerService markup, parameter Location) into your Google Apps domain. Changer mydomain.org (dans AssertionConsumerService markup, parameter Location) en votre domaine Google Apps. It has a simple but powerful syntax which makes sure the data files remain readable outside the Wiki and eases the creation of structured texts. Il dispose d'une syntaxe simple mais puissante qui fait que les fichiers de données restent lisibles en dehors du Wiki, et facilite la création de textes structurés. ../../../media/applications/obm_logo.png ../../../media/applications/obm_logo.png Set Email in Options » Authentication Response » Default NameID format Mettre Email dans Options » Réponse d'authentification » Format NameID par défaut Radius Radius Social Networks and News Réseaux sociaux et nouvelles If a user is not authenticated and attempts to connect to an area protected by a LemonLDAP::NG compatible Handler, he is redirected to a portal. Si un utilisateur n'est pas authentifié et tente de se connecter à une application protégée par un agent compatible LemonLDAP::NG, il est redirigé vers le portail. You have then to install all the downloaded packages: Il faut ensuite installer tous les paquets téléchargés : Another LL::NG system configured with OpenID authentication Un autre système LL::NG configuré avec authentification OpenID SSLVerifyClient optional_no_ca ... </VirtualHost> SSLVerifyClient optional_no_ca ... </VirtualHost> ServerName auth.example.com   ServerName auth.example.com   CAS Session backend Module de stockage CAS hideOldPassword hideOldPassword Sign-out page URL: this in not the SLO access point (Google Apps does not support SLO), but the main logout page. Sign-out page URL: il ne s'agit pas du point d'accès de déconnexion globale (SLO) (Google Apps ne le supporte pas), mais de la page de déconnexion. Go to the Manager and create a new virtual host for Sympa. Aller dans le manager et créer un nouvel hôte virtuel pour Sympa. <Location /status> <Location /status> url_logout: URL used by OBM to logout, will be caught by LL::NG url_logout: URL utilisée par OBM pour les déconnexions, sera appelée par LL::NG Restrict /js/ and /css/ directory to authenticated users Restreindre les répertoires /js/ et /css/ aux utilisateurs authentifiés WebID is a way to uniquely identify a person, company, organisation, or other agent using a URI and a certificate. WebID est un moyen d'identification unique de personnes, entreprises, organisation, ou autre agent en utilisant une URI et un certificat. Main components Composants principaux For each binding you can set: Pour chaque déclaration, vous pouvez indiquer : Integrate your own application Integrer ses propres applications Initiate the Kerberos connection: Initialiser la connexion Kerberos : http://www.google.com/apps/ http://www.google.com/apps/ http://lasso.entrouvert.org http://lasso.entrouvert.org ../../documentation/1.4/samlservice.html#general_options ../../documentation/1.4/samlservice.html#general_options ../../../media/applications/limesurvey_logo.png ../../../media/applications/limesurvey_logo.png gender gender Secure Token Memcached servers Serveurs Memcached pour le jeton sécurisé PerlSetVar LmProxyPass http://www.private.com/ PerlSetVar LmProxyPass http://www.private.com/ So Apache::Session module is not a problem for handlers. Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. CPAN test reports: Rapports de test du CPAN: You need some prerequisites: Certains pré-requis sont nécessaire : Skin customization Personnalisation du thème http://en.wikipedia.org/wiki/Doctor_Who http://en.wikipedia.org/wiki/Doctor_Who Secured cookie: 4 options: Cookie sécurisé : 4 options : Login history: display user's last logins and last failed logins Historique de connexion : affiche les derniers succès et échecs de connexion We will use the macros to do that. On utilise les macros pour ça. Python (Django) Python (Django) Build the tarball from SVN Construire l'archive depuis SVN Authentication response Réponse d'authentification User owns SSO cookies on the main domain (see Login kinematics) Les utilisateurs possèdent des cookies SSO dans le domaine principal (voir la cinématique de connexion) Store user password in session Stocker le mot-de-passe utilisateur dans la session /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart All rules are concerned: Toutes les règles sont concernées : [all] cda = 1 [all] cda = 1 icons:flags:de.png icons:flags:de.png POST data Données POST It is compliant with the form replay feature Il est compatible avec le rejeu de formulaire ../documentation/current/ssocookie.html ../documentation/current/ssocookie.html Conditions: Conditions : https://my-profile.eu/ https://my-profile.eu/ Then, go in BrowserID parameters: Ensuite, aller dans les paramètres BrowserID: documentation:liferay_5.png documentation:liferay_5.png You can inspect a user session with the sessions explorer (in Manager) On peut inspecter une session utilisateur avec l'explorateur de sessions (accessible depuis le manager) http://en.wikipedia.org/wiki/FastCGI http://en.wikipedia.org/wiki/FastCGI ~40 000 ~40 000 documentation:latest:installrpm documentation:latest:installrpm In the manager: set Apache::Session::Memcached in General parameters » Sessions » Session storage » Apache::Session module and add the following parameters (case sensitive): Dans le manager : indiquez Apache::Session::Memcached dans Paramètres généraux » Sessions » Stockage des sessions » Module Apache::Session et ajoutez les paramètres suivant (sensibles à la casse) : Protocol and port Protocole et port You can do it either by uploading the file, or get it from IDP metadata URL (this require a network link between your server and the IDP): Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'URL de métadatas de l'IDP (à condition d'avoir un lien réseau entre le serveur et l'IDP): In Portal virtual host, you will find several configuration parts: Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration : Then Zimbra do the SSO by setting a cookie in user's browser Ensuite Zimbra génère son cookie SSO dans le navigateur de l'utilisateur http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng URI of the page which contains the form L'URI de la page qui contient le formulaire Activation: set to On Activation : mettre à Activé. ../../../media/screenshots/1.1/mailreset/mailreset_step2.png ../../../media/screenshots/1.1/mailreset/mailreset_step2.png any files sharing system (NFS, NAS, SAN,…) tout système de partage de fichiers (NFS, NAS, SAN,…) /_detail/screenshots/1.0/dark/menu.png?id=screenshots /_detail/screenshots/1.0/dark/menu.png?id=screenshots icons:xeyes.png icons:xeyes.png This documentation just explains how to set up the SSO part. Cette documentation explique seulement comment activer la partie SSO. /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation http://www.fitzdsl.net/?p=286 http://www.fitzdsl.net/?p=286 To bypass this, LL::NG can remember what password was given by user on authentication phase. Pour contourner ce problème, LL::NG peut se souvenir du mot-de-passe utilisé dans la phase d'authentification. ../media/icons/bug.png ../media/icons/bug.png A time profile (allowed hours and day of the week) Un profil de temps (heures et jours de la semaine autorisés) LL::NG provides a valve, available on download page. LL::NG fournit une valve, disponible sur page de téléchargement. One user tries to access to the portal Un utilisateur tente d'accéder au portail Dokuwiki virtual host in Apache Hôte virtuel Dokuwiki dans le manager SGS SGS This feature can be enabled and configured in Manager, in General Parameters » Advanced Parameters » Login History. Cette fonctionnalité peut être activée et configurée dans le manager dans Paramètres généraux » Paramètres avancés » Historique de connexion. Some applications using it Quelques applications l'utilisant LDAPFilter => '(uid=$user)', LDAPFilter => '(uid=$user)', //"userobm_vacation_dateend" => , //"userobm_vacation_dateend" => , documentation:1.4:idpsaml documentation:1.4:idpsaml ../media/logos/logo_abuledu.png ../media/logos/logo_abuledu.png ../pages/documentation/1.1/memcachedsessionbackend.html ../pages/documentation/1.1/memcachedsessionbackend.html Sunday is the first day. Dimanche est le premier jour. ../pages/documentation/1.1/notifications.html ../pages/documentation/1.1/notifications.html server server Subject for confirmation mail Sujet du message de confirmation ../../documentation/1.4/portalmenu.html#categories_and_applications ../../documentation/1.4/portalmenu.html#categories_and_applications documentation:1.4:authad documentation:1.4:authad That message can contain session data as user attributes or macros. Ce message peut contenir des données de session tels les attributs ou les macros. http://en.wikipedia.org/wiki/OAuth http://fr.wikipedia.org/wiki/OAuth msmith@badwolf.org msmith@badwolf.org mailReplyTo mailReplyTo Auth-Mail Auth-Mail ../../documentation/1.4/sqlsessionbackend.html ../../documentation/1.4/sqlsessionbackend.html vi /var/lib/lemonldap-ng/portal/login.pl vi /var/lib/lemonldap-ng/portal/login.pl Lemonldap::NG::Manager Lemonldap::NG::Manager yubikeySecretKey yubikeySecretKey complicatedpassword: Password of AD technical account complicatedpassword: mot-de-passe du compte AD technique Choose and configure your main sessions storage system Choisir et configurer le système principal de stockage des sessions Feature Fonctionnalité documentation.html documentation.html You can also use caFile and caPath parameters. On peut également utiliser les paramètres caFile et caPath. External databases: not managed by LemonLDAP::NG, for example user database Les bases de données externes: non gérées par LemonLDAP::NG, par exemple la base des utilisateurs idpcas idpcas Clément OUDOT Clément OUDOT Copy ValveLemonLDAPNG.jar in <TOMCAT_HOME>/server/lib: Copier ValveLemonLDAPNG.jar dans <TOMCAT_HOME>/server/lib: When you commit OmegaT files in svn repository, don't push backup files. Lorsque vous validez les fichiers OmegaT dans le dépôt svn, n'y poussez pas les fichiers de sauvegarde. Deny from all Deny from all or: ou : CAS_CAFile CAS_CAFile groups groups _lassoSessionDump _lassoSessionDump Internal databases: only used by LemonLDAP::NG Les bases de données internes: utilisées seulement par LemonLDAP::NG <IDPSSODescriptor> <IDPSSODescriptor> 1.2 1.2 http://www.svwux.org/ http://www.svwux.org/ You can find all versions on OW2 forge download page. Vous pouvez trouver toutes les versions sur la page de téléchargement de la forge OW2. /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation 1.1 1.1 http://manager.example.com http://manager.example.com <IfModule mod_rewrite.c> <IfModule mod_rewrite.c> As you may have guessed, these accounts are famous characters from the TV show Doctor Who. Comme on peut le voir, ces comptes sont les fameux caractères du show TV Doctor Who. SQL SQL LL::NG validate the token and propose a password change form LL::NG valide la valeur et propose un formulaire de changement de mot-de-passe ../../documentation/presentation.html#kinematics ../../documentation/presentation.html#kinematics Don't forget to install cron files ! N'oubliez pas d'installer les fichiers cron ! If exportedAttr is set, only those attributes are copied in the session database of the secondary LL::NG structure. Si exportedAttr est défini, seuls ces attributs sont copiés dans la base des sessions du système LL::NG secondaire. ../../documentation/1.4/idpopenid.html#configuration ../../documentation/1.4/idpopenid.html#configuration "userobm_address1" => "HTTP_OBM_POSTALADDRESS", "userobm_address1" => "HTTP_OBM_POSTALADDRESS", HASH of login success and failures Table des connexion réussies ou échouées off: never display off : ne jamais afficher Default skin Thème par défaut documentation:manager-saml-idp-metadata.png documentation:manager-saml-idp-metadata.png ../../documentation/1.4/performances.html ../../documentation/1.4/performances.html Unoptimized for session explorer and single session features. Pas optimisé pour l'exlorateur de sessions et les fonctionnalités de session unique. ../../../media/screenshots/1.1/mailreset/mailreset_step5.png ../../../media/screenshots/1.1/mailreset/mailreset_step5.png OpenID authentication level Niveau d'authentification d'OpenID Application menu Menu application authenticate user authentifier les utilisateurs SSL authentication Authentification SSL $uid eq "coudot" $uid eq "coudot" 105.000 105.000 By default, Manager is protected to allow only the demonstration user “dwho”. Par défaut, le manager est protégé et n'autorise que l'utilisateur de démonstration “dwho”. Forward logout to applications Propager les déconnexions aux applications ../documentation/current/logs.html ../documentation/current/logs.html http://www.slideshare.net/coudot/sl2011-lemon-ldapng http://www.slideshare.net/coudot/sl2011-lemon-ldapng ../../../../css/print.css ../../../../css/print.css Session-ID => $_session_id Session-ID => $_session_id Thursday, 25-Apr-1999 00:40:33 GMT: at the indicated time and date (but this is probably a bad idea) Thursday, 25-Apr-1999 00:40:33 GMT : jusqu'à la date indiquée (généralement une mauvaise idée) Go in the Manager and set the session module (Apache::Session::Browseable::MySQL for MySQL) in General parameters » Sessions » Session storage » Apache::Session module and add the following parameters (case sensitive): Aller dans le manager et mettre le module de session (Apache::Session::Browseable::MySQL pour MySQL) dans Paramètres généraux » Sessions » Stockage des sessions » Module Apache::Session et ajouter le paramètre suivant (sensible à la casse) : If some of your servers are not in the same (secured) network than the database, it is recommended to use SOAP access for those servers. Si certains des serveurs ne se trouvent pas sur le même réseau (securisé) que la même base de données, il est recommandé d'utiliser l'accès SOAP pour ces serveurs. It can be a brake for the portal: En revanche, ce peut-être un frein pour le portail : _idpConfKey _idpConfKey Go to the Manager and create a new virtual host for Zimbra. Aller dans le manager et créer un nouvel hôte virtuel pour Zimbra. For full install: Pour une installation complète : Université de Limoges Université de Limoges ($uid =~ /^admin0/i)[0] ? ($uid =~ /^admin0/i)[0] ? ../../../media/documentation/manager-saml-idp-attribute.png ../../../media/documentation/manager-saml-idp-attribute.png Write custom functions library Écrire une librairie de fonctions personnalisées Now imagine the following DIT: On suppose le schéma suivant : .example.com = EXAMPLE.COM .example.com = EXAMPLE.COM David COUTADEUR: developer, tester David COUTADEUR : developeur, testeur SSL SSL Secret token: a secret token used to secure transmissions between OpenID client and server (see below). Jeton secret : le jeton secret utilisé pour sécuriser les transmissions entre le client et le server OpenID (voir ci-dessous). rm custom* cp ../pastel/custom* . rm custom* cp ../pastel/custom* . Service Provider Fournisseur de service The ProxyPreserveHost directive will forward the Host header to the protected application. La directive ProxyPreserveHost transfère l'en-tête Host à l'application protégée. CAS server Serveur CAS "server_ip_check" => false, "server_ip_check" => false, logs logs /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability This kind of SSO mechanism is not clean, and can lead to problems, like local password blocking, local session not well closed, etc. Ce type de mécanisme SSO n'est pas parfait et peut générer des problèmes tels des blocages de mots-de-passe, sessions locales mal closes, etc... CRONDIR: Cronfile directory (default: $PREFIX/etc/lemonldap-ng/cron.d) CRONDIR : répertoire des fichiers cron (défaut: $PREFIX/etc/lemonldap-ng/cron.d) http://xmlns.com/foaf/spec/#sec-crossref http://xmlns.com/foaf/spec/#sec-crossref PGT file: temporary file where proxy tickets are stored (by default, /tmp/pgt.txt) Fichier PGT : fichier temporaire où les tickets de proxy sont stockés (par défaut, /tmp/pgt.txt) ../pages/documentation/1.1/authdbi.html ../pages/documentation/1.1/authdbi.html Handler parameters Paramètres de l'agent Local SSO URL pattern: regular expression to match the SSO URL (by default: ^/zimbrasso$) Expression de correspondance de l'URL SSO : expression régulière de correspondance de l'URL SSO (par défaut : ^/zimbrasso$) http://test2.example.com http://test2.example.com Configure Dokuwiki virtual host like other protected virtual host. Configurer l'hôte virtuel Dokuwiki comme n'importe quel autre hôte virtuel protégé. The generated tarball is in the current directory. L'archive générée est dans le répertoire courant. ... ... Name: Auth-User Nom : Auth-User Auth-Roles => $bbbRoles Auth-Roles => $bbbRoles each area has 2 portals: chacune a 2 portails: documentation:remote-interoperability.png documentation:remote-interoperability.png Some can be mandatory, so if they are not returned by IDP, the session will not open. Certains peuvent être obligatoires, et s'ils ne sont pas retournés par l'IDP, la session n'est pas ouverte. Session opening Ouverture de session RewriteRule ^/cas/.* /index.pl RewriteRule ^/cas/.* /index.pl //"userobm_vacation_message" => , //"userobm_vacation_message" => , Example with MySQL: Exemple avec MySQL: ../../../media/applications/linshare_logo.png ../../../media/applications/linshare_logo.png Notifications Notifications http://memcached.org/ http://memcached.org/ ... other SSL parameters ... ... autres paramètres SSL ... You can also configure jetlag (if all of your users use the same timezone): On peut aussi configurer jetlag (si tous les utilisateurs utilisent le même fuseau): Rule name Nom de la règle You just have to share configuration and sessions databases between those servers: Il faut juste partager les bases de données de configuration et des sessions entre ces serveurs : User source attribute: name of the attribute in users entries used in the link (default: dn). Attribut source utilisateur : nom de l'attribut utilisateur utilisé dans le lien (défaut: dn). The real user identifier is stored in a Memcached server and the protected application can the request the Memcached server to get user identifier. L'identifiant utilisateur réel est stockédans un serveur Memcached et l'application protégée peut requérir le serveur Memcached pour obtenir l'identifiant utilisateur. gen-webid-cert.sh gen-webid-cert.sh http://mail.ow2.org/wws/arc/lemonldap-ng-users http://mail.ow2.org/wws/arc/lemonldap-ng-users The statistics are collected trough a daemon launched by the Handler. Ces statistiques sont collectées via un démon lancé par l'agent. 'LDAP#Openldap' => { 'LDAP#Openldap' => { sympaSecret sympaSecret Auto login: set to 1 to use auto login. Authentification automatique : mettre à 1 pour utiliser la connexion automatique. tomcat >= 5.5 tomcat >= 5.5 The digit will not be shown on portal page. Le chiffre ne sera pas affiché sur la page portail. LDAPFilter => '(uid=$user)', LDAPFilter => '(uid=$user)', For tests with example.com, launch the following : Pour les tests avec example.com, lancer ce qui suit : Xavier GUIMARD Xavier GUIMARD Just configure the access rules. Configurer simplement la règle d'accès. Then go to trunk directory: Aller ensuite dans le répertoire trunk : _lastAuthnUTime _lastAuthnUTime Use the name you want but this values in the value field. Utiliser n'importe quel nom de clef mais ces valeurs dans le champ « valeur ». Headers are used to give user datas to the application. Les en-têtes sont utilisés pour donner aux applications les données utilisateurs. securedCookie securedCookie documentation:1.4:authradius documentation:1.4:authradius For block brute force attack with fail2ban pour bloquer les attaques en force brute avec fail2ban ../pages/documentation/1.4/authdemo.html ../pages/documentation/1.4/authdemo.html For databases like PostgreSQL, don't forget to add “Commit” with a value of 1 Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1 MBConsulting MBConsulting Access protected application Accéder aux applications protégées logos:logo_gn.png logos:logo_gn.png 1 if user is superadmin 1 si l'utilisateur est super-administrateur When all modifications are done, click on Save to store configuration. Lorsque toutes les modifications sont effectuées, cliquer sur Sauver pour enregistrer la configuration. To define keys, you can: Pour définir les clefs, vous pouvez : fileconfbackend fileconfbackend Login login Anti frame protection Protection anti-frame Windows 2008 server: Windows 2008 server : SMTPAuthUser SMTPAuthUser ../media/icons/flags/fr.png ../media/icons/flags/fr.png http://en.wikipedia.org/wiki/SAML http://fr.wikipedia.org/wiki/SAML Portal (dark theme) Portail (thème dark) ../../documentation/presentation.html#cross_domain_authentication_cda ../../documentation/presentation.html#cross_domain_authentication_cda Be careful with some applications which doesn't verify Lemonldap::NG headers after having created their own cookies. Faire attention avec certaines applications qui ne vérifient pas les en-têtes Lemonldap::NG après avoir créé leurs propres cookies. http://en.wikipedia.org/wiki/Basic_access_authentication http://fr.wikipedia.org/wiki/HTTP_Authentification Add an Apache access control to avoid other access. Ajouter un contrôle d'accès Apache pour éviter les autres accès. rpm --import rpm-gpg-key-ow2 rpm --import rpm-gpg-key-ow2 Auth-User Auth-User ../../../../media/applications/bugzilla_logo.png ../../../../media/applications/bugzilla_logo.png Some Apache::Session module are not useable by Lemonldap::NG such as Apache::Session::Memcached since this module does not offer capability to browse sessions Certains modules Apache::Session ne sont pas utilisables par Lemonldap::NG tel Apache::Session::Memcached, car ce module n'offre pas de dispositif de parcours des sessions //"userobm_host_id" => , //"userobm_host_id" => , ../pages/documentation/1.1/highavailability.html ../pages/documentation/1.1/highavailability.html This can be used to notify right changes,… See notifications for more. Ceci peut être utilisé pour notifier des changements de droits,... Consultez la page notifications pour plus d'information. Rule Règle Proxy LL::NG Proxy LL::NG You will need a very recent version of Lasso (>= 2.3.0). Vous devez utiliser une version récente de Lasso (>= 2.3.0). server based restriction (like Apache “allow/deny” mechanism) restrictions basées sur le serveur (tel le mécanisme “allow/deny” d'Apache) You can use the following rules instead: On peut utiliser les règles suivantes à la place : http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html <OrganizationURL xml:lang="en">http://www.example.com</OrganizationURL> </Organization> <OrganizationURL xml:lang="en">http://www.example.com</OrganizationURL> </Organization> All data is stored in plain text files – no database is required. Toutes les données sont stockées dans des fichiers texte, aucune base de données n'est nécessaire. one with read/write rights for servers hosting the manager une avec des droits en lecture/écriture pour les serveurs hébergeant le manager localStorageOptions localStorageOptions → The specified node is not the uploaded tree. → Le nœud spécifié n'est pas dans l'arbre chargé. ../../../../media/applications/googleapps_logo.png ../../../../media/applications/googleapps_logo.png You have access to all environment variable, like user IP address. Toutes les variables d'environnement sont disponibles, telle l'adresse IP de l'utilisateur. #!/usr/bin/perl   use SOAP::Lite; use utf8;   my $lite = SOAP::Lite #!/usr/bin/perl   use SOAP::Lite; use utf8;   my $lite = SOAP::Lite SAML2 implementation is based on Lasso. L'implementation SAML est basée sur Lasso. https://www.djangoproject.com/ https://www.djangoproject.com/ Twitter application name Nom d'application Twitter Get user info: contact user database to collect attributes Récupère les informations utilisateur : contacte la base de données utilisateurs pour les obtenir authchoice authchoice Check if user is already authenticated Vérifie si l'utilisateur n'est pas déjà authentifié Portal SOAP services Services SOAP du portail Edit ~/.rpmmacros and set your build parameters (example for RHEL5): Editer ~/.rpmmacros et mettre les paramètres de construction (exemple pour RHEL5): mailSubject mailSubject User attribute: which session attribute will be used to display Connected as in the menu Attribut utilisateur : attribut de session à utiliser pour afficher Connecté en tant que dans le menu ../../documentation/features.html#session_explorer ../../documentation/features.html#session_explorer Example of a protected virtual host with LemonLDAP::NG as reverse proxy: Exemple d'hôte virtuel protégé avec Lemonldap::NG en proxy-inverse : 'samlIDPSSODescriptorSingleSignOnServiceHTTPPost' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;', 'samlIDPSSODescriptorSingleSignOnServiceHTTPPost' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;', <Directory /usr/local/lemonldap-ng/htdocs/portal/> <Directory /usr/local/lemonldap-ng/htdocs/portal/> Extraction Extraction /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots Drupal Drupal apt-get install libauthen-radius-perl apt-get install libauthen-radius-perl Cache backend Module du cache local LL::NG based protection Protection basée sur LL::NG print "$res notification(s) have been inserted\n"; } print "$res notification(s) have been inserted\n"; } ../pages/documentation/1.1/soapminihowto.html ../pages/documentation/1.1/soapminihowto.html Notification backend options Options du module de stockage des notifications To customize a skin, the simplest way is to create a new skin folder: Pour personnaliser un thème, la meilleure façon est de créer un nouveau répertoire : When you set a parameter in lemonldap-ng.ini, it will override the parameter from the global configuration. Lorsqu'un paramètre et fixé dans lemonldap-ng.ini, il surcharge le paramètre issu de la configuration globale. Define headers used in OBM mapping, for example: Definir les en-têtes utilisés pour les correspondances OBM, par exemple : General parameters Paramètres généraux SlideShare SlideShare Memcached Memcached /_detail/logos/logo_gn.png?id=references /_detail/logos/logo_gn.png?id=references Use reset attribute: enable to use the password reset attribute. Utiliser l'attribut reset : activé pour utiliser l'attribut reset du mot-de-passe. Portal and Manager skins have not evolved a lot since 1.0, so 1.0 screenshots are still up to date. Les thèmes du portail et du manager n'ont pas beaucoup évolué depuis la version 1.0, donc les captures d'écran 1.0 restent valables. User XXXX was not granted to open session User XXXX was not granted to open session Reply address: address seen in the “Reply-To” field Adresse pour la réponse : adresse vue dans le champ “Reply-To” ... ... http://www.php.net/empty http://www.php.net/empty Rules are applied in alphabetical order (comment and regular expression). Les règles sont appliquées dans l'ordre alphabétique (commentaires et expressions régulières). http://auth.example.com http://auth.example.com We split databases in two categories: Nous scindons les bases de données en deux catégories : Casimir ANTUNES Casimir ANTUNES apt-key add rpm-gpg-key-ow2 apt-key add rpm-gpg-key-ow2 Binaries install : Installer les exécutables : Your module has to be loaded by Apache (for example after Handler load): Le module doit être chargé par Apache (par exemple après le chargement de l'agent) : See SAML service configuration chapter. Voir le chapître de configuration du service SAML. http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://en.wikipedia.org/wiki/OpenID http://fr.wikipedia.org/wiki/OpenID Database Interface Database Interface dbi:Pg:dbname=sessions;host=10.2.3.1 dbi:Pg:dbname=sessions;host=10.2.3.1 You can also use <portal>?logout=1 as logout_url to remove LemonLDAP::NG session when “disconnect” is chosen. On peut aussi utiliser <portal>?logout=1 comme URL de déconnexion pour supprimer la session LemonLDAP::NG lorsque la déconnexion est demandée. twitterAuthnLevel twitterAuthnLevel DBI which has been deprecated: it is a read-only backend that exists just for compatibility with older versions of LemonLDAP::NG. DBI devenu obsolète : il reste un backend en lecture seule qui n'existe que pour la compatibilité avec les anciennes versions de LemonLDAP::NG. Variables Variables by date par date documentation:1.2:upgrade documentation:1.2:upgrade isAuthorizedURI(cookieValue,url): check if user is granted to access to the function isAuthorizedURI(cookieValue,url) : vérifie si l'utilisateur est autorisé à accéder à la fonction # Uncomment this line if you use portal SOAP capabilities # Décommenter cette ligne si les fonctions SOAP du portail sont utilisées mkdir /tmp/MyNamespace/2: Permission denied ... mkdir /tmp/MyNamespace/2: Permission denied ... Register LemonLDAP::NG on partner Service Provider Enregistrer LemonLDAP::NG sur le fournisseur de service partenaire Format (optional): SAML attribute format. Format (optionnel) : format de l'attribut SAML. /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots http://www.limesurvey.org http://www.limesurvey.org Persistent Session backend options Options du backend des sessions persistantes Usage Utilisation LDAP configuration backend Backend de configuration LDAP Currently, the module is simply handling a Radius Authentication request and has been tested only against a FreeRadius server. Actuellement, ce module traite simplement une requête d'authentification Radius et n'a été testé que sur un serveur FreeRadius. Past and present contributors Contributeurs passé et présent Handler Redirections Redirections des agents /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots For tests with the configured domain, launch the following : Pour les tests avec le domaine configuré, lancer : Superadmin: no one can stop him! Superadmin : personne ne peut l'arrêter ! 2_pub 2_pub portal/skins/common/mail_password.tpl portal/skins/common/mail_password.tpl To configure your new skin in Manager, select the custom skin, and enter your skin name in the configuration field. Pour configurer le nouveau thème dans le manager, selectionner le thème personnalisé et entrer le nom du nouveau thème dans le champ. Proxy cookie name Nom du cookie du proxy useXForwardedForIP useXForwardedForIP Binary attributes: regular expression matching binary attributes (see Net::LDAP documentation). Attributs binaires : expression régulière correspondant aux attributs binaires (voir la documentation Net::LDAP). activeTimer activeTimer Write good rules Écrire de bonnes règles ldapConfBase ldapConfBase passwordstore passwordstore Password: will not change any password Mots-de-passe : ne change aucun mot-de-passe ../../../media/screenshots/1.1/manager/notifications_explorer_create.png ../../../media/screenshots/1.1/manager/notifications_explorer_create.png documentation:1.4:upgrade documentation:1.4:upgrade SAML Service Service SAML If the OpenID consumer ask for data, users will be prompted to accept or not the data sharing. Si le client OpenID demande des données utilisateurs, ceux-ci sont questionnés pour accepter ou non le partage. DBI Connection chain Chaîne de connexion DBI /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay Links Links <subtitle>: subtitle to display: will be inserted in HTML page enclosed in <h2 class=“notifText”>… <subtitle> : sous-titre : sera inséré dans la page HTML encadré dans <h2 class=“notifText”>… It will open a dialog to choose: Une boîte de dialoque s'ouvre pour choisir : Portal: used to authenticate users, display applications list and provides identity provider service (SAML, OpenID, CAS). Portail: utilisé pour authentifier les utilisateurs, afficher la liste des applications et fournir le service d'identité (SAML, OpenID, CAS). http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software The configuration will be store under a specific branch, for example ou=conf,ou=applications,dc=example,dc=com. La configuration est stockée dans une branche spécifique, par exemple ou=conf,ou=applications,dc=example,dc=com. DBI Mail column Colonne mail DBI http://www.tux.in.ua/articles/2810 http://www.tux.in.ua/articles/2810 Prepare the database Preparer la base de données Change default DNS domain Changer le domaine DNS par défaut Fill values here: Renseigner les valeurs ici : http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ dbiPassword dbiPassword Now we have to send the right role to the right application trough LemonLDAP::NG. Il faut maintenant envoyer le bon rôle à la bonne application via LemonLDAP::NG. Logout: logout button Déconnexion : bouton de déconnexion data longblob ); data longblob ); ../pages/documentation/1.1/authapache.html ../pages/documentation/1.1/authapache.html liblemonldap-ng-portal-perl: Portal files liblemonldap-ng-portal-perl : fichiers du portail /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help ssoLogonHours ssoLogonHours Options +ExecCGI Options +ExecCGI Mounir GZADY Mounir GZADY Here are the main options used by LL::NG: Ci-dessous les principales options utilisées par LL::NG : No configuration found No configuration found ../pages/documentation/1.1/authyubikey.html ../pages/documentation/1.1/authyubikey.html ../../documentation/1.4/configvhost.html ../../documentation/1.4/configvhost.html Restart all your remote Apache servers Redémarrer tous les serveurs Apache distants newSession: create a session (return attributes) newSession : crée une session (retourne les attributs) KrbMethodK5Passwd Off KrbMethodK5Passwd Off //"userobm_domain_id" => , //"userobm_domain_id" => , Portal customization Personnalisation du portail ../../documentation/1.1/upgrade.html ../../documentation/1.1/upgrade.html SSLUserName (optional): certificate field that will be used to identify user in LL::NG portal virtual host SSLUserName (optionnel) : champ du certificat à utiliser pour identifier pour identifier un utilisateur dans l'hôte virtuel du portail LL::NG logoutforward logoutforward LmLocationToReplace: string to replace in Location header LmLocationToReplace : chaîne à remplacer dans l'en-tête Location ../pages/documentation/1.1/formreplay.html ../pages/documentation/1.1/formreplay.html Apache configuration Configuration d'Apache Create sessions table: Créer la table des sessions : ../documentation/current/start.html#configuration_database ../documentation/current/start.html#configuration_database This protocol is implementated in an LL::NG specific Handler. Ce protocole est implementé dans un handler spécifique de LL::NG. documentation:1.4:variables documentation:1.4:variables twitterAppName twitterAppName Of course, there are other differences. Il y a bien sur d'autres différences. ../../../media/documentation/manager-menu-application.png ../../../media/documentation/manager-menu-application.png ../pages/documentation/1.1/authremote.html ../pages/documentation/1.1/authremote.html DBI authentication level Niveau d'authentification DBI ../../documentation/1.4/federationproxy.html ../../documentation/1.4/federationproxy.html </Location>   </Location>   To avoid problems, LL::NG decode them using http://search.cpan.org/perldoc?Apache2::URI#unescape_url. Pour éviter les problèmes, LL::NG les décode en utilisant http://search.cpan.org/perldoc?Apache2::URI#unescape_url. In Manager, go in General Parameters > Authentication modules and choose Twitter for authentication module. Dans le manager, allez dans Paramètres generaux > Modules d'authentification et choisissez Twitter comme module d'authentication. <AttributeAuthorityDescriptor> <AttributeAuthorityDescriptor> <IfModule mod_dir.c> <IfModule mod_dir.c> rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* Another LL::NG system configured with CAS authentication Un autre système LL::NG configuré avec authentification CAS documentation:1.4:soapconfbackend documentation:1.4:soapconfbackend Portal recognizes the user with its SSO cookies, and see he is coming from a different domain Le portail reconnaît l'utilisateur par son cookie SSO et voit qu'il sollicite une application d'un domaine différent You can also use the same user for all. On peut également utiliser le même compte pour tous. ../pages/documentation/1.1/authssl.html ../pages/documentation/1.1/authssl.html press press ssoEndDate ssoEndDate documentation:1.4:authnull documentation:1.4:authnull User Header: Auth-User (case sensitive) User Header: Auth-User (case sensitive) ../../documentation/1.4/status.html ../../documentation/1.4/status.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://twitter.com/lemonldapng http://twitter.com/lemonldapng Connector Connecteur Example : Exemple : CAS session module name and options: choose a specific module if you do not want to mix CAS sessions and normal sessions (see why). Nom et options du module session CAS : choisir un module spécifique pour ne pas mêler les sessions CAS et les sessions normales (voir pourquoi). Authentication and UserDB Authentification et base d'utilisateurs No headers are required. Aucun en-tête n'est nécessaire. Variables are stored in the user session. Les variables sont stockées dans la session utilisateur. Mail charset: Charset used for the body of the mail (default: utf-8) Jeu de caractères du courriel : jeu de caractère utilisé pour le corps du message (défaut : utf-8) ../../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../../documentation/1.4/configvhost.html#lemonldapng_configuration <property name="preAuthenticatedUserDetailsService"> <property name="preAuthenticatedUserDetailsService"> lemonldap_ng_sample_protected_application_1340022329086.png lemonldap_ng_sample_protected_application_1340022329086.png Form replay data les données à rejouer dans les formulaires Get the tarball on download page and follow next steps (or install using RPM or Debian packages): Récupérez l'archive sur la page de téléchargement et suivez les étapes suivantes (ou installez les paquets RPM ou Debian): Group source attribute: name of the attribute in groups entries used in the link, for recursive group search (default: dn). Attribut source du groupe : nom de l'attribut dans l'entrée groupe utilisé dans le lien pour la recherche récursive de groupe (défaut : dn). ../../documentation/1.4/portalmenu.html ../../documentation/1.4/portalmenu.html mailreset_step4.png mailreset_step4.png A skin is composed of different files: Un thème est composé de différents fichiers : Adapt the reload virtual host name to the domain you configured. Adapter le nom d'hôte virtuel de rechargement au domaine configuré. User is redirected on portal and his SSO cookies is empty L'utilisateur est redirigé vers le portail et son cookie SSO est vide mailreset_step1.png mailreset_step1.png To use TLS, set ldap+tls://server and to use LDAPS, set ldaps://server instead of server name. Pour utiliser TLS, utiliser ldap+tls://server et pour utiliser LDAPS, indiquer ldaps://server au lieu du nom de serveur. /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart documentation:1.4:applications:phpldapadmin documentation:1.4:applications:phpldapadmin You must read the man page corresponding to your database (Apache::Session::MySQL, …) to learn more about parameters. Il faut consulter la page de manuel correspondant à la base de données (Apache::Session::MySQL, …) pour connaître les paramètres. Exported attributes Attributs exportés Prerequisites Pré-requis Application logout: the request is forwarded to application but SSO session is not closed Déconnexion applicative: la requête est transmise à l'application mais la session SSO n'est pas détruite Change mydomain.org into your Google Apps domain Mettre mydomain.org dans le domaine Google Apps Some examples: Quelques exemples: https://metacpan.org/module/Apache::Session::Browseable https://metacpan.org/module/Apache::Session::Browseable /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots fileNameSeparator: file name separator. fileNameSeparator : séparateur de nom de fichier. ../media/logos/logo_ministere_justice.jpg ../media/logos/logo_ministere_justice.jpg </IfModule>   </IfModule>   SAML sessions module name and options Options et nom du module de sessions SAML adminSessions/: read/write access to sessions (required for distant Portal, distant Manager or distant Handlers which modify sessions) adminSessions/ : accès en lecture/écriture aux sessions (nécessaire pour les portails ou manager distants ou les handlers distants qui modifient les sessions) PRIMARY KEY (cfgNum,field) PRIMARY KEY (cfgNum,field) It is stored in session datas under the name $_facebookToken Il est stocké dans les données de session sous le nom $_facebookToken cd lemonldap-ng-* make make configure make test sudo make install cd lemonldap-ng-* make make configure make test sudo make install documentation:1.4:federationproxy documentation:1.4:federationproxy documentation:1.4:authmulti documentation:1.4:authmulti Status module activation Activation du module de statut tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages https://auth.linagora.com/ https://auth.linagora.com/ http://journeesperl.fr/fpw2011/talk/3383 http://journeesperl.fr/fpw2011/talk/3383 LemonLDAP::NG provide a script that allows to edit configuration items in non interactive mode. LemonLDAP::NG fournit un script qui autorise l'édition d'éléments de configuration en mode non-interactif. Zimbra application in menu Application Zimbra dans le menu http://search.cpan.org/perldoc?Apache::Session http://search.cpan.org/perldoc?Apache::Session aptitude install lemonldap-ng aptitude install lemonldap-ng In the Manager, go in General Parameters » Issuer modules » CAS and configure: Dans le manager, aller dans Paramètres généraux > Modules fournisseurs et configurer : Safe can be very annoying when we use extended functions or custom functions. Safe peut être très gênant lorsqu'on utilise les fonctions étendues ou les fonctions personnalisées. http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev NTLM NTLM Postal code Postal code kdestroy kdestroy (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? RewriteEngine On RewriteEngine On Custom functions Fonctions personnalisées make make test make make test ../../documentation/1.4/writingrulesand_headers.html#headers ../../documentation/1.4/writingrulesand_headers.html#headers LemonLDAP::NG configuration Configuration de LemonLDAP::NG Configure your tomcat home in build.properties files. Configurer votre tomcat home dans le fichier build.properties. Customizable NameID formats are: Les formats de NameID personnalisables sont : RMLL RMLL 'create_user' => $_SERVER['HTTP_AUTH_SUPERADMIN'], 'create_user' => $_SERVER['HTTP_AUTH_SUPERADMIN'], Extract from the Wikipedia article: Extrait de l'article Wikipedia: ^/public/ ^/public/ Kinematics: Cinématique : make ubuntu-install make ubuntu-install ../../documentation/1.4/filesessionbackend.html ../../documentation/1.4/filesessionbackend.html ../pages/documentation/1.1/sessions.html ../pages/documentation/1.1/sessions.html https://wikit.firewall-services.com/doku.php?id=lemonldap_ng https://wikit.firewall-services.com/doku.php?id=lemonldap_ng Force authentication: set to 'On' to force authentication when user connects to portal, even if he has a valid session Forcer l'authentification : mettre à 'Activé' pour forcer l'authentification lorsque l'utilisateur accède au portail même s'il dispose d'une session valide Define at least: Definir au moins : ../media/rpm-gpg-key-ow2 ../media/rpm-gpg-key-ow2 Edit also OBM Apache configuration to enable LL::NG Handler: Éditer également la configuration du serveur Apache d'OBM pour activer les en-têtes LL::NG : multiValuesSeparator multiValuesSeparator Go in Manager, and: Aller dans le manager et : ^/pub/admin/ ^/pub/admin/ unicode2iso unicode2iso openIdIDPList openIdIDPList You just need to know the ID of the error (look at Portal/Simple.pm) and then add to lemonldap-ng.ini: Il suffit de connaître l'ID de l'erreur (voir Portal/Simple.pm) et de l'ajouter dans lemonldap-ng.ini : SSLVerifyClient: set to optional to allow user with a bad certificate to access to LL::NG portal page. SSLVerifyClient : mettre à optional pour autoriser les utilisateurs ne disposant pas d'un certificat valide à accéder à la page du portail LL::NG Get the tarball from download page. Récupérer l'archive depuis la page de téléchargement. This script must be run as root, it will then use the Apache user and group to access configuration. Ce script doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration. Auto login Auto login More than one server can be set here separated by spaces or commas. Plusieurs serveurs peuvent être renseignés séparés par des virgules ou espaces. Notification delete function: Fonction d'effacement de notification : Add a floating menu Ajouter un menu flottant Zimbra syncs to smartphones (iPhone, BlackBerry) and desktop clients like Outlook and Thunderbird. Zimbra se synchronise avec les smartphones (iPhone, BlackBerry) et les clients lourds de bureau tels Outlook et Thunderbird. authfacebook authfacebook Order allow,deny Order allow,deny dbiUser: DBI user. dbiUser : utilisateur DBI. Download the Lasso tarball and compile it on your system. Téléchargez l'archive Lasso et compilez là sur votre système. We include some template files that can be customized: Nous incluons des fichiers modèles qui peuvent être personnalisés : Certificate authorities directory Répertoire des autorités de certification Configuration access Accès à la configuration LemonLDAP::NG Manager Gestionnaire LemonLDAP::NG get_key_from_all_sessions: list all sessions and return asked keys get_key_from_all_sessions : liste toutes les sessions et retourne les clefs demandées screenshots:1.1:manager:notifications_explorer_create.png screenshots:1.1:manager:notifications_explorer_create.png <property name="userDetailsService" ref="userDetailsService"/> <property name="userDetailsService" ref="userDetailsService"/> documentation/features.html documentation/features.html Give display name Donne le nom à afficher vi /var/www/html/limesurvey/config.php vi /var/www/html/limesurvey/config.php Form replay with Apache mod_proxy Rejeu de formulaires avec le mod_proxy d'Apache Protected application sends response to Handler L'application protégée renvoie sa réponse à l'agent Shared secret: this is the passphrase to use to connect to the Radius server Secret partagé : la phrase de passe à utiliser pour se connecter au serveur Radius $_userDB $_userDB If a modification is done, the configuration is saved with a new configuration number. Si une modification est effectuée, la configuration est sauvée avec un nouveau numéro. documentation:manager-menu-application.png documentation:manager-menu-application.png Headers are defined inside a virtualhost and takes effect only on it. Les en-têtes sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Manage virtual hosts Gérer les hôtes virtuels Authentication module Module d'authentication If the user do a new password reset request but there is already a request pending, the user can ask the confirmation mail to be resent. Si l'utilisateur effectue une nouvelle demande de réinitialisation mais qu'une requête est déjà en attente, il peut demander une ré-expédition du courriel. Event Événement MD5 MD5 dbiUserUser dbiUserUser XXXX was not found in tree XXXX was not found in tree If you modify /saml/metadata suffix you have to change corresponding Apache rewrite rule. Si vous modifiez le suffixe /saml/metadata, vous devez changer la règle de réécriture d'Apache. ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/samlservice.html ../pages/documentation/1.1/samlservice.html $groups $groups authnull authnull Domain Name System Domain Name System http://www.iana.org/assignments/enterprise-numbers http://www.iana.org/assignments/enterprise-numbers <Location /index.pl/notification> <Location /index.pl/notification> documentation:1.4:customfunctions documentation:1.4:customfunctions ../../../media/applications/zimbra_logo.png ../../../media/applications/zimbra_logo.png Example for groups: Exemples de groupes: ^/config/ ^/config/ Status module can not be loaded without localStorage parameter Status module can not be loaded without localStorage parameter Prepare database Préparer la base de données ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/passwordstore.html ../../documentation/1.4/passwordstore.html No headers are needed. Aucun en-tête n'est nécessaire. _utime _utime Configure the following headers. Configurer les en-têtes suivants. Cookie Javascript protection Protection Javascript du cookie translations.html translations.html Remember that rules written on GET parameters must be tested. Rappel : les règles poratnt sur des paramètres GET doivent être testées. ../../documentation/1.4/applications/bugzilla.html ../../documentation/1.4/applications/bugzilla.html Else, current configuration is kept. Sinon, la configuration courante est gardée. Manager tree JQuery CSS file Fichier CSS de l'arbre JQuery du manager POST data: use form replay Des données POST : à utiliser pour répondre aux formulaires 10.0.0.1:20000 10.0.0.2:20000 10.0.0.1:20000 10.0.0.2:20000 When installing LL::NG, the Manager can only be accessed with the demo account dwho. Lorsqu'on installe LL::NG, le manager n'est accessible que via le compte de démonstration dwho. Proxy backend to be used in conjunction with another session backend. Backend proxy à utiliser avec un autre backend de sessions. [PORTAL] is the portal URL [PORTAIL] est l'URL du portail 'lang' => 'en', 'lang' => 'en', install_examples_site (/usr/local/lemonldap-ng/examples) install_examples_site (/usr/local/lemonldap-ng/examples) Redirection to the portal of the secondary area (transparent) Redirection vers le portail secondaire (transparent) <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat> <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat> NameID formats Formats de NameID ../pages/documentation/1.1/writingrulesand_headers.html ../pages/documentation/1.1/writingrulesand_headers.html Auth-Roles => $ssoRoles Auth-Roles => $ssoRoles Cascading Style Sheets Cascading Style Sheets https://cas.unilim.fr/ https://cas.unilim.fr/ Go to the Manager and create a new virtual host for LimeSurvey. Aller dans le manager et créer un nouvel hôte virtuel pour LimeSurvey. Install and launch a Redis server. Installez et lancer un serveur Redis. Pages where this menu is displayed can be restricted, for example: Les pages où ce menu est affiché peuvent être restreintes, par exemple : secureTokenMemcachedServers secureTokenMemcachedServers Reset password on next logon workflow Réinitialisation du mot-de-passe à la connexion suivante ../../documentation/1.4/security.html#write_good_rules ../../documentation/1.4/security.html#write_good_rules Issy Les Moulineaux Issy-les-Moulineaux You can prefix the key name with a digit to order them. Il est possible d'ordonner les noms de clefs en utilisant un préfixe numérique. Response Location: Access Point for SSO response. Response Location : Point d'accès pour les réponses SSO. Location Lieu logos:logo_ucanss.png logos:logo_ucanss.png These options are used to build redirection URL (when user is not logged, or for CDA requests). Ces options sont utilisées dans la construction des URL de redirection (lorsque l'utilisateur n'est pas connecté ou pour les requêtes CDA). Sessions database Base de données des sessions A macro is stored as attributes: it can contain boolean results or any string Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères Now we will add Google Apps as a new SAML Service Provider: Ajouter ensuite Google Apps comme nouveau fournisseur de service SAML : Safe jail Cage sécurisée Presentation Présentation Speaker Conférencier SSO cookies is not detected, so Handler redirects user to Portal Si le cookies SSO n'est pas détecté, l'agent redirige l'utilisateur vers le portail ../pages/documentation/1.1/applications/authbasic.html ../pages/documentation/1.1/applications/authbasic.html LL::NG can also act as SAML IDP, that allows to interconnect two LL::NG systems. LL::NG peut également agir comme un IDP SAML, ce qui permet d'interconnecter deux systèmes LL::NG. ipAddr WHATTOTRACE _httpSessionType ipAddr ipAddr WHATTOTRACE _httpSessionType ipAddr ConFoo ConFoo SAML Session backend options Options du module de stockage SAML ../../documentation/1.4/fastcgi.html ../../documentation/1.4/fastcgi.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html documentation:1.4:sqlsessionbackend documentation:1.4:sqlsessionbackend You can also choose a different session module to split SSO sessions and SAML sessions. Vous pouvez également utiliser un module différent pour répartir les sessions SSO et SAML. Reset password by mail (self service) Réinitialiser les mots-de-passe par mail (self-service) Use redirect on error Utiliser les redirections en cas d'erreur Redis server Serveur Redis Go in General Parameters » Issuer modules » SAML and configure: Dans le manager, aller dans Paramètres généraux > Modules fournisseurs » SAML et configurer : ->proxy('http://auth.example.com/index.pl/notification');     $r = $lite->newNotification( '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> ');   if ( $r->fault ) { ->proxy('http://auth.example.com/index.pl/notification');     $r = $lite->newNotification( '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> ');   if ( $r->fault ) { /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword LockDirectory LockDirectory References Références ../../documentation/1.0/upgrade.html ../../documentation/1.0/upgrade.html cp HttpAuthPlugin.php extenstions/ cp HttpAuthPlugin.php extenstions/ documentation:1.4:ldapconfbackend documentation:1.4:ldapconfbackend 1f777a6581e478499f4284e54fe2d4a4e513dfff 1f777a6581e478499f4284e54fe2d4a4e513dfff The user click on the link in the mail L'utilisateur clique sur le lien dans le courriel LL::NG as federation protocol proxy LL::NG en proxy de fédération de protocoles Portal (impact theme) Portail (thème impact) Prefer then the other solutions (see below). Si c'est le cas, utiliser une autre solution (voir ci-dessous). The portal is the biggest component of Lemonldap::NG. Le portail est le composant le plus gros de Lemonldap::NG. Google Apps does not support Single Logout (SLO). Google Apps ne supporte pas le Single Logout (SLO). LemonLDAP::NG allows to override any configuration parameter directly in script file. LemonLDAP::NG autorise la surcharge de tout paramètre de configuration directement dans les fichiers de script. postcode postcode variables variables Proxy Granting Ticket Proxy Granting Ticket This option can then be overridden for each Service Provider. Cette option peut être surchargée pour chaque fournisseur de service. ../../documentation/1.4/parameterlist.html ../../documentation/1.4/parameterlist.html Authentication backend Module d'authentification Dokuwiki virtual host in Manager Hôte virtuel Dokuwiki dans le manager http://httpd.apache.org/docs/current/mod/mod_ssl.html http://httpd.apache.org/docs/current/mod/mod_ssl.html ldapServer => 'ldap1.example.com', ldapServer => 'ldap1.example.com', http://webchat.freenode.net http://webchat.freenode.net http://lanyrd.com/2012/fosdem/spfqq/ http://lanyrd.com/2012/fosdem/spfqq/ Create two macros (inside Variables » Macros): Créer deux macros (dans Variables » Macros): LWP::UserAgent parameters Paramètre LWP::UserAgent ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../pages/documentation/1.1/cda.html ../pages/documentation/1.1/cda.html 'namespace' => 'MyNamespace'? 'namespace' => 'MyNamespace'? lemonldap-ng: meta-package, contains no file but dependencies on other packages lemonldap-ng : meta-paquet qui ne contient aucun fichier mais des dépendances vers les autres paquets Jan 2012: Configuration de LemonLDAP::NG avec Google Authenticator Jan 2012 : Configuration de LemonLDAP::NG avec Google Authenticator Roadmap Feuille de route ../pages/documentation/1.1/applications/tomcat.html ../pages/documentation/1.1/applications/tomcat.html This objectClass allow attributes cn and description. Cet classe d'objet autorise les attributs cn et description. Jquery (javascript framework) is included in tarball and RPMs, but is a dependency on Debian official releases Jquery (framework javascript) est inclus dans l'archive et les RPMs, mais est une dépendance des versions officielles Debian Prepare the database and the LL::NG configuration file Preparer la base de donnée et le fichier de configuration LL::NG documentation:1.4:security documentation:1.4:security Manager (sessions explorer) Manager (explorateur de sessions) Check SLO message signature: check SLO message signature Vérifie la signature des messages SLO : vérifie la signature des messages SLO See translations. Voir traductions. ../../../media/applications/phpldapadmin_logo.png ../../../media/applications/phpldapadmin_logo.png Anonymous access Accès anonyme They are extracted from the users database by the users module. Elles sont extraites de la base de données des utilisateurs par le module utilisateurs. The default rule is: La règle par défaut est : Use LDAP for sessions Utiliser LDAP pour les sessions Accounting Traçabilité checkLogonHours($ssoLogonHours, '', $_timezone) checkLogonHours($ssoLogonHours, '', $_timezone) Back to main index Retour à l'index principal All static content (examples, CSS, images, etc.) is in /usr/share/lemonldap-ng/ Tous le contenu statique (exemples, CSS, images, etc...) se trouve dans /usr/share/lemonldap-ng/ Confirmation mail content (optional): Content of mail sent when password change is asked Contenu du message de confirmation (optionnel) : contenu du courriel envoyé lorsque le changement de mot-de-passe est demandé notifyDeleted notifyDeleted You have to install mod_ssl for Apache. Installer mod_ssl pour Apache. See how to do this on Zimbra wiki. Voir comment le faire sur le wiki Zimbra. Use with caution. À utiliser avec précaution. By default, notifications will be stored in the same database as configuration: Par défaut, les notifications sont stockées dans la même base de données que la configuration : http://search.cpan.org/perldoc?DBD::Pg http://search.cpan.org/perldoc?DBD::Pg It is also used by SAML SP to fill the authentication level in user session, based on authentication response authentication context. Il est également utilisé par le SP SAML pour définir le niveau d'authentification dans la session de l'utilisateur en se basant sur la réponse d'authentification. This documentation will focus on Kerberos authentication module, that can allow for example to set transparent authentication for Active Directory users (as Active Directory is a Kerberos server). Cette documentation se focalise sur le module d'authentification Kerberos qui permet par exemple de rendre transparente l'authentification sur Active Directory (car Active Directory est un serveur Kerberos). xguimard@example.com xguimard@example.com ); ); download Téléchargement To extend SSO on several domains, a cross-domain mechanism is implemented in LemonLDAP::NG. Pour étendre le SSO sur plusieurs domaines, un mécanisme inter-domaines est intégré à LemonLDAP::NG. safejail safejail $groups =~ /\badmin\b/ $groups =~ /\badmin\b/ Go on http://auth.example.com and log with one of the demonstration account. Allez sur http://auth.example.com et connectez-vous avec l'un des comptes de démonstration Protect the Manager by LL::NG Protéger le manager par LL::NG Portal URL is the address used to redirect users on the authentication portal by: L'URL du portail est l'adresse utilisée pour rediriger les utilisateurs bers le portail d'authentification par : /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay Install the new lemonldap-ng.ini file at the place of the old file in all LL::NG servers Installer le nouveau fichier lemonldap-ng.ini à la place de l'ancien dans tous les serveurs LL::NG twitterSecret twitterSecret require SOAP::Lite; </Perl> require SOAP::Lite; </Perl> Pascal PEJAC Pascal PEJAC /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability CAS CA file Fichier d'AC de CAS Try Freenode Webchat! Essayez le client web Freenode ! https://developers.facebook.com/apps https://developers.facebook.com/apps phpLDAPadmin phpLDAPadmin Use /adminSessions if the Handler need to modify the session, for example if you configured an idle timeout. Utiliser /adminSessions si l'agent doit modifier la session, par exemple si on configure un délai d'inactivité des sessions. /_detail/logos/sgs_white_small.jpg?id=references /_detail/logos/sgs_white_small.jpg?id=references Radius secret Secret Radius http://dev.twitter.com/pages/api_faq http://dev.twitter.com/pages/api_faq To get attributes values in session, declare them in exported variables Pour utiliser ces valeurs dans les sessions, il faut les déclarer dans les variables exportées Most of configuration can be done trough LemonLDAP::NG Manager (by default http://manager.example.com). La majeure partie de la configuration peut être réalisée via le manager LemonLDAP::NG (par défaut http://manager.example.com). All handlers download the whole configuration, so many servers can serve the same virtual hosts Tous les agents téléchargent intégralement la configuration, donc plusieurs serveurs peuvent servir le même hôte virtuel icons:personal.png icons:personal.png Each virtual host is a protected resource, with access rules, headers, POST data and options. Chaque hôte virtuel est une ressource protégée, avec règles d'accès, en-têtes, options et données POST. by double IP (sessions opened by the same user from multiple computers) par double IP (sessions ouvertes par le même utilisateur sur plusieurs machines) Xavier GUIMARD Xavier GUIMARD exportedVars exportedVars documentation:manager_access_rule.png documentation:manager_access_rule.png documentation:1.4:authdbi documentation:1.4:authdbi The cookie $id isn't yet available: Object does not exist in the data store The cookie $id isn't yet available: Object does not exist in the data store documentation:1.4:prereq documentation:1.4:prereq See Manager protection documentation to know how to use Apache modules or LL::NG to manage access to Manager. Voir la documentation de protection du manager pour savoir comment utiliser les modules d'Apache ou LL::NG pour gérer l'accès au manager. customheader.tpl : HTML code int the header div customheader.tpl : code HTML inséré dans le div d'en-tête </IfModule> </IfModule> These settings can be overriden per virtual host, see virtual host management. Ces paramètres peuvent être surchargés dans chaque hôte virtuel, voir la gestion des hôtes virtuels. exportedvars exportedvars http://auth.example.com/index.pl/sessions http://auth.example.com/index.pl/sessions ^/admin/ ^/admin/ http://www.omegat.org/ http://www.omegat.org/ http://drupal.org http://drupal.org Remote Session backend options Options du backend de sessions distant List type: choose white list to define allowed domains or black list to define forbidden domains Type de liste : choisir liste blanche pour définir la liste exhaustive des domaines autorisés ou liste noire pour lister les domaines interdits Example Exemple http://joind.in/2862 http://joind.in/2862 Success mail subject: Subject of mail sent when password is changed (default: [LemonLDAP::NG] Your new password) Sujet du message de succès : sujet du courriel lorsque le mot-de-passe est changé (défaut : [LemonLDAP::NG] Your new password) casStorageOptions casStorageOptions documentation:1.4:installdeb documentation:1.4:installdeb In this case you will be able to use $_password to fill any password POST field. Dans ce cas, la variable $_password peut être utilisée dans tous les champs à envoyer. You can set one or several IP addresses, separated by spaces, or let this parameter empty to disable the checking. Plusieurs adresses IP separées par des espaces peuvent être entrées, ou ce paramètre peut rester vide pour désactiver ce contrôle. Then set: et indiquez : DBI password Mot-de-passe DBI The redirection from portal can be done either with code 303 (See Other), or with a JavaScript redirection. Cette redirection du portail peut être effectuée via le code 303 (See Other) ou par une redirection JavaScript. images and other media files images et autres médias This message is displayed only when you upgrade from a version older than 1.0 Ce message n'est affiché que lors d'une mise à jour depuis une version inférieure à la 1.0 yum update yum update # SOAP functions for sessions management (disabled by default) # Gestion des fonctions SOAP functions pour la gestion des sessions (désactivée par défaut) Configuration Configuration # SAML2 Issuer # Fournisseur d'identité SAML2 persistentStorage persistentStorage documentation:1.4:ldapsessionbackend documentation:1.4:ldapsessionbackend Variables can be used in rules and headers. Les variables peuvent être utilisées dans les règles et en-têtes. WebID whitelist: list of space separated hosts granted to host FOAF document. Liste blanche WebID : liste de noms d'hôtes, séparés par des espaces, autorisés à héberger les documents FOAF. http://search.cpan.org/perldoc?Apache::Session::Postgres http://search.cpan.org/perldoc?Apache::Session::Postgres Authentication choice will also be registered in session: Le choix d'authentication est également enregistré dans la session : You just have to activate Notifications in the Manager (General Parameters > Advanced Parameters > Notifications > Activation) or in lemonldap-ng.ini: Il suffit d'activer les notifications dans le manager (Paramètres généraux > Paramètres avancés > Notifications > Activation) ou dans lemonldap-ng.ini : During this period, user can ask the confirmation mail to be resent (default: session timeout value) Durant cette période, l'utilisateur peut demander que le courriel soit ré-émis (défaut : durée de vie de la session) DBI UserDB connection password Mot-de-passe de connexion UserDB DBI The request validity time is a configuration parameter. La durée de validité de la requête est un paramètre de configuration. internal variables, managed by LemonLDAP::NG les variables internes, gérées par LemonLDAP::NG Apache portal SSL configuration Configuration SSL du portail dans Apache Auth-User: $uid Auth-User: $uid install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) Indeed, this variable is set by the Handler on the physical server hosting the Handler, and not on other servers where the Handler is not installed. Toutefois, cette variable est renseignée par l'agent dans le serveur physique l'hébergeant mais pas dans les autres serveurs sans agents. ../documentation/current/portalcustom.html ../documentation/current/portalcustom.html Give a static value Donne une valeur statique OW2 annual conference Conférence annuelle OW2 AuthzLDAPAuthoritative On AuthzLDAPAuthoritative On /_detail/icons/lists.png?id=documentation%3A1.4%3Astart /_detail/icons/lists.png?id=documentation%3A1.4%3Astart SSO cookie Cookie SSO Some options are available: Quelques options sont disponibles : ../../documentation/1.4/applications/spring.html ../../documentation/1.4/applications/spring.html ../pages/documentation/1.1/rbac.html ../pages/documentation/1.1/rbac.html Next create the configuration branch where you want. Créer ensuite la branche des configurations n'importe où. Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... macros are used to extend (or rewrite) exported variables. Les macros sont utilisées pour étendre (ou réécrire) les variables exportées. http://lanyrd.com/2011/fpw2011/sfhcb/ http://lanyrd.com/2011/fpw2011/sfhcb/ This works like File backend, except that data are serialized in JSON. Il fonctionne comme le backend File, si ce n'est que les données sont sérialisées au format JSON. CAS PGT temporary file Fichier temporaire PGT de CAS To enable LL::NG authentication plugin, go in /etc/obm/obm_conf.inc: Pour activer le composant d'authentification LL::NG, aller dans /etc/obm/obm_conf.inc: Hamza AISSAT Hamza AISSAT documentation:1.0:upgrade documentation:1.0:upgrade ../../../media/icons/jabber_protocol.png ../../../media/icons/jabber_protocol.png To work with LL::NG it requires: Pour fonctionner avec LL::NG il faut : ../pages/documentation/1.1/securetoken.html ../pages/documentation/1.1/securetoken.html Open SSO session Ouvrez une session SSO Strasbourg Strasbourg logon_hours: string representing allowed logon hours (GMT) logon_hours : chaîne représentant les heures autorisées (GMT) ../../../documentation/1.4/passwordstore.html ../../../documentation/1.4/passwordstore.html Net::OpenID::Consumer > 1.00 Net::OpenID::Consumer > 1.00 groups are stored as space-separated strings in the special attribute “groups”: it contains the names of groups whose rules were returned true for the current user les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant File configuration backend Backend de configuration File Send “Lastname, firstname” in Auth-Name: Envoi de “Lastname, firstname” dans Auth-Name: cda cda ../../../media/icons/kmultiple.png ../../../media/icons/kmultiple.png LL::NG uses Perl Authen::Radius as a simple authentication backend. LL::NG utilise Authen::Radius de Perl comme simple backend d'authentification. /_detail/icons/flags/de.png?id=press /_detail/icons/flags/de.png?id=press South Bay Community Network South Bay Community Network $wgAuth = new HttpAuthPlugin(); $wgAuth = new HttpAuthPlugin(); Access rule: accept Règle d'accès : accept Lutece Lutece port port Outlook Web Access, … Outlook Web Access, … return $param }   1; return $param }   1; Allow from all Allow from all https://websso.dmz.bpi.fr/ https://websso.dmz.bpi.fr/ In the schema above, the user has the following values: Dans le schéma ci-dessus, l'utilisateur dispose des entrées suivantes : documentation:1.4:applications:googleapps documentation:1.4:applications:googleapps mailto:lemonldap-ng-users@ow2.org mailto:lemonldap-ng-users@ow2.org Required for PostgreSQL Requis pour PostgreSQL performances performances Proxy backend to be used in conjunction with another configuration backend. Backend proxy à utiliser avec un autre backend de configuration. You can define how many logins and failed logins will be stored. On peut définir le nombre de connexions et d'échecs à stocker. Apache based protection Protection basée sur Apache All identity provider protocols can be used simultaneously Tous les protocoles de fournisseur d'identité peuvent être utilisés simultanément In Debian/Ubuntu mod_ssl is already shipped in apache2.2-common package. Dans Debian/Ubuntu mod_ssl est installé avec le paquet apache2.2-common. Drupal virtual host in Apache Hôte virtuel Apache hébergeant Drupal ../../documentation/features.html#session_restrictions ../../documentation/features.html#session_restrictions ../../../documentation/1.4/idpsaml.html ../../../documentation/1.4/idpsaml.html http://jira.ow2.org/browse/LEMONLDAP http://jira.ow2.org/browse/LEMONLDAP lemonldapng lemonldapng LemonLDAP::NG SSO cookies are generated by Apache::Session, they are as secure as a 128-bit random cookie. Les cookies SSO de LemonLDAP::NG sont générés par Apache::Session, ils sont aussi sûrs que tout cookie basé sur un aléa de 128 bits. ...   </VirtualHost> ...   </VirtualHost> UserName -> ... UserName -> ... By default, LemonLDAP::NG uses Apache logs to store user actions and other messages: Par défaut, LemonLDAP::NG utilise les journaux d'Apache pour journaliser les actions des utilisateurs et autre messages : You can write rules matching any component of URL to protect including GET parameters, but be careful. On peut écrire des règles qui examine n'importe quel composant de l'URL à protéger y compris les paramètres GET, mais il faut faire attention. ../media/icons/flags/de.png ../media/icons/flags/de.png change password (with server side password policy management) changer les mots-de-passe (avec la gestion de la politique de mot-de-passe côté serveur) qw(delete header cache read_from_client cookie redirect unescapeHTML)); qw(delete header cache read_from_client cookie redirect unescapeHTML)); User provisioning (account auto creation at first connection) Importation des comptes utilisateurs (auto-création à la première connexion) After choosing the file name (for example lemonldapn-ng-priv.key), download the key on your disk. Après avoir choisi le nom de fichier (par exemple lemonldapn-ng-priv.key), le télécharger sur le disque. Configure Drupal virtual host like other protected virtual host. Configurer l'hôte virtuel Drupal comme n'importe quel autre hôte virtuel protégé. Access to Liferay (first time): Accès à Liferay (première connexion): ../pages/documentation/1.1/applications/bugzilla.html ../pages/documentation/1.1/applications/bugzilla.html ../../documentation/1.4/resetpassword.html ../../documentation/1.4/resetpassword.html documentation:liferay_3.png documentation:liferay_3.png +3M: three months from session creation +3M : trois mois après la création de la session Parameter redirections Paramètrer les redirections chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock URL used before being redirected to the portal (empty if portal was used as entry point) URL utilisée avant d'être redirigé vers le portail (vide si le portail a été utilisé comme point d'entrée) Datas related to SAML protocol Donnée relative au protocole SAML Zimbra Zimbra Project = [path/to/trunk/build/lemonldap-ng]/omegat.files/zz (where zz is your international code, example: “fr” for France) Projet = [chemin/vers/trunk/build/lemonldap-ng]/omegat.files/zz (où zz est votre code international, exemple: “fr” pour le français) uid uid PostgreSQL PostgreSQL URL pattern: ^/admin/ Expression sur l'URL : ^/admin/ ../../documentation/1.4/jsonfileconfbackend.html ../../documentation/1.4/jsonfileconfbackend.html redirections redirections It means that you manage authorizations to access applications by checking the role(s) of the user, and provide this role to the application. Celà signifie qu'on gère les autorisations d'accès aux applications en examinant le(s) rôle(s) de l'utilisateur et en fournissant ce(s) rôle(s) à l'application. Organization Organisation ../../documentation/1.4/samlservice.html ../../documentation/1.4/samlservice.html ../pages/documentation/1.1/ssocookie.html ../pages/documentation/1.1/ssocookie.html Admin Admin 0.9.4_password_menu.png 0.9.4_password_menu.png Examples for LDAP: Exemples pour LDAP : LemonLDAP::NG will do some checks on configuration and display errors and warnings if any. LemonLDAP::NG effectue ensuite quelques tests sur la configuration et affiche les éventuelles erreurs et avertissements. ../../../../media/documentation/googleapps-sso.png ../../../../media/documentation/googleapps-sso.png The “default” rule is only applied if no other rule match La règle “default” n'est appliquée que si aucune autre règle ne correspond # group admin -> $uid eq 'foo' or $uid eq 'bar'   # Use a group in a rule ^/admin -> $groups =~ /\badmin\b/ # groupe admin -> $uid eq 'foo' or $uid eq 'bar'   # Utiliser un groupe dans une règle ^/admin -> $groups =~ /\badmin\b/ DNS DNS ../../documentation/1.4/authsaml.html ../../documentation/1.4/authsaml.html Virtual Hosts: access rules, headers, etc. Hôtes virtuels : règles d'accès, en-têtes, etc... ../../documentation/1.4/authopenid.html ../../documentation/1.4/authopenid.html status status Uniform Resource Identifier Uniform Resource Identifier GLPI GLPI Create database: Créer la base de données : documentation/presentation.html documentation/presentation.html Portal destroys session and redirects user on itself with an empty SSO cookies Le portail détruit la session et redirige l'utilisateur sur lui-même avec un cookie SSO vide Use LDAP for configuration Utiliser LDAP pour la configuration Clone Clone Before enabling Manager protection by LL::NG, you must have configured how users authenticate on Portal, and test that you can log in without difficulties. Avant d'activer la protection du manager par LL::NG, il faut avoir configuré la méthode d'authentification sur le portail et véifier qu'on peut s'y connecter sans difficultés. Same with remote server configured with the same host name: La même chose avec le serveur distant configuré avec le même nom d'hôte : documentation:1.4:applications:liferay documentation:1.4:applications:liferay However, it is not advised to edit such files, as they are part of the program, and will be erased at next upgrade. Toutefois, il n'est pas recommandé d'éditer ces fichiers car ils font partie du logiciel et peuvent être écrasés lors des mises à jour. SAML / Shibboleth identity provider Fournisseur d'identité SAML / Shibboleth To configure the user identifier in access log, go in Manager, General Parameters > Logging > REMOTE_USER. Pour configurer l'identifiant utilisateur dans les journaux d'accès, aller dans le manager, Paramètres généraux > Journalisation > REMOTE_USER. documentation:latest:authdemo documentation:latest:authdemo Choose and configure your main configuration storage system Choisir et configurer le système principal de stockage de la configuration getMenuApplications(cookieValue): return a list of authorizated applications (based on menu calculation) getMenuApplications(cookieValue): retourne une liste des applications autorisées (basée sur le calcul du menu) Parameters for File backend are the same as File configuration backend. Les paramètres pour le backend File sont les mêmes que ceux du backend de configuration File. purge old sessions purger les anciennes sessions user full name Nom complet de l'utilisateur icons:access.png icons:access.png Manager protection Protection du manager Reload the Manager to see the order that will be used Recharger le manager pour voir l'ordre dans lequel elles seront appliquées 'ldapAuthnLevel' => '2', 'ldapAuthnLevel' => '2', documentation:1.4:nosqlsessionbackend documentation:1.4:nosqlsessionbackend ../../../../media/applications/http_logo.png ../../../../media/applications/http_logo.png Enable mod_perl if not already loaded: Activer mod_perl si ce n'est déjà fait : Preauthentication URL: Zimbra preauthentication URL, either with full URL (ex: http://zimbra.lan/service/preauth), either only with path (ex: /service/preauth) (by default: /service/preauth) URL de pré-authentification : URL de pré-authentification Zimbra, soit l'URL complète (ex : http://zimbra.lan/service/preauth), soit seulement le chemin absolu (ex : /service/preauth) (par défaut : /service/preauth) Validity time of a password reset request: number of seconds for password reset request validity. Durée de validité de la requête de réinitialisation de mot-de-passe : nombre de secondes pour la validité de la requête de réinitialisation. ../../documentation/1.4/authldap.html ../../documentation/1.4/authldap.html Source directory = [path/to/trunk/build/lemonldap-ng]/doc/ Répertoire des sources = [chemin/vers/trunk/build/lemonldap-ng]/doc/ Configure your SQL database Configurer la base de données SQL Restart fail2ban Redémarrer fail2ban See Yubico API page. Voir la page Yubico API. Second step: get the role name for the application. Seconde étape : obtenir le rôle dans cette application. LDAPCon LDAPCon "userobm_mail_quota" => "HTTP_OBM_MAILQUOTA", "userobm_mail_quota" => "HTTP_OBM_MAILQUOTA", Follow the next steps Suivre les étapes suivantes You can also use symbolic links in conf.d Apache directory. On peut aussi utiliser des liens symboliques dans le répertiore conf.d d'Apache. ssoRoles: user ssoRoles: admin ssoRoles: user ssoRoles: admin Then, go in Remote parameters: Ensuite, aller dans les paramètres Remote : Authorization => basic($uid,$_password) Authorization => basic($uid,$_password) To encode the redirection URL, the handler will use some Apache environment variables and also configuration settings: Pour encoder l'URL de redirection, l'agent utilise des variables d'environnement Apache et des paramètres de configuration : Fields to index Champs à indexer Using Redis, you just have to add the “Index” parameter in General parameters » Sessions » Session storage » Apache::Session module : Pour utiliser Redis, il faut ajouter le paramètre “Index” dans Paramètres généraux » Sessions » Stockage des sessions » Module Apache::Session : $ldapservers->SetValue($i,'server','auth_type','config'); $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com'); $ldapservers->SetValue($i,'login','pass','secret'); $ldapservers->SetValue($i,'server','auth_type','config'); $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com'); $ldapservers->SetValue($i,'login','pass','secret'); ~17000 ~17000 [portal]   # Custom error messages error_0 = Big brother is watching you, authenticated user [portal]   # Custom error messages error_0 = Big brother is watching you, authenticated user ../../../../media/applications/dokuwiki_logo.png ../../../../media/applications/dokuwiki_logo.png If your table is not named lmConfig, set it's name in dbiTable parameter. Si la table ne se nomme pas lmConfig, mettre son nom dans le paramètre dbiTable. svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap Siteminder Authentication Siteminder Authentication get groups where user is registered obtenir les groupes dont l'utilisateur est membre ../../../documentation/1.4/extendedfunctions.html#basic ../../../documentation/1.4/extendedfunctions.html#basic This timeout allows to purge sessions of lost RelayState. Ce délai permet de supprimer les sessions des RelayState perdus. Go in Manager and click on SAML 2 Service node. Allez dans le Manager et cliquez sur le nœud Service SAML 2. Simple usage example: Exemple d'usage simple : API secret: API secret from Twitter Secret d'API: secret d'API donné par Twitter mailto:lemonldap-ng-changes@ow2.org mailto:lemonldap-ng-changes@ow2.org Login field name: name of authentication table column hosting login Nom du champ de compte : nom de la colonne de la table d'authentification contenant le login ../media/icons/knewsticker.png ../media/icons/knewsticker.png Using LL::NG in reverse proxy mode, you will not have the REMOTE_USER environment variable set. Lorsque LL::NG est utilisé en mode reverse-proxy, la variable d'environnement REMOTE_USER n'est pas renseignée. The following table list fields to index depending on the feature you want to increase performance: Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances : /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay User-Email User-Email LL::NG will then display a form with an OpenID input, wher users will type their OpenID login. LL::NG affiche alors un formulaire dans lequel les utilisateurs peuvent entrer leur identifiant OpenID. Configure LemonLDAP::NG to use LDAP as main database Configurer LemonLDAP::NG pour utiliser LDAP comme base de données principale Go in Manager, General parameters » Advanced parameters » Security: Aller dans le manager, Paramètres généraux » Paramètres avancés » Sécurité : ../../../../media/applications/obm_logo.png ../../../../media/applications/obm_logo.png Mail reset feature Fonctionnalité de réinitialisation de mot-de-passe If authentication succeed, Portal collect user data Si l'authentication est acceptée, le portail récupère les données de l'utilisateur Liferay virtual host in Manager Hôte virtuel Liferay dans le manager Overloading is not available trough the manager La surcharge n'est pas paramètrable dans le manager Documentation install : Installer la documentation : It can be configured globally, or inside a virtual host. Il peut être configuré globalement, ou dans chaque hôte virtuel. http://search.cpan.org/search?query=Safe&mode=module http://search.cpan.org/search?query=Safe&mode=module Then you will be able to use it in your template like this: On peut ensuite l'utiliser dans le modèle comme suit : Secure Token attribute Attribut du jeton sécurisé features features You can also disable internal Sympa authentication to keep only LemonLDAP::NG by removing user_table paragraph Il est également possible de désactiver l'authentification interne de Sympa pour ne garder que celle de LemonLDAP::NG en supprimant le paragraphe user_table ../../documentation/1.4/authnull.html ../../documentation/1.4/authnull.html You have to set its value in Manager. Il faut en indiquer une dans le manager. Safe module is used to eval expressions in headers, rules, etc. Le module Safe est utilisé pour évaluer les expressions dans les en-têtes, règles, etc... $uid eq "bart.simpson" $uid eq "bart.simpson" Note that all LL::NG components must have access : Tous les composants de LL::NG doivent avoir accès : Interactive management of user passwords: Gestion interactive des mots-de-passe des utilisateurs: http://httpd.apache.org/docs/current/mod/mod_setenvif.html http://httpd.apache.org/docs/current/mod/mod_setenvif.html documentation:1.4:mysqlminihowto documentation:1.4:mysqlminihowto password: $_password (password of the user) password: $_password (mot-de-passe de l'utilisateur) You can preselect IDP with an IDP resolution rule. Il est possible de pré-selectionner l'IDP par une règle de résolution. ldapUsePasswordResetAttribute ldapUsePasswordResetAttribute or to use lemonldap-ng.ini, install it (one line only) in [portal] section: ou pour utiliser lemonldap-ng.ini, écrire (sur une seule ligne) dans la section [portal] : 1 if user is admin 1 si l'utilisateur est administrateur File session backend is the more simple session database. Le backend de sessions File est la plus simple des bases de données. /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions liblemonldap-ng-common-perl: configuration and common files liblemonldap-ng-common-perl : fichiers communs et de configuration The path to the main directory Le chemin du répertoire principal The module must be loaded by Apache (LoadModule directive). Ce module doit être chargé par Apache (directive LoadModule). Secure Token protected URLs URL protégées du jeton sécurisé Configuring the virtual hosts is not sufficient to display an application in the menu. Configurer les hôtes virtuels n'est pas suffisant pour afficher une application dans le menu. </Location>   </Location>   ../../documentation/1.4/portalmenu.html#menu_modules ../../documentation/1.4/portalmenu.html#menu_modules You can import a certificate containing the public key instead the raw public key. Vous pouver importer un certificat contenant la clef publique au lieu d'une simple clef. my $param = shift;   my $param = shift;   Don't forget to create an index on the field used to find users (uid by default) N'oubliez pas de créer un index sur le champ utilisé pour trouver les utilisateurs (uid par défaut) You should have configured LL::NG as an SAML Identity Provider, Il est nécessaire d'avoir configuré LL::NG comme fournisseur d'identité SAML, http://search.cpan.org/perldoc?LWP::UserAgent http://search.cpan.org/perldoc?LWP::UserAgent _notification_id _notification_id Configure the connection string (see DBI manual page) Configurer la chaîne de connexion (voir la page de manuel DBI) ldapTimeout ldapTimeout More information about Safe on CPAN Plus d'information sur Safe sur le CPAN ../../../css/all.css ../../../css/all.css ^/Microsoft-Server-ActiveSync ^/Microsoft-Server-ActiveSync http://perldoc.perl.org/functions/package.html http://perldoc.perl.org/functions/package.html ../pages/documentation/1.1/authtwitter.html ../pages/documentation/1.1/authtwitter.html Service configuration will be used to generate LL::NG SAML metadata, that will be shared with other providers. La configuration du service est utilisée pour générer les métadatas SAML de LL::NG, qui sont partagées avec les autres fournisseurs. Internet Relay Chat Internet Relay Chat Backgound color: Background color displayed in the BrowserID login window Couleur d'arrière plan : Couleur d'arrière plan affichée dans la fenêtre d'authentification BrowserID This configuration storage can be shared between different hosts using: Ce type de stockage de configuration peut être partagé entre différents serveurs en utilisant : http://httpd.apache.org/docs/2.2/mod/mod_proxy.html http://httpd.apache.org/docs/2.2/mod/mod_proxy.html install_handler_site (/usr/local/lemonldap-ng/handler) install_handler_site (/usr/local/lemonldap-ng/handler) "userobm_zipcode" => "HTTP_OBM_POSTALCODE", "userobm_zipcode" => "HTTP_OBM_POSTALCODE", http://lanyrd.com/2011/jdll/smdct/ http://lanyrd.com/2011/jdll/smdct/ When the text is pasted, click on the Apply button to keep the value. Lorsque le texte est collé, cliquer sur le bouton appliquer pour sauver la valeur. Glossary directory = [path/to/trunk/build/lemonldap-ng]/omegat.files/zz/glossary/ Répertoire des glossaires = [path/to/trunk/build/lemonldap-ng]/omegat.files/zz/glossary/ [manager] ;protection = manager [manager] ;protection = manager Shareable Partageable Probe Probe So the above example can also be written like this: Ainsi l'exemple ci-dessous peut être écrit simplement : ../../documentation/1.4/authdemo.html ../../documentation/1.4/authdemo.html Mail charset Table de caractères des mails Zimbra account type Type de compte Zimbra dbiAuthPasswordCol dbiAuthPasswordCol tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test http://perldoc.perl.org/functions/shift.html http://perldoc.perl.org/functions/shift.html It can be used to delete a session Il peut être utilisé pour effacer une session documentation/current/prereq.html#yum documentation/current/prereq.html#yum browseablesessionbackend browseablesessionbackend Apache SSL global configuration Configuration globale de ssl dans Apache Response Location: Access Point for SLO response. Response Location: Point d'accès pour les réponses SLO. https://www.public.com https://www.public.com This name is used in entry DN, for example cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com. Ce nom est utilisé dans l'entrée DN, par exemple cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com. Each LL::NG authentication module has an authentication level, which can be associated to an SAML authentication context. Chaque module d'authentification de LL::NG dispose d'un niveau d'authentification qui peut être associé à un contexte d'authentification SAML. dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... documentation:latest:installdeb documentation:latest:installdeb Apache::Session::Browseable is a wrapper for other Apache::Session modules that add the capability to manage indexes. Apache::Session::Browseable est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. Genève Genève ../../documentation/1.4/start.html#configuration ../../documentation/1.4/start.html#configuration locationRules locationRules LimeSurvey virtual host in Manager Hôte virtuel LimeSurvey dans le manager ../../../media/documentation/remote-interoperability.png ../../../media/documentation/remote-interoperability.png Custom-Header => function1($uid) Custom-Header => function1($uid) # SOAP functions for sessions access (disabled by default) # Fonctions SOAP pour l'accès aux sessions (désactivées par défaut) ../../../media/applications/liferay_logo.png ../../../media/applications/liferay_logo.png ../pages/documentation/1.1/performances.html ../pages/documentation/1.1/performances.html Zimbra local SSO URL pattern Expression d'URL SSO locale pour Zimbra if you use “File” system and your “dirName” is set to /usr/local/lemonldap-ng/conf/, the notifications will be stored in /usr/local/lemonldap-ng/notifications/ si “File” est utilisé et que “dirName” vaut /usr/local/lemonldap-ng/conf/, les notifications seront stockées dans /usr/local/lemonldap-ng/notifications/ /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots In General, fill at least the following information: Dans General, remplir au moins les informations suivantes : SOAP session backend Backend de sessions SOAP Paris Paris Reverse proxy Proxy inverse And run the “dist” target: Lancer la cible “dist” : LemonLDAP::NG ships 3 Apache configuration files: LemonLDAP::NG fournit 3 fichiers de configuration Apache : lemonldap-ng-conf: contains default configuration (DNS domain: example.com) lemonldap-ng-conf : contient la configuration par défaut (domaine DNS : example.com) Debian/Ubuntu Debian/Ubuntu Admin: can create surveys Admin : peut créer des surveillances SAML SAML Find us on Freenode, channel #lemonldap-ng Retrouvez-nous sur Freenode, canal #lemonldap-ng ../../../media/documentation/manager-saml-service-sp-ac.png ../../../media/documentation/manager-saml-service-sp-ac.png OpenID authentication can proposed as an alternate authentication scheme using the authentication choice method. L'authentification OpenID peut être proposée en choix alternatif en utilisant la méthode d'authentification choice. documentation:1.4:soapservices documentation:1.4:soapservices SAML connectors Connecteurs SAML Accept some specificities: Autres possibilités : # Uncomment this line if you use portal SOAP capabilities # Décommentez cette ligne si vous utilisez les capacités SOAP du portail http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://en.wikipedia.org/wiki/Role-based_access_control http://en.wikipedia.org/wiki/Role-based_access_control http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html documentation:1.4:portal documentation:1.4:portal _timezone _timezone (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? 'LDAP#Openldap' => { 'LDAP#Openldap' => { The next time you will access Manager, it will be trough LL::NG. En retournant vers le manager, ce sera via LL::NG. //"userobm_nomade_enable" => , //"userobm_nomade_enable" => , documentation:1.4:authchoice documentation:1.4:authchoice ../pages/documentation/1.1/authmulti.html ../pages/documentation/1.1/authmulti.html documentation:presentation documentation:presentation When a user access a Handler without a cookie, he is redirected on portal, and the target URL is encoded in redirection URL (to redirect user after authentication process). Lorsqu'un utilisateur accède à un agent sans cookie, il est redirigé vers le portail, et l'URL cible est encodée dans l'URL de redirection (pour rediriger l'utilisateur après authentification). Your application can know the connected user using: Une application peut connaître l'utilisateur connecté en utilisant : <property name="authenticationManager" ref="authenticationManager" /> </bean>   <bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> <property name="authenticationManager" ref="authenticationManager" /> </bean>   <bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> Note that Apache::Session::Browseable::MySQL doesn't use MySQL locks. Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL. Before installing the packages, install dependencies. Avant d'installer les paquets, installer les dépendances. PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </VirtualHost> PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </VirtualHost> To use LemonLDAP::NG, you have to run an Apache server compiled with mod-perl Pour utiliser LemonLDAP::NG, il faut disposer d'un serveur compilé avec mod-perl </Files>   </Files>   Example: Exemple : The AuthBasic Handler is a special Handler that will us AuthBasic to authenticate to a virtual host, and then play authorizations rules to allow access to the virtual host. L'agent AuthBasic est un agent spécial qui utilise l'authentification web basique pour authentifier dans un hôte virtuel et qui utilise ensuite les règles d'autorisation pour valider les accès à l'hôte virtuel. Exploitation Exploitation AuthCAS AuthCAS ServerName auth.example.com   ServerName auth.example.com   Put all custom HTML code in the custom template files. Mettre tous les codes HTML personnalisés dans les fichiers modèles personnalisés. ../../../../media/documentation/liferay_2.png ../../../../media/documentation/liferay_2.png If OpenID login is not set, it uses General Parameters » Logs » REMOTE_USER data, which is set to uid by default Si l'identifiant OpenID n'est pas renseigné, la donnée Paramètres généraux » Journalisation » REMOTE_USER est utilisée, mise à uid par défaut ../pages/documentation/1.1/applications/googleapps.html ../pages/documentation/1.1/applications/googleapps.html mailLDAPFilter mailLDAPFilter DN of sessions branch DN de la branche des sessions LimeSurvey LimeSurvey LL::NG can act as an CAS server, that can allow to federate LL::NG with: LL::NG peut agir en serveur CAS, ce qui permet de fédérer LL::NG avec : Eric GERMAN Eric GERMAN uid: the user login (it must correspond to the attribute set in whatToTrace parameter, uid by default), or the wildcard string (by default: allusers) if the notification should be displayed for every user. uid : le nom de connexion de l'utilisateur (il doit correspondre à l'attribut utilisé dans le paramètre whatToTrace, uid par défaut), ou la carte blanche (par défaut : allusers) si la notification doit être affichée à tous les utilisateurs. The # host must be matched by a group named "host". The # host must be matched by a group named "host". 'full_name' => $_SERVER['HTTP_AUTH_CN'], 'full_name' => $_SERVER['HTTP_AUTH_CN'], Subject for password mail Sujet du message de changement de mot de passe ../pages/documentation/1.1/selfmadeapplication.html ../pages/documentation/1.1/selfmadeapplication.html This key must be stored directly in portal index.pl file or in lemonldap-ng.ini: Cette clef doit être stockée directement dans le fichier index.pl du portail ou dans lemonldap-ng.ini : Use XForwardedFor for IP Utiliser XForwardedFor comme IP cliente ../../documentation/1.4/authssl.html ../../documentation/1.4/authssl.html documentation:1.4:applications:django documentation:1.4:applications:django Schema extension Extension de schéma +10y: ten years from session creation +10y : dix ans après la création de la session time_correction (optional): hours to add or to subtract time_correction (optionnel) : heures à ajouter ou soustraire /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml su - postgres createuser lemonldap-ng -P su - postgres createuser lemonldap-ng -P cfgNum int(11) NOT NULL, cfgNum int(11) NOT NULL, type = SOAP proxy = https://auth.example.com/index.pl/config type = SOAP proxy = https://auth.example.com/index.pl/config logout_sso logout_sso If you activate proxy mode, you must create the PGT file on your system, for example: Si le mode proxy est activé, il faut créer le fichier PGT sur le système, par exemple : Steps: Étapes : provide identities to other systems fournir une identité à d'autres systèmes If for an obscure reason, the WebSSO is not working and you want to access the Manager, remove the protection in lemonldap-ng.ini. Si pour une quelconque raison le WebSSO ne fonctionne pas, pour accéder au manager, supprimer la protection dans lemonldap-ng.ini. LemonLDAP::NG uses Safe jail to evaluate all expressions: LemonLDAP::NG utilise une cage sécurisée pour évaluer toutes les expressions : ../pages/documentation/1.4/applications/django.html ../pages/documentation/1.4/applications/django.html http://herve.vanmeerbeck.free.fr/?p=53 http://herve.vanmeerbeck.free.fr/?p=53 Soap Soap LemonLDAP::NG allows to use this model. LemonLDAP::NG permet d'utiliser ce modèle. SSO binding: force binding to use for SSO (http-redirect, http-post, etc.) Méthode SSO : force la méthode à utiliser pour le SSO (http-redirect, http-post, etc.) ../../../../media/applications/drupal_logo.png ../../../../media/applications/drupal_logo.png http://www.linagora.com http://www.linagora.com Object class: objectClass of the groups (default: groupOfNames). Classe d'object: objectClass du groupe (défaut: groupOfNames). Cache backend options Options du module du cache local You can: Vous pouvez : Sympa mail session key Clef de session mail pour Sympa LDAPFilter LDAPFilter use any key name you want. utiliser n'importe quel nom de clef. # rule admin -> $admin ||= ($uid eq 'foo' or $uid eq 'bar') # header Display-Name -> $displayName ||= $givenName." ".$surName # règle admin -> $admin ||= ($uid eq 'foo' or $uid eq 'bar') # en-tête Display-Name -> $displayName ||= $givenName." ".$surName ../../../../media/documentation/liferay_3.png ../../../../media/documentation/liferay_3.png 1 if user is authorizated to access to it 1 si l'utilisateur est autorisé à y accéder CustomSOAPServices CustomSOAPServices Yubikey client ID ID client Yubikey Uniform Resource Locator Uniform Resource Locator In this case, you might want to disabling it. Dans ces cas, on peut vouloir le désactiver. ../pages/documentation/1.1/logs.html ../pages/documentation/1.1/logs.html http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl You can use different dbiUser strings : Plusieurs chaînes dbiUser sont utilisables : kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com A session key can be associated to more than one SREG attribute. Une clef de session peut être associée à un ou plusieurs attributs SREG. http://www.bugzilla.org http://www.bugzilla.org Debian Debian User clicks on the link Reset my password L'utilisateur clique sur le lien Réinitialiser mon mot-de-passe documentation:manager-saml-namid-formats.png documentation:manager-saml-namid-formats.png SAML IDP preselection Préselection d'IDP SAML Memcached can be used with LL::NG, but some features will not work since Memcached doesn't provide any parsing system: Memcached peut être utilisé avec LL::NG, mais quelques fonctionnalités ne marcheront pas car Memcached ne fournit pas de dispositif de parcours des données : The encode_base64 subroutine Fonction encode_base64 ../documentation/1.0/applications.html ../documentation/1.0/applications.html <Directory /usr/local/lemonldap-ng/htdocs/manager/> <Directory /usr/local/lemonldap-ng/htdocs/manager/> Apache rewrite rules Régles de réécriture d'Apache In the Manager, go in General Parameters » Issuer modules » OpenID and configure: Dans le manager, aller dans Paramètres généraux > Modules fournisseurs » OpenID et configurer : …. …. Windows Windows singleIP singleIP applications:obm_logo.png applications:obm_logo.png The content of the SVN tarball is not the same as the official tarball. Le contenu de l'archive SVN n'est pas le même que l'officielle. documentation:latest:start documentation:latest:start Key: internal session key, can be prefixed by ! to make the attribute required Clef : clef de session interne, peut être prefixé par ! pour exiger ces attributs JSON File configuration backend Backend de configuration en fichier JSON http://mb-c.pro/fr/archives/1468 http://mb-c.pro/fr/archives/1468 Sebastien DIAZ Sebastien DIAZ /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay For example {ldapPort}389. Par exemple {ldapPort}389. You can also copy/paste the metadata: just click on the Edit button. Il est également possible de copier-coller les métadatas : cliquer simplement sur le bouton éditer. You can also add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : Toolinux Toolinux value longblob, value longblob, ../../../../media/documentation/liferay_7.png ../../../../media/documentation/liferay_7.png ../../../media/applications/http_logo.png ../../../media/applications/http_logo.png Restart Apache: Redémarrez Apache: Often the redirection takes some time because it is user's first access to the protected app, so a new app session has to be created : JavaScript redirection improves user experience by informing that authentication is performed, and by preventing from clicking again on the button because it is too slow. Souvent la redirection prend du temps car c'est le premier accès de l'utilisateur à l'application protégée et il faut créer la session applicative ; la redirection JavaScript améliore le ressenti utilisateur en l'informant que l'authentification est réussie et en évitant qu'il clique de nouveau sur le bouton. </Directory> </Directory> The logout request will be sent even if the user did not use the application. La requête de déconnexion est envoyée même si l'utilisateur ne s'est pas connecté à l'application. Categories and applications Catégories et applications /_detail/icons/flags/us.png?id=press /_detail/icons/flags/us.png?id=press ssoRoles ssoRoles Any CAS consumer N'importe quel client CAS Facebook application ID: the application ID you get ID de l'application Facebook : l'identifiant d'application obtenu /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart Encoded characters Caractères encodés Gateways authentication: force transparent authentication on CAS server Authentification des passerelles : force l'authentification transparente sur le serveur CAS generate new public and private keys (Generate button) générer de nouvelles clefs publiques et privées (bouton Générer) portal: parameters only for Portal portal : paramètres réservés au portail General options Options générales Use Apache::Session::Browseable Utiliser Apache::Session::Browseable LemonLDAP::NG LemonLDAP::NG Net::Twitter Net::Twitter documentation:1.4:applications:drupal documentation:1.4:applications:drupal This avoid to have to many datas stored. Ce dispositif évite de stocker trop de données. Default: will this binding be used by default for authentication response. Défaut : déclaration utilisée par défaut pour les réponses d'authentification. kdc = ad.example.com kdc = ad.example.com Tests Tests http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ touch /tmp/pgt.txt touch /tmp/pgt.txt LemonLDAP::NG provides these packages: LemonLDAP::NG fournit ces paquets : To know more about the jail, check Safe module documentation. Pour en savoir plus sur la cage, consulter la documentation du module Safe. Solutions Linux Solutions Linux ../../../documentation/1.4/writingrulesand_headers.html#rules ../../../documentation/1.4/writingrulesand_headers.html#rules 1.0 and 1.1 1.0 et 1.1 ldapsessionbackend ldapsessionbackend SOAP proxy mechanism SOAP proxy mechanism If needed, you can recompile the valve from the sources. Si besoin, recompiler la valve depuis les sources. ../../../media/documentation/dia_dit_roles.png ../../../media/documentation/dia_dit_roles.png You can install Lemonldap::NG using packages (rpm or deb) or by hand as described below. Vous pouvez installer Lemonldap::NG en utilisant des paquets (rpm ou deb) ou à la main comme décrit ci-après. ../../documentation/1.4/upgrade.html ../../documentation/1.4/upgrade.html http://www.solutionslinux.fr/ http://www.solutionslinux.fr/ Before transmission, the username and password are encoded as a sequence of base-64 characters. Avant la transmission, le nom et le mot de passe sont encodés en base-64. Password module Module mots-de-passe http://httpd.apache.org/docs/2.2/mod/mod_ssl.html http://httpd.apache.org/docs/2.2/mod/mod_ssl.html Bugzilla administration Administration de Bugzilla ../media/icons/tux.png ../media/icons/tux.png Auth-Password => $_password Auth-Password => $_password Single Logout Single Logout (SLO) Install prerequisites Installer les pré-requis Login as administrator: Se connecter comme administrateur: Name: internal name Name: nom interne Configure phpLDAPadmin virtual host like other protected virtual host. Configurer l'hôte virtuel phpLDAPadmin comme n'importe quel autre hôte virtuel protégé. If not Go on Manager, and declare Manager as a new virtual host, for example manager.example.com. Si non, aller dans le manager et déclarer le manager comme un nouvel hôte virtuel, par exemple manager.example.com. Indeed, any Perl DBD driver can be used. Ainsi, tout driver Perl DBD peut être utilisé. SOAP services Services SOAP Order deny,allow Order deny,allow ../../documentation/1.4/applications/dokuwiki.html ../../documentation/1.4/applications/dokuwiki.html _auth _auth Then, go in Facebook parameters: Ensuite, aller dans les paramètres Facebook: ../pages/documentation/1.4/handlerauthbasic.html ../pages/documentation/1.4/handlerauthbasic.html # Load Zimbra Handler # Load Zimbra Handler Lanyrd Lanyrd [configuration] type=File dirName = /usr/local/lemonldap-ng/data/conf [configuration] type=File dirName = /usr/local/lemonldap-ng/data/conf ../../../../media/documentation/googleapps-manager-application.png ../../../../media/documentation/googleapps-manager-application.png You should be redirected to LL::NG Portal. On doit être redirigé vers le portail LL::NG. Secured cookie: the cookie can only be sent over HTTPS Cookie sécurisé : le cookie peut être envoyé via HTTPS "userobm_login" => "HTTP_OBM_UID", "userobm_login" => "HTTP_OBM_UID", But you can forward this key if it is really needed: Mais on peut le transmettre tout de même si nécessaire : Handler Status Page de statut de l'agent LL::NG is compatible with the OpenID Authentication protocol version 2.0 and version 1.0. LL::NG est compatible avec le protocole d'authentification OpenID version 2.0 et version 1.0. http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml Search base: DN of groups branch. Base de recherche : DN de la branche des groupes. Facebook application secret: the corresponding secret Secret de l'application Facebook : le secret correspondant The “Multi” system can : Le système “Multi” peut : OpenID identity provider Fournisseur d'identité OpenID Mediawiki Mediawiki dbiPassword: DBI password. dbiPassword : mot-de-passe DBI. http://tomcat.apache.org/ http://tomcat.apache.org/ Sign SLO message: sign SLO message Signature des messages SLO : signe les messages de déconnexion SLO (single logout) federationproxy federationproxy sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini Each module can be disabled using the Null backend. Chaque module peut être désactivé en utilisant le backend Null. ->proxy('http://auth.example.com/index.pl/notification');     $r = $lite->deleteNotification('foo.bar', 'ABC');   if ( $r->fault ) { ->proxy('http://auth.example.com/index.pl/notification');     $r = $lite->deleteNotification('foo.bar', 'ABC');   if ( $r->fault ) { Token expiration: time in seconds for token expiration (remove from Memcached server). Expiration du jeton : délai en secondes pour l'expiration du jeton (effacement du serveur Memcached). You need to forward the password, which can be the user main password (if password is stored in session, or any user attribute (if you keep secondary passwords in users database). Il est nécessaire d'exporter le mot-de-passe, qui peut être le mot-de-passe principal de l'utilisateur (si le mot-de-passe est stocké dans la session, ou n'importe quel attribut utilisateur (si d'autres mots-de-passe sont stockés dans la base de données des utilisateurs). Session backend options Options du module de stockage des sessions To protect a virtual host in Apache, the LemonLDAP::NG Handler must be activated (see Apache global configuration). Pour protéger un hôte virtuel dans Apache, l'agent LemonLDAP::NG doit être activé (voir configuration globale d'Apache). sample_notification.png sample_notification.png Activation: set to On. Activation : mettre à Activé. # SOAP functions for notification insertion (disabled by default) <Location /index.pl/notification> # SOAP functions for notification insertion (disabled by default) <Location /index.pl/notification> /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm //"userobm_location" => , //"userobm_location" => , New: to write all configuration history New : pour écrire l'historique de la configuration .js: Javascript .js: Javascript documentation/quickstart.html documentation/quickstart.html chown apache /etc/lemonldap-ng/auth.keytab chown apache /etc/lemonldap-ng/auth.keytab Lemonldap::NG manage applications by their hostname (Apache's virtualHosts). Lemonldap::NG gère les applications par leurs noms d'hôtes(hôtes virtuels d'Apache). dbiAuthPasswordHash dbiAuthPasswordHash firewalls (but be careful if more than 1 server is behind the firewall) pare-feux (attention toutefois si plus d'une application se trouve derrière le pare-feu) Require old password (change) Impose la présentation de l'ancien mot-de-passe dans les changements Else it just will be sent trough an attribute response, if explicitly requested in an attribute request. Sinon, il ne sera envoyé dans les réponses que s'il est explicitement demandé dans les requêtes d'attributs. //================================== // WebSSO //==================================   $useWebserverAuth = true; $WebserverAuth_autocreateUser = true; $WebserverAuth_autouserprofile = Array( //================================== // WebSSO //==================================   $useWebserverAuth = true; $WebserverAuth_autocreateUser = true; $WebserverAuth_autouserprofile = Array( deleteNotification: delete notification(s) for a user (see Notifications system for more) deleteNotification : efface une ou plusieurs notifications d'un utilisateur (voir le système des notifications) ../../documentation/1.4/authmulti.html ../../documentation/1.4/authmulti.html http://jqueryui.com/themeroller/ http://jqueryui.com/themeroller/ http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight configStorage configStorage User enters his email (or another information) in the password reset form L'utilisateur entre son adresse de courriel (ou une autre information) dans le formulaire de réinitialisation radiusAuthnLevel radiusAuthnLevel Go in Manager, Default parameters » Advanced parameters » Special handlers » Sympa, and edit the different keys: Aller dans le manager, Paramètres par défaut » Paramètres avancés » Handlers spéciaux » Sympa, et éditer les clefs suivantes : Hosted application Application hébergée authad authad # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. http://search.cpan.org/perldoc?Apache::Session::Memcached http://search.cpan.org/perldoc?Apache::Session::Memcached RewriteRule ^/cas/.* /index.pl RewriteRule ^/cas/.* /index.pl http://forge.ow2.org/project/showfiles.php?group_id=274 http://forge.ow2.org/project/showfiles.php?group_id=274 User authenticates on Portal L'utilisateur d'authentifie sur le portail _samlToken _samlToken Packages from Debian repository may not be up to date. Les paquets du dépôt Debian peuvent ne pas être à jour. icons:tutorials.png icons:tutorials.png http://www.php.net/array http://www.php.net/array ../../documentation/1.2/upgrade.html ../../documentation/1.2/upgrade.html screenshots.html screenshots.html Required parameters Paramètres exigés You can change default parameters using the “notificationStorage” and “notificationStorageOptions” parameters with the same syntax as configuration storage parameters. On peut changer les paramètres par défaut en utilisant les paramètres “notificationStorage” et “notificationStorageOptions” avec la même syntaxe que les paramètres de stockage de la configuration. Use SOAP for Lemonldap::NG configuration Utiliser SOAP pour la configuration Lemonldap::NG } }, } }, LL::NG has a logout forward mechanism, that will add a step in logout process, to send logout requests (indeed, GET requests on application logout URL) inside hidden iframes. LL::NG dispose d'un dispositif de propagation de déconnexion qui ajoute une étape à ce processus pour envoyer des requêtes de déconnexion (en pratique, des requêtes GET vers des URL de déconnexion) dans des iframes cachées. You have to grant read/write access for the manager component. Il faut autoriser l'accès en lecture et écriture pour le manager. If you upgraded LL::NG, check all upgrade notes. Pour mettre à jour LL::NG, lisez toutes les notes de mise à jour. Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies. Apache Tomcat est une implémentation libre des technologies Java Servlet et JavaServer Pages. Developers : lemonldap-ng-dev@ow2.org ( Subscribe | Archives ) Développeurs : lemonldap-ng-dev@ow2.org ( Souscrire | Archives ) //"userobm_web_perms" => , //"userobm_web_perms" => , If this attribute is missed all hosts are allowed. Si cet attribut est manquant, toutes les adresses seront autorisées. If you set useLocalConf to 1 in lemonldap-ng.ini (section [Portal]), the portal will use only a cached configuration. En mettant useLocalConf à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. dbiUserTable dbiUserTable This concerns all parameters for the Service Provider metadata section: Ceci concerne tous les paramètres de la section « fournisseur de service » des metadatas : http://search.cpan.org/~mart/Net-OpenID-Consumer/ http://search.cpan.org/~mart/Net-OpenID-Consumer/ ../../documentation/1.4/writingrulesand_headers.html ../../documentation/1.4/writingrulesand_headers.html User can now access to the protected application L'utilisateur peut maintenant accéder aux applications ../../../media/applications/mediawiki_logo.png ../../../media/applications/mediawiki_logo.png Protect your application Protéger une application setAttributes(cookieValue,hashtable): update a session setAttributes(cookieValue,hashtable) : met à jour une session ../pages/press.html ../pages/press.html http://www.jcos.fr http://www.jcos.fr dob dob You have to include them in Apache main configuration, for example: Il faut les inclure dans la configuration d'Apache, par exemple : documentation documentation You can also use WebID as user database. On peut également utiliser WebID comme base de données utilisateurs. When status feature is activated, Handlers and portal will collect statistics and save them in their local cache. Lorsque la fonctionnalité "status" est activée, les agents et le portail collectent des statistiques et les sauvegardent dans le cache local http://www.dokuwiki.org/ http://www.dokuwiki.org/ Handler detects URL parameter and create a SSO cookies on its domain, with session ID as value L'agent détecte le paramètre d'URL et crée le cookie SSO dans son domaine, avec la valeur de l'identifiant de session This mode is not compatible with a lot of browsers which block pop-ups. Ce mode n'est pas compatible avec de nombreux navigateurs qui bloquent les pop-ups. The SSO cookie is build by the portal (as described in the login kinematic), or by the Handler for cross domain authentication (see CDA kinematic). Le cookie SSO est construit par le portail (tel que décrit dans la cinématique de connexion) ou par l'agent (handler) lors des authentification inter-domaines (voir la cinématique de l'authentification inter-domaine). When you change cookie expiration time, it is written on the user hard disk unlike session cookie Lorsqu'on change la durée de vie du cookie, il est écrit sur le disque dur de l'utilisateur contrairement à un cookie de session ../pages/documentation/1.1/sqlconfbackend.html ../pages/documentation/1.1/sqlconfbackend.html Cross Domain Authentication (CDA) Authentification inter-domaines (CDA) Sympa Sympa Rules can also be used to intercept logout URL: Les règles peuvent également être utilisées pour intercepter les URL de déconnexion : For each attribute, you can set: Pour chaque attribut, on peut indiquer : UTF8 metadata conversion: set to On to force partner's metadata conversion. Conversion des métadatas un UTF8 : mettre à « activé » pour forcer la conversion des métadata des partenaires. You need to get an client ID and a secret key from Yubico. Un identifiant client et une clef secrète doivent être obtenues auprès de Yubico. LL::NG is a web single-sign-on system, but unlike some systems it can manage rights on applications based on regular expressions on URL. LL::NG est un système d'authentification web unique (WebSSO), mais contrairement à d'autres, il peut gérer les droits d'accès en utilisant des expressions rationnelles sur les URL demandées. Configure the access rules and define the following headers: Configurer les règles d'accès et definir les en-têtes suivants : dark dark ../../../media/applications/googleapps_logo.png ../../../media/applications/googleapps_logo.png login login Applications Applications http://perldoc.perl.org/functions/return.html http://perldoc.perl.org/functions/return.html /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots User: can answer to surveys User : peut répondre aux surveillances Authentication level: authentication level for Radius module Niveau d'authentification : niveau d'authentification pour Radius samlStorage samlStorage Then go in Options to define: Aller ensuite dans Options pour définir : The integration with LL::NG is the following: L'intégration avec LL::NG est la suivante : Key steps : Etapes clefs : maintenance maintenance http://en.wikipedia.org/wiki/INI_file http://en.wikipedia.org/wiki/INI_file You can add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : ../../../media/documentation/manager-formreplay-newurl.png ../../../media/documentation/manager-formreplay-newurl.png http://openid.net/specs/openid-simple-registration-extension-1_0.html http://openid.net/specs/openid-simple-registration-extension-1_0.html Key name: name of the key in LemonLDAP::NG session (for example “uid” will then be used as $uid in access rules) Nom de clef : nom de la clef dans la session LemonLDAP::NG (par exemple “uid” équivaut à $uid dans les règles d'accès) Authentication with login/password Authentification par nom-de-compte/mot-de-passe Detailled configuration backends documentation is available here. La configuration détaillée des backends de stockage est disponible ici. Now ldapgroups contains “admin su” Maintenant, ldapgroups contient “admin su” Disabling it can lead to security issues. La désactiver peut engendrer des trous de sécurité. Dokuwiki Dokuwiki You may also create these macros to manage OBM administrator account (Variables » Macros): Il est également possible de créer ces macros pour gérer le compte administrateur OBM (Variables » Macros): documentation:googleapps-sso.png documentation:googleapps-sso.png Install and launch a Memcached server. Installer et lancer un serveur Memcached. Upgrade from 1.3 to 1.4 Mettre à jour de la version 1.3 vers la version 1.4 Gender Gender If you use the binary value (Active Directory), use this: Si une valeur binaire est utilisée (Active Directory) : You just have to configure a directory writable by Apache user and set it in [configuration] section in your lemonldap-ng.ini file: Il suffit de configurer un répertoire accessible en écriture à l'utilisateur Apache et l'indiquer dans la section [configuration] du fichier lemonldap-ng.ini : portalAutocomplete portalAutocomplete CAS authentication level Niveau d'authentification CAS macro and groups les macro et groupes Redirect user to the asked URL or display menu Redirige l'utilisateur vers l'URL demandée ou affiche le menu CAS proxied services Services mandatés de CAS RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/metadata /metadata.pl Skin files Fichiers thèmes <bean id="userDetailsServiceWrapper" class="org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"> <bean id="userDetailsServiceWrapper" class="org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"> ../documentation/current/start.html#sessions_database ../documentation/current/start.html#sessions_database LemonLDAP::NG portal menu has 4 modules: Le menu du portail LemonLDAP::NG est composé de 4 modules : </bean> </bean> http://mail.ow2.org/wws/subscribe/lemonldap-ng-users http://mail.ow2.org/wws/subscribe/lemonldap-ng-users Enable protection on Manager, by editing lemonldap-ng.ini: Activer la protection du manager, en éditant lemonldap-ng.ini: DBI UserDB connection chain Chaîne de connexion UserDB DBI whatToTrace whatToTrace } }, }) } }, }) Browseable (SQL, Redis or LDAP) Browseable (SQL, Redis ou LDAP) Internal portal Portail interne authmulti authmulti ../../../../media/applications/sympa_logo.png ../../../../media/applications/sympa_logo.png Access rules Règles d'accès http://obm.org http://obm.org (&(sAMAccountName=$user)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) ../pages/documentation/1.1/header_remote_user_conversion.html ../pages/documentation/1.1/header_remote_user_conversion.html Sessions module options: Options du module de sessions : ../pages/documentation/1.1/applications/sympa.html ../pages/documentation/1.1/applications/sympa.html LL::NG configured as SAML Identity Provider LL::NG configuré comme fournisseur d'identité SAML yum install mod_ssl yum install mod_ssl SQL configuration backends Backends de configuration SQL Destination directory = [path/to/trunk/build/lemonldap-ng]/po-doc/zz (where zz is your international code, example: “fr” for France) Répertoire de destination = [chemin/vers/trunk/build/lemonldap-ng]/po-doc/zz (où zz est votre code international, exemple: “fr” pour le français) Proxied services: list of services for which a proxy ticket is requested: Services Proxifiés : liste des services pour lesquels un ticket de proxy est requis : This part is based on SimpleSAMLPHP documentation. Cette section est basée sur la documentation SimpleSAMLPHP. ../pages/documentation/1.1/installdeb.html ../pages/documentation/1.1/installdeb.html Set '*' to accept all. Mettre '*' pour tout accepter. Display deleted sessions Affiche les sessions effacées Zimbra use a specific preauthentication protocol to provide SSO on its application. Zimbra utilise un protocole de pré-authentification pour s'intégrer à un SSO. Google Google User module Module utilisateurs <role rolename="role1"/> <role rolename="role1"/> Selected by default during installation. Sélectionné par défaut lors de l'installation. Create a database if necessary: Créer une base de données si nécessaire : Create new notifications with notifications explorer Créer de nouvelles notifications avec l'explorateur des notifications ../pages/documentation/1.1/ldapsessionbackend.html ../pages/documentation/1.1/ldapsessionbackend.html RewriteEngine On RewriteEngine On When modifying a value, always click on the Apply button if available, to be sure the value is saved. Lorsqu'une valeur est modifiée, cliquer toujours sur le bouton Appliquer s'il est affiché pour être sûr que la valeur soit sauvegardée. OTP public ID part size: Part of Yubikey OTP that will be used as the media identifier (default: 12) Taille de la partie publique de l'OTP : Partie du mot-de-passe unique Yubikey utilisée pour identifier les matériels (défaut: 12) Mailing lists Mailing lists documentation:latest:sessions documentation:latest:sessions <SPSSODescriptor> <SPSSODescriptor> Handler sends the response to user Celui-ci la renvoie à l'utilisateur For example, to preselect this IDP for users coming from 129.168.0.0/16 network: Par exemple, pour pré-sélectionner cet IDP pour les utilisateurs provenant dui réseau 129.168.0.0/16 : references références Manager (configuration management) Manager (gestion de la configuration) <IfModule mod_rewrite.c> <IfModule mod_rewrite.c> //"userobm_education" => , //"userobm_education" => , http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview This function will check the date of current request, and compare it to a start date and an end date. Cette fonction examine la date de la requête en cours et la compare avec une date de début et de fin. Configuration and sessions in LDAP Configuration et sessions dans LDAP In Manager, go in General Parameters > Authentication modules and choose Null for authentication, users or password module. Dans le manager, aller dans Paramètres généraux > Modules d'authentification et choisir Null) pour les modules authentification, utilisateurs et/ou mots-de-passe. Update translations Télécharger les traductions When all is ok, click on Create. Lorsque tout est bon, cliquer sur Créer. The notifications module uses a wildcard to manage notifications for all users. Le module de notifications utilise une carte blanche pour gérer les notifications destinées à tous les utilisateurs. Authorizations are defined inside a virtualhost and takes effect only on it. Les autorisations sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Configure the virtual host like other protected virtual host but use Secure Token Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre hôte virtuel protégé mais utiliser l'agent jeton sécurisé au lieu de l'agent par défaut. Send mail on password change Envoyer des courriels lors des changements de mots-de-passe Auth-Roles => $aaaRoles Auth-Roles => $aaaRoles Link Apache configuration Lier la configuration d'Apache HTTP Basic Authentication Authentification basique HTTP cn=admin,dc=example,dc=password cn=admin,dc=example,dc=password You can also use different user/password for your servers by overriding parameters globalStorage and globalStorageOptions in lemonldap-ng.ini file. On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres globalStorage et globalStorageOptions dans le fichier lemonldap-ng.ini. PerlModule Lemonldap::NG::Handler::Proxy PerlModule Lemonldap::NG::Handler::Proxy perl-Lemonldap-NG-Common: CPAN - Shared modules perl-Lemonldap-NG-Common : CPAN - modules partagés ldapGroupAttributeName ldapGroupAttributeName ../../documentation/1.4/ssocookie.html ../../documentation/1.4/ssocookie.html These options override service signature options (see SAML service configuration). Ces options surchargent les options de signature du service (voir la configuration du service SAML). documentation:1.4:authyubikey documentation:1.4:authyubikey Those capabilities can be used simultaneously or separately. Ces capacités peuvent être utilisées simultanément ou séparemment. These options can then be overridden for each Identity Provider. Ces options peuvent être surchargées pour chaque fournisseur d'identité. Nb protected applications Nb d'applications protégées http://www.mediawiki.org/wiki/Extension:HttpAuth http://www.mediawiki.org/wiki/Extension:HttpAuth documentation:1.4:handlerauthbasic documentation:1.4:handlerauthbasic Django Django “static-value” “static-value” ldapGroupObjectClass ldapGroupObjectClass one with just read rights for other servers une avec seulement des droits en lecture pour les autres serveurs ServerName www.public.com   ServerName www.public.com   The value will be use in metadata main markup: Cette valeur est utilisé dans les metadatas : checkLogonHours($ssoLogonHours, '', '+2') checkLogonHours($ssoLogonHours, '', '+2') ../../documentation/1.4/header_remote_user_conversion.html ../../documentation/1.4/header_remote_user_conversion.html Known supported applications Applications connues pour être supportées Sympa virtual host in Apache Hôte virtuel Sympa dans le manager 'htmleditormode' => 'inline', 'htmleditormode' => 'inline', http://tomcat.apache.org/tomcat-5.5-doc/logging.html http://tomcat.apache.org/tomcat-5.5-doc/logging.html newNotification(xmlString): insert a notification for a user (see Notifications system for more) newNotification(xmlString) : insert une notification pour un utilisateur (voir le système de notifications pour plus d'information) Magic authentication: a special SSO URL is protected by LL::NG, Sympa will display a button for users who wants to use this feature. Magic authentication: une URL SSO spéciale est protégée pas LL::NG, Sympa affiche un bouton pour les utilisateurs souhaitant bénéficier de cette fonction. Change the user attribute to store in Apache logs (“General Parameters » Logs » REMOTE_USER”): use the variable declared above Changer l'attribut utilisateur à stocker dans les journaux d'Apache (“Paramètres généraux » Journaux » REMOTE_USER”) : utiliser la variable ci-dessus tar zxvf lemonldap-ng-*.tar.gz tar zxvf lemonldap-ng-*.tar.gz <check>: paragraph to display with a checkbox: will be inserted in HTML page enclosed in <p class=“notifCheck”><input type=“checkbox” />…</p> <check> : paragraphe à afficher avec une case à cocher : sera inséré dans la page HTML encadré dans <p class=“notifCheck”><input type=“checkbox” />…</p> ../../documentation/1.4/start.html#authentication_users_and_password_databases ../../documentation/1.4/start.html#authentication_users_and_password_databases → User does not have Lemonldap::NG cookie, handler redirect it to the portal → L'utilisateur ne dispose pas d'un cookie Lemonldap::NG, l'agent le redirige vers le portail If using LL::NG as reverse proxy, configure the Auth-User header, else no headers are needed. Si LL::NG est utilisé par reverse-proxy, configurer l'en-tête Auth-User, aucun autre en-tête n'est utile. Load Handler in Apache memory: Charger l'agent dans la mémoire d'Apache : sudo make install PARAM=VALUE PARAM=VALUE ... sudo make install PARAM=VALUE PARAM=VALUE ... contact.html contact.html The Tomcat Valve is only available for tomcat 5.5 or greater. La valve Tomcat est uniquement disponible pour les versions 5.5 et supérieures de Tomcat. ../../../media/documentation/remote-principle.png ../../../media/documentation/remote-principle.png http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps secureTokenAllowOnError secureTokenAllowOnError This module is a LL::NG specific identity federation protocol. Ce module fournit un protocole de fédération d'identité spécifique à LL::NG. Enabled: Yes Enabled: Yes ../../media/icons/flags/us.png ../../media/icons/flags/us.png Click on a column header to sort table. Cliquez sur un en-tête de colonne pour trier le tableau. RHEL/CentOS/Fedora RHEL/CentOS/Fedora playground playground screenshots:1.1:mailreset:mailreset_step4.png screenshots:1.1:mailreset:mailreset_step4.png ../pages/documentation/features.html ../pages/documentation/features.html Follow the next steps. Suivre les étapes suivantes. In Bugzilla administration interface, go in Parameters » User authentication Dans l'interface d'administration, allez dans Parameters » User authentication Location: Access Point for SSO request and response. Location: Point d'accès des requêtes et réponses SSO. [portal] notification = 1 [portal] notification = 1 httpOnly httpOnly dbiAuthPassword dbiAuthPassword # SOAP functions for notification insertion (disabled by default) # Fonctions SOAP pour insérer des notifications (désactivées par défaut) +10m: ten minutes from session creation +10m : dix minutes après la création de la session http://www.google.com/calendar/hosted/mydomain.org/render http://www.google.com/calendar/hosted/mydomain.org/render *.partner.com *.partenaire.com Then you can take any virtual host, and simply add this line to protect it: Ainsi n'importe quel hôte virtuel peut être protégé en ajoutant cette ligne : We use OW2 JIRA to list bugs and features. Nous utilisons OW2 JIRA pour tous les bogues et fonctionnalités. A cup of coffee (or tea, we are open minded) Une tasse de café (ou de thé, nous sommes ouverts) /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots RelayState session timeout: timeout for RelayState sessions. Durée de vie d'une session RelayState : durée de vie d'une session RelayState. tchemineau tchemineau User table: user table name Table utilisateurs : nom de la table utilisateurs Do not allow several users for 1 IP Ne pas autoriser plusieurs utilisateurs venant de la même adresse IP password password impact impact documentation:1.4:authgoogle documentation:1.4:authgoogle ../../../../css/screen.css ../../../../css/screen.css It can not be used to share sessions between different servers except if you share directories (with NFS,…) or if you use SOAP proxy. Il ne peut être utilisé pour partager les sessions entre serveurs sauf si les répertoires sont partagés (avec NFS,…) ou en utilisant le proxy SOAP. trustedDomains trustedDomains ^/limesurvey/admin/ ^/limesurvey/admin/ You need to disable default Manager protection in lemonldap-ng.ini to rely only on Apache: Il faut alors désactiver la protection du manager dans lemonldap-ng.ini pour la confier à Apache : authdemo authdemo Go in Manager, Default parameters » Advanced parameters » Special handlers » Secure Token, and edit the different keys: Aller dans le manager, Paramètres par défaut » Paramètres avancés » Handlers spéciaux » Jeton sécurisé, et éditer les clefs suivantes : ../../documentation/1.0/sqlconfbackend.html ../../documentation/1.0/sqlconfbackend.html Logging portal access Trace des authentification Handler inform Apache of connected user (parameter whatToTrace), so you can see user login in Apache access logs. L'agent fournit à Apache l'identifiant de l'utilisateur (paramètre whatToTrace), ainsi vous pouvez voir l'identifiant dans les journaux d'accès d'Apache. You can use one or a combination of: On peut utiliser un ou plusieurs solution : Authentication: will check user login in a header and create session without prompting any credentials (but will register client IP and creation date) Authentification : recherche le nom d'utilisateur dans un en-tête et crée la session sans exiger de mot-de-passe (mais enregistre l'adresse IP cliente et la date) /_detail/icons/chat.png?id=contact /_detail/icons/chat.png?id=contact <Location /index.pl/config> <Location /index.pl/config> casAccessControlPolicy casAccessControlPolicy documentation:googleapps-export-priv-key.png documentation:googleapps-export-priv-key.png managerCssTheme managerCssTheme Copy en subroutine to zz (where zz is your international code, example: “fr” for France) then translate messages. Copiez la fonction en en zz (où zz est votre code international, exemple: “fr” pour le français) et traduisez ensuite les messages. PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com All other elements will be removed including HTML elements like <b>. Tous les autres éléments seront supprimés y compris les balises HTML telles <b>. Apache (Kerberos, NTLM, OTP, ...) Apache (Kerberos, NTLM, OTP, ...) /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots Write session path is needed only if you use a remote session explorer or a remote portal Le chemin d'écriture de session n'est nécessaire que si on utilise un explorateur de session ou un portail distant DBI Login column Colonne de nom de connexion DBI default default Other NameID formats are automatically managed: Les autres formats de NameID sont automatiquement gérés : MySQL example (suppose that our servers are in 10.0.0.0/24 network): Exemple MySQL (on suppose que les serveurs sont sur le réseau 10.0.0.0/24): Session restrictions Resctriction d'ouverture de session OBM, RoundCube, Sympa, MediaWiki,… OBM, RoundCube, Sympa, MediaWiki,… Control existing session: detect SSO session, apply configured constraints (1 session per user, 1 session per IP, …) Recherche d'une session valide : détecte les sessions SSO, applique les contraintes configurées (1 session par utilisateur, 1 session par IP, …) # CAS Issuer # Fournisseur d'identité CAS Auto login is very secure for Sympa 5, as Sympa cookie is only exchanged between LL::NG Handler and Sympa (user cannot see it) Auto login est très sécurisé pour Sympa 5 car le cookie Sympa est seulement échangé entre le handler LL::NG et Sympa (les utilisateurs ne le voient pas) ../pages/documentation/1.1/configlocation.html ../pages/documentation/1.1/configlocation.html If you run Debian testing or unstable, the packages are directly installable: Pour les utilisateurs de Debian testing ou unstable, les paquets sont directement installables : ../../documentation/1.4/exportedvars.html ../../documentation/1.4/exportedvars.html By alphabetical order: Par ordre alphabétique : $VAR1 = { $VAR1 = { ../../documentation/1.4/authtwitter.html ../../documentation/1.4/authtwitter.html Internet Protocol Internet Protocol Connection Connexion PerlHandler Lemonldap::NG::Handler::Proxy   PerlHandler Lemonldap::NG::Handler::Proxy   apache2ctl configtest apache2ctl restart apache2ctl configtest apache2ctl restart The Secure Token Handler is a special Handler that create a token for each request and send it to the protected application. L'agent jeton sécurisé est un agent particulier qui crée un jeton pour chaque requête et l'envoie à l'application protégée. /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey Internal Proxy (lmProxy) Proxy interne (lmProxy) Mail reset request timeout Délai maximal des requêtes de réinitialisation des mails https://github.com/coudot/apache-session-ldap https://github.com/coudot/apache-session-ldap How to change configuration backend Comment changer le backend de configuration my $cgi = Lemonldap::NG::Handler::CGI->new ({}); $cgi->authenticate(); $cgi->authorize(); ... my $cgi = Lemonldap::NG::Handler::CGI->new ({}); $cgi->authenticate(); $cgi->authorize(); ... For Debian/Ubuntu, you can use: Pour Debian/Ubuntu, utiliser : ../pages/documentation/1.1/soapservices.html ../pages/documentation/1.1/soapservices.html Store: store user info in session database Stocke: stocke les données utilisateurs dans la base de données des sessions File File LDAPFilter => '(&(sAMAccountName=$user)(objectClass=person))', LDAPFilter => '(&(sAMAccountName=$user)(objectClass=person))', ../pages/menu1.html ../pages/menu1.html LL::NG is compatible with LDAP password policy: LL::NG est compatible avec la politique de mots-de-passe LDAP : So on each main portal, internal users can access normally, and users issued from the other organization have just to click on the link: Ainsi sur chacun des portails principaux, les utilisateurs internes peuvent accéder normalement et les utilisateurs de l'autre organisation n'ont qu'à cliquer sur le lien : mailBody mailBody perl-Lemonldap-NG-Portal: CPAN - Portal modules perl-Lemonldap-NG-Portal : CPAN - modules portail ../media/icons/flags/us.png ../media/icons/flags/us.png vi /etc/sympa/auth.conf vi /etc/sympa/auth.conf We call “database” a backend where we can read or write a data. Nous appelons “base de données” un dispositif dans lequel nous pouvons lire et écrire des données. SAML2 SAML2 apachectl configtest apachectl restart apachectl configtest apachectl restart administrator administrator Handler check access rule and send headers to protected applications L'agent vérifie les droits d'accès à l'application et envoie des en-têtes HTTP à l'application protégée http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel icons:flags:ua.png icons:flags:ua.png documentation:1.4:authfacebook documentation:1.4:authfacebook ../../../media/icons/colors.png ../../../media/icons/colors.png
lemonldap-ng-1.4.6/omegat.files/fr/fr-level2.tmx0000664000175000017500000715031012605703456021274 0ustar clementclement
Go in Manager, <c0>General Parameters</c0> » <c1>Sessions </c1> » <c2>Store user password in session data</c2> and set to <c3>On</c3>. Aller dans le manager, <c0>paramètres généraux</c0> » <c1>Sessions </c1> » <c2>Stocker le mot-de-passe dans les données de session</c2> et le mettre à <c3>Activer</c3>. OID prefix Préfixe OID In Manager, click on <c0>notifications explorer</c0> and then on the <c1>Create</c1> button. Dans le manager, cliquer sur l'<c0>explorateur des notifications</c0> et ensuite sur le bouton <c1>Créer</c1>. Extract and build the module: Extraire et compiler le module: This parameter is used by <a0>SAML IDP</a0> to fill the NameID in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour construire le NameID dans les réponses d'authentification. ../pages/documentation/1.1/federationproxy.html ../pages/documentation/1.1/federationproxy.html ^/index.php\?.*access=admin ^/index.php\?.*access=admin documentation:1.4:applications:mediawiki documentation:1.4:applications:mediawiki coudot coudot You can also use the <a0>internal proxy</a0> to replace Apache mod_proxy configuration. On peut aussi utiliser le <a0>proxy interne</a0> pour remplacer mod_proxy d'Apache. PerlInitHandler My::Handler PerlInitHandler My::Handler Install all build dependencies (see BuildRequires in lemonldap-ng.<a0>spec</a0>) Installer toutes les dépendances de construction (voir BuildRequires dans lemonldap-ng.<a0>spec</a0>) Persistent Session backend Backend des sessions persistantes <a0>default_sidebar</a0><br1/> <a0>default_sidebar</a0><br1/> This requires <a1>Perl OpenID consumer module</a1> with at least version 1.0. Ceci requiert le <a1>module client OpenID pour Perl</a1>, version au moins supérieure ou égale à 1.0. <s0>Login field name in user table</s0>: name of user table column hosting login <s0>Nom du champ login dans la table utilisateur</s0> : nom de la colonne de la table utilisateur contenant le login <a0>CAS</a0>_proxiedServices <a0>CAS</a0>_proxiedServices This requires to configure <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>. Allow only one session per <a0>IP</a0> address N'autoriser qu'une session par adresse <a0>IP</a0> Multi overridden parameters Paramètres surchargés pour "Multi" <a0>Bugzilla</a0> is server software designed to help you manage software development. <a0>Bugzilla</a0> est un logiciel serveur conçu pour assister la gestion de développement logiciel. Provides identity if asked Fournit l'identitié si demandée Sympa virtual host in Manager Hôte virtuel Sympa dans le manager documentation:1.4:extendedfunctions documentation:1.4:extendedfunctions documentation:1.4:status documentation:1.4:status <s0>Address</s0>: set one of Google Apps <a1>URL</a1> (all Google Apps product a distinct <a2>URL</a2>), for example <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> <s0>Address</s0> : indiquer une des <a1>URL</a1> de Google Apps (chaque application Google Apps produit une <a2>URL</a2> distincte), par exemple <a3>http://www.google.com/calendar/hosted/mydomain.org/render</a3> SQL configuration backend (called RDBI or CDBI) Backend de configuration SQL (appelé RDBI ou CDBI) <s0>Session key containing mail address</s0>: name of the session key containing email address. <s0>Clef de session contenant l'adresse mail</s0> : nom de la clef de session contenant l'adresse de courriel. <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <s21>"url_logout"</s21> <s22>=></s22> <s23>"https://OBMURL/logout"</s23><s24>,</s24> <a0>fastcgi</a0><br1/> <a0>fastcgi</a0><br1/> This schema shows the dependencies between modules: Ce schéma montre les dépendancesentre ces modules : Regexp::Assemble Regexp::Assemble It is targeted at developer teams, workgroups and small companies. Il est destiné aux équipes de développeurs, groupes de travail ou petites entreprises. 2 2 1 1 0 0 If you disallow this, you should also disallow direct login form IDP, because proxy restriction is set in authentication requests. En interdisant ceci, on risque d'interdire aussi les authentification directe des IDP car la restriction est indiquée dans la requête d'authentification. <s0>CA file</s0>: CA certificate used to validate <a1>CAS</a1> server certificate <s0>Fichier CA</s0> : certificat de la CA utilisée pour valider le certificat du serveur <a1>CAS</a1> <a6>menu1</a6><br7/> <a6>menu1</a6><br7/> openIdSecret openIdSecret SAML 2.0 / Shibboleth SAML 2.0 / Shibboleth Now you have access to the IDP parameters list: Il est ensuite possible d'accéder à la liste des paramètre de l'IDP : Use rule comments to order your rules Utiliser les commentaires pour ordonner les règles Sub elements: Éléments subordonnés : D D Other modules must be installed only if you planned to use the related feature. Les autres modules ne doivent être installés que s'il est prévu d'utiliser les fonctionnalités associées. E E RHEL/CentOS 6 RHEL/CentOS 6 <s0>Site Logo</s0>: Logo that will be displayed in the BrowserID login window. <s0>Logo du site</s0> : Logo qui sera affiché dans la fenêtre d'authentification BrowserID. F F Local macros Macros locales G G RHEL/CentOS 5 RHEL/CentOS 5 A A <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ <s2>DocumentRoot</s2> /usr/local/lemonldap-ng/htdocs/portal/ B B The <c0>convertConfig</c0> utility reads 2 <a1>LL::NG</a1> configuration files (<c2>lemonldap-ng.ini</c2>): L'utilitaire <c0>convertConfig</c0> lit 2 fichiers de configuration <a1>LL::NG</a1> (<c2>lemonldap-ng.ini</c2>) : C C L L If you enable auto completion, authentication level will be decreased (-1) as you do not ask the user to type its password (it could be in browser passwords wallet). En activant l'auto-complétion, le niveau d'authentification est décru (-1) car on ne demande plus à l'utilisateur de taper son mot-de-passe (il peut être protégé dans le navigateur). M M N N O O H H I I <s0>Cookie name</s0> (optional): name of the cookie of internal portal, if different from external portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail interne s'il est différent de celui du portail externe J J 0.9.4_authentication_portal.png 0.9.4_authentication_portal.png U U T T /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-appslist.png?id=screenshots W W V V The following sample parameters will be used: Les paramètres suivants sont utilisés pour l'exemple : Q Q <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> <s0>GRANT</s0> <s1>SELECT</s1><s2>,</s2><s3>INSERT</s3><s4>,</s4><s5>UPDATE</s5><s6>,</s6><s7>LOCK</s7> <s8>TABLES</s8> <s9>ON</s9> lmConfig<s10>.*</s10> By default, the main session module is used to store <a0>SAML</a0> temporary data (like relay-states), but <a1>SAML</a1> sessions need to use a session module compatible with the <a2>sessions restrictions feature</a2>. Par défautBy, le module de session principal est utilisé pour stocker les données temporaires <a0>SAML</a0> (tel les états de relais), mais les sessions <a1>SAML</a1> doivent disposer d'un module compatible avec les <a2>fonctionnalités de restrictions des sessions</a2>. <s0>Auto complete</s0>: allow the browser to remember the password (for password based authentication backends) <s0>Auto complétion</s0> : autorise le navigateur à retenir le mot-de-passe (pour les backends d'authentification basés sur des mots-de-passe) Issuer rewrite rules (requires <c0>mod_rewrite</c0>): Règles de réécriture pour la fourniture d'identité (requiert <c0>mod_rewrite</c0>): P P You just have to create error_zz and msg_zz subroutines <e1>(where zz is your international code, example: “fr” for France)</e1> by copying error_en and msg_en. Vous avez simplement à créer les fonctions error_zz et msg_zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> en copiant error_en et msg_en. Unifying authentications (federation) Unifier les authentifications (fédération) S S R R Z Z _cas_id _cas_id Yubikey authentication level Niveau d'authentification de Yubikey ../../download.html ../../download.html Access log: the issuer of each request is identified Journaux d'accès (AccessLog) : l'utilisateur de chaque requête est identifié http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en http://schedule2012.rmll.info/Le-WebSSO-LemonLDAP-NG-presentation-et-nouveautes-de-la-version-1-2?lang=en <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> <s61>'delete_user'</s61> <s62>=></s62> <s63>$_SERVER</s63><s64>[</s64><s65>'HTTP_AUTH_SUPERADMIN'</s65><s66>]</s66><s67>,</s67> Options Options documentation:1.3:upgrade documentation:1.3:upgrade basic($uid,$_password) basic($uid,$_password) Unable to clear local cache Unable to clear local cache <s0>Key</s0>: category identifier <s0>Clef</s0> : identifiant de catégorie Installation Installation Remote portal Portail distant Example: <a2>http://auth.example.com/?logout=1</a2> Exemple: <a2>http://auth.example.com/?logout=1</a2> <s0>APACHEUSER</s0>: user running Apache <s0>APACHEUSER</s0> : utilisateur de fonctionnement d'Apache If you need it, you can rebuild RPMs: Si besoin, on peut reconstruire les RPMs : 127.0.0.1:6379 127.0.0.1:6379 http://lasso.entrouvert.org/download/ http://lasso.entrouvert.org/download/ You can set the default access to: Il est possible de mettre l'accès par défaut à : <a0>Zimbra</a0> is open source server software for email and collaboration - email, group calendar, contacts, instant messaging, file storage and web document management. <a0>Zimbra</a0> est un logiciel serveur collaboratif et de messagerie open-source - messagerie, calendrier de groupe, contacts, messagerie instantanée, stockage de fichiers et gestion de documents web. If the user has these values inside its entry: Si l'utilisateur dispose de ces valeurs dans son entrée : ../pages/documentation/1.1/applications/phpldapadmin.html ../pages/documentation/1.1/applications/phpldapadmin.html liblemonldap-ng-manager-perl: Manager files liblemonldap-ng-manager-perl : fichiers du manager Macros and groups Macros et groupes Any OpenID consumer N'importe quel client OpenID Wildcard Carte blanche ../../documentation/1.4/authproxy.html ../../documentation/1.4/authproxy.html http://marcelhaise.com/rmll2009/#LemonLDAP http://marcelhaise.com/rmll2009/#LemonLDAP The Active Directory module is based on the <a0>LDAP module</a0>, with these features: Le module Active Directory est basé sur le <a0>module LDAP</a0>, avec ces caractéristiques : You can also use yum on local RPMs file: On peut aussi utiliser yum sur des fichiers RPMs locaux : grantSessionRule grantSessionRule ../pages/documentation/1.1/installtarball.html ../pages/documentation/1.1/installtarball.html <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> <s59># For MediaWiki < 1.13 </s59> <s60>$wgHooks</s60><s61>[</s61><s62>'AutoAuthenticate'</s62><s63>]</s63><s64>[</s64><s65>]</s65> <s66>=</s66> <a67><s68>array</s68></a67><s69>(</s69><s70>$wgAuth</s70><s71>,</s71><s72>'autoAuthenticate'</s72><s73>)</s73><s74>;</s74> Distinguished Name Distinguished Name basic basic ../../documentation/1.4/changeconfbackend.html ../../documentation/1.4/changeconfbackend.html <s139>//"userobm_mail_server_hostname" => ,</s139> <s139>//"userobm_mail_server_hostname" => ,</s139> https://plus.google.com/u/0/101819048603406959766/ https://plus.google.com/u/0/101819048603406959766/ <title>: title to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <title> : titre à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> A specific persistent session is created with this module, to store attribute values returned by Google. Une session persistente est créée avec ce module pour stocker les valeurs d'attribut renvoyées par Google. ../../documentation/1.0/ldapconfbackend.html ../../documentation/1.0/ldapconfbackend.html /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_6.png?id=documentation%3A1.4%3Aapplications%3Aliferay See <a0>prerequisites and dependencies</a0> chapter for more. Voir le chapître <a0>pré-requis et dépendances</a0>. The module can be found <a0>here</a0>. Le module peut être trouvé <a0>ici</a0>. Twitter use <a1>OAuth</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Twitter, other applications can trust Twitter and let you in). Twitter utilise le protocole <a1>OAuth</a1> pour autoriser les applications à réutiliser son propre processus d'authentification (ce qui signifie que si vous êtes connecté à Twitter, d'autres applications peuvent agréer Twitter et vous laisser entrer). <c0>unprotect</c0>: all is open, but authenticated users are seen as authenticated <c0>unprotect</c0> : tout est ouvert, mais les utilisateurs authentifiés sont vus comme tels ../pages/documentation/1.1/portalmenu.html ../pages/documentation/1.1/portalmenu.html As <a1>LL::NG</a1> works like classic WebSSO (like Siteminder™), many other applications are easy to integrate. Comme <a1>LL::NG</a1> fonctionne comme un WebSSO classique (tel Siteminder™), de nombreuses applications sont faciles à integrer. country country <s0>Cache</s0>: cache for configuration and sessions <s0>Cache</s0>: cache pour la configuration et les sessions You need to know the technical name of configuration parameter to do this. Il est nécessaire de connaître le nom technique du paramètre de configuration pour le faire. <s0>Location</s0>: Access Point for SLO request. <s0>Location</s0>: Point d'accès pour les requêtes de SLO. customFunctions customFunctions <s0>start</s0>: Start date (GMT) <s0>start</s0> : date de début (GMT) Display change password module Affiche le module de changement de mot-de-passe protect the manager by <a0>LL::NG</a0> protéger le manager par <a0>LL::NG</a0> The file <c0>auth.keytab</c0> should then be copied (with a secure media) to the Linux server (for example in <c1>/etc/lemonldap-ng</c1>). Le fichier <c0>auth.keytab</c0> doit ensuite être copié (par un média sûr) sur le serveur Linux (par exemple dans <c1>/etc/lemonldap-ng</c1>). Custom XSLT file Fichier XSLT personnalisé If enabled, if the user group is a member of another group (group of groups), all parents groups will be stored as user's groups. Si activé et si le groupe de l'utilisateur est membre d'un autre groupe (groupes de groupes), tous les groupes parents seront considérés comme groupes de l'utilisateur. Drupal virtual host in Manager Hôte virtuel Drupal dans le manager You can change the graphical aspect of the Manager, by clicking on the <c0>Menu style</c0> button. L'aspect graphique du manager peut être modifié en cliquant sur le bouton <c0>style de menu</c0>. The “<s0>default</s0>” access rule is used if no other access rule match the current <a1>URL</a1>. La règle d'accès “<s0>default</s0>” est utilisée si aucune règle ne correspond à l'<a1>URL</a1> courante. /index.php?access=admin&access=other /index.php?access=admin&access=other <s0>Magic authentication</s0> allows to mix standard Sympa authentication and <a1>SSO</a1> <s0>Magic authentication</s0> autorise l'utilisation de l'authentification Sympa et <a1>SSO</a1> <a0>DBI</a0> Authentication table Table d'authentification <a0>DBI</a0> UserName UserName <a0>SAML</a0> Session backend Module de stockage <a0>SAML</a0> Either checkout or export the SVN repository, or extract the SVN tarball to get the SVN files on your disk. Au choix, importer le dépôt SVN ou extraire l'archive SVN pour importer les fichiers. singleSession singleSession Crypt::OpenSSL::RSA Crypt::OpenSSL::RSA Signature Signature <a0>LL::NG</a0> needs a storage system to store its own configuration (managed by the manager). <a0>LL::NG</a0> a besoin d'un dispositif de stockage de sa propre configuration (gérée par le manager). Core modules must be installed on the system. Les modules "core" doivent être installés sur le système. _saml_id ProxyID _nameID _assert_id _art_id _session_id _saml_id ProxyID _nameID _assert_id _art_id _session_id Lasso identity dump Dump de l'identité Lasso Authentication table Table d'authentification Manager Manager This value will be used to know to which recipient the has to be sent (default: mail). Cette valeur peut être utilisée pour savoir à quel destinataire doit être envoyé le courriel (défaut : mail). <<s0>Files</s0> *.pl> <<s0>Files</s0> *.pl> ../../../media/documentation/manager-saml-sp-new.png ../../../media/documentation/manager-saml-sp-new.png Skin thème http://www.w3.org/wiki/WebID http://www.w3.org/wiki/WebID <s0>Multiple sessions</s0>, you can restrict the number of open sessions: <s0>Sessions multiples</s0>, on peut retreindre le nombre de sessions ouvertes : logout_app https://auth.example.com/ logout_app https://auth.example.com/ <s137>//"userobm_mail_ext_perms" => ,</s137> <s137>//"userobm_mail_ext_perms" => ,</s137> Please always try to find another solution to protect your application with <a0>LL::NG</a0>. Il est en général préférable de trouver une autre solution pour protéger les applications avec <a0>LL::NG</a0>. declare secondary portal in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Security</c2> » <c3>Trusted domains</c3> declarer le second portail dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> » <c3>Domaines approuvés</c3> For each variable, The first field is the name which will be used in rules, macros or headers and the second field is the name of the user database field. Pour chaque variable, le premier champ est le nom qui servira dans les règles, macros ou en-têtes et le second est le nom du champ dans la base de données utilisateurs. icons:lists.png icons:lists.png documentation:1.4:soapsessionbackend documentation:1.4:soapsessionbackend _url _url you've restart all Apache server after having change cookie name or domain tous les serveurs Apache ont été rechargés après un changement du nom de cookie ou du domaine For example, to override configured skin for portal: Par exemple, pour surcharger l'apparence du portail : <s0>default_access</s0> (optional): what result to return if <s1>start</s1> and <s2>end</s2> are empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>start</s1> et <s2>end</s2> sont vides See <a0>How to change configuration backend</a0> to known how to change this. Voir <a0>Comment changer le backend de configuration</a0>. documentation:1.4:header_remote_user_conversion documentation:1.4:header_remote_user_conversion <a0>rbac</a0><br1/> <a0>rbac</a0><br1/> http://www.zimbra.com/ http://www.zimbra.com/ Session expiration Expiration des sessions It will use the authentication level registered in user session to match the <a1>SAML</a1> authentication context. Il utilise le niveau d'authentification enregistré dans la session de l'utilisateur pour établir le contexte d'authentification <a1>SAML</a1>. documentation:1.4:applications:liferay ↵ documentation:1.4:applications:liferay ↵ Installation on Debian/Ubuntu with packages Installation sur Debian/Ubuntu avec les paquets LemonLDAP::NG is shipped with 3 skins: LemonLDAP::NG est fournit avec 3 thèmes : Each user has a ssoRoles attributes, which values are the <a0>DN</a0> of the corresponding roles. Chaque utilisateur a des attributs ssoRoles, dont les valeurs sont les <a0>DN</a0> des rôles correspondants. <s0>Mandatory</s0>: if set to “On”, then this attribute will be sent in authentication response. <s0>Obligatoire</s0> : si activé, cet attribut sera envoyé dans les réponses d'authentification. Wiki Wiki To update translations, ask to <a0>lemonldap-ng-dev@ow2.org</a0> to update your files. Pour télécharger les traductions, demandez à <a0>lemonldap-ng-dev@ow2.org</a0> pour les mettres en ligne. <s0>Format</s0>: optional, <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. ../../../media/icons/lists.png ../../../media/icons/lists.png ../../documentation/1.4/internalproxy.html ../../documentation/1.4/internalproxy.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html http://blog.zimbra.com/blog/archives/2010/06/using-saml-assertions-to-access-zimbra.html documentation:manager-saml-idp-new.png documentation:manager-saml-idp-new.png ../documentation/current/writingrulesand_headers.html#headers ../documentation/current/writingrulesand_headers.html#headers Read/Write functions (index.pl/adminSessions paths): Fonctions en lecture/écriture (chemin index.pl/adminSessions) : The reset password link must be activated, see <a0>portal customization</a0>. Le lien de réinitialisation de mot-de-passe doit être activé, voir <a0>la personnalisation du portail</a0>. <Perl> <Perl> MRTG configuration example: Exemple de configuration MRTG : icons:tux.png icons:tux.png _issuerDB _issuerDB You can use <c0>0</c0> or <c1>1</c1> to disable/enable the module, or use a more complex rule. On peut utiliser <c0>0</c0> ou <c1>1</c1> pour activer/désactiver chaque module ou utiliser une règle plus complexe. Leave blank to use Mozilla default verification <a3>URL</a3> (<a4>https://verifier.login.persona.org/verify</a4>) Laisser vide pour utiliser l'<a3>URL</a3> de vérification par défaut de Mozilla (<a4>https://verifier.login.persona.org/verify</a4>) LimeSurvey has a webserver authentication mode that allows to integrate it directly into LemonLDAP::NG. LimeSurvey dispose d'un mode d'authentification par serveur web qui permet de l'integrer directement dans LemonLDAP::NG. http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes http://mail.ow2.org/wws/subscribe/lemonldap-ng-changes (o/n) n (o/n) n ../pages/documentation.html ../pages/documentation.html Session history is always visible in session explorer for administrators. L'historique des sessions est toujours visible dans l'explorateur de sessions pour les administrateurs. <s0>Auto login</s0>: a special <a1>LL::NG</a1> Handler will generate Sympa cookie (for Sympa 5 only !) <s0>Auto login</s0>: handler spécial de <a1>LL::NG</a1> qui génère le cookie Sympa (pour Symp 5 seulement !) You can then choose any other module for users and password. Vous pouvez ensuite choisir vos modules d'utilisateurs et de mots-de-passe. Dokuwiki plugin Extension pour Dokuwiki persistentStorageOptions persistentStorageOptions Session explorer Explorateur de sessions Go to %_topdir Aller dans %_topdir http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 http://coudot.blogs.linagora.com/index.php/post/2010/12/01/Sortie-de-LemonLDAP%3A%3ANG-10 ../pages/documentation/1.1/security.html ../pages/documentation/1.1/security.html LL::NG repository Dépôt LL::NG macros are used to extend (or rewrite) <a0>exported variables</a0>. les macros sont utilisées pour étendre (ou réécrire) les <a0>variables exportées</a0>. <a0>LL::NG</a0> can also request proxy tickets for its protected services. <a0>LL::NG</a0> peut également requérir des tickets de proxy pour les services qu'il protège. the <a0>portal</a0> le <a0>portail</a0> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>protection</s3> <s4>=</s4><s5> manager</s5> Portal <a0>URL</a0> <a0>URL</a0> du portail ~10 ~10 $givenName $givenName <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert <s0>SSLProtocol</s0> <s1>all</s1> -SSLv2 <s2>SSLCipherSuite</s2> HIGH:MEDIUM <s3>SSLCertificateFile</s3> /etc/httpd/certs/ow2.cert <s4>SSLCertificateKeyFile</s4> /etc/httpd/certs/ow2.key <s5>SSLCACertificateFile</s5> /etc/httpd/certs/ow2-ca.cert → Local cache cannot be cleard, check the localStorage and localStorageOptions or file permissions → Le cache local ne peut être effacé, regarder les options localStorage and localStorageOptions ou les droits associés à ces fichiers dbiChain dbiChain ssoName ssoName ../../../media/applications/grr_logo.png ../../../media/applications/grr_logo.png The portal of the secondary <a0>LL::NG</a0> structure is configured to delegate authentication to a remote portal. Le portail du système <a0>LL::NG</a0> secondaire est configuré pour déléguer l'authentification à un portail distant. Go in Manager, <c0>General Parameters</c0> » <c1>Cookies</c1> » <c2>Multiple domains</c2> and set to <c3>On</c3>. Aller dans le manager, <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> et sélectioonner "activer" http://www.google.com/apps/intl/en/business/index.html http://www.google.com/apps/intl/en/business/index.html ../../../../media/documentation/liferay_4.png ../../../../media/documentation/liferay_4.png documentation:1.4:ssocookie documentation:1.4:ssocookie ../pages/documentation/1.1/soapconfbackend.html ../pages/documentation/1.1/soapconfbackend.html Authentication request Requête d'authentification Bugzilla virtual host in Manager Hôte virtuel Bugzilla dans le manager ../documentation/1.0/portal.html ../documentation/1.0/portal.html Advantages: Avantages : Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available Les fichiers de configuration Apache se trouvent dans /etc/lemonldap-ng et liés dans /etc/apache2/sites-available Compilation Compilation Note that <a0>SAML</a0> protocol is more secured than OpenID, so when your partners are known, prefer <a1>SAML</a1>. Noter que le protocole <a0>SAML</a0> est plus securisé que OpenID, ainsi si les partenaires sont connus, preférer <a1>SAML</a1>. ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/Lemonldap /usr/lib64/perl5/ ln -s /usr/lib/perl5/vendor_perl/5.8.8/auto/Lemonldap /usr/lib64/perl5/auto/ Portal Redirections Redirections du portail Set <a0>SAML</a0> end points Indiquer les points d'entrées <a0>SAML</a0> <s0>Authentication service</s0> of course Le <s0>service d'authentification</s0> bien sûr $_passwordDB $_passwordDB Digest::HMAC Digest::HMAC ../../../media/icons/xeyes.png ../../../media/icons/xeyes.png openIdAuthnLevel openIdAuthnLevel svn checkout svn+ssh://developername@svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn+ssh://nomDuDeveloppeur@svn.forge.objectweb.org/svnroot/lemonldap Krb5KeyTab /etc/lemonldap-ng/auth.keytab Krb5KeyTab /etc/lemonldap-ng/auth.keytab Go to <c0>My Account</c0>: Aller dans <c0>My account</c0>: So you can configure it to authenticate users using a federation protocol and simultaneously to provide identities using other(s) federation protocols. Ainsi on peut le configurer pour authentifier les utilisateurs en utilisant un protocole de fédération et simultanément pour fournir les identités en en utilisant en autre. http://grr.mutualibre.org/documentation/body.php?id=35 http://grr.mutualibre.org/documentation/body.php?id=35 <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> <s31><s32></SPSSODescriptor<s33>></s33></s32></s31> <s34><s35></md:EntityDescriptor<s36>></s36></s35></s34> It is also possible to redirect the user without using <c0>ErrorDocument</c0>: the Handler will not return 403, 500, 503 code, but code 302 (REDIRECT). Il est également possible de rediriger les utilisateurs sans utiliser <c0>ErrorDocument</c0> : l'agent ne retournera pas les codes 403, 500, 503 mais le code 302 (REDIRECT). <s0>manager-apache2.conf</s0>: Manager virtual host <s0>manager-apache2.conf</s0> : hôte virtuel du manager See <a2>how to change configuration backend</a2>. Voir <a2>comment changer de backend de configuration</a2>. <s0>Portal messages</s0>: all messages are grouped in lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. Les <s0>messages du portail</s0>: tous les messages sont regroupés dans lemonldap-ng/lib/Lemonldap/NG/Portal/_i18n.pm. <s0>Undefined</s0>: Default NameID format is used <s0>Undefined</s0>: le format de NameID par défaut est utilisé ldapPasswordResetAttribute ldapPasswordResetAttribute <s0><a1>Configuration</a1></s0>: where configuration is stored. <s0><a1>Configuration</a1></s0>: où est stocké la configuration. createdb -O lemonldap-ng lemonldap-ng createdb -O lemonldap-ng lemonldap-ng If you manage different timezones, you have to take the jetlag into account in ssoLogonHours values, or use the $_timezone parameter. Si plusieurs fuseaux sont utilisés, le jetlag doit être introduit dans le compte dans la valeur ssoLogonHours, ou utiliser le paramètre $_timezone. SMTP / Reset password by mail SMTP / réinitialisation de mot-de-passe par courriel Check <a0>XSS</a0> Attacks Recherche les attaques <a0>XSS</a0> Store password in session Stockage du mot-de-passe en session Name: <c0>Auth-Name</c0> Nom: <c0>Auth-Name</c0> Replace MySQL by Apache::Session::Flex Remplacer MySQL par Apache::Session::Flex http://freshmeat.net/projects/lemonldapng http://freshmeat.net/projects/lemonldapng At least, check if it is not a <a1>known application</a1>, or <a2>try to adapt its source code</a2>. Ainsi, vérifier si l'<a1>application est connue</a1> ou <a2>essayer d'adapter le code source</a2>. Note that if the user is already authenticated on the first portal, all redirections are transparent. Noter que si l'utilisateur est déjà authentifié sur le premier portail, toutes les redirections sont transparentes. press.html press.html OBM OBM <s0>Skin</s0>: the name of the skin to use. <s0>Thème</s0> : le nom du thème à utiliser. <a0>ldapconfbackend</a0><br1/> <a0>ldapconfbackend</a0><br1/> email_http_header HTTP_MAIL email_http_header HTTP_MAIL <s0>Address</s0>: <a1>URL</a1> of application <s0>Adresse</s0> : <a1>URL</a1> de l'application If you upgrade from older versions, please follow first: Pour les mises à jour depuis des versions plus anciennes, suivre d'abord : <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> <s50>"userobm_password"</s50> <s51>=></s51> <s52>"HTTP_OBM_USERPASSWORD"</s52><s53>,</s53> ../pages/documentation/1.1/browseablesessionbackend.html ../pages/documentation/1.1/browseablesessionbackend.html <s86>//"userobm_status" => ,</s86> <s86>//"userobm_status" => ,</s86> http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 http://www.solutionslinux.fr/animation_51_168_1611_p.html?cid=756 You can then add the Manager as <a0>an application in the menu</a0>. On peut aussi ajouter le manager dans les <a0>applications du menu</a0>. Then, go in <c0>Choice Parameters</c0>: Ensuite, aller dans les <c0>paramètres Choice</c0>: <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> <s12>-></s12><s13>uri</s13><s14>(</s14><s15>'urn:Lemonldap::NG::Common::CGI::SOAPService'</s15><s16>)</s16> When session is granted, the Handler will then check the authorizations like the standard Handler. Lorsque la session est validée, l'agent examine les autorisations comme un agent standard. <s0>Changes</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Changements</s0>: <a1>lemonldap-ng-changes@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) Main LL::NG structure Système LL::NG principal Set GoogleApps as Service Provider name. Mettre GoogleApps comme nom de fournisseur de service. ../media/icons/terminal.png ../media/icons/terminal.png ../../../media/documentation/manager-menu-application-logo.png ../../../media/documentation/manager-menu-application-logo.png JDLL JDLL http://www.private.com http://www.private.com <s0>APACHEVERSION</s0>: Apache major version (default: 2) <s0>APACHEVERSION</s0> : version majeure d'Apache (défaut : 2) <s148>//"userobm_vacation_enable" => ,</s148> <s148>//"userobm_vacation_enable" => ,</s148> ../../../media/documentation/manager-saml-service-sp-slo.png ../../../media/documentation/manager-saml-service-sp-slo.png documentation:liferay_2.png documentation:liferay_2.png Artifact Resolution Résolution des artifacts <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> <s33>"debug_level"</s33> <s34>=></s34> <s35>"NONE"</s35><s36>,</s36> <s37>// "debug_header_name" => "HTTP_OBM_UID",</s37> <s38>// "group_header_name" => "HTTP_OBM_GROUPS",</s38> Crypt::Rijndael Crypt::Rijndael Verify that: Verifier que : <s0>Path</s0>: keep <c1>^/openidserver/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/openidserver/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. The IDP name is asked, enter it and click OK. Le nom d'IDP est demandé, entrer-le et cliquer sur OK. Then edit rules and headers. Éditer ensuite les règles et en-têtes. <s0>Preauthentication key</s0>: the one you grab from zmprov command <s0>Clef de pré-authentification key</s0> : celle récupérée de la commande zmprov ../../documentation/1.4/samlservice.html#authentication_contexts ../../documentation/1.4/samlservice.html#authentication_contexts A <a0>CAS server</a0> with <a1>SAML authentication</a1> Un <a0> serveur CAS</a0> avec une <a1>authentification SAML</a1> ~50 ~50 documentation:1.4:selfmadeapplication ↵ documentation:1.4:selfmadeapplication ↵ You need to create yourself the directory and set write access to Apache user. Il faut créer soi-même le répertoire et y donner un accès en écriture pour l'utilisateur Apache. LockUserName LockUserName LemonLDAP::NG can be used as a proxy between those protocols LemonLDAP::NG peut être utilisé comme proxy entre ces protocoles You must register SP metadata here. Il faut enregistrer les métadatas du SP ici. Local documentation is open to all: La documentation locale est ouverte à tous : <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> <s29><s30><user</s30> <s31>username</s31>=<s32>"role1"</s32> <s33>password</s33>=<s34>"tomcat"</s34> <s35>roles</s35>=<s36>"role1"</s36><s37>/></s37></s29> ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend ../../documentation/1.4/authapache.html#use_kerberos_with_multiple_authentication_backend <a0>activedirectoryminihowto</a0><br1/> <a0>activedirectoryminihowto</a0><br1/> Several IDPs are allowed, in this case the user will choose the IDP he wants. Plusieurs IDPs peuvent être autorisés, dans ce cas l'utilisateur peut choisir l'IDP qu'il souhaite. documentation:1.4:securetoken documentation:1.4:securetoken Date of session creation Date et heure (timestamp) de la création de la session Just set the authentication type to <c0>config</c0> and indicate <a1>DN</a1> and password inside the file <c2>config.php</c2>: Mettre juste le type d'authentification à <c0>config</c0> et indiquer le <a1>DN</a1> et le mot-de-passe dans le fichier <c2>config.php</c2>: Groups Groupes http://search.cpan.org/perldoc?Apache::Session::Informix http://search.cpan.org/perldoc?Apache::Session::Informix The database password Le mot de passe de la base de données <s0>(?i)</s0> means case no sensitive. <s0>(?i)</s0> signifie insensible à la casse. documentation:1.0:fileconfbackend documentation:1.0:fileconfbackend <s78>//"userobm_delegation_target" => ,</s78> <s78>//"userobm_delegation_target" => ,</s78> <s7>}</s7> <s8>)</s8><s9>;</s9> <s7>}</s7> <s8>)</s8><s9>;</s9> <s17># Your nice code here</s17>   <s17># Le joli code ici :</s17>   /_detail/screenshots/1.0/pastel/password.png?id=screenshots /_detail/screenshots/1.0/pastel/password.png?id=screenshots As same for groups: a group rule may involve another, previously computed group. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment. /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-list.png?id=documentation%3A1.4%3Aauthsaml Download them here and <a0>install pre-required packages</a0>. Les télécharger ici et <a0>installer les paquets pre-requis</a0>. <s1>Can be used to secure another backend</s1> for remote servers. <s1>Peut être utilisé pour sécuriser un autre backend</s1> pour des serveurs distants. <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> <s7>AuthLDAPBindDN</s7> <s8>"ou=websso,ou=applications,dc=example,dc=com"</s8> A start date and an end date (to open or close the service even the entry already exists) Des dates de début et de fin (pour restreindre l'accès aux services même si l'entrée existe) /_detail/logos/logo_ucanss.png?id=references /_detail/logos/logo_ucanss.png?id=references <s0>Portal <a1>URL</a1></s0>: <a2>URL</a2> of internal portal <s0><a1>URL</a1> du portail</s0> : <a2>URL</a2> du portail interne logos:logo_rbn.png logos:logo_rbn.png /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=documentation%3A1.4%3Aresetpassword A Zimbra Handler is called Un handler Zimbra est appelé With YUM Avec YUM <s13>SetHandler</s13> perl-<s14>script</s14> <s13>SetHandler</s13> perl-<s14>script</s14> <s0>ERASECONFIG</s0>: set to 0 if you want to keep your configuration files (default: 1) <s0>ERASECONFIG</s0> : mettre à 0 pour conserver les fichiers de configuration (défaut : 1) <a0>exported variables</a0> collected from UserDB backend les <a0>variables exportées</a0> collectées depuis le backend utilisateur <s0>One <a1>IP</a1> only by user</s0>: a user can not open 2 sessions with different <a2>IP</a2>. <s0>Une <a1>IP</a1> par utilisateur</s0> : un utilisateur ne peut ouvrir 2 sessions avec différentes adresses <a2>IP</a2>. ../../documentation/1.4/extendedfunctions.html ../../documentation/1.4/extendedfunctions.html But you can make your own, see Skin customization below. On peut faire le sien, voir comment personnaliser le thème ci-dessous. <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> <s27>'failedLoginNumber'</s27> <s28>=></s28> <s29>'5'</s29><s30>,</s30> Drupal module activation Activation du module Drupal # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main # LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main pastel pastel <a0>MediaWiki</a0> is a wiki software, used by the well known <a1>Wikipedia</a1>. <a0>MediaWiki</a0> est un logiciel wiki utilisé par le très connu <a1>Wikipedia</a1>. Those macros are calculated only at the first usage and stored in the local session cache (only for this server) and only if the user access to the related applications. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. ../../documentation/1.4/writingrulesand_headers.html#rules ../../documentation/1.4/writingrulesand_headers.html#rules Yubikey Yubikey $description eq "LDAP administrator" $description eq "LDAP administrator" This works if the user has only one role per application. Ceci fonctionne si l'utilisateur a seulement un rôle par application. This can be used to protect applications relying on <c0>REMOTE_USER</c0> environment variable in reverse proxy mode. Ceci permet de protéger des applications nécessitant la variable d'environnement <c0>REMOTE_USER</c0> en mode reverse-proxy. <s0>require</s0> Lemonldap::NG::Portal::SharedConf; <s0>require</s0> Lemonldap::NG::Portal::SharedConf; ^/index.php\?logout ^/index.php\?logout User clicks on the logout link in Portal L'utilisateur clique sur le bouton déconnexion du portail Access rule in virtual host Règle d'accès à un hôte virtuel <s12>ErrorDocument</s12> 401 /login.pl <s12>ErrorDocument</s12> 401 /login.pl If you want to access to other datas, you have to use Google in <c2>General Parameters</c2> > <c3>Authentication modules > User module</c3>. Pour accéder aux autres données, utiliser Google in <c2>Paramètres generaux</c2> > <c3>Modules d'authentification > Modules d'utilisateurs</c3>. Then <a2>CAS</a2> service has to show a correct error when service ticket validation will fail. Ainsi le service <a2>CAS</a2> doit afficher une erreur lorsque la validation du ticket échoue. apacheAuthnLevel apacheAuthnLevel First step: create a rule to grant access only if the user has a role in the application: Première étape : créer une règle pour autoriser l'accès seulement si l'utilisateur dispose d'un rôle dans l'application: For example, a <a0>LL::NG</a0> server can be: Par exemple, un serveur <a0>LL::NG</a0> peut être : apt-get install libapache2-mod-auth-kerb apt-get install libapache2-mod-auth-kerb You can not start with an empty configuration, so read <a0>how to change configuration backend</a0> to convert your existing configuration into another one. On ne peut démarrer avec une configuration vide, il faut donc lire <a0>comment changer de backend de configuration</a0> pour convertir une configuration existante en une autre. ~1000 ~1000 <s0>Encryption key</s0>: key used to crypt some data, should not be known by other applications <s0>Clef de chiffrement</s0> : clef utilisée pour chiffrer certaines données, ne doit être connue d'aucune autre application You can change the default skin in Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Default skin</c3>. On peut changer le thème par défaut dans le manager : <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Skin</c3>. You can use '*' character. On peut utiliser le caractère '*'. That is why it is important to set APACHEUSER variable when you launch “make install” C'est pourquoi il est important de renseigner la variable APACHEUSER lorsqu'on lance “make install” <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> <s80>"userobm_description"</s80> <s81>=></s81> <s82>"HTTP_OBM_DESCRIPTION"</s82><s83>,</s83> Logout user from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ Sympa shared secret Secret partagé de Sympa Then, go in <c0><a1>CAS</a1> parameters</c0>: Aller ensuite dans <c0>Paramètres <a1>CAS</a1></c0> : User rejected because VirtualHost XXXX has no configuration User rejected because VirtualHost XXXX has no configuration <s0>Server <a1>URL</a1></s0>: <a2>CAS</a2> server <a3>URL</a3> (must use https://) <s0><a1>URL</a1> du serveur</s0> : <a3>URL</a3> du serveur <a2>CAS</a2> (doit utiliser https://) Port Port By default, <a0>SSO</a0> cookie is hidden, so protected applications cannot get <a1>SSO</a1> session key. Par défaut, le cookie <a0>SSO</a0> est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session <a1>SSO</a1>. Leave blank to deactivate the feature. Laissez vide pour désactiver cette fonctionnalité. Go to the Manager and <a0>create a new virtual host</a0> for Drupal. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Drupal. lemonldap-ng-portal: contains authentication portal and menu lemonldap-ng-portal : contient le portail d'authentification et le menu You will find here screenshots of the new features. On trouve ici les captures d'écran des nouvelles fonctionnalités. OBM_MAIL OBM_MAIL <a0>LL::NG</a0> portal is a modular component. Le portail <a0>LL::NG</a0> est un composant modulaire. Connection password Mot-de-passe de connexion Null Null <s13># OpenID Issuer</s13> <s13># Fournisseur d'identité OpenID</s13> press press Installation and configuration Installation et configuration http://search.cpan.org/perldoc?Apache::Session::File http://search.cpan.org/perldoc?Apache::Session::File ../../css/print.css ../../css/print.css Apache Apache <s4>require</s4> Lemonldap::NG::Portal::Menu; <s4>require</s4> Lemonldap::NG::Portal::Menu; http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm http://help.sap.com/saphelp_nw04/helpdata/en/94/695b3ebd564644e10000000a114084/content.htm Oracle Oracle This will use email as login name (for accounting, session explorer,…). L'adresse email est utilisée comme nom de compte (pour la traçabilité, l'explorateur de session,…). <s134>//"userobm_web_list" => ,</s134> <s134>//"userobm_web_list" => ,</s134> /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-ssoconfig.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Display reset password form Affiche le module de réinitialisation de mot-de-passe Authen::SASL Authen::SASL /_detail/screenshots/1.0/impact/portal.png?id=screenshots /_detail/screenshots/1.0/impact/portal.png?id=screenshots We advice to deactivate other options, cause users will use <a0>LL::NG</a0> portal to modify or reset their password. Il est conseillé de désactiver les autres options, car les utilisateurs utiliseront le portail <a0>LL::NG</a0> pour modifier ou réinitialiser leur mot-de-passe. OpenID server Serveur OpenID So for Handler on different physical servers than the Portal, a user with an expired session can still be authorized still the cache expires. Ainsi pour les agents installés sur des serveurs physiquement différent de celui hébergeant le portail, un utilisateur dont la session a expiré peut toujours être autorisé jusqu'à expiration du cache. OpenID allowed domains Domaines autorisés pour OpenID Automatic REMOTE_USER Automatic REMOTE_USER <s0>absolute <a1>URL</a1></s0> if it is run by handler (e.g. /admin/index.php?param=foo). <s0>l'<a1>URL</a1> absolue</s0> si elle est appelée par un agent (e.g. /admin/index.php?param=foo). documentation:status_standard.png documentation:status_standard.png Check configStorage and configStorageOptionsor file permissions. Vérifier les options configStorage and configStorageOptions ou les droits associés à ces fichiers. Choose one of the following method: Choisir l'une des méthodes suivantes : Sessions Sessions <s0>Trusted domains</s0>: domains on which the user can be redirected after login on portal. <s0>Domaines approuvés</s0> : domaines vers lesquels l'utilisateur peut être redirigé après authentification sur le portail. Developer access Accès développeurs cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images cd portal/skins mkdir myskin mkdir myskin/css mkdir myskin/images password.png password.png <s15>RewriteEngine</s15> <s16>On</s16> <s15>RewriteEngine</s15> <s16>On</s16> <s0>One session only by user</s0>: a user can not open 2 sessions with the same account. <s0>Une session seulement par utilisateur</s0> : on ne peut ouvrir 2 sessions avec le même compte. <s0>NameVirtualHost</s0> *:<s1>80</s1> <s0>NameVirtualHost</s0> *:<s1>80</s1> ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database ../../documentation/1.4/sqlsessionbackend.html#prepare_the_database Handlers have a session cache, with a default lifetime of 10 minutes. Les agents disposent d'un cache de session d'une durée de vie par défaut de 10 minutes. In Manager, click on <a0>SAML</a0> service providers and the button <c1>New service provider</c1>. Dans le manager, cliquer sur fournisseurs de service <a0>SAML</a0> puis sur le bouton <c1>Nouveau fournisseur de service</c1>. http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html <s2>RewriteEngine</s2> <s3>On</s3> <s2>RewriteEngine</s2> <s3>On</s3> vi /etc/yum.repos.d/lemonldap-ng.repo vi /etc/yum.repos.d/lemonldap-ng.repo default => $ssoRoles =~ /ou=aaa,ou=roles/ default => $ssoRoles =~ /ou=aaa,ou=roles/ The Zimbra email and calendar server is available for Linux, Mac <a1>OS</a1> X and virtualization platforms. Le serveur de messagerie et calendrier Zimbra est disponible pour Linux, Mac OS X et les plateformes de virtualisation. http://packages.debian.org/search?keywords=lemonldap-ng http://packages.debian.org/search?keywords=lemonldap-ng ../pages/documentation/1.1/mrtg.html ../pages/documentation/1.1/mrtg.html http://openid.net/specs/openid-authentication-2_0.html http://openid.net/specs/openid-authentication-2_0.html perl-Lemonldap-NG-Handler: CPAN - Handler modules perl-Lemonldap-NG-Handler : CPAN - modules agent portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> portalSkin <s13>=></s13> <s14>'dark'</s14><s15>,</s15> Password found from login process (only if <a0>password store in session</a0> is configured) Mot-de-passe fournit lors du processus d'authentification (seulement si le <a0>stockage du mot-de-passe dans la sessions</a0> est configuré) ../media/logos/logo_gn.png ../media/logos/logo_gn.png It is possible to store any additional session data. Il est possible de stocker d'autres données de session. Then on Linux server: Ensuite sur le serveur Linux : /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-export-priv-key.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <s0>Check conditions</s0>: set to Off to disable conditions checking on authentication responses. <s0>Vérifier les conditions</s0> : active ou désactive, l'examen des conditions dans les réponses d'authentification. <a0>LL::NG</a0> Null backend is a transparent backend: Le backend Null de <a0>LL::NG</a0> est un backend transparent : It can be seen in system processes, for example: Il peut être vu dans les processus du système, par exemple : </<s23>Location</s23>>   </<s23>Location</s23>>   Edit <c0>lemonldap-ng.ini</c0>, and activate status in the <c1>handler</c1> section: Éditer <c0>lemonldap-ng.ini</c0>, et activer le statut dans la section <c1>handler</c1> : liblemonldap-ng-handler-perl: Handler files liblemonldap-ng-handler-perl : fichiers des agents Error messages Messages d'erreur In 1.3, <a0>LL::NG</a0> have a captcha feature which is used in this case. Dans la version 1.3, <a0>LL::NG</a0> dispose d'une fonctionnalité "captcha" qui est utilisée dans ce cas. icons:colors.png icons:colors.png If you are protecting Dokuwiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Dokuwiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. User owns <a0>SSO cookies</a0> on the main domain (see <s1><a2>Login kinematics</a2></s1>) L'utilisateur dispose d'un <a0>cookie SSO</a0> dans le domaine principal (voir la <s1><a2>cinématique de connexion</a2></s1>) To allow this, use <a1>SOAP</a1> for configuration access, or use a network service like <a2>SQL database</a2> or <a3>LDAP directory</a3>. Pour contourner ce problème, utiliser <a1>SOAP</a1> pour l'accès à la configuration ou un service réseau tel une <a2>base de donnée SQL</a2> ou un <a3>annuaire LDAP</a3>. See <a0>Writing rules and headers</a0> chapter. Voir le chapître <a0>Écrire les règles et en-têtes</a0>. msmith msmith Upgrade from 1.3 Mise à jour depuis la version 1.3 <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> <s0><Valve</s0> <s1>className</s1>=<s2>"org.lemonLDAPNG.SSOValve"</s2> <s3>userKey</s3>=<s4>"AUTH-USER"</s4> <s5>roleKey</s5>=<s6>"AUTH-ROLE"</s6> <s7>roleSeparator</s7>=<s8>","</s8> <s9>allows</s9>=<s10>"127.0.0.1"</s10><s11>/></s11> ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options ../../documentation/1.4/samlservice.html#saml_sessions_module_name_and_options upgrade upgrade Sébastien BAHLOUL Sébastien BAHLOUL ^/c/portal/logout => logout_sso ^/c/portal/logout => logout_sso Returns cookie(s) name and values Retourne nom(s) et valeur(s) du(des) cookie(s) soapSessionService soapSessionService <c0>accept</c0>: all authenticated users can pass <c0>accept</c0>: tout utilisateur authentifié est autorisé $_authChoice $_authChoice http://lasso.entrouvert.org/ http://lasso.entrouvert.org/ http://facebook.com http://facebook.com When using this module, <a0>LL::NG</a0> portal will be called only if Apache does not return “401 Authentication required”, but this is not the Apache behaviour: if the auth module fails, Apache returns 401. En utilisant ce module, le portail <a0>LL::NG</a0> est appelé uniquement si Apache ne retourne pas “401 Authentication required”, aucune bascule n'est donc possible. install_bin (/usr/local/lemonldap-ng/bin) install_bin (/usr/local/lemonldap-ng/bin) If you have more than one role for an application, you can join those roles with a separator (ex: ||): Si plusieurs rôles peuvent être donnés dans la même application, on peut joindre ces rôles avec un séparateur (ex : ||): For example to store authentication mode, you can set in <c1>Session data to store</c1> a new key <c2>$_auth</c2> with value <c3>Authentication mode</c3>. Par exemple pour stocker le mode d'authentification, on peut créer une nouvelle clef dans <c1>données de session à stocker</c1> nommée <c2>$_auth</c2> avec comme valeur <c3>mode d'authentification</c3>. For apache configuration, you may have to remove the old symbolic link, if not done by the RPM: Pour la configuration apache, il faut peut-être supprimer l'ancien lien symbolique si ce n'est pas fait par le RPM: documentation/current/start.html documentation/current/start.html <<s14>IfModule</s14> mod_rewrite.c> <<s14>IfModule</s14> mod_rewrite.c> Value: <c0>$uid</c0> Valeur : <c0>$uid</c0> ../../documentation/1.4/authad.html ../../documentation/1.4/authad.html Script files Fichiers de script <a0>SlideShare</a0><br1/> <a0>SlideShare</a0><br1/> See <s0><a1>Form replay</a1></s0> to learn how to configure form replay to POST data on protected applications. Voir <s0><a1>Rejeu des formulaires</a1></s0> pour savoir comment configurer le rejeu des formulaires pour poster des données à une applications protégée. <s0>Allow proxied authentication</s0>: allow an authentication response to be issued from another IDP that the one we register (proxy IDP). <s0>Authentification proxy autorisée</s0> : autorise qu'une réponse d'authentification soit issue d'un autre IDP que celui enregistré (proxy IDP). <s0>Timeout</s0>: server idle timeout. <s0>Timeout</s0> : délai maximum de connexion. Description Description Required attributes: Attibuts requis : Configuration key of IDP used for authentication Clef de configuration de l'IDP utilisé pour l'authentification http://deb.entrouvert.org/ http://deb.entrouvert.org/ <a0>DBI</a0> Connection user Nom de connexion <a0>DBI</a0> Authentication table and user table can be the same. Les tables d'authentification et utilisateurs peuvent être confondues. You can also pass parameters to the make install command, with this syntax: On peut aussi passer des paramètres à la commande make install, avec cette syntaxe : <a10>loginhistory</a10><br11/> <a10>loginhistory</a10><br11/> <s15>AuthType</s15> Kerberos <s15>AuthType</s15> Kerberos dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] dn: cn=6fb7c4a170a04668771f03b0a4747f46,ou=sessions,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: 6fb7c4a170a04668771f03b0a4747f46 description: [serialized data] http://zimbra.example.com/zimbrasso http://zimbra.example.com/zimbrasso ../pages/wiki/dokuwiki.html ../pages/wiki/dokuwiki.html Configure Single Sign On cookie and portal URL Configurer le cookie SSO (Single Sign On) et l'URL du portail Your old Apache configuration should have been saved, you need to port your specificities in new Apache configuration files: L'ancienne configuration Apache devrait avoir été sauvée, il faut réporter les changements locaux dans le nouveau fichier de configuration Apache : <a4>highavailability</a4><br5/> <a4>highavailability</a4><br5/> Configuration objects use standard object class: <c0>applicationProcess</c0>. Les objets de configuration utilisent une classe d'objet standard : <c0>applicationProcess</c0>. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Google for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Google comme module d'authentication. Portal provides also many other features (see <a5>portal</a5> for more) Le portail fournit également de nombreux autres services (voir <a5>portail</a5> pour plus d'informations) In Manager, set syslog facility in <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>Syslog facility</c2>. Dans le manager, choisir la facilité syslog dans <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>Facilité syslog</c2>. The choosen backends will be registered in session: Les backends choisits enregistrent dans la session : Directory Directory <a0>Using Apache::Session::MySQL</a0> <e1>(if you choose this option, then read <a2>how to increase MySQL performances</a2>)</e1> <a0>Utiliser Apache::Session::MySQL</a0> <e1>(il est alors conseillé de lire <a2>comment améliorer les performances de MySQL</a2>)</e1> You can download the code here: <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> Il est possible de télécharger le code ici : <a0>http://github.com/oremj/mediawiki-http-auth/downloads</a0> But you will rather prefer to use an Apache authentication module, like for example <a0>LDAP authentication module</a0>: Il est souvent souhaitable d'utiliser un module d'authentification Apache, tel par exemple le <a0>module d'authentification LDAP</a0> : <a0>managerprotection</a0><br1/> <a0>managerprotection</a0><br1/> ../pages/documentation/1.1/ldapminihowto.html ../pages/documentation/1.1/ldapminihowto.html Multi LDAP#Openldap; LDAP#ActiveDirectory Multi LDAP#Openldap; LDAP#ActiveDirectory Configuration overview Vue d'ensemble de la configuration mysqladmin create lemonldapng mysqladmin create lemonldapng There are two ways to configure <a0>SSO</a0> with Sympa: Il y a deux façons de configurer le <a0>SSO</a0> avec Sympa : All this work is transparent for the user, he cannot see what data are posted by <a1>LL::NG</a1>. Tout ce travail est transparent pour l'utilisateur et il ne peut voir ce qui est envoyé par <a1>LL::NG</a1>. Import custom functions in LemonLDAP::NG Importer les fonctions personnalisées dans LemonLDAP::NG customfooter.tpm : <a0>HTML</a0> code in the footer div customfooter.tpm : code <a0>HTML</a0> inséré dans le div de pied-de-page <a4>extendedfunctions</a4><br5/> <a4>extendedfunctions</a4><br5/> Since LemonLDAP::NG 1.2, the <a0>demonstration backend</a0> is configured by default. Depuis la version 1.2 de LemonLDAP::NG, le <a0>backend de démonstration</a0> est sélectionné par défaut. <s155>//"userobm_samba_logon_script" => ,</s155> <s155>//"userobm_samba_logon_script" => ,</s155> <a6>liferay</a6><br7/> <a6>liferay</a6><br7/> If a user does not comply with any condition, he is prompted a customized message. Si un utilisateur ne remplit pas une condition, il est averti par un message personnalisé. You may want to use the <a0>Mutliple authentication backend</a0> to fail back to another authentication for user without Kerberos ticket. On peut souhaiter utiliser le <a0>backend d'authentification multiple</a0> pour retomber sur un autre système d'authentification pour les utilisateurs sans ticket Kerberos. /index.php?Access=admin /index.php?Access=admin ../../documentation/1.4/highavailability.html ../../documentation/1.4/highavailability.html This mode must not be used for other purpose than test and demonstration! Ces mode ne doit pas être utilisé pour autre chose que des tests et démonstrations ! Windows 2003 server: Windows 2003 server : Spring Security (ACEGI) Sécurité Spring (ACEGI) Some characters are encoded in URLs by the browser (such as space,…). Certains caractères sont encodés dans les URLs par le navigateur (tels les espaces,…). jsonfileconfbackend jsonfileconfbackend <s0>Protected URLs</s0>: Regexp of URLs for which the secure token will be sent, separated by spaces <s0>URLs protégées</s0> : expressions régulières correspondant aux URLs pour lesquels un jeton sécurisé doit être envoyé, separées par des espaces Fast CGI support Support FastCGI cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ cp lemonldap.class.php inc/auth/ cp lemonldapuserdatabackend.class.php inc/auth/ Auth-Admin Auth-Admin Use MySQL for Lemonldap::NG sessions Utiliser MySQL pour les sessions de Lemonldap::NG <a0>HTML</a0>::Template <a0>HTML</a0>::Template /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom /_detail/documentation/manager-portalskin.png?id=documentation%3A1.4%3Aportalcustom An error occurs on server side: SERVER_ERROR (500) Une erreur est survenue côté serveur : SERVER_ERROR (500) <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <<s3>Directory</s3> /var/lib/lemonldap-ng/portal/> <s0>on</s0>: always display <s0>on</s0> : toujours afficher icons:neotux.png icons:neotux.png #compilation #compilation #presentation #presentation /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=documentation%3A1.4%3Anotifications <a0>LL::NG</a0> can be configured to provides <a1>2 cookies</a1>: <a0>LL::NG</a0> peut être configuré pour fournir <a1>2 cookies</a1>: Then fill the two fields; Renseigner ensuite les deux champs ; <s0>Variables</s0>: user information, macros and groups used to fill <a1>SSO</a1> session <s0>Variables</s0> : informations utilisateur, macros et groupes utilisés pour renseigner la session <a1>SSO</a1> LinShare LinShare Parameter list Liste des paramètres You can use the same Facebook access token in your applications. On peut réutiliser le même ticket d'accès Facebook dans les applications. This mechanism can only work with authentication backends using a login/password form (<a0>LDAP</a0>, <a1>DBI</a1>, …) Ce mécanisme peut seulement fonctionner avec un backend d'authentification utilisant un formulaire login/mot-de-passe (<a0>LDAP</a0>, <a1>DBI</a1>, …) So if the http cookie is stolen, sensitive applications stay secured. Ainsi, si le cookie http cookie est volé, les applications sensibles restent protégées. <s0>Value</s0> Service <a1>URL</a1> (<a2>CAS</a2> service identifier) <s0>Value</s0> Service <a1>URL</a1> (identifiant de service <a2>CAS</a2>) <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s13>"auto_update_force_user"</s13> <s14>=></s14> <s15>true</s15><s16>,</s16> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11><s12>{</s12> multi <s13>=></s13> <s14>{</s14> https://github.com/9h37/django-lemonldap https://github.com/9h37/django-lemonldap Just add this file to OpenLDAP schemas by including it in <c0>slapd.conf</c0>: Ajouter simplement ce fichier aux schémas OpenLDAP en l'incluant dans <c0>slapd.conf</c0>: <s0>Value</s0>: application logout <a1>URL</a1> <s0>Valeur</s0> : <a1>URL</a1> de déconnexion de l'application ../../../media/documentation/status_standard.png ../../../media/documentation/status_standard.png documentation:latest:ssocookie documentation:latest:ssocookie ../../../documentation/1.4/portalmenu.html#categories_and_applications ../../../documentation/1.4/portalmenu.html#categories_and_applications ../pages/documentation/1.1/authchoice.html ../pages/documentation/1.1/authchoice.html Zimbra can also be connected to <a0>LL::NG</a0> via <a1>SAML protocol</a1> (see <a2>Zimbra blog</a2>). Zimbra peut aussi être connecté à <a0>LL::NG</a0> via le <a1>protocole SAML</a1> (voir le <a2>blog de Zimbra</a2>). ../../../../media/applications/phpldapadmin_logo.png ../../../../media/applications/phpldapadmin_logo.png AuthLDAPFilter AuthLDAPFilter http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps http://simplesamlphp.org/docs/1.6/simplesamlphp-googleapps Translations Traductions <a0>CAS</a0> force authentication renewal Forcer le renouvellement d'authentification <a0>CAS</a0> ../../media/icons/flags/fr.png ../../media/icons/flags/fr.png They are available at the EntityID <a0>URL</a0>, by default: <a1>http://auth.example.com/saml/metadata</a1>. Elles sont disponibles à l'<a0>URL</a0> EntityID, par défaut : <a1>http://auth.example.com/saml/metadata</a1>. http://test1.example.com/status http://test1.example.com/status dbiAuthUser dbiAuthUser ipAddr <e0>WHATTOTRACE</e0> ipAddr <e0>WHATTOTRACE</e0> Only current application is concerned by logout_app* targets. Seule l'application est concernée par les cibles logout_app*. Maintenance mode Mode maintenance documentation:1.4:soapminihowto documentation:1.4:soapminihowto ../documentation/current/sessions.html ../documentation/current/sessions.html applications:dokuwiki_logo.png applications:dokuwiki_logo.png If <a0>LL::NG</a0> is the only software installed in Apache, the virtual host feature may not have already been activated. Si <a0>LL::NG</a0> est le seul logiciel installé sur Apache, la fonctionnalité d'hôte virtuel peut ne pas avoir été activée. Menu organization: tree or accordion L'organisation du menu : arbre ou accordéon Facebook uses <a1>OAuth2</a1> protocol to allow applications to reuse its own authentication process (it means, if your are connected to Facebook, other applications can trust Facebook and let you in). Facebook utilise le protocole <a1>OAuth2</a1> pour autoriser les applications à réutiliser son propre prcessus d'authentification (ce qui signifie que si on est connecté à Facebook, d'autres applications peuvent agréer Facebook et accepter l'utilisateur). Template parameters Paramètres des modèles If you use Facebook as user database, declare values in exported variables : Si on utilise Facebook comme base de données utilisateurs, déclarer les valeurs dans les « variables exportées » : /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_4.png?id=documentation%3A1.4%3Aapplications%3Aliferay Bugtracker, Service Management Bugtracker, gestion de services /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Asecurity <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>globalStorage</s3> <s4>=</s4><s5> Apache::Session::File</s5> <s6>globalStorageOptions</s6> <s7>=</s7><s8> <s9>{</s9> 'Directory' <s10>=</s10>> '/var/lib/lemonldap-ng/sessions/', 'LockDirectory' <s11>=</s11>> '/var/lib/lemonldap-ng/sessions/lock/', <s12>}</s12></s8> MediaWiki virtual host in Apache Hôte virtuel Mediawiki dans le manager For example, to proxy <a0>https://www.public.com</a0> to <a1>http://www.private.com</a1>: Par exemple, pour relayer <a0>https://www.public.com</a0> en <a1>http://www.private.com</a1>: ../pages/documentation/1.1/upgrade.html ../pages/documentation/1.1/upgrade.html LemonLDAP::NG does not manage Apache configuration LemonLDAP::NG ne gère pas la configuration d'Apache → Your browser loops between portal and handler, it is probably a cookie problem. → le navigateur boucle entre le portail et l'agent, il s'agit probablement d'un problème. Config::IniFiles Config::IniFiles mailConfirmBody mailConfirmBody You should change the <c0>Allow</c0> directive to match administration <a1>IP</a1>, or use another Apache protection mean. On peut changer la directive <c0>Allow</c0> pour réserver l'adresse <a1>IP</a1> d'administration, ou utiliser une autre protection. <s0>Cookie expiration time</s0>: by default, <a1>SSO</a1> cookie is a session cookie, which mean it will be destroyed when the browser is closed. <s0>Durée de vie du cookie</s0> : par défaut, le cookie <a1>SSO</a1> est un cookie de session, ce qui signifie qu'il n'est pas conservé lorsque le navigateur est clos. Web sites install : Installer les sites web : <s113>//"userobm_address2" => ,</s113> <s113>//"userobm_address2" => ,</s113> <<s10>IfModule</s10> auth_kerb_module> <<s10>IfModule</s10> auth_kerb_module> This does not include Apache configuration which is not managed by LemonLDAP::NG Ceci n'inclue pas la configuration propre d'Apache qui n'est pas gérée par LemonLDAP::NG This will provide the auxiliary object class <c0>ssoUser</c0> with attributes: Il fournit les classes auxiliaires <c0>ssoUser</c0> avec les attributs : caPath caPath vi /etc/lemonldap-ng/apache2.conf.rpmsave vi /etc/lemonldap-ng/apache2.conf.rpmsave Apache rewrite rules must have been activated in <a0>Apache portal configuration</a0>: Le module Rewrite d'Apache doit être activé dans la <a0>configuration Apache du portail</a0>: <s0>Default NameID format</s0>: if no NameID format is requested, or the NameID format undefined, this NameID format will be used. <s0>Format de NameID par défaut</s0> : si aucun fiormat de NameID n'est demandé, ou si le format n'est pas défini, ce format de NameID sera utilisé. Proxy Proxy /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step4.png?id=screenshots The Handler must be loaded before any protected virtual host. L'agent doit être chargé avant tout hôte virtuel à protéger. PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> PerlSetVar LmCookieDomainToReplace private.com,public.com </<s4>VirtualHost</s4>> http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 http://coudot.blogs.linagora.com/index.php/post/2011/07/21/Sortie-de-LemonLDAP%3A%3ANG-11 Source RPM RPM sources SAML Identity Provider Fournisseur d'identité SAML <s0>Encryption mode</s0>: set the encryption mode for this IDP (None, NameID or Assertion). <s0>Mode de chiffrement</s0> : fixe le mode de chiffrement pour cet IDP (None, NameID ou Assertion). /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots /_detail/screenshots/1.0/manager/tree_light.png?id=screenshots _lassoIdentityDump _lassoIdentityDump documentation:1.4:fileconfbackend documentation:1.4:fileconfbackend The first rule that matches is applied. La première règle qui correspond est appliquée. Headers sent En-têtes envoyés dwho@badwolf.org dwho@badwolf.org documentation:1.4:applications:zimbra documentation:1.4:applications:zimbra See also <a0>Debian/Ubuntu installation documentation</a0>. Voir aussi la <a0>documentation d'installation Debian/Ubuntu</a0>. ../../media/documentation/lemonldap-ng-architecture.png ../../media/documentation/lemonldap-ng-architecture.png Memcached session backend Backend de session Memcached Prepare your new lemonldap-ng.ini file Preparer le nouveau lemonldap-ng.ini file You may use the <a2>securedCookie</a2> options to avoid session hijacking. Vous devriez utilisez les options <a2>securedCookie</a2> pour éviter le vol de session. Restart Apache and try to log on Manager. Redémarrer Apache et tenter de se connecter au manager. This user will not be available anymore if you configure a new authentication backend! Cet utilisateur n'est plus disponible si on change de backend d'authentification ! ldapVersion ldapVersion ^/forum/ ^/forum/ Restrict access to the directories only to the Apache server. Restreindre l'accès à ces répertoires au seul utilisateur Apache. http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur <s0>Passive authentication</s0>: set IsPassive flag in authentication request <s0>Authentification passive</s0> : positionne le drapeau IsPassive dans la requête d'authentification Core Core → LemonLDAP::NG uses a key to crypt/decrypt some datas. → LemonLDAP::NG utilise une clef pour chiffrer/déchiffrer certaines données. Browseable session backend (<a0>Apache::Session::Browseable</a0>) works exactly like Apache::Session::* corresponding module but add indexes that increase <a1>session explorer</a1> and <a2>session restrictions</a2> performances. Le backend de session explorable (<a0>Apache::Session::Browseable</a0>) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'<a1>explorateur de session</a1> et les <a2>restrictions de sessions</a2>. In particular, it use Apache2 threads capabilities so to optimize performances, prefer using <a0>mpm-worker</a0>. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence <a0>mpm-worker</a0>. documentation:1.0:sqlconfbackend documentation:1.0:sqlconfbackend <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s37><s38><security:custom-authentication-provider</s38> <s39>/></s39></s37> <s0><a1>URL</a1></s0>: optional, can be used to redirect on another <a2>URL</a2> (for example <a3>https://authssl.example.com</a3>). <s0><a1>URL</a1></s0> : optionnel, peut être utilisée pour rediriger l'utilisateur vers une autre <a2>URL</a2> (par exemple <a3>https://authssl.example.com</a3>). Authentication Authorization Accounting Authentification Autorisation Traçabilité FPW FPW Authentication: select row in authentication table matching user and password Authentification : selectionne la ligne de la table d'authentification contenant l'utilisateur et le mot-de-passe portalDisplayResetPassword portalDisplayResetPassword Crypt::OpenSSL::Bignum Crypt::OpenSSL::Bignum http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html http://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html documentation:1.4:applications:spring documentation:1.4:applications:spring Install packages Installer les paquets ldapAuthnLevel ldapAuthnLevel http://www.linux-ha.org/wiki/Heartbeat http://www.linux-ha.org/wiki/Heartbeat You can define keys for <a0>SAML</a0> message signature and encryption. Vous pouver définir des clefs pour la signature et le chiffrement des messages <a0>SAML</a0>. ../pages/wiki/syntax.html ../pages/wiki/syntax.html It is recommended to use ModPerl::Registry instead of using cgi-script as described in Apache configuration file example (portal-apache2.conf): Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf): Protect the Manager by Apache Protéger le Manager par Apache <a0>DBI</a0> Password hash Hachage de mot-de-passe <a0>DBI</a0> Notification uid for all users Nom de compte de notification pour tous les utilisateurs documentation:manager-portalskin.png documentation:manager-portalskin.png documentation:manager-authchoice.png documentation:manager-authchoice.png Documentation for latest stable version Documentation for latest stable version action=logout$ action=logout$ <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> <s0># SOAP functions for sessions management (disabled by default)</s0> <<s1>Location</s1> /index.pl/adminSessions> For example, for a full access, excepted week-end: Par exemple, pour un accès total excepté le week-end: documentation:1.4:redirections documentation:1.4:redirections Then, go in <c0>Twitter parameters</c0>: Allez ensuite dans <c0>Paramètres Twitter</c0> : <a0>URI</a0> of the server <a0>URI</a0> du serveur Declare custom functions Declarer les fonctions personnalisées It is set in LemonLDAP::NG utilities directory (<c0>convertConfig</c0>). Il se traouve dans le répertoire des utilitaires LemonLDAP::NG (<c0>convertConfig</c0>). If you have run the Debian/Ubuntu install command, just use: Pour la commande d'installation Debian/Ubuntu, utiliser simplement : Restrict network access to the database. Restreindre l'accès réseau à la base de données. <s0><a1>SSO</a1> logout</s0>: the request is not forwarded to application, only the <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1></s0>: la requête n'est pas transmise à l'application, seule la session <a2>SSO</a2> est fermée documentation:1.4:applications:tomcat ↵ documentation:1.4:applications:tomcat ↵ Launch that: Lancer ceci : Then creating a notification for <c0>alluserscustom</c0> will display the notification for all users. Ainsi, créer une notification pour <c0>alluserscustom</c0> affichera la notification à tous les utilisateurs. Documentation is available for configuration backends : Cette documentation est valable pour les backends de configuration : Then a user that try to access to one of the following <e0>will be granted</e0> ! Alors l'utilisateur qui tente d'accéder à l'une des URL suivantes <e0>sera autorisé</e0> ! authorize: check if user is authorizated to access to this <a0>URL</a0> authorize : vérifie si l'utilisateur est autorisé à accèder à cette <a0>URL</a0> ../../documentation/1.4/error.html ../../documentation/1.4/error.html HTTP Auth HTTP Auth You can also use the binary value from the logonHours attribute of Active Directory La valeur binaire de l'attribut logonHours d'Active Directory peut également être utilisée ../../css/all.css ../../css/all.css http://drupal.org/project/Webserver_auth http://drupal.org/project/Webserver_auth Custom functions allow to extend <a0>LL::NG</a0>, they can be used in <a1>headers</a1>, <a2>rules</a2> or <a3>form replay data</a3>. Les fonctions personnalisées permettent d'étendre <a0>LL::NG</a0>, elles peuvent être utilisées dans les <a2>règles</a2>, les <a1>en-têtes</a1> et les <a3>données à rejouer dans les formulaires</a3>. It means that if the IDP propose to close session earlier than the default LemonLDAP::NG timeout, the session _utime will be modified so that session is erased at the date indicated by the IDP. Celà signifie que si l'IDP propose de clore la session au-delà de la durée de vie par défaut dans LemonLDAP::NG, la valeur de _utime sera modifiée afin que la session ne soit effacée qu'au moment indiqué par l'IDP. <<s1>Location</s1> /index.pl/adminSessions> <<s1>Location</s1> /index.pl/adminSessions> This requires <a2>Perl CAS module</a2>. Ceci nécessite un <a2>module Perl CAS</a2>. <s0>unprotect</s0>: no authentication will be asked to access surveys <s0>unprotect</s0> : aucune authentification n'est nécessaire pour accéder aux surveillances ../index.html ../index.html The Django connector is available on GitHub: <a0>https://github.com/9h37/django-lemonldap</a0> Le connecteur Django est disponible sur GitHub : <a0>https://github.com/9h37/django-lemonldap</a0> <a12>authcas</a12><br13/> <a12>authcas</a12><br13/> <s0>Portal <a1>URL</a1></s0>: remote portal <a2>URL</a2> <s0>Portail <a1>URL</a1></s0>: <a2>URL</a2> du portail distant ../../../documentation/1.4/rbac.html ../../../documentation/1.4/rbac.html <a6>authapache</a6><br7/> <a6>authapache</a6><br7/> User has no access authorization: FORBIDDEN (403) L'utilisateur ne dispose pas de droits d'accès : FORBIDDEN (403) ../../documentation/1.0/fileconfbackend.html ../../documentation/1.0/fileconfbackend.html Headers En-têtes Since MySQL performances are very bad using this, if you want to store sessions in a MySQL database, prefer one of the following Ceci dégrade fortement les performances de MySQL, si vous voulez stocker les sessions dans une base de données MySQL, utilisez l'une des solutions suivantes http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER http://www.mediawiki.org/wiki/Extension:AutomaticREMOTE_USER <s0>ad.example.com</s0>: <a1>DNS</a1> of Active Directory <s0>ad.example.com</s0> : nom <a1>DNS</a1> du serveur Active Directory lastname lastname Command Line Interface (CLI) Interface en ligne de commande (CLI) -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? -I/etc/apache2 -e &Lemonldap::NG::Handler::Status::run(Cache::FileCache,{? ../../documentation/1.4/logs.html ../../documentation/1.4/logs.html <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Example<s8><s9></OrganizationName<s10>></s10></s9></s8> <s3><s4><OrganizationName</s4> <s5>xml:lang</s5>=<s6>"en"</s6><s7>></s7></s3>Exemple<s8><s9></OrganizationName<s10>></s10></s9></s8> Choose one of the following: Choisir l'une des options suivantes : To use custom files, delete links and copy them into your skin folder: Pour utiliser des fichiers personnalisés, effacer les liens et copier les fichiers dans le répertoire du thème : /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/accordeon_dark.png?id=screenshots Magic authentication Authentification magique https://verifier.login.persona.org/verify https://verifier.login.persona.org/verify portalUserAttr portalUserAttr casAttr casAttr You can set them the same way: On peut les renseigner par la même voie : documentation:1.4:ldapminihowto documentation:1.4:ldapminihowto <s0>Documentation</s0>: use <a1>OmegaT</a1> to translate offline documentation and configure it: <s0>Documentation</s0>: utilisez <a1>OmegaT</a1> pour traduire la dcumentation hors-ligne et configurez le : ../pages/documentation/1.1/authcas.html ../pages/documentation/1.1/authcas.html ../../../media/applications/bugzilla_logo.png ../../../media/applications/bugzilla_logo.png On CentOS/RHEL: Sur CentOS/RHEL : In this case, you can choose a different module to manage <a1>SAML</a1> sessions. Dans ce cas, vous devez utiliser un module différent pour gérer les sessions <a1>SAML</a1>. You can manage roles with the <a0>RBAC model</a0> or by using groups. On peut gérer les rôles avec le <a0>modèle RBAC</a0> ou en utilisant les groupes. Null authentication level Niveau d'authentification de Null icons:knewsticker.png icons:knewsticker.png ^/pub/ ^/pub/ <s0>Password change</s0>: form to change the password <s0>Changement de mot-de-passe</s0> : formulaire de changement de mot-de-passe <a6>phpldapadmin</a6><br7/> <a6>phpldapadmin</a6><br7/> </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> </<s18>Directory</s18>>   </<s19>VirtualHost</s19>> (&(mail=$mail)(objectClass=person)) (&(mail=$mail)(objectClass=person)) default => $ssoRoles =~ /ou=bbb,ou=roles/ default => $ssoRoles =~ /ou=bbb,ou=roles/ /_detail/logos/logo_ministere_justice.jpg?id=references /_detail/logos/logo_ministere_justice.jpg?id=references PHP PHP You can set a custom logo by choosing <c1>My logo</c1>, set the logo file name, and copy the logo file in portal applications logos directory On peut sélectionner un logo personnalisé en choisissant <c1>Mon logo</c1>, en indiquant le nom du fichier et en le copiant dans le répertoire des logos des applications https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO https://forge.indepnet.net/projects/glpi/wiki/GLPI-SSO http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 http://www.slideshare.net/coudot/lemonldapng-et-le-support-saml2 documentation:1.4:applications:sympa documentation:1.4:applications:sympa service_name Centralized auth service service_name Centralized auth service User tries to access to an application in the secondary <a0>LL::NG</a0> structure without having a session in this area Un utilisateur essaie d'accéder à une application du système <a0>LL::NG</a0> secondaire sans avoir de session dans cette aire <s0>Redirect on error</s0>: use 302 instead 500 or 503 <s0>Redirection pour les erreurs</s0> : utilise 302 au lieu de 500 ou 503 ../../documentation/1.4/security.html ../../documentation/1.4/security.html <s0>Name</s0>: <a1>SAML</a1> attribute name. <s0>Nom</s0>: Nom de l'attribut <a1>SAML</a1>. portal/skins/common/mail_confirm.tpl portal/skins/common/mail_confirm.tpl [libdefaults] [libdefaults] <a0>LL::NG</a0> can propose a password reset form, for users who loose their password (this kind of application is also called a self service password interface). <a0>LL::NG</a0> peut proposer un formulaire de réinitialisation de mot-de-passe pour les utilisateurs qui ont perdu leur mot-de-passe (ce type d'application est également appelée interface de mot-de-passe self-service). Security parameters Paramètres de sécurité Handler use the default Apache error code for the following cases: Les agents utilisent le code d'erreur d'Apache dans les cas suivants : logos:logo_linagora.png logos:logo_linagora.png <s0>Master's <a1>IP</a1> address</s0>: the <a2>IP</a2> addresses of servers which are accredited to authenticate user. <s0>Adresse <a1>IP</a1> du maître</s0> : les adresses <a2>IP</a2> des serveurs autorisés à authentifier les utilisateurs. An application name (to allow access by applications and not by group of users) Un nom d'application (pour autoriser l'accès aux applications sans utiliser les groupes) You have to use “Multi” as authentication module. Il est possible d'utiliser le module d'authentification “Multi”. documentation:1.4:start documentation:1.4:start You cannot use the <c0>unprotect</c0> rule because Drupal navigation is based on query strings (?q=admin, ?q=user, etc.), and unprotect rule only works on <a1>URL</a1> patterns. Vous ne pouvez pas utiliser la règle <c0>unprotect</c0> car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'<a1>URL</a1>. The portal <a0>URL</a0> <s1>must</s1> be inside <a2>SSO</a2> domain. L'<a0>URL</a0> du portail <s1>doit</s1> être dans le domaine <a2>SSO</a2>. tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* tar zxvf lemonldap-ng-*.tar.gz cd lemonldap-ng-* <s0>Portal</s0>: the portal redirect on itself in many cases (credentials POST, <a1>SAML</a1>, etc.) le <s0>portail</s0> : le portail redirige vers lui-même dans plusieurs cas (POST d'authentification, <a1>SAML</a1>, etc...) LemonLDAP::NG provides a script to change configuration backend easily keeping history. LemonLDAP::NG fournit un script pour changer aisément de backend de configuration en conservant l'historique. So you can have a full <a0>AAA</a0> protection for your web space as described below. Vous vouvez ainsi avoir une protection <a0>AAA</a0> complète pour votre espace web tel qu'indiqué ci-dessus. zimbra zimbra Theme (<a0>jQuery UI theme</a0>). Thème (<a0>thème jQuery-UI</a0>). nullAuthnLevel nullAuthnLevel install_site (all sites including install_doc_site) install_site (all sites including install_doc_site) <a10>authbrowserid</a10><br11/> <a10>authbrowserid</a10><br11/> SQL configuration Configuration SQL Service configuration Configuration du service Attribute Service Service d'attribut netid_http_header HTTP_AUTH_USER netid_http_header HTTP_AUTH_USER Twitter application secret Secret d'application Twitter documentation:1.4:internalproxy documentation:1.4:internalproxy Since version 1.90 of Apache::Session, you can use Apache::Session::MySQL::NoLock instead Depuis la version 1.90 d'Apache::Session, on peut utiliser Apache::Session::MySQL::NoLock à la place <a10>mysqlminihowto</a10><br11/> <a10>mysqlminihowto</a10><br11/> For security reasons, the password is not shown in sessions explorer. Pour des raisons de sécurité, le mot-de-passe n'est pas affiché dans l'explorateur de sessions. Portal creates <a0>SSO cookies</a0> with session key as value Le portail crée le <a0>cookie SSO</a0> avec la clef de la session comme valeur <<s1>IfModule</s1> mod_rewrite.c> <<s1>IfModule</s1> mod_rewrite.c> It can be upgraded using buildPortalWSDL script. Il peut être mis à jour en utilisant le script buildPortalWSDL. uidR uidR Can't locate /usr/share/lemonldap-ng/configStorage.pl Can't locate /usr/share/lemonldap-ng/configStorage.pl make debian-install make debian-install LemonLDAP::NG Portal Portail LemonLDAP::NG Notifications trough SOAP Notifications via SOAP <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> <s8><s9><security:custom-filter</s9> <s10>position</s10>=<s11>"PRE_AUTH_FILTER"</s11> <s12>/></s12></s8> Reporting a bug Rapporter un bogue Install Authen::Radius Installer Authen::Radius This function will check the day and the hour of current request, and compare it to allowed days and hours. Cette fonction examine le jour et l'heure de la requête courante et la compare aux jours et heures autorisés. /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-attribute.png?id=documentation%3A1.4%3Aauthsaml checkXSS checkXSS authChoiceParam authChoiceParam Self service reset (send a mail to the user with a to change the password) Self-service de réinitialisation (envoie un mail à l'utilisateur pour changer son mot-de-passe) <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> <s0>$uid</s0> <s1>eq</s1> <s2>"dwho"</s2> sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ sudo ln -s /usr/local/lemonldap-ng/etc/cron.d/* /etc/cron.d/ http://www.linuxpicnic.org/ http://www.linuxpicnic.org/ ../media/logos/logo_linagora.png ../media/logos/logo_linagora.png <a0>DBI</a0> Connection password Mot-de-passe de connexion <a0>DBI</a0> ../../documentation/1.4/soapconfbackend.html ../../documentation/1.4/soapconfbackend.html #a #a #b #b #f #f #e #e #d #d The file name default separator is <c0>_</c0>, this can be a problem if you register notifications for users having <c1>_</c1> in their login. Le séparateur par défaut des noms de fichiers est <c0>_</c0>, ce qui peut poser problème si on enregistre des notifications pour des utilsateur ayant un caractère <c1>_</c1> dans leur nom de connexion. <s0>Target attribute</s0>: name of the attribute in the groups storing the link to the user (default: member). <s0>Attribut cible</s0> : nom de l'attribut du groupe stockant le lien vers l'utilisateur (défaut: member). #c #c #j #j #i #i #h #h ../../documentation/1.4/authyubikey.html ../../documentation/1.4/authyubikey.html #g #g #n #n Then create the keytab. Créer ensuite le fichier keytab. #m #m #l #l /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers /_detail/documentation/manager_access_rule.png?id=documentation%3A1.4%3Awritingrulesand_headers #r #r <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> <s0><s1><md:EntityDescriptor</s1> <s2>entityID</s2>=<s3>"google.com"</s3> <s4>xmlns</s4>=<s5>"urn:oasis:names:tc:SAML:2.0:metadata"</s5> <s6>xmlns:ds</s6>=<s7>"http://www.w3.org/2000/09/xmldsig#"</s7> <s8>xmlns:md</s8>=<s9>"urn:oasis:names:tc:SAML:2.0:metadata"</s9><s10>></s10></s0> #q #q #p #p #o #o #u #u notifyOther notifyOther #v #v <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>portalSkin</s3> <s4>=</s4><s5> dark</s5> #s #s Even if LL:NG can catch logout <a0>URL</a0> trough <a1>virtual host rules</a1>, you can have the need to forward a logout to other applications, to close their local sessions. Même si LL:NG peut intercepter les <a0>URL</a0> de déconnexion via les <a1>règles de d'hôte virtuel</a1>, on peut avoir besoin de propager la déconnexion à d'autres applications, pour clore leurs sessions locales. This method requires to execute a command on the Active Directory server, and then transfer the keytab on Linux server. Cette méthode nécessite d'exécuter une commande sur le serveur Active Directory et ensuite de transférer le fichier keytab sur le serveur Linux. #t #t #z #z <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> <s16><s17><AssertionConsumerService</s17> <s18>Binding</s18>=<s19>"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"</s19> <s20>Location</s20>=<s21>"https://www.google.com/a/mydomain.org/acs"</s21> <s22>index</s22>=<s23>"1"</s23> <s24>/></s24></s16> #w #w LINAGORA LINAGORA The new password is sent to user Le nouveau mot-de-passe est envoyé à l'utilisateur Go in the Manager and set the session module (for example <a0>Apache::Session::Postgres</a0> for PostgreSQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le Manager et choisir le module de session (par exemple <a0>Apache::Session::Browseable::Postgres</a0> pour PostgreSQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter les paramètres suivants (sensible à la casse): <s0>handler-apache2.conf</s0> : Handler declaration, reload and sample virtual hosts <s0>handler-apache2.conf</s0> : déclaration du handler, rechargement et exemple d'hôte virtuel documentation:1.4:logs documentation:1.4:logs There are packages available here: <a0>http://deb.entrouvert.org/</a0>. Les paquets sont disponibles ici : <a0>http://deb.entrouvert.org/</a0>. insert a label <s0>“LMAUTH”</s0> ahead of the loop insérer le label <s0>“LMAUTH”</s0> en tête de la boucle <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <s13>'LDAP#ActiveDirectory'</s13> <s14>=></s14> <s15>{</s15> <a0>CAS</a0>_gateway <a0>CAS</a0>_gateway http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth http://wiki.zimbra.com/index.php?title=Preauth#Preparing_a_domain_for_preauth ../../documentation/1.4/applications/authbasic.html ../../documentation/1.4/applications/authbasic.html OBM Apache configuration must be loaded <s0>after</s0> <a1>LL::NG</a1> <a2>Apache configuration</a2>. La configuration du serveur Apache d'OBM doit être chargée <s0>après</s0> <a2>celle</a2> de <a1>LL::NG</a1>. You also need to know the technical name of configuration parameter to do this. Il est également nécessaire de connaître le nom technique du paramètre de configuration pour le faire. ../../documentation/1.4/idpopenid.html#shared_attributes_sreg ../../documentation/1.4/idpopenid.html#shared_attributes_sreg applications:http_logo.png applications:http_logo.png <s0>handler</s0>: parameters only for Handler <s0>manager</s0> : paramètres réservés aux agents JCOS JCOS <s2>SetHandler</s2> perl-<s3>script</s3> <s2>SetHandler</s2> perl-<s3>script</s3> <s6>AuthBasicProvider</s6> ldap <s6>AuthBasicProvider</s6> ldap if you use “CDBI” or “RDBI” system, the notifications will be stored in the same database as configuration and in a table called “notifications”. si “CDBI” ou “RDBI” est utilisé, les notifications sont stockées dans la même base de données que la configuration et la table est nommée “notifications”. Install Installation <s163>//"userobm_nomade_dateend" => ,</s163> <s163>//"userobm_nomade_dateend" => ,</s163> Logout rule (for example logout_app_sso) Règle de déconnexion (par exemple logout_app_sso) applications:limesurvey_logo.png applications:limesurvey_logo.png ../../documentation/current/ssocookie.html#sso_cookie ../../documentation/current/ssocookie.html#sso_cookie Then, go in <c0>Null parameters</c0>: Aller ensuite dans les <c0>paramètres Null</c0>: Force HTTPS in redirection Indicateur HTTPS pour les redirections LemonLDAP::NG configuration is build around Apache virtual hosts. La configuration de LemonLDAP::NG est construite autour des hôtes virtuels Apache. http://wiki.sbay.org/ http://wiki.sbay.org/ Search user: select row in user table matching user Recherche de l'utilisateur : selectionne la ligne de la table utilisateurs correspondant à l'utilisateur Indeed, a virtual host can contain several applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). En effet, un hôte virtuel peut contenir plusieurs applications (<a1>http://vhost.example.com/appli1</a1>, <a2>http://vhost.example.com/appli2</a2>). ../../../media/icons/warehause.png ../../../media/icons/warehause.png ldapGroupAttributeNameSearch ldapGroupAttributeNameSearch Proxy tickets will be collected at authentication phase and stored in user session under the form: Les tickets de proxy seront collectés lors de la phase d'authentification et stockés dans la session utilisateur sous la forme : <a0>SAML</a0> authentication and issuer Authentification ou fourniture d'identité <a0>SAML</a0> Category and application key can have a digit as first character, which will allow to display categories in the right order (categories and applications are displayed in alphabetical order). Les clefs des categories et des applications peuvent commencer par un chiffre ce qui permet de les afficher dans le bon ordre (catégories et applications sont affichées dans l'ordre alphabétique). http://auth.ucanss.fr/ http://auth.ucanss.fr/ <s54>//"userobm_password_type" => ,</s54> <s54>//"userobm_password_type" => ,</s54> ~500 ~500 ../../../documentation/1.4/header_remote_user_conversion.html ../../../documentation/1.4/header_remote_user_conversion.html logout_url http://sympa.example.com/wws/logout logout_url http://sympa.example.com/wws/logout Portal menu Menu du portail The portal is the main component of <a0>LL::NG</a0>. Le portail est le principal composant de <a0>LL::NG</a0>. Database must be prepared exactly like in <a0>SQL session backend</a0> except that a field must be added for each data to index. La base de donnée doit être préparée exactement comme celle du <a0>backend de session SQL</a0> si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer. the portal is in the declared domain le portail est dans le domaine déclaré /var/lib/lemonldap-ng/sessions/lock /var/lib/lemonldap-ng/sessions/lock documentation:ha-apache.png documentation:ha-apache.png <a0>User database</a0>: where collect user information <a0>Base de données utilisateurs</a0> : où collecter les informations utilisateurs MediaWiki MediaWiki ldapGroupAttributeNameUser ldapGroupAttributeNameUser To protect the manager by <a0>LL::NG</a0>, you just have to set this in <c1>lemonldap-ng.ini</c1> configuration file (section [manager]): Pour protéger le manager par <a0>LL::NG</a0>, il suffit de mettre ceci dans le fichier de configuration <c1>lemonldap-ng.ini</c1> (section [manager]) : Be sure that mod_rewrite is installed and that SAML2 rewrite rules are activated in <a0>Apache portal configuration</a0>: Assurez-vous que mod_rewrite est installé et que les règles de réécriture SAML2 sont activées dans la <a0>configuration Apache du portail</a0>: <s0><a1>SAML</a1> identity providers</s0>: Registered IDP <s0>Fournisseurs d'identité <a1>SAML</a1></s0> : IDP enregistrés <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> <s9>"auto_update"</s9> <s10>=></s10> <s11>true</s11><s12>,</s12> Local macros is a special feature of handler that permit to have macros useable localy only. Les macros locales sont une fonctionnalité spéciale des agents qui permettent d'avoir des macros utilisables localement seulement. Perl-CAS module installation Installation du module Perl-CAS yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* yum localinstall lemonldap-ng-* perl-Lemonldap-NG-* <s0>Key</s0>: Service ID <s0>Clef</s0> : Service ID ../pages/documentation/1.1/applications/drupal.html ../pages/documentation/1.1/applications/drupal.html If the packages are stored in a yum repository: Si les paquets sont stockés dans un dépôt yum : ../documentation/presentation.html#login ../documentation/presentation.html#login You have to install <c0>HttpAuthPlugin.php</c0> in the <c1>extensions/</c1> directory of your MediaWiki installation: Il faut installer <c0>HttpAuthPlugin.php</c0> dans le répertoire <c1>extensions/</c1> de MediaWiki : <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> <a0><s1>session_start</s1></a0><s2>(</s2><s3>)</s3><s4>;</s4>   <s5>$_SERVER</s5><s6>[</s6><s7>'PHP_AUTH_USER'</s7><s8>]</s8> <s9>=</s9> <s10>$_SERVER</s10><s11>[</s11><s12>'REMOTE_USER'</s12><s13>]</s13><s14>;</s14>   <s15>if</s15> <s16>(</s16><s17>(</s17><s18>!</s18><a19><s20>empty</s20></a19><s21>(</s21><s22>$_SERVER</s22><s23>[</s23><s24>'PHP_AUTH_USER'</s24><s25>]</s25><s26>)</s26> <s27>&&</s27> <s28>!</s28><a29><s30>empty</s30></a29><s31>(</s31><s32>$_SERVER</s32><s33>[</s33><s34>'REMOTE_USER'</s34><s35>]</s35><s36>)</s36><s37>)</s37> <s38>||</s38> <s39>$_COOKIE</s39><s40>[</s40><s41>$wgDBserver</s41> <s42>.</s42> <s43>'UserID'</s43><s44>]</s44><s45>)</s45> <s46>{</s46> user; admin user; admin <a0>DBI</a0> UserDB connection user Compte de connexion UserDB <a0>DBI</a0> The default value of this wilcard is <c0>allusers</c0>, but you can change it if <c1>allusers</c1> is a known identifier in your system. La valeur par défaut de cette carte blanche est <c0>allusers</c0>, mais on peut la changer si <c1>allusers</c1> est un nom d'utilisateur. <s0>Site Name</s0>: Name that will be displayed in the BrowserID login window <s0>Nom du site</s0> : Nom qui sera affiché dans la fenêtre d'authentification BrowserID <s99>//"userobm_fax2" => ,</s99> <s99>//"userobm_fax2" => ,</s99> 'default_expires_in' => 600,? 'default_expires_in' => 600,? using external identity provider (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, other <a4>LL::NG</a4> system, …) utilisant un fournisseur d'identité externe (<a0>SAML</a0>, <a1>OpenID</a1>, <a2>CAS</a2>, <a3>Twitter</a3>, autres systèmes <a4>LL::NG</a4>, …) In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Radius for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Radius pour l'authentification. ../pages/documentation/1.1/authslave.html ../pages/documentation/1.1/authslave.html ../../documentation/1.4/installdeb.html ../../documentation/1.4/installdeb.html </<s17>IfModule</s17>>   </<s17>IfModule</s17>>   First name Prénom lemonldap_ng_manager_1340022440100.png lemonldap_ng_manager_1340022440100.png If you plan to forward user's password to OBM, then you have to <a0>keep the password in session</a0>. S'il est prévu de transmettre le mot-de-passe utilisateur à OBM, <a0>conserver le mot-de-passe dans la session</a0>. Auth-SuperAdmin Auth-SuperAdmin documentation:1.4:idpcas documentation:1.4:idpcas ); ); 0.9.4_logout_menu.png 0.9.4_logout_menu.png Bordeaux Bordeaux ../../documentation/1.4/ldapsessionbackend.html ../../documentation/1.4/ldapsessionbackend.html <s0>passThrough</s0> (optional): Allow anonymous access or not. <s0>passThrough</s0> (optionnel) : Autorise ou non l'accès anonyme. <s0>dirName</s0>: directory where notifications are stored. <s0>dirName</s0> : répertoire dans lequel sont stockées les notifications. Change rights on keytab file: Changer les droits sur le fichier keytab : The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = Lemonldap\:\:NG \: .* was not found in LDAP directory \(<HOST>\) <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> <s3>new</s3> CGI<s4>;</s4> <s5>...</s5> /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots /_detail/screenshots/1.0/manager/tree_dark.png?id=screenshots Some applications need the <c0>REMOTE_USER</c0> environment variable to get the connected user, which is not set in reverse-proxy mode. Certaines applications ont besoin de la variable d'environnement <c0>REMOTE_USER</c0> pour connaître le nom d'utilisateur connecté, qui n'est pas renseignée en mode reverse-proxy. KrbMethodK5Passwd <s17>Off</s17> KrbMethodK5Passwd <s17>Off</s17> <s5># Uncomment this line if you use Lemonldap::NG menu</s5> <s5># Décommenter cette ligne si le menu Lemonldap::NG est utilisé</s5> First configuration steps Premiers pas de configuration ../../documentation/1.4/applications/mediawiki.html ../../documentation/1.4/applications/mediawiki.html In <c0>General Parameters</c0> > <c1>Authentication modules</c1>, set: Dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1>, choisir : documentation:manager-saml-idp-attribute.png documentation:manager-saml-idp-attribute.png Issuer databases use rules les règles d'utilisation des bases de données des fournisseur d'identité <a2>applications</a2><br3/> <a2>applications</a2><br3/> Note that you have to use UTF-8 characters Notez que vous devez utiliser des caractères UTF-8 Choose for example <a0>http://zimbra.example.com/zimbrasso</a0> as <a1>SSO</a1> <a2>URL</a2> and <a3>set it in application menu</a3>. Choisir par exemple <a0>http://zimbra.example.com/zimbrasso</a0> comme <a2>URL</a2> <a1>SSO</a1> et <a3>insérer la dans le menu application</a3>. ldapServer ldapServer <s0>Transient</s0>: NameID is generated <s0>Transient</s0>: le NameID est généré So write your rules using normal characters. Il faut donc écrire les règles en utilisant les caractères normaux. You can simply checkout sources with the following command: Utilisez simplement la commande suivante pour télécharger les sources : ../../../media/applications/django_logo.png ../../../media/applications/django_logo.png Portal translation Traduction du portail ../pages/documentation/1.1/parameterlist.html ../pages/documentation/1.1/parameterlist.html http://perldoc.perl.org/functions/print.html http://perldoc.perl.org/functions/print.html Real session backend Backend de session réel ../pages/documentation/1.4/authwebid.html ../pages/documentation/1.4/authwebid.html <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> <s95>"userobm_fax"</s95> <s96>=></s96> <s97>"HTTP_OBM_FACSIMILETELEPHONENUMBER"</s97><s98>,</s98> __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> __PACKAGE__<s0>-></s0><s1>init</s1><s2>(</s2> Identity provider Fournisseur d'identité remoteGlobalStorageOptions remoteGlobalStorageOptions As administrator, go in Google Apps control panel and click on Advanced tools: Comme administrateur, aller dans le panneau de contrôle Google Apps et cliquer sur les outils avancés click (Advanced tools) : Allow only one session per user N'autoriser qu'une session par utilisateur <s0>SSLCertificateKeyFile</s0>: Server private key <s0>SSLCertificateKeyFile</s0> : clef privée du serveur Lasso Lasso An access rule Une règle d'accès Then, go in <c0>Slave parameters</c0>: Ensuite, aller dans les <c0>paramètres Slave</c0>: Forbidden and Server error Accès interdits et erreurs du serveur Other Autres phpLDAPadmin local configuration Configuration locale phpLDAPadmin The PasswordDBDemo will allow you to change the password with some basic checks, but as the data are hard coded, the password will never be really changed. PasswordDBDemo permet de changer de mot-de-passe avec quelques tests de base, mais comme les données sont codées en dur, le mot-de-passe ne sera jamais réellement changé. Applications protection Protection des applications mailreset_step5.png mailreset_step5.png notificationWildcard notificationWildcard download.html download.html The configuration can be changed in <c0>etc/manager-apache2.conf</c0>, for example to restrict the <a1>IP</a1> allowed to access the Manager: Cette configuration peut être changée dans <c0>etc/manager-apache2.conf</c0>, par exemple pour restreindre les adresses <a1>IP</a1> autorisées à accéder au manager : /_detail/icons/personal.png?id=documentation%3A1.4%3Astart /_detail/icons/personal.png?id=documentation%3A1.4%3Astart Admin Magazin Admin Magazin You can modify the default behavior for people without value in ssoLogonHours. Il est possible de modifier le comportement par défaut pour les utilisateurs ne disposant pas d'une valeur ssoLogonHours. <a0>Password database</a0>: where change password <a0>Base de données des mots-de-passe</a0> : où changer le mot-de-passe Configuration interface access is not protected by Apache but by LemonLDAP::NG itself (see <c0>lemonldap-ng.ini</c0>): L'accès à l'interface de configuration n'est pas protégée par Apache mais par LemonLDAP::NG lui-même (voir <c0>lemonldap-ng.ini</c0>) : <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> <s127>"userobm_town"</s127> <s128>=></s128> <s129>"HTTP_OBM_L"</s129><s130>,</s130> Daniel RIVIERE Daniel RIVIERE <s16>}</s16> <s17>)</s17><s18>;</s18> <s16>}</s16> <s17>)</s17><s18>;</s18> http://httpd.apache.org/docs/current/howto/auth.html http://httpd.apache.org/docs/current/howto/auth.html Then: Ensuite : <a0>URL</a0> pattern: <c1>default</c1> Expression sur l'<a0>URL</a0> : <c1>default</c1> Example for macros: Exemples de macros: Apache configuration file on <a0>LL::NG</a0> reverse proxy (hosting <a1>LL::NG</a1> Handler): le fichier de configuration d'Apache sur le reverse-proxy <a0>LL::NG</a0> (celui qui héberge l'agent <a1>LL::NG</a1>): $ENV{REMOTE_ADDR} =~ /^192\.168/ $ENV{REMOTE_ADDR} =~ /^192\.168/ <a8>filesessionbackend</a8><br9/> <a8>filesessionbackend</a8><br9/> Build: Build: <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>multi</s3> <s4>=</s4><s5> <s6>{</s6>'LDAP#Openldap'<s7>=</s7>><s8>{</s8>ldapServer<s9>=</s9>>'ldap1.example.com',LDAPFilter<s10>=</s10>>'<s11>(</s11>uid<s12>=</s12>$user<s13>)</s13>'<s14>}</s14>,'LDAP#ActiveDirectory'<s15>=</s15>><s16>{</s16>ldapServer<s17>=</s17>>'ldaps://ad.example.com',LDAPFilter<s18>=</s18>>'<s19>(</s19>&<s20>(</s20>sAMAccountName<s21>=</s21>$user<s22>)</s22><s23>(</s23>objectClass<s24>=</s24>person<s25>)</s25><s26>)</s26>'<s27>}</s27><s28>}</s28></s5> Access control possible by creating one user for Manager (write) and another for portal and handlers (read) Contrôle d'accès possible en créant un compte pour le manager (écriture) et un autre pour le portail et les agents (lecture) Sessions are stored as files in a single directory. Les sessions sont stockées dans des fichiers dans un unique répertoire. portalDisplayLogout portalDisplayLogout ldapGroupRecursive ldapGroupRecursive encode_base64($givenName." ".$surName) encode_base64($givenName." ".$surName) To add these attributes, go in Manager, <c0>Variables</c0> » <c1>Exported Variables</c1>. Pour ajouter ces attributs, aller dans le manager, <c0>Variables</c0> » <c1>Variables exportées</c1>. We can distinguish several kind of variables: On peut distinguer plusieurs types de variables : Lemonldap-ng.ini parameters Paramètres lemonldap-ng.ini You must register IDP metadata here. Il faut enregistrer les métadatas de l'IDP ici. For example, we will use 3 roles: Par exemple, en utilisant 3 rôles : https://developer.mozilla.org/en-US/docs/Mozilla/Persona https://developer.mozilla.org/en-US/docs/Mozilla/Persona documentation:manager-menu-application-logo.png documentation:manager-menu-application-logo.png <a0>CAS</a0>_renew <a0>CAS</a0>_renew <a16>authdbi</a16><br17/> <a16>authdbi</a16><br17/> lemonldap-ng-portal-auth.png lemonldap-ng-portal-auth.png Give the uid (for accounting) Donne l'uid (pour la traçabilité) ../pages/documentation/1.1/portalcustom.html ../pages/documentation/1.1/portalcustom.html ../../../media/applications/tomcat_logo.png ../../../media/applications/tomcat_logo.png Name of IDP used for authentication Nom de l'IDP utilisé pour l'authentification </<s7>Directory</s7>> </<s7>Directory</s7>> <s0>Common domain</s0>: Name of the common domain (where common cookie is available). <s0>Domaine commun</s0> : Nom du domaine commun (où le cookie commun est disponible). documentation:1.4:installrpm documentation:1.4:installrpm http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html http://code.google.com/googleapps/domain/sso/saml_reference_implementation.html Real name Real name proxyOptions proxyOptions Define here: Definir ici : Activation Activation Lemonldap::NG::Handler Lemonldap::NG::Handler You can define more than one form replay <a0>URL</a0> per virtual host. Il est possible de définir plusieurs <a0>URL</a0> de rejeu de formulaires par hôte virtuel. ../pages/documentation/1.1/customfunctions.html ../pages/documentation/1.1/customfunctions.html Convert existing configuration Convertir la configuration existante Lanyrd Lanyrd Apache configuration file on application server (hosting the application): le fichier de configuration d'Apache sur le serveur d'application (celui qui héberge l'application): ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> ldapServer <s18>=></s18> <s19>'ldap1.example.com'</s19><s20>,</s20> Activate auto accept timer Activer le compte-à-rebours d'acceptation automatique → Some <a0>URL</a0> parameters contain forbidden characters. → Certains paramètres de l'<a0>URL</a0> contiennent des caractères interdits. Dedicated to administrators Dédié aux administrateurs documentation/current/installrpm.html#yum_repository documentation/current/installrpm.html#yum_repository <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> <s11>TO</s11> lemonldap<s12>-</s12>ng@manager<s13>.</s13>host <s14>IDENTIFIED</s14> <s15>BY</s15> <s16>'mypassword'</s16>; <s17>GRANT</s17> <s18>SELECT</s18> <s19>ON</s19> lmConfig<s20>.*</s20> General performances Performances générales <s0>Authorizated domain</s0>: <s0>Domaines autorisés</s0> : Applications listed bellow are known to be easy to integrate in <a0>LL::NG</a0>. Les applications listées ci-dessous sont connues pour être faciles à intégrer à <a0>LL::NG</a0>. <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> <s54>my</s54> <s55>$res</s55> <s56>=</s56> <s57>$r</s57><s58>-></s58><s59>result</s59><s60>(</s60><s61>)</s61><s62>;</s62> Binding Méthode Date of session last modification Date de la dernière modification de la session Old sessions are deleted by a cron script. Les anciennes sessions sont effacées par un script cron. Commit Commit <a0>LL::NG</a0> can be configured to restrict OpenID exchange using a white or a black list of domains. <a0>LL::NG</a0> peut être configuré pour restreindre les échanges OpenID en utilisant les listes blanches ou noires de domaines. ../../documentation/1.4/formreplay.html ../../documentation/1.4/formreplay.html 22 22 #local_file #local_file documentation:manager-saml-service-sp-slo.png documentation:manager-saml-service-sp-slo.png <s0>Password field name</s0>: name of authentication table column hosting password <s0>Nom du champ mot-de-passe</s0> : nom de la colonne de la table d'authentification contenant le mot-de-passe <s0>Clément “KPTN” OUDOT</s0>: project leader, lead developer, graphics, documentation, community management <s0>Clément “KPTN” OUDOT</s0> : Leader du projet, développeur principal, graphisme, documentation, gestion de la communauté Rules Règles Facebook Facebook https://metacpan.org/module/Apache::Session::Flex https://metacpan.org/module/Apache::Session::Flex You need to give access to status path in the Handler Apache configuration: Il faut autoriser l'accès au chemin du statut dans le configuration Apache de l'agent : remotePortal remotePortal <s0><a1>URL</a1> parameter</s0>: parameter name used to set choice value (default: <c2>lmAuth</c2>) Paramètres d'<s0><a1>URL</a1></s0> : nom du paramètre utilisé pour stocker la valeur du choix (défaut: <c2>lmAuth</c2>) <s0>Key name</s0>: Text displayed on choice tab. <s0>Nom de clef</s0> : Texte à afficher sur l'onglet. <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ <s0>#!/usr/bin/perl</s0> <b1>use Lemonldap::NG::Common::CGI qw(fastcgi);</b1> <s2>use Lemonldap::NG::Portal::SharedConf;</s2> <s3># ...</s3> <b4><s5>LMAUTH:</s5> while ( my $portal = Lemonldap::NG::Portal::SharedConf->new({}) ) </b4>{ ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com ssoRoles: ou=admin,ou=aaa,ou=roles,dc=acme,dc=com ssoRoles: ou=user,ou=bbb,ou=roles,dc=acme,dc=com Be careful with URL parameters Attention aux paramètres des URL 31 31 Linux Tag Linux Tag <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> <s0>if</s0><s1>(</s1><s2>$cgi</s2><s3>-></s3><s4>testUri</s4><s5>(</s5><s6>'http://test3.example.com/'</s6><s7>)</s7> <s8>{</s8> Go to <c0>Portal</c0> » <c1>Settings</c1>: Aller dans <c0>Portal</c0> » <c1>Settings</c1>: <s21>Deny</s21> from <s22>all</s22> <s21>Deny</s21> from <s22>all</s22> Registered users on Google Apps with the same email than those used by <a0>LL::NG</a0> (email will be the NameID exchanged between Google Apps and <a1>LL::NG</a1>) Enregistrer les utilisateurs dans Google Apps avec la même adresse mail que celle utilisée dans <a0>LL::NG</a0> (l'adresse mail sera le NameID échangé entre Google Apps et <a1>LL::NG</a1>) Headers are associations between an header name and a perl expression that returns a string. Les en-têtes sont des associations entre un nom d'en-tête et une expression perl qui retourne une chaîne. As passwords will not be managed by <a0>LL::NG</a0>, you can disable <a1>menu password module</a1>. Comme les mots-de-passe ne sernt pas gérés par <a0>LL::NG</a0>, il est possile de désactiver le <a1>module mots-de-passe du menu</a1>. When portal is installed, a file named portal.wsdl is created. Lorsque le portail est installé, un fichier nommé portal.wsdl est créé. You might want to display different skin depending on the <a0>URL</a0> that was called before being redirected to the portal, or the <a1>IP</a1> address of the user. On peut vouloir utiliser différents thèmes en fonction de l'<a0>URL</a0> demandée avant la redirection au portail ou en fonction de l'adresse <a1>IP</a1> de l'utilisateur. For Active Directory, the default authentication filter is: Pour Active Directory, le filtre d'authentification par défaut est : Zimbra preauthentication <a0>URL</a0> <a0>URL</a0> de pré-authentification Zimbra <a0>LL::NG</a0> can be used to prompt users with a message. <a0>LL::NG</a0> peut être utilisé pour présenter des messages aux utilisateurs. You can show them using <a0>Facebook Graph API explorer</a0> On peut les voir en utilisant l'<a0>explorateur de l'API Graph de Facebook</a0> #google_apps_control_panel #google_apps_control_panel 20 20 ^/minig ^/minig <s7>Options</s7> +ExecCGI <s7>Options</s7> +ExecCGI example.com = EXAMPLE.COM example.com = EXAMPLE.COM <a2>ldapminihowto</a2><br3/> <a2>ldapminihowto</a2><br3/> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s38>'templatelist'</s38> <s39>=></s39> <s40>'default,basic,MyOrgTemplate'</s40><s41>,</s41> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom template parameters <s3>tpl_myparam</s3> <s4>=</s4><s5> world</s5> http://lemonldap.ow2.org/NG/devel-doc/ http://lemonldap.ow2.org/NG/devel-doc/ <s0>accept</s0>: all authenticated users will access surveys <s0>accept</s0> : tous les utilisateurs authentifiés peuvent accéder aux surveillances <a0>The status page</a0> can be read by <a1>MRTG</a1> using the script <s2>lmng-mrtg</s2> that can be found in manager example directory. <a0>La page de statut</a0> peut être lue par <a1>MRTG</a1> en utilisant le script <s2>lmng-mrtg</s2> qui peut être trouvé dans le répertoire "example" du manager. /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars /_detail/documentation/exportedvars.png?id=documentation%3A1.4%3Aexportedvars ../../../media/documentation/configuration-ldap.png ../../../media/documentation/configuration-ldap.png API documentation Documentation de l'interface de programmation (API) Select the key, and export it (button <c0>Download this file</c0>): Selectionner la clef, et l'exporter (bouton <c0>Download this file</c0>): /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki /_detail/applications/mediawiki_logo.png?id=documentation%3A1.4%3Aapplications%3Amediawiki As J2EE servlet container, Tomcat provides standard security feature, like authentication: the application deployed in Tomcat can delegate its authentication to Tomcat. Comme conteneur de servlet J2EE, Tomcat fournit les fonctionnalités de sécurité standards, telles l'authentification : une application déployée dans Tomcat peut déléguer son authentification à Tomcat. The choice will concern three backends: Ce choix concerne 3 backends: ../pages/documentation/1.4/authgoogle.html ../pages/documentation/1.4/authgoogle.html <a0>LL::NG</a0> can act as an <a1>SAML</a1> 2.0 Identity Provider, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en fournisseur d'identité <a1>SAML</a1> 2.0, ce qui permet de fédérer <a2>LL::NG</a2> avec : Example with the portal: Exemple avec le portail : Language Langue https://authssl.example.com https://authssl.example.com Restart Apache to purge it. Redémarrer Apache pour le purger. DEB bundle Paquets DEB <a0>IP</a0> of the user (can be the X Forwarded For <a1>IP</a1> if trusted proxies are configured) <a0>IP</a0> de l'utilisateur (peut être celle de l'en-tête X-Forwarded-For si des proxies agréés ont été configurés) http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication http://www.mediawiki.org/wiki/Extension:Siteminder_Authentication ../../documentation/1.4/authfacebook.html ../../documentation/1.4/authfacebook.html You can add this YUM repository to get recent packages: Ajouter ces dépôts YUM pour obtenir les paquets récents : LemonLDAP::NG Handler Agent LemonLDAP::NG (handler) <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s17>"auto_update_force_group"</s17> <s18>=></s18> <s19>false</s19><s20>,</s20> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <s26>'LDAP#ActiveDirectory'</s26> <s27>=></s27> <s28>{</s28> <a2>translations</a2><br3/> <a2>traductions</a2><br3/> Main differences with mod_proxy: Principales différences avec mod_proxy : authentication_portal_1340022238188.png authentication_portal_1340022238188.png By default, a user can open several <a0>sessions</a0>. Par défaut, un utilisateur peut ouvrir plusieurs <a0>sessions</a0>. $authenticationLevel > 2 $authenticationLevel > 2 documentation:1.4:applications:authbasic documentation:1.4:applications:authbasic Try <a0>http://test1.example.com</a0> or <a1>http://test2.example.com</a1> Essayez <a0>http://test1.example.com</a0> ou <a1>http://test2.example.com</a1> Your database must have a specific table to host sessions. Il faut dédier une table pour héberger les sessions. <s0>Memcached servers</s0>: addresses of Memcached servers, separated with spaces. <s0>Serveurs Memcached</s0> : adresses des serveurs Memcached, separés par des espaces. Handler build the preauth request and redirect user on Zimbra preauth <a0>URL</a0> Le handler construit la requête de pré-authentification et redirige l'utilisateur sur l'<a0>URL</a0> de pré-authentification de Zimbra Here are some examples for main databases servers. Quelques exemples pour les serveurs principaux. You can now the upload the certificate (<c0>cert.pem</c0>) on Google Apps. Télécharger ensuite le certificat (<c0>cert.pem</c0>) dans Google Apps. /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=screenshots By hand in Liferay administration screens À la main dans les écrans d'administration de Liferay http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions <s0><a1>SAML</a1> 2 Service</s0>: <a2>SAML</a2> metadata administration <s0>Service <a1>SAML</a1></s0> : administration des métadonnées <a2>SAML</a2> <a0>CAS</a0>_pgtFile <a0>CAS</a0>_pgtFile Category parameters: Paramètres des catégories : ../../../../media/documentation/googleapps-export-priv-key.png ../../../../media/documentation/googleapps-export-priv-key.png An authorization is defined by: Une autorisation est définie pas : Body for password mail Corps du message de changement de mot-de-passe IssuerDB IssuerDB Modify Manager protection Modifier la protection du manager SVN access Accès au dépôt SVN twitterKey twitterKey So, to keep user password in session, you cannot just export the password variable in session. Donc pour conserver le mot-de-passe utilisateur dans la session, on ne peut seulement exporter la variable mot-de-passe dans la session. <s0>Success mail content</s0> (optional): Content of mail sent when password is changed <s0>Contenu du message</s0> (optionnel) : contenu du courriel envoyé lorsque le mot-de-passe est changé jre > 1.4 jre > 1.4 OBM_UID OBM_UID _password _password menu.png menu.png <s0>Use rule</s0>: a rule to allow user to use this module, set to 1 to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Form replay allows you to open a session on a protected application by replaying the form POST without asking anything to the user. Le rejeu de formulaire permet d'ouvrir une session dans une application protégée par un formulaire POST sans rien demander à l'utilisateur. ../documentation/current/writingrulesand_headers.html ../documentation/current/writingrulesand_headers.html <s0>Server hostname</s0>: this is the hostname or <a1>IP</a1> address of the Radius server <s0>Nom d'hôte du serveur</s0> : le nom d'hôte ou l'adresse <a1>IP</a1> du serveur Radius You can do it either by uploading the file, or get it from SP metadata <a0>URL</a0> (this require a network link between your server and the SP). Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas du SP (à condition d'avoir un lien réseau entre le serveur et le SP): $uid $uid http://www.mediawiki.org http://www.mediawiki.org Configuration database Base de données de la configuration update-alternatives --config editor update-alternatives --config editor ../pages/documentation/1.1/applications/obm.html ../pages/documentation/1.1/applications/obm.html <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. <s0><s1>[</s1>manager<s2>]</s2></s0>   # Manager protection: by default, the manager is protected by a demo account. portal.png portal.png These errors can be catch trough Apache <c0>ErrorDocument</c0> directive, to redirect user on a specific page: Ces erreurs peuvent être interceptées via la directive <c0>ErrorDocument</c0> d'Apache pour rediriger les utilisateurs vers une page spécifique : You can also use a FastCGI server using index.fcgi given in portal examples. On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail. This should be set as Default. Peut être défini par défaut. ../download.html ../download.html If you need to add a template parameter for your customization, then add to <c0>lemonldap-ng.ini</c0>: Pour ajouter un paramètre de modèle, l'ajouter dans <c0>lemonldap-ng.ini</c0>: ../pages/documentation/1.1/portal.html ../pages/documentation/1.1/portal.html http://search.cpan.org/search?query=DBD%3A%3A&mode=module http://search.cpan.org/search?query=DBD%3A%3A&mode=module ../../documentation/presentation.html#login ../../documentation/presentation.html#login ../../documentation/1.4/idpopenid.html#security ../../documentation/1.4/idpopenid.html#security You can then choose any other module for users and password but if you want to totally delegate authentication to BrowserID, choose <a0>None</a0> for users and password. On peut ensuite choisir n'importe quel autre module de gestion des utilisateurs et des mots-de-passe mais pour déléguer totalement l'authentification à BrowserID, choisir <a0>None</a0> pour la gestion des utilisateurs et des mots de passe. ../pages/documentation/1.1/filesessionbackend.html ../pages/documentation/1.1/filesessionbackend.html /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step5.png?id=documentation%3A1.4%3Aresetpassword Access rule: <c0>$groups =~ /\badministrators\b/</c0> Règle d'accès : <c0>$groups =~ /\badministrators\b/</c0> Nick name Nick name Oliver BOIREAU Oliver BOIREAU Multi values separator Séparateur des multiples valeurs authentication_portal_1340022292201.png authentication_portal_1340022292201.png Content Management System Système de gestion de contenu <s0>Optimized</s0> for <a1>session explorer</a1> and <a2>single session</a2> features. <s0>Optimisé</s0> pour l'<a1>explorateur de sessions</a1> et les fonctionnalités de <a2>session unique</a2>. <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> <s38><s39><user</s39> <s40>username</s40>=<s41>"both"</s41> <s42>password</s42>=<s43>"tomcat"</s43> <s44>roles</s44>=<s45>"tomcat,role1"</s45><s46>/></s46></s38> <s47><s48></tomcat-users<s49>></s49></s48></s47> First parameter passed to the custom function is the requested <a0>URL</a0>, that is Le premier paramètre passé à la fonction personnalisée est l'<a0>URL</a0> demandée, c'est à dire Nb users Nb d'utilisateurs Databases (DBI) Bases de données (DBI) Quick start tutorial Tutoriel rapide <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> <s25>"server_ip_address"</s25> <s26>=></s26> <s27>"localhost"</s27><s28>,</s28> mailto:lemonldap-ng-dev@ow2.org mailto:lemonldap-ng-dev@ow2.org An <a0>URL</a0> pattern (or <c1>default</c1> to match other URLs) Une expression sur l'<a0>URL</a0> (ou <c1>default</c1> pour les URLs ne correspondant pas aux règles) In this case you will have two Apache configuration files: Dans ce cas 2 fichiers de configuration Apache doivent être renseignés : logout_sso http://intranet/ logout_sso http://intranet/ documentation:latest:logs documentation:latest:logs ../../documentation/1.4/performances.html#macros_and_groups ../../documentation/1.4/performances.html#macros_and_groups ../pages/documentation/1.4/loginhistory.html ../pages/documentation/1.4/loginhistory.html /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-interoperability.png?id=documentation%3A1.4%3Aauthremote <s0>Mail session key</s0>: session field where to find user mail (by default: mail) <s0>Clef de session mail</s0> : champ de session pour trouver l'adresse mail des utilisateurs (par défaut : mail) FOSDEM FOSDEM } [domain_realm] } [domain_realm] Warning: key is not defined, set it in the manager ! Warning: key is not defined, set it in the manager ! ../../../media/screenshots/1.1/notifications/sample_notification.png ../../../media/screenshots/1.1/notifications/sample_notification.png Give a non ascii data Done une valeur non-ascii Password reset Réinitialisation de mots-de-passe accept accept IssuerDB use Utilisation de IssuerDB <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> <s2>Order</s2> <s3>deny</s3>,<s4>allow</s4> /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm /_detail/applications/obm_logo.png?id=documentation%3A1.4%3Aapplications%3Aobm documentation:1.4:changeconfbackend documentation:1.4:changeconfbackend Install the package <c0>lemonldap-ng-conf</c0> on all server which contains one of those packages. Installer le paquet <c0>lemonldap-ng-conf</c0> sur tous les serveurs qui contiennent un de ces paquets. portalRequireOldPassword portalRequireOldPassword Shared attributes (SREG) Attributs partagés (SREG) <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> <s9>Options</s9> +ExecCGI +<s10>FollowSymLinks</s10> Allow only one <a0>IP</a0> address per user N'autoriser qu'une adresse <a0>IP</a0> par utilisateur ../../documentation/1.4/soapminihowto.html ../../documentation/1.4/soapminihowto.html <a0>SAML</a0> can use different NameID formats. <a0>SAML</a0> peut utiliser plusieurs formats de NameID. documentation:1.4:authslave documentation:1.4:authslave http://github.com/oremj/mediawiki-http-auth/downloads http://github.com/oremj/mediawiki-http-auth/downloads In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose OpenID for authentication and/or users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>OpenID</a2> pour les modules authentification, utilisateurs et/ou mots-de-passe. iso2unicode($name) iso2unicode($name) Default Défaut Restart all your Apache servers Redémarrer tous vos serveurs Apache See <a0>Writing rules and headers</a0> for more. Voir <a0>Écrire les règles et en-têtes</a0> pour plus d'informations. <a0>CAS</a0> force gateway authentication Forcer l'authentification de passerelle <a0>CAS</a0> Deny access to /config/ directory Interdire l'accès au répertoire /config/ c:/my hardisk/tomcat/ c:/my hardisk/tomcat/ ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg-2.5.4c   # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes   Title[^]: Traffic Analysis for   # 128K leased line # ---------------- #Title[leased]: a 128K leased line #PageTop[leased]: <H1>Our 128K link to the outside world</H1> #Target[leased]: 1:public@router.localnet #MaxBytes[leased]: 16000 Target[test.example.com]: `/etc/mrtg/lmng-mrtg 172.16.1.2 https://test.example.com/status OK OK` Options[test.example.com]: nopercent, growright, nobanner, perminute PageTop[test.example.com]: <h1>Requests OK from test.example.com</h1> MaxBytes[test.example.com]: 1000000 YLegend[test.example.com]: hits/minute ShortLegend[test.example.com]: &nbsp; hits/mn LegendO[test.example.com]: Hits: LegendI[test.example.com]: Hits: Legend2[test.example.com]: Hits per minute Legend4[test.example.com]: Hits max per minute Title[test.example.com]: Hits per minute WithPeak[test.example.com]: wmy <s0>How do users authenticate?</s0>: by login <s0>How do users authenticate?</s0>: by login documentation:googleapps-manager-application.png documentation:googleapps-manager-application.png <s0>configuration</s0>: where configuration is stored <s0>configuration</s0> : où la configuration est stockée <s0><a1>Notifications</a1></s0>: prompt users with a message if found in the notification database <s0><a1>Notifications</a1></s0> : interrompt les utilisateurs avec un message s'il est trouvé dans la base de données des notifications <s0>Cookie name</s0>: name of the cookie, can be changed to avoid conflicts with other LemonLDAP::NG installations <s0>Nom de cookie</s0> : nom du cookie, peut être changé pour éviter les conflits avec d'autres installations LemonLDAP::NG <a0>LL::NG</a0> can use a lot of databases as authentication, users and password backend: <a0>LL::NG</a0> peut utiliser de nombreuses bases de données comme backend d'authentification, d'utilisateurs et de mots de passe : <s0>Check <a1>XSS</a1> Attacks</s0>: Set to 'Off' to disable <a2>XSS</a2> checks. <s0>Contrôler les attaques <a1>XSS</a1></s0> : mettre à 'désactivé' pour désactiver la détection des attaques <a2>XSS</a2>. <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> <a41><s42>print</s42></a41> <s43>STDERR</s43> <s44>"SOAP Error: "</s44> <s45>.</s45> <s46>$r</s46><s47>-></s47><s48>fault</s48><s49>-></s49><s50>{</s50>faultstring<s51>}</s51><s52>;</s52> <s53>}</s53> <s54>else</s54> <s55>{</s55> https://upgrade.yubico.com/getapikey/ https://upgrade.yubico.com/getapikey/ <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> <s157>"userobm_ext_id"</s157> <s158>=></s158> <s159>"HTTP_OBM_SERIALNUMBER"</s159><s160>,</s160> applications:googleapps_logo.png applications:googleapps_logo.png The portal is the visible part of LemonLDAP::NG, all user interactions are displayed on it. Le portail est la partie visible de LemonLDAP::NG, toutes les interactions utilisateurs y sont affichées. language language ../media/screenshots/1.1/mailreset/mailreset_step5.png ../media/screenshots/1.1/mailreset/mailreset_step5.png Metadata Métadata Disable all signature flags in <c0>Options</c0> » <c1>Signature</c1>, except <c2>Sign <a3>SSO</a3> message</c2> which should be to <c4>On</c4> Désactiver toutes les cases dans <c0>Options</c0> » <c1>Signature</c1>, excepté <c2>Signer les messages <a3>SSO</a3></c2> qui doit être activée /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_1.png?id=documentation%3A1.4%3Aapplications%3Aliferay Code snippet Exemple de code MediWiki local configuration Configuration locale MediaWiki documentation:latest:portalcustom documentation:latest:portalcustom Order your rules Ordonner les règles <s88>//"userobm_photo_id" => ,</s88> <s88>//"userobm_photo_id" => ,</s88> Local groups Groupes locaux ../pages/documentation/1.1/activedirectoryminihowto.html ../pages/documentation/1.1/activedirectoryminihowto.html This concerns all parameters for the Organization metadata section: Ceci concerne tous les paramètres de la section "organization" des métadatas : <s0>Reset value</s0>: value to set in reset attribute to activate password reset (default: TRUE). <s0>Valeur de reset</s0> : valeur à mettre dans l'attribut reset pour activer la réinitialisation du mot-de-passe (défaut : TRUE). Check if <a0>URL</a0> asked is valid Vérifie que l'<a0>URL</a0> demandée est validée <s0>DNSDOMAIN</s0>: Main <a1>DNS</a1> domain (default: example.com) <s0>DNSDOMAIN</s0> : domaine <a1>DNS</a1> proncipal (défaut : example.com) ../../documentation/1.4/authchoice.html ../../documentation/1.4/authchoice.html <s146>//"userobm_nomade_local_copy" => ,</s146> <s146>//"userobm_nomade_local_copy" => ,</s146> Available bindings are: Les déclarations disponibles sont : You can for example set up a fail-over cluster with <a0>Heartbeat</a0> and <a1>HAproxy</a1>, like this: Par exemple on peut créer un cluster avec <a0>Heartbeat</a0> et <a1>HAproxy</a1> : <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> <s56>my</s56> <s57>$res</s57> <s58>=</s58> <s59>$r</s59><s60>-></s60><s61>result</s61><s62>(</s62><s63>)</s63><s64>;</s64> ../../documentation/1.4/installrpm.html ../../documentation/1.4/installrpm.html → Check grantSessionRule parameter. → Vérifier le paramètre grantSessionRule. <a0>LL::NG</a0> uses <a1>Apache SSL module</a1>, like any other <a2>Apache authentication module</a2>, with extra features: <a0>LL::NG</a0> utilise le <a1>module SSL d'Apache</a1>, comme n'importe quel <a2>module d'authentification d'Apache</a2> avec quelques fonctionnalités supplémentaires : http://www.switch.ch/aai/support/tools/wayf.html http://www.switch.ch/aai/support/tools/wayf.html GLib GLib <s153>//"userobm_samba_home" => ,</s153> <s153>//"userobm_samba_home" => ,</s153> documentation:manager-formreplay-newurl.png documentation:manager-formreplay-newurl.png Trusted domains Domaines agréés ../media/icons/flags/ua.png ../media/icons/flags/ua.png If OpenID is used as users database, attributes will be requested to the server with SREG extention. Si OpenID est utilisé comme base d'utilisateurs, les attributs sont demandés en utilisant l'extension SREG d'OpenID. http://phpldapadmin.sourceforge.net http://phpldapadmin.sourceforge.net Import or generate security keys Importer ou generer les clefs de securité You need to register a new application on Twitter to get <a0>API</a0> key and <a1>API</a1> secret. Vous devez enregistrer votre nouvelle application dans Twitter pour obtenir la clef de l'<a0>API</a0> et son secret<a1></a1>. Parameters for <a0>DBI</a0> backend are the same as <a1>DBI configuration backend</a1>. Les paramètres pour le backend <a0>DBI</a0> sont les mêmes que ceux du <a1>backend de configuration DBI</a1>. syslog syslog → The host is not known by LemonLDAP::NG. → L'hôte n'est pas connu de LemonLDAP::NG. <s0>IDP resolution cookie name</s0>: by default, it's the <a1>LL::NG</a1> cookie name suffixed by <c2>idp</c2>, for example: <c3>lemonldapidp</c3>. <s0>Nom du cookie de résolution de l'IDP</s0>: par défaut, c'est le nom du cookie <a1>LL::NG</a1> auquel est adjoint <c2>idp</c2>, par exemple: <c3>lemonldapidp</c3>. Backends Backends /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra /_detail/applications/zimbra_logo.png?id=documentation%3A1.4%3Aapplications%3Azimbra RBAC model Modèle RBAC screenshots:1.1:mailreset:mailreset_step2.png screenshots:1.1:mailreset:mailreset_step2.png <s0>default_access</s0> (optional): what result to return if <s1>logon_hours</s1> is empty <s0>default_access</s0> (optionnel) : resultat à retourner si <s1>logon_hours</s1> est vide By default, configuration is stored in <a0>files</a0>, so access trough network is not possible. Par défaut, la configuration est stockée dans des <a0>fichiers</a0>, donc l'accès par le réseau n'est en général pas possible. <s0>Port</s0>: port of the application (by default, 80 for http, 443 for https) <s0>Port</s0> : port de l'application (par défaut, 80 pour http, 443 pour https) <a0>LL::NG</a0> can use SAML2 to get user identity and grab some attributes defined in user profile on its Identity Provider (IDP). <a0>LL::NG</a0> peut utiliser SAML2 pour obtenir l'identité et d'autres attributs definis dans le profil utilisateur défini chez son fournisseur d'identité (IDP). default_realm = EXAMPLE.COM [realms] default_realm = EXAMPLE.COM [realms] With this organization, you can set roles to user within specific application. Avec cette organisation, on peut définir les rôles de l'utilisateur au sein de chaque application. documentation:liferay_1.png documentation:liferay_1.png <a0>LL::NG</a0> use cron jobs to: <a0>LL::NG</a0> utilise des tâches planifiées pour : documentation:1.4:sessions documentation:1.4:sessions decreased (-1) if the portal autocompletion is allowed (see <a0>portal customization</a0>) diminué (-1) si l'autocompletion est autorisée sur le portail (voir <a0>Personnalisation du portail</a0>) <a0>DBI</a0> user Utilisateur <a0>DBI</a0> ../../../../css/all.css ../../../../css/all.css ../pages/documentation/1.1/authldap.html ../pages/documentation/1.1/authldap.html This means that if several Handlers are deployed, each will manage its own statistics. Donc si plusieurs agents sont déployés, chacun gère ses propres statistiques. Sessions are deleted by a scheduled task. Les sessions sont effacées par des tâches planifiées. <a0>LL::NG</a0> can also act as <a1>OpenID server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur OpenID</a1>, ce qui permet également d'interconnecter deux systèmes <a2>LL::NG</a2>. ../../../../media/documentation/googleapps-ssoconfig.png ../../../../media/documentation/googleapps-ssoconfig.png <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> <s42>'create_survey'</s42> <s43>=></s43> <s44>$_SERVER</s44><s45>[</s45><s46>'HTTP_AUTH_ADMIN'</s46><s47>]</s47> <s48>||</s48> <s49>$_SERVER</s49><s50>[</s50><s51>'HTTP_AUTH_SUPERADMIN'</s51><s52>]</s52><s53>,</s53> A request to the main session database is done (trough <a1>SOAP session backend</a1>) to be sure that the session exists. Une requête à la base de données des sessions principale est effectuée (via le <a1>backend de session SOAP</a1>) pour être sûr que la session existe. KrbMethodNegotiate <s12>On</s12> KrbMethodNegotiate <s12>On</s12> ../pages/documentation/1.1/applications/liferay.html ../pages/documentation/1.1/applications/liferay.html Jean-Thomas CHECCO Jean-Thomas CHECCO cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /usr/local/lemonldap-ng/etc/lemonldap-ng/for_etc_hosts >> /etc/hosts A login is considered as successful if user get authenticated and is granted a session; as failed, if he fails to authenticate or if he is not allowed to open a session. Une connexion est considérée comme réussie si l'utilisateur est authentifié et autorisé à ouvrir une session ; comme échouée, sinon. Authentication process main steps are: Les étapes du processus d'authentication sont : portal portail Portal creates a session to store user data Le portail crée une session et y stocke les données ../pages/documentation/1.1/idpopenid.html ../pages/documentation/1.1/idpopenid.html If you choose to use MySQL, read <a0>how to increase MySQL performances</a0>. Si MySQL est choisi, lire <a0>comment augmenter les performances de MySQL</a0>. _openid_<e0>id</e0> _openid_<e0>id</e0> icons:jabber_protocol.png icons:jabber_protocol.png The main portal is configured to use <a0>CDA</a0>. Le portail principal est configuré pour utiliser le <a0>CDA</a0>. GRR GRR Translators that want to help us are welcome ! Les traducteurs qui veulent nous aider sont les bienvenus ! Display other sessions Affiche les autres sessions lemonldap-ng-portal-password.png <lemonldap-ng-portal-password.png Remote cookie name Nom du cookie distant <a4>memcachedsessionbackend</a4><br5/> <a4>memcachedsessionbackend</a4><br5/> We will explain how to use the latest: <a0>HTTP Auth</a0>. Nous expliquons ici comment utiliser le dernier : <a0>HTTP Auth</a0>. documentation:1.4:authremote documentation:1.4:authremote By default, Apache configuration files will be installed in <c0>/usr/local/lemonldap-ng/etc/</c0>. Par défaut les fichiers de configuration d'Apache seront installés dans <c0>/usr/local/lemonldap-ng/etc/</c0>. LDAP server Serveur LDAP applications:spring_logo.png applications:spring_logo.png </<s10>Directory</s10>>   </<s10>Directory</s10>>   Advanced configuration Configuration avancée LemonLDAP::NG is a modular WebSSO (Single Sign On) based on Apache::Session modules. LemonLDAP::NG est en WebSSO (Single Sign On) modulaire basé sur les modules Apache::Session. Portal gets the session key Le portail récupère la clef de session SOAP configuration backend proxy le proxy de backend de configuration SOAP SOAP configuration backend Backend de configuration SOAP Get the tarball Récupérer l'archive Code to replace: Code à remplacer : <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> <s15>'key'</s15> <s16>=></s16> <s17>'q`e)kJE%<&wm>uaA'</s17><s18>,</s18> checkDate($ssoStartDate, $ssoEndDate) checkDate($ssoStartDate, $ssoEndDate) <s0>François-Xavier DELTOMBE</s0>: developer, tester <s0>François-Xavier DELTOMBE</s0> : developeur, testeur <a0>Configure the Apache server</a0> that host the portal to use the Apache Kerberos authentication module <a0>Configurer le serveur Apache</a0> qui héberge le portail utilisant le module d'authentification Kerberos d'Apache /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-authn-contexts.png?id=documentation%3A1.4%3Asamlservice internal_email_by_netid 1 internal_email_by_netid 1 <s0>OpenID login</s0>: the session key used to match OpenID login. <s0>Identificant OpenID</s0> : la clef de session utilisée pour correspondre au login OpenID. Convert HTTP header into environment variable Convertir les en-têtes HTTP en variables d'environnement logos:logo_abuledu.png logos:logo_abuledu.png Thomas CHEMINEAU Thomas CHEMINEAU <<s9>Location</s9> /index.pl/sessions> <<s9>Location</s9> /index.pl/sessions> lemonldap-ng-handler: contains Apache Handler implementation (agent) lemonldap-ng-handler : contient l'implémentation de l'agent pour Apache (handler) notification notification <s0>SLO binding</s0>: force binding to use for SLO (http-redirect, http-post, etc.) <s0>Méthode SLO</s0> : force la méthode à utiliser pour le SLO (http-redirect, http-post, etc.) ou=sessions,dc=example,dc=com ou=sessions,dc=example,dc=com <s0>Authorized domains</s0>: white list or black list of OpenID client domains (<s1><a2>see below</a2></s1>). <s0>Domaines autorisés</s0> : liste blanche ou noire des domaines clients OpenID (<s1><a2>voir ci-dessous</a2></s1>). applications:zimbra_logo.png applications:zimbra_logo.png To manage the other way (<a0>LL::NG</a0> → Google Apps), you can add a dedicated <a1>logout forward rule</a1>: Pour gérer l'autre voie (<a0>LL::NG</a0> → Google Apps), ajouter une <a1>règle de redirection après déconnexion</a1>: <s0>deleteSession</s0>: delete a session <s0>deleteSession</s0> : efface une session <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s75>'configurator'</s75> <s76>=></s76> <s77>$_SERVER</s77><s78>[</s78><s79>'HTTP_AUTH_SUPERADMIN'</s79><s80>]</s80><s81>,</s81> <s0>roleSeparator</s0> (optional): role values separator. <s0>roleSeparator</s0> (optionnel) : séparateur des valeurs de rôle. ../media/logos/logo_bpi.png ../media/logos/logo_bpi.png ../../documentation/1.4/authapache.html ../../documentation/1.4/authapache.html Contact Contact install_handler_libs install_handler_libs SVN nightly builds Extraction nocturne du dépôt SVN ../../../media/icons/personal.png ../../../media/icons/personal.png Datas around the authentication process. Données concernant le processus d'authentification. Options: redirection port and protocol Des options : port de redirection et protocole <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ <s0>Alias</s0> /doc/ /usr/local/lemonldap-ng/htdocs/doc/ baseurl=http://lemonldap-ng.org/rpm6/ baseurl=http://lemonldap-ng.org/rpm6/ Manager virtual host is used to serve configuration interface and local documentation. L'hôte virtuel du manager est utilisé pour servir l'interface de configuration et la documentation locale. <s0>Exceptions</s0>: allow anonymous access for specific URLs (connectors, etc.) <s0>Exceptions</s0> : autoriser l'accès anonyme pour les URLs spécifiques (connecteurs, etc.) /_detail/icons/terminal.png?id=documentation /_detail/icons/terminal.png?id=documentation <s0>Verification <a1>URL</a1></s0>: <a2>URL</a2> used to verifiy the BrowserID assertion. <s0><a1>URL</a1> de vérification</s0> : <a2>URL</a2> utilisée pour vérifier l'assertion BrowserID. /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring /_detail/applications/spring_logo.png?id=documentation%3A1.4%3Aapplications%3Aspring To do this in Manager, go in General Parameters > Advanced Parameters > Notifications. pour ce faire dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications. <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI <s0>$_auth</s0> <s1>eq</s1> LDAP <s2>or</s2> <s3>$_auth</s3> <s4>eq</s4> DBI The conditions are checked in alphabetical order of comments. Les conditions sont examinées dans l'ordre alphabétique des commentaires. For CentOS/RHEL: Pour CentOS/RHEL : RDBI RDBI Standard virtual host directives, to serve portal pages: Directives standard d'hôte virtuel pour servir les pages du portail : <s4>Allow</s4> from <s5>all</s5> <s4>Allow</s4> from <s5>all</s5> <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> <s4>RewriteRule</s4> ^/saml/.* /index.pl </<s5>IfModule</s5>> Password -> ... Password -> ... documentation:1.4:rbac documentation:1.4:rbac rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Manager.html The chosen logo file must be in portal applications logos directory (<c0>portal/skins/common/apps/</c0>). Le logo choisi doit se trouver dans le répertoire des logos des applications (<c0>portal/skins/common/apps/</c0>). documentation:1.4:managerprotection documentation:1.4:managerprotection You need <a0>Web::ID</a0> package. Le paquet <a0>Web::ID</a0> est nécessaire. yum install lemonldap-ng yum install lemonldap-ng http://www.youtube.com/watch?v=OJGB6jdN34Q http://www.youtube.com/watch?v=OJGB6jdN34Q Apache is not configured to authenticate users ! Apache is not configured to authenticate users ! Order of categories in the menu Ordre des catégories dans le menu You can allow these users instead of reject them: On peut autoriser ces utilisateurs au lieu de les rejeter : http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ http://search.cpan.org/~massyn/Auth-Yubikey_WebClient/ <a10>formreplay</a10><br11/> <a10>formreplay</a10><br11/> clean Handler cache nettoyer le cache des agents <s1>ServerName</s1> zimbra.example.com   <s1>ServerName</s1> zimbra.example.com   user login nom de connexion <s0>notice</s0> for good authentications or external exchange (<a1>SAML</a1>, OpenID,…) <s0>notice</s0> pour les authentifications réussies et les échanges externes (<a1>SAML</a1>, OpenID,…) <s0>Mail headers</s0>: <s0>En-têtes de courriel</s0> : Install it to trust packages: L'installer pour certifier les paquets : <s0>Application list</s0>: display categories and applications allowed for the user <s0>Liste des applications</s0> : affiche les catégories et applications autorisée pour l'utilisateur portalSkin portalSkin ldapPpolicyControl ldapPpolicyControl <a0>LL::NG</a0> can delegate authentication to Apache, so it is possible to use any <a1>Apache authentication module</a1>, for example: <a0>LL::NG</a0> peut déléguer l'authentification à Apache, ainsi il est possible d'utiliser tous les <a1>modules d'authentification Apache</a1>, par exemple: <s0>Confirmation mail subject</s0>: Subject of mail sent when password change is asked (default: [LemonLDAP::NG] Password reset confirmation) <s0>Sujet du message de confirmation</s0> : sujet du courriel envoyé lorsque le changement de mot-de-passe est demandé (défaut: [LemonLDAP::NG] Password reset confirmation) Build your packages Construire les paquets <a0>SOAP based</a0> for client-server software, specific development, … <a0>Basé sur SOAP</a0> pour les logiciels client-serveur, les développements spécifiques, … Advanced features Fonctionnalités avancées <s0>Application name</s0> (optional): Application name (visible in Twitter) <s0>Nom d'application</s0> (optionel) : nom de l'application (visible dans Twitter) Main internal databases are: Les principales bases de données internes sont : nickname nickname Performances Performances <a0>LL::NG</a0> can use a white list or a black list to filter allowed OpenID domains. <a0>LL::NG</a0> peut utiliser une liste blanche ou noire pour filtrer les domaines OpenID autorisés. /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart /_detail/icons/kmultiple.png?id=documentation%3A1.4%3Astart Reload virtual host Recharger l'hôte virtuel <s0><a1>URL</a1></s0>: <a2>URL</a2> of your society <s0><a1>URL</a1></s0>: <a2>URL</a2> de votre organisation Informix Informix _whatToTrace ipAddr _whatToTrace ipAddr <s0>Allow login from IDP</s0>: allow a user to connect directly from an IDP link. <s0>Authentification depuis le fournisseur autorisée</s0> : autorise l'utilisateur à se connecter directement depuis un lien de l'IDP. PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> PerlResponseHandler ModPerl::Registry </<s3>Files</s3>> <s0>Path</s0>: keep <c1>^/cas/</c1> unless you have change <a2>Apache portal configuration</a2> file. <s0>Chemin</s0> : laisser <c1>^/cas/</c1> sauf si le fichier de <a2>configuration Apache du portail</a2> a été modifiée. <s9>Options</s9> +ExecCGI   <s9>Options</s9> +ExecCGI   Then, go in <c0>WebID parameters</c0>: Ensuite, aller dans les <c0>paramètres WebID</c0>: authChoiceModules authChoiceModules /_detail/icons/wizard.png?id=documentation /_detail/icons/wizard.png?id=documentation translation memory directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ Répertoire des mémoires de traduction = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/tm/ Zimbra preauth key Clef de pré-authentification Zimbra applications:bugzilla_logo.png applications:bugzilla_logo.png <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> <a0><s1>package</s1></a0> SSOExtensions<s2>;</s2>   <s3>sub</s3> function1 <s4>{</s4> LemonLDAP::NG allows to store user logins and login attempts in their persistent session. LemonLDAP::NG permet de stocker les connexions et tentatives dans les sessions persistantes. All lemonldap-ng tools are in /usr/share/lemonldap-ng/bin/ Tous les outils lemonldap-ng se trouvent dans /usr/share/lemonldap-ng/bin/ ../../../../media/documentation/liferay_6.png ../../../../media/documentation/liferay_6.png <s0>Store user password in session data</s0>: see <a1>password store documentation</a1>. <s0>Stocker le mot-de-passe de l'utilisateur dans les données de session</s0> : voir la <a1>documentation sur le stockage du mot-de-passe</a1>. If the rule evaluation is true, the corresponding skin is applied. Si la règle correspond, le thème correspondant est appliqué. <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ <s0>DocumentRoot</s0> /usr/local/lemonldap-ng/htdocs/manager/ The configuration is done in Apache, in a virtual host. La configuration est effectuée dans Apache, dans les hôtes virtuels. documentation:1.4:authapache documentation:1.4:authapache ../pages/documentation/1.1/managerprotection.html ../pages/documentation/1.1/managerprotection.html This module is also available on <a0>GitHub</a0>. Ce module est également disponible sur <a0>GitHub</a0>. ../pages/documentation/1.1/fileconfbackend.html ../pages/documentation/1.1/fileconfbackend.html <s0><a1>HTML</a1> templates</s0>: in <lang> tags, add your translation, they will be automaticaly used Les <s0>modèles <a1>HTML</a1></s0>: dans les balises <lang>, ajoutez vos traductions, elles seront automatiquement utilisées <a0>DBI</a0> Pivot from user table Pivot <a0>DBI</a0> pour la table utilisateur Authorization Autorisations This scheme expect a parameter, which is the authentication chain. Ce dispositif nécessite un paramètre : la chaîne d'authentification. <a0>Identity provider</a0>: how forward user identity <a0>Fournisseur d'identité</a0> : comment transférer l'identité Timestamp of session creation Date et heure (timestamp) de la création de la session <s0>Mandatory</s0>: if set to On, then session will not open if this attribute is not given by IDP. <s0>Obligatoire</s0> : si activé, les sessions ne seront ouvertes que si l'attribut est fourni par l'IDP. <s0>Key</s0>: application name <s0>Key</s0> : nom d'application http://static.springsource.org/spring-security/site/ http://static.springsource.org/spring-security/site/ <s0>headers_map</s0>: map OBM internal field to <a1>LL::NG</a1> header <s0>headers_map</s0>: établit la correspondance entre les champs internes d'OBM et les en-têtes <a1>LL::NG</a1> MySQL MySQL 'directory_umask' => '007',? 'directory_umask' => '007',? Notification send function (index.pl/notification): Fonction d'envoi de notifications (index.pl/notification): A computer with a GNU/Linux or recent UNIX system Un serveur équipé d'un GNU/Linux ou d'un système UNIX récent <a0>LL::NG</a0> is designed using <a1>Model–View–Controller software architecture</a1>, so you just have to <a2>change HTML/CSS files</a2> to custom portal. <a0>LL::NG</a0> a été conçu en utilisant <a1>l'architecture logicielle Modèle–Vue–Controlleur</a1>, ainsi vous avez juste à <a2>modifier les fichiers HTML/CSS</a2> pour personnaliser son portail. To learn more about using Apache as reverse-proxy, see <a2>Apache documentation</a2>. Pour en savoir plus sur l'utilisation d' Apache en reverse-proxy, consultez la <a2>documentation d'Apache</a2>. This needs some hacking because the Apache Kerberos authentication module do not work if <c0>require valid-user</c0> is not set. Ceci requiert quelques astuces car le module d'authentification Kerberos d'Apache ne fonctionne pas si <c0>require valid-user</c0> n'est pas indiqué. See the README to know how install and configure it. Voir le README pour l'installer et le configurer. firstname firstname Bibliothèque Publique d'Information Bibliothèque Publique d'Information Known problems Problèmes connus secureTokenExpiration secureTokenExpiration The configuration is the same as the <a0>LDAP module</a0>. La configuration est la même que mour le <a0>module LDAP</a0>. documentation:1.4:fastcgi documentation:1.4:fastcgi ../pages/playground/playground.html ../pages/playground/playground.html <a0>DBI</a0> Password column Colonne du mot-de-passe <a0>DBI</a0> }?); }?); You have to change it to match your admin user (or use other conditions like group membership, or any other rule based on a session variable). Il faut la changer pour correspondre au nouvel administrateur (ou utiliser une autre conditions telle l'appartenance aux groupes ou tout autre règle basée sur des variables de session). This protocol does not define any attributes exchange mechanism, so only authentication is managed. Ce protocole ne définit aucun mécanisme d'échange d'attribut, donc seule l'authentification est gérée. LemonLDAP::NG is also able to <a0>catch logout request</a0> on protected applications, with different behavior: LemonLDAP::NG peut également <a0>intercepter les requêtes de déconnexion</a0> des applications protégées, avec différent comportements : dbiAuthChain dbiAuthChain The menu is displayed if authentication is successful. Le menu est affiché si l'authentification est réussie. Certificate authorities file Fichiers des autorités de certification Handler status page Page de statut de l'agent <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> <s3>AuthName</s3> <s4>"LL::NG Manager"</s4> dwho dwho ../../../../media/documentation/googleapps-menu.png ../../../../media/documentation/googleapps-menu.png Local cache Cache local vi LocalSettings.php vi LocalSettings.php You can add this repository to have recent packages: Ajouter ce dépôt pour avoir les paquets les plus récents : Each module can be activated trough a rule, using user session information. Chaque module peut être activé via une règle en utilisant les informations de session de l'utilisateur. You have to create the branch by yourself Il faut toutefois créer manuellement la branche documentation:1.4:logoutforward documentation:1.4:logoutforward <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> <s0>print</s0> <s1>"Connected user: "</s1><s2>.</s2><s3>$_SERVER</s3><s4>{</s4>HTTP_AUTH_USER<s5>}</s5><s6>;</s6> Configure MediaWiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Mediawiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. ../pages/contact.html ../pages/contact.html Use <a0>our own YUM repository</a0>. Utiliser <a0>votre propre dépôt YUM</a0>. ../../../css/print.css ../../../css/print.css managerTreeAutoClose managerTreeAutoClose appsListOrder appsListOrder Secondary LL::NG structure Systèe LL::NG secondaire Configuration text editor Éditeur de configuration en mode text Stack multiple backends (AuthMulti) Empiler de multiples backends (AuthMulti) <a0>Django</a0> is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. <a0>Django</a0> est un framework web de haut niveau écrit en Python qui favorise le développement rapide et propre et un design pragmatique. Home Accueil When you use the multiple sessions restriction parameters, sessions are parsed for each authentication unless you use an <a0>Apache::Session::Browseable</a0> module. Lorsque sont activées les paramètres de restriction d'ouverture de session, celles-ci sont toutes examinées à chaque nouvelle authentification sauf lorsqu'un module de la famille <a0>Apache::Session::Browseable</a0> est utilisé. Then the second rule will be applied first, so every authenticated user will access to <c0>/pub/admin</c0> directory. Alors la seconde règle est appliquée en premier, donc tous les utilisateurs authentifiés pourront accéder au répertoire <c0>/pub/admin</c0>. "\@example.com" "\@example.com" protect the manager by Apache configuration protéger le manager par configuration d'Apache documentation:1.0:applications documentation:1.0:applications A day has 24 hours, and a week 7 days, so the value contains 168 bits, converted into 42 hexadecimal characters. Un jour a 24 heures et une semaine 7 jours, donc la valeur contient 168 bits, convertie en 42 caractères hexadécimaux. ../documentation/current/installrpm.html ../documentation/current/installrpm.html Such configuration can have some security problems: Une telle configuration peut engendrer des problèmes de sécurité : ../../documentation/1.4/portalcustom.html ../../documentation/1.4/portalcustom.html It is recommended to use optional_no_ca since WebID doesn't use certificate authorities : Il est recommandé d'utiliser « optional_no_ca » car WebID n'utilise pas d'autorité de certification : <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Example<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> <s11><s12><OrganizationDisplayName</s12> <s13>xml:lang</s13>=<s14>"en"</s14><s15>></s15></s11>Exemple<s16><s17></OrganizationDisplayName<s18>></s18></s17></s16> documentation:remote-principle.png documentation:remote-principle.png The configuration name is the same that files, so lmConf-1, lmConf-2, etc. Le nom de la configuration est le même que pour File : lmConf-1, lmConf-2, etc... Install the module: Installer le module : An <a0>OpenID server</a0> with <a1>CAS authentication</a1> Un <a0>serveur OpenID</a0> avec une <a1>authentification CAS</a1> pages/contact.html pages/contact.html <s0>Want Assertions Signed</s0>: set to On to require that received assertions are signed. <s0>Exiger des assertions signées</s0> : mettre à « activé » pour exiger de recevoir des assertions signées. ../pages/documentation/1.1/safejail.html ../pages/documentation/1.1/safejail.html /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application-logo.png?id=documentation%3A1.4%3Aportalmenu /_detail/icons/access.png?id=documentation%3A1.4%3Astart /_detail/icons/access.png?id=documentation%3A1.4%3Astart You can add, delete or modify a virtual host here. Il est possible d'ajouter, effacer ou modifier un hôte virtuel ici. <a0>Google Apps</a0> can use <a1>SAML</a1> to authenticate users, behaving as an <a2>SAML</a2> service provider, as explained <a3>here</a3>. <a0>Les applications Google</a0> peuvent utiliser <a1>SAML</a1> pour authentifier les utilisateurs, en se comportant comme des fournisseurs de service <a2>SAML</a2>, tel qu'expliqué <a3>ici</a3>. Yubikey secret key Clef secrète Yubikey Configure LemonLDAP::NG to use MySQL as main database Configurer LemonLDAP::NG pour utiliser MySQL comme base de données principale name nom They will be tested in the specified order. Ils seront testés dans l'ordre indiqué. HTTPS HTTPS documentation:1.4:applications:googleapps ↵ documentation:1.4:applications:googleapps ↵ /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-private-key.png?id=documentation%3A1.4%3Asamlservice Gendarmerie Nationale Gendarmerie Nationale <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s82>'manage_template'</s82> <s83>=></s83> <s84>$_SERVER</s84><s85>[</s85><s86>'HTTP_AUTH_SUPERADMIN'</s86><s87>]</s87><s88>,</s88> <s0>Use Safe jail</s0>: set to 'Off' to disable Safe jail. <s0>Utiliser la cage sécurisée</s0> : mettre à 'Désctivé' pour désactiver la cage sécurisée (Safe). ../../documentation/quickstart.html#apache ../../documentation/quickstart.html#apache <a0>Facebook</a0> is a famous social network service. <a0>Facebook</a0> est un célèbre réseau social. ref: a reference that can be used later to know what has been notified and when ref : une référence qui peut être utilisée plus tard pour connaître ce qui a été notifié et quand Template parameters are defined in source code. Des paramètres modèles sont définis dans le code source. <s0>Current</s0>: to extract all configuration history <s0>Current</s0> : pour extraire tout l'historique de la configuration A name Un nom managerCss managerCss <a2>Lanyrd</a2> <br3/> <a2>Lanyrd</a2> <br3/> Apache authentication module will set the <c0>REMOTE_USER</c0> environment variable, which will be used by <a1>LL::NG</a1> to get authenticated user. Les modules d'authentification Apache renseignent la variable d'environnement <c0>REMOTE_USER</c0>, qui sera utilisée par <a1>LL::NG</a1> pour obtenir le nom d'utilisateur authentifié. domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> domain <s4>=></s4> <s5>'acme.com'</s5><s6>,</s6> Users Utilisateurs <s156>// ---- Unused values ? <s156>// ---- Unused values ? ../media/icons/xfmail.png ../media/icons/xfmail.png screenshots:1.1:mailreset:mailreset_step3.png screenshots:1.1:mailreset:mailreset_step3.png https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F https://developer.mozilla.org/en-US/docs/Mozilla/Persona/FAQ?redirectlocale=en-US&redirectslug=Persona%2FFAQ#How_does_Persona_compare_to_OpenID.3F <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s68>'superadmin'</s68> <s69>=></s69> <s70>$_SERVER</s70><s71>[</s71><s72>'HTTP_AUTH_SUPERADMIN'</s72><s73>]</s73><s74>,</s74> <s13>Deny</s13> from <s14>all</s14> <s13>Deny</s13> from <s14>all</s14> <a16>prereq</a16><br17/> <a16>prereq</a16><br17/> Configure local cache first. Configurer d'abord le cache local. <a2>Dailymotion</a2> <a2>Dailymotion</a2> lemonldap-ng-users@ow2.org lemonldap-ng-users@ow2.org You need to use Apache 2 with mod_perl 2, even if some simple configuration can run under Apache 1.3 Il est nécessaire d'utiliser Apache 2 avec mod_perl 2, même si une configuration simple peut fonctionner avec Apache 1.3 documentation:1.4:sqlconfbackend documentation:1.4:sqlconfbackend It can be used just to share authentication or to share user's attributes following the <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3> specification. Ce peut être utilisé pour partager l'authentification et pour partager les attributs utilisateurs en suivant les spécifications <a3>OpenID Simple Registration Extension 1.0 (SREG)</a3>. Security recommendation Recommendation de sécurité Writing rules and headers Écrire les règles et en-têtes To allow the Login History tab in Menu, configure it in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules</c3> (see <a4>portal menu configuration</a4>). Pour activer l'onglet de l'historique de connexion dans le menu, le configurer dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Modules</c3> (voir la <a4>configuration du menu du portail</a4>). /_detail/icons/bug.png?id=contact /_detail/icons/bug.png?id=contact ../pages/documentation/1.4/jsonfileconfbackend.html ../pages/documentation/1.4/jsonfileconfbackend.html Liferay virtual host in Apache Hôte virtuel Liferay dans le manager Configuration and sessions in MySQL Configuration et sessions dans MySQL BrowserID (Mozilla Persona) BrowserID (Mozilla Persona) http://search.cpan.org/perldoc?Apache::Session::MySQL http://search.cpan.org/perldoc?Apache::Session::MySQL ../../documentation/1.4/prereq.html ../../documentation/1.4/prereq.html Note that variables designed by $xx correspond to the name of the <a0>exported variables</a0> or <a1>macro names</a1>. Noter que les variables designées par $xx correspondent au nom de <a0>variables exportées</a0> ou de <a1>noms de macro</a1>. exportedHeaders exportedHeaders documentation:1.4:browseablesessionbackend documentation:1.4:browseablesessionbackend Please see the next chapter to learn how build an official tarball from SVN files. Voir le chapître suivant pour savoir comment construire une archive officielle depuis les fichiers SVN. make dist make dist my-profile.eu my-profile.eu Deletion example in Perl Exemple d'effacement en Perl Entry Identifier Identifiant d'entrée <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> <s7>'notificationWildcard'</s7> <s8>=></s8> <s9>'allusers'</s9><s10>,</s10> http://mail.ow2.org/wws/arc/lemonldap-ng-changes http://mail.ow2.org/wws/arc/lemonldap-ng-changes <s0><s1><Organization<s2>></s2></s1></s0> <s0><s1><Organization<s2>></s2></s1></s0> ../../documentation/1.4/authgoogle.html ../../documentation/1.4/authgoogle.html https://metacpan.org/module/Apache::Session::Browseable::Redis https://metacpan.org/module/Apache::Session::Browseable::Redis Handler does not see <a0>SSO cookies</a0> (because it is not in main domain) and redirects user on Portal L'agent n'intercepte pas de <a0>cookie SSO</a0> (car il n'est pas dans le même domaine) et redirige l'utilisateur vers le portail http://www.php.net/session_start http://www.php.net/session_start dbiUserPassword dbiUserPassword ../../../download.html#contributions ../../../download.html#contributions For the certificate, you can build it from the signing private key registered in Manager. Pour le certificate, vous pouvez le construire en signant la clef privée enregistrée dans le Manager. Kerberos client for Linux Client Kerberos pour Linux ldapGroupBase ldapGroupBase Choose “Apache” as authentication module <e0>(“General Parameters » Authentication modules » Authentication module”)</e0> Choisir “Apache” comme module d'authentification <e0>(“Paramètres généraux » Modules d'authentification » Module d'authentification”)</e0> managerPassword managerPassword applications:drupal_logo.png applications:drupal_logo.png get user attributes obtenir les attributs utilisateurs An apache virtual host protected by LemonLDAP::NG Handler must be registered in LemonLDAP::NG configuration. Un hôte virtuel apache protégé par un agent LemonLDAP::NG doit être enregistré dans la configuration LemonLDAP::NG. documentation:liferay_6.png documentation:liferay_6.png <s0>Set macros</s0>: compute configured macros <s0>Installe les macros</s0> : calcule les macros demandées Access rule Règle d'accès <s79>//"userobm_delegation" => ,</s79> <s79>//"userobm_delegation" => ,</s79> dbiPasswordMailCol dbiPasswordMailCol <s17>RewriteRule</s17> ^/openidserver/.* /index.pl <s17>RewriteRule</s17> ^/openidserver/.* /index.pl Grant LemonLDAP::NG access Autoriser l'accès pour LemonLDAP::NG http://www.lambdaprobe.org http://www.lambdaprobe.org The prefix 1.3.6.1.4.1.10943 is owned by <a0>LINAGORA</a0> (See <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). Le préfixe 1.3.6.1.4.1.10943 est propriété de <a0>LINAGORA</a0> (Voir <a1>http://www.iana.org/assignments/enterprise-numbers</a1>). http://www.wikipedia.org http://www.wikipedia.org apt-get update apt-get update ldapBindDN ldapBindDN The log level can be set with Apache <c0>LogLevel</c0> parameter. Le niveau de journalisation peut être configuré via le paramètre <c0>LogLevel</c0> d'Apache. /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote /_detail/documentation/remote-principle.png?id=documentation%3A1.4%3Aauthremote ../pages/documentation/1.1/exportedvars.html ../pages/documentation/1.1/exportedvars.html openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem openssl req -new -key lemonldap-ng-priv.key -out cert.csr openssl x509 -req -days 3650 -in cert.csr -signkey lemonldap-ng-priv.key -out cert.pem For security reason, a cookie provided for a domain cannot be sent to another domain. Pour des raisons de sécurité, un cookie fournit par un domaine ne peut être transmit à un autre. Cache::Cache Cache::Cache <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> <a65><s66>print</s66></a65> <s67>"$res notification(s) have been deleted<s68>\n</s68>"</s67><s69>;</s69> <s70>}</s70> You can also use Facebook as user database. On peut également utiliser Facebook comme base de données utilisateurs. <s0>Activation</s0>: Set to On to enable Common Domain Cookie support. <s0>Activation</s0> : mettre à « activé » pour activer le support du domaine commun de cookie. http://modauthkerb.sourceforge.net/ http://modauthkerb.sourceforge.net/ Logout user from current application and from Lemonldap::NG and redirect it to http://intranet/ Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ → User session has expired or handler does not have access to the same Apache::Session database than the portal → La session de l'utilisateur a expiré ou l'agent n'a pas accès à la même base de données Apache::Session que le portail ../pages/documentation/1.4/internalproxy.html ../pages/documentation/1.4/internalproxy.html For example, to forward login (<c0>$uid</c0>) and password (<c1>$_password</c1> if <a2>password is stored in session</a2>): Par exemple, pour exporter l'identifiant (<c0>$uid</c0>) et le mot-de-passe (<c1>$_password</c1> si <a2>le mot-de-passe est stocké dans la session</a2>): /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-ac.png?id=documentation%3A1.4%3Asamlservice Authentication contexts Contextes d'authentification By default, anonymous bind is used. Par défaut, une connexion anonyme est utilisée. ../../documentation/1.4/applications/googleapps.html ../../documentation/1.4/applications/googleapps.html phpLDAPadmin will connect to the directory with a static <a0>DN</a0> and password, and so will not request authentication anymore. phpLDAPadmin se connecte au serveur avec un <a0>DN</a0> et un mot-de-passe statique et ne requiert ainsi aucune authentification. Use MySQL for Lemonldap::NG configuration Utiliser MySQL pour la configuration de Lemonldap::NG Session lifetime for cronjob Durée de vie des sessions pour la tâche planifiée Include LemonLDAP::NG configuration in your main Apache configuration: Incluez la configuration LemonLDAP::NG dans celle d'Apache : Choice of any certificate attribute as user main login Choix de n'importe quel attribut du certificat comme nom d'utilisateur principal rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz Apache based protection allow to be independent from WebSSO, so Manager will always be reachable even if WebSSO configuration is corrupted. Une protection basée sur Apache permet d'être indépendant du WebSSO, ainsi le manager est toujours accessible même si la configuration du WebSSO est corrompue. Access to configuration Accès à la configuration http://mb-c.pro/en/archives/7657 http://mb-c.pro/en/archives/7657 You can create a special virtual host and use <a0>Apache rewrite module</a0> to switch between open and protected hosts: Vous pouvez créer un hôte virtuel particulier et utiliser <a0>le module rewrite d'Apache</a0> pour choisir entre le site ouvert et le protégé : Fail2ban Fail2ban Select <c0>Metadata</c0>, and unprotect the field to paste the following value: Selectionner <c0>Metadata</c0>, et déprotéger le champ pour y mettre : Regular expression Expression régulière <s0>Authenticate</s0>: contact authentication database to check credentials <s0>Authentifie</s0> : contacte le dispositif d'authentication pour vérification Stack multiple backends Empiler de multiples backends css/screen.css css/screen.css cp ValveLemonLDAPNG.jar server/lib/ cp ValveLemonLDAPNG.jar server/lib/ Install cron jobs Installer les tâches planifiées (cron) <s0>Allowed modules</s0>: click on <c1>New choice</c1> to add a choice. <s0>Modules autorisés</s0> : cliquer sur <c1>Nouveau choix</c1> pour ajouter un choix. Virtual host Hôte virtuel ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></IDPSSODescriptor<s5>></s5></s4></s3> translations traductions <a2>header_remote_user_conversion</a2><br3/> <a2>header_remote_user_conversion</a2><br3/> portalDisplayAppslist portalDisplayAppslist <s0>ldapConfBase</s0>: Notifications branch <a1>DN</a1>. <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des notifications. icons:flags:fr.png icons:flags:fr.png checkLogonHours($ssoLogonHours, '', '', '1') checkLogonHours($ssoLogonHours, '', '', '1') 1_admin 1_admin User choice done if <a0>authentication choice</a0> was used Choix de l'utilisateur si le <a0>backend d'authentification Choice</a0> a été utilisé A virtual host contains: Un hôte vituel contient : Role Based Access Control (RBAC) Contrôle d'accès basé sur les rôles (RBAC) Manager menu organization Organisation du menu du manager ../pages/documentation/1.1/authnull.html ../pages/documentation/1.1/authnull.html Any <a0>SAML</a0> Service Provider, for example: Tout fournisseur de service <a0>SAML</a0>, par exemple: To achieve this, you can create a rule in the Manager: select <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Customization</c2> > <c3>Skin display rules</c3> on click on “New key”. Pour le réaliser, il faut créer une règle dans le manager : choisir <c0>paramètres généraux</c0> > <c1>Portail</c1> > <c2>Personnalisation</c2> > <c3>Règle d'affichage du thème</c3> et cliquer sur “Nouvelle clef”. Remote LL::NG LL::NG distant <s0>User</s0>: where collect user data <s0>Utilisateurs</s0>: où trouver les données utilisateurs authenticate users authentifier les utilisateurs Handler gets session get from cookie and gets session L'agent récupère la session en utilisant la valeur du cookie ^/obm-sync ^/obm-sync Roles as simple values of a user attribute Rôles comme simple valeur d'attribut utilisateur Here are some advices: Il y a deux avis : So you have just to declare this header for the virtual host in Manager. Il suffit donc de déclarer cet en-tête pour l'hôte virtuel dans le manager. <s16># SOAP functions for configuration access (disabled by default)</s16> <s16># Fonctions SOAP pour accéder à la configuration (désactivées par défaut)</s16> <s0>POST <a1>URL</a1></s0>: /login.php <s0><a1>URL</a1> POST</s0>: /login.php Install dependencies on your system Installer les dépendances sur le système Using Redis, you just have to prepare Redis database. Pour utiliser Redis, il faut preparer la base de données. It simplifies the build of a protected area with a few changes in the application. Il simplifie la construction d'une aire protégée avec peu d'impact sur les applications. notifications_explorer_create.png notifications_explorer_create.png http://test1.example.com http://test1.example.com Twitter application key Clef d'application de Twitter If you define mail contents in Manager, <a0>HTML</a0> templates will not be used. Si les contenus sont définis dans le manager, les modèles <a0>HTML</a0> ne sont pas utilisés. <s0><a1>SAML</a1> service providers</s0>: Registered SP <s0>Fournisseurs de service <a1>SAML</a1></s0> : SP enregistrés portalDisplayChangePassword portalDisplayChangePassword For each IDP, you can configure attributes that are collected. Pour chaque IDP, il faut configurer les attributs à collecter. /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat /_detail/applications/tomcat_logo.png?id=documentation%3A1.4%3Aapplications%3Atomcat It should works on every browser: Ça doit marcher avec tous les navigateurs : apt-cache search lemonldap-ng apt-cache search lemonldap-ng By default, the manager is restricted to the user 'dwho' (default backend is Demo). Par défaut, l'accès au manager est restreint à l'utilisateur "dwho" (le backend par défaut est Demo). If no value, disable group searching. La recherche des groupes est désactivé si cette valeur est vide. <s0><a1>Notifications</a1></s0>: messages displayed to connected users <s0><a1>Notifications</a1></s0>: messages à afficher aux utilisateurs connectés ../../../media/screenshots/1.1/mailreset/mailreset_step3.png ../../../media/screenshots/1.1/mailreset/mailreset_step3.png <s0>SSLCertificateFile</s0>: Server certificate <s0>SSLCertificateFile</s0> : certificat serveur ../css/screen.css ../css/screen.css The path to the lock directory Le chemin du répertoire des verrous ../../../media/documentation/ha-apache.png ../../../media/documentation/ha-apache.png It is advised to use separate session backends for standard sessions, <a0>SAML</a0> sessions and <a1>CAS</a1> sessions, in order to manage index separately. Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, <a0>SAML</a0> et <a1>CAS</a1> afin de gérer séparemment les index. http://linuxfr.org/news/sortie-de-lemonldapng-11 http://linuxfr.org/news/sortie-de-lemonldapng-11 /usr/share/lemonldap-ng/bin/lemonldap-ng-cli /usr/share/lemonldap-ng/bin/lemonldap-ng-cli File session backend Backend de sessions File If no value, will use first NameID Format activated in metadata. Si aucune valeur n'est indiquée, le premier format de NameID activé dans les métadatas sera utilisé. documentation:1.4:cda documentation:1.4:cda <s11>AuthType</s11> Kerberos <s11>AuthType</s11> Kerberos <s0>Mail filter</s0>: Filter to find user from its mail (default: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0>Filtre mail</s0> : filtre pour trouver l'utilisateur à partir de son mail (défaut: <c1>(&(mail=$mail)(objectClass=inetOrgPerson))</c1>) <s0><a1>CAS</a1> login</s0>: the session key used to fill user login (value will be transmitted to <a2>CAS</a2> clients). <s0>Identifiant <a1>CAS</a1></s0> : la clef de session à utiliser pour compléter le login (valeur transmise au clients <a2>CAS</a2>). This includes the application list which is now set in the <c1>applicationList</c1> parameter from <c2>[portal]</c2> section, for example: Ceci inclut la liste des applications qui se trouve désormais dans le paramètre <c1>applicationList</c1> de la section <c2>[portal]</c2>, par exemple: http://search.cpan.org/perldoc?Apache2::URI#unescape_url http://search.cpan.org/perldoc?Apache2::URI#unescape_url authenticate: check if user is authenticated; if not, redirect it to the portal authenticate : vérifie que l'utilisateur est authentifié ; sinon, il est redirigé vers le portail Nov 2011: <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> Nov 2011 : <a0>LINUXOID - Единая аутентификация для веб-приложений с LemonLDAP::NG</a0> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> <s55>"userobm_perms"</s55> <s56>=></s56> <s57>"HTTP_OBM_PERMS"</s57><s58>,</s58> Next, configure SOAP for your remote servers Ensuite, configurer SOAP pour les serveurs distants → The specified virtual host was not configured in Manager. → L'hôte virtuel utilisé n'est pas configuré dans le manager. ../../../media/applications/drupal_logo.png ../../../media/applications/drupal_logo.png 2 kind of files may be translated: 2 types de fichiers peuvent être traduits : By default, mail content are empty in order to use <a0>HTML</a0> templates: Par défaut, les messages sont vides afin d'utiliser les modèles <a0>HTML</a0> : Then, go in <c0>Yubikey parameters</c0>: Ensuite, aller dans les <c0>paramètres Yubikey</c0>: KrbVerifyKDC <s14>Off</s14> KrbVerifyKDC <s14>Off</s14> Restart Apache Redémarrer Apache googleapps googleapps Then click on <c0>New POST data</c0> and add all data with their values, for example: Cliquer ensuite sur <c0>Nouvelle donnée POST</c0> et ajouter chaque donnée avec sa valeur, par exemple : LemonLDAP::NG wiki uses Dokuwiki! Le wiki LemonLDAP::NG est un Dokuwiki ! /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-namid-formats.png?id=documentation%3A1.4%3Asamlservice authenticationLevel authenticationLevel Put LemonLDAP::NG tarball in %_topdir/SOURCES Mettre l'archive LemonLDAP::NG dans %_topdir/SOURCES Berlin Berlin This module is not part of <a0>LL::NG</a0> distibution, and can be found on CPAN: <a1>Apache::Session::LDAP</a1>. Ce module ne fait pas partie de la distribution <a0>LL::NG</a0>, et se trouve sur le CPAN : <a1>Apache::Session::LDAP</a1>. dbiUser dbiUser ../pages/screenshots.html ../pages/screenshots.html /_detail/icons/colors.png?id=documentation%3A1.4%3Astart /_detail/icons/colors.png?id=documentation%3A1.4%3Astart The secondary portal is declared in the Manager of the main <a1>LL::NG</a1> structure (else user will be rejected). Le portail secondaire est declaré dans le Manager du système <a1>LL::NG</a1> principal comme une application (sinon les utilisateurs seront rejetés). Distinguished name Nom distinct (distinguished name) <a0>error</a0><br1/> <a0>error</a0><br1/> To protect the manager, you have to choose one or both of : Pour protéger le manager, il faut choisir l'une où les deux solutions : ../../documentation/1.4/customfunctions.html ../../documentation/1.4/customfunctions.html ../../../media/icons/utilities.png ../../../media/icons/utilities.png Certificate Certificat Use <a0>packages provided by Debian</a0>. Utiliser les <a0>paquets fournis par Debian</a0>. screenshots:1.1:mailreset:mailreset_step5.png screenshots:1.1:mailreset:mailreset_step5.png ../pages/documentation/1.1/logoutforward.html ../pages/documentation/1.1/logoutforward.html CMS, Portal CMS, Portail http://en.wikipedia.org/wiki/Central_Authentication_Service http://fr.wikipedia.org/wiki/Central_Authentication_Service You can also add some other parameters On peut également ajouter quelques autres paramètres SMTPServer SMTPServer For example with this rule on the <c0>access</c0> parameter: Par exemple avec cette règle sur le paramètre <c0>access</c0> : a2enmod perl a2enmod perl These parameters are not mandatory to run <a0>SAML</a0> service, but can help to customize it: Ces paramètres ne sont pas obligatoires pour faire fonctionner le service <a0>SAML</a0>, mais peuvent aider à leur personnalisation : <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> <s11>'loginHistoryEnabled'</s11> <s12>=></s12> <s13>'1'</s13><s14>,</s14> User tries to access protected application, his request is catched by Handler Lorsqu'un utilisateur tente d'accéder à une application protégée, il est intercepté par l'agent (handler) Variables that can be used in rules and headers Variables qui peuvent être utilisées dans les règles et en-têtes <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> <s23>'email'</s23> <s24>=></s24> <s25>$_SERVER</s25><s26>[</s26><s27>'HTTP_AUTH_MAIL'</s27><s28>]</s28><s29>,</s29> Catch error pages: Capture des pages d'erreur : This page do not reference all error messages, but only the frequentest Cette page ne référence pas tous les messages d'erreur, mais simplement les plus fréquents http://search.cpan.org/perldoc?Apache::Session::Oracle http://search.cpan.org/perldoc?Apache::Session::Oracle <s0>STORAGECONFFILE</s0>: location of default storage configuration file (default: /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) <s0>STORAGECONFFILE</s0> : emplacement du du fichier de configuration du stockage par défaut (défaut : /usr/local/lemonldap-ng/etc/lemonldap-ng.ini) An example is given under the source tree : lemonldap-ng-portal/example/index.fcgi Un exemple est disponible dans l'arborescence des sources : lemonldap-ng-portal/example/index.fcgi nothing here... rien ici... For example, to allow only users with a strong authentication level: Par exemple, pour n'autoriser que les utilisateurs authentifiés fortement : proxy proxy It can works with external modules to extends its functionalities. Il peut utiliser des modules externes pour étendre ses fonctionnalités. <s0>Authentication level</s0>: authentication level for this module. <s0>Niveau d'authentification</s0> : niveau d'authentification accordé à ce module. Only the condition is not mandatory. Seule la condition n'est pas exigée. Then in exported variables, you can ask only for : Ensuite dans les « variables exportées », on ne peut demander que : <s0>Recursive</s0>: activate recursive group functionality (default: 0). <s0>Récursivité</s0> : active la fonctionnalité récursive (défaut: 0). HyperText Markup Language HyperText Markup Language <s0>Set local groups</s0>: compute configured groups <s0>Installe les groupes locaux</s0> : calcule les groupes demandés par la configuration ../../documentation/1.4/managerprotection.html ../../documentation/1.4/managerprotection.html admin_server = ad.example.com admin_server = ad.example.com Sympa configuration Configuration Sympa Connection settings can be configured differently for authentication process and user process. Les paramètres de connexion peuvent être configurés différemment pour les processus d'authentification et de recherche d'utilisateur. /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_3.png?id=documentation%3A1.4%3Aapplications%3Aliferay By default, login time and <a0>IP</a0> address are stored in history, and the error message prompted to the user for failed logins. Par défaut, le tampon de date et l'adresse <a0>IP</a0> sont stockés dans l'historique et le message d'erreur affiché à l'utilisateur en cas d'échec. <s0>+1h</s0>: one hour from session creation <s0>+1h</s0> : une heure après la création de la session overload any <a0>LL::NG</a0> <a1>parameter</a1> when a specific backend is used surcharger n'importe quel <a1>paramètre</a1> <a0>LL::NG</a0> en fonction du backend utilisé <s0>Extract form info</s0>: get login/password, certificate, environment variable (depending on authentication module) <s0>Extrait les informations du formulaire</s0>: récupère le couple compte/mot-de-passe, le certificat, une variable d'environnement (suivant le module d'authentification) This configuration is usable if you want to expose your internal <a2>SSO</a2> portal to another network (DMZ). Cette configuration est utilisable l'on soujaite exposer un portail <a2>SSO</a2> interne à une autre réseau (DMZ). <s0>Default rule</s0>: who can access to the application <s0>Règle default</s0> : qui peut accéder à l'application http://auth.example.com/saml/metadata http://auth.example.com/saml/metadata </<s12>IfModule</s12>>   </<s12>IfModule</s12>>   /_detail/icons/flags/ua.png?id=press /_detail/icons/flags/ua.png?id=press ../documentation/current/notifications.html ../documentation/current/notifications.html TLS client Client TLS Change password: update password column in authentication table matching user Changement de mot-de-passe : met à jour le champ mot-de-passe de la table d'authentification correspondant à l'utilisateur <s11># Perl script</s11> <s11># Perl script</s11> DokuWiki offline version DokuWiki version hors-ligne Full access control Contrôle d'accès complet Demonstration backend has hard coded user accounts: Le backend de démonstration dispose de compte codés en dur : Generic articles Articles génériques Allow only users with a LimeSurvey role Autorise seulement les utilisateurs avec un rôle LimeSurvey /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart /_detail/icons/jabber_protocol.png?id=documentation%3A1.4%3Astart http://linuxfr.org/news/sortie-de-lemonldapng-version-10 http://linuxfr.org/news/sortie-de-lemonldapng-version-10 <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> <a0><s1>print</s1></a0> <s2>"Connected user: "</s2><s3>.</s3><s4>$ENV</s4><s5>{</s5>HTTP_AUTH_USER<s6>}</s6><s7>;</s7> Inside this jail, you can access to: Dans cette cage, on peut accéder aux éléments suivants : By default, default values are used. Sauf modification, les valeurs par défaut sont utilisées. Log with the dwho account and go on <a0>http://manager.example.com</a0> Connectez-vous avec le compte dwho sur <a0>http://manager.example.com</a0> ../media/icons/personal.png ../media/icons/personal.png <s0>Display Name</s0>: should be displayed on IDP, this is often your society name <s0>Nom affiché (display name)</s0> : peut être affiché par le fournisseur d'identité (IDP), this is often your society name Create a redirection script, called login.pl: Créer un script de redirection, appelé login.pl: ../../documentation/1.4/authwebid.html ../../documentation/1.4/authwebid.html <<s0>VirtualHost</s0>> <<s0>VirtualHost</s0>> <s0>none</s0>: no access control, the server will answer without checking if the user is authorized for the service (this is the default) <s0>none</s0> : pas de contrôle d'accès, le serveur répond sans contrôler si l'utilisateur est autorisé à accéder au service (c'est la valeur par défaut) To avoid having group dn stored in sessions datas, you can use a macro to rewrite memberOf: Pour éviter de stocker les dn dans votre base de sessions, vous pouvez utiliser une macro pour réécrire memberOf : <a0>Outlook Web App</a0> <br1/> <a0>Outlook Web App</a0> <br1/> http://search.cpan.org/dist/Apache-Session-LDAP/ http://search.cpan.org/dist/Apache-Session-LDAP/ PerlResponseHandler ModPerl::Registry PerlResponseHandler ModPerl::Registry valeur valeur ^/logout ^/logout The GPG key can be downloaded here: <a0>rpm-gpg-key-ow2</a0> La clef GPG peut être téléchargée ici : <a0>rpm-gpg-key-ow2</a0> <s0>Change as user</s0>: enable to perform password modification with credentials of connected user. <s0>Change comme utilisateur</s0> : active la modification du mot-de-passe avec les éléments d'authentification de l'utilisateur connecté. → You tried to activate Status module without localStorage. → Le module Status est activé sans localStorage. SOAP SOAP <a0>Authentication</a0>: how check user credentials <a0>Authentification</a0> : comment examiner les données utilisateur d'authentification ldapBase ldapBase Radius authentication level Niveau d'authentification de Radius <a0>LL::NG</a0> can delegate authentication to an OpenID server. <a0>LL::NG</a0> peut deleguer l'authentification à un serveur OpenID. <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> <c0>_casPT</c0><s1>serviceID</s1> = <s2>Proxy ticket value</s2> LDAP session backend Backend de sessions LDAP icons:chat.png icons:chat.png <s11>}</s11><s12>,</s12> <s11>}</s11><s12>,</s12> For example, macro “macro1” will be computed before macro “macro2”: so, expression of macro2 may involve value of macro1. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. <s0>Signed Authentication Request</s0>: set to On to always sign authentication request. <s0>Requête d'authentification signée</s0> : mettre à « activé » pour toujours signer les requêtes d'authentifications. If the message contains check boxes, the user has to check all of them else he can not access to the portal and get his session cookie. Si le message contient des cases à cocher, l'utilisateur doit toutes les cocher, sinon il ne peut obtenir de cookie de session. Test::POD Test::POD Attributes and macros Attributs et macros documentation:1.4:installtarball documentation:1.4:installtarball Manager translation Traduction du manager You should grab some informations: Il faut récolter quelques informations: Default use case: Cas général: Before, you have to create the virtual host <c0>manager.your.domain</c0> in the manager and set a <a1>rules</a1>, else access to the manager will be denied. Avant, il faut créer l'hôte virtuel <c0>manager.your.domain</c0> dans le manager et mettre une <a1>règle</a1>, sinon l'accès au manager sera interdit. PerlOutputFilterHandler Lemonldap::NG::Handler::Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu A little floating menu can be added to application with this simple Apache configuration: Un petit menu flottant peut être ajouté aux applications par une seimple configuration Apache : Then each parameter is one value of the attribute <c0>description</c0>, prefixed by its key. Ensuite, chaque paramètre est une valeur de l'attribut <c0>description</c0>, prefixé par sa clef. Apache virtual host Hôte virtuel Apache : Multi modules display Affichage des modules de Multi ../../documentation/1.4/loginhistory.html ../../documentation/1.4/loginhistory.html icons:utilities.png icons:utilities.png <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> <s89>'manage_label'</s89> <s90>=></s90> <s91>$_SERVER</s91><s92>[</s92><s93>'HTTP_AUTH_SUPERADMIN'</s93><s94>]</s94> <s95>)</s95><s96>;</s96> → The cache has been created by another user than Apache's user. → Le cache a été créé par un autre utilisateur que celui d'Apache. <s0>Writer <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> IDP to write the cookie. <s0><a1>URL</a1> d'écriture</s0> : <a2>URL</a2> utilisée par l'IdP <a3>SAML</a3> pour écrire le cookie. ../media/icons/wizard.png ../media/icons/wizard.png <s0>Javascript protection</s0>: set httpOnly flag, to avoid cookie been caught by javascript code <s0>Protection Javascript</s0> : active le drapeau httpOnly pour éviter que le cookie ne soit accessible par code javascript To allow the manager to reload the configuration, register the reload virtual host name in the hosts of the server: Pour autoriser le manager à recharger la configuration, enregistrer le nom d'hôte virtuel de rechargement dans le fichier hosts du serveur : ../media/screenshots/1.1/mailreset/mailreset_step3.png ../media/screenshots/1.1/mailreset/mailreset_step3.png This page can be browsed for example by <a0>MRTG</a0> using the <a1>MRTG monitoring script</a1>. Cette page peut être parcourue par exemple par <a0>MRTG</a0> en utilisant le <a1>script de surveillance MRTG</a1>. Display-Name Display-Name Time to test L'heure est aux tests <notification> element(s) : élément(s) <notification> : Attribute Authority Autorité d'attributs Changelog Journal des changements sudo apachectl configtest sudo apachectl restart sudo apachectl configtest sudo apachectl restart sudo make install sudo make install You can customize logs by redefining userNotice() and userError() methods, directly in <c0>lemonldap-ng.ini</c0> On peut personnaliser les fonctions de journalisation en redéfinissant les méthodes userNotice() et userError(), directement dans <c0>lemonldap-ng.ini</c0> User ID User ID Send login in Auth-User: Envoi de l'identifiant dans Auth-User: Redirection to the remote type portal Redirection vers le portail de type remote Montreal Montréal screenshots:1.1:notifications:sample_notification.png screenshots:1.1:notifications:sample_notification.png install_portal_libs install_portal_libs documentation:1.4:authldap documentation:1.4:authldap OW2 Con OW2 Con The faster. Le plus rapide. In this case, see <a1>how convert header into environment variable</a1>. Dans ce cas, voir <a1>comment convertir les en-têtes en variable d'environnement</a1>. Users module: <a0>SAML</a0> Module utilisateurs : <a0>SAML</a0> http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 http://www.slideshare.net/coudot/cas-openid-saml-concepts-diffrences-et-exemples-10219360 Zimbra Handler parameters Paramètres du handler Zimbra Note that groups are computed after macros, so a group rule may involve a macro value. Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro. http://zimbra.lan/service/preauth http://zimbra.lan/service/preauth After configuring <a0>SAML</a0> Service, you can export metadata to your partner Service Provider. Après avoir configuré le service <a0>SAML</a0>, exporter les métadonnéesvers le fournisseur de service partenaire. ../media/logos/logo_ucanss.png ../media/logos/logo_ucanss.png Your EntityID, often use as metadata <a0>URL</a0>, by default #PORTAL#/saml/metadata. Votre EntityID, souvent utilisé comme <a0>URL</a0> des métadatas, par défaut #PORTAL#/saml/metadata. <s166>)</s166><s167>,</s167> <s166>)</s166><s167>,</s167> <a22>authgoogle</a22><br23/> <a22>authgoogle</a22><br23/> <a0>LL::NG</a0> is compatible with the <a1>CAS</a1> protocol <a2>versions 1.0 and 2.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole <a1>CAS</a1> <a2>versions 1.0 et 2.0</a2>. <s0>Multiple domains</s0>: enable <a1>cross domain mechanism</a1> (without this, you cannot extend <a2>SSO</a2> to other domains) <s0>Domaines multiples</s0> : active le <a1>mécanisme inter-domaines</a1> (sans ceci, on ne peut pas étendre le <a2>SSO</a2> aux autres domaines) Put your own files instead of <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: Placer vos propres fichiers au lieu de <c0>ow2.cert</c0>, <c1>ow2.key</c1>, <c2>ow2-ca.cert</c2>: ../pages/references.html ../pages/references.html Kerberos Kerberos You can also find on this page the SVN tarball if you want to test latest features. On peut aussi trouver sur cette page l'archive SVN pour tester les dernières évolutions. Change the base <a0>URL</a0> for EL6 packages: Changer l'<a0>URL</a0> de base pour les paquets EL6 : documentation:1.0:portal documentation:1.0:portal ldapPwdEnc ldapPwdEnc documentation:1.4:error documentation:1.4:error ../pages/default_sidebar.html ../pages/default_sidebar.html Logging application access Trace des accès aux applications Freshmeat Freshmeat Starting performances Performances au démarrage ldapBindPassword ldapBindPassword <s0><a1>API</a1> key</s0>: <a2>API</a2> key from Twitter <s0>Clef d'<a1>API</a1></s0>: clef d'<a2>API</a2> donnée par Twitter documentation:1.4:configvhost documentation:1.4:configvhost To edit <a0>SSO</a0> cookie parameters, go in Manager, <c1>General Parameters</c1> > <c2>Cookies</c2>: Pour modifier les paramètres du cookie <a0>SSO</a0>, aller dans le manager, <c1>Paramètres généraux</c1> > <c2>Cookies</c2> : <a0>tomcat</a0><br1/> <a0>tomcat</a0><br1/> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> <s23>'portalSkin'</s23> <s24>=></s24> <s25>'pastel'</s25><s26>,</s26> ^/(?i)index.php\?.*access.*access ^/(?i)index.php\?.*access.*access Header name Nom d'en-tête Restrict /admin to administrators group Restreint /admin au groupe des administrateurs You must allow access to Manager <a0>IP</a0>. Il faut autoriser l'accès à l'adresse <a0>IP</a0> du manager. documentation:conferences documentation:conferences For example, to configure the <c0>File</c0> configuration backend: Par exemple, pour configurer le backend de configuration <c0>File</c0> : lemonldap-ng-dev@ow2.org lemonldap-ng-dev@ow2.org Configure your <a0>DNS</a0> server to resolve names with your server <a1>IP</a1>. Configurer le serveur <a0>DNS</a0> pour résoudre les noms avec l'adresse <a1>IP</a1> de votre serveur. Browseable session backend Backend de session explorable Configure the <c0>Auth-User</c0> <a1>header</a1>. Configurer l'<a1>en-tête</a1> <c0>Auth-User</c0>. Heidelberg Heidelberg <s0>Anti iframe protection</s0>: will kill parent frames to avoid some well known attacks <s0>Protection anti-iframe</s0> : ferme la frame parente pour éviter des attaques bien connues Mpm-worker works faster and LemonLDAP::NG use the thread system for best performance. Mpm-worker est plus rapide et LemonLDAP::NG utilise le système de threads pour de meilleures performances. Timezone of the user, set with javascript from standard login form (will be empty if other authentication methods are used) Timezone de l'utilisateur, renseignée par javascript dans le formulaire d'authentification (vide si une autres méthode d'authentification est utilisée) https://gist.github.com/njh/2432427 https://gist.github.com/njh/2432427 <s0>Authentication</s0>: how authenticate users <s0>Authentification</s0>: comment authentifier les utilisateurs Export sAMAccountName in a variable declared in <a0>exported variables</a0> Exporter sAMAccountName dans la liste des <a0>variables exportées</a0> documentation:latest:notifications documentation:latest:notifications Must be secured by network access control. Doit être securisé par un contrôle d'accès réseau. Apache authentication level Niveau d'authentification d'Apache unprotect unprotect Form replay parameters Paramètres de rejeu de formulaires logout_app_sso http://intranet/ logout_app_sso http://intranet/ Demonstration Démonstration If <c0><a1>CAS</a1> login</c0> is not set, it uses <c2>General Parameters</c2> » <c3>Logs</c3> » <c4>REMOTE_USER</c4> data, which is set to <c5>uid</c5> by default Si le <c0>login <a1>CAS</a1></c0> n'est pas défini, la donnée <c2>Paramètres généraux</c2> » <c3>Journalisation</c3> » <c4>REMOTE_USER</c4> est utilisée, mise à <c5>uid</c5> par défaut <s32>}</s32><s33>;</s33> <s32>}</s32><s33>;</s33> You can change it quick with a sed command. On peut le changer rapidement par une commande sed. ../documentation/current/prereq.html ../documentation/current/prereq.html Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. Lemonldap\:\:NG \: Bad password for .* \(<HOST>\) # Option: ignoreregex # Notes.: regex to ignore. http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Apache for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Apache pour l'authentification. ../pages/documentation/1.1/error.html ../pages/documentation/1.1/error.html 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 For remote servers, you can use <a0>SOAP session backend</a0> in cunjunction to increase security for remote server that access through an unsecure network Pour les serveurs distants, vous pouvez utiliser le <a0>module SOAP d'accès aux sessions</a0> en complément pour augmenter la sécurité de ces serveurs qui accèdent aux sessions au travers d'un réseau non sûr Parameters: Paramètres: Update your /etc/hosts to map <a0>SSO</a0> URLs to localhost: Mettez à jour votre /etc/hosts pour faire correspondre les URLs du <a0>SSO</a0> à votre machine : LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> LDAPFilter <s19>=></s19> <s20>'(&(sAMAccountName=$user)(objectClass=person))'</s20><s21>,</s21> checkLogonHours checkLogonHours To see available actions, do: Pour connaître les actions possibles, lancer : This is also true for: C'est disponible pour : <a0>LL::NG</a0> can delegate authentication to a <a1>CAS</a1> server. <a0>LL::NG</a0> peut déléguer l'authentification à un serveur <a1>CAS</a1>. Installation from the tarball Installation depuis l'archive https://metacpan.org/release/Net-Facebook-Oauth2 https://metacpan.org/release/Net-Facebook-Oauth2 <<s12>Files</s12> *.pl> <<s12>Files</s12> *.pl> FastCGI support Support FastCGI "admin0\@global.virt" : $uid "admin0\@global.virt" : $uid https://auth.sso.sbay.org/ https://auth.sso.sbay.org/ User is redirected on protected application, with his new cookie L'utilisateur est redirigé vers l'application demandée avec son nouveau cookie <a0>CAS</a0> authentication will automatically add a <a1>logout forward rule</a1> on <a2>CAS</a2> server logout <a3>URL</a3> in order to close <a4>CAS</a4> session on <a5>LL::NG</a5> logout. L'authentification <a0>CAS</a0> ajoute automatiquement une <a1>règle de renvoi après déconnexion</a1> sur l'<a3>URL</a3> de déconnexion du serveur <a2>CAS</a2> afin de clore la session <a4>CAS</a4> lors de la déconnexion <a5>LL::NG</a5>. By default, Tomcat provides a file called <c0>users.xml</c0> to manage authentication: Par défaut, Tomcat fournit un fichier nommé <c0>users.xml</c0> pour gérer l'authentification : Handler Agent (Handler) Register partner Service Provider on LemonLDAP::NG Enregistrer le fournisseur de service dans LemonLDAP::NG Press Presse customhead.tpl : <a0>HTML</a0> header markups (like <a1>CSS</a1>, js inclusion) customhead.tpl : en-têtes <a0>HTML</a0> (tels les inclusions <a1>CSS</a1>, js) <s0># Uncomment this to activate status module</s0> <s0># Uncomment this to activate status module</s0> ../media/logos/sgs_white_small.jpg ../media/logos/sgs_white_small.jpg /_detail/logos/logo_bpi.png?id=references /_detail/logos/logo_bpi.png?id=references [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 [lemonldap-ng] enabled = true port = http,https filter = lemonldap action = iptables-multiport[name=lemonldap, port="http,https"] logpath = /var/log/apache*/error*.log maxretry = 3 ../../../documentation/1.4/logoutforward.html ../../../documentation/1.4/logoutforward.html <a0>Using Apache::Session::Browseable::MySQL</a0> (recommended for best performances) <a0>Utiliser Apache::Session::Browseable::MySQL</a0> (recommandé pour de meilleures performances) /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots /_detail/screenshots/1.0/sessionsexplorer/tree_light.png?id=screenshots <s0>PREFIX</s0>: installation directory (default: /usr/local) <s0>PREFIX</s0> : répertoire d'installation (défaut : /usr/local) Architecture Architecture Logout Déconnexion Force port in redirection Force le port dans les redirections This mechanism can be used to secure access for remote servers that cross an unsecured network to access to <a0>LL::NG</a0> databases. Ce mécanisme peut être utilisé pour sécuriser l'accès des serveurs distants qui traversent des réseaux non sécurisés pour accéder aux bases de données de <a0>LL::NG</a0>. Protect the Manager Protéger le manager Authentication level Niveau d'authentification documentation:1.1:upgrade documentation:1.1:upgrade These options are only here to override default values. Ces options ne sont à utiliser que pour surcharger les valeurs par défaut. ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/authsaml.html ../pages/documentation/1.1/applications/zimbra.html ../pages/documentation/1.1/applications/zimbra.html Configuration can be stored in several formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) but must be shared over the network if you use more than 1 server. La configuration peut être stockée sous plusieurs formats (<a0>SQL</a0>, <a1>File</a1>, <a2>LDAP</a2>) mais doit être partégée via le réseau si on utilise plus d'un serveur. For example, if you are using <a0>AD as authentication backend</a0>, you can use sAMAccountName for the Windows NameID format. Par exemple, si vous utilisez <a0>Active-Directory comme système d'authentification</a0>, vous pouvez utiliser sAMAccountName come format de NameID Windows. You can choose other Makefile targets: On peut choisir d'autres cibles du Makefile : To do this, use the Manager, and go in <c0>Virtual Hosts</c0> branch. Pour ce faire, utiliser le manager, et aller dans la branche <c0>Virtual Hosts</c0>. <s0>getAttributes(cookieValue)</s0>: get elements stored in session <s0>getAttributes(cookieValue)</s0> : retourne les éléments stockés dans la session passwordDB passwordDB insert a loop around the <a0>HTML</a0> printing, starting with the object creation <e1>(→new)</e1> insérer une boucle autour de l'affichage <a0>HTML</a0>, démarrant avec la création de l'objet <e1>(→new)</e1> To create a variable, you've just to map a user attributes in <a0>LL::NG</a0> using <c1>Variables</c1> » <c2>Exported variables</c2>. Pour créer une variable, il faut simplement associer des attributs utilisateurs dans <a0>LL::NG</a0> en utilisant <c1>Variables</c1> » <c2>Variables exportées</c2>. ../../../media/icons/gpg.png ../../../media/icons/gpg.png Storage Stockage Authorization is controlled only by Handlers. Les autorisations sont vérifiées seulement par les agents (handlers). Apache::Session Apache::Session CDBI / RDBI CDBI / RDBI If you are using packages, they should have done the upgrade process for you, but you can check here that all is in order. Lorsqu'on utilise les paquets, ils doivent faire d'eux-même la mise à jour, mais on peut vérifier ici que tout est en ordre. <s0><a1>Identity provider proxy</a1></s0>: <a2>LL::NG</a2> can be used as proxy translator between systems talking <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … <s0><a1>Proxy de fournisseurs d'identités</a1></s0> : <a2>LL::NG</a2> peut être utilisé comme traducteur mandataire entre systèmes comprenant <a3>SAML</a3>, OpenID, <a4>CAS</a4>, … Error messages are defined in source code. Les messages d'erreur sont définis dans le code source. $mailR $mailR bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] bbbRole => ((grep{/ou=bbb/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=bbb/)[0] Three options: Trois options : Since MySQL does not have always transaction feature, Apache::Session::MySQL has been designed to use MySQL locks. Comme MySQL ne dispose pas toujours de dispositif de transaction, Apache::Session::MySQL a été conçu en utilisant les verrous MySQL. <<s14>IfModule</s14> auth_kerb_module> <<s14>IfModule</s14> auth_kerb_module> notificationStorage notificationStorage Configure the <a0>access rules</a0>. Configurer les <a0>règles d'accès</a0>. Secure configuration access Securiser l'accès à la configuration Before installing the packages, install all <a0>dependencies</a0>. Avant d'installer les paquets, installer toutes les <a0>dépendances</a0>. <s0>LmCookieDomainToReplace</s0>: string to replace in <c1>Set-Cookie</c1> header <s0>LmCookieDomainToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Set-Cookie</c1> /_detail/icons/xfmail.png?id=contact /_detail/icons/xfmail.png?id=contact ../../../documentation/1.4/configlocation.html#apache ../../../documentation/1.4/configlocation.html#apache <s0>Chain</s0>: <a1>DBI</a1> chain, including database driver name and database name (for example: dbi:mysql:database=lemonldapng;host=localhost). <s0>Chaîne</s0> : chaîne <a1>DBI</a1>, contenant le nom de driver et le nom de la base de données (par exemple : dbi:mysql:database=lemonldapng;host=localhost). See <a0>how configure logging in Tomcat</a0> . Voir <a0>how configure logging in Tomcat</a0> . RPMs are available on the <a0>Download page</a0>. Les paquets RPM sont disponibles sur la <a0>page de téléchargement</a0>. ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> ... <s3><s4></AttributeAuthorityDescriptor<s5>></s5></s4></s3> <s84>//"userobm_archive" => ,</s84> <s84>//"userobm_archive" => ,</s84> See <a0>Debian Lenny upgrade</a0>. Voir la <a0>mise à jour de Debian Lenny</a0>. ../../documentation/1.4/browseablesessionbackend.html ../../documentation/1.4/browseablesessionbackend.html Portal checks authentication Le portail examine les données d'authentification PerlHeaderParserHandler My::Package   PerlHeaderParserHandler My::Package   See <a0>https://developers.facebook.com/apps</a0> on how to do that. Voir <a0>https://developers.facebook.com/apps</a0> pour en savoir plus. <s0>Regexp for password generation</s0>: Regular expression used to generate the password (default: [A-Z]{3}[a-z]{5}.\d{2}) <s0>Regexp pour la génération de mot-de-passe</s0> : expression régulière utilisée pour générer le mot-de-passe (défaut : [A-Z]{3}[a-z]{5}.\d{2}) <s0>Redirect on forbidden</s0>: use 302 instead 403 <s0>Redirections pour les accès interdits</s0> : utilise 302 au lieu de 403 Password backend Module de gestion de mots-de-passe Each field can be filled with static values or data from user's session. Chaque champ peut être construit avec des valeurs statiques ou des données issues de la session utilisateur. <s0>Resolution Rule</s0>: rule that will be applied to preselect an IDP for a user. <s0>Règle de résolution</s0> : règle à appliquer pour pré-sélectionner cet IDP. <a24>authldap</a24><br25/> <a24>authldap</a24><br25/> If not set, the secret token is calculated using the general encryption key. S'il n'est pas renseigné, le jeton secret est calculé en utilisant la clef de chiffrement générale. The plugin will check the <c1>REMOTE_USER</c1> environment variable to get the connected user. Ce plugin utilise la variable d'environnement <c1>REMOTE_USER</c1> pour récupérer le nom d'utilisateur connecté. ../../../media/documentation/manager-authchoice.png ../../../media/documentation/manager-authchoice.png Compatible password modification Compatibilité des modifications de mots-de-passe perl-Lemonldap-NG-Manager: CPAN - Manager modules perl-Lemonldap-NG-Manager : CPAN - modules manager This concerns all parameters for the Attribute Authority metadata section Ceci concerne tous les paramètres de la section « autorité d'attributs » des métadatas http://search.cpan.org/perldoc?Apache::Session::Redis http://search.cpan.org/perldoc?Apache::Session::Redis generic_sso generic_sso Common Domain Cookie is also know as <a0>WAYF Service</a0>. Le domaine commun de cookie est également connu comme <a0>service WAYF</a0>. http://vhost.example.com/appli1 http://vhost.example.com/appli1 http://vhost.example.com/appli2 http://vhost.example.com/appli2 Delete other session Efface les autres sessions (session unique par utilisateur) Contrary to <a0>multiple backend stacking</a0>, backend choice will present all available authentication methods to users, who will choose the one they want. Contrairement au <a0>dispositif de multiples backends</a0>, le dispositif de choix de backend présente à l'utilisateur toutes les méthodes d'authentification disponibles pour qu'il puisse choisir. documentation:1.4:safejail documentation:1.4:safejail You can configure here which field of <a2>LL::NG</a2> session will be associated to a NameID format. Vous pouvez indiquer ici l'attribut de session de <a2>LL::NG</a2> qui sera associé au format du NameID. Configuration of LemonLDAP::NG Configuration de LemonLDAP::NG Perl auto-protected CGI CGI aito-protégée Perl Filters Filters Name Nom <s93>//"userobom_phone2" => ,</s93> <s93>//"userobom_phone2" => ,</s93> https://developers.facebook.com/tools/explorer https://developers.facebook.com/tools/explorer ../pages/documentation/1.1/nosqlsessionbackend.html ../pages/documentation/1.1/nosqlsessionbackend.html logos:logo_bpi.png logos:logo_bpi.png user user <c0>ValveLemonLDAPNG.jar</c0> is created under <c1>/dist</c1> directory. <c0>ValveLemonLDAPNG.jar</c0> est créé dans le répertoire <c1>/dist</c1>. 2009 2009 Configuration <s0>is not saved</s0> if errors occur. La configuration <s0>n'est pas sauvée</s0> en cas d'erreur. Use “Active Directory” as authentication, userDB and passwordDBbackends, Utiliser “Active Directory” comme systèmes d'authentification, de gestion des utilisateurs et des mots-de-passe, ../media/logos/logo-ul.png ../media/logos/logo-ul.png stack several times the same module with a different name empiler plusieurs fois le même module avec un nom différent LemonLDAP::NG is used to protect access to intranet. LemonLDAP::NG est utilisé pour protéger l'accès à l'Intranet. LemonLDAP::NG provide a script that allows to edit configuration without graphical interface, this script is called <c0>lmConfigEditor</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: LemonLDAP::NG fournit un script qui permet d'éditer la configuration sans interface graphique, ce script se nomme <c0>lmConfigEditor</c0> et se trouvedans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin : Edit /etc/fail2ban/jail.conf Editer /etc/fail2ban/jail.conf <s136>//"userobm_mail_perms" => ,</s136> <s136>//"userobm_mail_perms" => ,</s136> Sources are currently available on OW2. Les sources sont disponibles sur OW2. In Debian/Ubuntu, install the library through apt-get command Pour Debian/Ubuntu, installer la librairie via la commande apt-get You can also get the <a0>LemonLDAP::NG archive</a0> and make the package yourself: On peut également construire les paquets à partir de l'<a0>archive LemonLDAP::NG</a0> : <s0>Handler</s0>: Apache modules used to protect applications <s0>Agent</s0> (Handler): module Apache utilisé pour protéger les applications Easy to customize Facile à personnaliser icons:bug.png icons:bug.png http://search.cpan.org/perldoc?Apache::Session::Sybase http://search.cpan.org/perldoc?Apache::Session::Sybase references Références <s0>Mail content</s0>: <s0>Contenu du courriel</s0> : <s154>//"userobm_samba_home_drive" => ,</s154> <s154>//"userobm_samba_home_drive" => ,</s154> Go to <c0>Configuration</c0> » <c1>Authentication</c1>: Aller dans <c0>Configuration</c0> » <c1>Authentication</c1>: Protected sites: Sites protégés: http://auth.example.com/saml/singleSignOn http://auth.example.com/saml/singleSignOn Change configuration in lemonldap-ng.ini : Changer la configuration dans lemonldap-ng.ini : 2012 2012 2011 2011 Connection login Login de connexion <s0>auth.example.com</s0>: <a1>DNS</a1> of the portal <s0>auth.example.com</s0> : nom <a1>DNS</a1> du portail 2010 2010 uid: coudot uid: coudot <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> <s0><s1><bean</s1> <s2>id</s2>=<s3>"LemonLDAPNGFilter"</s3> <s4>class</s4>=</s0> <s5><s6>"org.springframework.security.web.authentication.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"</s6><s7>></s7></s5> Older versions Versions précédentes <s0>Authentication level</s0>: authentication level for this module <s0>Niveau d'authentification</s0> : niveau d'authentification pour ce module Now you have access to the SP parameters list. Il est ensuite possible d'accéder à la liste des paramètre du SP : <e0>Exemple with MySQL</e0>: <e0>Exemple avec MySQL</e0> : <s0>Key</s0>: application identifier <s0>Clef</s0> : identifiant d'application /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu /_detail/documentation/manager-menu-application.png?id=documentation%3A1.4%3Aportalmenu "" : ($mail =~ /^([^@]+)/)[0] . "" : ($mail =~ /^([^@]+)/)[0] . Country Country <s0>Cookie name</s0> (optional): name of the cookie of primary portal, if different from secondary portal <s0>Nom du cookie</s0> (optionnel) : nom du cookie du portail primaire, s'il est différent de celui du portail secondaire xguimard xguimard <s0>Adapt session lifetime</s0>: session lifetime will be adapted from <c1>SessionNotOnOrAfter</c1> value found in authentication response. <s0>Adaptation de la durée de vie de la session</s0> : la durée de vie de la session sera adaptée sur la base de la valeur de <c1>SessionNotOnOrAfter</c1> dans les réponses d'authentification. You may rather use standards protocols like <a1>SAML</a1>, <a2>OpenID</a2> or <a3>CAS</a3>. Il est préférable d'utiliser des protocoles standards tels <a1>SAML</a1>, <a2>OpenID</a2> ou <a3>CAS</a3>. in the value field, set the field name. dans le champ valeur, mettre le nom du champ. Do not forget to add OBM in <a0>applications menu</a0>. Ne pas oblier d'ajouter OBM dans le <a0>menu des applications</a0>. Index Index Just remember its <a0>DN</a0> for LemonLDAP::NG configuration. Il faut juste retenir le <a0>DN</a0> pour la configuration de LemonLDAP::NG. Email Email Packages and archives Paquets et archives checkLogonHours($ssoLogonHours) checkLogonHours($ssoLogonHours) Example of a protected virtual host for a local application: Exemple d'hôte virtuel protégé pour une application locale : ../../documentation/1.4/variables.html ../../documentation/1.4/variables.html Macros Macros ../pages/documentation/1.1/configvhost.html ../pages/documentation/1.1/configvhost.html When <c0>Choice</c0> is selected for authentication, values for Users and Password modules are not used anymore. Lorsque <c0>Choice</c0> est selectionné pour l'authentification, les valeurs pour les modules utilisateur et mots-de-passe ne sont plus utilisées. To get more information on user (name, mail, etc.), you have to read <a0>HTTP headers</a0>. Pour obtenir plus d'information sur l'utilisateur (nom, adresse de courriel, etc...), il faut lire les <a0>en-têtes HTTP</a0>. documentation:1.4:authproxy documentation:1.4:authproxy See <s0><a1>security chapter</a1></s0> to learn more about writing good rules. Voir le <s0><a1>chapître sécurité</a1></s0> pour apprendre comment écrire de bonnes règles. de fr Another <a0>LL::NG</a0> system configured with <a1>SAML authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification SAML</a1> Issuer module (can be multivalued) Module fournisseur (peut-être multivalué) http://jira.ow2.org http://jira.ow2.org When <a0>LL::NG</a0> is configured as OpenID identity provider, users can share their authentication using [PORTAL]/openidserver/[login] where: Lorsque <a0>LL::NG</a0> est configuré en fournisseur d'identité OpenID, les utilisateurs peuvent partager leur authentification en utilisant [PORTAIL]/openidserver/[login] où : domain domain Users can see their own history in menu, if menu module <c0>Login history</c0> is enabled. Les utilisateurs peuvent voir leur historique dans le menu, si le module <c0>historique de connexion</c0> est activé. <s0>+30s</s0>: 30 seconds from session creation <s0>+30s</s0> : 30 secondes après la création de la session NoSQL (Redis) NoSQL (Redis) In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Choice for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Choice pour l'authentification. dn dn Handler performance Performance des agents (handlers) documentation/current/installdeb.html#llng_repository documentation/current/installdeb.html#llng_repository Then it creates the session (with attribute filter) Il crée la sessions (avec le filtre d'attributs) Access Control List Liste de contrôle d'accès Install rpm-build package Install rpm-build package <s0>One user by <a1>IP</a1> address</s0>: 2 users can not open a session with the same <a2>IP</a2>. <s0>Un utilisateur par adresse <a1>IP</a1></s0> : 2 utilisateurs ne peuvent ouvrir de sessions avec la même adresse <a2>IP</a2>. ../../documentation/1.4/configlocation.html#portal ../../documentation/1.4/configlocation.html#portal ldapSetPassword ldapSetPassword <c0>skip</c0>: all is open! <c0>skip</c0> : tout est ouvert ! Easy import/export through LDIF files Import/export facilité via les fichiers LDIF dbi:mysql:dbname=sessions dbi:mysql:dbname=sessions Just run the tar command: Lancer implement la commande tar : name => foaf:name nom => foaf:name Syslog facility Facilité syslog Advanced Avancé You can then set the access rule. Définir ensuite les règles d'accès. Central Authentication Service Central Authentication Service quickstart Démarrage rapide en fr Tomcat Tomcat RPM RPM ldapGroupAttributeNameGroup ldapGroupAttributeNameGroup Liferay can use <a0>LL::NG</a0> as an <a1>SSO</a1> provider but you have to manage how users are created: Liferay peut utiliser <a0>LL::NG</a0> comme fournisseur <a1>SSO</a1> mais il faut gérer la création des comptes utilisateurs : Authentication module: <a0>SAML</a0> Module d'authentification : <a0>SAML</a0> Required : Requis : You can change this behavior and set a cookie duration, for example: On peut changer ce comportement et mettre une durée de vie, par exemple : And fill it: et le remplir : http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-confoo-2010 <a8>limesurvey</a8><br9/> <a8>limesurvey</a8><br9/> /_detail/icons/tux.png?id=contact /_detail/icons/tux.png?id=contact <s0>Require old password</s0>: used only in the password changing module of the menu, will check the old password before updating it <s0>Exige l'ancien mot-de-passe</s0> : utilisé seulement dans le module de changement du mot-de-passe du menu, vérifie l'ancien mot-de-passse avant de le changer Dokuwiki local configuration Configuration locale Dokuwiki <s0>.css</s0>: <a1>CSS</a1> (styles) <s0>.css</s0>: <a1>CSS</a1> (styles) to the configuration backend au système de stockage de la configuration Authentication Authentification Date of validation of the notification <e0>id</e0> Date de validation de la notification <e0>id</e0> Fields: Champs : Manager skin Thème du manager <s0>Enable Single Sign-On</s0>: check the box. <s0>Enable Single Sign-On</s0>: sélectionner. Zimbra preauthentication key Clef de pré-authentification Zimbra ../pages/documentation/1.1/applications/mediawiki.html ../pages/documentation/1.1/applications/mediawiki.html Configure Bugzilla virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Bugzilla comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Exported variables Variables exportées ant ant LemonLDAP::NG Common Fichiers communs LemonLDAP::NG Edit the file “auth.conf”, for example: Éditer le fichier “auth.conf” de Sympa, par exemple : Choice modules Modules de "Choice" managerSkin managerSkin Here are some screenshots of 1.2 new features. Ici se trouvent quelques captures d'écran illustrant les nouvelles fonctionnalités de la version 1.2. mailCharset mailCharset It is a Single Sign On protocol similar to OpenID, but based on user email address rather than a <a0>URL</a0>. C'est un protocole d'authentification unique (Single Sign On) similaire à OpenID, mais basé sur l'adresse emailde l'utilisateur au lieu d'une <a0>URL</a0>. Multi CAS;LDAP Multi CAS;LDAP cfgNum int not null primary key, cfgNum int not null primary key, By default, you will have a manager virtual host define in configuration. Par défaut, il existe un hôte virtuel défini dans la configuration. <a0>LL::NG</a0> can use two tables: <a0>LL::NG</a0> peut utiliser deux tables : 0.9.4_application_menu.png 0.9.4_application_menu.png documentation:quickstart documentation:quickstart <s0>manager</s0>: parameters only for Manager <s0>manager</s0> : paramètres réservés au manager If they really do not please you, override them! S'ils ne conviennent pas, il peuvent être surchargés. <s138>//"userobm_mail_server_id" => ,</s138> <s138>//"userobm_mail_server_id" => ,</s138> ldap.auth.enabled=true ldap.auth.enabled=true It provides many features: Il fournit de nombreuses fonctionnalités : You should use an <a0>extended LDAP schema</a0> (or any users database extension), but this can works with standard attributes. Il est préférable d'utiliser un <a0>schéma LDAP étendu</a0> (ou toute extension de base de données utilisateur), mais ça peut fonctionner avec les attributs standard. Apache logging Journaux d'Apache Clément OUDOT's blog Blog de Clément OUDOT ../../css/screen.css ../../css/screen.css <s131>//"userobm_expresspostal" => ,</s131> <s131>//"userobm_expresspostal" => ,</s131> ipAddr ipAddr the manager (for internal use only) le manager (à usage interne seulement) yum install mod_auth_kerb yum install mod_auth_kerb <s3>{</s3> <s3>{</s3> <a0>DBI</a0> connection string Chaîne de connexion <a0>DBI</a0> To post user's password, you must enable <a0>password storing</a0>. Pour envoyer le mot-de-passe utilisateur, il faut activer le <a0>stockage du mot-de-passe</a0>. documentation:1.4:mrtg documentation:1.4:mrtg → You do not use the new configuration syntax for application list. → La nouvelle syntaxe de configuration de la liste des applications n'est pas utilisée. <a0>SREG</a0> permit the share of 8 attributes: <a0>SREG</a0> permet le partage de 8 attributs : <a0>LL::NG</a0> can also act as <a1>CAS server</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir en <a1>serveur CAS</a1>, ce qui peut servir à connecter deux systèmes <a2>LL::NG</a2>. This mechanism allow to do <a0>SSO</a0> on application with an unsafe link between Handler and the application, but with a safe link with the Memcached server. Ce mécanisme permet de faire du <a0>SSO</a0> sur une application sans lien sécurisé entre l'agent et l'application, mais avec un lien sûr avec le serveur Memcached. Example 2: single table Example 2: single table http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous http://2011.rmll.info/CAS-OpenID-Shibboleth-SAML-un-WebSSO-pour-les-gouverner-tous As this may be a security hole, password store in session is not activated by default Comme ce peut être un trou de sécurité, ce stockage en session n'est pas activé par défaut Liferay Liferay <a0>LL::NG</a0> can act as an OpenID 2.0 Server, that can allow to federate <a1>LL::NG</a1> with: <a0>LL::NG</a0> peut agir comme un serveur OpenID 2.0, ce qui permet de fédérer <a1>LL::NG</a1> avec : <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> <s5>my</s5> <s6>$url</s6> <s7>=</s7> <a8><s9>shift</s9></a8><s10>;</s10> Choose <a0>DBI</a0> type (RDBI, CDBI or <a1>DBI</a1>) Choisir le type <a0>DBI</a0> (RDBI, CDBI or <a1>DBI</a1>) http://oss.oetiker.ch/mrtg/ http://oss.oetiker.ch/mrtg/ Easy to integrate Facile à intégrer You can use LemonLDAP::NG in an heterogeneous world: the authentication portal and the manager can work in any version of Apache even if mod_perl is not compiled, with ModPerl::Registry or not,… or behind any web server able to launch CGIs. On peut utiliser LemonLDAP::NG dans un monde hétérogène : le portail d'authentification et le manager peuvent fonctionner sur n'importe quelle version d'Apache même si mod_perl n'est pas compilé, avec ModPerl::Registry ou non,… ou derrière n'importe quel serveur apte à lancer des CGIs. Google proposes to allow applications to reuse its own authentication process using <a0>OpenID</a0> protocol (it means, if your are connected to Google, other applications can trust Google and let you in). Google propose d'autoriser les applications à réutiliser son propre processus d'authentification en utilisant le protocole <a0>OpenID</a0> (ce qui signifie que si on est connecté à Google, d'autres applications peuvent agréer Google et accepter l'utilisateur). documentation:liferay_4.png documentation:liferay_4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png ../../../media/screenshots/1.1/mailreset/mailreset_step4.png rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 rm -f /etc/lemonldap-ng/auth.keytab msktutil -c -b "cn=COMPUTERS" -s HTTP/auth.example.com -h auth.example.com -k /etc/lemonldap-ng/auth.keytab --computer-name portalsso --upn HTTP/auth.example.com --server ad.example.com --verbose --enctypes 28 dbiAuthTable dbiAuthTable You <s1>must</s1> provide a full <a2>URI</a2> (for example /skins/common/lemonldap-ng_square.png) and use HTTPS on the portal <s1>Il faut</s1> fournir une <a2>URI</a2> complète (par exemple /skins/common/lemonldap-ng_square.png) et utiliser HTTPS pour le portail SSLAuthnLevel SSLAuthnLevel storePassword storePassword ../documentation/current/start.html#authentication_users_and_password_databases ../documentation/current/start.html#authentication_users_and_password_databases Lyon Lyon Access rules values can be: Les valeurs des règles d'accès peuvent être : by <a0>IP</a0> par adresses <a0>IP</a0> ../../documentation/1.4/portal.html ../../documentation/1.4/portal.html <s0>Secret token</s0>: used to check integrity of OpenID response. <s0>Secret token</s0> : utilisé pour vérifier l'integrité des réponses OpenID. a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf a2ensite manager-apache2.conf a2ensite portal-apache2.conf a2ensite handler-apache2.conf a2ensite test-apache2.conf _authChoice _authChoice ../../documentation/1.4/authdbi.html ../../documentation/1.4/authdbi.html 20090301000000Z 20090301000000Z You need to adapt some parameters: Certains paramètres doivent être adaptés : <s15>Deny</s15> from <s16>all</s16> <s15>Deny</s15> from <s16>all</s16> /_detail/icons/tutorials.png?id=documentation /_detail/icons/tutorials.png?id=documentation http://jira.ow2.org/browse/LEMONLDAP-176 http://jira.ow2.org/browse/LEMONLDAP-176 With aptitude Avec aptitude http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ http://video.rmll.info/videos/permalink/v124cb7b8e410b3db28b/ Some-Thing Some-Thing Edit <c0>/etc/krb5.conf</c0>: Editer <c0>/etc/krb5.conf</c0>: OBM_USERPASSWORD OBM_USERPASSWORD http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://www.daasi.de/ldapcon2011/index.php?site=lemonldap http://openid.net/specs/openid-authentication-1_1.html http://openid.net/specs/openid-authentication-1_1.html LDAP performances Performances LDAP Do not forget to save your changes! Ne pas oublier de sauvegarder les changements ! Login History Historique de connexion Secure Token expiration Expiration du jeton sécurisé /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=documentation%3A1.4%3Aresetpassword <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/doc/> http://freeradius.org/mod_auth_radius/ http://freeradius.org/mod_auth_radius/ This is mandatory if you want to use an Apache authentication module, which is run by Apache before showing the LemonLDAP::NG portal page. Obligatoire toutefois si on veut utiliser un module d'authentification Apache, qui sont lancés par Apache avant d'afficher la page du portail LemonLDAP::NG. ../pages/documentation/1.1/mysqlminihowto.html ../pages/documentation/1.1/mysqlminihowto.html Authentication table: where login and password are stored La table d'authentification : où les logins and et mots-de-passe sont stockés As Handlers keep configuration in cache, when configuration change, it should be updated in Handlers. Comme les agents gardent leur configuration en cache, lorsque la configuration est changée elle doit être mise à jour dans les agents. REMOTE_USER environment variable (with local Handler or SetEnvIf trick) la variable d'environnement REMOTE_USER (avec un agent local ou une conversion SetEnvIf) <s152>//"userobm_samba_perms" => ,</s152> <s152>//"userobm_samba_perms" => ,</s152> <s59>//"userobm_kind" => ,</s59> <s59>//"userobm_kind" => ,</s59> Functions parameters: Paramètres de la fonction : zimbraSsoUrl zimbraSsoUrl Modify password if asked Modifie le mot-de-passe si demandé documentation:manager-saml-service-sp-ac.png documentation:manager-saml-service-sp-ac.png /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin /_detail/applications/phpldapadmin_logo.png?id=documentation%3A1.4%3Aapplications%3Aphpldapadmin The upgrade process will also have migrate old configuration files into <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. Le processus de mise-à-jour va également migrer les anciens fichiers de configuration dans <c0>/etc/lemonldap-ng/lemonldap-ng.ini</c0>. <s0>Opening conditions</s0>: rules which are evaluated before granting session. <s0>Conditions d'ouverture</s0> : règles à évaluer avant d'autoriser l'ouverture de session. http://code.google.com/p/redis/ http://code.google.com/p/redis/ Configure LemonLDAP::NG to use SOAP proxy mechanism Configurer LemonLDAP::NG pour utiliser le mécanisme mandataire SOAP http://auth.example.com/openidserver/foo.bar http://auth.example.com/openidserver/foo.bar echo "127.0.0.1 reload.example.com" >> /etc/hosts echo "127.0.0.1 reload.example.com" >> /etc/hosts documentation:1.4:parameterlist documentation:1.4:parameterlist To test this, you can build your own WebID certificate using one of : Pour tester ceci, on peut se construire son propre certificat WebID en utilisant au choix : http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng http://www.slideshare.net/coudot/websso-and-access-management-with-lemonldapng <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> <s60>"userobm_lastname"</s60> <s61>=></s61> <s62>"HTTP_OBM_SN"</s62><s63>,</s63> documentation:1.4:configlocation documentation:1.4:configlocation OpenID OpenID The AuthDemo and UserDBDemo will allow you to log in and get the standard attributes (uid, cn and mail). AuthDemo et UserDBDemo permettent de se connecter et d'avoir les attributs standards (uid, cn et mail). <s147>//"userobm_email_nomade" => ,</s147> <s147>//"userobm_email_nomade" => ,</s147> Password protected transport Transport protégé du mot-de-passe Upgrade Mise à jour How to choose? Comment choisir ? Internal Proxy Proxy interne <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> notifications <s2>(</s2> The database username Le login de la base de données You can find all suitable information here: <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> Les informations appropriées se trouvent ici : <a0>http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html</a0> mailConfirmSubject mailConfirmSubject ../../documentation/1.4/mrtg.html ../../documentation/1.4/mrtg.html /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml /_detail/documentation/manager-saml-sp-new.png?id=documentation%3A1.4%3Aidpsaml Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y Transaction Summary =================================================== Install 82 Package(s) Upgrade 0 Package(s)   Total download size: 18 M Is this ok [y/N]: y <a0>Session explorer</a0> will not work L'<a0>explorateur de session</a0> ne fonctionne pas https://metacpan.org/module/Web::ID::Certificate::Generator https://metacpan.org/module/Web::ID::Certificate::Generator This can be useful to allow an third party application to access a virtual host with users credentials by sending a Basic challenge to it. Ce peut être pratique pour autoriser une application cliente à accéder à un hôte virtuel avec un authentifiant en envoyant un en-tête basique. Download Téléchargement <a0>LL::NG</a0> rely on a session mechanism with the session ID as a shared secret between the user (in <a1>SSO cookie</a1>) and the <a2>session database</a2>. <a0>LL::NG</a0> utilise un mécanisme de session basé sur un identifiant de session secret partagé entre l'utilisateur (dans un <a1>cookie SSO</a1>) et la <a2>base des sessions</a2>. ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> ... <s5><s6></EntityDescriptor<s7>></s7></s6></s5> This is not the case of <a0>Memcached</a0> for example. C'est par exemple le cas de <a0>Memcached</a0>. ../../../media/documentation/manager_access_rule.png ../../../media/documentation/manager_access_rule.png JSON JSON <a0>LL::NG</a0> try to find the user in users database with the given information <a0>LL::NG</a0> tente de trouver l'utilisateur dans la base de données avec l'information donnée ../media/icons/tutorials.png ../media/icons/tutorials.png screenshots:1.1:mailreset:mailreset_step1.png screenshots:1.1:mailreset:mailreset_step1.png pages/documentation.html pages/documentation.html Portal (pastel theme) Portail (thème pastel) ../../documentation/1.4/safejail.html ../../documentation/1.4/safejail.html SSLVar SSLVar Try also to create a global notification (to the uid “allusers”), and connect with any user, the message will be prompted. Essayer alors de créer une notification globale (à l'utilisateur “allusers”), et se connecter avec n'importe quel compte, le message sera affiché. <s0>Path</s0>: keep <c1>^/saml/</c1> unless you have change <a2>SAML</a2> end points suffix in <a3>SAML service configuration</a3>. <s0>Chemin</s0> : laisser <c1>^/saml/</c1> sauf si les suffixes des points d'accès <a2>SAML</a2> ont été modifiés sans la <a3>configuration du service SAML</a3>. <s5>Deny</s5> from <s6>all</s6> <s5>Deny</s5> from <s6>all</s6> Memcached servers Serveurs memcached documentation:dia_dit_roles.png documentation:dia_dit_roles.png This parameter is used by <a0>SAML IDP</a0> to fill the authentication context in authentication responses. Ce paramètre est utilisé par l'<a0>IdP SAML</a0> pour renseigner le contexte d'authentification dans les réponses. condition: condition to display the notification, can use all session variables. condition : condition pour afficher la notification, peut utiliser toutes les variables de session. # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection # You can protect it : # * by Apache itself, # * by the parameter 'protection' which can take one of the following # values : # * authenticate : all authenticated users can access # * manager : manager is protected like other virtual hosts: you # have to set rules in the corresponding virtual host # * rule: <rule> : you can set here directly the rule to apply # * none : no protection casStorage casStorage Use Safe Jail Utiliser la cage sécurisée <a0>URI</a0> of the page which receive POST data (optional if it is the same as the page holding the form) L'<a0>URI</a0> de la page qui reçoit les données POST (optionnel s'il s'agit de la même que celle qui héberge le formulaire) yum install perl-Authen-Radius yum install perl-Authen-Radius → The configuration cannot be loaded. → La configuration ne peut être chargée. You need to get a preauth key from Zimbra server. Il est nécessaire de récupérer une clef de pré-authentification auprès du serveur Zimbra. Specific default values for filters to match AD schema Valeurs spécifiques par défaut des filtres pour correspondre au schéma AD ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> ... <s3><s4></SPSSODescriptor<s5>></s5></s4></s3> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> <s105>"userobm_service"</s105> <s106>=></s106> <s107>"HTTP_OBM_OU"</s107><s108>,</s108> /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_7.png?id=documentation%3A1.4%3Aapplications%3Aliferay As <a0>DBI</a0> is a login/password based module, the authentication level can be: Comme <a0>DBI</a0> est un module de type login/mot-de-passe, le niveau d'authentification peut être : Région Basse-Normandie Région Basse-Normandie Handler stores user data in its cache Il stocke ces données dans son cache documentation/conferences.html documentation/conferences.html To do it, uncomment the <c0>NameVirtualHost</c0> line in <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1>: Pour ce faire, décommenter la ligne <c0>NameVirtualHost</c0> dans <c1>/etc/httpd/conf.d/z-lemonldap-ng-handler.conf</c1> : http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Portal.html You will need to install a Dokuwiki plugin, available on <a0>download page</a0>. Il faut installer le plugin Dokuwiki disponible sur la <a0>page de téléchargement</a0>. Use it Les utiliser Datas concerning the first connection to the portal Données concernant la première connexion au portail value valeur ../pages/documentation/1.4/authradius.html ../pages/documentation/1.4/authradius.html accordeon_dark.png accordeon_dark.png Variable name Nom de Variable <s0>Authentication table</s0>: authentication table name <s0>Table d'authentification</s0> : nom de la table d'authentification Configure user and password Configurer le nom de compte et le mot-de-passe Cookie expiration Expiration du cookie http://perldoc.perl.org/MIME/Base64.html http://perldoc.perl.org/MIME/Base64.html The authentication level given to users authenticated with this module. Le niveau d'authentification accordé aux utilisateurs authentifiés par ce module. ../documentation/current/installdeb.html ../documentation/current/installdeb.html Ministère de la Justice Ministère de la Justice User tries to access a protected application in a different domain L'utilisateur tente d'accéder à une application protégée d'un autre domaine <s0>Handler</s0>: user is redirected if he has no <a1>SSO</a1> cookie (or in <a2>CDA</a2> mode) les <s0>agents (handlers)</s0> : l'utilisateur y est redirigé s'il n'a pas de cookie <a1>SSO</a1> (ou en mode <a2>CDA</a2>) KrbServiceName HTTP/auth.example.com KrbServiceName HTTP/auth.example.com <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> <a9><s10>print</s10></a9> <s11>'<a href="http://test3.example.com/">click here</a>'</s11><s12>;</s12> <s13>}</s13> /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki /_detail/applications/dokuwiki_logo.png?id=documentation%3A1.4%3Aapplications%3Adokuwiki <s0>NameID format</s0>: force NameID format here (email, persistent, transient, etc.). <s0>Format du NameID</s0> : force le format du NameID (email, persistent, transient, etc.). Prerequisites and dependencies Pré-requis et dépendances ../../documentation/1.4/start.html#configuration_database ../../documentation/1.4/start.html#configuration_database SQL session backend Backend de sessions SQL Statistics are displayed when calling the status path on an Handler (for example: <a0>http://test1.example.com/status</a0>). Les statistiques sont affichées lors des appels au chemin du statut sur un agent (par exemple : <a0>http://test1.example.com/status</a0>). <s6>require</s6> Lemonldap::NG::Portal::Menu; <s6>require</s6> Lemonldap::NG::Portal::Menu; [login] is the user login (or any other session information, <s0><a1>see below</a1></s0>) [login] est le nom de connexion (ou tout autre information de session, <s0><a1>voir ci-dessous</a1></s0>) XML menu configuration is deprecated. XML menu configuration is deprecated. login: $uid (uid of the user) login: $uid (uid de l'utilisateur) A value Une valeur Else, you will lock access to Manager and will never access it anymore. Sinon, on risque de verrouiller l'accès au manager et ne plus pouvoir y accéder. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Slave for authentication or users module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Slave</a2>) pour les modules authentification ou utilisateurs. documentation:1.4:activedirectoryminihowto documentation:1.4:activedirectoryminihowto _passwordDB _passwordDB All fields name and values Tous les noms de champs et leurs valeurs LimeSurvey virtual host in Apache Hôte virtuel LimeSurvey dans Apache tree_light.png tree_light.png Documentation Documentation Functioning Fonctionnement start.html start.html <a0>SlideShare</a0> <br1/> <a0>SlideShare</a0> <br1/> The messages are stored with the levels : Les messages sont stockés avec les niveaux : See <a2>Twitter FAQ</a2> on how to do that:. Reportez-vous à la <a2>FAQ Twitter</a2> pour en savoir plus. id id Download the latest version: Télécharger la dernière version : <s0>Build cookie</s0>: build <a1>SSO cookies</a1> with session ID <s0>Construit les cookies</s0>: construit les <a1>cookies SSO</a1> avec l'identifiant de session Documentation below explains how set index on ipAddr and _whatToTrace; Adapt it to configure the index you need. La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace; à adapter pour configurer les index nécessaires. Virtual host in Apache Hôte virtuel dans Apache <a8>mrtg</a8><br9/> <a8>mrtg</a8><br9/> Regular expression for random password Expression rationnelle pour la génération aléatoire des mots-de-passe Create OBM virtual host (for example obm.example.com) in <a0>LL::NG</a0> configuration: <c1>Virtual Hosts</c1> » <c2>New virtual host</c2>. Créer l'hôte virtuel OBM (par exemple obm.example.com) dans la configuration <a0>LL::NG</a0> : <c1>Hôtes virtuels</c1> » <c2>Nouvel hôte virtuel</c2>. Goal But http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 http://www.slideshare.net/xguimard/lemonldapng-opensource-websso-of-the-french-administrations-1394404 Example for MySQL : Exemple pour MySQL : LockPassword LockPassword _session_id _session_id ../../documentation/1.4/idpcas.html ../../documentation/1.4/idpcas.html <s0># Best performance under ModPerl::Registry</s0> <s1># Uncomment this to increase performance of Portal</s1> <Perl> <s0># Meilleures performances sous ModPerl::Registry</s0> <s1># A décommenter pour augmenter les performances du portail</s1> <Perl> <a2>Video</a2> <a2>Vidéo</a2> See full parameters list Voir la liste complète des paramètres <a0>Spring Security</a0> is the new ACEGI name. <a0>Spring Security</a0> est le nouveau nom d'ACEGI. <a0>LL::NG</a0> can easy talk to other authentication systems using <a1>SAML</a1>, OpenID, <a2>CAS</a2>. <a0>LL::NG</a0> peut aisément dialoguer avec d'autres systèmes d'authentification en utilisant <a1>SAML</a1>, OpenID, <a2>CAS</a2>. By default, <a0>DNS</a0> domain is <c1>example.com</c1>. Par défaut, le domaine <a0>DNS</a0> est <c1>example.com</c1>. This documentation explains how configure <a0>SAML</a0> service in <a1>LL::NG</a1>, in particular: Cette documentation explique comment configurer le service <a0>SAML</a0> dans <a1>LL::NG</a1>, en particulier : ../../../media/screenshots/1.1/mailreset/mailreset_step1.png ../../../media/screenshots/1.1/mailreset/mailreset_step1.png dirName dirName <s0>Password</s0>: where change the password <s0>Mots-de-passe</s0>: où changer les mots-de-passe <s0>Name</s0>: display text <s0>Nom</s0> : texte à afficher Configuration backend Stockage de la configuration Open links in new window Ouvre les liens dans une nouvelle fenêtre ../../documentation/1.4/installtarball.html ../../documentation/1.4/installtarball.html You can choose to install only one component by choosing the package <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> or <c2>lemonldap-ng-manager</c2>. On peut n'installer qu'un seul composant en choisissant le paquet <c0>lemonldap-ng-portal</c0>, <c1>lemonldap-ng-handler</c1> ou <c2>lemonldap-ng-manager</c2>. Date of birth Date of birth samlStorageOptions samlStorageOptions useRedirectOnError useRedirectOnError This attribute is set by LemonLDAP::NG when <a1>password was reset by mail</a1> and the user choose to generate the password (default: enabled). Cet attribut est activé par LemonLDAP::NG lorsque <a1>le mot-de-passe a été réinitialisé par mail</a1> et que l'utilisateur a choisi de générer le mot-de-passe (défaut : activé). %_topdir /home/user/build %dist .el5 %rhel 5 %_topdir /home/user/build %dist .el5 %rhel 5 This function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail to use it. Cette fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> <s10><s11><role</s11> <s12>rolename</s12>=<s13>"tomcat"</s13><s14>/></s14></s10> ../pages/documentation/1.1/sqlsessionbackend.html ../pages/documentation/1.1/sqlsessionbackend.html <s0>Xavier GUIMARD</s0>: historic project leader, developer, Debian packager, administrator of big Lemonldap::NG instances <s0>Xavier GUIMARD</s0> : Leader historique du projet, developpeur, empaqueteur Debian, administrateur de grosses installations de Lemonldap::NG ../../documentation/1.4/mysqlminihowto.html ../../documentation/1.4/mysqlminihowto.html ../pages/documentation/1.4/fastcgi.html ../pages/documentation/1.4/fastcgi.html Logout user from current application and redirect it to the menu Déconnecte l'utilisateur de l'application courante et le redirige vers le menu /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla /_detail/applications/bugzilla_logo.png?id=documentation%3A1.4%3Aapplications%3Abugzilla etc. etc... Development Développement mailTimeout mailTimeout accordeon_light.png accordeon_light.png This How To explains how change this default behavior to protect Manager with other rules. Ce document explique comment changer ce comportement par défaut pour protéger le manager avec d'autres règles. yubikeyAuthnLevel yubikeyAuthnLevel <s1>ServerName</s1> test2.example.com   <s1>ServerName</s1> test2.example.com   LWP::UserAgent LWP::UserAgent icons:xfmail.png icons:xfmail.png But sometimes other data are needed (in particular to use <a0>extended functions</a0>): Parfois d'autres données sont nécessaire (en particulier pour utiliser les <a0>fonctions étendues</a0>): Bugzilla virtual host in Apache Hôte virtuel Apache hébergeant Bugzilla If you are protecting Drupal with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Drupal est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. For example: Par exemple : ../../documentation/1.4/logoutforward.html ../../documentation/1.4/logoutforward.html Allow only admin and superadmin roles Autorisé seulement pour les rôles admin et superadmin Get the packages Obtenir ces paquets /_detail/screenshots/1.0/pastel/menu.png?id=screenshots /_detail/screenshots/1.0/pastel/menu.png?id=screenshots logos:sgs_white_small.jpg logos:sgs_white_small.jpg notificationStorageOptions notificationStorageOptions /_detail/logos/logo-ul.png?id=references /_detail/logos/logo-ul.png?id=references http://portal/index.pl/sessions http://portal/index.pl/sessions Go to the Manager and <a0>create a new virtual host</a0> for phpLDAPadmin. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour phpLDAPadmin. <s0>SSLOptions</s0>: set to <c1>+StdEnvVars</c1> to get certificate fields in environment variables <s0>SSLOptions</s0> : mettre à <c1>+StdEnvVars</c1> pour obtenir les champs du certificat dans les variables d'environnement In Manager, go in <c0>General Parameters</c0> » <c1>Authentication modules</c1> and choose Remote for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Remote pour les modules authentification et utilisateurs. User backend Module utilisateurs <a0>Download</a0> the plugin and copy the files in dokuwiki <c1>inc/auth/</c1> directory: <a0>Télécharger</a0> le plugin et le copier dans le répertoire dokuwiki <c1>inc/auth/</c1> : You can modify location of default storage configuration file in configure target: On peut modifier l'emplacement du fichier de configuration du stockage par défaut dans la cible configure : http://httpd.apache.org/docs/2.2/mod/core.html#loglevel http://httpd.apache.org/docs/2.2/mod/core.html#loglevel The access to phpLDAPadmin will be protected by LemonLDAP::NG with specific access rules. L'accès à phpLDAPadmin sera protégé par LemonLDAP::NG avec une règle particulière d'accès. Besides, macros and groups are computed in alphanumeric order, that is, in the order they are displayed in the manager. Egalement, les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Lemonldap::NG::Portal::SharedConf->compile( Lemonldap::NG::Portal::SharedConf->compile( If you configure form replay with <a0>LL::NG</a0>, the Handler will catch configured POST <a1>URL</a1> and send a POST query to the target page (which can be different of the caught page). En configurant le rejeu de formulaire avec <a0>LL::NG</a0>, l'agent intercepte les <a1>URL</a1> configurées et envoie une requête POST à la page cible (qui peut être différente de la première). http://search.cpan.org/perldoc?DBI http://search.cpan.org/perldoc?DBI zimbraAccountKey zimbraAccountKey ../../documentation/1.4/ldapconfbackend.html ../../documentation/1.4/ldapconfbackend.html Authentication portal Portails d'authentification Use SOAP for Lemonldap::NG sessions Utiliser SOAP pour les sessions Lemonldap::NG Not shareable between servers except if used in conjunction with <a0>SOAP configuration backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> <<s0>Location</s0> /var/www/html/index.php> PerlOutputFilterHandler Lemonldap::NG::Handler::Menu </<s1>Location</s1>> documentation:1.4:filesessionbackend documentation:1.4:filesessionbackend Disabling Safe jail Désactiver la cage sécurisée See <a0>Apache::Session::Memcached</a0> for optional parameters. Voir <a0>Apache::Session::Memcached</a0> pour les paramètres optionnels. SAP SAP <a0>CAS</a0>_authnLevel <a0>CAS</a0>_authnLevel When you use <a0>SOAP sessions backend</a0>, it is recommended to use read-only <a1>URL</a1> (<a2>http://portal/index.pl/sessions</a2>). Lorsqu'on utilise le <a0>backend de session SOAP</a0>, il est recommandé d'utiliser l'<a1>URL</a1> en lecture seule (<a2>http://portal/index.pl/sessions</a2>). <s0>Logout rule</s0>: catch OBM logout <s0>Règle logout</s0> : intercepter la déconnexion OBM <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0><s1><EntityDescriptor</s1> <s2>entityID</s2>=<s3>"http://auth.example.com/saml/metadata"</s3><s4>></s4></s0> <s0>Searched attributes</s0>: name(s) of the attribute storing the name of the group, spaces separated (default: cn). <s0>Attributs recherchés</s0> : nom(s) de l'attribut stocké dans le nom du groupe, séparés par des virgules (défaut: cn). /_detail/logos/logo_abuledu.png?id=references /_detail/logos/logo_abuledu.png?id=references And the mail filter is: Et le filtre d'adresse mail est : If so, you can redirect users to a <a0>HTML</a0> page that explain that it is safe to close browser after disconnect. Dans ce cas, il faut rediriger les utilisateurs vers une page <a0>HTML</a0> qui explique qu'il est préférable de clore son navigateur après déconnexion. Connection between Linux and Active Directory - method 2 Connexion entre Linux et Active Directory - méthode 2 <s0>Access control policy</s0>: define if access control should be done on <a1>CAS</a1> service. <s0>Politique de contrôle d'accès</s0> : definit si le contrôle d'accès doit être fait sur le service <a1>CAS</a1>. ../../../media/documentation/lasso.png ../../../media/documentation/lasso.png <a0>CAS</a0> server <a1>URL</a1> <a1>URL</a1> du serveur <a0>CAS</a0> <s0>Identity provider</s0>: <a1>LL::NG</a1> is able to provide identity service using: <s0>Fournisseur d'identité</s0> : <a1>LL::NG</a1> peut fournir un service d'identité en utilisant : AuthBasic Handler Agent AuthBasic singleUserByIP singleUserByIP You need <a0>Auth::Yubikey_WebClient</a0> package. Le paquet <a0>Auth::Yubikey_WebClient</a0> est nécessaire. <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> <s0># SOAP functions for configuration access (disabled by default)</s0> <<s1>Location</s1> /index.pl/config> Connection between Linux and Active Directory - method 1 Connexion entre Linux et Active Directory - méthode 1 Use comment to correct this: Utiliser des commentaires pour corriger ça : Application Programming Interface Interface de programmation <s0>SSLCACertificateFile</s0>: CA certificate to validate client certificates <s0>SSLCACertificateFile</s0> : certificat d'autorité pour valider les certificats clients http://www.yubico.com http://www.yubico.com field champ Cross Domain Authentication Authentification inter-domaines kinit ssokerberos@EXAMPLE.COM kinit ssokerberos@EXAMPLE.COM Imagine you've set your directory schema to store roles as values of ssoRoles, an attribute of the user. On suppose que le schéma d'annuaire a été prévu pour stocker les rôles comme valeur de ssoRoles, un attribut utilisateur. </<s31>Location</s31>> </<s31>Location</s31>> string chaîne APT-GET APT-GET Edit Dokuwiki local configuration (<c0>conf/local.php</c0>) and set <c1>lemonldap</c1> as authentication type: Éditer la configuration locale Dokuwiki (<c0>conf/local.php</c0>) et indiquer <c1>lemonldap</c1> comme type d'authentification : LockDataSource LockDataSource rtyler@badwolf.org rtyler@badwolf.org Other parameters Autres paramètres <s0>Auth-Cn</s0>: $cn <s0>Auth-Cn</s0>: $cn <a0>Integrating applications</a0> in <a1>LL::NG</a1> is easy since its dialog with applications is based on <a2>customizable HTTP headers</a2>. <a0>Integrer des applications</a0> dans <a1>LL::NG</a1> est facile car leur dialogue est basé sur des <a2>en-têtes HTTP personnalisables</a2>. Exported variables are the variables available to <a0>write rules and headers</a0>. Les variables exportées sont des variables disponibles pour <a0>écrire des règles d'accès et des en-têtes</a0>. ~7500 ~7500 The location <a0>URL</a0> end is based on the <c1>service_id</c1> defined in Sympa apache configuration. La fin de l'<a0>URL</a0> est construite à partir du <c1>service_id</c1> defini dans la configuration Apache de Sympa. <s0>Header for user login</s0>: header that contains the user main login <s0>En-tête identifiant l'utilisateur</s0> : en-tête contenant le nom de connexion http://www.yubico.com/yubikey http://www.yubico.com/yubikey Other components needs just a read access. Les autres composants n'ont besoin que d'un accès en lecture. With RPM Avec RPM KrbVerifyKDC <s18>Off</s18> KrbVerifyKDC <s18>Off</s18> Reset password by mail Réinitialisation des mots-de-passe par courriel Session Session cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-password.png?id=screenshots Example: interoperability between 2 organizations Exemple : interoperabilité entre 2 organisations Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' http://lanyrd.com/2011/rmll-2/sffqx/ http://lanyrd.com/2011/rmll-2/sffqx/ This requires to configure <a0>LL::NG</a0> as an <s1><a2>SAML Identity Provider</a2></s1>. Ceci nécessite de configurer <a0>LL::NG</a0> comme <s1><a2>fournisseur d'identité SAML</a2></s1>. <s0>Account type</s0>: for Zimbra this can be name, id or foreignKey (by default: id) <s0>Type de compte</s0> : pour Zimbra, ce peut être name, id ou foreignKey (par défaut : id) Extended functions Fonctions étendues /_detail/icons/flags/fr.png?id=documentation%3Aconferences /_detail/icons/flags/fr.png?id=documentation%3Aconferences http://en.wikipedia.org/wiki/OAuth2 http://en.wikipedia.org/wiki/OAuth2 When receiving the request, the real authentication context will be mapped ton an internal authentication level (see <a1>how configure the mapping</a1>), that you can check to allow or deny session creation. À la réception de la requête, le contexte d'authentification réel est traduit en un niveau d'authentification interne (voir <a1>comment configurer la translation</a1>), utilisable pour accorder ou non la création de session. <a0>Liferay</a0> is an enterprise portal. <a0>Liferay</a0> est un portail d'entreprise. sn sn No <a0>IRC</a0> client? Pas de client <a0>IRC</a0> ? One remote portal that delegates authentication to the second organization (just an other file on the same server) Un portail distant qui délègue l'authentification à la seconde organisation (juste un autre fichier sur le même serveur) <s0>Sessions timeout</s0>: Maximum lifetime of a session. <s0>Durée de vie maximale des sessions</s0> : durée de vie maximale des sessions. ../../../../media/applications/mediawiki_logo.png ../../../../media/applications/mediawiki_logo.png mailreset_step3.png mailreset_step3.png documentation:1.4:applications documentation:1.4:applications css/print.css css/print.css The Manager let you define comments in rules, to order them: Le manager permet de définir des commentaires de règles, ce qui permet de les ordonner : ../pages/documentation/1.1/installrpm.html ../pages/documentation/1.1/installrpm.html Databases Bases de données The <c0>reload</c0> target is managed in Apache configuration, inside a virtual host protected by LemonLDAP::NG Handler, for example: La cible <c0>reload</c0> est gérée dans la configuration d'Apache, dans un hôte virtuel protégé par LemonLDAP::NG Handler, par exemple: AbulEdu AbulEdu Create user and role: Créer un utilisateur et un rôle : ../../documentation/1.4/sessions.html ../../documentation/1.4/sessions.html In other cases which result on impossibility to authenticate user, to retrieve data or to create a session, nothing is stored. Dans les autres cas résultant de l'impossibilité d'authentifier l'utilisateur ou de récupérer les données pour créer la session, rien n'est stocké. index/alphabetical.html index/alphabetical.html Secure reverse-proxies Securiser les proxies inverses <s0>Friendly Name</s0>: optional, <a1>SAML</a1> attribute friendly name. <s0>Nom alternatif</s0>: optionnel, nom alternatif de l'attribut <a1>SAML</a1>. documentation:1.4:portalmenu documentation:1.4:portalmenu Enable LL::NG sites Activer les sites LL::NG loginHistory loginHistory Zimbra virtual host in Apache Hôte virtuel Zimbra dans le manager <s149>//"userobm_vacation_datebegin" => ,</s149> <s149>//"userobm_vacation_datebegin" => ,</s149> For now, ldapgroups contains “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” Pour l'instant, ldapgroups contient “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com” exportedAttr exportedAttr coudot@example.com coudot@example.com ../../../../media/documentation/liferay_1.png ../../../../media/documentation/liferay_1.png Configuration parameters are: Les paramètres de configuration sont : http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime <<s0>VirtualHost</s0> *> <<s0>VirtualHost</s0> *> This tutorial will guide you into a minimal installation and configuration procedure. Ce tutoriel vous guidera pour réaliser une installation et une configuration minimale. Note that if you use FastCGI, you must restart Apache to enable changes. Noter que si on utilise FastCGI, il faut redémarrer Apache pour activer les changements. LemonLDAP::NG configuration is stored in a backend that allows all modules to access it. La configuration de LemonLDAP::NG est stockée dans un backend permettant à tous les modules d'y accéder. In this case, authentication is not a response to an issued authentication request, and we have less control on conditions. Dans ce cas, l'authentification n'est pas une réponse à une requête d'authentification ce qui diminue les capacités de contrôle. MediaWiki virtual host in Manager Hôte virtuel Mediawiki dans le manager remember: '1' (checked box) remember: '1' (une case à cocher) Using LemonLDAP::NG with Active-Directory Utiliser Lemonldap::NG avec Active-Directory <s0>Want Authentication Request Signed</s0>: set to On to require that received authentication request are signed. <s0>Exiger des requêtes d'authentification signées</s0> : mettre à « activer » pour exiger de recevoir des requêtes d'authentification signées. deny deny documentation:1.4:writingrulesand_headers documentation:1.4:writingrulesand_headers Roles as entries in the directory Rôles comme entrée d'annuaire <a0>handlerauthbasic</a0><br1/> <a0>handlerauthbasic</a0><br1/> System Système <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> <s0>$conf</s0><s1>[</s1>authtype<s2>]</s2> <s3>=</s3> lemonldap<s4>;</s4> The request on logout <a0>URL</a0> will be sent after user is disconnected, so you should unprotect this <a1>URL</a1> if it is protected by an <a2>LL::NG</a2> Handler. Cette requête vers l'<a0>URL</a0> de déconnexion est envoyée après la déconnexion de l'utilisateur, il faut donc déprotéger cette <a1>URL</a1> si elle est protégée par un agent <a2>LL::NG</a2>. <a2>mediawiki</a2><br3/> <a2>mediawiki</a2><br3/> ../pages/documentation/1.1/prereq.html ../pages/documentation/1.1/prereq.html Due to a conflict between <a0>LL::NG</a0> form replay and Apache mod_proxy (see <a1>issue</a1>), you cannot use form replay on proxied applications, unless you use <a2>LL::NG</a2> <a3>internal proxy</a3>: Suite à un conflit entre le rejeu de formulaires <a0>LL::NG</a0> et mod_proxy d'Apache (voir les <a1>problèmes</a1>), on ne peut utiliser le rejeu de formulaires sur des applications derrière un proxy sauf si on utilise le <a3>proxy interne</a3> de <a2>LL::NG</a2> : sympaMailKey sympaMailKey qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); qw(delete <s1>header</s1> cache read_from_client cookie <s2>redirect</s2> unescapeHTML)); However, certificate will not be really validated by other <a0>SAML</a0> components (expiration date, common name, etc.), but will just be a public key wrapper. Toutefois, le certificat ne sera pas réellement validé par les autres composants <a0>SAML</a0> (date d'expiration, nom commun, etc.), mais simplement vu comme un conteneur de clef publique. Install it to trust RPMs: L'installer pour certifier les RPMs: Spring Security provides a default <c0>pre-authentication</c0> mechanism that can be used to connect your J2EE application to <a1>LL::NG</a1>. Spring Security fournit un mécansime de <c0>pre-authentification</c0> par défaut qui peut être utilisé pour connecter une application J2EE à <a1>LL::NG</a1>. Secondary portal check if remote session is available. Le portail secondaire vérifie que la session distante est valable. Web::ID::Certificate::Generator Web::ID::Certificate::Generator https://auth.abuledu.net/ https://auth.abuledu.net/ Attributes from user backend Attributs récupérés du module utilisateur install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) install_portal_site (/usr/local/lemonldap-ng/htdocs/portal) employeeNumber employeeNumber Register partner Identity Provider on LemonLDAP::NG Enregistrer le fournisseur d'identité partenaire dans LemonLDAP::NG ../../documentation/1.4/applications/zimbra.html ../../documentation/1.4/applications/zimbra.html <s29>Deny</s29> from <s30>all</s30> <s29>Deny</s29> from <s30>all</s30> ../../documentation/1.4/nosqlsessionbackend.html ../../documentation/1.4/nosqlsessionbackend.html zimbraUrl zimbraUrl Packages are available on the <a0>Download page</a0>. Les paquets sont disponibles sur la <a0>page de téléchargement</a0>. ../pages/documentation/1.1/changeconfbackend.html ../pages/documentation/1.1/changeconfbackend.html <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> <s73>"userobm_datebegin"</s73> <s74>=></s74> <s75>"HTTP_OBM_DATEBEGIN"</s75><s76>,</s76> Session activity timeout requires Handlers to have a write access to sessions database. Le délai d'expiration des sessions nécessite que les agents aient un accès en écriture à la base des sessions. <s0>Display deleted sessions</s0>: display deleted sessions on authentication phase. <s0>Afficher les sessions effacées</s0> : affiche les sessions effacées lors de la phase d'authentification. To achieve this, follow these steps: Pour le réussir, suivre ces étapes : Restrict network access to the redis server. Restreignez l'accès réseau au serveur Redis. ../pages/documentation/1.4/authad.html ../pages/documentation/1.4/authad.html <s29>Allow</s29> from <s30>all</s30> <s29>Allow</s29> from <s30>all</s30> ../../documentation/1.4/configlocation.html#apache ../../documentation/1.4/configlocation.html#apache ../../../media/documentation/manager-saml-idp-metadata.png ../../../media/documentation/manager-saml-idp-metadata.png yubikeyClientID yubikeyClientID dbiTable dbiTable RPM bundle Paquets RPM Active Directory Active Directory documentation:configuration-ldap.png documentation:configuration-ldap.png Google+ Google+ If this regex matches, the line is ignored. Si cette expression régulière correspond, la ligne est ignorée. You have to run this command on Active Directory: Il faut lancer cette commande dans Active Directory: LemonLDAP::NG is highly scalable, so easy to insert behind a load-balancer: LemonLDAP::NG est hautement scalable, donc facile à insérer derière un répartisseur de charge : Core team Équipe prinicpale ../pages/documentation/1.1/status.html ../pages/documentation/1.1/status.html <s0>Force UTF-8</s0>: this will force UTF-8 conversion of attributes values collected from IDP. <s0>Forcer l'UTF-8</s0> : force la conversion UTF-8 des valeurs d'attributs collectées depuis l'IDP. ../documentation/current/authdemo.html ../documentation/current/authdemo.html LemonLDAP::NG configuration can be managed in a local file with <a0>INI format</a0>. La configuration LemonLDAP::NG peut être gérée par un fichier local au <a0>format INI</a0>. <s18>DirectoryIndex</s18> index.pl index.html <s18>DirectoryIndex</s18> index.pl index.html Comment Commentaire http://search.cpan.org/~mmims/Net-Twitter/ http://search.cpan.org/~mmims/Net-Twitter/ /_detail/icons/flags/fr.png?id=press /_detail/icons/flags/fr.png?id=press There are no <e0>global</e0> authorizations except the right to open a session in the portal. Il n'y a pas d'autorisation <e0>globale</e0>, à l'exception de la règle accordant l'ouverture de session dans le portail. <a2>Lanyrd</a2> <a2>Lanyrd</a2> If you use TLS, you can set any of the <a0>Net::LDAP</a0> start_tls() sub like <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. En utilisant TLS, il est possible d'utiliser toutes les options de la fonction start_tls() <a0>Net::LDAP</a0> telle <c1>ldap+tls://server/verify=none&capath=/etc/ssl</c1>. Logs settings Journalisation all together (based on user <a0>choice</a0>, <a1>rules</a1>, …) tous en même temps (basé sur le <a0>choix</a0> utilisateur, les <a1>règles</a1>, …) <s0><a1>API</a1> client ID</s0>: <a2>API</a2> client ID from Yubico <s0>Identifiant client de l'<a1>API</a1></s0> : identifiant client de l'<a2>API</a2> obtenu auprès de Yubico <a30>authopenid</a30><br31/> <a30>authopenid</a30><br31/> Not shareable between servers except if used in conjunction with <a0>SOAP session backend</a0> or with a shared file system (NFS,…). Pas partageable entre serveurs sauf si utilisé avec le <a0>backend de configuration SOAP</a0> ou un système de partage de fichiers (NFS,…). <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> <s62><s63></property<s64>></s64></s63></s62> <s65><s66></bean<s67>></s67></s66></s65>   <s68><s69><security:authentication-manager</s69> <s70>alias</s70>=<s71>"authenticationManager"</s71> <s72>/></s72></s68> OpenLDAP schema Schéma OpenLDAP dbiAuthnLevel dbiAuthnLevel _user _user <s13>Allow</s13> from <s14>all</s14> <s13>Allow</s13> from <s14>all</s14> Lemonldap::NG::Portal Lemonldap::NG::Portal See <a0>performances</a0> to know how to use macros and groups in rules. Voir <a0>performances</a0> pour comprendre l'intérêt des macros et groupes dans les règles. Manager tree autoClose Auto-fermeture de l'arbre du manager ../../documentation/1.3/upgrade.html ../../documentation/1.3/upgrade.html You have to create the table by yourself: Il faut créer soi-même la table : <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> <s39>"headers_map"</s39> <s40>=></s40> <a41><s42>Array</s42></a41><s43>(</s43> ../pages/documentation/1.4/authbrowserid.html ../pages/documentation/1.4/authbrowserid.html Lock files are stored in another directory. Les fichiers verrous sont stockés dans un autre répertoire. a15a18c8bb17e6f67886a9af1898c018b9f5a072 a15a18c8bb17e6f67886a9af1898c018b9f5a072 <a0>Create a protocol proxy</a0> <e1>(<a2>SAML</a2> to OpenID, <a3>CAS</a3> to <a4>SAML</a4> ,…)</e1> <a0>Créer un proxy de protocoles </a0> <e1>(<a2>SAML</a2> vers OpenID, <a3>CAS</a3> vers <a4>SAML</a4> ,…)</e1> See <a0>Redis session backend</a0>. Voir <a0>backend de session Redis</a0>. documentation/current/prereq.html#apt-get documentation/current/prereq.html#apt-get contact contact Enable SSL in Apache Activer SSL dans Apache </<s19>IfModule</s19>> </<s19>IfModule</s19>> documentation:googleapps-ssoconfig.png documentation:googleapps-ssoconfig.png <s0>auto</s0>: display only if the user can access it <s0>auto</s0> : n'afficher que si l'utilisateur peut y accéder <s0>New window</s0>: open menu links in new window <s0>Nouvelle fenêtre</s0> : ouvre les liens du menu dans de nouvelles fenêtres ../../../documentation/1.4/writingrulesand_headers.html#headers ../../../documentation/1.4/writingrulesand_headers.html#headers Optional attributes: Attributs optionnels : ../../documentation/1.4/authradius.html ../../documentation/1.4/authradius.html Main <a0>DNS</a0> domain Domaine <a0>DNS</a0> principal These rules can be set trough Manager: <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Modules activation</c3>. Ces règles peuvent être modifiées via le manager : <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Activation des modules</c3>. Frameworks Frameworks http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm http://search.cpan.org/~speeves/Apache2-AuthenNTLM-0.02/AuthenNTLM.pm <s135>//"userobm_web_all" => ,</s135> <s135>//"userobm_web_all" => ,</s135> 0 if not 0 sinon Yubikey public ID size Taille de l'ID public Yubikey The team L'équipe /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart /_detail/icons/utilities.png?id=documentation%3A1.4%3Astart managerTreeJqueryCss managerTreeJqueryCss Wordpress, GLPI, OBM, Dokuwiki, … Wordpress, GLPI, OBM, Dokuwiki, … <a1>LL::NG</a1> can restrict this: <a1>LL::NG</a1> peut restreindre cet usage : Auth-Cn Auth-Cn Users: will not collect any data (but you can still register environment variables in session) Utilisateurs : ne collecte aucune donnée (mais il est possible d'enregistrer des variables d'environement dans la session) If no binding defined, the default binding in IDP metadata will be used. Si aucune méthode n'est définie, la méthode par défaut des métadatas de l'IDP sera utilisée. <a0>LL::NG</a0> Manager has a session explorer module that can be used to browse opened sessions: Le gestionnaire de <a0>LL::NG</a0> dispose d'un explorateur de sessions qui peut être utilisé pour parcourir sessions ouvertes : You will configure Zimbra virtual host like other <a0>protected virtual host</a0> but you will use Zimbra Handler instead of default Handler. Configurer l'hôte virtuel Zimbra comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser le handler Zimbra au lieu du handler par défaut. ../../documentation/1.4/idpsaml.html ../../documentation/1.4/idpsaml.html <s15>require</s15> valid-<s16>user</s16> <s15>require</s15> valid-<s16>user</s16> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> <s123>"userobm_zipcode"</s123> <s124>=></s124> <s125>"HTTP_OBM_POSTALCODE"</s125><s126>,</s126> ../pages/documentation/1.1/ldapconfbackend.html ../pages/documentation/1.1/ldapconfbackend.html <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <s0>$auth_kind</s0> <s1>=</s1> <s2>'LemonLDAP'</s2><s3>;</s3>   <s4>$lemonldap_config</s4> <s5>=</s5> <a6><s7>Array</s7></a6><s8>(</s8> <a0>CAS</a0> attribute for login Attribut <a0>CAS</a0> pour le nom de connexion The <a0>DBI</a0> string La chaîne <a0>DBI</a0> using own database (<a0>LDAP</a0>, <a1>SQL</a1>, …) utilisant une base de données propre (<a0>LDAP</a0>, <a1>SQL</a1>, …) Zimbra account session key Clef de session de compte Zimbra ../../../../media/applications/liferay_logo.png ../../../../media/applications/liferay_logo.png Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q Mot de passe pour l'utilisateur lemonldap-ng : [...] lemonldap-ng=> create table sessions ( id char(32) not null primary key, a_session text ); lemonldap-ng=> q <s0>Double cookie for single session</s0>: as same, two cookies are delivered, but only one session is written in session database <s0>Double cookie pour session unique</s0> : de même, deux cookies sont délivrés, mais une seule session n'est écrite dans la base de données ASF-WS ASF-WS phpLDAPadmin virtual host in Apache Hôte virtuel phpLDAPadmin dans le manager In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose WebID for authentication module. Dans le manager, aller dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisir WebID comme module d'authentication. <a0>CAS</a0> issuer Fourniture d'identité <a0>CAS</a0> documentation:1.4:applications:obm documentation:1.4:applications:obm AuthApache authentication Authentification AuthApache unicode2iso($name) unicode2iso($nom) Timestamp of last authentication time Date et heure (timestamp) de la dernière authentification ~3 ~3 ~5 ~5 YUM YUM <s0>Extracted certificate field</s0>: field of the certificate affected to $user internal variable <s0>Champ extrait du certificat</s0> : champ du certificat affecté à la variable interne $user Examples with a <a0>configured header</a0> named 'Auth-User': Exemples avec un <a0>en-tête configuré</a0> nommé 'Auth-User': <s0>Location</s0>: Access Point for <a1>SSO</a1> request. <s0>Location</s0>: Point d'accès pour les requêtes <a1>SSO</a1>. documentation:1.4:authopenid documentation:1.4:authopenid Mini howtos Mini howtos Screenshots Captures d'écran LDAP LDAP /_detail/logos/logo_linagora.png?id=references /_detail/logos/logo_linagora.png?id=references <a0>LL::NG</a0> can use federation protocols (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) independently to: <a0>LL::NG</a0> peut utiliser des protocoles de fédération (<a1>SAML</a1>, <a2>CAS</a2>, OpenID) indépendamment pour : /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa /_detail/applications/sympa_logo.png?id=documentation%3A1.4%3Aapplications%3Asympa Lemonldap::NG::Handler::SharedConf: No cookie found Lemonldap::NG::Handler::SharedConf: No cookie found <s3># Uncomment this line if you use Lemonldap::NG menu</s3> <s3># Décommentez cette ligne si vous utilisez le menu Lemonldap::NG</s3> ../../media/documentation/lemonldapng-sso.png ../../media/documentation/lemonldapng-sso.png iso2unicode iso2unicode → You use the Apache authentication backend, but Apache is not or bad configured (no REMOTE_USER send to LemonLDAP::NG). → Le backend d'authentification Apache est utilisé, mais Apache n'est pas ou mal configuré (la variable d'environnement REMOTE_USER n'est pas envoyée à LemonLDAP::NG). <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>You have new authorizations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>You have been granted to access to appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>You have been granted to access to appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>I know that I can access to appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>I know that I can access to appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>This is your first access on this system<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Be a nice user and do not break it please.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Of course I am not evil!<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> <s0><s1><?xml</s1> <s2>version</s2>=<s3>"1.0"</s3> <s4>encoding</s4>=<s5>"UTF-8"</s5> <s6>standalone</s6>=<s7>"no"</s7><s8>?></s8></s0> <s9><s10><root<s11>></s11></s10></s9> <s12><s13><notification</s13> <s14>uid</s14>=<s15>"foo.bar"</s15> <s16>date</s16>=<s17>"2009-01-27"</s17> <s18>reference</s18>=<s19>"ABC"</s19><s20>></s20></s12> <s21><s22><title<s23>></s23></s22></s21>Vous avez de nouvelles autorisations<s24><s25></title<s26>></s26></s25></s24> <s27><s28><subtitle<s29>></s29></s28></s27>Application 1<s30><s31></subtitle<s32>></s32></s31></s30> <s33><s34><text<s35>></s35></s34></s33>Vous êtes autorisé à accéder à appli-1<s36><s37></text<s38>></s38></s37></s36> <s39><s40><subtitle<s41>></s41></s40></s39>Application 2<s42><s43></subtitle<s44>></s44></s43></s42> <s45><s46><text<s47>></s47></s46></s45>Vous êtes autorisé à accéder à appli-2<s48><s49></text<s50>></s50></s49></s48> <s51><s52><subtitle<s53>></s53></s52></s51>Acceptation<s54><s55></subtitle<s56>></s56></s55></s54> <s57><s58><check<s59>></s59></s58></s57>Je reconnais savoir que je peux accéder à appli-1 <s60><s61></check<s62>></s62></s61></s60> <s63><s64><check<s65>></s65></s64></s63>Je reconnais savoir que je peux accéder à appli-2 <s66><s67></check<s68>></s68></s67></s66> <s69><s70></notification<s71>></s71></s70></s69> <s72><s73><notification</s73> <s74>uid</s74>=<s75>"allusers"</s75> <s76>date</s76>=<s77>"2009-01-27"</s77> <s78>reference</s78>=<s79>"disclaimer"</s79> <s80>condition</s80>=<s81>"$ipAddr =~ /^192/"</s81><s82>></s82></s72> <s83><s84><title<s85>></s85></s84></s83>Ceci est votre premier accès à ce système<s86><s87></title<s88>></s88></s87></s86> <s89><s90><text<s91>></s91></s90></s89>Soyez sage et ne le cassez pas.<s92><s93></text<s94>></s94></s93></s92> <s95><s96><check<s97>></s97></s96></s95>Bien sûr, je ne suis pas méchant !<s98><s99></check<s100>></s100></s99></s98> <s101><s102></notification<s103>></s103></s102></s101> <s104><s105></root<s106>></s106></s105></s104> So he is “user” on application “BBB” and “admin” on application “<a0>AAA</a0>”. Ainsi, il est “user” sur l'application “BBB” et “admin” sur l'application “<a0>AAA</a0>”. Main features Fonctionnalités principales documentation:manager-saml-idp-list.png documentation:manager-saml-idp-list.png ../../documentation/1.4/activedirectoryminihowto.html ../../documentation/1.4/activedirectoryminihowto.html <a0>RBAC</a0> stands for Role Based Access Control. <a0>RBAC</a0> signifie contrôle d'accès basé sur les rôles (Role Based Access Control). IRC IRC 0_bad 0_bad <s8>require</s8> SOAP::Lite; </Perl> <s8>require</s8> SOAP::Lite; </Perl> It means that if you modify some settings here, you will have to share again the metadata with other providers. Ceci signifie que si vous modifiez quelque chose ici, vous devez ré-exporter les metadatas aux autres fournisseurs. convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini convertConfig --current=/etc/lemonldap-ng/lemonldap-ng.ini --new=/new/lemonldap-ng.ini applications:phpldapadmin_logo.png applications:phpldapadmin_logo.png For application BBB: Pour l'application BBB : Notification format Format des notifications css/all.css css/all.css cd myskin ln -s ../pastel/*.tpl . cd myskin ln -s ../pastel/*.tpl . $_password $_password mailUrl mailUrl documentation:1.4:exportedvars documentation:1.4:exportedvars http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re http://www.jdll.org/content/lemonldapng-100-en-avant-premi%C3%A8re /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=documentation%3A1.4%3Aresetpassword References are listed in alphabetic order. Les références sont listées dans l'ordre alphabétique. Do this in the control panel or in the configuration file: Faire ceci dans le panneau de contrôle ou dans le fichier de configuration : <a8>authbasic</a8><br9/> <a8>authbasic</a8><br9/> icons:warehause.png icons:warehause.png <s0># boolean macro</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># other macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Use a boolean macro in a rule</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Use a string macro in a HTTP header</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> <s0># macro booléenne</s0> isAdmin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8> <s9># autre macro </s9> displayName <s10>-></s10> <s11>$givenName</s11><s12>.</s12><s13>" "</s13><s14>.</s14><s15>$surName</s15>   <s16># Utiliser une macro booléenne dans une règle</s16> <s17>^/</s17>admin <s18>-></s18> <s19>$isAdmin</s19> <s20># Utiliser une macro chaîne dans un en-tête HTTP</s20> Display<s21>-</s21>Name <s22>-></s22> <s23>$displayName</s23> ../../documentation/1.4/memcachedsessionbackend.html ../../documentation/1.4/memcachedsessionbackend.html If your function is not compliant with <a0>Safe jail</a0>, you will need to disable the jail. Si la fonction n'est pas compatible avec la <a0>cage saine</a0>, il faut désactiver la mise en cage. Backend choice by users Backend choisit par l'utilisateur Data to store as REMOTE_USER (used also in Apache logs) Donnée à utiliser comme REMOTE_USER (également utilisée dans les journaux d'Apache) specification spécification An <a0>enterprise Google Apps account</a0> Un <a0>compte applicatif Google entreprise</a0> secret secret Just set the <a3>LL::NG</a3> Handler <a4>IP</a4> on this attribute in order to add more security. Indiquer seulement l'adresse <a4>IP</a4> du handler <a3>LL::NG</a3> dans cet attribut pour ajouter plus de sécurité. <s0>info</s0> for user actions <s0>info</s0> pour les actions utilisateurs documentation:1.4:notifications documentation:1.4:notifications Web based for normal users: Basé sur du web pour les utilisateurs normaux : /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal /_detail/applications/drupal_logo.png?id=documentation%3A1.4%3Aapplications%3Adrupal <s0>HTTPS</s0>: use https as protocol <s0>HTTPS</s0> : utilise https comme protocole This objectClass is included in every core schemas. Cet objectClass est inclus dans tous les schémas de base. <s0>Display</s0>: <s0>Affichage</s0> : <a0>DBI</a0> UserDB table Table UserDB <a0>DBI</a0> /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-testpage.png?id=screenshots install_manager_libs install_manager_libs See <a0>mod_proxy</a0> and <a1>mod_rewrite</a1> documentation for more about configuring Apache reverse-proxies. Voir les documentation de <a0>mod_proxy</a0> et <a1>mod_rewrite</a1> pour plus d'information sur la configuration du proxy inverse d'Apache. This can happend when you use lmConfigEditor or launch <s0>cron files</s0> with a different user than Apache process. Ceci peut arriver lorsqu'on utilise lmConfigEditor ou lorsqu'on lance les <s0>fichiers cron</s0> avec un utilisateur différent de celui du processus Apache. <a2>IBM Lotus iNotes</a2> <a2>IBM Lotus iNotes</a2> Sympa Handler parameters Paramètres du handler Sympa <a4>Joind.in</a4> <a4>Joind.in</a4> mailOnPasswordChange mailOnPasswordChange <s24>}</s24><s25>,</s25> <s24>}</s24><s25>,</s25> http://mail.ow2.org/wws/arc/lemonldap-ng-dev http://mail.ow2.org/wws/arc/lemonldap-ng-dev Syslog Syslog ../../documentation/1.4/start.html#sessions_database ../../documentation/1.4/start.html#sessions_database mailFrom mailFrom <s0>Password</s0>: Connection password <s0>Mot-de-passe</s0> : mot-de-passe du compte de connexion The difference with <a0>remote authentication</a0> is that the client will never be redirect to the main <a1>LL::NG</a1> portal. La différence avec <a0>l'authentification "Remote"</a0> est que le client n'est jamais redirigé vers le portail <a1>LL::NG</a1> principal. multi multi $uidR $uidR If secured cookie is enabled, the portal <a3>URL</a3> <s4>must</s4> be HTTPS. Si le cookie sécurisé est activé, l'<a3>URL</a3> du portail <s4>doit</s4> être en HTTPS. </<s11>Directory</s11>>   </<s11>Directory</s11>>   To change it: Pour le changer : ../pages/documentation/1.1/extendedfunctions.html ../pages/documentation/1.1/extendedfunctions.html Logs Journaux The LDIF view of such entry can be: La vue LDIF d'une telle entrée ressemble à : Menu modules activation rules les règles d'activation des modules du menu http://perldoc.perl.org/functions/join.html http://perldoc.perl.org/functions/join.html Password Mot-de-passe If you want to become member of <a1>LL::NG</a1> team ask to <a2>lemonldap-ng-dev@ow2.org</a2>. SI vous souhaitez devenir membre de l'équipe <a1>LL::NG</a1> demandez-le également à <a2>lemonldap-ng-dev@ow2.org</a2>. This script is called <c0>lemonldap-ng-cli</c0> and is stored in the LemonLDAP::NG bin/ directory, for example /usr/share/lemonldap-ng/bin: Ce script se nomme <c0>lemonldap-ng-cli</c0> et se trouve dans le répertoire bin/ de LemonLDAP::NG, par exemple /usr/share/lemonldap-ng/bin: <s85>//"userobm_hidden" => ,</s85> <s85>//"userobm_hidden" => ,</s85> First steps Premiers pas ../../documentation/1.4/applications/sympa.html ../../documentation/1.4/applications/sympa.html Configuration of Apache virtual host Configuration de l'hôte virtuel Apache http://search.cpan.org/perldoc?DBD::Oracle http://search.cpan.org/perldoc?DBD::Oracle for index.pl, set it in new(): pour index.pl, le mettre dans new() : ../../../media/applications/spring_logo.png ../../../media/applications/spring_logo.png Header En-tête Protect only the administration pages Protéger seulement la page d'administration <s0>faketicket</s0>: if the user has no access, a fake ticket is built, and the user is redirected to <a1>CAS</a1> service. <s0>faketicket</s0> : si l'utilisateur n'a pas accès, un faux ticket est construit, et l'utilisateur est redirigé vers le service <a1>CAS</a1>. /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-sso.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <s94>//"userobm_mobile" => ,</s94> <s94>//"userobm_mobile" => ,</s94> Tarball Archive documentation:1.4:applications:dokuwiki documentation:1.4:applications:dokuwiki You can add a link in <a0>application menu</a0> to display Google Apps to users. Il est possible d'ajouter un lien dans le <a0>menu application</a0> pour afficher Google Apps. http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz http://forge.ow2.org/svnsnapshots/lemonldap-svn-latest.tar.gz Hide old password in reset form Masquer l'ancien mot-de-passe dans le formulaire de réinitialisation userDB userDB documentation:1.0:ldapconfbackend documentation:1.0:ldapconfbackend /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-metadata.png?id=documentation%3A1.4%3Aauthsaml User found from login process Nom d'utilisateur trouvé dans le processus d'authentification aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) aaaRole => join(' || ', (map {/uid=(.*),ou=aaa.*/} (grep{/ou=aaa/} split(';',$ssoRoles))) The normal portal has a link included in the authentication form pointing to the remote portal for the users of the other organization Le portail normal dispose d'un lien dans le formulaire d'authentification pointant vers le portail destiné aux utilisateurs de l'autre organisation Follow <a0>LDAP session backend</a0> doc Suivre la documentation <a0>backend de sessions LDAP</a0> ../../documentation/1.4/rbac.html ../../documentation/1.4/rbac.html Firefox has detected that the server is redirecting the request for this address in a way that will never complete Firefox has detected that the server is redirecting the request for this address in a way that will never complete <s0>Persistent</s0>: NameID is restored from previous sessions <s0>Persistent</s0>: le NameID est restoré depuis la session précédente ../../documentation/1.4/applications/phpldapadmin.html ../../documentation/1.4/applications/phpldapadmin.html The user will be redirected on portal <a0>URL</a0> with error in the <c1>lmError</c1> <a2>URL</a2> parameter. L'utilisateur sera redirigé vers l'<a0>URL</a0> du portail avec une erreur dans le paramètre <c1>lmError</c1> de l'<a2>URL</a2>. <s114>//"userobm_address3" => ,</s114> <s114>//"userobm_address3" => ,</s114> Test notification Tester les notifications In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose <a2>CAS</a2> for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>CAS</a2> pour l'authentification. ../../../media/applications/glpi_logo.png ../../../media/applications/glpi_logo.png Then restart Apache. Redémarrer Apache ensuite. Note that this feature is interesting only for the Lemonldap::NG systems protecting a high number of applications Notez que cette fonctionnalité n'est intéressante que pour les systèmes Lemonldap::NG protégeant un grand nombre d'applications vi /root/SSOExtensions.pm vi /root/SSOExtensions.pm http://search.cpan.org/perldoc?CGI http://search.cpan.org/perldoc?CGI If not authenticated (or authentication is forced) try to find it (userDB module) and to authenticate it (auth module), create session, calculate groups and macros and store them. Si ce n'est pas le cas (ou si l'authentification est forcée) tente de le trouver (module userDB) et de l'authentifier (module d'authentification), crée la session, calcule les groupes et macros et les stocke <s0>General Parameters</s0>: authentication modules, portal, etc. <s0>Paramètres généraux</s0> : modules d'authentification, portail, etc... <s0>CDBI</s0> : very simple storage <s0>CDBI</s0> : stockage très simple Find other documentation on <a0>Firewall Services site</a0>. Une autre documentation est disponible sur <a0>Firewall Services site</a0>. documentation:1.4:idpopenid documentation:1.4:idpopenid <a14>portalmenu</a14><br15/> <a14>portalmenu</a14><br15/> How it works Fonctionnement http://auth.example.com/?logout=1 http://auth.example.com/?logout=1 In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Proxy for authentication and users. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir Proxy pour les modules authentification et utilisateurs. http://lanyrd.com/2012/ow2-con12/scbcwz/ http://lanyrd.com/2012/ow2-con12/scbcwz/ To bypass this, follow the documentation of <a0>AuthApache module</a0> Pour outrepasser ceci, suivre la documentation du <a0>module AuthApache</a0> radiusServer radiusServer Apache::Session::Browseable::MySQL doesn't use locks so performances are keeped. Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances. <s3>RewriteRule</s3> ^/openidserver/.* /index.pl <s3>RewriteRule</s3> ^/openidserver/.* /index.pl To do this, go in Manager > General Parameters > Advanced Parameters > Security > Use Safe Jail and disable it. Pour ce faire, aller dans le manager > Paramètres généraux > Paramètres avancés > Sécurité > Utiliser la cage sécurisée et la désactiver. <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> <s47>require_once</s47><s48>(</s48><s49>"<s50>$IP</s50>/extensions/HttpAuthPlugin.php"</s49><s51>)</s51><s52>;</s52> ../../documentation/1.4/authslave.html ../../documentation/1.4/authslave.html Add on your <c0>server.xml</c0> file a new valve entry like this (in host section): Ajouter dans le fichier <c0>server.xml</c0> une nouvelle valve comme ci-dessous (dans la section host): http://perldoc.perl.org/Safe.html http://perldoc.perl.org/Safe.html After logout process, the user is redirected on portal, or on a configured <a0>URL</a0>. Après déconnexion, l'utilisateur est redirigé vers une <a0>URL</a0> configurée ou vers le portail. See also Voir aussi OBM_GROUPS OBM_GROUPS Third step: provide the role to the application. Troisième étape : fournir le rôle à l'application. ../../documentation/1.4/soapservices.html ../../documentation/1.4/soapservices.html One standard portal Un portail standard It returns 1 if this match, 0 else. Elle retourne 1 si c'est bon, 0 sinon. Configure Liferay virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Liferay comme n'importe quel autre <a0>hôte virtuel protégé</a0>. To install them on system: Pour les installer sur le système : ../../documentation/1.4/soapsessionbackend.html ../../documentation/1.4/soapsessionbackend.html In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Facebook for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Facebook comme module d'authentication. Twitter Twitter Password is not a common attribute. Le mot-de-passe n'est pas un attribut commun. caFile caFile /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/documentation/manager-authchoice.png?id=documentation%3A1.4%3Aauthchoice /_detail/screenshots/1.0/pastel/portal.png?id=screenshots /_detail/screenshots/1.0/pastel/portal.png?id=screenshots ldapPort ldapPort <a0>DokuWiki</a0> is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. <a0>DokuWiki</a0> est un wiki simple et standard principalement destiné à la création de documents de toute nature. ldapRaw ldapRaw Exported variables in the Manager Variables exportées dans le manager sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl documentation:manager-formreplay-newdata.png documentation:manager-formreplay-newdata.png Perl Perl http://lanyrd.com/2012/solutionslinux/sryym/ http://lanyrd.com/2012/solutionslinux/sryym/ https://auth.example.com/ https://auth.example.com/ Installation on RedHat/CentOS Installation sur RedHat/CentOS <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> RDBI</s5> <s6>dbiChain</s6> <s7>=</s7><s8> DBI:mysql:database=lemonldap-ng</s8><s9>;host=1.2.3.4</s9> <s10>dbiUser</s10> <s11>=</s11><s12> lemonldap</s12> <s13>dbiPassword</s13> <s14>=</s14><s15> password</s15> <s16>; optional</s16> <s17>dbiTable</s17> <s18>=</s18><s19> mytablename</s19> Go to the Manager and <a0>create a new virtual host</a0> for Dokuwiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Dokuwiki. Option <c0>–enctypes</c0> requires msktutil > 0.4 L'option <c0>–enctypes</c0> requiert msktutil > 0.4 ../../../media/applications/sympa_logo.png ../../../media/applications/sympa_logo.png The <a0>LDAP schema extension</a0> can be used to store this value. L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker cette valeur. CAS identity provider Fournisseur d'identité CAS Notification activation Activation des notifications mail mail New Service Provider Nouveau fournisseur de service To make the portal start faster when the server is relaunched, add those lines in Apache configuration file (as described in portal-apache2.conf): Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf): <s0>Display other sessions </s0>: display other sessions on authentication phase, with a link to delete them. <s0>Afficher les autres sessions</s0> : affiche les autres sessions ouvertes lors de la phase d'authentification avec un lien pour les effacer. Last name Nom When you know the key of the variable, you just have to prefix it with the dollar sign to use it, for example to test if <c0>uid</c0> variable match <c1>coudot</c1> : En connaissant le nom d'une variable, il suffit de la préfixer avec un signe dollar pour l'utiliser, par exemple pour savoir si la variable <c0>uid</c0> contient <c1>coudot</c1> : For application <a0>AAA</a0>: Pour l'application AAA : Crypt::OpenSSL::X509 Crypt::OpenSSL::X509 http://www.liferay.com/ http://www.liferay.com/ Key (<a0>LL::NG</a0> name) Clef (nom <a0>LL::NG</a0>) <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> <s26>Order</s26> <s27>deny</s27>,<s28>allow</s28> Upgrade to 1.0 Mise à jour vers la version 1.0 Upgrade to 1.1 Mise à jour vers la version 1.1 ../../../css/screen.css ../../../css/screen.css Upgrade to 1.2 Mise à jour vers la version 1.2 Upgrade to 1.3 Mise à jour vers la version 1.3 LemonLDAP::NG provides a proxy that can replace the use of Apache mod_proxy. LemonLDAP::NG fournit un proxy qui peut remplacer l'utilisation de mod_proxy d'Apache. <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> <s119>"userobm_town"</s119> <s120>=></s120> <s121>"HTTP_OBM_L"</s121><s122>,</s122> The SP name is asked, enter it and click OK. Le nom de SP est demandé, entrer-le et cliquer sur OK. To use this feature only locally, edit <c0>lemonldap-ng.ini</c0> in section [all]: Pour utiliser cette fonctionnalité seulement localement, éditer <c0>lemonldap-ng.ini</c0> dans la section [all]: To configure sessions, go in Manager, <c0>General Parameters</c0> » <c1>Sessions</c1>: Pour configurer les sessions, aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Sessions</c1> : ../media/logos/logo_rbn.png ../media/logos/logo_rbn.png it may be the <e3>backbone</e3> of a heterogeneous architecture. il peut être le <e3>pivot</e3> d'une architecture hétérogène. Go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Custom functions</c2> and set: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Fonctions personnalisées</c2> et indiquer : Macros and groups are calculated during authentication process by the portal: Les macros et les groupes sont calculées pendant le processus d'authentification par le portail : Enable <a0>LL::NG</a0> sites in Apache: Activer les sites <a0>LL::NG</a0> dans Apache : <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> File</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> userPivot userPivot A mail with a token is sent to user Un courriel avec une valeur est envoyé à l'utilisateur startTime startTime ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab ktpass -princ HTTP/auth.example.com@EXAMPLE.COM -mapuser EXAMPLE.COM\ssokerberos -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapOp set +DesOnly -pass complicatedpassword -out c:\auth.keytab globalStorage globalStorage This parameter is set by the portal and use javascript to get the connected user timezone. Ce paramètre est géré par le portail et utilise javascript pour obtenir le fuseau de l'utilisateur connecté. Remember to change the access rule in Manager virtual host to allow new administrators. Ne pas oublier de changer la règle d'accès à l'hôte virtuel du manager pour autoriser les nouveaux administrateurs. fullname fullname ../../documentation/1.4/configlocation.html ../../documentation/1.4/configlocation.html ../../../media/icons/neotux.png ../../../media/icons/neotux.png In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Database (<a2>DBI</a2>) for authentication, users and/or password modules. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir "base de données" (<a2>DBI</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. Notifications system Systèmes de notification Then, go in <c0>Radius parameters</c0>: Ensuite, aller dans les <c0>paramètres Radius</c0>: if a user can access directly to the hidden application, it can bypass <a0>LL::NG</a0> protection Si un utilisateur peut accéder directement à l'application cachée, peut contourner la protection de <a0>LL::NG</a0> Then you got this value inside the Auth-Roles header: On les obtient dans l'en-tête Auth-Roles : applications:sympa_logo.png applications:sympa_logo.png Using notification system Utiliser le système de notification <s2>require</s2> Lemonldap::NG::Portal::SharedConf; <s2>require</s2> Lemonldap::NG::Portal::SharedConf; Skin rules Règle du thème /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_application_menu.png?id=screenshots lemonldap-ng-testpage.png lemonldap-ng-testpage.png Sessions are stored using <a0>Apache::Session</a0> modules family. Les sessions sont stockées en utilisant les modules de la famille <a0>Apache::Session</a0>. ../pages/documentation/1.4/authfacebook.html ../pages/documentation/1.4/authfacebook.html The configuration is done in config.php: La configuration est effectuée via config.php: <s0>List</s0>: domains list (comma separated values) <s0>Liste</s0> : liste des domaines (séparés par des virgules) Backend Backend → When you upgrade from Debian Lenny with customized index.pl files, you must upgrade them. → Lors d'une mise à jour d'une Debian Lenny avec un fichier index.pl personnalisé, il faut le mettre à jour. http://sourcesup.cru.fr/projects/perlcas/ http://sourcesup.cru.fr/projects/perlcas/ Using this, we can do a very simple interoperability system between 2 organizations using two <a0>LL::NG</a0> structures: En utilisant ce système, on peut avoir une simple interopérabilité entre 2 organisations utilisant chacune leur système <a0>LL::NG</a0> : String::Random String::Random <s0>Authentication filter</s0>: Filter to find user from its login (default: <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) <s0>Filtre d'authentication</s0> : filtre pour trouver l'utilisateur à partir de son login (défaut : <c1>(&(uid=$user)(objectClass=inetOrgPerson))</c1>) High Availability Haute disponibilité reloadTime reloadTime If no proxied services defined, <a0>CAS</a0> authentication will not activate the <a1>CAS</a1> proxy mode. Si aucun service proxifié n'est défini, l'authentification <a0>CAS</a0> n'activera pas le mode proxy <a1>CAS</a1>. ../../../media/documentation/manager-formreplay-newdata.png ../../../media/documentation/manager-formreplay-newdata.png http://perldoc.perl.org/functions/exit.html http://perldoc.perl.org/functions/exit.html <a12>portalcustom</a12><br13/> <a12>portalcustom</a12><br13/> http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel <a0>CDA</a0> activation Activation du <a0>CDA</a0> Validation of the session: external user has now a local session Validation de la session : l'utilisateur externe dispose ainsi d'un session locale After configuring <a0>SAML</a0> Service, you can export metadata to your partner Identity Provider. Après avoir configuré le service <a0>SAML</a0> Service, exporter les metadatas vers le fournisseur d'identité partenaire. This mode allow to test LemonLDAP::NG without any third-party software. Ce mode permet de tester LemonLDAP::NG sans aucun autre programme tiers. Configuration is in /etc/lemonldap-ng La configuration se trouve dans /etc/lemonldap-ng Then, go in <c0>OpenID parameters</c0>: Ensuite, aller dans les <c0>paramètres OpenID</c0> : You can change the separator with the <c2>fileNameSeparator</c2> option, and set another value, for example <c3>@</c3>. On peut changer ce séparateur en changeant la valeur de l'option <c2>fileNameSeparator</c2> par exemple <c3>@</c3>. 'cache_root' => '/tmp',? 'cache_root' => '/tmp',? We suppose that LimeSurvey is installed in /var/www/html/limesurvey On suppose que LimeSurvey est installé dans /var/www/html/limesurvey Convert::PEM Convert::PEM Main parameters Paramètres principaux Then go in Manager, <c0>Virtual Hosts</c0> » <e1>virtualhost</e1> » <c2>Form replay</c2> and click on <c3>Add POST <a4>URL</a4></c3>. Aller ensuite dans le manager, <c0>Hôtes virtuels</c0> » <e1>hôte virtuel</e1> » <c2>Rejeu de formulaires</c2> et cliquer sur <c3>Nouvelle <a4>URL</a4> POST</c3>. #perl_auto-protected_cgi #perl_auto-protected_cgi service_id lemonldapng service_id lemonldapng ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> ldapgroups <s0>-></s0> <a1><s2>join</s2></a1><s3>(</s3><s4>" "</s4><s5>,</s5><s6>(</s6><s7>$ldapgroups</s7> <s8>=~</s8> <s9>/cn=(.*?),/g</s9><s10>)</s10><s11>)</s11> You can also configure the authentication level for this module. il est également possible de configurer le niveau d'authentification pour ce module. <s77>//"userobm_account_dateexp" => ,</s77> <s77>//"userobm_account_dateexp" => ,</s77> http://fedoraproject.org/wiki/EPEL/ http://fedoraproject.org/wiki/EPEL/ lemonldap_ng_session_explorer_1340022388573.png lemonldap_ng_session_explorer_1340022388573.png Create table: Créer la table: If no value, the default NameID format is Email. Si aucune valeur n'est indiquée, le format de NameID par défaut est Email. Form replay Rejeu de formulaires Manager theme Thème du manager <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> <s9>AuthLDAPBindPassword</s9> <s10>"secret"</s10> Go to the Manager and <a0>create a new virtual host</a0> for MediaWiki. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Mediawiki. logos:logo-ul.png logos:logo-ul.png http://fr.lutece.paris.fr http://fr.lutece.paris.fr <c0>deny</c0>: nobody is welcomed <c0>deny</c0>: personne n'est autorisé SAML service configuration Configuration du service SAML Each SREG attribute will be associated to a user session key. Chaque attribut SREG est associé à une clef de session utilisateur. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Yubikey for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Yubikey comme module d'authentication. LimeSurvey configuration Configuration de LimeSurvey You can also add a condition. Il est possibe d'ajouter une condition. XSS attack detected XSS attack detected LinuxFR LinuxFR Standards attributes, like uid, cn or mail, are often enough to configure access rules and headers. Les attributs standards, tels uid, cn ou mail, sont souvent suffisant pour configurer les règles d'accès et en-têtes. CAS CAS <s144>//"userobm_nomade_perms" => ,</s144> <s144>//"userobm_nomade_perms" => ,</s144> ^/(css|js)/ ^/(css|js)/ <s0>SREG mapping</s0>: link between SREG attributes and session keys (<s1><a2>see below</a2></s1>). <s0>Associations SREG</s0> : liens entre les attributs SREG et les clefs de session (<s1><a2>voir ci-dessous</a2></s1>). ../../documentation/1.4/portalcustom.html#other_parameters ../../documentation/1.4/portalcustom.html#other_parameters For example, to send it in an header: Par exemple, pour l'envoyer dans un en-tête : GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout GoogleApps => http://www.google.com/calendar/hosted/mydomain.org/logout You only need a reload <a0>URL</a0> per physical servers, as Handlers share the same configuration cache on each physical server. Une <a0>URL</a0> par serveur physique est nécessaire, car les agents partagent le même cache de configuration pour chaque serveur physique. To change it, go in General Parameters > Advanced Parameters > Notifications > Wildcard for all users, and set for example <c0>alluserscustom</c0>. Pour le changer, aller dans Paramètres généraux > Paramètres avancés > Notifications > Carte blanche pour tous les utilisateurs, et mettre par exemple <c0>alluserscustom</c0>. Changing the domain value will not update other configuration parameters, like virtual host names, portal <a0>URL</a0>, etc. Changer la valeur du domaine ne met pas à jour les autres paramètres tels les noms d'hôtes virtuels, l'<a0>URL</a0> du portail, etc... tchemineau@example.com tchemineau@example.com <s25># another HTML code</s25> <s26>}</s26> <s25># autre code HTML</s25> <s26>}</s26> Menu modules Modules du menu LemonLDAP::NG 1.0 release Sortie de LemonLDAP::NG 1.0 Lemonldap::NG::Common Lemonldap::NG::Common You will need to collect all attributes needed to create a user in OBM, this includes: Il faut collecter tous les attributs nécessaires pour créer un compte OBM : Build <a0>cookie(s)</a0> Construit le ou les <a0>cookies</a0> Sybase Sybase Below are documented internal variables. Ci-dessous sont documentées les variables internes. Common Domain Cookie Domaine commun de cookie $_auth $_auth Configure Sympa virtual host like other <a0>protected virtual host</a0> but protect only magic authentication <a1>URL</a1>. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais ne protéger que l'authentification magique. On Debian/Ubuntu: Sur Debian/Ubuntu : Security Sécurité ../../documentation/1.4/applications.html ../../documentation/1.4/applications.html Use <a0>our own Debian repository</a0>. Utiliser <a0>votre propre dépôt Debian</a0>. <s0>Requested authentication context</s0>: this context is declared in authentication request. <s0>Contexte d'authentification demandé</s0> : ce contexte est déclaré dans la requête d'authentification. /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic /_detail/applications/http_logo.png?id=documentation%3A1.4%3Aapplications%3Aauthbasic ../../documentation/1.4/prereq.html#yum ../../documentation/1.4/prereq.html#yum <s0>apply</s0>: reload <a1>URL</a1> for distant Hanlders <s0>apply</s0> : les <a1>URL</a1> de rechargement des agents distants The Manager displays main branches: Le manager affiche des branches principales : Kinematics Cinématique <s0>end</s0>: End date (GMT) <s0>end</s0>: date de fin (GMT) ../../../../media/applications/limesurvey_logo.png ../../../../media/applications/limesurvey_logo.png <s0>Manager</s0>: used to manage LemonLDAP::NG configuration and to explore sessions. <s0>Manager</s0>: utilisé pour gérer la configuration LemonLDAP::NG et explorer les sessions. Security Assertion Markup Language Security Assertion Markup Language See also <a0>general kinematics presentation</a0>. Voir aussi la <a0>présentation de la cinématique générale</a0>. portalOpenLinkInNewWindow portalOpenLinkInNewWindow High availability Haute disponibilité <s3># DocumentRoot</s3> <s3># DocumentRoot</s3> documentation:1.4:applications:limesurvey documentation:1.4:applications:limesurvey http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ http://lanyrd.com/2012/13eme-rencontres-mondiales-du-logiciel-libre/sryyt/ applications:tomcat_logo.png applications:tomcat_logo.png ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../documentation/1.4/configvhost.html#lemonldapng_configuration ../pages/documentation/1.1/resetpassword.html ../pages/documentation/1.1/resetpassword.html Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! Hello <s0><TMPL_VAR <s1>NAME</s1><s2>=</s2><s3>"myparam"</s3>></s0>! You need <a0>Net::Twitter</a0> package, with a very recent version (>3). Vous devez installer une version récente (>3) du paquet <a0>Net::Twitter</a0>. Extended attributes and object classes use this prefix: 1.3.6.1.4.1.10943.10.2. Les attributs étendus et classes d'objet utilisent ce préfixe : 1.3.6.1.4.1.10943.10.2. <a0>CAS</a0> Session backend options Options du module de stockage <a0>CAS</a0> Prepare the LDAP server and the LL::NG configuration file Préparer le serveur LDAP et le fichier de configuration LL::NG RMLL/LSM RMLL/LSM documentation:1.4:extendedfunctions ↵ documentation:1.4:extendedfunctions ↵ <a0>LL::NG</a0> provides a special function named <a1>basic</a1> to build this header. <a0>LL::NG</a0> fournit une fonction spéciale nommée <a1>basic</a1> pour construire cet en-tête. Example: <a2>http://auth.example.com</a2> Exemple: <a2>http://auth.example.com</a2> dbiUserChain dbiUserChain Double cookie Double cookie logos:logo_ministere_justice.jpg logos:logo_ministere_justice.jpg wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz wget https://sourcesup.cru.fr/frs/download.php/2476/AuthCAS-1.4.tar.gz You can now use your function in a macro, an header or an access rule, for example: Les fonctions peuvent être utilisées dans une macro, un en-tête ou une règle d'accès, par exemple: It will be prompted if you generate keys, else you can set it in the <c0>Private key password</c0>. Il vous sera demandé à la génération de la clef ou vous pouvez l'entrer dans le champ <c0>Mot-de-passe de la clef privée</c0>. Next run ant command: Lancer ensuite la commande ant : documentation:lemonldapng-sso.png documentation:lemonldapng-sso.png timeout timeout Main <a0>external databases</a0> are: Les principales <a0>bases de données externes</a0> sont : URL contains a non protected host URL contains a non protected host Redis session backend Module de stockage des sessions Redis It manages both authentication and authorization and provides headers for accounting. Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. <s0>VHOSTLISTEN</s0>: how listen parameter is configured for virtual hosts in Apache (default: *:80) <s0>VHOSTLISTEN</s0> : comment est configuré le paramètre d'écoute des hôtes virtuels dans Apache (défaut : *:80) CAS (authentication module) CAS (module d'authentification) You need <a0>Net::Facebook::Oauth2</a0> package. La paquet <a0>Net::Facebook::Oauth2</a0> est nécessaire. MRTG monitoring Supervision MRTG icons:flags:us.png icons:flags:us.png remoteCookieName remoteCookieName documentation:googleapps-menu.png documentation:googleapps-menu.png If Multi is used for authentication and user database, it will try to use the same module. Si Multi est utilisé pour l'authentification et la base utilisateurs, il essaiera d'utiliser le même module. ^/(?i)index.php\?.*access=admin ^/(?i)index.php\?.*access=admin <s0>Display</s0>: As Google Apps is not a protected application, set to <c1>On</c1> to always display it <s0>Display</s0> : comme Google Apps n'est pas une application protégée, indiquer <c1>On</c1> pour toujours l'afficher Offline Hors ligne http://www.slideshare.net/coudot/lemonldapng-un-websso-libre http://www.slideshare.net/coudot/lemonldapng-un-websso-libre /_detail/screenshots/1.0/dark/password.png?id=screenshots /_detail/screenshots/1.0/dark/password.png?id=screenshots <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> <s64>"userobm_firstname"</s64> <s65>=></s65> <s66>"HTTP_OBM_GIVENNAME"</s66><s67>,</s67> <s68>// "userobm_title" => "HTTP_OBM_TITLE",</s68> This is a security point, to prevent someone to create a session by sending custom headers. Il s'agit d'un élément de sécurité pour éviter à quelqu'un de créer une session en envoyant des en-têtes personnalisés. <a0>SAML</a0> service configuration is a common step to configure <a1>LL::NG</a1> as <a2>SAML SP</a2> or <a3>SAML IDP</a3>. La configuration du service <a0>SAML</a0> est une étape commune pour configurer <a1>LL::NG</a1> comme <a2>fournisseur de service SAML (SP)</a2> ou <a3>fournisseur d'identité SAML (IDP)</a3>. <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> <s89>"userobm_phone"</s89> <s90>=></s90> <s91>"HTTP_OBM_TELEPHONENUMBER"</s91><s92>,</s92> [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 [lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2 $uid eq “root” $uid eq “root” ../../../documentation/1.4/configvhost.html ../../../documentation/1.4/configvhost.html Google Apps has a configuration parameter to redirect user on a specific <a0>URL</a0> after Google Apps logout (see <a1>Google Apps control panel</a1>). Google Apps ne dispose pas de paramètre de configuration pour rediriger les utilisateurs vers une <a0>URL</a0> spécifique après la déconnexion Google Apps (voir <a1>Google Apps control panel</a1>). New code: Nouveau code: http://www.jdll.org/node/206 http://www.jdll.org/node/206 You should now use the Manager to configure all <a0>applications and categories</a0>, and then comment or remove the <c1>applicationList</c1> parameter from <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. Il est désormais possible d'utiliser le manager pour configurer toutes les <a0>applications et catégories</a0>, ensuite commenter ou supprimer le paramètre <c1>applicationList</c1> de <c2>/etc/lemonldap-ng/lemonldap-ng.ini</c2>. <a3>XSS</a3> checks will still be done with warning in logs, but this will not prevent the process to continue. Le contrôle <a3>XSS</a3> continuera à être effectué mais avec seulement des avertissements dans les journaux sans empêcher le processus de continuer. Gaultier HUBERT Gaultier HUBERT applications:liferay_logo.png applications:liferay_logo.png Form page <a0>URI</a0>: /login.php <a0>URI</a0> de la page de formulaire : /login.php Google Apps Google Apps Login history Historique de connexion <s0>syntax</s0> (optional): <c1>hexadecimal</c1> (default) or <c2>octetstring</c2> <s0>syntax</s0> (optionnel) : <c1>hexadecimal</c1> (défaut) ou <c2>octetstring</c2> <s0><a1>SSO</a1> and Application logout</s0>: the request is forwarded to application and <a2>SSO</a2> session is closed <s0>Déconnexion <a1>SSO</a1> et applicative</s0>: la requête est transmise à l'application et la session <a2>SSO</a2> est fermée <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Redirect</s0>: redirect user on protected application or on Portal (applications menu) <s0>Manager interface</s0>: all messages are grouped in lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. L'<s0>interface du Manager</s0>: tous les messages sont regroupés dans lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm. ../pages/documentation/1.1/redirections.html ../pages/documentation/1.1/redirections.html SMTPAuthPass SMTPAuthPass Override logging functions Surcharger les fonctions de journalisation <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> <s13><s14><property</s14> <s15>name</s15>=<s16>"principalRequestHeader"</s16> <s17>value</s17>=<s18>"Auth-User"</s18><s19>/></s19></s13> documentation:1.4:loginhistory documentation:1.4:loginhistory Dates Dates X509 X509 Integrate existing applications Integrer des applications existantes Available parameters are: Paramètres disponibles : Go to the Manager and <a0>create a new virtual host</a0> for Bugzilla. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Bugzilla. Delay between check of local configuration Delai entre 2 examens de la configuration locale PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm PerlOptions +GlobalRequest PerlRequire /usr/local/lemonldap-ng/handler/MyHandler.pm documentation:manager-saml-service-authn-contexts.png documentation:manager-saml-service-authn-contexts.png ../../documentation/1.4/performances.html#apachesession_performances ../../documentation/1.4/performances.html#apachesession_performances mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ mkdir /usr/local/lemonldap-ng/notifications/ chown www-data /usr/local/lemonldap-ng/notifications/ <a0>CDA</a0> is set if the handler is not in the same domain Le <a0>CDA</a0> ne fonctionne que si l'agent n'est pas dans le même domaine This allows to use different databases for these process. Ceci autorise à utiliser deux bases de données différentes pour ces deux processus. Erwan LEGALL Erwan LEGALL POD unit tests Tests unitaires POD Secure Token Handler Agent jeton sécurisé Edit configuration Editer la configuration <a18>presentation</a18><br19/> <a18>presentation</a18><br19/> 0.9.4_password_reset.png 0.9.4_password_reset.png <s0>Renew authentication</s0>: force authentication renewal on <a1>CAS</a1> server <s0>Renouveler l'authentification</s0> : force le renouvellement de l'authentification sur le serveur <a1>CAS</a1> <s0>dbiChain</s0>: <a1>DBI</a1> connection. <s0>dbiChain</s0> : chaîne de connexion <a1>DBI</a1>. ../pages/documentation/1.1/idpcas.html ../pages/documentation/1.1/idpcas.html https https Logout forward Propagation de déconnexion <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0>: <a1>DN</a1> of AD technical account <s0>cn=ssokerberos,cn=users,dc=example,dc=com</s0> : <a1>DN</a1> du compte AD technique documentation:latest:prereq documentation:latest:prereq Cookie security Sécurité du cookie Operating System Système d'exploitation Example 1: two tables Exemple 1 : deux tables documentation:lasso.png documentation:lasso.png Modules Modules <s0>Use rule</s0>: a rule to allow user to use this module, set to <c1>1</c1> to always allow. <s0>Règle d'utilisation</s0> : une règle pour autoriser l'usage de ce module, mettre 1 pour toujours l'autoriser. Email::Date::Format Email::Date::Format ../../../media/documentation/manager-saml-idp-list.png ../../../media/documentation/manager-saml-idp-list.png /_detail/icons/personal.png?id=contact /_detail/icons/personal.png?id=contact You must also install the database connector (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) Il faut également installer le connecteur à la base de données (<a1>DBD::Oracle</a1>, <a2>DBD::Pg</a2>,…) ../pages/documentation/conferences.html ../pages/documentation/conferences.html <s162>//"userobm_nomade_datebegin" => ,</s162> <s162>//"userobm_nomade_datebegin" => ,</s162> Configuration backend parameters Paramètres des backends de configuration To summary available options: Pour résumer les options disponibles : External user clicks to be redirected to the remote type portal L'utilisateur externe clique pour être redirigé vers le second portail user email Email de l'utilisateur A little macro: Une petite macro : <s5>AuthType</s5> Basic <s5>AuthType</s5> Basic <s0>Mail sender</s0>: address seen in the “From” field (default: noreply@[DOMAIN]) <s0>Expéditeur</s0> : adresse vue dans le champ “From” (défaut : noreply@[DOMAINE]) User password is now available in <c0>$_password</c0> variable. Le mot-de-passe utilisateur est désormais disponible dans la variable <c0>$_password</c0>. With the above solution, all the Drupal site will be protected, so no anonymous access will be allowed. Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé. Authentication with Kerberos Authentification avec Kerberos A web browser launched from the computer (to access localhost) Un navigateur web lançé depuis ce serveur (pour accéder à la boucle locale) ../../documentation/1.4/start.html#sessions_databases ../../documentation/1.4/start.html#sessions_databases using Apache authentication system (used for <a0>SSL</a0>, <a1>Kerberos</a1>, <a2>HTTP basic authentication</a2>, …) utilisant le système d'authentification d'Apache (utilisé pour <a0>SSL</a0>, <a1>Kerberos</a1>, l'<a2>authentification HTTP basique</a2>, …) Translators Translators <s87>//"userobm_local" => ,</s87> <s87>//"userobm_local" => ,</s87> These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>. Cesparamètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>. <s0>Value</s0>: SREG attribute name: <s0>Valeur</s0> : noms d'attributs SREG : <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> <s0>my</s0> <s1>$portal</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Portal</s6><s7>::</s7><s8>SharedConf</s8><s9>-></s9><s10>new</s10><s11>(</s11> Zimbra also features archiving and discovery for compliance. Zimbra propose aussi l'archivage et discovery for compliance. Go to the Manager and <a0>create a new virtual host</a0> for Liferay. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Liferay. Official repository Dépôt officiel <s0>Page <a1>URL</a1></s0>: <a2>URL</a2> of password reset page (default: [PORTAL]/mail.pl) <s0><a1>URL</a1> de la page</s0> : <a2>URL</a2> de la page de réinitialisation de mot-de-passe (défaut : [PORTAL]/mail.pl) http://search.cpan.org/perldoc?Apache::Session::Browseable http://search.cpan.org/perldoc?Apache::Session::Browseable ~150 ~150 one unsecured for other applications un non-sécurisé pour les autres applications timezone timezone You can use #PORTAL# in values to replace the portal <a0>URL</a0>. Vous pouvez utiliser le mot clef #PORTAL# dans les valeurs pour remplacer l'<a0>URL</a0> du portail. </<s4>IfModule</s4>> </<s4>IfModule</s4>> Do not restrict /public/ Ne pas restreindre /public/ <s21>Allow</s21> from <s22>all</s22> <s21>Allow</s21> from <s22>all</s22> Authentication, Authorization and Accounting (AAA) mechanisms Mécanismes d'authentification, d'autorisation et de traçabilité (AAA) Zimbra can be deployed on-premises or as a hosted email solution. Zimbra peut être déployé sur site ou hébergé telle une messagerie. Slave Slave cd trunk cd trunk Mail From address Adresse source des messages documentation:1.4:jsonfileconfbackend documentation:1.4:jsonfileconfbackend LemonLDAP::NG can also use syslog (only for user actions). LemonLDAP::NG peut également utiliser syslog (seulement pour les actions utilisateurs). mailreset_step2.png mailreset_step2.png <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: catch logout request <c0>logout_sso</c0>, <c1>logout_app</c1>, <c2>logout_app_sso</c2>: intercepte les requêtes de déconnexion http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 http://www.facebook.com/home.php?#!/pages/LemonldapNG/328254254936 American Standard Code for Information Interchange American Standard Code for Information Interchange For example, we change it to <c2>ow2.org</c2>: Par exemple, pour le changer en <c2>ow2.org</c2>: Configure the portal to use the remote <a0>LL::NG</a0> structure. Configurer le portail pour qu'il utilise le système <a0>LL::NG</a0> distant. ../../documentation/1.4/applications/liferay.html ../../documentation/1.4/applications/liferay.html <s0>APACHEGROUP</s0>: group running Apache <s0>APACHEGROUP</s0>: groupe de fonctionnement d'Apache Use extended functions Utiliser les fonctions étendues field varchar(255) NOT NULL DEFAULT '', field varchar(255) NOT NULL DEFAULT '', ../../documentation/1.4/notifications.html ../../documentation/1.4/notifications.html email email /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus /_detail/documentation/status_standard.png?id=documentation%3A1.4%3Astatus <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... <VirtualHost _default_:443> ServerName auth.example.com SSLEngine on SSLCertificateFile ... Identity Provider Fournisseur d'identité <a0>Sympa</a0> is a mailing list manager. <a0>Sympa</a0> est un gestionnaire de listes de diffusion. <text>: paragraph to display: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifText”>…</p> <text> : paragraphe à afficher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifText”>…</p> http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-1 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 http://toolinux.com/Sortie-de-LemonLDAP-NG-1-0 These parameters can be configured in Manager, in <c0>General Parameters</c0> > <c1>Advanced parameters</c1> > <c2>Handler redirections</c2>: Ces paramètres peuvent être configurés dans le manager, dans <c0>Paramètres généraux</c0> > <c1>Paramètres avancés</c1> > <c2>Redirections des agents</c2>: lemonldap-ng-portal-appslist.png lemonldap-ng-portal-appslist.png Use custom functions Utiliser les fonctions personnalisées ../../../media/documentation/manager-saml-private-key.png ../../../media/documentation/manager-saml-private-key.png sudo make postconf sudo make postconf Display applications list Affiche la liste des applications <a0>Session restrictions</a0> will not work Les <a0>restrictions de session</a0> ne fonctionnent pas Else, all data are copied in the session database. Sinon, toutes les données sont copiées. Net::OpenID::Server > 1.00 Net::OpenID::Server > 1.00 _idp _idp You have to update them by yourself. Il faut les mettre à jour soi-même. Then create symbolic links on template files, as you might not want to rewrite all <a0>HTML</a0> code (else, do as you want). Créer ensuite des liens symboliques pour éviter de réécrire tous les fichiers <a0>HTML</a0> (sauf si c'est souhaité). <s0>Change password <a1>URL</a1></s0>: where users can change their password. <s0>Change password <a1>URL</a1></s0>: où les utilisateurs peuvent changer leur mot-de-passe. <s0>sessions/</s0>: read only access to sessions (enough for distant Handlers) <s0>sessions/</s0> : accès en lecture seule aux sessions (suffisant pour les agents distants) To refresh it, you have to set an handler on the same server to use the refresh mechanism or to restart the server after each configuration change. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement. <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> <s20><s21><user</s21> <s22>username</s22>=<s23>"tomcat"</s23> <s24>password</s24>=<s25>"tomcat"</s25> <s26>roles</s26>=<s27>"tomcat"</s27><s28>/></s28></s20> 'cache_depth' => 5,? 'cache_depth' => 5,? <s6># ...</s6> } <s6># ...</s6> } You can add this object class to any entry of your directory. Cette classe d'objets peut être ajoutée à toute entrée de l'annuaire. ../../documentation/1.4/applications/obm.html ../../documentation/1.4/applications/obm.html <s0>RDBI</s0> : triple store storage <s0>RDBI</s0> : stockage en triplets references.html references.html /_detail/icons/knewsticker.png?id=contact /_detail/icons/knewsticker.png?id=contact ../../documentation/1.4/performances.html#handler_performance ../../documentation/1.4/performances.html#handler_performance The common domain is used by <a0>SAML SP</a0> to find an Identity Provider for the user, and by <a1>SAML IDP</a1> to register itself in user's IDP list. Le domaine commun est utilisé par le <a0>SP SAML</a0> pour trouver le fournisseur d'identité de l'utilisateur et par l'<a1>IdP SAML</a1> pour s'enregistrer dans la liste des IDP. Several extensions allows to configure <a0>SSO</a0> on MediaWiki: Plusieurs extensions permettent de configurer le <a0>SSO</a0> dans MediaWiki : <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s75># For MediaWiki >= 1.13 </s75> <s76>#$wgHooks['UserLoadFromSession'][] = array($wgAuth,'autoAuthenticate'); </s76><s77>}</s77> <s0>Attribute to store</s0>: the session key that will be stored in Memcached. <s0>Attribut à stocker</s0> : la clef de session qui doit être stockée dans Memcached. Conferences Conférences ../../../media/documentation/lemonldap-ng-packages.png ../../../media/documentation/lemonldap-ng-packages.png Run this to update packages cache: Lancer ceci pour rafraîchir le cache : Menu modules display Affichage des modules du menu http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 http://event.appsec-forum.ch/27-oct-appsec-conferences/#c1 Redirection to the portal of the main area and normal authentication (if not done before) Redirection vers le portail principal et authentification normale (sauf si déjà faite) Close kerberos connection: Fermer la connexion kerberos : Roles are entries, below branches representing applications. Les rôles sont des entrées, les branches subordonnées représentant les applications. You can enter a password to protect private key with a password. Vous pouvez entrer un mot de passe de protection de la clef privée. 0.9.3 0.9.3 0.9.4 0.9.4 A click on a key will display the associated value. Un click sur la clef affiche la valeur associée. http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 http://www.admin-magazin.de/News/Single-Sign-on-im-Web-mit-LemonLDAP-NG-1.1 BrowserID BrowserID secureTokenHeader secureTokenHeader mailSessionKey mailSessionKey authentication authentification <a0>URL</a0> for mail reset <a0>URL</a0> pour la réinitialisation par courriel IO::String IO::String You can also adapt Apache access control: On peut également adapter le contrôle d'accès d'Apache : http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://help.sap.com/saphelp_nw70/helpdata/en/d0/a3d940c2653126e10000000a1550b0/frameset.htm http://wiki.zimbra.com/index.php?title=Preauth http://wiki.zimbra.com/index.php?title=Preauth macros macros Go on Drupal administration interface and enable the Webserver Auth module. Aller dans l'interface administration et activer le module Webserver Auth. vi /etc/apt/sources.list.d/lemonldap-ng.list vi /etc/apt/sources.list.d/lemonldap-ng.list Portal Portail icons:terminal.png icons:terminal.png Nantes Nantes Drivers Drivers Proxy portal <a0>URL</a0> <a0>URL</a0> du portail mandataire /usr/share/lemonldap-ng/bin/lmConfigEditor /usr/share/lemonldap-ng/bin/lmConfigEditor First check and install the <a0>prerequisites</a0>. D'abord vérifier et installer les <a0>pré-requis</a0>. OBM is shipped with a <a0>LL::NG</a0> plugin with these features: OBM est livré avec un composant <a0>LL::NG</a0> apportant les fonctionnalités suivantes : _userDB _userDB These parameters can be overwritten in LemonLDAP::NG ini file, in the section <c0>apply</c0>. Ces paramètres peuvent être surchargés dans le fichier ini de LemonLDAP::NG ini file, à la section <c0>apply</c0>. <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> <s0>CREATE</s0> <s1>TABLE</s1> sessions <s2>(</s2> Macros and groups are stored in session database. Les macros et les groupes sont stockées dans la base de données des sessions. External portal Portail externe Modify the portal virtual host: Modifier l'hôte virtuel du portail : Read-only functions (index.pl/sessions or index.pl/adminSessions paths): Fonctions en lecture seule (chemins index.pl/sessions ou index.pl/adminSessions) : Please use lmMigrateConfFiles2ini to migrate your menu configuration Please use lmMigrateConfFiles2ini to migrate your menu configuration You can use Null backend to bypass some authentication process steps. Le backend Null peut être utilisé pour sauter des étapes du processus d'authentication. globalStorageOptions globalStorageOptions User name session field Champ de session stockant le nom d'utilisateur Installation on RHEL/CentOS with packages Installation sur RHEL/CentOS avec les paquets Portal URL URL du portail TikiWiki, … TikiWiki, … PerlSetVar LmProxyPass http://APPLICATION/ PerlSetVar LmProxyPass http://APPLICATION/ activate <a0>CDA</a0> in <c1>General Parameters</c1> » <c2>Cookies</c2> » <c3>Multiple domains</c3> activer le <a0>CDA</a0> dans <c1>Paramètres généraux</c1> » <c2>Cookies</c2> » <c3>Domaines multiples</c3> All <a1>Apache::Session</a1> style modules are useable except for some features. Tous les modules de type <a1>Apache::Session</a1> sont utilisables excepté pour quelques fonctionnalités. By default, user will be redirected on portal if no <a0>URL</a0> defined, or on the specified <a1>URL</a1> if any. Par défaut, l'utilisateur est redirigé vers le portail si aucune <a0>URL</a0> n'est définie ou vers l'<a1>URL</a1> indiquée sinon. ldap://localhost ldap://localhost The <a0>LDAP schema extension</a0> can be used to store these values L'<a0>extension de schéma LDAP</a0> peut être utilisée pour stocker ces valeurs. start Commencer SSOExtensions::function1 SSOExtensions::function1 ../../documentation/1.4/redirections.html ../../documentation/1.4/redirections.html LemonLDAP::NG - Offline Version LemonLDAP::NG - Version hors-ligne /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-menu.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps <a0>SSO</a0> on OBM web interface <a0>SSO</a0> sur l'interface web d'OBM Package GPG signature Signature GPG des paquets <br0/> <br0/> portalAntiFrame portalAntiFrame documentation:1.4:memcachedsessionbackend documentation:1.4:memcachedsessionbackend Portal performances Performances du portail tree_dark.png tree_dark.png Consent to share attribute <e0>id</e0> trough OpenID Consentement de partage de l'attribut <e0>id</e0> via OpenID ldapChangePasswordAsUser ldapChangePasswordAsUser http://en.wikipedia.org/wiki/Outlook_Web_App http://en.wikipedia.org/wiki/Outlook_Web_App As described in <a0>performances chapter</a0>, you can use macros, local macros,… Comme indiqué au <a0>chapître performances</a0>, on peut utiliser des macros, macros locales,… Error log: all messages emitted by the program, depending on the configured log level Journaux d'erreur (ErrorLog) : tous les messages emis par le programme, suivant le niveau de journalisation configuré (LogLevel) PostGreSQL PostGreSQL http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN http://www.linpki.org/projects/linshare/wiki/HttpHeaderSSOEN documentation:1.4:applications:tomcat documentation:1.4:applications:tomcat ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> ldapServer <s29>=></s29> <s30>'ldaps://ad.example.com'</s30><s31>,</s31> Configuration backend can be set in the <a0>local configuration file</a0>, in <c1>configuration</c1> section. Le backend de configuration peut être indiqué dans le <a0>fichier local de configuration</a0>, dans la section <c1>configuration</c1>. http://www.slideshare.net/coudot/rmll-2011-websso http://www.slideshare.net/coudot/rmll-2011-websso ../../documentation/1.4/authldap.html#schema_extension ../../documentation/1.4/authldap.html#schema_extension It is recommended to secure the channel between reverse-proxies and application to be sure that only request coming from the <a0>LL::NG</a0> protected reverse-proxies are allowed. Il est donc recommandé de sécurisé le canal entre le proxy inverse et l'application pour être sûr que seules les requêtes issues des proxies inverses protégés par <a0>LL::NG</a0> sont autorisées. These files must be included in Apache configuration, either with <c0>Include</c0> directives in <c1>httpd.conf</c1> (see <a2>quick start example</a2>), or with symbolic links in Apache configuration directory (like <c3>/etc/httpd/conf.d</c3>). Ces fichiers doivent être inclus dans la configuration d'Apache, soit par des directives <c0>Include</c0> dans le fichier <c1>httpd.conf</c1> (voir <a2>démarrage rapide</a2>), ou via un lien symbolique dans de répertoire de configuration d'Apache (type <c3>/etc/httpd/conf.d</c3>). Protection scheme Schéma de protection /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step1.png?id=screenshots Then go in Manager, <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Password management</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Gestion des mots-de-passe</c2> : Uncheck it to disable <a1>SAML</a1> authentication (for example, if your Identity Provider is down). Le désélectionner désactive l'authentification <a1>SAML</a1> (à utiliser, si votre fournisseur d'identité est hors service). Alphabetical Index Index alphabétique Since version 0.9.4, LemonLDAP::NG can be used to notify some messages to users: if a user has a message, the message will be displayed when he will access to the portal. Depuis la version 0.9.4, LemonLDAP::NG peut être utilisé pour notifier des messages aux utilisateurs : si un utilisateur a un message, celui-ci est affiché lorsqu'il accède au portail. ../../../../media/applications/tomcat_logo.png ../../../../media/applications/tomcat_logo.png 1800+ 1800+ The real accounting has to be done by the application itself since <a0>SSO</a0> logs can not understand transactions. La réelle traçabilité doit être faite par l'application elle-même car les journaux du <a0>SSO</a0> ne peuvent interprêter les transactions. <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections <s0>Control asked <a1>URL</a1></s0>: prevent <a2>XSS</a2> attacks and bad redirections lemonldap-ng-changes@ow2.org lemonldap-ng-changes@ow2.org Schema Schéma Secure Token allow requests in error Le jeton sécurisé autorise les requêtes en cas d'erreur ../media/icons/chat.png ../media/icons/chat.png Offline 0.1 Hors-ligne 0.1 ~100 ~100 <s0>Check <a1>SSO</a1> message signature</s0>: check <a2>SSO</a2> message signature <s0>Vérification de la signature des messages <a1>SSO</a1></s0> : vérifie la signature des messages <a2>SSO</a2> ../pages/documentation/1.1/passwordstore.html ../pages/documentation/1.1/passwordstore.html ../../../../media/applications/spring_logo.png ../../../../media/applications/spring_logo.png You should be able to find a package for your distribution with a little search on the web. Il est possible de trouver un paquet pour beaucoup de distributions avec une petite recherche sur le web. Then use openssl to generate an auto-signed certificate: Ensuite, utiliser openssl pour générer un certificat auto-signé : # Values: TEXT # ignoreregex = # Values: TEXT # ignoreregex = documentation:1.4:authsaml documentation:1.4:authsaml <s0>Target <a1>URL</a1></s0>: /process.php <s0><a1>URL</a1> cible</s0> : /process.php aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] aaaRole => ((grep{/ou=aaa/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=aaa/)[0] /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/applications/googleapps_logo.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps Each configuration will be represented as an entry, which structural objectClass is <c0>applicationProcess</c0>. Chaque configuration est représentée par une entrée, dont l'objectClass structurel est <c0>applicationProcess</c0>. You can use different type of access: <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> for servers in secured network and <a3>SOAP</a3> for remote servers. On peut utiliser différent typed d'accès : <a0>SQL</a0>, <a1>File</a1> or <a2>LDAP</a2> pour les serveurs se trouvant sur le réseau sécurisé et <a3>SOAP</a3> pour les autres. Yverdon Yverdon When the user accept the notification, the reference is stored in his persistent session. Lorsque l'utilisateur accepte la notification, la référence est stockée dans ses données de session persistentes. http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU http://www.dailymotion.com/video/xvom9l_ow2con-12-clement-oudot_tech?search_algo=2#.UR31OX1m1iU static: 'StaticValue' (a static value) static: 'StaticValue' (une valeur statique) lemonldap-ng-doc: contains <a0>HTML</a0> documentation and project docs (README, etc.) lemonldap-ng-doc : contient la documentation <a0>HTML</a0> et celle du projet (README, etc...) <s0>EXAMPLE.COM</s0>: Kerberos realm <s0>EXAMPLE.COM</s0> : royaume Kerberos skip skip This is the default configuration backend. C'est le backend de configuration par défaut. SSLCertificateKeyFile ... SSLCertificateKeyFile ... <s0>warn</s0> for failed authentications <s0>warn</s0> pour les échecs d'authentifications Authentication protocols Authentication protocols ../../../media/applications/dokuwiki_logo.png ../../../media/applications/dokuwiki_logo.png ../../../../media/applications/zimbra_logo.png ../../../../media/applications/zimbra_logo.png Cross Site Scripting Cross Site Scripting http://www.jasig.org/cas/protocol http://www.jasig.org/cas/protocol Comments can be used to order your rules: rules are applied in the alphabetical order of comment (or regexp in there is no comment). Les commentaires peuvent être utilisés pour ordonner les règles : elles sont appliquées dans l'ordre alphabétique des commentaires (ou des expressions régulières à défaut de commentaire). Contributions Contributions http://lanyrd.com/2011/confoo/sddcy/ http://lanyrd.com/2011/confoo/sddcy/ <a0>LL::NG</a0> can protect any Apache hosted application including Apache reverse-proxy mechanism. <a0>LL::NG</a0> peut protéger toute application hébergée par Apache y compris le mécanisme de proxy inverse d'Apache. <s21># special html code for admins</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s21># code html spécial pour les administrateurs</s21> <s22>}</s22> <s23>else</s23> <s24>{</s24> <s0>all</s0>: parameters for all modules <s0>all</s0> : paramètres pour tous les modules For example, in portal/index.pl: Par exemple, dans portal/index.pl: User table Table utilisateurs See <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> for more information. Voir <a0>http://httpd.apache.org/docs/2.2/mod/core.html#loglevel</a0> pour plus d'information. EXAMPLE.COM = { EXAMPLE.COM = { Mail, Agenda, Groupware Mail, Agenda, Groupware documentation:1.4:authwebid documentation:1.4:authwebid yubikeyPublicIDSize yubikeyPublicIDSize Add it to trustedDomains (or set <c0>*</c0> in trustedDomains to accept all). L'ajouter à trustedDomains (ou mettre <c0>*</c0> dans trustedDomains pour tout accepter). Configure attributes: Configurer les attributs : Insertion example in Perl Exemple d'insertion en Perl If one is missing, the user is not created. Si l'un est manquant, le compte ne sera pas créé. So to improve performances, avoid too complex rules by using the macro or the groups or local macros. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales. Then use the <c0>SiteMinder</c0> tab to configure <a1>SSO</a1>: Utiliser ensuite le paragraphe <c0>SiteMinder</c0> pour configurer le <a1>SSO</a1> : <s1>SetHandler</s1> perl-<s2>script</s2> <s1>SetHandler</s1> perl-<s2>script</s2> documentation:1.4:passwordstore documentation:1.4:passwordstore WebID WebID These regular expressions read the 'ou' value of the <a0>DN</a0> of the role of the concerned application. Ces expressions régulières lisent la valeur 'ou' du <a0>DN</a0> du rôle de l'application concernée. Reply address Adresse de réponse and edit /etc/fail2ban/filter.d/lemonldap.conf et editer /etc/fail2ban/filter.d/lemonldap.conf Save the configuration and exit the Manager. Sauver la configuration et quitter le manager. Now configure all <a0>SAML</a0> parameters: Puis configurer tous les paramètres <a0>SAML</a0> : /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/lasso.png?id=documentation%3A1.4%3Asamlservice See the following chapters: Voir les chapîtres suivants : ----</s156> ----</s156> /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_reset.png?id=screenshots include /usr/share/lemonldap-ng/ressources/sso.schema include /usr/share/lemonldap-ng/ressources/sso.schema documentation:1.4:performances documentation:1.4:performances Header value Valeur d'en-tête DataSource DataSource File location Emplacement du fichier documentation:features documentation:features <s0>Check last logins</s0>: displays a checkbox on login form, allowing user to check his login history right after opening session <s0>Vérifier l'historique</s0> : affiche une case à cocher sur le formulaire d'authentification permettant à l'utilisateur d'examiner son historique de connexion après l'ouverture de la session Portal produce a <c0>notice</c0> message in <a1>Apache logs or syslog</a1> when a user authenticates (or fails to authenticate) and logs out. Le portail génère un message de niveau <c0>notice</c0> <a1>dans les journaux d'Apache ou dans syslog</a1> lorsqu'un utilisateur d'authentifie (ou échoue) ou se déconnecte. ../../documentation/1.4/authcas.html ../../documentation/1.4/authcas.html <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> <s44>//"userobm_gid" => "HTTP_OBM_GID",</s44> SHA1 SHA1 ../../documentation/1.4/applications/django.html ../../documentation/1.4/applications/django.html /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice /_detail/documentation/manager-saml-service-sp-slo.png?id=documentation%3A1.4%3Asamlservice Access rules: check user's right on <a0>URL</a0> patterns Des règles d'accès : examine les droits de l'utilisateur via des expressions sur les <a0>URL</a0> ../pages/documentation/1.1/applications/spring.html ../pages/documentation/1.1/applications/spring.html install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) install_manager_site (/usr/local/lemonldap-ng/htdocs/manager) <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> <s0>type</s0> <s1>=</s1><s2> LDAP</s2> <s3>ldapServer</s3> <s4>=</s4><s5> ldap://localhost</s5> <s6>ldapConfBase</s6> <s7>=</s7><s8> ou=conf,ou=applications,dc=example,dc=com</s8> <s9>ldapBindDN</s9> <s10>=</s10><s11> cn=manager,dc=example,dc=com</s11> <s12>ldapBindPassword</s12> <s13>=</s13><s14> secret</s14> Register LemonLDAP::NG on partner Identity Provider Enregistrer LemonLDAP::NG dans le fournisseur d'identité partenaire One or more roles (to send to the protected applications) Un ou plusieurs rôles (à envoyer aux applications protégées) No parameters needed. Aucun paramètres n'est requis. Lemonldap::NG handlers use a local cache to store sessions (for 10 minutes). Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). For example, if these rules are used without comments: Par exemple, si ces règles sont utilisées sans commentaires : You can fix default values by editing these values in <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1>: On peut fixer les valeurs par défaut en éditant ces valeurs dans le fichier <c0>lemonldap-ng.ini</c0>, section <c1>manager</c1> : Configure LimeSurvey virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel LimeSurvey comme n'importe quel autre <a0>hôte virtuel protégé</a0>. ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> ldapServer <s16>=></s16> <s17>'ldaps://ad.example.com'</s17><s18>,</s18> Portal redirects user on protected application with his session ID as <a0>URL</a0> parameter Portal redirige l'utilisateur vers l'application demandée avec son identifiant de session en paramètre de l'<a0>URL</a0> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3> <s4>=</s4><s5> JSONFile</s5> <s6>dirName</s6> <s7>=</s7><s8> /var/lib/lemonldap-ng/conf</s8> Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Logout forward</c2> and click on <c3>Add a key</c3>, then fill: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Transfert de la déconnexion</c2> et cliquer sur <c3>Ajouter une clef</c3>, renseigner ensuite : You will be prompted. Le message sera affiché. Application parameters: Paramètres des applications : mysuperpassword mysuperpassword <s0>Users</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Utilisateurs</s0> : <a1>lemonldap-ng-users@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) Servers Servers /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend /_detail/documentation/configuration-ldap.png?id=documentation%3A1.4%3Aldapconfbackend This method requires the <c0>msktutil</c0> program on Linux server. Cette méthode nécessite le programme <c0>msktutil</c0> sur le serveur Linux. ../../../../media/documentation/liferay_5.png ../../../../media/documentation/liferay_5.png ../../documentation/1.4/selfmadeapplication.html ../../documentation/1.4/selfmadeapplication.html Change it: Le Changer : documentation:1.4:authbrowserid documentation:1.4:authbrowserid Skin name Nom du thème Body for confirmation mail Corps du message de confirmation https://www.portail.crbn.fr https://www.portail.crbn.fr Session identifier (carried in cookie) Identifiant de session (porté par le cookie) OpenID secret token Secret OpenID If you install packages on 64bits system, create those symbolic links: Pour installer les paquets sur un système 64bits, créeer ces liens symboliques : Java (Spring) Java (Spring) number numero ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers ../../documentation/1.4/soapconfbackend.html#next_configure_soap_for_your_remote_servers Then, go in <c0>Proxy parameters</c0>: Ensuite, aller dans les <c0>paramètres Proxy</c0> : ../../../media/documentation/manager-saml-namid-formats.png ../../../media/documentation/manager-saml-namid-formats.png Authentication, users and password databases Bases de données d'authentification, des utilisateurs et des mots-de-passe By default, only the configured authentication backend is available for users. Par défaut, seul le backend configuré est accessible aux utilisateurs. Single Sign On cookie, domain and portal URL Cookie SSO, URL du portail et domaine <s0>Key name</s0>: name of the key in LemonLDAP::NG session <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG documentation:lemonldap-ng-packages.png documentation:lemonldap-ng-packages.png /_detail/logos/logo_rbn.png?id=references /_detail/logos/logo_rbn.png?id=references This is a well known security framework for J2EE applications. C'est le très connu framework de sécurité des applications J2EE. <s104>//"userobm_direction" => ,</s104> <s104>//"userobm_direction" => ,</s104> documentation:1.4:applications:bugzilla documentation:1.4:applications:bugzilla https://twitter.com https://twitter.com To use it (with MySQL for example), choose “Apache::Session::Browseable::MySQL” as “Apache::Session module” and use the following parameters: Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants : Use Kerberos with Multiple authentication backend Utiliser Kerberos avec plusieurs backend d'authentification Session backend Module de stockage des sessions Then you can access to user datas On peut ensuite accéder aux données de l'utilisateur Install <a0>Webserver Auth</a0> module, by downloading it, and unarchive it in the drupal modules/ directory. Télécharger et installer le module <a0>Webserver Auth</a0>, en le décompressant dans le répertoire modules/. <s1># DocumentRoot</s1> <s1># DocumentRoot</s1> If you are protecting MediaWiki with <a0>LL::NG</a0> as reverse proxy, <a1>convert header into REMOTE_USER environment variable</a1>. Si Mediawiki est protégé par un reverse-proxy <a0>LL::NG</a0>, <a1>convertir l'en-tête en variable d'environnement REMOTE_USER</a1>. documentation:1.4:configlocation ↵ documentation:1.4:configlocation ↵ Expression Expression Check Apache configuration and restart: Vérifier la configuration d'Apache et redémarrer : <a2>idpopenid</a2><br3/> <a2>idpopenid</a2><br3/> <a0>LL::NG</a0> can catch a GET request and transform it internally in a POST request. <a0>LL::NG</a0> peut intercepter uen requête GET et la transformer en interne en requête POST. Indeed, by default, users without logon hours values are rejected. Sinon, par défaut, les utilisateurs sans créneau horaire de connexion sont rejetés. <s0>Reset attribute</s0>: name of password reset attribute (default: pwdReset). <s0>Attribut reset</s0> : nom de l'attribut reset du mot-de-passe (défaut : pwdReset). You can test any <a0>URL</a0> to see if it's protected using testUri(). On peut tester toute <a0>URL</a0> pour voir si elle est protégée en utilisant testUri(). ../../../media/documentation/manager-saml-service-authn-contexts.png ../../../media/documentation/manager-saml-service-authn-contexts.png http://lanyrd.com/2011/ldapcon/sgqdf/ http://lanyrd.com/2011/ldapcon/sgqdf/ Setup Mise en marche In the manager: set <a0>Apache::Session::Redis</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Redis</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse): <s0>Set groups</s0>: request user database to find groups <s0>Installe les groupes</s0> : interroge la base de données utilisateurs pour trouver les groupes <s0>User</s0>: Connection user <s0>Utilisateur</s0> : compte de connexion documentation:latest:writingrulesand_headers documentation:latest:writingrulesand_headers Local cache parameters Paramètres du cache local <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> <a39><s40>print</s40></a39> <s41>STDERR</s41> <s42>"SOAP Error: "</s42> <s43>.</s43> <s44>$r</s44><s45>-></s45><s46>fault</s46><s47>-></s47><s48>{</s48>faultstring<s49>}</s49><s50>;</s50> <s51>}</s51> <s52>else</s52> <s53>{</s53> With dpkg Avec dpkg documentation:lemonldap-ng-architecture.png documentation:lemonldap-ng-architecture.png There are no <e0>global</e0> headers. Il n'y a pas d'en-tête <e0>global</e0>. Role Rôle documentation/current/installdeb.html#official_repository documentation/current/installdeb.html#official_repository dpkg -i liblemonldap-ng-* lemonldap-ng* dpkg -i liblemonldap-ng-* lemonldap-ng* <a0>LL::NG</a0> CGIs <e1>(Portal, Manager,…)</e1> can be used under a <a2>FastCGI system</a2> very easily. Les CGI de <a0>LL::NG</a0> <e1>(portail, manager,…)</e1> peuvent être utilisées facilement dans un environnement <a2>Fast CGI</a2>. ../../documentation/1.4/applications/limesurvey.html ../../documentation/1.4/applications/limesurvey.html useSafeJail useSafeJail ../css/print.css ../css/print.css LemonLDAP::NG configuration (edited by the Manager) is in /var/lib/lemonldap-ng/conf/ La configuration LemonLDAP::NG (editée par le manager) se trouve dans /var/lib/lemonldap-ng/conf/ Little effort is required to translate the encoded string back into the user name and password, and many popular security tools will decode the strings “on the fly”. Un petit effort est requis pour décoder ces chaînes et de nombreux outils de sécurité les décodent à la volée. Userlogout => logout_sso Userlogout => logout_sso secureTokenAttribute secureTokenAttribute For example, the user name Aladdin and password open sesame would be combined as Aladdin:open sesame – which is equivalent to QWxhZGRpbjpvcGVuIHNlc2FtZQ== when encoded in Base64. Par exemple, le nom Aladdin et le mot-de-passe "open sesame" vont être assemblés en "Aladdin:open sesame" – dont l'équivalent est QWxhZGRpbjpvcGVuIHNlc2FtZQ== en Base64. Reload virtual host: Hôte virtuel pour le rechargement : By default, the RelayState session is deleted when it is read. Par défaut, la session RelayState est détruite lorsqu'elle est lue. Configuration reload will then be effective in less than 10 minutes. Le rechargement de la configuration sera effectif en moins de 10 minutes. Then fill all inputs to create the notification. Remplir ensuite tous les champs pour créer la notification. http://fedoraproject.org/wiki/EPEL/FAQ#howtouse http://fedoraproject.org/wiki/EPEL/FAQ#howtouse WSDL file Fichier WSDL Build Construction ../css/all.css ../css/all.css Configuration reload Rechargement de la configuration radiusSecret radiusSecret Liferay administration Administration Liferay https://metacpan.org/release/Web-ID https://metacpan.org/release/Web-ID <a10>portal</a10><br11/> <a10>portal</a10><br11/> updateTime updateTime See the full description of the protocol here: <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> Voir la description complète du protocole ici : <a0>https://developer.mozilla.org/en-US/docs/Mozilla/Persona</a0> <a0>CAS</a0>_url <a0>CAS</a0>_url ../../../media/applications/saplogo.gif ../../../media/applications/saplogo.gif ../../../media/documentation/ha-sessions-configuration.png ../../../media/documentation/ha-sessions-configuration.png Getting sources from SVN repository Obtenir les sources depuis le dépôt SVN <s0>ldapConfBase</s0>: <a1>DN</a1> of configuration branch <s0>ldapConfBase</s0> : <a1>DN</a1> de la branche des configurations Configure sessions specificities Configurer les spécificités des sessions <s0># Get attributes (or macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Test if user is member of a Lemonldap::NG group (or LDAP mapped group)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> <s0># Obtenir des attributs (ou macros)</s0> <s1>my</s1> <s2>$cn</s2> <s3>=</s3> <s4>$cgi</s4><s5>-></s5><s6>user</s6><s7>-></s7><s8>{</s8>cn<s9>}</s9>   <s10># Tester si l'utilisateur est membre d'un groupe Lemonldap::NG (ou d'un groupe LDAP translaté)</s10> <s11>if</s11><s12>(</s12> <s13>$cgi</s13><s14>-></s14><s15>group</s15><s16>(</s16><s17>'admin'</s17><s18>)</s18> <s19>)</s19> <s20>{</s20> A <a0>Apache::Session::Browseable::Redis</a0> has been created, it is the faster (except for session explorer, defeated by Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) Un module <a0>Apache::Session::Browseable::Redis</a0> a été créé, c'est le plus rapide (excepté pour l'explorateur de sessions, battu par Apache::Session::Browseable::<a1>DBI</a1>/<a2>LDAP</a2> >= 1.0) /_detail/icons/flags/us.png?id=documentation%3Aconferences /_detail/icons/flags/us.png?id=documentation%3Aconferences LemonLDAP::NG can export <a0>HTTP headers</a0> either using a proxy or protecting directly the application. LemonLDAP::NG peut exporter des <a0>en-têtes HTTP</a0> qu'on l'utilise sur une reverse-proxy ou directement sur le serveur à protéger <s0>Allow requests in error</s0>: allow a request that has generated an error in token generation to be forwarded to the protected application without secure token (default: yes) <s0>Autorise les requêtes en cas d'erreur</s0> : autorise la requête qui a généré une erreur dans la génération du jeton à être transféré à l'application protégé sans jeton sécurisé (défaut : oui) A skin will often refer to the <c0>common</c0> skin, which is not a real skin, but shared skin objects (like scripts, images and <a1>CSS</a1>). Un thème se réfère souvent au thème <c0>common</c0>, qui n'est pas un thème réel mais contient des objects partagés (tels les scripts, images et <a1>CSS</a1>). ../pages/documentation/1.1/soapsessionbackend.html ../pages/documentation/1.1/soapsessionbackend.html Can be left blank for plain text passwords. Peut être vide pour le stockage des mots-de-passe en clair. In Manager, you can configure categories and applications in <c0>General Parameters</c0> > <c1>Portal</c1> > <c2>Menu</c2> > <c3>Categories and applications</c3>. Dans le manager, on peut configurer les catégories et applications dans <c0>Paramètres généraux</c0> > <c1>Portail</c1> > <c2>Menu</c2> > <c3>Catégories et applications</c3>. <s0><a1>Application menu</a1></s0>: display authorized applications in categories <s0><a1>Menu des applications</a1></s0> : affiche les applications autorisées dans les catégories Bruxelles Bruxelles CDBI CDBI import your own private and public keys (<c0>Load from a file</c0> input) importer vos propres clefs privées et publiques (entrée <c0>Charger depuis un fichier</c0>) date: creation date (format YYYY-MM-DD) date : date de création (format AAAA-MM-JJ) Also, all backends parameters are displayed. Ainsi tous les paramètres des backends sont affichés. /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_authentication_portal.png?id=screenshots In this case, <a1>LL::NG</a1> acts like an SAML2 Service Provider (SP). Dans ce cas, <a1>LL::NG</a1> agit comme un fournisseur de service SAML2 (SP). ../pages/documentation/quickstart.html ../pages/documentation/quickstart.html Example of status page: Exemple de page de statut : <s0><a1>API</a1> secret key</s0>: <a2>API</a2> secret key from Yubico <s0>Clef secrète de l'<a1>API</a1></s0> : clef secrète de l'<a2>API</a2> obtenue auprès de Yubico multi <s0>=></s0> <s1>{</s1> multi <s0>=></s0> <s1>{</s1> Follow <a0>SOAP sessions backend</a0> page Suivre la documentation <a0>backend de sessions SOAP</a0> randomPasswordRegexp randomPasswordRegexp The <a0>Yubikey</a0> is a small material token shipped by <a1>Yubico</a1>. <a0>Yubikey</a0> est un petit matériel d'authentification vendu par <a1>Yubico</a1>. <s0>Domain</s0>: validity domain for the cookie (the cookie will not be sent on other domains) <s0>Domaine</s0> : domaine de valaidité du cookie (le cookie n'est pas envoyé vers d'autres domaines) ../../documentation/1.4/fileconfbackend.html ../../documentation/1.4/fileconfbackend.html Let's go On y va <s0>Sign <a1>SSO</a1> message</s0>: sign <a2>SSO</a2> message <s0>Signature des messages <a1>SSO</a1></s0> : signe les messages <a2>SSO</a2> Run Test LemonLDAP::NG configuration is mainly a key/value structure, so Manager will present all keys into a structured tree. La configuration de LemonLDAP::NG est essentiellement une structure clef/valeur, ainsi le manager présente toutes les clefs en un arbre structuré. Mail Mail accept (or whatever you want) accept (ou la valeur désirée) You can refer to <a0>parameter list</a0> to find it. Se référer à la <a0>liste des paramètres</a0> pour le trouver. In the Manager, select node <a0>SAML</a0> service providers and click on New service provider: Dans le manager, selectionner le noeud fournisseurs de service <a0>SAML</a0> et cliquer sur Nouveau fournisseur de service : On your main server, configure a <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> backend Sur le serveur principal, configurer un backend <a0>File</a0>, <a1>SQL</a1> or <a2>LDAP</a2> Password change form (in menu) Formulaire de changement de mot-de-passe (dans le menu) DataSource -> dbi:mysql:sessions;host=... DataSource -> dbi:mysql:sessions;host=... documentation:1.4:authssl documentation:1.4:authssl Then select <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: Ensuite sélectionner <c0>Set up single sign-on (<a1>SSO</a1>)</c0>: <s0>Sessions activity timeout</s0>: Maximum inactivity duration. <s0>Délai d'expiration des sessions</s0> : durée maximale d'inactivité. /_detail/screenshots/1.0/dark/portal.png?id=screenshots /_detail/screenshots/1.0/dark/portal.png?id=screenshots BrowserID is also known as Mozilla Persona. BrowserID est également connu sous le nom de « Mozilla Persona ». Twitter authentication level Niveau d'authentification de Twitter By default, if user process connection settings are empty, authentication process connection settings will be used. Par défaut, si les paramètres de processus de connexion utilisateur sont vides , ceux d'authentification seront utilisés. Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Zimbra</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Zimbra</c3>, et éditer les clefs suivantes : <s161>//"userobm_system" => ,</s161> <s161>//"userobm_system" => ,</s161> <s0>Force authentication</s0>: set ForceAuthn flag in authentication request <s0>Authentification forcée</s0> : positionne le drapeau ForceAuthn dans la requête d'authentification First, configure your real backend Premièrement, configurer le backend réel To keep Memcached performance level and <a0>LL::NG</a0> features, you can replace <a1>Memcached</a1> by <a2>Redis</a2> using <a3>NoSQL session backend</a3>. Pour maintenir un niveau de performance tel celui de Memcached et préserver les fonctionnalités de <a0>LL::NG</a0>, on peut remplacer <a1>Memcached</a1> par <a2>Redis</a2> en utilisant le <a3>backend de sessions NoSQL</a3>. http://haproxy.1wt.eu/ http://haproxy.1wt.eu/ The sources are available on <a0>download page</a0>. Les sources sont disponibles sur la <a0>page de téléchargement</a0>. documentation:1.4:formreplay documentation:1.4:formreplay POST data <a0>URI</a0>: /process.php <a0>URI</a0> où envoyer les données : /process.php This requires to request user old password (see <a1>portal customization</a1>). Nécessite de requérir l'ancien mot-de-passe (voir <a1>personnalisation du portail</a1>). It returns: Elle retourne : <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> <s0><s1><?xml</s1> <s2>version</s2>=<s3>'1.0'</s3> <s4>encoding</s4>=<s5>'utf-8'</s5><s6>?></s6></s0> <s7><s8><tomcat-users<s9>></s9></s8></s7> ../pages/documentation/1.4/variables.html ../pages/documentation/1.4/variables.html <s0>Other</s0>: <s0>Autres</s0> : http://fosdem.org/2012/schedule/event/lemonldapng http://fosdem.org/2012/schedule/event/lemonldapng PerlHandler Lemonldap::NG::Handler::Proxy PerlHandler Lemonldap::NG::Handler::Proxy You've simply to insert a notification and connect to the portal using the same UID. Il suffit d'insérer une notification et de se connecter au portail en utilisant le même UID. <s0>Mail field name</s0>: name of authentication table column hosting mail (for password reset) <s0>Nom du chmap mail</s0> : nom de la colonne de la table d'authentification contenant le mail (pour la réinitialisation du mot-de-passe) Some articles published somewhere in the world wide web. Quelques articles publiés quelque part sur le web. <s16># Directory index</s16> <s16># Directory index</s16> http://httpd.apache.org/docs/current/mod/mod_proxy.html http://httpd.apache.org/docs/current/mod/mod_proxy.html documentation:exportedvars.png documentation:exportedvars.png Local file Fichier local Remote Remote ../pages/download.html ../pages/download.html localStorage localStorage Timezone Timezone http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf ../../documentation/1.4/handlerauthbasic.html ../../documentation/1.4/handlerauthbasic.html ../documentation/current/ssocookie.html#sso_cookie ../documentation/current/ssocookie.html#sso_cookie ../../documentation/1.4/start.html#identity_provider ../../documentation/1.4/start.html#identity_provider documentation:liferay_7.png documentation:liferay_7.png <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf <s0>include</s0> /usr/local/lemonldap-ng/etc/portal-apache2.conf <s1>include</s1> /usr/local/lemonldap-ng/etc/handler-apache2.conf <s2>include</s2> /usr/local/lemonldap-ng/etc/manager-apache2.conf <s3>include</s3> /usr/local/lemonldap-ng/etc/test-apache2.conf In the Manager, select node <c0><a1>SAML</a1> identity providers</c0> and click on <c2>New identity provider</c2>: Dans le Manager, selectionner le noeud <c0>Fournisseurs d'identité <a1>SAML</a1></c0> et cliquer sur <c2>Nouveau fournisseur d'identité</c2> : <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> <s11><s12><SPSSODescriptor</s12> <s13>protocolSupportEnumeration</s13>=<s14>"urn:oasis:names:tc:SAML:2.0:protocol"</s14><s15>></s15></s11> documentation:1.4:portalcustom documentation:1.4:portalcustom /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart /_detail/icons/gpg.png?id=documentation%3A1.4%3Astart <a0>parameterlist</a0><br1/> <a0>parameterlist</a0><br1/> /_detail/screenshots/1.0/impact/password.png?id=screenshots /_detail/screenshots/1.0/impact/password.png?id=screenshots <s0>portal full <a1>URL</a1></s0> if custom function is run by portal (e.g. <a2>https://auth.example.com/</a2>) <s0>l'<a1>URL</a1> complète du portail</s0> si la fonction personnalisée est appelée par le portail (i.e. <a2>https://auth.example.com/</a2>) ../../documentation/1.4/authremote.html ../../documentation/1.4/authremote.html After redirection, normal authentication in the remote portal Après redirection, authentification normale sur le portail distant (celui de son organisation) soapAuthService soapAuthService <a0>CAS</a0> access control policy Politique de contrôle d'accès <a0>CAS</a0> Apache Tomcat Apache Tomcat <a0>LL::NG</a0> use 2 internal databases to store its configuration and sessions. <a0>LL::NG</a0> utilise 2 bases de données interne pour stocker ses configuration et sessions. <a4>YouTube</a4> <a4>YouTube</a4> Habib ZITOUNI Habib ZITOUNI If this session is lost, Google will ask a confirmation for each requested attribute. Si cette session est perdue, Google redemandera confirmation pour chaque attribut demandé. https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt https://opends.dev.java.net/public/standards/draft-behera-ldap-password-policy.txt The session expires after 2 hours by default. Toute session expire au boût de 2 heures par défaut. <s12>{</s12> <s12>{</s12> If no encryption keys are defined, signature keys are used for signature and encryption. Si aucune clef de chiffrement n'est définie, la clef de signature est aussi utilisée pour le chiffrement. http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ http://lanyrd.com/2011/solutions-linux-open-source/sddcx/ ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/applications/drupal.html ../../documentation/1.4/authbrowserid.html ../../documentation/1.4/authbrowserid.html <s0>Shared key</s0>: correspond to the cookie parameter of sympa.conf <s0>Clef prépartagée</s0> : correspond au paramètre du cookie dans sympa.conf Configuration and sessions access by SOAP Accès à la configuration et aux sessions par SOAP documentation:manager-saml-sp-new.png documentation:manager-saml-sp-new.png <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s1>Order</s1> <s2>deny</s2>,<s3>allow</s3> <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl <s3>RewriteRule</s3> ^/saml/metadata /metadata.pl mailR mailR The portal Le portail /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step2.png?id=screenshots For MySQL, you need to set additional parameters: Pour MySQL, il faut ajouter quelques paramètres : cookieName cookieName This file is called <c1>lemonldap-ng.ini</c1> and has the following sections: Le fichier est nommé <c1>lemonldap-ng.ini</c1> et dispose des sections suivantes : <a2>bugzilla</a2><br3/> <a2>bugzilla</a2><br3/> ../../../media/documentation/manager-saml-idp-new.png ../../../media/documentation/manager-saml-idp-new.png You can first check on <a1>LemonLDAP::NG JIRA project</a1> that your bug is not already referenced, and then create it (with a registered account). Commencez par vérifier sur <a1>le site JIRA du projet LemonLDAP::NG</a1> que votre bogue n'est pas déjà référencé, et créez le sinon (avec un compte préalablement créé). Radius server Serveur Radius <s0>Account session key</s0>: session field used as Zimbra user account (by default: uid) <s0>clef de session compte</s0> : champ de session utilisé comme compte utilisateur Zimbra (par défaut : uid) Datas are stored as key/values (no-strings values are serialized). Les données sont stockées en clef/valeur (les valeurs autres que chaînes sont sérialisés). ../pages/documentation/1.1/applications/limesurvey.html ../pages/documentation/1.1/applications/limesurvey.html documentation:1.4:authdemo documentation:1.4:authdemo rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf rm -f /etc/httpd/conf.d/z-lemonldap-ng.conf Secure Token header En-tête du jeton sécurisé <a0>Apache::Session::Redis</a0> is the faster shareable session backend <a0>Apache::Session::Redis</a0> est le module de stockage des sessions en réseau le plus rapide http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml http://www.slideshare.net/ASF-WS/asfws-casopen-idsaml Configure security settings Configurer les paramètres de sécurité Google Apps control panel Panneua de contrôle Google Apps managerDn managerDn documentation:1.4:selfmadeapplication documentation:1.4:selfmadeapplication icons:wizard.png icons:wizard.png ../pages/documentation/1.1/idpsaml.html ../pages/documentation/1.1/idpsaml.html For example, if real sessions are stored in <a0>files</a0>: Par exemple, si les sessions réelels sont stockées dans des <a0>fichiers</a0> : Set exported variables Définir les variables exportées Display logout module Affiche le module de déconnexion UCANSS UCANSS applications:mediawiki_logo.png applications:mediawiki_logo.png ../../documentation/1.4/securetoken.html ../../documentation/1.4/securetoken.html The user can choose a new password or ask to generate one L'utilisateur peut choisir un nouveau mot de passe ou demander sa génération UserName -> user Password -> password Index -> ipAddr uid UserName -> user Password -> password Index -> ipAddr uid perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. perl -MLemonldap::NG::Handler::Status -I/etc/perl -I/usr/local/lib/perl/5.10.1 -I/usr/local/share/perl/5.10.1 -I/usr/lib/perl5 -I/usr/share/perl5 -I/usr/lib/perl/5.10 -I/usr/share/perl/5.10 -I/usr/local/lib/site_perl -I. <s0>Auth-Mail</s0>: $mail <s0>Auth-Mail</s0>: $mail documentation:1.4:highavailability documentation:1.4:highavailability screenshots captures d'écran ../pages/translations.html ../pages/translations.html portal is in a https virtualhost if securedCookie is set le portail est dans un hôte virtuel https si securedCookie est activé <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> <s100>"userobm_company"</s100> <s101>=></s101> <s102>"HTTP_OBM_O"</s102><s103>,</s103> Assertion Consumer Consommateur d'assertions Bugzilla Bugzilla protection protection Full name Nom complet Nov 2011: <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> Nov 2011 : <a0>ZDNet - La gendarmerie nationale renforce la sécurité de l’accès à son SI</a0> You can also display a check box on the authentication form, to allow user to see their login history before beeing redirected to the protected application (see <a0>portal customization</a0>). on peut aussi afficher une case à cocher dans le formulaire d'authentification pour autoriser l'utilisateur à voir son historique de connexion avant d'être redirigé vers l'application protégée (voir la <a0>personnalisation du portail</a0>). ...   </<s4>VirtualHost</s4>> ...   </<s4>VirtualHost</s4>> Session key containing email address La clef de session contient l'adresse mail If a user is redirected from handler to portal for authentication and once he is authenticated, portal redirects him to the redirection <a0>URL</a0>. Si un utilisateur est redirigé depuis un agent vers le portail pour s'authentifier et s'il est déjà authentifié, le portail le redirige vers l'<a0>URL</a0> de redirection. phpLDAPadmin will have no idea of the user connected to the WebSSO. phpLDAPadmin ne connaît donc pas le nom du l'utilisateur connecté au WebSSO. Allow form autocompletion Autorise l'autocompletion du formulaire ssoStartDate ssoStartDate Menu style preferences are stored in cookies (1 year duration). Les préférences du menu sont stockées dans des cookies (valables 1 an). But you have to allow sessions web services, see <a0>SOAP sessions backend</a0>. Il faut en revanche autoriser le service web des sessions, voir le <a0>backend de sessions SOAP</a0>. Zimbra virtual host in Manager Hôte virtuel Zimbra dans le manager /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newurl.png?id=documentation%3A1.4%3Aformreplay ../../documentation/1.4/applications/tomcat.html ../../documentation/1.4/applications/tomcat.html Key name Nom de la clef Then edit MediaWiki local settings Éditer ensuite les paramètres locaux MediaWiki <s0>Username control</s0>: Regular expression used to check user login syntax. <s0>Contrôle du nom d'utilisateur</s0> : expression régulière utilisée pour vérifier la syntaxe du nom d'utilisateur. <s0>table</s0>: Notifications table name. <s0>table</s0> : nom de la table des notifications. User table: where user data are stored (mail, name, etc.) La table utilisateurs : où les données utilisateurs sont stockées (mail, nom, etc.) Authorization => "Basic ".encode_base64("$uid:$_password") Authorization => "Basic ".encode_base64("$uid:$_password") rtyler rtyler YUM repository Dépôt YUM The script uses the <c0>editor</c0> system command, that links to your favorite editor. Ce script utilise la commande système <c0>editor</c0>, qui est liée à l'éditeur favori. http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP.pod ../../../media/documentation/exportedvars.png ../../../media/documentation/exportedvars.png In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose BrowserID for authentication. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir BrowserID pour l'authentification. Register what module was used for authentication, user data, password, … Enregistre les modules utilisés pour l'authentification, les données utilisateurs, les mots-de-passe, … <s0>getCookies(user,password)</s0>: authentication system. <s0>getCookies(user,password)</s0> : système d'authentification. phpLDAPadmin virtual host in Manager Hôte virtuel phpLDAPadmin dans le manager ldapgroups -> memberOf ldapgroups -> memberOf http://en.wikipedia.org/wiki/IBM_Lotus_iNotes http://en.wikipedia.org/wiki/IBM_Lotus_iNotes All pages Toutes les pages a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf ../pages/documentation/1.1/authopenid.html ../pages/documentation/1.1/authopenid.html In other words, take the time to configure this part before sharing metadata. En d'autres mots, prenez le temps de bien configurer cette partie avant de partager les metadatas. Single Sign On Authentification unique (Single Sign On) <s6>Options</s6> +ExecCGI <s6>Options</s6> +ExecCGI dbiAuthLoginCol dbiAuthLoginCol Integration in Active Directory (LDAP and Kerberos) Integration dans Active Directory (LDAP et Kerberos) Name of the cookie Nom du cookie <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> <<s1>Directory</s1> /usr/local/lemonldap-ng/htdocs/manager/> /_detail/screenshots/1.0/impact/menu.png?id=screenshots /_detail/screenshots/1.0/impact/menu.png?id=screenshots Declare module in Apache configuration Declarer le module dans la configuration d'Apache <a0>Twitter</a0> is a famous microblogging server. <a0>Twitter</a0> est un serveur de microblog célèbre. <s5>Allow</s5> from <s6>all</s6> <s5>Allow</s5> from <s6>all</s6> ../pages/start.html ../pages/start.html It needs 4 modules to work: Il a besoin de 4 modules pour fonctionner : documentation:ha-sessions-configuration.png documentation:ha-sessions-configuration.png ../../../media/icons/access.png ../../../media/icons/access.png http://www.sympa.org http://www.sympa.org They can then be forwarded to applications trough <a0>HTTP headers</a0>. Ils peuvent être transférés aux applications via les <a0>en-têtes HTTP</a0>. documentation:manager-saml-private-key.png documentation:manager-saml-private-key.png Choice <a0>URL</a0> parameter Paramètre d'<a0>URL</a0> pour "Choice" DBI DBI LL::NG LL::NG Authentication: will create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : créé une session sans demander quoi que ce soit (mais enregistre l'adresse <a0>IP</a0> cliente et la date de création) CREATE TABLE lmConfig ( CREATE TABLE lmConfig ( <s0>Logo</s0>: file name to use as logo <s0>Logo</s0> : nom de fichier à utiliser comme logo For example, in handler/MyHandler.pm: Par exemple, dans handler/MyHandler.pm: KrbMethodNegotiate <s16>On</s16> KrbMethodNegotiate <s16>On</s16> Configure Sympa virtual host like other <a0>protected virtual host</a0> but use Sympa Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0>. https://metacpan.org/module/Apache::Session::Browseable::LDAP https://metacpan.org/module/Apache::Session::Browseable::LDAP It sends an OTP, which is validated against Yubico server. Il envoie un mot-de-passe à valeur unique (OTP) qui est validé par un serveur Yubico. zimbraBy zimbraBy Extract Extraction Examples: Exemples : Key Clef Apache::Session performances Performances d'Apache::Session <s0>error</s0>: if user has no access, an error is shown on the portal, the user is not redirected to <a1>CAS</a1> service <s0>error</s0> : si l'utilisateur n'a pas accès, une erreur est affichée sur le portail, l'utilisateur n'est pas redirigé vers le service <a1>CAS</a1> uid: 123456789012 uid: 123456789012 /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications /_detail/screenshots/1.1/notifications/sample_notification.png?id=documentation%3A1.4%3Anotifications Notification backend Module de stockage des notifications LemonLDAP::NG 1.1 release Sortie de LemonLDAP::NG 1.1 Restrict /admin/ directory to user bart.simpson Restreindre le répertoire /admin/ à l'utilisateur bart.simpson For debugging, this valve can print some helpful information in debug level. Pour le debogage, cette valve peut tracer quelques information utiliser. SHA SHA ../../documentation/1.4/ldapminihowto.html ../../documentation/1.4/ldapminihowto.html by users par utilisateurs Storage directory Répertoire de stockage The NameID is the main user identifier, carried in <a1>SAML</a1> messages. NameID est l'identifiant principal de l'utilisateur transmis dans les messages <a1>SAML</a1>. If you can not access the Manager anymore, you can unprotect it by editing <c0>lemonldap-ng.in</c0> and changing the <c1>protection</c1> parameter: SI l'accès au manager est perdu, on peut le déprotéger en éditant <c0>lemonldap-ng.in</c0> et en changeant le paramètre <c1>protection</c1> : Lasso session dump Dump de session Lasso checkDate checkDate psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng psql -h 127.0.0.1 -U lemonldap-ng -W lemonldap-ng If you modify directly the skin files, your modifications will certainly be erased on the next upgrade. Les modifications apportées directement sur les fichiers thèmes risquent d'être perdus à la prochaine mise-à-jour. The value will be used to display the data. Cette valeur sera utilisée pour afficher les données. cookieExpiration cookieExpiration ^/caldav ^/caldav ../pages/documentation/1.1/authproxy.html ../pages/documentation/1.1/authproxy.html An <a0>SAML server</a0> with <a1>OpenID authentication</a1> Un <a0>serveur SAML</a0> avec une <a1>authentification OpenID</a1> KrbAuthRealms EXAMPLE.COM KrbAuthRealms EXAMPLE.COM ldapPasswordResetAttributeValue ldapPasswordResetAttributeValue <s0>Grant session</s0>: check rights to open <a1>SSO</a1> session <s0>Autorise la session</s0> : vérifie le droit d'ouvrir une session <a1>SSO</a1> icons:kmultiple.png icons:kmultiple.png documentation:1.4:authtwitter documentation:1.4:authtwitter Take a look at <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. Voir <a0>http://xmlns.com/foaf/spec/#sec-crossref</a0>. A special <a0>URL</a0> is declared in application menu (like <a1>http://zimbra.example.com/zimbrasso</a1>) Une <a0>URL</a0> spéciale est declarée dans le menu des applications (telle <a1>http://zimbra.example.com/zimbrasso</a1>) LemonLDAP::NG used as <a0>CAS</a0> server. LemonLDAP::NG utilisé comme serveur <a0>CAS</a0>. Allow no certificate to chain with other authentication methods Autoriser les clients sans certificat dans le chaînage avec d'autres méthodes d'authentification ../../documentation/1.4/cda.html ../../documentation/1.4/cda.html Connectors Connecteurs Accept all authenticated users: Accepte tout utilisateur authentifié : Manual download Téléchargement manuel Tomcat valve Valve Tomcat If your sessions explorer is on the same server that the portal, either use the <s0>adminSessions</s0> end point in Manager configuration, or override the <c1>globalStorage</c1> and <c2>globalStorageOptions</c2> parameters in section all (and not portal) of <c3>lemonldap-ng.ini</c3>. Si l'explorateur de sessions est sur le même serveur que le portail, utiliser soit la terminaison <s0>adminSessions</s0> dans la configuration eu manager, ou surcharger les paramètres <c1>globalStorage</c1> et <c2>globalStorageOptions</c2> dans la section all (et pas portal) de <c3>lemonldap-ng.ini</c3>. <s0>Reader <a1>URL</a1></s0>: <a2>URL</a2> used by <a3>SAML</a3> SP to read the cookie. <s0><a1>URL</a1> de lecture</s0> : <a2>URL</a2> utilisée par le SP <a3>SAML</a3> pour lire le cookie. ../../../media/documentation/manager-portalskin.png ../../../media/documentation/manager-portalskin.png Delete other session if <a0>IP</a0> differs Efface les autres sessions de l'utilisateur si les adresses <a0>IP</a0> diffèrent zimbraPreAuthKey zimbraPreAuthKey CGI CGI secureTokenUrls secureTokenUrls You need to register a new application on Facebook to get an application ID and a secret. Il faut enregistrer la nouvelle application dans Facebook pour obtenir un identifiant d'application et un secret. <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <s2>DocumentRoot</s2> /var/lib/lemonldap-ng/portal/   <e0>WHATTOTRACE</e0> must be replaced by the attribute or macro configured in the What To Trace parameter (REMOTE_USER) <e0>WHATTOTRACE</e0> doit être remplacé par l'attribut ou la macro configurée dans le paramètre indiquant le champ utilisateur à stocker dans les journaux (REMOTE_USER) http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 http://www.slideshare.net/coudot/sl2009-identity-management-cycle-ldap-synchronization-and-websso2 documentation:1.4:resetpassword documentation:1.4:resetpassword http://lanyrd.com/2011/jcos/sdrbd/ http://lanyrd.com/2011/jcos/sdrbd/ to the sessions storage backend au système de stockage des sessions icons:gpg.png icons:gpg.png documentation:1.4:authcas documentation:1.4:authcas /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac /_detail/documentation/dia_dit_roles.png?id=documentation%3A1.4%3Arbac <a0>SAML</a0> token Jeton <a0>SAML</a0> <s5>RewriteRule</s5> ^/saml/.* /index.pl <s5>RewriteRule</s5> ^/saml/.* /index.pl <a0>DBI</a0> table name Nom de table <a0>DBI</a0> Follow <a0>SOAP configuration backend</a0> page Suivre la documentation <a0>backend de configuration SOAP</a0> Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Entrez le mot de passe pour le nouveau rôle : <PASSWORD> Entrez-le de nouveau : <PASSWORD> Le nouveau rôle est-il un super-utilisateur ? Apache Kerberos module Module Kerberos d'Apache ../../documentation/1.4/idpopenid.html ../../documentation/1.4/idpopenid.html Internet Explorer Internet Explorer lemonldap-ng-manager: contains administration interface and session explorer lemonldap-ng-manager : contient l'interface d'administration et l'explorateur de session Then you <e0>only</e0> have to write <c1>myskin/css/styles.css</c1> and add your media to <c2>myskin/images</c2>. Il suffit ensuite d'écrire <c1>myskin/css/styles.css</c1> et d'ajouter les médias dans <c2>myskin/images</c2>. remoteGlobalStorage remoteGlobalStorage Access rules and HTTP headers Règles d'accès et en-têtes HTTP Remote Session backend Backend de sessions distant If you use features like <a0>SAML</a0> (authentication and issuer), <a1>CAS</a1> (issuer) and password reset self-service, you also need to index some fields. Lorsqu'on utilise des fonctionnalités telles <a0>SAML</a0> (authentification ou fournisseur d'identité), <a1>CAS</a1> (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs. Since 1.1.0, a notification explorer is available in Manager, and notifications can be done for all users, with the possibility to display conditions. Depuis la version 1.1.0, un explorateur de notifications est disponible dans le manager, et les notifications peuvent être faites pour tous les utilisateurs, avec possibilité d'affichage conditionnel. ../pages/documentation/presentation.html ../pages/documentation/presentation.html <s0><a1>Sessions</a1></s0>: where sessions are stored. <s0><a1>Sessions</a1></s0>: où sont stockées les sessions. Session expiration: sessions will never expire (server side) Expiration des sessions : les sessions n'expirent jamais (du côté serveur) -1 if this <a0>URL</a0> is not known by <a1>LL::NG</a1> configuration -1 si cette <a0>URL</a0> n'est pas connue de la configuration de <a1>LL::NG</a1> documentation:1.4:samlservice documentation:1.4:samlservice Rule for session granting Règle pour l'autorisation d'ouverture de session <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> <s10>Order</s10> <s11>deny</s11>,<s12>allow</s12> OBM_GIVENNAME OBM_GIVENNAME <a2>django</a2><br3/> <a2>django</a2><br3/> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> <s69>"userobm_email"</s69> <s70>=></s70> <s71>"HTTP_OBM_MAIL"</s71><s72>,</s72> Extend variables using macros and groups Étendre les variables en utilisant les macros et groups <a0>OBM</a0> is enterprise-class messaging and collaboration platform for workgroup or enterprises with many thousands users. <a0>OBM</a0> est une plateforme collaborative et de messagerie pour entreprises ou groupes de travail comprenant plusieurs milliers d'utilisateurs. Change <s0>mydomain.org</s0> (in <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) into your Google Apps domain. Changer <s0>mydomain.org</s0> (dans <c1>AssertionConsumerService</c1> markup, parameter <c2>Location</c2>) en votre domaine Google Apps. It has a simple but powerful syntax which makes sure the data files remain readable outside the Wiki and eases the creation of structured texts. Il dispose d'une syntaxe simple mais puissante qui fait que les fichiers de données restent lisibles en dehors du Wiki, et facilite la création de textes structurés. ../../../media/applications/obm_logo.png ../../../media/applications/obm_logo.png Set <c0>Email</c0> in <c1>Options</c1> » <c2>Authentication Response</c2> » <c3>Default NameID format</c3> Mettre <c0>Email</c0> dans <c1>Options</c1> » <c2>Réponse d'authentification</c2> » <c3>Format NameID par défaut</c3> Radius Radius Social Networks and News Réseaux sociaux et nouvelles If a user is not authenticated and attempts to connect to an area protected by a LemonLDAP::NG compatible Handler, he is redirected to a portal. Si un utilisateur n'est pas authentifié et tente de se connecter à une application protégée par un agent compatible LemonLDAP::NG, il est redirigé vers le portail. You have then to install all the downloaded packages: Il faut ensuite installer tous les paquets téléchargés : Another <a0>LL::NG</a0> system configured with <a1>OpenID authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification OpenID</a1> SSLVerifyClient optional_no_ca ... </VirtualHost> SSLVerifyClient optional_no_ca ... </VirtualHost> <s0>ServerName</s0> auth.example.com   <s0>ServerName</s0> auth.example.com   <a0>CAS</a0> Session backend Module de stockage <a0>CAS</a0> hideOldPassword hideOldPassword <s0>Sign-out page <a1>URL</a1></s0>: this in not the SLO access point (Google Apps does not support SLO), but the main logout page. <s0>Sign-out page <a1>URL</a1></s0>: il ne s'agit pas du point d'accès de déconnexion globale (SLO) (Google Apps ne le supporte pas), mais de la page de déconnexion. Go to the Manager and <a0>create a new virtual host</a0> for Sympa. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Sympa. <<s1>Location</s1> /status> <<s1>Location</s1> /status> <s0>url_logout</s0>: <a1>URL</a1> used by OBM to logout, will be caught by <a2>LL::NG</a2> <s0>url_logout</s0>: <a1>URL</a1> utilisée par OBM pour les déconnexions, sera appelée par <a2>LL::NG</a2> Restrict /js/ and /css/ directory to authenticated users Restreindre les répertoires /js/ et /css/ aux utilisateurs authentifiés <a0>WebID</a0> is a way to uniquely identify a person, company, organisation, or other agent using a <a1>URI</a1> and a certificate. <a0>WebID</a0> est un moyen d'identification unique de personnes, entreprises, organisation, ou autre agent en utilisant une <a1>URI</a1> et un certificat. Main components Composants principaux For each binding you can set: Pour chaque déclaration, vous pouvez indiquer : Integrate your own application Integrer ses propres applications Initiate the Kerberos connection: Initialiser la connexion Kerberos : http://www.google.com/apps/ http://www.google.com/apps/ http://lasso.entrouvert.org http://lasso.entrouvert.org ../../documentation/1.4/samlservice.html#general_options ../../documentation/1.4/samlservice.html#general_options ../../../media/applications/limesurvey_logo.png ../../../media/applications/limesurvey_logo.png gender gender Secure Token Memcached servers Serveurs Memcached pour le jeton sécurisé PerlSetVar LmProxyPass http://www.private.com/ PerlSetVar LmProxyPass http://www.private.com/ So Apache::Session module is not a problem for handlers. Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. CPAN test reports: Rapports de test du CPAN: You need some prerequisites: Certains pré-requis sont nécessaire : Skin customization Personnalisation du thème http://en.wikipedia.org/wiki/Doctor_Who http://en.wikipedia.org/wiki/Doctor_Who <s0>Secured cookie</s0>: 4 options: <s0>Cookie sécurisé</s0> : 4 options : <s0>Login history</s0>: display user's last logins and last failed logins <s0>Historique de connexion</s0> : affiche les derniers succès et échecs de connexion We will use the macros to do that. On utilise les macros pour ça. Python (Django) Python (Django) Build the tarball from SVN Construire l'archive depuis SVN Authentication response Réponse d'authentification User owns <a0>SSO cookies</a0> on the main domain (see <a1>Login kinematics</a1>) Les utilisateurs possèdent des <a0>cookies SSO</a0> dans le domaine principal (voir la <a1>cinématique de connexion</a1>) Store user password in session Stocker le mot-de-passe utilisateur dans la session /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart /_detail/icons/warehause.png?id=documentation%3A1.4%3Astart All rules are concerned: Toutes les règles sont concernées : <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>all<s2>]</s2></s0> <s3>cda</s3> <s4>=</s4><s5> 1</s5> icons:flags:de.png icons:flags:de.png POST data Données POST It is compliant with the <a0>form replay</a0> feature Il est compatible avec le <a0>rejeu de formulaire</a0> ../documentation/current/ssocookie.html ../documentation/current/ssocookie.html Conditions: Conditions : https://my-profile.eu/ https://my-profile.eu/ Then, go in <c0>BrowserID parameters</c0>: Ensuite, aller dans les <c0>paramètres BrowserID</c0>: documentation:liferay_5.png documentation:liferay_5.png You can inspect a user session with the sessions explorer (in Manager) On peut inspecter une session utilisateur avec l'explorateur de sessions (accessible depuis le manager) http://en.wikipedia.org/wiki/FastCGI http://en.wikipedia.org/wiki/FastCGI ~40 000 ~40 000 documentation:latest:installrpm documentation:latest:installrpm In the manager: set <a0>Apache::Session::Memcached</a0> in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Dans le manager : indiquez <a0>Apache::Session::Memcached</a0> dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajoutez les paramètres suivant (sensibles à la casse) : Protocol and port Protocole et port You can do it either by uploading the file, or get it from IDP metadata <a0>URL</a0> (this require a network link between your server and the IDP): Ceci peut être fait soit en téléchargeant le fichier, soit en l'obtenant par l'<a0>URL</a0> de métadatas de l'IDP (à condition d'avoir un lien réseau entre le serveur et l'IDP): In Portal virtual host, you will find several configuration parts: Dans l'hôte virtuel du portail se trouve plusieurs éléments de configuration : Then Zimbra do the <a0>SSO</a0> by setting a cookie in user's browser Ensuite Zimbra génère son cookie <a0>SSO</a0> dans le navigateur de l'utilisateur http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng http://www.slideshare.net/coudot/rmll-2009-prsentation-du-websso-lemonldapng <a0>URI</a0> of the page which contains the form L'<a0>URI</a0> de la page qui contient le formulaire <s0>Activation</s0>: set to <c1>On</c1> <s0>Activation</s0> : mettre à <c1>Activé</c1>. ../../../media/screenshots/1.1/mailreset/mailreset_step2.png ../../../media/screenshots/1.1/mailreset/mailreset_step2.png any files sharing system (NFS, NAS, SAN,…) tout système de partage de fichiers (NFS, NAS, SAN,…) /_detail/screenshots/1.0/dark/menu.png?id=screenshots /_detail/screenshots/1.0/dark/menu.png?id=screenshots icons:xeyes.png icons:xeyes.png This documentation just explains how to set up the <a0>SSO</a0> part. Cette documentation explique seulement comment activer la partie <a0>SSO</a0>. /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation /_detail/documentation/lemonldapng-sso.png?id=documentation%3Apresentation http://www.fitzdsl.net/?p=286 http://www.fitzdsl.net/?p=286 To bypass this, <a0>LL::NG</a0> can remember what password was given by user on authentication phase. Pour contourner ce problème, <a0>LL::NG</a0> peut se souvenir du mot-de-passe utilisé dans la phase d'authentification. ../media/icons/bug.png ../media/icons/bug.png A time profile (allowed hours and day of the week) Un profil de temps (heures et jours de la semaine autorisés) <a0>LL::NG</a0> provides a valve, available on <a1>download page</a1>. <a0>LL::NG</a0> fournit une valve, disponible sur <a1>page de téléchargement</a1>. One user tries to access to the portal Un utilisateur tente d'accéder au portail Dokuwiki virtual host in Apache Hôte virtuel Dokuwiki dans le manager SGS SGS This feature can be enabled and configured in Manager, in <c0>General Parameters</c0> » <c1>Advanced Parameters</c1> » <c2>Login History</c2>. Cette fonctionnalité peut être activée et configurée dans le manager dans <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Historique de connexion</c2>. Some applications using it Quelques applications l'utilisant LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> LDAPFilter <s8>=></s8> <s9>'(uid=$user)'</s9><s10>,</s10> <s150>//"userobm_vacation_dateend" => ,</s150> <s150>//"userobm_vacation_dateend" => ,</s150> documentation:1.4:idpsaml documentation:1.4:idpsaml ../media/logos/logo_abuledu.png ../media/logos/logo_abuledu.png ../pages/documentation/1.1/memcachedsessionbackend.html ../pages/documentation/1.1/memcachedsessionbackend.html Sunday is the first day. Dimanche est le premier jour. ../pages/documentation/1.1/notifications.html ../pages/documentation/1.1/notifications.html server server Subject for confirmation mail Sujet du message de confirmation ../../documentation/1.4/portalmenu.html#categories_and_applications ../../documentation/1.4/portalmenu.html#categories_and_applications documentation:1.4:authad documentation:1.4:authad That message can contain session data as user attributes or macros. Ce message peut contenir des données de session tels les attributs ou les macros. http://en.wikipedia.org/wiki/OAuth http://fr.wikipedia.org/wiki/OAuth msmith@badwolf.org msmith@badwolf.org mailReplyTo mailReplyTo Auth-Mail Auth-Mail ../../documentation/1.4/sqlsessionbackend.html ../../documentation/1.4/sqlsessionbackend.html vi /var/lib/lemonldap-ng/portal/login.pl vi /var/lib/lemonldap-ng/portal/login.pl Lemonldap::NG::Manager Lemonldap::NG::Manager yubikeySecretKey yubikeySecretKey <s0>complicatedpassword</s0>: Password of AD technical account <s0>complicatedpassword</s0>: mot-de-passe du compte AD technique Choose and configure your main sessions storage system Choisir et configurer le système principal de stockage des sessions Feature Fonctionnalité documentation.html documentation.html You can also use caFile and caPath parameters. On peut également utiliser les paramètres caFile et caPath. <s0>External databases</s0>: not managed by LemonLDAP::NG, for example user database Les <s0>bases de données externes</s0>: non gérées par LemonLDAP::NG, par exemple la base des utilisateurs <a0>idpcas</a0><br1/> <a0>idpcas</a0><br1/> Clément OUDOT Clément OUDOT Copy <c0>ValveLemonLDAPNG.jar</c0> in <c1><TOMCAT_HOME>/server/lib</c1>: Copier <c0>ValveLemonLDAPNG.jar</c0> dans <c1><TOMCAT_HOME>/server/lib</c1>: When you commit <a0>OmegaT</a0> files in svn repository, don't push backup files. Lorsque vous validez les fichiers <a0>OmegaT</a0> dans le dépôt svn, n'y poussez pas les fichiers de sauvegarde. <s4>Deny</s4> from <s5>all</s5> <s4>Deny</s4> from <s5>all</s5> or: ou : <a0>CAS</a0>_CAFile <a0>CAS</a0>_CAFile groups groups _lassoSessionDump _lassoSessionDump <s0>Internal databases</s0>: only used by LemonLDAP::NG Les <s0>bases de données internes</s0>: utilisées seulement par LemonLDAP::NG <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> <s0><s1><IDPSSODescriptor<s2>></s2></s1></s0> 1.2 1.2 http://www.svwux.org/ http://www.svwux.org/ You can find all versions on <a0>OW2 forge download page</a0>. Vous pouvez trouver toutes les versions sur <a0>la page de téléchargement de la forge OW2</a0>. /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation /_detail/documentation/lemonldap-ng-architecture.png?id=documentation%3Apresentation 1.1 1.1 http://manager.example.com http://manager.example.com <<s8>IfModule</s8> mod_rewrite.c> <<s8>IfModule</s8> mod_rewrite.c> As you may have guessed, these accounts are famous characters from the TV show <a0>Doctor Who</a0>. Comme on peut le voir, ces comptes sont les fameux caractères du show TV <a0>Doctor Who</a0>. SQL SQL <a0>LL::NG</a0> validate the token and propose a password change form <a0>LL::NG</a0> valide la valeur et propose un formulaire de changement de mot-de-passe ../../documentation/presentation.html#kinematics ../../documentation/presentation.html#kinematics Don't forget to install cron files ! N'oubliez pas d'installer les fichiers cron ! If <c0>exportedAttr</c0> is set, only those attributes are copied in the session database of the secondary <a1>LL::NG</a1> structure. Si <c0>exportedAttr</c0> est défini, seuls ces attributs sont copiés dans la base des sessions du système <a1>LL::NG</a1> secondaire. ../../documentation/1.4/idpopenid.html#configuration ../../documentation/1.4/idpopenid.html#configuration <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> <s109>"userobm_address1"</s109> <s110>=></s110> <s111>"HTTP_OBM_POSTALADDRESS"</s111><s112>,</s112> HASH of login success and failures Table des connexion réussies ou échouées <s0>off</s0>: never display <s0>off</s0> : ne jamais afficher Default skin Thème par défaut documentation:manager-saml-idp-metadata.png documentation:manager-saml-idp-metadata.png ../../documentation/1.4/performances.html ../../documentation/1.4/performances.html Unoptimized for <a0>session explorer</a0> and <a1>single session</a1> features. Pas optimisé pour l'<a0>exlorateur de sessions</a0> et les fonctionnalités de <a1>session unique</a1>. ../../../media/screenshots/1.1/mailreset/mailreset_step5.png ../../../media/screenshots/1.1/mailreset/mailreset_step5.png OpenID authentication level Niveau d'authentification d'OpenID Application menu Menu application authenticate user authentifier les utilisateurs SSL authentication Authentification SSL $uid eq "coudot" $uid eq "coudot" 105.000 105.000 By default, Manager is protected to allow only the demonstration user “dwho”. Par défaut, le manager est protégé et n'autorise que l'utilisateur de démonstration “dwho”. Forward logout to applications Propager les déconnexions aux applications ../documentation/current/logs.html ../documentation/current/logs.html http://www.slideshare.net/coudot/sl2011-lemon-ldapng http://www.slideshare.net/coudot/sl2011-lemon-ldapng ../../../../css/print.css ../../../../css/print.css Session-ID => $_session_id Session-ID => $_session_id <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0>: at the indicated time and date (but this is probably a bad idea) <s0>Thursday, 25-Apr-1999 00:40:33 GMT</s0> : jusqu'à la date indiquée (généralement une mauvaise idée) Go in the Manager and set the session module (<a0>Apache::Session::Browseable::MySQL</a0> for MySQL) in <c1>General parameters</c1> » <c2>Sessions</c2> » <c3>Session storage</c3> » <c4>Apache::Session module</c4> and add the following parameters (case sensitive): Aller dans le manager et mettre le module de session (<a0>Apache::Session::Browseable::MySQL</a0> pour MySQL) dans <c1>Paramètres généraux</c1> » <c2>Sessions</c2> » <c3>Stockage des sessions</c3> » <c4>Module Apache::Session</c4> et ajouter le paramètre suivant (sensible à la casse) : If some of your servers are not in the same (secured) network than the database, it is recommended to use <a3>SOAP access</a3> for those servers. Si certains des serveurs ne se trouvent pas sur le même réseau (securisé) que la même base de données, il est recommandé d'utiliser <a3>l'accès SOAP</a3> pour ces serveurs. It can be a brake for the portal: En revanche, ce peut-être un frein pour le portail : _idpConfKey _idpConfKey Go to the Manager and <a0>create a new virtual host</a0> for Zimbra. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour Zimbra. For full install: Pour une installation complète : Université de Limoges Université de Limoges ($uid =~ /^admin0/i)[0] ? ($uid =~ /^admin0/i)[0] ? ../../../media/documentation/manager-saml-idp-attribute.png ../../../media/documentation/manager-saml-idp-attribute.png Write custom functions library Écrire une librairie de fonctions personnalisées Now imagine the following DIT: On suppose le schéma suivant : .example.com = EXAMPLE.COM .example.com = EXAMPLE.COM <s0>David COUTADEUR</s0>: developer, tester <s0>David COUTADEUR</s0> : developeur, testeur SSL SSL <s0>Secret token</s0>: a secret token used to secure transmissions between OpenID client and server (<s1><a2>see below</a2></s1>). <s0>Jeton secret</s0> : le jeton secret utilisé pour sécuriser les transmissions entre le client et le server OpenID (<s1><a2>voir ci-dessous</a2></s1>). rm custom* cp ../pastel/custom* . rm custom* cp ../pastel/custom* . Service Provider Fournisseur de service The <c0>ProxyPreserveHost</c0> directive will forward the Host header to the protected application.<br1/> La directive <c0>ProxyPreserveHost</c0> transfère l'en-tête Host à l'application protégée.<br1/> CAS server Serveur CAS <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <s29>"server_ip_check"</s29> <s30>=></s30> <s31>false</s31><s32>,</s32> <a14>logs</a14><br15/> <a14>logs</a14><br15/> /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-apache.png?id=documentation%3A1.4%3Ahighavailability This kind of <a0>SSO</a0> mechanism is not clean, and can lead to problems, like local password blocking, local session not well closed, etc. Ce type de mécanisme <a0>SSO</a0> n'est pas parfait et peut générer des problèmes tels des blocages de mots-de-passe, sessions locales mal closes, etc... <s0>CRONDIR</s0>: Cronfile directory (default: $PREFIX/etc/lemonldap-ng/cron.d) <s0>CRONDIR</s0> : répertoire des fichiers cron (défaut: $PREFIX/etc/lemonldap-ng/cron.d) http://xmlns.com/foaf/spec/#sec-crossref http://xmlns.com/foaf/spec/#sec-crossref <s0><a1>PGT</a1> file</s0>: temporary file where proxy tickets are stored (by default, <c2>/tmp/pgt.txt</c2>) <s0>Fichier <a1>PGT</a1></s0> : fichier temporaire où les tickets de proxy sont stockés (par défaut, <c2>/tmp/pgt.txt</c2>) ../pages/documentation/1.1/authdbi.html ../pages/documentation/1.1/authdbi.html Handler parameters Paramètres de l'agent <s0>Local <a1>SSO</a1> <a2>URL</a2> pattern</s0>: regular expression to match the <a3>SSO</a3> <a4>URL</a4> (by default: ^/zimbrasso$) <s0>Expression de correspondance de l'<a2>URL</a2> <a1>SSO</a1></s0> : expression régulière de correspondance de l'<a4>URL</a4> <a3>SSO</a3> (par défaut : ^/zimbrasso$) http://test2.example.com http://test2.example.com Configure Dokuwiki virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Dokuwiki comme n'importe quel autre <a0>hôte virtuel protégé</a0>. The generated tarball is in the current directory. L'archive générée est dans le répertoire courant. <s31>...</s31> <s31>...</s31> Name: <c0>Auth-User</c0> Nom : <c0>Auth-User</c0> Auth-Roles => $bbbRoles Auth-Roles => $bbbRoles each area has 2 portals: chacune a 2 portails: documentation:remote-interoperability.png documentation:remote-interoperability.png Some can be mandatory, so if they are not returned by IDP, the session will not open. Certains peuvent être obligatoires, et s'ils ne sont pas retournés par l'IDP, la session n'est pas ouverte. Session opening Ouverture de session <s3>RewriteRule</s3> ^/cas/.* /index.pl <s3>RewriteRule</s3> ^/cas/.* /index.pl <s151>//"userobm_vacation_message" => ,</s151> <s151>//"userobm_vacation_message" => ,</s151> <e0>Example with MySQL</e0>: <e0>Exemple avec MySQL</e0>: ../../../media/applications/linshare_logo.png ../../../media/applications/linshare_logo.png Notifications Notifications http://memcached.org/ http://memcached.org/ ... other SSL parameters ... ... autres paramètres SSL ... You can also configure jetlag (if all of your users use the same timezone): On peut aussi configurer jetlag (si tous les utilisateurs utilisent le même fuseau): Rule name Nom de la règle You just have to share configuration and sessions databases between those servers: Il faut juste partager les bases de données de configuration et des sessions entre ces serveurs : <s0>User source attribute</s0>: name of the attribute in users entries used in the link (default: dn). <s0>Attribut source utilisateur</s0> : nom de l'attribut utilisateur utilisé dans le lien (défaut: dn). The real user identifier is stored in a Memcached server and the protected application can the request the Memcached server to get user identifier. L'identifiant utilisateur réel est stockédans un serveur Memcached et l'application protégée peut requérir le serveur Memcached pour obtenir l'identifiant utilisateur. gen-webid-cert.sh gen-webid-cert.sh http://mail.ow2.org/wws/arc/lemonldap-ng-users http://mail.ow2.org/wws/arc/lemonldap-ng-users The statistics are collected trough a daemon launched by the Handler. Ces statistiques sont collectées via un démon lancé par l'agent. <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> <s15>'LDAP#Openldap'</s15> <s16>=></s16> <s17>{</s17> sympaSecret sympaSecret <s0>Auto login</s0>: set to 1 to use auto login. <s0>Authentification automatique</s0> : mettre à 1 pour utiliser la connexion automatique. tomcat >= 5.5 tomcat >= 5.5 The digit will not be shown on portal page. Le chiffre ne sera pas affiché sur la page portail. LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> LDAPFilter <s21>=></s21> <s22>'(uid=$user)'</s22><s23>,</s23> For tests with <c0>example.com</c0>, launch the following : Pour les tests avec <c0>example.com</c0>, lancer ce qui suit : Xavier GUIMARD Xavier GUIMARD Just configure the <a0>access rules</a0>. Configurer simplement la <a0>règle d'accès</a0>. Then go to trunk directory: Aller ensuite dans le répertoire trunk : _lastAuthnUTime _lastAuthnUTime Use the name you want but this values in the value field. Utiliser n'importe quel nom de clef mais ces valeurs dans le champ « valeur ». Headers are used to give user datas to the application. Les en-têtes sont utilisés pour donner aux applications les données utilisateurs. securedCookie securedCookie documentation:1.4:authradius documentation:1.4:authradius For block brute force attack with fail2ban pour bloquer les attaques en force brute avec fail2ban ../pages/documentation/1.4/authdemo.html ../pages/documentation/1.4/authdemo.html For databases like PostgreSQL, don't forget to add “Commit” with a value of 1 Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1 MBConsulting MBConsulting Access protected application Accéder aux applications protégées logos:logo_gn.png logos:logo_gn.png 1 if user is superadmin 1 si l'utilisateur est super-administrateur When all modifications are done, click on <c0>Save</c0> to store configuration. Lorsque toutes les modifications sont effectuées, cliquer sur <c0>Sauver</c0> pour enregistrer la configuration. To define keys, you can: Pour définir les clefs, vous pouvez : <a6>fileconfbackend</a6><br7/> <a6>fileconfbackend</a6><br7/> Login login Anti frame protection Protection anti-frame Windows 2008 server: Windows 2008 server : SMTPAuthUser SMTPAuthUser ../media/icons/flags/fr.png ../media/icons/flags/fr.png http://en.wikipedia.org/wiki/SAML http://fr.wikipedia.org/wiki/SAML Portal (dark theme) Portail (thème dark) ../../documentation/presentation.html#cross_domain_authentication_cda ../../documentation/presentation.html#cross_domain_authentication_cda Be careful with some applications which doesn't verify Lemonldap::NG headers after having created their own cookies. Faire attention avec certaines applications qui ne vérifient pas les en-têtes Lemonldap::NG après avoir créé leurs propres cookies. http://en.wikipedia.org/wiki/Basic_access_authentication http://fr.wikipedia.org/wiki/HTTP_Authentification Add an Apache access control to avoid other access. Ajouter un contrôle d'accès Apache pour éviter les autres accès. rpm --import rpm-gpg-key-ow2 rpm --import rpm-gpg-key-ow2 Auth-User Auth-User ../../../../media/applications/bugzilla_logo.png ../../../../media/applications/bugzilla_logo.png Some Apache::Session module are not useable by Lemonldap::NG such as Apache::Session::Memcached since this module does not offer capability to browse sessions Certains modules Apache::Session ne sont pas utilisables par Lemonldap::NG tel Apache::Session::Memcached, car ce module n'offre pas de dispositif de parcours des sessions <s132>//"userobm_host_id" => ,</s132> <s132>//"userobm_host_id" => ,</s132> ../pages/documentation/1.1/highavailability.html ../pages/documentation/1.1/highavailability.html This can be used to notify right changes,… See <a1>notifications</a1> for more. Ceci peut être utilisé pour notifier des changements de droits,... Consultez la page <a1>notifications</a1> pour plus d'information. Rule Règle Proxy LL::NG Proxy LL::NG You will need a very recent version of Lasso (>= 2.3.0). Vous devez utiliser une version récente de Lasso (>= 2.3.0). server based restriction (like Apache “allow/deny” mechanism) restrictions basées sur le serveur (tel le mécanisme “allow/deny” d'Apache) You can use the following rules instead: On peut utiliser les règles suivantes à la place : http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Handler.html <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> <s19><s20><OrganizationURL</s20> <s21>xml:lang</s21>=<s22>"en"</s22><s23>></s23></s19>http://www.example.com<s24><s25></OrganizationURL<s26>></s26></s25></s24> <s27><s28></Organization<s29>></s29></s28></s27> All data is stored in plain text files – no database is required. Toutes les données sont stockées dans des fichiers texte, aucune base de données n'est nécessaire. one with read/write rights for servers hosting the manager une avec des droits en lecture/écriture pour les serveurs hébergeant le manager localStorageOptions localStorageOptions → The specified node is not the uploaded tree. → Le nœud spécifié n'est pas dans l'arbre chargé. ../../../../media/applications/googleapps_logo.png ../../../../media/applications/googleapps_logo.png You have access to all environment variable, like user <a1>IP</a1> address. Toutes les variables d'environnement sont disponibles, telle l'adresse <a1>IP</a1> de l'utilisateur. <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> <s0>#!/usr/bin/perl</s0>   <s1>use</s1> SOAP<s2>::</s2><s3>Lite</s3><s4>;</s4> <s5>use</s5> utf8<s6>;</s6>   <s7>my</s7> <s8>$lite</s8> <s9>=</s9> SOAP<s10>::</s10><s11>Lite</s11> SAML2 implementation is based on <a0>Lasso</a0>. L'implementation SAML est basée sur <a0>Lasso</a0>. https://www.djangoproject.com/ https://www.djangoproject.com/ Twitter application name Nom d'application Twitter <s0>Get user info</s0>: contact user database to collect attributes <s0>Récupère les informations utilisateur</s0> : contacte la base de données utilisateurs pour les obtenir <a14>authchoice</a14><br15/> <a14>authchoice</a14><br15/> Check if user is already authenticated Vérifie si l'utilisateur n'est pas déjà authentifié Portal SOAP services Services SOAP du portail Edit ~/.rpmmacros and set your build parameters (example for RHEL5): Editer ~/.rpmmacros et mettre les paramètres de construction (exemple pour RHEL5): mailSubject mailSubject <s0>User attribute</s0>: which session attribute will be used to display <c1>Connected as</c1> in the menu <s0>Attribut utilisateur</s0> : attribut de session à utiliser pour afficher <c1>Connecté en tant que</c1> dans le menu ../../documentation/features.html#session_explorer ../../documentation/features.html#session_explorer Example of a protected virtual host with LemonLDAP::NG as reverse proxy: Exemple d'hôte virtuel protégé avec Lemonldap::NG en proxy-inverse : <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <s19>'samlIDPSSODescriptorSingleSignOnServiceHTTPPost'</s19> <s20>=></s20> <s21>'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;'</s21><s22>,</s22> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> <<s3>Directory</s3> /usr/local/lemonldap-ng/htdocs/portal/> Extraction Extraction /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_dark.png?id=screenshots Drupal Drupal apt-get install libauthen-radius-perl apt-get install libauthen-radius-perl Cache backend Module du cache local LL::NG based protection Protection basée sur LL::NG <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> <a63><s64>print</s64></a63> <s65>"$res notification(s) have been inserted<s66>\n</s66>"</s65><s67>;</s67> <s68>}</s68> ../pages/documentation/1.1/soapminihowto.html ../pages/documentation/1.1/soapminihowto.html Notification backend options Options du module de stockage des notifications To customize a skin, the simplest way is to create a new skin folder: Pour personnaliser un thème, la meilleure façon est de créer un nouveau répertoire : When you set a parameter in <c0>lemonldap-ng.ini</c0>, it will override the parameter from the global configuration. Lorsqu'un paramètre et fixé dans <c0>lemonldap-ng.ini</c0>, il surcharge le paramètre issu de la configuration globale. Define headers used in OBM mapping, for example: Definir les en-têtes utilisés pour les correspondances OBM, par exemple : General parameters Paramètres généraux SlideShare SlideShare Memcached Memcached /_detail/logos/logo_gn.png?id=references /_detail/logos/logo_gn.png?id=references <s0>Use reset attribute</s0>: enable to use the password reset attribute. <s0>Utiliser l'attribut reset</s0> : activé pour utiliser l'attribut reset du mot-de-passe. Portal and Manager skins have not evolved a lot since 1.0, so 1.0 screenshots are still up to date. Les thèmes du portail et du manager n'ont pas beaucoup évolué depuis la version 1.0, donc les captures d'écran 1.0 restent valables. User XXXX was not granted to open session User XXXX was not granted to open session <s0>Reply address</s0>: address seen in the “Reply-To” field <s0>Adresse pour la réponse</s0> : adresse vue dans le champ “Reply-To” ... ... http://www.php.net/empty http://www.php.net/empty <a0>Rules</a0> are applied in alphabetical order (comment and regular expression). Les <a0>règles</a0> sont appliquées dans l'ordre alphabétique (commentaires et expressions régulières). http://auth.example.com http://auth.example.com We split databases in two categories: Nous scindons les bases de données en deux catégories : Casimir ANTUNES Casimir ANTUNES apt-key add rpm-gpg-key-ow2 apt-key add rpm-gpg-key-ow2 Binaries install : Installer les exécutables : Your module has to be loaded by Apache (for example after Handler load): Le module doit être chargé par Apache (par exemple après le chargement de l'agent) : See <a0>SAML service</a0> configuration chapter. Voir le chapître de configuration du <a0>service SAML</a0>. http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://www.zdnet.fr/actualites/la-gendarmerie-nationale-renforce-la-securite-de-l-acces-a-son-si-39765875.htm http://en.wikipedia.org/wiki/OpenID http://fr.wikipedia.org/wiki/OpenID Database Interface Database Interface dbi:Pg:dbname=sessions;host=10.2.3.1 dbi:Pg:dbname=sessions;host=10.2.3.1 You can also use <portal>?logout=1 as logout_url to remove LemonLDAP::NG session when “disconnect” is chosen. On peut aussi utiliser <portal>?logout=1 comme URL de déconnexion pour supprimer la session LemonLDAP::NG lorsque la déconnexion est demandée. twitterAuthnLevel twitterAuthnLevel <s0><a1>DBI</a1></s0> which has been deprecated: it is a read-only backend that exists just for compatibility with older versions of LemonLDAP::NG. <s0><a1>DBI</a1></s0> devenu obsolète : il reste un backend en lecture seule qui n'existe que pour la compatibilité avec les anciennes versions de LemonLDAP::NG. Variables Variables by date par date documentation:1.2:upgrade documentation:1.2:upgrade <s0>isAuthorizedURI(cookieValue,url)</s0>: check if user is granted to access to the function <s0>isAuthorizedURI(cookieValue,url)</s0> : vérifie si l'utilisateur est autorisé à accéder à la fonction <s7># Uncomment this line if you use portal SOAP capabilities</s7> <s7># Décommenter cette ligne si les fonctions SOAP du portail sont utilisées</s7> mkdir /tmp/MyNamespace/2: Permission denied ... mkdir /tmp/MyNamespace/2: Permission denied ... Register LemonLDAP::NG on partner Service Provider Enregistrer LemonLDAP::NG sur le fournisseur de service partenaire <s0>Format</s0> (optional): <a1>SAML</a1> attribute format. <s0>Format</s0> (optionnel) : format de l'attribut <a1>SAML</a1>. /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_logout_menu.png?id=screenshots http://www.limesurvey.org http://www.limesurvey.org Persistent Session backend options Options du backend des sessions persistantes Usage Utilisation LDAP configuration backend Backend de configuration LDAP Currently, the module is simply handling a Radius Authentication request and has been tested only against a FreeRadius server. Actuellement, ce module traite simplement une requête d'authentification Radius et n'a été testé que sur un serveur FreeRadius. Past and present contributors Contributeurs passé et présent Handler Redirections Redirections des agents /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots /_detail/screenshots/1.0/manager/accordeon_light.png?id=screenshots For tests with the configured domain, launch the following : Pour les tests avec le domaine configuré, lancer : Superadmin: no one can stop him! Superadmin : personne ne peut l'arrêter ! 2_pub 2_pub portal/skins/common/mail_password.tpl portal/skins/common/mail_password.tpl To configure your new skin in Manager, select the custom skin, and enter your skin name in the configuration field. Pour configurer le nouveau thème dans le manager, selectionner le thème personnalisé et entrer le nom du nouveau thème dans le champ. Proxy cookie name Nom du cookie du proxy useXForwardedForIP useXForwardedForIP <s0>Binary attributes</s0>: regular expression matching binary attributes (see <a1>Net::LDAP</a1> documentation). <s0>Attributs binaires</s0> : expression régulière correspondant aux attributs binaires (voir la documentation <a1>Net::LDAP</a1>). activeTimer activeTimer Write good rules Écrire de bonnes règles ldapConfBase ldapConfBase <a2>passwordstore</a2><br3/> <a2>passwordstore</a2><br3/> Password: will not change any password Mots-de-passe : ne change aucun mot-de-passe ../../../media/screenshots/1.1/manager/notifications_explorer_create.png ../../../media/screenshots/1.1/manager/notifications_explorer_create.png documentation:1.4:upgrade documentation:1.4:upgrade SAML Service Service SAML If the OpenID consumer ask for data, users will be prompted to accept or not the data sharing. Si le client OpenID demande des données utilisateurs, ceux-ci sont questionnés pour accepter ou non le partage. <a0>DBI</a0> Connection chain Chaîne de connexion <a0>DBI</a0> /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_5.png?id=documentation%3A1.4%3Aapplications%3Aliferay Links Links <subtitle>: subtitle to display: will be inserted in <a0>HTML</a0> page enclosed in <h2 class=“notifText”>…</h2> <subtitle> : sous-titre : sera inséré dans la page <a0>HTML</a0> encadré dans <h2 class=“notifText”>…</h2> It will open a dialog to choose: Une boîte de dialoque s'ouvre pour choisir : <s0><a1>Portal</a1></s0>: used to authenticate users, display applications list and provides identity provider service (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). <s0><a1>Portail</a1></s0>: utilisé pour authentifier les utilisateurs, afficher la liste des applications et fournir le service d'identité (<a2>SAML</a2>, <a3>OpenID</a3>, <a4>CAS</a4>). http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software http://confoo.ca/en/2011/session/lemonldap-ng-a-free-web-single-sign-on-software The configuration will be store under a specific branch, for example <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. La configuration est stockée dans une branche spécifique, par exemple <c0>ou=conf,ou=applications,dc=example,dc=com</c0>. <a0>DBI</a0> Mail column Colonne mail <a0>DBI</a0> http://www.tux.in.ua/articles/2810 http://www.tux.in.ua/articles/2810 Prepare the database Preparer la base de données Change default DNS domain Changer le domaine DNS par défaut Fill values here: Renseigner les valeurs ici : http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ http://lanyrd.com/2011/appsec-forum-2011/sgyzq/ dbiPassword dbiPassword Now we have to send the right role to the right application trough LemonLDAP::NG. Il faut maintenant envoyer le bon rôle à la bonne application via LemonLDAP::NG. <s0>Logout</s0>: logout button <s0>Déconnexion</s0> : bouton de déconnexion data longblob ); data longblob ); ../pages/documentation/1.1/authapache.html ../pages/documentation/1.1/authapache.html liblemonldap-ng-portal-perl: Portal files liblemonldap-ng-portal-perl : fichiers du portail /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help /usr/share/lemonldap-ng/bin/lemonldap-ng-cli help ssoLogonHours ssoLogonHours <s9>Options</s9> +ExecCGI <s9>Options</s9> +ExecCGI Mounir GZADY Mounir GZADY Here are the main options used by <a0>LL::NG</a0>: Ci-dessous les principales options utilisées par <a0>LL::NG</a0> : No configuration found No configuration found ../pages/documentation/1.1/authyubikey.html ../pages/documentation/1.1/authyubikey.html ../../documentation/1.4/configvhost.html ../../documentation/1.4/configvhost.html Restart all your remote Apache servers Redémarrer tous les serveurs Apache distants <s0>newSession</s0>: create a session (return attributes) <s0>newSession</s0> : crée une session (retourne les attributs) KrbMethodK5Passwd <s13>Off</s13> KrbMethodK5Passwd <s13>Off</s13> <s45>//"userobm_domain_id" => ,</s45> <s45>//"userobm_domain_id" => ,</s45> Portal customization Personnalisation du portail ../../documentation/1.1/upgrade.html ../../documentation/1.1/upgrade.html <s0>SSLUserName</s0> (optional): certificate field that will be used to identify user in <a1>LL::NG</a1> portal virtual host <s0>SSLUserName</s0> (optionnel) : champ du certificat à utiliser pour identifier pour identifier un utilisateur dans l'hôte virtuel du portail <a1>LL::NG</a1> <a12>logoutforward</a12><br13/> <a12>logoutforward</a12><br13/> <s0>LmLocationToReplace</s0>: string to replace in <c1>Location</c1> header <s0>LmLocationToReplace</s0> : chaîne à remplacer dans l'en-tête <c1>Location</c1> ../pages/documentation/1.1/formreplay.html ../pages/documentation/1.1/formreplay.html Apache configuration Configuration d'Apache Create sessions table: Créer la table des sessions : ../documentation/current/start.html#configuration_database ../documentation/current/start.html#configuration_database This protocol is implementated in an <a2>LL::NG</a2> specific Handler. Ce protocole est implementé dans un handler spécifique de <a2>LL::NG</a2>. documentation:1.4:variables documentation:1.4:variables twitterAppName twitterAppName <a1>Of course, there are other differences</a1>. <a1>Il y a bien sur d'autres différences</a1>. ../../../media/documentation/manager-menu-application.png ../../../media/documentation/manager-menu-application.png ../pages/documentation/1.1/authremote.html ../pages/documentation/1.1/authremote.html <a0>DBI</a0> authentication level Niveau d'authentification <a0>DBI</a0> ../../documentation/1.4/federationproxy.html ../../documentation/1.4/federationproxy.html </<s15>Location</s15>>   </<s15>Location</s15>>   To avoid problems, <a0>LL::NG</a0> decode them using <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. Pour éviter les problèmes, <a0>LL::NG</a0> les décode en utilisant <a1>http://search.cpan.org/perldoc?Apache2::URI#unescape_url</a1>. In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Twitter for authentication module. Dans le manager, allez dans <c0>Paramètres generaux</c0> > <c1>Modules d'authentification</c1> et choisissez Twitter comme module d'authentication. <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <s0><s1><AttributeAuthorityDescriptor<s2>></s2></s1></s0> <<s17>IfModule</s17> mod_dir.c> <<s17>IfModule</s17> mod_dir.c> rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* rpm -Uvh lemonldap-ng-* perl-Lemonldap-NG-* Another <a0>LL::NG</a0> system configured with <a1>CAS authentication</a1> Un autre système <a0>LL::NG</a0> configuré avec <a1>authentification CAS</a1> documentation:1.4:soapconfbackend documentation:1.4:soapconfbackend Portal recognizes the user with its <a0>SSO cookies</a0>, and see he is coming from a different domain Le portail reconnaît l'utilisateur par son <a0>cookie SSO</a0> et voit qu'il sollicite une application d'un domaine différent You can also use the same user for all. On peut également utiliser le même compte pour tous. ../pages/documentation/1.1/authssl.html ../pages/documentation/1.1/authssl.html <a20>press</a20><br21/> <a20>press</a20><br21/> ssoEndDate ssoEndDate documentation:1.4:authnull documentation:1.4:authnull <s0>User Header</s0>: Auth-User (case sensitive) <s0>User Header</s0>: Auth-User (case sensitive) ../../documentation/1.4/status.html ../../documentation/1.4/status.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html http://twitter.com/lemonldapng http://twitter.com/lemonldapng Connector Connecteur Example : Exemple : <s0><a1>CAS</a1> session module name and options</s0>: choose a specific module if you do not want to mix <a2>CAS</a2> sessions and normal sessions (see <a3>why</a3>). <s0>Nom et options du module session <a1>CAS</a1></s0> : choisir un module spécifique pour ne pas mêler les sessions <a2>CAS</a2> et les sessions normales (voir <a3>pourquoi</a3>). Authentication and UserDB Authentification et base d'utilisateurs No <a0>headers</a0> are required. Aucun <a0>en-tête</a0> n'est nécessaire. Variables are stored in the user session. Les variables sont stockées dans la session utilisateur. <s0>Mail charset</s0>: Charset used for the body of the mail (default: utf-8) <s0>Jeu de caractères du courriel</s0> : jeu de caractère utilisé pour le corps du message (défaut : utf-8) ../../../documentation/1.4/configvhost.html#lemonldapng_configuration ../../../documentation/1.4/configvhost.html#lemonldapng_configuration <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> <s40><s41><property</s41> <s42>name</s42>=<s43>"preAuthenticatedUserDetailsService"</s43><s44>></s44></s40> lemonldap_ng_sample_protected_application_1340022329086.png lemonldap_ng_sample_protected_application_1340022329086.png Form replay data les données à rejouer dans les formulaires Get the tarball on <a0>download page</a0> and follow next steps (or install using <a1>RPM</a1> or <a2>Debian</a2> packages): Récupérez l'archive sur la <a0>page de téléchargement</a0> et suivez les étapes suivantes (ou installez les paquets <a1>RPM</a1> ou <a2>Debian</a2>): <s0>Group source attribute</s0>: name of the attribute in groups entries used in the link, for recursive group search (default: dn). <s0>Attribut source du groupe</s0> : nom de l'attribut dans l'entrée groupe utilisé dans le lien pour la recherche récursive de groupe (défaut : dn). ../../documentation/1.4/portalmenu.html ../../documentation/1.4/portalmenu.html mailreset_step4.png mailreset_step4.png A skin is composed of different files: Un thème est composé de différents fichiers : Adapt the reload virtual host name to the domain you configured. Adapter le nom d'hôte virtuel de rechargement au domaine configuré. User is redirected on portal and his <a0>SSO cookies</a0> is empty L'utilisateur est redirigé vers le portail et son <a0>cookie SSO</a0> est vide mailreset_step1.png mailreset_step1.png To use TLS, set <c0>ldap+tls://server</c0> and to use LDAPS, set <c1>ldaps://server</c1> instead of server name. Pour utiliser TLS, utiliser <c0>ldap+tls://server</c0> et pour utiliser LDAPS, indiquer <c1>ldaps://server</c1> au lieu du nom de serveur. /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart /_detail/icons/xeyes.png?id=documentation%3A1.4%3Astart documentation:1.4:applications:phpldapadmin documentation:1.4:applications:phpldapadmin You must read the man page corresponding to your database (<a0>Apache::Session::MySQL</a0>, …) to learn more about parameters. Il faut consulter la page de manuel correspondant à la base de données (<a0>Apache::Session::MySQL</a0>, …) pour connaître les paramètres. Exported attributes Attributs exportés Prerequisites Pré-requis <s0>Application logout</s0>: the request is forwarded to application but <a1>SSO</a1> session is not closed <s0>Déconnexion applicative</s0>: la requête est transmise à l'application mais la session <a1>SSO</a1> n'est pas détruite Change <s0>mydomain.org</s0> into your Google Apps domain Mettre <s0>mydomain.org</s0> dans le domaine Google Apps Some examples: Quelques exemples: https://metacpan.org/module/Apache::Session::Browseable https://metacpan.org/module/Apache::Session::Browseable /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots /_detail/screenshots/0.9.3/lemonldap-ng-portal-auth.png?id=screenshots <s0>fileNameSeparator</s0>: file name separator. <s0>fileNameSeparator</s0> : séparateur de nom de fichier. ../media/logos/logo_ministere_justice.jpg ../media/logos/logo_ministere_justice.jpg </<s6>IfModule</s6>>   </<s6>IfModule</s6>>   SAML sessions module name and options Options et nom du module de sessions SAML <s0>adminSessions/</s0>: read/write access to sessions (required for distant Portal, distant Manager or distant Handlers which modify sessions) <s0>adminSessions/</s0> : accès en lecture/écriture aux sessions (nécessaire pour les portails ou manager distants ou les handlers distants qui modifient les sessions) PRIMARY KEY (cfgNum,field) PRIMARY KEY (cfgNum,field) It is stored in session datas under the name <s0>$_facebookToken</s0> Il est stocké dans les données de session sous le nom <s0>$_facebookToken</s0> cd lemonldap-ng-* make make configure make test sudo make install cd lemonldap-ng-* make make configure make test sudo make install documentation:1.4:federationproxy documentation:1.4:federationproxy documentation:1.4:authmulti documentation:1.4:authmulti Status module activation Activation du module de statut tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-* make debian-packages https://auth.linagora.com/ https://auth.linagora.com/ http://journeesperl.fr/fpw2011/talk/3383 http://journeesperl.fr/fpw2011/talk/3383 LemonLDAP::NG provide a script that allows to edit configuration items in non interactive mode. LemonLDAP::NG fournit un script qui autorise l'édition d'éléments de configuration en mode non-interactif. Zimbra application in menu Application Zimbra dans le menu http://search.cpan.org/perldoc?Apache::Session http://search.cpan.org/perldoc?Apache::Session aptitude install lemonldap-ng aptitude install lemonldap-ng In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>CAS</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> et configurer : Safe can be very annoying when we use <a0>extended functions</a0> or <a1>custom functions</a1>. Safe peut être très gênant lorsqu'on utilise les <a0>fonctions étendues</a0> ou les <a1>fonctions personnalisées</a1>. http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://search.cpan.org/perldoc?Apache::Session::Browseable::MySQL http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev http://mail.ow2.org/wws/subscribe/lemonldap-ng-dev NTLM NTLM Postal code Postal code kdestroy kdestroy (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? (o/n) n Le nouveau rôle doit-il être autorisé à créer des bases de données ? <s1>RewriteEngine</s1> <s2>On</s2> <s1>RewriteEngine</s1> <s2>On</s2> Custom functions Fonctions personnalisées make make test make make test ../../documentation/1.4/writingrulesand_headers.html#headers ../../documentation/1.4/writingrulesand_headers.html#headers LemonLDAP::NG configuration Configuration de LemonLDAP::NG Configure your tomcat home in <c0>build.properties</c0> files. Configurer votre tomcat home dans le fichier <c0>build.properties</c0>. Customizable NameID formats are: Les formats de NameID personnalisables sont : RMLL RMLL <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> <s54>'create_user'</s54> <s55>=></s55> <s56>$_SERVER</s56><s57>[</s57><s58>'HTTP_AUTH_SUPERADMIN'</s58><s59>]</s59><s60>,</s60> Extract from the <a0>Wikipedia article</a0>: Extrait de <a0>l'article Wikipedia</a0>: ^/public/ ^/public/ Kinematics: Cinématique : make ubuntu-install make ubuntu-install ../../documentation/1.4/filesessionbackend.html ../../documentation/1.4/filesessionbackend.html ../pages/documentation/1.1/sessions.html ../pages/documentation/1.1/sessions.html https://wikit.firewall-services.com/doku.php?id=lemonldap_ng https://wikit.firewall-services.com/doku.php?id=lemonldap_ng <s0>Force authentication</s0>: set to 'On' to force authentication when user connects to portal, even if he has a valid session <s0>Forcer l'authentification</s0> : mettre à 'Activé' pour forcer l'authentification lorsque l'utilisateur accède au portail même s'il dispose d'une session valide Define at least: Definir au moins : ../media/rpm-gpg-key-ow2 ../media/rpm-gpg-key-ow2 Edit also OBM Apache configuration to enable <a0>LL::NG</a0> Handler: Éditer également la configuration du serveur Apache d'OBM pour activer les en-têtes <a0>LL::NG</a0> : multiValuesSeparator multiValuesSeparator Go in Manager, and: Aller dans le manager et : ^/pub/admin/ ^/pub/admin/ unicode2iso unicode2iso openIdIDPList openIdIDPList You just need to know the ID of the error (look at Portal/Simple.pm) and then add to <c0>lemonldap-ng.ini</c0>: Il suffit de connaître l'ID de l'erreur (voir Portal/Simple.pm) et de l'ajouter dans <c0>lemonldap-ng.ini</c0> : <s0>SSLVerifyClient</s0>: set to <c1>optional</c1> to allow user with a bad certificate to access to <a2>LL::NG</a2> portal page. <s0>SSLVerifyClient</s0> : mettre à <c1>optional</c1> pour autoriser les utilisateurs ne disposant pas d'un certificat valide à accéder à la page du portail <a2>LL::NG</a2> Get the tarball from <a0>download page</a0>. Récupérer l'archive depuis la <a0>page de téléchargement</a0>. This script must be run as root, it will then use the Apache user and group to access configuration. Ce script doit être lancé par root, il utilisera ensuite le compte et le groupe d'Apache pour accéder à la configuration. Auto login Auto login More than one server can be set here separated by spaces or commas. Plusieurs serveurs peuvent être renseignés séparés par des virgules ou espaces. Notification delete function: Fonction d'effacement de notification : Add a floating menu Ajouter un menu flottant Zimbra syncs to smartphones (iPhone, BlackBerry) and desktop clients like Outlook and Thunderbird. Zimbra se synchronise avec les smartphones (iPhone, BlackBerry) et les clients lourds de bureau tels Outlook et Thunderbird. <a20>authfacebook</a20><br21/> <a20>authfacebook</a20><br21/> <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s4>Order</s4> <s5>allow</s5>,<s6>deny</s6> <s0>dbiUser</s0>: <a1>DBI</a1> user. <s0>dbiUser</s0> : utilisateur <a1>DBI</a1>. <a0>Download the Lasso tarball</a0> and compile it on your system. <a0>Téléchargez l'archive Lasso</a0> et compilez là sur votre système. We include some template files that can be customized: Nous incluons des fichiers modèles qui peuvent être personnalisés : Certificate authorities directory Répertoire des autorités de certification Configuration access Accès à la configuration LemonLDAP::NG Manager Gestionnaire LemonLDAP::NG <s0>get_key_from_all_sessions</s0>: list all sessions and return asked keys <s0>get_key_from_all_sessions</s0> : liste toutes les sessions et retourne les clefs demandées screenshots:1.1:manager:notifications_explorer_create.png screenshots:1.1:manager:notifications_explorer_create.png <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> <s52><s53><property</s53> <s54>name</s54>=<s55>"userDetailsService"</s55> <s56>ref</s56>=<s57>"userDetailsService"</s57><s58>/></s58></s52> documentation/features.html documentation/features.html Give display name Donne le nom à afficher vi /var/www/html/limesurvey/config.php vi /var/www/html/limesurvey/config.php Form replay with Apache mod_proxy Rejeu de formulaires avec le mod_proxy d'Apache Protected application sends response to Handler L'application protégée renvoie sa réponse à l'agent <s0>Shared secret</s0>: this is the passphrase to use to connect to the Radius server <s0>Secret partagé</s0> : la phrase de passe à utiliser pour se connecter au serveur Radius $_userDB $_userDB If a modification is done, the configuration is saved with a new configuration number. Si une modification est effectuée, la configuration est sauvée avec un nouveau numéro. documentation:manager-menu-application.png documentation:manager-menu-application.png Headers are defined inside a virtualhost and takes effect only on it. Les en-têtes sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Manage virtual hosts Gérer les hôtes virtuels Authentication module Module d'authentication If the user do a new password reset request but there is already a request pending, the user can ask the confirmation mail to be resent. Si l'utilisateur effectue une nouvelle demande de réinitialisation mais qu'une requête est déjà en attente, il peut demander une ré-expédition du courriel. Event Événement MD5 MD5 dbiUserUser dbiUserUser XXXX was not found in tree XXXX was not found in tree If you modify <c0>/saml/metadata</c0> suffix you have to change corresponding Apache rewrite rule. Si vous modifiez le suffixe <c0>/saml/metadata</c0>, vous devez changer la règle de réécriture d'Apache. ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/applications.html ../pages/documentation/1.1/samlservice.html ../pages/documentation/1.1/samlservice.html $groups $groups <a28>authnull</a28><br29/> <a28>authnull</a28><br29/> Domain Name System Domain Name System http://www.iana.org/assignments/enterprise-numbers http://www.iana.org/assignments/enterprise-numbers <<s25>Location</s25> /index.pl/notification> <<s25>Location</s25> /index.pl/notification> documentation:1.4:customfunctions documentation:1.4:customfunctions ../../../media/applications/zimbra_logo.png ../../../media/applications/zimbra_logo.png Example for groups: Exemples de groupes: ^/config/ ^/config/ Status module can not be loaded without localStorage parameter Status module can not be loaded without localStorage parameter Prepare database Préparer la base de données ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/sqlconfbackend.html ../../documentation/1.4/passwordstore.html ../../documentation/1.4/passwordstore.html No headers are needed. Aucun en-tête n'est nécessaire. _utime _utime Configure the following <a0>headers</a0>. Configurer les <a0>en-têtes</a0> suivants. Cookie Javascript protection Protection Javascript du cookie translations.html translations.html Remember that rules written on GET parameters must be tested. Rappel : les règles poratnt sur des paramètres GET doivent être testées. ../../documentation/1.4/applications/bugzilla.html ../../documentation/1.4/applications/bugzilla.html Else, current configuration is kept. Sinon, la configuration courante est gardée. Manager tree JQuery <a0>CSS</a0> file Fichier <a0>CSS</a0> de l'arbre JQuery du manager POST data: use form replay Des données POST : à utiliser pour répondre aux formulaires 10.0.0.1:20000 10.0.0.2:20000 10.0.0.1:20000 10.0.0.2:20000 When installing <a0>LL::NG</a0>, the Manager can only be accessed with the demo account <c1>dwho</c1>. Lorsqu'on installe <a0>LL::NG</a0>, le manager n'est accessible que via le compte de démonstration <c1>dwho</c1>. Proxy backend to be used in conjunction with another session backend. Backend proxy à utiliser avec un autre backend de sessions. [PORTAL] is the portal <a0>URL</a0> [PORTAIL] est l'<a0>URL</a0> du portail <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> <s30>'lang'</s30> <s31>=></s31> <s32>'en'</s32><s33>,</s33> install_examples_site (/usr/local/lemonldap-ng/examples) install_examples_site (/usr/local/lemonldap-ng/examples) Redirection to the portal of the secondary area (transparent) Redirection vers le portail secondaire (transparent) <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> <s25><s26><NameIDFormat<s27>></s27></s26></s25>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress<s28><s29></NameIDFormat<s30>></s30></s29></s28> NameID formats Formats de NameID ../pages/documentation/1.1/writingrulesand_headers.html ../pages/documentation/1.1/writingrulesand_headers.html Auth-Roles => $ssoRoles Auth-Roles => $ssoRoles Cascading Style Sheets Cascading Style Sheets https://cas.unilim.fr/ https://cas.unilim.fr/ Go to the Manager and <a0>create a new virtual host</a0> for LimeSurvey. Aller dans le manager et <a0>créer un nouvel hôte virtuel</a0> pour LimeSurvey. Install and launch a <a0>Redis server</a0>. Installez et lancer un <a0>serveur Redis</a0>. Pages where this menu is displayed can be restricted, for example: Les pages où ce menu est affiché peuvent être restreintes, par exemple : secureTokenMemcachedServers secureTokenMemcachedServers Reset password on next logon workflow Réinitialisation du mot-de-passe à la connexion suivante ../../documentation/1.4/security.html#write_good_rules ../../documentation/1.4/security.html#write_good_rules Issy Les Moulineaux Issy-les-Moulineaux You can prefix the key name with a digit to order them. Il est possible d'ordonner les noms de clefs en utilisant un préfixe numérique. <s0>Response Location</s0>: Access Point for <a1>SSO</a1> response. <s0>Response Location</s0> : Point d'accès pour les réponses <a1>SSO</a1>. Location Lieu logos:logo_ucanss.png logos:logo_ucanss.png These options are used to build redirection <a0>URL</a0> (when user is not logged, or for <a1>CDA</a1> requests). Ces options sont utilisées dans la construction des <a0>URL</a0> de redirection (lorsque l'utilisateur n'est pas connecté ou pour les requêtes <a1>CDA</a1>). Sessions database Base de données des sessions A macro is stored as attributes: it can contain boolean results or any string Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères Now we will add Google Apps as a new <a0>SAML</a0> Service Provider: Ajouter ensuite Google Apps comme nouveau fournisseur de service <a0>SAML</a0> : Safe jail Cage sécurisée Presentation Présentation Speaker Conférencier <a0>SSO cookies</a0> is not detected, so Handler redirects user to Portal Si le <a0>cookies SSO</a0> n'est pas détecté, l'agent redirige l'utilisateur vers le portail ../pages/documentation/1.1/applications/authbasic.html ../pages/documentation/1.1/applications/authbasic.html <a0>LL::NG</a0> can also act as <a1>SAML IDP</a1>, that allows to interconnect two <a2>LL::NG</a2> systems. <a0>LL::NG</a0> peut également agir comme un <a1>IDP SAML</a1>, ce qui permet d'interconnecter deux systèmes <a2>LL::NG</a2>. ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ipAddr <e0>WHATTOTRACE</e0> _httpSessionType ipAddr ConFoo ConFoo <a0>SAML</a0> Session backend options Options du module de stockage <a0>SAML</a0> ../../documentation/1.4/fastcgi.html ../../documentation/1.4/fastcgi.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html documentation:1.4:sqlsessionbackend documentation:1.4:sqlsessionbackend You can also choose a different session module to split <a0>SSO</a0> sessions and <a1>SAML</a1> sessions. Vous pouvez également utiliser un module différent pour répartir les sessions <a0>SSO</a0> et <a1>SAML</a1>. Reset password by mail (self service) Réinitialiser les mots-de-passe par mail (self-service) Use redirect on error Utiliser les redirections en cas d'erreur Redis server Serveur Redis Go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2><a3>SAML</a3></c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2><a3>SAML</a3> et configurer : <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>newNotification</s27><s28>(</s28> <s29>'<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <notification uid="foo.bar" date="2009-01-27" reference="ABC"> <text> You have been granted to access to appli-1 </text> <text> You have been granted to access to appli-2 </text> <check> I know that I can acces to appli-1 </check> <check> I know that I can acces to appli-2 </check> </notification> </root> '</s29><s30>)</s30><s31>;</s31>   <s32>if</s32> <s33>(</s33> <s34>$r</s34><s35>-></s35><s36>fault</s36> <s37>)</s37> <s38>{</s38> /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=documentation%3A1.4%3Aresetpassword LockDirectory LockDirectory References Références ../../documentation/1.0/upgrade.html ../../documentation/1.0/upgrade.html cp HttpAuthPlugin.php extenstions/ cp HttpAuthPlugin.php extenstions/ documentation:1.4:ldapconfbackend documentation:1.4:ldapconfbackend 1f777a6581e478499f4284e54fe2d4a4e513dfff 1f777a6581e478499f4284e54fe2d4a4e513dfff The user click on the link in the mail L'utilisateur clique sur le lien dans le courriel LL::NG as federation protocol proxy LL::NG en proxy de fédération de protocoles Portal (impact theme) Portail (thème impact) Prefer then the other solutions (see below). Si c'est le cas, utiliser une autre solution (voir ci-dessous). The portal is the biggest component of Lemonldap::NG. Le portail est le composant le plus gros de Lemonldap::NG. Google Apps does not support Single Logout (SLO). Google Apps ne supporte pas le Single Logout (SLO). LemonLDAP::NG allows to override any configuration parameter directly in script file. LemonLDAP::NG autorise la surcharge de tout paramètre de configuration directement dans les fichiers de script. postcode postcode variables variables Proxy Granting Ticket Proxy Granting Ticket This option can then be overridden for each Service Provider. Cette option peut être surchargée pour chaque fournisseur de service. ../../documentation/1.4/parameterlist.html ../../documentation/1.4/parameterlist.html Authentication backend Module d'authentification Dokuwiki virtual host in Manager Hôte virtuel Dokuwiki dans le manager http://httpd.apache.org/docs/current/mod/mod_ssl.html http://httpd.apache.org/docs/current/mod/mod_ssl.html ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> ldapServer <s5>=></s5> <s6>'ldap1.example.com'</s6><s7>,</s7> http://webchat.freenode.net http://webchat.freenode.net http://lanyrd.com/2012/fosdem/spfqq/ http://lanyrd.com/2012/fosdem/spfqq/ Create two macros (inside <c0>Variables</c0> » <c1>Macros</c1>): Créer deux macros (dans <c0>Variables</c0> » <c1>Macros</c1>): <a0>LWP::UserAgent</a0> parameters Paramètre <a0>LWP::UserAgent</a0> ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../../documentation/1.4/upgrade.html#debian_lenny_upgrade ../pages/documentation/1.1/cda.html ../pages/documentation/1.1/cda.html 'namespace' => 'MyNamespace'? 'namespace' => 'MyNamespace'? lemonldap-ng: meta-package, contains no file but dependencies on other packages lemonldap-ng : meta-paquet qui ne contient aucun fichier mais des dépendances vers les autres paquets Jan 2012: <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Jan 2012 : <a0>Configuration de LemonLDAP::NG avec Google Authenticator</a0> Roadmap Feuille de route ../pages/documentation/1.1/applications/tomcat.html ../pages/documentation/1.1/applications/tomcat.html This objectClass allow attributes <c1>cn</c1> and <c2>description</c2>. Cet classe d'objet autorise les attributs <c1>cn</c1> et <c2>description</c2>. Jquery (javascript framework) is included in tarball and RPMs, but is a dependency on Debian official releases Jquery (framework javascript) est inclus dans l'archive et les RPMs, mais est une dépendance des versions officielles Debian Prepare the database and the LL::NG configuration file Preparer la base de donnée et le fichier de configuration LL::NG documentation:1.4:security documentation:1.4:security Manager (sessions explorer) Manager (explorateur de sessions) <s0>Check SLO message signature</s0>: check SLO message signature <s0>Vérifie la signature des messages SLO</s0> : vérifie la signature des messages SLO See <a0>translations</a0>. Voir <a0>traductions</a0>. ../../../media/applications/phpldapadmin_logo.png ../../../media/applications/phpldapadmin_logo.png Anonymous access Accès anonyme They are extracted from the users database by the <a1>users module</a1>. Elles sont extraites de la base de données des utilisateurs par le <a1>module utilisateurs</a1>. The default rule is: La règle par défaut est : Use LDAP for sessions Utiliser LDAP pour les sessions Accounting Traçabilité checkLogonHours($ssoLogonHours, '', $_timezone) checkLogonHours($ssoLogonHours, '', $_timezone) Back to main index Retour à l'index principal All static content (examples, <a0>CSS</a0>, images, etc.) is in /usr/share/lemonldap-ng/ Tous le contenu statique (exemples, <a0>CSS</a0>, images, etc...) se trouve dans /usr/share/lemonldap-ng/ <s0>Confirmation mail content</s0> (optional): Content of mail sent when password change is asked <s0>Contenu du message de confirmation</s0> (optionnel) : contenu du courriel envoyé lorsque le changement de mot-de-passe est demandé notifyDeleted notifyDeleted You have to install mod_ssl for Apache. Installer mod_ssl pour Apache. See <a0>how to do this</a0> on Zimbra wiki. Voir <a0>comment le faire</a0> sur le wiki Zimbra. Use with caution. À utiliser avec précaution. By default, notifications will be stored in the same database as configuration: Par défaut, les notifications sont stockées dans la même base de données que la configuration : http://search.cpan.org/perldoc?DBD::Pg http://search.cpan.org/perldoc?DBD::Pg It is also used by <a2>SAML SP</a2> to fill the authentication level in user session, based on authentication response authentication context. Il est également utilisé par le <a2>SP SAML</a2> pour définir le niveau d'authentification dans la session de l'utilisateur en se basant sur la réponse d'authentification. This documentation will focus on Kerberos authentication module, that can allow for example to set transparent authentication for Active Directory users (as Active Directory is a Kerberos server). Cette documentation se focalise sur le module d'authentification Kerberos qui permet par exemple de rendre transparente l'authentification sur Active Directory (car Active Directory est un serveur Kerberos). xguimard@example.com xguimard@example.com <s168>)</s168><s169>;</s169> <s168>)</s168><s169>;</s169> download Téléchargement To extend <a0>SSO</a0> on several domains, a cross-domain mechanism is implemented in LemonLDAP::NG. Pour étendre le <a0>SSO</a0> sur plusieurs domaines, un mécanisme inter-domaines est intégré à LemonLDAP::NG. <a0>safejail</a0><br1/> <a0>safejail</a0><br1/> $groups =~ /\badmin\b/ $groups =~ /\badmin\b/ Go on <a0>http://auth.example.com</a0> and log with one of the demonstration account. Allez sur <a0>http://auth.example.com</a0> et connectez-vous avec l'un des comptes de démonstration Protect the Manager by LL::NG Protéger le manager par LL::NG Portal <a0>URL</a0> is the address used to redirect users on the authentication portal by: L'<a0>URL</a0> du portail est l'adresse utilisée pour rediriger les utilisateurs bers le portail d'authentification par : /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay /_detail/documentation/manager-formreplay-newdata.png?id=documentation%3A1.4%3Aformreplay Install the new lemonldap-ng.ini file at the place of the old file in all <a0>LL::NG</a0> servers Installer le nouveau fichier lemonldap-ng.ini à la place de l'ancien dans tous les serveurs <a0>LL::NG</a0> twitterSecret twitterSecret <s6>require</s6> SOAP::Lite; </Perl> <s6>require</s6> SOAP::Lite; </Perl> Pascal PEJAC Pascal PEJAC /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability /_detail/documentation/ha-sessions-configuration.png?id=documentation%3A1.4%3Ahighavailability <a0>CAS</a0> CA file Fichier d'AC de <a0>CAS</a0> <a1>Try Freenode Webchat</a1>! <a1>Essayez le client web Freenode</a1> ! https://developers.facebook.com/apps https://developers.facebook.com/apps phpLDAPadmin phpLDAPadmin Use /adminSessions if the Handler need to modify the session, for example if you configured an idle timeout. Utiliser /adminSessions si l'agent doit modifier la session, par exemple si on configure un délai d'inactivité des sessions. /_detail/logos/sgs_white_small.jpg?id=references /_detail/logos/sgs_white_small.jpg?id=references Radius secret Secret Radius http://dev.twitter.com/pages/api_faq http://dev.twitter.com/pages/api_faq To get attributes values in session, declare them in <a0>exported variables</a0> Pour utiliser ces valeurs dans les sessions, il faut les déclarer dans les <a0>variables exportées</a0> Most of configuration can be done trough LemonLDAP::NG Manager (by default <a0>http://manager.example.com</a0>). La majeure partie de la configuration peut être réalisée via le manager LemonLDAP::NG (par défaut <a0>http://manager.example.com</a0>). All handlers download the whole configuration, so many servers can serve the same virtual hosts Tous les agents téléchargent intégralement la configuration, donc plusieurs serveurs peuvent servir le même hôte virtuel icons:personal.png icons:personal.png Each virtual host is a protected resource, with access rules, headers, POST data and options. Chaque hôte virtuel est une ressource protégée, avec règles d'accès, en-têtes, options et données POST. by double <a0>IP</a0> (sessions opened by the same user from multiple computers) par double <a0>IP</a0> (sessions ouvertes par le même utilisateur sur plusieurs machines) Xavier GUIMARD<br0/> Xavier GUIMARD<br0/> exportedVars exportedVars documentation:manager_access_rule.png documentation:manager_access_rule.png documentation:1.4:authdbi documentation:1.4:authdbi The cookie $id isn't yet available: Object does not exist in the data store The cookie $id isn't yet available: Object does not exist in the data store documentation:1.4:prereq documentation:1.4:prereq See <a0>Manager protection documentation</a0> to know how to use Apache modules or <a1>LL::NG</a1> to manage access to Manager. Voir la <a0>documentation de protection du manager</a0> pour savoir comment utiliser les modules d'Apache ou <a1>LL::NG</a1> pour gérer l'accès au manager. customheader.tpl : <a0>HTML</a0> code int the header div customheader.tpl : code <a0>HTML</a0> inséré dans le div d'en-tête </<s18>IfModule</s18>> </<s18>IfModule</s18>> These settings can be overriden per virtual host, see <a0>virtual host management</a0>. Ces paramètres peuvent être surchargés dans chaque hôte virtuel, voir la <a0>gestion des hôtes virtuels</a0>. <a2>exportedvars</a2><br3/> <a2>exportedvars</a2><br3/> http://auth.example.com/index.pl/sessions http://auth.example.com/index.pl/sessions ^/admin/ ^/admin/ http://www.omegat.org/ http://www.omegat.org/ http://drupal.org http://drupal.org Remote Session backend options Options du backend de sessions distant <s0>List type</s0>: choose white list to define allowed domains or black list to define forbidden domains <s0>Type de liste</s0> : choisir liste blanche pour définir la liste exhaustive des domaines autorisés ou liste noire pour lister les domaines interdits Example Exemple http://joind.in/2862 http://joind.in/2862 <s0>Success mail subject</s0>: Subject of mail sent when password is changed (default: [LemonLDAP::NG] Your new password) <s0>Sujet du message de succès</s0> : sujet du courriel lorsque le mot-de-passe est changé (défaut : [LemonLDAP::NG] Your new password) casStorageOptions casStorageOptions documentation:1.4:installdeb documentation:1.4:installdeb In this case you will be able to use <c1>$_password</c1> to fill any password POST field. Dans ce cas, la variable <c1>$_password</c1> peut être utilisée dans tous les champs à envoyer. You can set one or several <a3>IP</a3> addresses, separated by spaces, or let this parameter empty to disable the checking. Plusieurs adresses <a3>IP</a3> separées par des espaces peuvent être entrées, ou ce paramètre peut rester vide pour désactiver ce contrôle. Then set: et indiquez : <a0>DBI</a0> password Mot-de-passe <a0>DBI</a0> The redirection from portal can be done either with code 303 (See Other), or with a JavaScript redirection. Cette redirection du portail peut être effectuée via le code 303 (See Other) ou par une redirection JavaScript. images and other media files images et autres médias This message is displayed only when you upgrade from a version older than 1.0 Ce message n'est affiché que lors d'une mise à jour depuis une version inférieure à la 1.0 yum update yum update <s0># SOAP functions for sessions management (disabled by default)</s0> <s0># Gestion des fonctions SOAP functions pour la gestion des sessions (désactivée par défaut)</s0> Configuration Configuration <s0># SAML2 Issuer</s0> <s0># Fournisseur d'identité SAML2</s0> persistentStorage persistentStorage documentation:1.4:ldapsessionbackend documentation:1.4:ldapsessionbackend Variables can be used in rules and headers. Les variables peuvent être utilisées dans les règles et en-têtes. <s0>WebID whitelist</s0>: list of space separated hosts granted to host FOAF document. <s0>Liste blanche WebID</s0> : liste de noms d'hôtes, séparés par des espaces, autorisés à héberger les documents FOAF. http://search.cpan.org/perldoc?Apache::Session::Postgres http://search.cpan.org/perldoc?Apache::Session::Postgres Authentication choice will also be registered in session: Le choix d'authentication est également enregistré dans la session : You just have to activate Notifications in the Manager (General Parameters > Advanced Parameters > Notifications > Activation) or in lemonldap-ng.ini: Il suffit d'activer les notifications dans le manager (Paramètres généraux > Paramètres avancés > Notifications > Activation) ou dans lemonldap-ng.ini : During this period, user can ask the confirmation mail to be resent (default: session timeout value) Durant cette période, l'utilisateur peut demander que le courriel soit ré-émis (défaut : durée de vie de la session) <a0>DBI</a0> UserDB connection password Mot-de-passe de connexion UserDB <a0>DBI</a0> The request validity time is a configuration parameter. La durée de validité de la requête est un paramètre de configuration. internal variables, managed by LemonLDAP::NG les variables internes, gérées par LemonLDAP::NG Apache portal SSL configuration Configuration SSL du portail dans Apache <s0>Auth-User</s0>: $uid <s0>Auth-User</s0>: $uid install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) install_doc_site (/usr/local/lemonldap-ng/htdocs/doc) Indeed, this variable is set by the Handler on the physical server hosting the Handler, and not on other servers where the Handler is not installed. Toutefois, cette variable est renseignée par l'agent dans le serveur physique l'hébergeant mais pas dans les autres serveurs sans agents. ../documentation/current/portalcustom.html ../documentation/current/portalcustom.html Give a static value Donne une valeur statique OW2 annual conference Conférence annuelle OW2 <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> <s1>AuthzLDAPAuthoritative</s1> <s2>On</s2> /_detail/icons/lists.png?id=documentation%3A1.4%3Astart /_detail/icons/lists.png?id=documentation%3A1.4%3Astart SSO cookie Cookie SSO Some options are available: Quelques options sont disponibles : ../../documentation/1.4/applications/spring.html ../../documentation/1.4/applications/spring.html ../pages/documentation/1.1/rbac.html ../pages/documentation/1.1/rbac.html Next create the configuration branch where you want. Créer ensuite la branche des configurations n'importe où. Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... macros are used to extend (or rewrite) <s0><a1>exported variables</a1></s0>. Les macros sont utilisées pour étendre (ou réécrire) les <s0><a1>variables exportées</a1></s0>. http://lanyrd.com/2011/fpw2011/sfhcb/ http://lanyrd.com/2011/fpw2011/sfhcb/ This works like <a0>File backend</a0>, except that data are serialized in JSON. Il fonctionne comme le <a0>backend File</a0>, si ce n'est que les données sont sérialisées au format JSON. <a0>CAS</a0> <a1>PGT</a1> temporary file Fichier temporaire <a1>PGT</a1> de <a0>CAS</a0> To enable <a0>LL::NG</a0> authentication plugin, go in <c1>/etc/obm/obm_conf.inc</c1>: Pour activer le composant d'authentification <a0>LL::NG</a0>, aller dans <c1>/etc/obm/obm_conf.inc</c1>: Hamza AISSAT Hamza AISSAT documentation:1.0:upgrade documentation:1.0:upgrade ../../../media/icons/jabber_protocol.png ../../../media/icons/jabber_protocol.png To work with <a0>LL::NG</a0> it requires: Pour fonctionner avec <a0>LL::NG</a0> il faut : ../pages/documentation/1.1/securetoken.html ../pages/documentation/1.1/securetoken.html Open SSO session Ouvrez une session SSO Strasbourg Strasbourg <s0>logon_hours</s0>: string representing allowed logon hours (GMT) <s0>logon_hours</s0> : chaîne représentant les heures autorisées (GMT) ../../../documentation/1.4/passwordstore.html ../../../documentation/1.4/passwordstore.html Net::OpenID::Consumer > 1.00 Net::OpenID::Consumer > 1.00 groups are stored as space-separated strings in the special attribute “groups”: it contains the names of groups whose rules were returned true for the current user les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant File configuration backend Backend de configuration File Send “Lastname, firstname” in Auth-Name: Envoi de “Lastname, firstname” dans Auth-Name: cda cda ../../../media/icons/kmultiple.png ../../../media/icons/kmultiple.png <a0>LL::NG</a0> uses <a1>Perl Authen::Radius </a1> as a simple authentication backend. <a0>LL::NG</a0> utilise <a1>Authen::Radius de Perl</a1> comme simple backend d'authentification. /_detail/icons/flags/de.png?id=press /_detail/icons/flags/de.png?id=press South Bay Community Network South Bay Community Network <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> <s53>$wgAuth</s53> <s54>=</s54> <s55>new</s55> HttpAuthPlugin<s56>(</s56><s57>)</s57><s58>;</s58> Access rule: <c0>accept</c0> Règle d'accès : <c0>accept</c0> <a2>Lutece</a2> <a2>Lutece</a2> port port Outlook Web Access, … Outlook Web Access, … <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <a18><s19>return</s19></a18> <s20>$param</s20> <s21>}</s21>   <s22>1</s22><s23>;</s23> <s7>Allow</s7> from <s8>all</s8> <s7>Allow</s7> from <s8>all</s8> https://websso.dmz.bpi.fr/ https://websso.dmz.bpi.fr/ In the schema above, the user has the following values: Dans le schéma ci-dessus, l'utilisateur dispose des entrées suivantes : documentation:1.4:applications:googleapps documentation:1.4:applications:googleapps mailto:lemonldap-ng-users@ow2.org mailto:lemonldap-ng-users@ow2.org Required for PostgreSQL Requis pour PostgreSQL <a4>performances</a4><br5/> <a4>performances</a4><br5/> Proxy backend to be used in conjunction with another configuration backend. Backend proxy à utiliser avec un autre backend de configuration. You can define how many logins and failed logins will be stored. On peut définir le nombre de connexions et d'échecs à stocker. Apache based protection Protection basée sur Apache All identity provider protocols can be used simultaneously Tous les protocoles de fournisseur d'identité peuvent être utilisés simultanément In Debian/Ubuntu mod_ssl is already shipped in <c0>apache2.2-common</c0> package. Dans Debian/Ubuntu mod_ssl est installé avec le paquet <c0>apache2.2-common</c0>. Drupal virtual host in Apache Hôte virtuel Apache hébergeant Drupal ../../documentation/features.html#session_restrictions ../../documentation/features.html#session_restrictions ../../../documentation/1.4/idpsaml.html ../../../documentation/1.4/idpsaml.html http://jira.ow2.org/browse/LEMONLDAP http://jira.ow2.org/browse/LEMONLDAP lemonldapng lemonldapng LemonLDAP::NG <a0>SSO cookies</a0> are generated by <a1>Apache::Session</a1>, they are as secure as a 128-bit random cookie. Les <a0>cookies SSO</a0> de LemonLDAP::NG sont générés par <a1>Apache::Session</a1>, ils sont aussi sûrs que tout cookie basé sur un aléa de 128 bits. ...   </<s3>VirtualHost</s3>> ...   </<s3>VirtualHost</s3>> UserName -> ... UserName -> ... By default, LemonLDAP::NG uses Apache logs to store user actions and other messages: Par défaut, LemonLDAP::NG utilise les journaux d'Apache pour journaliser les actions des utilisateurs et autre messages : You can write <a0>rules</a0> matching any component of <a1>URL</a1> to protect including GET parameters, but be careful. On peut écrire des <a0>règles</a0> qui examine n'importe quel composant de l'<a1>URL</a1> à protéger y compris les paramètres GET, mais il faut faire attention. ../media/icons/flags/de.png ../media/icons/flags/de.png change password (with server side password policy management) changer les mots-de-passe (avec la gestion de la politique de mot-de-passe côté serveur) qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); qw(delete <s3>header</s3> cache read_from_client cookie <s4>redirect</s4> unescapeHTML)); User provisioning (account auto creation at first connection) Importation des comptes utilisateurs (auto-création à la première connexion) After choosing the file name (for example lemonldapn-ng-priv.key), download the key on your disk. Après avoir choisi le nom de fichier (par exemple lemonldapn-ng-priv.key), le télécharger sur le disque. Configure Drupal virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel Drupal comme n'importe quel autre <a0>hôte virtuel protégé</a0>. Access to Liferay (first time): Accès à Liferay (première connexion): ../pages/documentation/1.1/applications/bugzilla.html ../pages/documentation/1.1/applications/bugzilla.html ../../documentation/1.4/resetpassword.html ../../documentation/1.4/resetpassword.html documentation:liferay_3.png documentation:liferay_3.png <s0>+3M</s0>: three months from session creation <s0>+3M</s0> : trois mois après la création de la session Parameter redirections Paramètrer les redirections chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chmod 750 /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock chown www-data:www-data /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions/lock <a0>URL</a0> used before being redirected to the portal (empty if portal was used as entry point) <a0>URL</a0> utilisée avant d'être redirigé vers le portail (vide si le portail a été utilisé comme point d'entrée) Datas related to <a0>SAML</a0> protocol Donnée relative au protocole <a0>SAML</a0> Zimbra Zimbra Project = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(where zz is your international code, example: “fr” for France)</e1> Projet = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/omegat.files/zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> uid uid PostgreSQL PostgreSQL <a0>URL</a0> pattern: <c1>^/admin/</c1> Expression sur l'<a0>URL</a0> : <c1>^/admin/</c1> ../../documentation/1.4/jsonfileconfbackend.html ../../documentation/1.4/jsonfileconfbackend.html <a2>redirections</a2><br3/> <a2>redirections</a2><br3/> It means that you manage authorizations to access applications by checking the role(s) of the user, and provide this role to the application. Celà signifie qu'on gère les autorisations d'accès aux applications en examinant le(s) rôle(s) de l'utilisateur et en fournissant ce(s) rôle(s) à l'application. Organization Organisation ../../documentation/1.4/samlservice.html ../../documentation/1.4/samlservice.html ../pages/documentation/1.1/ssocookie.html ../pages/documentation/1.1/ssocookie.html Admin Admin 0.9.4_password_menu.png 0.9.4_password_menu.png Examples for <a0>LDAP</a0>: Exemples pour <a0>LDAP</a0> : LemonLDAP::NG will do some checks on configuration and display errors and warnings if any. LemonLDAP::NG effectue ensuite quelques tests sur la configuration et affiche les éventuelles erreurs et avertissements. ../../../../media/documentation/googleapps-sso.png ../../../../media/documentation/googleapps-sso.png The “default” rule is only applied if no other rule match La règle “default” n'est appliquée que si aucune autre règle ne correspond <s0># group</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Use a group in a rule</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> <s0># groupe</s0> admin <s1>-></s1> <s2>$uid</s2> <s3>eq</s3> <s4>'foo'</s4> <s5>or</s5> <s6>$uid</s6> <s7>eq</s7> <s8>'bar'</s8>   <s9># Utiliser un groupe dans une règle</s9> <s10>^/</s10>admin <s11>-></s11> <s12>$groups</s12> <s13>=~</s13> <s14>/</s14><s15>\badmin</s15><s16>\b</s16><s17>/</s17> DNS DNS ../../documentation/1.4/authsaml.html ../../documentation/1.4/authsaml.html <s0>Virtual Hosts</s0>: access rules, headers, etc. <s0>Hôtes virtuels</s0> : règles d'accès, en-têtes, etc... ../../documentation/1.4/authopenid.html ../../documentation/1.4/authopenid.html status status Uniform Resource Identifier Uniform Resource Identifier GLPI GLPI Create database: Créer la base de données : documentation/presentation.html documentation/presentation.html Portal destroys session and redirects user on itself with an empty <a0>SSO cookies</a0> Le portail détruit la session et redirige l'utilisateur sur lui-même avec un <a0>cookie SSO</a0> vide Use LDAP for configuration Utiliser LDAP pour la configuration Clone Clone Before enabling Manager protection by <a0>LL::NG</a0>, you must have configured how users authenticate on Portal, and test that you can log in without difficulties. Avant d'activer la protection du manager par <a0>LL::NG</a0>, il faut avoir configuré la méthode d'authentification sur le portail et véifier qu'on peut s'y connecter sans difficultés. Same with remote server configured with the same host name: La même chose avec le serveur distant configuré avec le même nom d'hôte : documentation:1.4:applications:liferay documentation:1.4:applications:liferay However, it is not advised to edit such files, as they are part of the program, and will be erased at next upgrade. Toutefois, il n'est pas recommandé d'éditer ces fichiers car ils font partie du logiciel et peuvent être écrasés lors des mises à jour. SAML / Shibboleth identity provider Fournisseur d'identité SAML / Shibboleth To configure the user identifier in access log, go in Manager, <c0>General Parameters</c0> > <c1>Logging</c1> > <c2>REMOTE_USER</c2>. Pour configurer l'identifiant utilisateur dans les journaux d'accès, aller dans le manager, <c0>Paramètres généraux</c0> > <c1>Journalisation</c1> > <c2>REMOTE_USER</c2>. documentation:latest:authdemo documentation:latest:authdemo Choose and configure your main configuration storage system Choisir et configurer le système principal de stockage de la configuration <s0>getMenuApplications(cookieValue)</s0>: return a list of authorizated applications (based on menu calculation) <s0>getMenuApplications(cookieValue)</s0>: retourne une liste des applications autorisées (basée sur le calcul du menu) Parameters for File backend are the same as <a0>File configuration backend</a0>. Les paramètres pour le backend File sont les mêmes que ceux du <a0>backend de configuration File</a0>. purge old sessions purger les anciennes sessions user full name Nom complet de l'utilisateur icons:access.png icons:access.png Manager protection Protection du manager Reload the Manager to see the order that will be used Recharger le manager pour voir l'ordre dans lequel elles seront appliquées <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> <s3>'ldapAuthnLevel'</s3> <s4>=></s4> <s5>'2'</s5><s6>,</s6> documentation:1.4:nosqlsessionbackend documentation:1.4:nosqlsessionbackend ../../../../media/applications/http_logo.png ../../../../media/applications/http_logo.png Enable mod_perl if not already loaded: Activer mod_perl si ce n'est déjà fait : <s0>Preauthentication <a1>URL</a1></s0>: Zimbra preauthentication <a2>URL</a2>, either with full <a3>URL</a3> (ex: <a4>http://zimbra.lan/service/preauth</a4>), either only with path (ex: /service/preauth) (by default: /service/preauth) <s0><a1>URL</a1> de pré-authentification</s0> : <a2>URL</a2> de pré-authentification Zimbra, soit l'<a3>URL</a3> complète (ex : <a4>http://zimbra.lan/service/preauth</a4>), soit seulement le chemin absolu (ex : /service/preauth) (par défaut : /service/preauth) <s0>Validity time of a password reset request</s0>: number of seconds for password reset request validity. <s0>Durée de validité de la requête de réinitialisation de mot-de-passe</s0> : nombre de secondes pour la validité de la requête de réinitialisation. ../../documentation/1.4/authldap.html ../../documentation/1.4/authldap.html Source directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/doc/ Répertoire des sources = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/doc/ Configure your SQL database Configurer la base de données SQL Restart fail2ban Redémarrer fail2ban See <a0>Yubico API</a0> page. Voir la page <a0>Yubico API</a0>. Second step: get the role name for the application. Seconde étape : obtenir le rôle dans cette application. LDAPCon LDAPCon <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> <s140>"userobm_mail_quota"</s140> <s141>=></s141> <s142>"HTTP_OBM_MAILQUOTA"</s142><s143>,</s143> Follow the <a0>next steps</a0> Suivre les <a0>étapes suivantes</a0> You can also use symbolic links in <c0>conf.d</c0> Apache directory. On peut aussi utiliser des liens symboliques dans le répertiore <c0>conf.d</c0> d'Apache. ssoRoles: user ssoRoles: admin ssoRoles: user ssoRoles: admin Then, go in <c0>Remote parameters</c0>: Ensuite, aller dans les <c0>paramètres Remote</c0> : Authorization => basic($uid,$_password) Authorization => basic($uid,$_password) To encode the redirection <a0>URL</a0>, the handler will use some Apache environment variables and also configuration settings: Pour encoder l'<a0>URL</a0> de redirection, l'agent utilise des variables d'environnement Apache et des paramètres de configuration : Fields to index Champs à indexer Using Redis, you just have to add the “Index” parameter in <c0>General parameters</c0> » <c1>Sessions</c1> » <c2>Session storage</c2> » <c3>Apache::Session module</c3> : Pour utiliser Redis, il faut ajouter le paramètre “Index” dans <c0>Paramètres généraux</c0> » <c1>Sessions</c1> » <c2>Stockage des sessions</c2> » <c3>Module Apache::Session</c3> : <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> <s0>$ldapservers</s0><s1>-></s1><s2>SetValue</s2><s3>(</s3><s4>$i</s4><s5>,</s5><s6>'server'</s6><s7>,</s7><s8>'auth_type'</s8><s9>,</s9><s10>'config'</s10><s11>)</s11><s12>;</s12> <s13>$ldapservers</s13><s14>-></s14><s15>SetValue</s15><s16>(</s16><s17>$i</s17><s18>,</s18><s19>'login'</s19><s20>,</s20><s21>'dn'</s21><s22>,</s22><s23>'cn=Manager,dc=example,dc=com'</s23><s24>)</s24><s25>;</s25> <s26>$ldapservers</s26><s27>-></s27><s28>SetValue</s28><s29>(</s29><s30>$i</s30><s31>,</s31><s32>'login'</s32><s33>,</s33><s34>'pass'</s34><s35>,</s35><s36>'secret'</s36><s37>)</s37><s38>;</s38> ~17000 ~17000 <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> <s0><s1>[</s1>portal<s2>]</s2></s0>   # Custom error messages <s3>error_0</s3> <s4>=</s4><s5> Big brother is watching you, authenticated user</s5> ../../../../media/applications/dokuwiki_logo.png ../../../../media/applications/dokuwiki_logo.png If your table is not named lmConfig, set it's name in <c0>dbiTable</c0> parameter. Si la table ne se nomme pas lmConfig, mettre son nom dans le paramètre <c0>dbiTable</c0>. svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap svn checkout svn://svn.forge.objectweb.org/svnroot/lemonldap Siteminder Authentication Siteminder Authentication get groups where user is registered obtenir les groupes dont l'utilisateur est membre ../../../documentation/1.4/extendedfunctions.html#basic ../../../documentation/1.4/extendedfunctions.html#basic This timeout allows to purge sessions of lost RelayState. Ce délai permet de supprimer les sessions des RelayState perdus. Go in Manager and click on <c0><a1>SAML</a1> 2 Service</c0> node. Allez dans le Manager et cliquez sur le nœud <c0>Service <a1>SAML</a1> 2</c0>. Simple usage example: Exemple d'usage simple : <s0><a1>API</a1> secret</s0>: <a2>API</a2> secret from Twitter <s0>Secret d'<a1>API</a1></s0>: secret d'<a2>API</a2> donné par Twitter mailto:lemonldap-ng-changes@ow2.org mailto:lemonldap-ng-changes@ow2.org <s0>Login field name</s0>: name of authentication table column hosting login <s0>Nom du champ de compte</s0> : nom de la colonne de la table d'authentification contenant le login ../media/icons/knewsticker.png ../media/icons/knewsticker.png Using <a0>LL::NG</a0> in reverse proxy mode, you will not have the <c1>REMOTE_USER</c1> environment variable set. Lorsque <a0>LL::NG</a0> est utilisé en mode reverse-proxy, la variable d'environnement <c1>REMOTE_USER</c1> n'est pas renseignée. The following table list fields to index depending on the feature you want to increase performance: Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances : /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/applications/liferay_logo.png?id=documentation%3A1.4%3Aapplications%3Aliferay User-Email User-Email <a0>LL::NG</a0> will then display a form with an OpenID input, wher users will type their OpenID login. <a0>LL::NG</a0> affiche alors un formulaire dans lequel les utilisateurs peuvent entrer leur identifiant OpenID. Configure LemonLDAP::NG to use LDAP as main database Configurer LemonLDAP::NG pour utiliser LDAP comme base de données principale Go in Manager, <c0>General parameters</c0> » <c1>Advanced parameters</c1> » <c2>Security</c2>: Aller dans le manager, <c0>Paramètres généraux</c0> » <c1>Paramètres avancés</c1> » <c2>Sécurité</c2> : ../../../../media/applications/obm_logo.png ../../../../media/applications/obm_logo.png Mail reset feature Fonctionnalité de réinitialisation de mot-de-passe If authentication succeed, Portal collect user data Si l'authentication est acceptée, le portail récupère les données de l'utilisateur Liferay virtual host in Manager Hôte virtuel Liferay dans le manager Overloading is not available trough the manager La surcharge n'est pas paramètrable dans le manager Documentation install : Installer la documentation : It can be configured globally, or inside a virtual host. Il peut être configuré globalement, ou dans chaque hôte virtuel. http://search.cpan.org/search?query=Safe&mode=module http://search.cpan.org/search?query=Safe&mode=module Then you will be able to use it in your template like this: On peut ensuite l'utiliser dans le modèle comme suit : Secure Token attribute Attribut du jeton sécurisé <a2>features</a2><br3/> <a2>features</a2><br3/> You can also disable internal Sympa authentication to keep only LemonLDAP::NG by removing user_table paragraph Il est également possible de désactiver l'authentification interne de Sympa pour ne garder que celle de LemonLDAP::NG en supprimant le paragraphe user_table ../../documentation/1.4/authnull.html ../../documentation/1.4/authnull.html You have to set its value in Manager. Il faut en indiquer une dans le manager. Safe module is used to eval expressions in headers, rules, etc. Le module Safe est utilisé pour évaluer les expressions dans les en-têtes, règles, etc... $uid eq "bart.simpson" $uid eq "bart.simpson" Note that all <a0>LL::NG</a0> components must have access : Tous les composants de <a0>LL::NG</a0> doivent avoir accès : Interactive <s0>management of user passwords</s0>: <s0>Gestion interactive des mots-de-passe des utilisateurs</s0>: http://httpd.apache.org/docs/current/mod/mod_setenvif.html http://httpd.apache.org/docs/current/mod/mod_setenvif.html documentation:1.4:mysqlminihowto documentation:1.4:mysqlminihowto password: $_password (password of the user) password: $_password (mot-de-passe de l'utilisateur) You can preselect IDP with an IDP resolution rule. Il est possible de pré-selectionner l'IDP par une règle de résolution. ldapUsePasswordResetAttribute ldapUsePasswordResetAttribute or to use lemonldap-ng.ini, install it (one line only) in [portal] section: ou pour utiliser lemonldap-ng.ini, écrire (sur une seule ligne) dans la section [portal] : 1 if user is admin 1 si l'utilisateur est administrateur File session backend is the more simple session database. Le backend de sessions File est la plus simple des bases de données. /var/lib/lemonldap-ng/sessions /var/lib/lemonldap-ng/sessions liblemonldap-ng-common-perl: configuration and common files liblemonldap-ng-common-perl : fichiers communs et de configuration The path to the main directory Le chemin du répertoire principal The module must be loaded by Apache (LoadModule directive). Ce module doit être chargé par Apache (directive LoadModule). Secure Token protected URLs URL protégées du jeton sécurisé <a0>Configuring the virtual hosts</a0> is not sufficient to display an application in the menu. <a0>Configurer les hôtes virtuels</a0> n'est pas suffisant pour afficher une application dans le menu. </<s7>Location</s7>>   </<s7>Location</s7>>   ../../documentation/1.4/portalmenu.html#menu_modules ../../documentation/1.4/portalmenu.html#menu_modules You can import a certificate containing the public key instead the raw public key. Vous pouver importer un certificat contenant la clef publique au lieu d'une simple clef. <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   <s11>my</s11> <s12>$param</s12> <s13>=</s13> <a14><s15>shift</s15></a14><s16>;</s16>   Don't forget to create an index on the field used to find users (uid by default) N'oubliez pas de créer un index sur le champ utilisé pour trouver les utilisateurs (uid par défaut) You should have configured <a0>LL::NG</a0> as an <a1>SAML Identity Provider</a1>, Il est nécessaire d'avoir configuré <a0>LL::NG</a0> comme <a1>fournisseur d'identité SAML</a1>, http://search.cpan.org/perldoc?LWP::UserAgent http://search.cpan.org/perldoc?LWP::UserAgent _notification_<e0>id</e0> _notification_<e0>id</e0> Configure the connection string (see <a0>DBI manual page</a0>) Configurer la chaîne de connexion (voir la <a0>page de manuel DBI</a0>) ldapTimeout ldapTimeout More information about Safe on <a0>CPAN</a0> Plus d'information sur Safe sur le <a0>CPAN</a0> ../../../css/all.css ../../../css/all.css ^/Microsoft-Server-ActiveSync ^/Microsoft-Server-ActiveSync http://perldoc.perl.org/functions/package.html http://perldoc.perl.org/functions/package.html ../pages/documentation/1.1/authtwitter.html ../pages/documentation/1.1/authtwitter.html Service configuration will be used to generate <a0>LL::NG</a0> <a1>SAML</a1> metadata, that will be shared with other providers. La configuration du service est utilisée pour générer les métadatas <a1>SAML</a1> de <a0>LL::NG</a0>, qui sont partagées avec les autres fournisseurs. Internet Relay Chat Internet Relay Chat <s0>Backgound color</s0>: Background color displayed in the BrowserID login window <s0>Couleur d'arrière plan</s0> : Couleur d'arrière plan affichée dans la fenêtre d'authentification BrowserID This configuration storage can be shared between different hosts using: Ce type de stockage de configuration peut être partagé entre différents serveurs en utilisant : http://httpd.apache.org/docs/2.2/mod/mod_proxy.html http://httpd.apache.org/docs/2.2/mod/mod_proxy.html install_handler_site (/usr/local/lemonldap-ng/handler) install_handler_site (/usr/local/lemonldap-ng/handler) <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> <s115>"userobm_zipcode"</s115> <s116>=></s116> <s117>"HTTP_OBM_POSTALCODE"</s117><s118>,</s118> http://lanyrd.com/2011/jdll/smdct/ http://lanyrd.com/2011/jdll/smdct/ When the text is pasted, click on the Apply button to keep the value. Lorsque le texte est collé, cliquer sur le bouton appliquer pour sauver la valeur. Glossary directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ Répertoire des glossaires = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/omegat.files/zz/glossary/ <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> <s0><s1>[</s1>manager<s2>]</s2></s0> <s3>;protection = manager</s3> Shareable Partageable <a0>Probe</a0> <br1/> <a0>Probe</a0> <br1/> So the above example can also be written like this: Ainsi l'exemple ci-dessous peut être écrit simplement : ../../documentation/1.4/authdemo.html ../../documentation/1.4/authdemo.html Mail charset Table de caractères des mails Zimbra account type Type de compte Zimbra dbiAuthPasswordCol dbiAuthPasswordCol tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test tar zxvf AuthCAS-1.4.tar.gz cd AuthCAS-1.4/ perl Makefile.PL make make test http://perldoc.perl.org/functions/shift.html http://perldoc.perl.org/functions/shift.html It can be used to delete a session Il peut être utilisé pour effacer une session documentation/current/prereq.html#yum documentation/current/prereq.html#yum <a0>browseablesessionbackend</a0><br1/> <a0>browseablesessionbackend</a0><br1/> Apache SSL global configuration Configuration globale de ssl dans Apache <s0>Response Location</s0>: Access Point for SLO response. <s0>Response Location</s0>: Point d'accès pour les réponses SLO. https://www.public.com https://www.public.com This name is used in entry <a0>DN</a0>, for example <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. Ce nom est utilisé dans l'entrée <a0>DN</a0>, par exemple <c1>cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com</c1>. Each <a0>LL::NG</a0> authentication module has an authentication level, which can be associated to an <a1>SAML authentication context</a1>. Chaque module d'authentification de <a0>LL::NG</a0> dispose d'un niveau d'authentification qui peut être associé à un <a1>contexte d'authentification SAML</a1>. dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... dn: cn=lmConf-1,ou=conf,ou=applications,dc=example,dc=com objectClass: top objectClass: applicationProcess cn: lmConf-1 description: {globalStorage}'Apache::Session::File' description: {cookieName}'lemonldap' description: {whatToTrace}'$uid' ... documentation:latest:installdeb documentation:latest:installdeb <a0>Apache::Session::Browseable</a0> is a wrapper for other Apache::Session modules that add the capability to manage indexes. <a0>Apache::Session::Browseable</a0> est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. Genève Genève ../../documentation/1.4/start.html#configuration ../../documentation/1.4/start.html#configuration locationRules locationRules LimeSurvey virtual host in Manager Hôte virtuel LimeSurvey dans le manager ../../../media/documentation/remote-interoperability.png ../../../media/documentation/remote-interoperability.png Custom-Header => function1($uid) Custom-Header => function1($uid) <s8># SOAP functions for sessions access (disabled by default)</s8> <s8># Fonctions SOAP pour l'accès aux sessions (désactivées par défaut)</s8> ../../../media/applications/liferay_logo.png ../../../media/applications/liferay_logo.png ../pages/documentation/1.1/performances.html ../pages/documentation/1.1/performances.html Zimbra local <a0>SSO</a0> <a1>URL</a1> pattern Expression d'<a1>URL</a1> <a0>SSO</a0> locale pour Zimbra if you use “File” system and your “dirName” is set to /usr/local/lemonldap-ng/conf/, the notifications will be stored in /usr/local/lemonldap-ng/notifications/ si “File” est utilisé et que “dirName” vaut /usr/local/lemonldap-ng/conf/, les notifications seront stockées dans /usr/local/lemonldap-ng/notifications/ /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots /_detail/screenshots/1.1/mailreset/mailreset_step3.png?id=screenshots In <c0>General</c0>, fill at least the following information: Dans <c0>General</c0>, remplir au moins les informations suivantes : SOAP session backend Backend de sessions SOAP Paris Paris Reverse proxy Proxy inverse And run the “dist” target: Lancer la cible “dist” : LemonLDAP::NG ships 3 Apache configuration files: LemonLDAP::NG fournit 3 fichiers de configuration Apache : lemonldap-ng-conf: contains default configuration (<a0>DNS</a0> domain: example.com) lemonldap-ng-conf : contient la configuration par défaut (domaine <a0>DNS</a0> : example.com) Debian/Ubuntu Debian/Ubuntu Admin: can create surveys Admin : peut créer des surveillances SAML SAML Find us on Freenode, channel #lemonldap-ng Retrouvez-nous sur Freenode, canal #lemonldap-ng ../../../media/documentation/manager-saml-service-sp-ac.png ../../../media/documentation/manager-saml-service-sp-ac.png OpenID authentication can proposed as an alternate authentication scheme using the <a0>authentication choice</a0> method. L'authentification OpenID peut être proposée en choix alternatif en utilisant la méthode d'authentification <a0>choice</a0>. documentation:1.4:soapservices documentation:1.4:soapservices SAML connectors Connecteurs SAML Accept some specificities: Autres possibilités : <s5># Uncomment this line if you use portal SOAP capabilities</s5> <s5># Décommentez cette ligne si vous utilisez les capacités SOAP du portail</s5> http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://search.cpan.org/~manowar/RadiusPerl-0.12/Radius.pm http://en.wikipedia.org/wiki/Role-based_access_control http://en.wikipedia.org/wiki/Role-based_access_control http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html http://www.cpantesters.org/distro/L/Lemonldap-NG-Common.html documentation:1.4:portal documentation:1.4:portal _timezone _timezone (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? (o/n) n Le nouveau rôle doit-il être autorisé à créer de nouveaux rôles ? <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> <s2>'LDAP#Openldap'</s2> <s3>=></s3> <s4>{</s4> The next time you will access Manager, it will be trough <a0>LL::NG</a0>. En retournant vers le manager, ce sera via <a0>LL::NG</a0>. <s145>//"userobm_nomade_enable" => ,</s145> <s145>//"userobm_nomade_enable" => ,</s145> documentation:1.4:authchoice documentation:1.4:authchoice ../pages/documentation/1.1/authmulti.html ../pages/documentation/1.1/authmulti.html documentation:presentation documentation:presentation When a user access a Handler without a cookie, he is redirected on portal, and the target <a0>URL</a0> is encoded in redirection <a1>URL</a1> (to redirect user after authentication process). Lorsqu'un utilisateur accède à un agent sans cookie, il est redirigé vers le portail, et l'<a0>URL</a0> cible est encodée dans l'<a1>URL</a1> de redirection (pour rediriger l'utilisateur après authentification). Your application can know the connected user using: Une application peut connaître l'utilisateur connecté en utilisant : <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> <s20><s21><property</s21> <s22>name</s22>=<s23>"authenticationManager"</s23> <s24>ref</s24>=<s25>"authenticationManager"</s25> <s26>/></s26></s20> <s27><s28></bean<s29>></s29></s28></s27>   <s30><s31><bean</s31> <s32>id</s32>=<s33>"preauthAuthProvider"</s33> <s34>class</s34>=<s35>"org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"</s35><s36>></s36></s30> Note that Apache::Session::Browseable::MySQL doesn't use MySQL locks. Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL. Before installing the packages, install <a0>dependencies</a0>. Avant d'installer les paquets, installer les <a0>dépendances</a0>. PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> PerlSetVar LmLocationToReplace http://APPLICATION/,http://test2.example.com </<s4>VirtualHost</s4>> To use LemonLDAP::NG, you have to run an Apache server compiled with mod-perl Pour utiliser LemonLDAP::NG, il faut disposer d'un serveur compilé avec mod-perl </<s15>Files</s15>>   </<s15>Files</s15>>   Example: Exemple : The AuthBasic Handler is a special Handler that will us AuthBasic to authenticate to a virtual host, and then play authorizations rules to allow access to the virtual host. L'agent AuthBasic est un agent spécial qui utilise l'authentification web basique pour authentifier dans un hôte virtuel et qui utilise ensuite les règles d'autorisation pour valider les accès à l'hôte virtuel. Exploitation Exploitation AuthCAS AuthCAS <s1>ServerName</s1> auth.example.com   <s1>ServerName</s1> auth.example.com   Put all custom <a3>HTML</a3> code in the custom template files. Mettre tous les codes <a3>HTML</a3> personnalisés dans les fichiers modèles personnalisés. ../../../../media/documentation/liferay_2.png ../../../../media/documentation/liferay_2.png If <c0>OpenID login</c0> is not set, it uses <c1>General Parameters</c1> » <c2>Logs</c2> » <c3>REMOTE_USER</c3> data, which is set to <c4>uid</c4> by default Si l'<c0>identifiant OpenID</c0> n'est pas renseigné, la donnée <c1>Paramètres généraux</c1> » <c2>Journalisation</c2> » <c3>REMOTE_USER</c3> est utilisée, mise à <c4>uid</c4> par défaut ../pages/documentation/1.1/applications/googleapps.html ../pages/documentation/1.1/applications/googleapps.html mailLDAPFilter mailLDAPFilter <a0>DN</a0> of sessions branch <a0>DN</a0> de la branche des sessions LimeSurvey LimeSurvey <a0>LL::NG</a0> can act as an <a1>CAS</a1> server, that can allow to federate <a2>LL::NG</a2> with: <a0>LL::NG</a0> peut agir en serveur <a1>CAS</a1>, ce qui permet de fédérer <a2>LL::NG</a2> avec : Eric GERMAN Eric GERMAN uid: the user login (it must correspond to the attribute set in whatToTrace parameter, uid by default), or the wildcard string (by default: <c0>allusers</c0>) if the notification should be displayed for every user. uid : le nom de connexion de l'utilisateur (il doit correspondre à l'attribut utilisé dans le paramètre whatToTrace, uid par défaut), ou la carte blanche (par défaut : <c0>allusers</c0>) si la notification doit être affichée à tous les utilisateurs. The # host must be matched by a group named "host". The # host must be matched by a group named "host". <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> <s16>'full_name'</s16> <s17>=></s17> <s18>$_SERVER</s18><s19>[</s19><s20>'HTTP_AUTH_CN'</s20><s21>]</s21><s22>,</s22> Subject for password mail Sujet du message de changement de mot de passe ../pages/documentation/1.1/selfmadeapplication.html ../pages/documentation/1.1/selfmadeapplication.html This key must be stored directly in portal index.pl file or in lemonldap-ng.ini: Cette clef doit être stockée directement dans le fichier index.pl du portail ou dans lemonldap-ng.ini : Use XForwardedFor for <a0>IP</a0> Utiliser XForwardedFor comme <a0>IP</a0> cliente ../../documentation/1.4/authssl.html ../../documentation/1.4/authssl.html documentation:1.4:applications:django documentation:1.4:applications:django Schema extension Extension de schéma <s0>+10y</s0>: ten years from session creation <s0>+10y</s0> : dix ans après la création de la session <s0>time_correction</s0> (optional): hours to add or to subtract <s0>time_correction</s0> (optionnel) : heures à ajouter ou soustraire /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml /_detail/documentation/manager-saml-idp-new.png?id=documentation%3A1.4%3Aauthsaml su - postgres createuser lemonldap-ng -P su - postgres createuser lemonldap-ng -P cfgNum int(11) NOT NULL, cfgNum int(11) NOT NULL, <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> <s0>type</s0> <s1>=</s1><s2> SOAP</s2> <s3>proxy</s3> <s4>=</s4><s5> https://auth.example.com/index.pl/config</s5> logout_sso logout_sso If you activate proxy mode, you must create the <a0>PGT</a0> file on your system, for example: Si le mode proxy est activé, il faut créer le fichier <a0>PGT</a0> sur le système, par exemple : Steps: Étapes : provide identities to other systems fournir une identité à d'autres systèmes If for an obscure reason, the WebSSO is not working and you want to access the Manager, remove the protection in <c0>lemonldap-ng.ini</c0>. Si pour une quelconque raison le WebSSO ne fonctionne pas, pour accéder au manager, supprimer la protection dans <c0>lemonldap-ng.ini</c0>. LemonLDAP::NG uses Safe jail to evaluate all expressions: LemonLDAP::NG utilise une cage sécurisée pour évaluer toutes les expressions : ../pages/documentation/1.4/applications/django.html ../pages/documentation/1.4/applications/django.html http://herve.vanmeerbeck.free.fr/?p=53 http://herve.vanmeerbeck.free.fr/?p=53 Soap Soap LemonLDAP::NG allows to use this model. LemonLDAP::NG permet d'utiliser ce modèle. <s0><a1>SSO</a1> binding</s0>: force binding to use for <a2>SSO</a2> (http-redirect, http-post, etc.) <s0>Méthode <a1>SSO</a1></s0> : force la méthode à utiliser pour le <a2>SSO</a2> (http-redirect, http-post, etc.) ../../../../media/applications/drupal_logo.png ../../../../media/applications/drupal_logo.png http://www.linagora.com http://www.linagora.com <s0>Object class</s0>: objectClass of the groups (default: groupOfNames). <s0>Classe d'object</s0>: objectClass du groupe (défaut: groupOfNames). Cache backend options Options du module du cache local You can: Vous pouvez : Sympa mail session key Clef de session mail pour Sympa LDAPFilter LDAPFilter use any key name you want. utiliser n'importe quel nom de clef. <s0># rule</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># header</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> <s0># règle</s0> admin <s1>-></s1> <s2>$admin</s2> <s3>||=</s3> <s4>(</s4><s5>$uid</s5> <s6>eq</s6> <s7>'foo'</s7> <s8>or</s8> <s9>$uid</s9> <s10>eq</s10> <s11>'bar'</s11><s12>)</s12> <s13># en-tête</s13> Display<s14>-</s14>Name <s15>-></s15> <s16>$displayName</s16> <s17>||=</s17> <s18>$givenName</s18><s19>.</s19><s20>" "</s20><s21>.</s21><s22>$surName</s22> ../../../../media/documentation/liferay_3.png ../../../../media/documentation/liferay_3.png 1 if user is authorizated to access to it 1 si l'utilisateur est autorisé à y accéder CustomSOAPServices CustomSOAPServices Yubikey client ID ID client Yubikey Uniform Resource Locator Uniform Resource Locator In this case, you might want to disabling it. Dans ces cas, on peut vouloir le désactiver. ../pages/documentation/1.1/logs.html ../pages/documentation/1.1/logs.html http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl http://www.slideshare.net/coudot/lemonldapng-un-websso-libre-en-perl You can use different dbiUser strings : Plusieurs chaînes dbiUser sont utilisables : kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com kinit HTTP/auth.example.com kvno HTTP/auth.example.com@EXAMPLE.COM klist -e kinit -k -t /etc/lemonldap-ng/auth.keytab HTTP/auth.example.com A session key can be associated to more than one SREG attribute. Une clef de session peut être associée à un ou plusieurs attributs SREG. http://www.bugzilla.org http://www.bugzilla.org Debian Debian User clicks on the link <c0>Reset my password</c0> L'utilisateur clique sur le lien <c0>Réinitialiser mon mot-de-passe</c0> documentation:manager-saml-namid-formats.png documentation:manager-saml-namid-formats.png <a0>SAML</a0> IDP preselection Préselection d'IDP <a0>SAML</a0> <a0>Memcached</a0> can be used with <a1>LL::NG</a1>, but some features will not work since Memcached doesn't provide any parsing system: <a0>Memcached</a0> peut être utilisé avec <a1>LL::NG</a1>, mais quelques fonctionnalités ne marcheront pas car Memcached ne fournit pas de dispositif de parcours des données : The <a0>encode_base64</a0> subroutine Fonction <a0>encode_base64</a0> ../documentation/1.0/applications.html ../documentation/1.0/applications.html <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> <<s0>Directory</s0> /usr/local/lemonldap-ng/htdocs/manager/> Apache rewrite rules Régles de réécriture d'Apache In the Manager, go in <c0>General Parameters</c0> » <c1>Issuer modules</c1> » <c2>OpenID</c2> and configure: Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules fournisseurs</c1> » <c2>OpenID</c2> et configurer : …. …. Windows Windows singleIP singleIP applications:obm_logo.png applications:obm_logo.png The content of the SVN tarball is not the same as the official tarball. Le contenu de l'archive SVN n'est pas le même que l'officielle. documentation:latest:start documentation:latest:start <s0>Key</s0>: internal session key, can be prefixed by <c1>!</c1> to make the attribute required <s0>Clef</s0> : clef de session interne, peut être prefixé par <c1>!</c1> pour exiger ces attributs JSON File configuration backend Backend de configuration en fichier JSON http://mb-c.pro/fr/archives/1468 http://mb-c.pro/fr/archives/1468 Sebastien DIAZ Sebastien DIAZ /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay /_detail/documentation/liferay_2.png?id=documentation%3A1.4%3Aapplications%3Aliferay For example <c1>{ldapPort}389</c1>. Par exemple <c1>{ldapPort}389</c1>. You can also copy/paste the metadata: just click on the Edit button. Il est également possible de copier-coller les métadatas : cliquer simplement sur le bouton éditer. You can also add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : Toolinux Toolinux value longblob, value longblob, ../../../../media/documentation/liferay_7.png ../../../../media/documentation/liferay_7.png ../../../media/applications/http_logo.png ../../../media/applications/http_logo.png Restart Apache: Redémarrez Apache: Often the redirection takes some time because it is user's first access to the protected app, so a new app session has to be created : JavaScript redirection improves user experience by informing that authentication is performed, and by preventing from clicking again on the button because it is too slow. Souvent la redirection prend du temps car c'est le premier accès de l'utilisateur à l'application protégée et il faut créer la session applicative ; la redirection JavaScript améliore le ressenti utilisateur en l'informant que l'authentification est réussie et en évitant qu'il clique de nouveau sur le bouton. </<s8>Directory</s8>> </<s8>Directory</s8>> The logout request will be sent even if the user did not use the application. La requête de déconnexion est envoyée même si l'utilisateur ne s'est pas connecté à l'application. Categories and applications Catégories et applications /_detail/icons/flags/us.png?id=press /_detail/icons/flags/us.png?id=press ssoRoles ssoRoles Any <a0>CAS</a0> consumer N'importe quel client <a0>CAS</a0> <s0>Facebook application ID</s0>: the application ID you get <s0>ID de l'application Facebook</s0> : l'identifiant d'application obtenu /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart /_detail/icons/neotux.png?id=documentation%3A1.4%3Astart Encoded characters Caractères encodés <s0>Gateways authentication</s0>: force transparent authentication on <a1>CAS</a1> server <s0>Authentification des passerelles</s0> : force l'authentification transparente sur le serveur <a1>CAS</a1> generate new public and private keys (<c0>Generate</c0> button) générer de nouvelles clefs publiques et privées (bouton <c0>Générer</c0>) <s0>portal</s0>: parameters only for Portal <s0>portal</s0> : paramètres réservés au portail General options Options générales Use Apache::Session::Browseable Utiliser Apache::Session::Browseable LemonLDAP::NG LemonLDAP::NG Net::Twitter Net::Twitter documentation:1.4:applications:drupal documentation:1.4:applications:drupal This avoid to have to many datas stored. Ce dispositif évite de stocker trop de données. <s0>Default</s0>: will this binding be used by default for authentication response. <s0>Défaut</s0> : déclaration utilisée par défaut pour les réponses d'authentification. kdc = ad.example.com kdc = ad.example.com Tests Tests http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ http://svn.forge.objectweb.org/cgi-bin/viewcvs.cgi/lemonldap/ touch /tmp/pgt.txt touch /tmp/pgt.txt LemonLDAP::NG provides these packages: LemonLDAP::NG fournit ces paquets : To know more about the jail, check <a0>Safe module documentation</a0>. Pour en savoir plus sur la cage, consulter la <a0>documentation du module Safe</a0>. Solutions Linux Solutions Linux ../../../documentation/1.4/writingrulesand_headers.html#rules ../../../documentation/1.4/writingrulesand_headers.html#rules 1.0 and 1.1 1.0 et 1.1 <a4>ldapsessionbackend</a4><br5/> <a4>ldapsessionbackend</a4><br5/> SOAP proxy mechanism SOAP proxy mechanism If needed, you can <a0>recompile the valve from the sources</a0>. Si besoin, <a0>recompiler la valve depuis les sources</a0>. ../../../media/documentation/dia_dit_roles.png ../../../media/documentation/dia_dit_roles.png You can install Lemonldap::NG using <a0>packages</a0> (rpm or deb) or by hand as described below. Vous pouvez installer Lemonldap::NG en utilisant des <a0>paquets</a0> (rpm ou deb) ou à la main comme décrit ci-après. ../../documentation/1.4/upgrade.html ../../documentation/1.4/upgrade.html http://www.solutionslinux.fr/ http://www.solutionslinux.fr/ Before transmission, the username and password are encoded as a sequence of base-64 characters. Avant la transmission, le nom et le mot de passe sont encodés en base-64. Password module Module mots-de-passe http://httpd.apache.org/docs/2.2/mod/mod_ssl.html http://httpd.apache.org/docs/2.2/mod/mod_ssl.html Bugzilla administration Administration de Bugzilla ../media/icons/tux.png ../media/icons/tux.png Auth-Password => $_password Auth-Password => $_password Single Logout Single Logout (SLO) Install prerequisites Installer les pré-requis Login as administrator: Se connecter comme administrateur: <s0>Name</s0>: internal name <s0>Name</s0>: nom interne Configure phpLDAPadmin virtual host like other <a0>protected virtual host</a0>. Configurer l'hôte virtuel phpLDAPadmin comme n'importe quel autre <a0>hôte virtuel protégé</a0>. If not Go on Manager, and declare Manager as a new <a0>virtual host</a0>, for example <c1>manager.example.com</c1>. Si non, aller dans le manager et déclarer le manager comme un nouvel <a0>hôte virtuel</a0>, par exemple <c1>manager.example.com</c1>. Indeed, any <a0>Perl DBD driver</a0> can be used. Ainsi, tout <a0>driver Perl DBD</a0> peut être utilisé. SOAP services Services SOAP <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> <s18>Order</s18> <s19>deny</s19>,<s20>allow</s20> ../../documentation/1.4/applications/dokuwiki.html ../../documentation/1.4/applications/dokuwiki.html _auth _auth Then, go in <c0>Facebook parameters</c0>: Ensuite, aller dans les <c0>paramètres Facebook</c0>: ../pages/documentation/1.4/handlerauthbasic.html ../pages/documentation/1.4/handlerauthbasic.html <s2># Load Zimbra Handler</s2> <s2># Load Zimbra Handler</s2> <a0>Lanyrd</a0> <br1/> <a0>Lanyrd</a0> <br1/> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> <s0><s1>[</s1>configuration<s2>]</s2></s0> <s3>type</s3><s4>=</s4><s5>File</s5> <s6>dirName</s6> <s7>=</s7><s8> /usr/local/lemonldap-ng/data/conf</s8> ../../../../media/documentation/googleapps-manager-application.png ../../../../media/documentation/googleapps-manager-application.png You should be redirected to <a0>LL::NG</a0> Portal. On doit être redirigé vers le portail <a0>LL::NG</a0>. <s0>Secured cookie</s0>: the cookie can only be sent over HTTPS <s0>Cookie sécurisé</s0> : le cookie peut être envoyé via HTTPS <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> <s46>"userobm_login"</s46> <s47>=></s47> <s48>"HTTP_OBM_UID"</s48><s49>,</s49> But you can forward this key if it is really needed: Mais on peut le transmettre tout de même si nécessaire : Handler Status Page de statut de l'agent <a0>LL::NG</a0> is compatible with the OpenID Authentication protocol <a1>version 2.0</a1> and <a2>version 1.0</a2>. <a0>LL::NG</a0> est compatible avec le protocole d'authentification OpenID <a1>version 2.0</a1> et <a2>version 1.0</a2>. http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml http://www.slideshare.net/coudot/rmll2010-lemon-ldapngsaml <s0>Search base</s0>: <a1>DN</a1> of groups branch. <s0>Base de recherche</s0> : <a1>DN</a1> de la branche des groupes. <s0>Facebook application secret</s0>: the corresponding secret <s0>Secret de l'application Facebook</s0> : le secret correspondant The “Multi” system can : Le système “Multi” peut : OpenID identity provider Fournisseur d'identité OpenID Mediawiki Mediawiki <s0>dbiPassword</s0>: <a1>DBI</a1> password. <s0>dbiPassword</s0> : mot-de-passe <a1>DBI</a1>. http://tomcat.apache.org/ http://tomcat.apache.org/ <s0>Sign SLO message</s0>: sign SLO message <s0>Signature des messages SLO</s0> : signe les messages de déconnexion SLO (single logout) <a4>federationproxy</a4><br5/> <a4>federationproxy</a4><br5/> sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini sudo make configure STORAGECONFFILE=/etc/lemonldap-ng/lemonldap-ng.ini Each module can be disabled using the <c0>Null</c0> backend. Chaque module peut être désactivé en utilisant le backend <c0>Null</c0>. <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s17>-></s17><s18>proxy</s18><s19>(</s19><s20>'http://auth.example.com/index.pl/notification'</s20><s21>)</s21><s22>;</s22>     <s23>$r</s23> <s24>=</s24> <s25>$lite</s25><s26>-></s26><s27>deleteNotification</s27><s28>(</s28><s29>'foo.bar'</s29><s30>,</s30> <s31>'ABC'</s31><s32>)</s32><s33>;</s33>   <s34>if</s34> <s35>(</s35> <s36>$r</s36><s37>-></s37><s38>fault</s38> <s39>)</s39> <s40>{</s40> <s0>Token expiration</s0>: time in seconds for token expiration (remove from Memcached server). <s0>Expiration du jeton</s0> : délai en secondes pour l'expiration du jeton (effacement du serveur Memcached). You need to forward the password, which can be the user main password (if <a0>password is stored in session</a0>, or any user attribute (if you keep secondary passwords in users database). Il est nécessaire d'exporter le mot-de-passe, qui peut être le mot-de-passe principal de l'utilisateur (si <a0>le mot-de-passe est stocké dans la session</a0>, ou n'importe quel attribut utilisateur (si d'autres mots-de-passe sont stockés dans la base de données des utilisateurs). Session backend options Options du module de stockage des sessions To protect a virtual host in Apache, the LemonLDAP::NG Handler must be activated (see <a0>Apache global configuration</a0>). Pour protéger un hôte virtuel dans Apache, l'agent LemonLDAP::NG doit être activé (voir <a0>configuration globale d'Apache</a0>). sample_notification.png sample_notification.png <s0>Activation</s0>: set to <c1>On</c1>. <s0>Activation</s0> : mettre à <c1>Activé</c1>. <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> <s0># SOAP functions for notification insertion (disabled by default)</s0> <<s1>Location</s1> /index.pl/notification> /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm /_detail/documentation/lemonldap-ng-packages.png?id=documentation%3A1.4%3Ainstallrpm <s164>//"userobm_location" => ,</s164> <s164>//"userobm_location" => ,</s164> <s0>New</s0>: to write all configuration history <s0>New</s0> : pour écrire l'historique de la configuration <s0>.js</s0>: Javascript <s0>.js</s0>: Javascript documentation/quickstart.html documentation/quickstart.html chown apache /etc/lemonldap-ng/auth.keytab chown apache /etc/lemonldap-ng/auth.keytab Lemonldap::NG manage applications by their hostname (Apache's virtualHosts). Lemonldap::NG gère les applications par leurs noms d'hôtes(hôtes virtuels d'Apache). dbiAuthPasswordHash dbiAuthPasswordHash firewalls (but be careful if more than 1 server is behind the firewall) pare-feux (attention toutefois si plus d'une application se trouve derrière le pare-feu) Require old password (change) Impose la présentation de l'ancien mot-de-passe dans les changements Else it just will be sent trough an attribute response, if explicitly requested in an attribute request. Sinon, il ne sera envoyé dans les réponses que s'il est explicitement demandé dans les requêtes d'attributs. <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0>//==================================</s0> <s1>// WebSSO</s1> <s2>//==================================</s2>   <s3>$useWebserverAuth</s3> <s4>=</s4> <s5>true</s5><s6>;</s6> <s7>$WebserverAuth_autocreateUser</s7> <s8>=</s8> <s9>true</s9><s10>;</s10> <s11>$WebserverAuth_autouserprofile</s11> <s12>=</s12> <a13><s14>Array</s14></a13><s15>(</s15> <s0>deleteNotification</s0>: delete notification(s) for a user (see <a1>Notifications system</a1> for more) <s0>deleteNotification</s0> : efface une ou plusieurs notifications d'un utilisateur (voir le <a1>système des notifications</a1>) ../../documentation/1.4/authmulti.html ../../documentation/1.4/authmulti.html http://jqueryui.com/themeroller/ http://jqueryui.com/themeroller/ http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight http://ow2.org/view/OW2Con-2012/Session_OW2_Project_Spotlight configStorage configStorage User enters his email (or another information) in the password reset form L'utilisateur entre son adresse de courriel (ou une autre information) dans le formulaire de réinitialisation radiusAuthnLevel radiusAuthnLevel Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Sympa</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Sympa</c3>, et éditer les clefs suivantes : Hosted application Application hébergée <a4>authad</a4><br5/> <a4>authad</a4><br5/> # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. # Fail2Ban configuration file # # Author: Adrien Beudin # # $Revision: 2 $ # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. http://search.cpan.org/perldoc?Apache::Session::Memcached http://search.cpan.org/perldoc?Apache::Session::Memcached <s11>RewriteRule</s11> ^/cas/.* /index.pl <s11>RewriteRule</s11> ^/cas/.* /index.pl http://forge.ow2.org/project/showfiles.php?group_id=274 http://forge.ow2.org/project/showfiles.php?group_id=274 User authenticates on Portal L'utilisateur d'authentifie sur le portail _samlToken _samlToken Packages from <a0>Debian repository</a0> may not be up to date. Les paquets du <a0>dépôt Debian</a0> peuvent ne pas être à jour. icons:tutorials.png icons:tutorials.png http://www.php.net/array http://www.php.net/array ../../documentation/1.2/upgrade.html ../../documentation/1.2/upgrade.html screenshots.html screenshots.html Required parameters Paramètres exigés You can change default parameters using the “notificationStorage” and “notificationStorageOptions” parameters with the same syntax as configuration storage parameters. On peut changer les paramètres par défaut en utilisant les paramètres “notificationStorage” et “notificationStorageOptions” avec la même syntaxe que les paramètres de stockage de la configuration. Use SOAP for Lemonldap::NG configuration Utiliser SOAP pour la configuration Lemonldap::NG <s22>}</s22> <s23>}</s23><s24>,</s24> <s22>}</s22> <s23>}</s23><s24>,</s24> <a0>LL::NG</a0> has a logout forward mechanism, that will add a step in logout process, to send logout requests (indeed, GET requests on application logout <a1>URL</a1>) inside hidden iframes. <a0>LL::NG</a0> dispose d'un dispositif de propagation de déconnexion qui ajoute une étape à ce processus pour envoyer des requêtes de déconnexion (en pratique, des requêtes GET vers des <a1>URL</a1> de déconnexion) dans des iframes cachées. You have to grant read/write access for the manager component. Il faut autoriser l'accès en lecture et écriture pour le manager. If you upgraded <a0>LL::NG</a0>, check all <a1>upgrade notes</a1>. Pour mettre à jour <a0>LL::NG</a0>, lisez toutes les <a1>notes de mise à jour</a1>. <a0>Apache Tomcat</a0> is an open source software implementation of the Java Servlet and JavaServer Pages technologies. <a0>Apache Tomcat</a0> est une implémentation libre des technologies Java Servlet et JavaServer Pages. <s0>Developers</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Subscribe</a2> | <a3>Archives</a3> ) <s0>Développeurs</s0> : <a1>lemonldap-ng-dev@ow2.org</a1> ( <a2>Souscrire</a2> | <a3>Archives</a3> ) <s133>//"userobm_web_perms" => ,</s133> <s133>//"userobm_web_perms" => ,</s133> If this attribute is missed all hosts are allowed. Si cet attribut est manquant, toutes les adresses seront autorisées. If you set <c0>useLocalConf</c0> to 1 in lemonldap-ng.ini (section [Portal]), the portal will use only a cached configuration. En mettant <c0>useLocalConf</c0> à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. dbiUserTable dbiUserTable This concerns all parameters for the Service Provider metadata section: Ceci concerne tous les paramètres de la section « fournisseur de service » des metadatas : http://search.cpan.org/~mart/Net-OpenID-Consumer/ http://search.cpan.org/~mart/Net-OpenID-Consumer/ ../../documentation/1.4/writingrulesand_headers.html ../../documentation/1.4/writingrulesand_headers.html User can now access to the protected application L'utilisateur peut maintenant accéder aux applications ../../../media/applications/mediawiki_logo.png ../../../media/applications/mediawiki_logo.png Protect your application Protéger une application <s0>setAttributes(cookieValue,hashtable)</s0>: update a session <s0>setAttributes(cookieValue,hashtable)</s0> : met à jour une session ../pages/press.html ../pages/press.html http://www.jcos.fr http://www.jcos.fr dob dob You have to include them in Apache main configuration, for example: Il faut les inclure dans la configuration d'Apache, par exemple : documentation documentation You can also use WebID as user database. On peut également utiliser WebID comme base de données utilisateurs. When status feature is activated, Handlers and portal will collect statistics and save them in their local cache. Lorsque la fonctionnalité "status" est activée, les agents et le portail collectent des statistiques et les sauvegardent dans le cache local http://www.dokuwiki.org/ http://www.dokuwiki.org/ Handler detects <a0>URL</a0> parameter and create a <a1>SSO cookies</a1> on its domain, with session ID as value L'agent détecte le paramètre d'<a0>URL</a0> et crée le <a1>cookie SSO</a1> dans son domaine, avec la valeur de l'identifiant de session This mode is not compatible with a lot of browsers which block pop-ups. Ce mode n'est pas compatible avec de nombreux navigateurs qui bloquent les pop-ups. The <a0>SSO</a0> cookie is build by the portal (as described in the <a1>login kinematic</a1>), or by the Handler for cross domain authentication (see <a2>CDA kinematic</a2>). Le cookie <a0>SSO</a0> est construit par le portail (tel que décrit dans la <a1>cinématique de connexion</a1>) ou par l'agent (handler) lors des authentification inter-domaines (voir <a2>la cinématique de l'authentification inter-domaine</a2>). When you change cookie expiration time, it is written on the user hard disk unlike session cookie Lorsqu'on change la durée de vie du cookie, il est écrit sur le disque dur de l'utilisateur contrairement à un cookie de session ../pages/documentation/1.1/sqlconfbackend.html ../pages/documentation/1.1/sqlconfbackend.html Cross Domain Authentication (CDA) Authentification inter-domaines (CDA) Sympa Sympa Rules can also be used to intercept logout <a0>URL</a0>: Les règles peuvent également être utilisées pour intercepter les <a0>URL</a0> de déconnexion : For each attribute, you can set: Pour chaque attribut, on peut indiquer : <s0>UTF8 metadata conversion</s0>: set to On to force partner's metadata conversion. <s0>Conversion des métadatas un UTF8</s0> : mettre à « activé » pour forcer la conversion des métadata des partenaires. You need to get an client ID and a secret key from Yubico. Un identifiant client et une clef secrète doivent être obtenues auprès de Yubico. <a0>LL::NG</a0> is a web single-sign-on system, but unlike some systems it can manage rights on applications based on regular expressions on <a1>URL</a1>. <a0>LL::NG</a0> est un système d'authentification web unique (WebSSO), mais contrairement à d'autres, il peut gérer les droits d'accès en utilisant des expressions rationnelles sur les <a1>URL</a1> demandées. Configure the <a0>access rules</a0> and define the following <a1>headers</a1>: Configurer les <a0>règles d'accès</a0> et definir les <a1>en-têtes</a1> suivants : dark dark ../../../media/applications/googleapps_logo.png ../../../media/applications/googleapps_logo.png login login Applications Applications http://perldoc.perl.org/functions/return.html http://perldoc.perl.org/functions/return.html /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots /_detail/screenshots/1.1/notifications/sample_notification.png?id=screenshots User: can answer to surveys User : peut répondre aux surveillances <s0>Authentication level</s0>: authentication level for Radius module <s0>Niveau d'authentification</s0> : niveau d'authentification pour Radius samlStorage samlStorage Then go in <c0>Options</c0> to define: Aller ensuite dans <c0>Options</c0> pour définir : The integration with <a0>LL::NG</a0> is the following: L'intégration avec <a0>LL::NG</a0> est la suivante : Key steps : Etapes clefs : maintenance maintenance http://en.wikipedia.org/wiki/INI_file http://en.wikipedia.org/wiki/INI_file You can add a rule for logout: Il est possible d'ajouter une règle pour la déconnexion : ../../../media/documentation/manager-formreplay-newurl.png ../../../media/documentation/manager-formreplay-newurl.png http://openid.net/specs/openid-simple-registration-extension-1_0.html http://openid.net/specs/openid-simple-registration-extension-1_0.html <s0>Key name</s0>: name of the key in LemonLDAP::NG session (for example “uid” will then be used as $uid in access rules) <s0>Nom de clef</s0> : nom de la clef dans la session LemonLDAP::NG (par exemple “uid” équivaut à $uid dans les règles d'accès) Authentication with login/password Authentification par nom-de-compte/mot-de-passe Detailled configuration backends documentation is available <a0>here</a0>. La configuration détaillée des backends de stockage est disponible <a0>ici</a0>. Now ldapgroups contains “admin su” Maintenant, ldapgroups contient “admin su” Disabling it can lead to security issues. La désactiver peut engendrer des trous de sécurité. Dokuwiki Dokuwiki You may also create these macros to manage OBM administrator account (<c0>Variables</c0> » <c1>Macros</c1>): Il est également possible de créer ces macros pour gérer le compte administrateur OBM (<c0>Variables</c0> » <c1>Macros</c1>): documentation:googleapps-sso.png documentation:googleapps-sso.png Install and launch a <a0>Memcached server</a0>. Installer et lancer un <a0>serveur Memcached</a0>. Upgrade from 1.3 to 1.4 Mettre à jour de la version 1.3 vers la version 1.4 Gender Gender If you use the binary value (Active Directory), use this: Si une valeur binaire est utilisée (Active Directory) : You just have to configure a directory writable by Apache user and set it in [configuration] section in your lemonldap-ng.ini file: Il suffit de configurer un répertoire accessible en écriture à l'utilisateur Apache et l'indiquer dans la section [configuration] du fichier lemonldap-ng.ini : portalAutocomplete portalAutocomplete <a0>CAS</a0> authentication level Niveau d'authentification <a0>CAS</a0> macro and groups les macro et groupes Redirect user to the asked <a0>URL</a0> or display menu Redirige l'utilisateur vers l'<a0>URL</a0> demandée ou affiche le menu <a0>CAS</a0> proxied services Services mandatés de <a0>CAS</a0> <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl <s4>RewriteRule</s4> ^/saml/metadata /metadata.pl Skin files Fichiers thèmes <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> <s45><s46><bean</s46> <s47>id</s47>=<s48>"userDetailsServiceWrapper"</s48> <s49>class</s49>=<s50>"org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"</s50><s51>></s51></s45> ../documentation/current/start.html#sessions_database ../documentation/current/start.html#sessions_database LemonLDAP::NG portal menu has 4 modules: Le menu du portail LemonLDAP::NG est composé de 4 modules : <s59><s60></bean<s61>></s61></s60></s59> <s59><s60></bean<s61>></s61></s60></s59> http://mail.ow2.org/wws/subscribe/lemonldap-ng-users http://mail.ow2.org/wws/subscribe/lemonldap-ng-users Enable protection on Manager, by editing <c0>lemonldap-ng.ini</c0>: Activer la protection du manager, en éditant <c0>lemonldap-ng.ini</c0>: <a0>DBI</a0> UserDB connection chain Chaîne de connexion UserDB <a0>DBI</a0> whatToTrace whatToTrace <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> <s35>}</s35> <s36>}</s36><s37>,</s37> <s38>}</s38><s39>)</s39> Browseable (SQL, Redis or LDAP) Browseable (SQL, Redis ou LDAP) Internal portal Portail interne <a26>authmulti</a26><br27/> <a26>authmulti</a26><br27/> ../../../../media/applications/sympa_logo.png ../../../../media/applications/sympa_logo.png Access rules Règles d'accès http://obm.org http://obm.org (&(sAMAccountName=$user)(objectClass=person)) (&(sAMAccountName=$user)(objectClass=person)) ../pages/documentation/1.1/header_remote_user_conversion.html ../pages/documentation/1.1/header_remote_user_conversion.html <s0>Sessions module options</s0>: <s0>Options du module de sessions</s0> : ../pages/documentation/1.1/applications/sympa.html ../pages/documentation/1.1/applications/sympa.html <a0>LL::NG</a0> configured as <a1>SAML Identity Provider</a1> <a0>LL::NG</a0> configuré comme <a1>fournisseur d'identité SAML</a1> yum install mod_ssl yum install mod_ssl SQL configuration backends Backends de configuration SQL Destination directory = <e0>[path/to/trunk/build/lemonldap-ng]</e0>/po-doc/zz (where zz is your international code, example: “fr” for France) Répertoire de destination = <e0>[chemin/vers/trunk/build/lemonldap-ng]</e0>/po-doc/zz (où zz est votre code international, exemple: “fr” pour le français) <s0>Proxied services</s0>: list of services for which a proxy ticket is requested: <s0>Services Proxifiés</s0> : liste des services pour lesquels un ticket de proxy est requis : This part is based on <a0>SimpleSAMLPHP documentation</a0>. Cette section est basée sur la <a0>documentation SimpleSAMLPHP</a0>. ../pages/documentation/1.1/installdeb.html ../pages/documentation/1.1/installdeb.html Set '*' to accept all. Mettre '*' pour tout accepter. Display deleted sessions Affiche les sessions effacées Zimbra use a specific <a0>preauthentication protocol</a0> to provide <a1>SSO</a1> on its application. Zimbra utilise un <a0>protocole de pré-authentification</a0> pour s'intégrer à un <a1>SSO</a1>. Google Google User module Module utilisateurs <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> <s15><s16><role</s16> <s17>rolename</s17>=<s18>"role1"</s18><s19>/></s19></s15> Selected by default during installation. Sélectionné par défaut lors de l'installation. Create a database if necessary: Créer une base de données si nécessaire : Create new notifications with notifications explorer Créer de nouvelles notifications avec l'explorateur des notifications ../pages/documentation/1.1/ldapsessionbackend.html ../pages/documentation/1.1/ldapsessionbackend.html <s9>RewriteEngine</s9> <s10>On</s10> <s9>RewriteEngine</s9> <s10>On</s10> When modifying a value, always click on the <c0>Apply</c0> button if available, to be sure the value is saved. Lorsqu'une valeur est modifiée, cliquer toujours sur le bouton <c0>Appliquer</c0> s'il est affiché pour être sûr que la valeur soit sauvegardée. <s0>OTP public ID part size</s0>: Part of Yubikey OTP that will be used as the media identifier (default: 12) <s0>Taille de la partie publique de l'OTP</s0> : Partie du mot-de-passe unique Yubikey utilisée pour identifier les matériels (défaut: 12) Mailing lists Mailing lists documentation:latest:sessions documentation:latest:sessions <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> <s0><s1><SPSSODescriptor<s2>></s2></s1></s0> Handler sends the response to user Celui-ci la renvoie à l'utilisateur For example, to preselect this IDP for users coming from 129.168.0.0/16 network: Par exemple, pour pré-sélectionner cet IDP pour les utilisateurs provenant dui réseau 129.168.0.0/16 : <a4>references</a4><br5/> <a4>références</a4><br5/> Manager (configuration management) Manager (gestion de la configuration) <<s0>IfModule</s0> mod_rewrite.c> <<s0>IfModule</s0> mod_rewrite.c> <s165>//"userobm_education" => ,</s165> <s165>//"userobm_education" => ,</s165> http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview http://www.slideshare.net/coudot/jdll-2010-lemonldapng100preview This function will check the date of current request, and compare it to a start date and an end date. Cette fonction examine la date de la requête en cours et la compare avec une date de début et de fin. Configuration and sessions in LDAP Configuration et sessions dans LDAP In Manager, go in <c0>General Parameters</c0> > <c1>Authentication modules</c1> and choose Null for authentication, users or password module. Dans le manager, aller dans <c0>Paramètres généraux</c0> > <c1>Modules d'authentification</c1> et choisir <a2>Null</a2>) pour les modules authentification, utilisateurs et/ou mots-de-passe. Update translations Télécharger les traductions When all is ok, click on <c0>Create</c0>. Lorsque tout est bon, cliquer sur <c0>Créer</c0>. The notifications module uses a wildcard to manage notifications for all users. Le module de notifications utilise une carte blanche pour gérer les notifications destinées à tous les utilisateurs. Authorizations are defined inside a virtualhost and takes effect only on it. Les autorisations sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Configure the virtual host like other <a0>protected virtual host</a0> but use Secure Token Handler instead of default Handler. Configurer l'hôte virtuel Sympa comme n'importe quel autre <a0>hôte virtuel protégé</a0> mais utiliser l'agent jeton sécurisé au lieu de l'agent par défaut. Send mail on password change Envoyer des courriels lors des changements de mots-de-passe Auth-Roles => $aaaRoles Auth-Roles => $aaaRoles Link Apache configuration Lier la configuration d'Apache HTTP Basic Authentication Authentification basique HTTP cn=admin,dc=example,dc=password cn=admin,dc=example,dc=password You can also use different user/password for your servers by overriding parameters <c0>globalStorage</c0> and <c1>globalStorageOptions</c1> in lemonldap-ng.ini file. On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres <c0>globalStorage</c0> et <c1>globalStorageOptions</c1> dans le fichier lemonldap-ng.ini. PerlModule Lemonldap::NG::Handler::Proxy PerlModule Lemonldap::NG::Handler::Proxy perl-Lemonldap-NG-Common: CPAN - Shared modules perl-Lemonldap-NG-Common : CPAN - modules partagés ldapGroupAttributeName ldapGroupAttributeName ../../documentation/1.4/ssocookie.html ../../documentation/1.4/ssocookie.html These options override service signature options (see <a0>SAML service configuration</a0>). Ces options surchargent les options de signature du service (voir la <a0>configuration du service SAML</a0>). documentation:1.4:authyubikey documentation:1.4:authyubikey Those capabilities can be used simultaneously or separately. Ces capacités peuvent être utilisées simultanément ou séparemment. These options can then be overridden for each Identity Provider. Ces options peuvent être surchargées pour chaque fournisseur d'identité. Nb protected applications Nb d'applications protégées http://www.mediawiki.org/wiki/Extension:HttpAuth http://www.mediawiki.org/wiki/Extension:HttpAuth documentation:1.4:handlerauthbasic documentation:1.4:handlerauthbasic Django Django “static-value” “static-value” ldapGroupObjectClass ldapGroupObjectClass one with just read rights for other servers une avec seulement des droits en lecture pour les autres serveurs <s1>ServerName</s1> www.public.com   <s1>ServerName</s1> www.public.com   The value will be use in metadata main markup: Cette valeur est utilisé dans les metadatas : checkLogonHours($ssoLogonHours, '', '+2') checkLogonHours($ssoLogonHours, '', '+2') ../../documentation/1.4/header_remote_user_conversion.html ../../documentation/1.4/header_remote_user_conversion.html Known supported applications Applications connues pour être supportées Sympa virtual host in Apache Hôte virtuel Sympa dans le manager <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> <s34>'htmleditormode'</s34> <s35>=></s35> <s36>'inline'</s36><s37>,</s37> http://tomcat.apache.org/tomcat-5.5-doc/logging.html http://tomcat.apache.org/tomcat-5.5-doc/logging.html <s0>newNotification(xmlString)</s0>: insert a notification for a user (see <a1>Notifications system</a1> for more) <s0>newNotification(xmlString)</s0> : insert une notification pour un utilisateur (voir le <a1>système de notifications</a1> pour plus d'information) <s0>Magic authentication</s0>: a special <a1>SSO</a1> <a2>URL</a2> is protected by <a3>LL::NG</a3>, Sympa will display a button for users who wants to use this feature. <s0>Magic authentication</s0>: une <a2>URL</a2> <a1>SSO</a1> spéciale est protégée pas <a3>LL::NG</a3>, Sympa affiche un bouton pour les utilisateurs souhaitant bénéficier de cette fonction. Change the user attribute to store in Apache logs <e0>(“General Parameters » Logs » REMOTE_USER”)</e0>: use the variable declared above Changer l'attribut utilisateur à stocker dans les journaux d'Apache <e0>(“Paramètres généraux » Journaux » REMOTE_USER”)</e0> : utiliser la variable ci-dessus tar zxvf lemonldap-ng-*.tar.gz tar zxvf lemonldap-ng-*.tar.gz <check>: paragraph to display with a checkbox: will be inserted in <a0>HTML</a0> page enclosed in <p class=“notifCheck”><input type=“checkbox” />…</p> <check> : paragraphe à afficher avec une case à cocher : sera inséré dans la page <a0>HTML</a0> encadré dans <p class=“notifCheck”><input type=“checkbox” />…</p> ../../documentation/1.4/start.html#authentication_users_and_password_databases ../../documentation/1.4/start.html#authentication_users_and_password_databases → User does not have Lemonldap::NG cookie, handler redirect it to the portal → L'utilisateur ne dispose pas d'un cookie Lemonldap::NG, l'agent le redirige vers le portail If using <a0>LL::NG</a0> as reverse proxy, configure the <c1>Auth-User</c1> <a2>header</a2>, else no headers are needed. Si <a0>LL::NG</a0> est utilisé par reverse-proxy, configurer l'<a2>en-tête</a2> <c1>Auth-User</c1>, aucun autre en-tête n'est utile. Load Handler in Apache memory: Charger l'agent dans la mémoire d'Apache : sudo make install PARAM=VALUE PARAM=VALUE ... sudo make install PARAM=VALUE PARAM=VALUE ... contact.html contact.html The Tomcat Valve is only available for tomcat 5.5 or greater. La valve Tomcat est uniquement disponible pour les versions 5.5 et supérieures de Tomcat. ../../../media/documentation/remote-principle.png ../../../media/documentation/remote-principle.png http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project http://www.slideshare.net/coudot/ldapcon-2011-the-lemonldapng-project /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps /_detail/documentation/googleapps-manager-application.png?id=documentation%3A1.4%3Aapplications%3Agoogleapps secureTokenAllowOnError secureTokenAllowOnError This module is a <a0>LL::NG</a0> specific identity federation protocol. Ce module fournit un protocole de fédération d'identité spécifique à <a0>LL::NG</a0>. <s0>Enabled</s0>: Yes <s0>Enabled</s0>: Yes ../../media/icons/flags/us.png ../../media/icons/flags/us.png Click on a column header to sort table. Cliquez sur un en-tête de colonne pour trier le tableau. RHEL/CentOS/Fedora RHEL/CentOS/Fedora <a8>playground</a8><br9/> <a8>playground</a8><br9/> screenshots:1.1:mailreset:mailreset_step4.png screenshots:1.1:mailreset:mailreset_step4.png ../pages/documentation/features.html ../pages/documentation/features.html Follow the <a0>next steps</a0>. Suivre les <a0>étapes suivantes</a0>. In Bugzilla administration interface, go in <c0>Parameters</c0> » <c1>User authentication</c1> Dans l'interface d'administration, allez dans <c0>Parameters</c0> » <c1>User authentication</c1> <s0>Location</s0>: Access Point for <a1>SSO</a1> request and response. <s0>Location</s0>: Point d'accès des requêtes et réponses <a1>SSO</a1>. <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> <s0><s1>[</s1>portal<s2>]</s2></s0> <s3>notification</s3> <s4>=</s4><s5> 1</s5> httpOnly httpOnly dbiAuthPassword dbiAuthPassword <s24># SOAP functions for notification insertion (disabled by default)</s24> <s24># Fonctions SOAP pour insérer des notifications (désactivées par défaut)</s24> <s0>+10m</s0>: ten minutes from session creation <s0>+10m</s0> : dix minutes après la création de la session http://www.google.com/calendar/hosted/mydomain.org/render http://www.google.com/calendar/hosted/mydomain.org/render *.partner.com *.partenaire.com Then you can take any virtual host, and simply add this line to protect it: Ainsi n'importe quel hôte virtuel peut être protégé en ajoutant cette ligne : We use <a0>OW2 JIRA</a0> to list bugs and features. Nous utilisons <a0>OW2 JIRA</a0> pour tous les bogues et fonctionnalités. A cup of coffee (or tea, we are open minded) Une tasse de café (ou de thé, nous sommes ouverts) /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots /_detail/screenshots/0.9.4/0.9.4_password_menu.png?id=screenshots <s0>RelayState session timeout</s0>: timeout for RelayState sessions. <s0>Durée de vie d'une session RelayState</s0> : durée de vie d'une session RelayState. tchemineau tchemineau <s0>User table</s0>: user table name <s0>Table utilisateurs</s0> : nom de la table utilisateurs Do not allow several users for 1 <a0>IP</a0> Ne pas autoriser plusieurs utilisateurs venant de la même adresse <a0>IP</a0> password password impact impact documentation:1.4:authgoogle documentation:1.4:authgoogle ../../../../css/screen.css ../../../../css/screen.css It can not be used to share sessions between different servers except if you share directories (with NFS,…) or if you use <a0>SOAP proxy</a0>. Il ne peut être utilisé pour partager les sessions entre serveurs sauf si les répertoires sont partagés (avec NFS,…) ou en utilisant le <a0>proxy SOAP</a0>. trustedDomains trustedDomains ^/limesurvey/admin/ ^/limesurvey/admin/ You need to disable default Manager protection in lemonldap-ng.ini to rely only on Apache: Il faut alors désactiver la protection du manager dans lemonldap-ng.ini pour la confier à Apache : <a18>authdemo</a18><br19/> <a18>authdemo</a18><br19/> Go in Manager, <c0>Default parameters</c0> » <c1>Advanced parameters</c1> » <c2>Special handlers</c2> » <c3>Secure Token</c3>, and edit the different keys: Aller dans le manager, <c0>Paramètres par défaut</c0> » <c1>Paramètres avancés</c1> » <c2>Handlers spéciaux</c2> » <c3>Jeton sécurisé</c3>, et éditer les clefs suivantes : ../../documentation/1.0/sqlconfbackend.html ../../documentation/1.0/sqlconfbackend.html Logging portal access Trace des authentification Handler inform Apache of connected user (parameter <c0>whatToTrace</c0>), so you can see user login in Apache access logs. L'agent fournit à Apache l'identifiant de l'utilisateur (paramètre <c0>whatToTrace</c0>), ainsi vous pouvez voir l'identifiant dans les journaux d'accès d'Apache. You can use one or a combination of: On peut utiliser un ou plusieurs solution : Authentication: will check user login in a header and create session without prompting any credentials (but will register client <a0>IP</a0> and creation date) Authentification : recherche le nom d'utilisateur dans un en-tête et crée la session sans exiger de mot-de-passe (mais enregistre l'adresse <a0>IP</a0> cliente et la date) /_detail/icons/chat.png?id=contact /_detail/icons/chat.png?id=contact <<s17>Location</s17> /index.pl/config> <<s17>Location</s17> /index.pl/config> casAccessControlPolicy casAccessControlPolicy documentation:googleapps-export-priv-key.png documentation:googleapps-export-priv-key.png managerCssTheme managerCssTheme Copy en subroutine to zz <e1>(where zz is your international code, example: “fr” for France)</e1> then translate messages. Copiez la fonction en en zz <e1>(où zz est votre code international, exemple: “fr” pour le français)</e1> et traduisez ensuite les messages. PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com PerlSetVar LmLocationToReplace http://www.private.com/,https://www.public.com All other elements will be removed including <a0>HTML</a0> elements like <b>. Tous les autres éléments seront supprimés y compris les balises <a0>HTML</a0> telles <b>. Apache (Kerberos, NTLM, OTP, ...) Apache (Kerberos, NTLM, OTP, ...) /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots /_detail/screenshots/1.1/manager/notifications_explorer_create.png?id=screenshots Write session path is needed only if you use a remote session explorer or a remote portal Le chemin d'écriture de session n'est nécessaire que si on utilise un explorateur de session ou un portail distant <a0>DBI</a0> Login column Colonne de nom de connexion <a0>DBI</a0> default default Other NameID formats are automatically managed: Les autres formats de NameID sont automatiquement gérés : MySQL example (suppose that our servers are in 10.0.0.0/24 network): Exemple MySQL (on suppose que les serveurs sont sur le réseau 10.0.0.0/24): Session restrictions Resctriction d'ouverture de session OBM, RoundCube, Sympa, MediaWiki,… OBM, RoundCube, Sympa, MediaWiki,… <s0>Control existing session</s0>: detect <a1>SSO</a1> session, apply configured constraints (1 session per user, 1 session per <a2>IP</a2>, …) <s0>Recherche d'une session valide</s0> : détecte les sessions <a1>SSO</a1>, applique les contraintes configurées (1 session par utilisateur, 1 session par <a2>IP</a2>, …) <s7># CAS Issuer</s7> <s7># Fournisseur d'identité CAS</s7> <s0>Auto login</s0> is very secure for Sympa 5, as Sympa cookie is only exchanged between <a1>LL::NG</a1> Handler and Sympa (user cannot see it) <s0>Auto login</s0> est très sécurisé pour Sympa 5 car le cookie Sympa est seulement échangé entre le handler <a1>LL::NG</a1> et Sympa (les utilisateurs ne le voient pas) ../pages/documentation/1.1/configlocation.html ../pages/documentation/1.1/configlocation.html If you run Debian testing or unstable, the packages are directly installable: Pour les utilisateurs de Debian testing ou unstable, les paquets sont directement installables : ../../documentation/1.4/exportedvars.html ../../documentation/1.4/exportedvars.html By alphabetical order: Par ordre alphabétique : <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> <s0>$VAR1</s0> <s1>=</s1> <s2>{</s2> ../../documentation/1.4/authtwitter.html ../../documentation/1.4/authtwitter.html Internet Protocol Internet Protocol Connection Connexion PerlHandler Lemonldap::NG::Handler::Proxy   PerlHandler Lemonldap::NG::Handler::Proxy   apache2ctl configtest apache2ctl restart apache2ctl configtest apache2ctl restart The Secure Token Handler is a special Handler that create a token for each request and send it to the protected application. L'agent jeton sécurisé est un agent particulier qui crée un jeton pour chaque requête et l'envoie à l'application protégée. /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey /_detail/applications/limesurvey_logo.png?id=documentation%3A1.4%3Aapplications%3Alimesurvey Internal Proxy (lmProxy) Proxy interne (lmProxy) Mail reset request timeout Délai maximal des requêtes de réinitialisation des mails https://github.com/coudot/apache-session-ldap https://github.com/coudot/apache-session-ldap How to change configuration backend Comment changer le backend de configuration <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> <s0>my</s0> <s1>$cgi</s1> <s2>=</s2> Lemonldap<s3>::</s3><s4>NG</s4><s5>::</s5><s6>Handler</s6><s7>::</s7><s8>CGI</s8><s9>-></s9><s10>new</s10> <s11>(</s11><s12>{</s12><s13>}</s13><s14>)</s14><s15>;</s15> <s16>$cgi</s16><s17>-></s17><s18>authenticate</s18><s19>(</s19><s20>)</s20><s21>;</s21> <s22>$cgi</s22><s23>-></s23><s24>authorize</s24><s25>(</s25><s26>)</s26><s27>;</s27> <s28>...</s28> For Debian/Ubuntu, you can use: Pour Debian/Ubuntu, utiliser : ../pages/documentation/1.1/soapservices.html ../pages/documentation/1.1/soapservices.html <s0>Store</s0>: store user info in session database <s0>Stocke</s0>: stocke les données utilisateurs dans la base de données des sessions File File LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> LDAPFilter <s32>=></s32> <s33>'(&(sAMAccountName=$user)(objectClass=person))'</s33><s34>,</s34> ../pages/menu1.html ../pages/menu1.html <a0>LL::NG</a0> is compatible with <a1>LDAP password policy</a1>: <a0>LL::NG</a0> est compatible avec <a1>la politique de mots-de-passe LDAP</a1> : So on each main portal, internal users can access normally, and users issued from the other organization have just to click on the link: Ainsi sur chacun des portails principaux, les utilisateurs internes peuvent accéder normalement et les utilisateurs de l'autre organisation n'ont qu'à cliquer sur le lien : mailBody mailBody perl-Lemonldap-NG-Portal: CPAN - Portal modules perl-Lemonldap-NG-Portal : CPAN - modules portail ../media/icons/flags/us.png ../media/icons/flags/us.png vi /etc/sympa/auth.conf vi /etc/sympa/auth.conf We call “database” a backend where we can read or write a data. Nous appelons “base de données” un dispositif dans lequel nous pouvons lire et écrire des données. SAML2 SAML2 apachectl configtest apachectl restart apachectl configtest apachectl restart administrator administrator Handler check access rule and send headers to protected applications L'agent vérifie les droits d'accès à l'application et envoie des en-têtes HTTP à l'application protégée http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel http://jira.ow2.org/browse/LEMONLDAP?selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel icons:flags:ua.png icons:flags:ua.png documentation:1.4:authfacebook documentation:1.4:authfacebook ../../../media/icons/colors.png ../../../media/icons/colors.png
lemonldap-ng-1.4.6/lemonldap-ng-portal/0000775000175000017500000000000012605703002017610 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/t/0000775000175000017500000000000012542740732020066 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/t/63-Lemonldap-NG-Portal-AuthSAML.t0000644000175000017500000000026412542740732025531 0ustar clementclementuse Test::More tests => 1; SKIP: { eval "use Lasso;"; skip "Lasso is not installed, can't test SAML features", 1 if ($@); use_ok('Lemonldap::NG::Portal::AuthSAML'); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-AuthFacebook.t0000644000175000017500000000011412542740732026500 0ustar clementclementuse Test::More tests => 1; use_ok('Lemonldap::NG::Portal::AuthFacebook'); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/60-Lemonldap-NG-Portal-IssuerDBSAML.t0000644000175000017500000000027012542740732026302 0ustar clementclementuse Test::More tests => 1; SKIP: { eval "use Lasso;"; skip "Lasso is not installed, can't test SAML features", 1 if ($@); use_ok('Lemonldap::NG::Portal::IssuerDBSAML'); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/21-Lemonldap-NG-Portal-AuthSSL.t0000644000175000017500000000155212542740732025431 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSsl.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 2; BEGIN { use_ok('Lemonldap::NG::Portal::Simple') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. $ENV{"REQUEST_METHOD"} = 'GET'; my $p; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'SSL', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', } ) ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/24-Lemonldap-NG-Portal-AuthRemote.t0000644000175000017500000000356312542740732026232 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use Test::More tests => 3; use IO::String; use strict; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } our @ISA = qw(Lemonldap::NG::Portal::Simple); ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. our $buf; tie *STDOUT, 'IO::String', $buf; our $lastpos = 0; sub diff { my $str = $buf; $str =~ s/^.{$lastpos}//s if ($lastpos); $str =~ s/\r//gs; $lastpos = length $buf; return $str; } sub abort { shift; local $, = ' '; print STDERR @_; } sub goToPortal { PE_BADCREDENTIALS; } my $p; # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Remote', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', portal => 'http://abc', remotePortal => 'http://zz/', remoteGlobalStorage => 'Apache::Session::File', remoteGlobalStorageOptions => { dirName => '.', }, } ), 'Portal object' ); ok( ( $p->process() == 0 and $p->{error} == PE_BADCREDENTIALS ), 'call goToPortal' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/67-Lemonldap-NG-Portal-AuthBrowserID.t0000644000175000017500000000156012542740732026641 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSsl.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 2; BEGIN { use_ok('Lemonldap::NG::Portal::Simple') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. $ENV{"REQUEST_METHOD"} = 'GET'; my $p; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'BrowserID', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', } ) ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/66-Lemonldap-NG-Portal-Captcha.t0000644000175000017500000000261612542740732025524 0ustar clementclementuse Test::More tests => 5; BEGIN { use_ok("Lemonldap::NG::Portal::Simple"); } # build Lemonldap::NG::Portal::Simple object my $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', portal => 'http://auth.example.com', error => 0, authentication => 'Demo', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', applicationList => {}, locationRules => { 'test.example.com' => { 'default' => "deny", '^/ok' => '$uid eq "kharec"', '^/nok' => '$uid eq "toto"', }, }, cfgNum => 42, sessionInfo => { uid => "kharec" }, captcha_size => 6, } ); ok( ref($p) eq "Lemonldap::NG::Portal::Simple", "Portal object with captcha configuration" ); # try to init a captcha $p->initCaptcha; ok( $p->{captcha_img}, "Generation of captcha image" ); # try a wrong values to check checkCaptcha method my $captcha_result = $p->checkCaptcha( $p->{captcha_secret}, $p->{captcha_code} ); ok( 1 == $captcha_result, "Verification of good captcha" ); # New captcha $p->initCaptcha; my $captcha_result_2 = $p->checkCaptcha( "wrongcode", $p->{captcha_code} ); ok( 1 != $captcha_result_2, "Reject of bad captcha" ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/64-Lemonldap-NG-Portal-UserDBSAML.t0000644000175000017500000000026612542740732025757 0ustar clementclementuse Test::More tests => 1; SKIP: { eval "use Lasso;"; skip "Lasso is not installed, can't test SAML features", 1 if ($@); use_ok('Lemonldap::NG::Portal::UserDBSAML'); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-UserDBOpenID.t0000644000175000017500000000050212542740732026331 0ustar clementclementuse Test::More tests => 2; SKIP: { eval { require Net::OpenID::Consumer; }; skip "Net::OpenID::Consumer is not installed, so " . "Lemonldap::NG::Portal::AuthOpenID will not be useable", 2 if ($@); use_ok('Lemonldap::NG::Portal::OpenID::SREG'); use_ok('Lemonldap::NG::Portal::UserDBOpenID'); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/26-Lemonldap-NG-Portal-AuthProxy.t0000644000175000017500000000320712542740732026115 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use Test::More tests => 3; use IO::String; use strict; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } our @ISA = qw(Lemonldap::NG::Portal::Simple); ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. our $buf; tie *STDOUT, 'IO::String', $buf; our $lastpos = 0; sub diff { my $str = $buf; $str =~ s/^.{$lastpos}//s if ($lastpos); $str =~ s/\r//gs; $lastpos = length $buf; return $str; } sub abort { shift; local $, = ' '; print STDERR @_; } sub goToPortal { PE_BADCREDENTIALS; } my $p; # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Proxy', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', portal => 'http://abc', soapAuthService => 'https://lm.com', } ), 'Portal object' ); ok( ( $p->process() == 0 and $p->{error} == PE_FIRSTACCESS ), 'Init succeed' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/10-Lemonldap-NG-Portal-i18n.t0000644000175000017500000000337012542740732024723 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; BEGIN { our %tr_err = ( fr => 'French', # Not yet maintained ro => 'Romanian', ); our %tr_msg = ( fr => 'French', ); } use Test::More tests => 8 + ( keys(%tr_err) * 2 ) + ( keys(%tr_msg) * 2 ); BEGIN { use_ok('Lemonldap::NG::Portal::Simple') } ok( my @en = @{&Lemonldap::NG::Portal::_i18n::error_en}, 'English translation' ); ok( $#en > 21, 'Translation count' ); foreach ( keys %tr_err ) { my @tmp; ok( @tmp = @{ &{"Lemonldap::NG::Portal::_i18n::error_$_"} }, "$tr_err{$_} translation" ); ok( $#tmp == $#en, "$tr_err{$_} translation count (" . scalar(@tmp) . ')' ); } my $p1 = bless {}, 'Lemonldap::NG::Portal::Simple'; $p1->{error} = 10; $p1->{lang} = [ 'en', 'fr' ]; my $p2 = bless {}, 'Lemonldap::NG::Portal::Simple'; $p2->{error} = 5; $p2->{lang} = []; my $p3 = bless {}, 'Lemonldap::NG::Portal::Simple'; $p3->{error} = 10; $p3->{lang} = [ 'fr', 'es', 'en' ]; ok( $p1->error() eq $p2->error(10), 'HTTP_ACCEPT_LANGUAGE mechanism 1' ); ok( $p1->error() ne $p2->error(), 'HTTP_ACCEPT_LANGUAGE mechanism 2' ); ok( $p1->error() ne $p3->error(), 'HTTP_ACCEPT_LANGUAGE mechanism 3' ); ok( @en = @{&Lemonldap::NG::Portal::_i18n::msg_en}, 'English messages translation' ); ok( $#en > 19, 'Messages translation count' ); foreach ( keys %tr_msg ) { my @tmp; ok( @tmp = @{ &{"Lemonldap::NG::Portal::_i18n::msg_$_"} }, "$tr_msg{$_} messages translation" ); ok( $#tmp == $#en, "$tr_msg{$_} messages translation count (" . scalar(@tmp) . ')' ); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/01-Lemonldap-NG-Portal-Simple.t0000644000175000017500000000753312542740732025402 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 13; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } SKIP: { eval { require Net::LDAP::Control::PasswordPolicy }; skip "Net::LDAP Password Policy Control is not installed (perl-ldap >= 0.35), so Password Policy will not be usable", 1 if ($@); use_ok('Net::LDAP::Control::PasswordPolicy'); } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $p; # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; $ENV{REMOTE_ADDR} = '127.0.0.1'; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'LDAP test=1', userDB => 'LDAP', passwordDB => 'LDAP', registerDB => 'LDAP', cookieName => 'lemonldap', whatToTrace => '_user', multiValuesSeparator => '; ', securedCookie => 0, user => '', password => '', } ), 'Portal object' ); # Arg test passed ok( $p->{test}, 'Authentication arguments' ); # Process test: first access $ENV{REQUEST_URI} = '/?user=&password='; $ENV{QUERY_STRING} = 'user=&password='; ok( $p->process == 0, 'No user' ); ok( $p->{error} == PE_FIRSTACCESS, 'Error code: first access' ); # Process test: user without password $ENV{REQUEST_URI} = '/?user=test&password='; $ENV{QUERY_STRING} = 'user=test&password='; $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'LDAP test=1', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, } ); ok( $p->process == 0, 'User without password' ); ok( $p->{error} == PE_FORMEMPTY, 'Error code: missing password' ); # Process test without LDAP # No ldap $p->{extractFormInfo} = sub { my $self = shift; $self->{user} = 'user'; $self->{password} = ''; PE_OK; }; $p->{connectLDAP} = sub { PE_OK }; $p->{bind} = sub { PE_OK }; $p->{search} = sub { PE_OK }; $p->{setSessionInfo} = sub { PE_OK }; $p->{unbind} = sub { PE_OK }; $p->{store} = sub { my $self = shift; $self->{id} = 1; PE_OK; }; $p->{authenticate} = sub { PE_OK }; $p->{authFinish} = sub { PE_OK }; $p->{macros} = { macro1 => '"foo"', macro2 => '$macro1', macro3 => '$macro2', macro4 => '$macro3', }; $p->{groups} = { group1 => '1', group2 => '$groups =~ /\bgroup1\b/', group3 => '$groups =~ /\bgroup2\b/', group4 => '$groups =~ /\bgroup3\b/', }; ok( $p->process > 0, 'User OK' ); ok( $p->{sessionInfo}->{macro4} eq "foo", "Macros computed in alphanumeric order" ); ok( $p->{sessionInfo}->{groups} =~ /\bgroup4\b/, "Groups computed in alphanumeric order" ); # Cookie test ok( $p->{cookie}->[0]->value eq '1', 'Cookie value' ); # Time conversion my ( $d, $h, $m, $s ) = $p->convertSec('123456'); ok( $d == 1 && $h == 10 && $m == 17 && $s == 36, 'Time conversion' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-UserDBGoogle.t0000644000175000017500000000011412542740732026426 0ustar clementclementuse Test::More tests => 1; use_ok('Lemonldap::NG::Portal::UserDBGoogle'); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/50-Lemonldap-NG-Portal-Menu.t0000644000175000017500000001116712542740732025057 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 10; BEGIN { use_ok('Lemonldap::NG::Portal::Menu') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. $ENV{REQUEST_METHOD} = 'GET'; # Build portal my $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', error => 0, authentication => 'Null', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', applicationList => {}, locationRules => { 'test.example.com' => { 'default' => 'deny', '^/ok' => '$uid eq "coudot"', '^/nok' => '$uid eq "toto"', }, }, cfgNum => 42, sessionInfo => { uid => "coudot", }, vhostOptions => { 'test.example.com' => { vhostAliases => 'alias.example.com' }, }, } ); # Init menu $p->menuInit(); # Test that display modules is an array ok( ref $p->{menuDisplayModules} eq 'ARRAY', 'Modules displayed' ); # Test that application loop is an array my $appLoop = $p->appslist(); ok( ref $appLoop eq 'ARRAY', 'Application loop' ); # Create an application list $p->{applicationList} = { test => { type => 'category', catname => 'Test', testautook => { type => 'application', options => { uri => 'http://test.example.com/ok/login.php', name => 'Test application', display => 'auto', }, }, testautonok => { type => 'application', options => { uri => 'http://test.example.com/nok/login.php', name => 'Test application', display => 'auto', }, }, teston => { type => 'application', options => { uri => 'http://test.example.com/app/login.php', name => 'Test application', display => 'on', }, }, testoff => { type => 'application', options => { uri => 'http://test.example.com/app/login.php', name => 'Test application', display => 'off', }, }, testalias => { type => 'application', options => { uri => 'http://alias.example.com/ok/login.php', name => 'Test application', display => 'auto', }, }, }, empty => { type => 'category', catname => 'Test', test2off => { type => 'application', options => { uri => 'http://test.example.com/app/login.php', name => 'Test application', display => 'off', }, }, } }; # Reload application list $appLoop = $p->appslist(); # Check empty category # Check display off and on # Check display auto ok and nok my $emptyCat = 0; my $displayOn = 0; my $displayOff = 0; my $displayOk = 0; my $displayNok = 0; my $displayAlias = 0; foreach (@$appLoop) { $emptyCat++ if $_->{catid} eq "empty"; if ( $_->{catid} eq "test" ) { foreach ( @{ $_->{'applications'} } ) { $displayOn++ if $_->{appid} eq "teston"; $displayOff++ if $_->{appid} eq "testoff"; $displayOk++ if $_->{appid} eq "testautook"; $displayNok++ if $_->{appid} eq "testautonok"; $displayAlias++ if $_->{appid} eq "testalias"; } } } ok( $emptyCat == 0, 'Hide empty category' ); ok( $displayOn != 0, 'Display on' ); ok( $displayOff == 0, 'Display off' ); ok( $displayOk != 0, 'Display auto ok' ); ok( $displayNok == 0, 'Display auto nok' ); ok( $displayAlias != 0, 'Display alias ok' ); # Connect as another user with different rights $p->{sessionInfo}->{uid} = "toto"; my $appLoop2 = $p->appslist(); my $displayOk2 = 0; foreach (@$appLoop2) { if ( $_->{catid} eq "test" ) { foreach ( @{ $_->{'applications'} } ) { $displayOk2++ if $_->{appid} eq "testautonok"; } } } ok( $displayOk2 != 0, 'Display auto ok for different user' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/61-Lemonldap-NG-Portal-SAML.t0000644000175000017500000000253212542740732024705 0ustar clementclement# Unit tests for common SAML functions use Test::More tests => 4; # Test Lasso presence and load _SAML module SKIP: { eval "use Lasso;"; skip "Lasso is not installed, can't test SAML features", 4 if ($@); use_ok('Lemonldap::NG::Portal::Simple'); # Portal object $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; my $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'SAML', userDB => 'SAML', issuerDB => 'Null', passwordDB => 'Null', registerDB => 'Null', } ); # Date/timestamp conversion my $timestamp = "1273653920"; my $samldate = "2010-05-12T08:45:20Z"; my $samldatems = "2010-05-12T08:45:20.123456Z"; ok( $p->timestamp2samldate($timestamp) eq $samldate, "Timestamp conversion into SAML2 date" ); ok( $p->samldate2timestamp($samldate) eq $timestamp, "SAML2 date conversion into timestamp" ); ok( $p->samldate2timestamp($samldatems) eq $timestamp, "SAML2 date (with ms) conversion into timestamp" ); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/30-Lemonldap-NG-Portal-UserDBNull.t0000644000175000017500000000216512542740732026126 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSsl.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 4; BEGIN { use_ok('Lemonldap::NG::Portal::Simple') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. # Fake ENV $ENV{"REQUEST_METHOD"} = 'GET'; $ENV{"TEST_STRING"} = 'OK'; $ENV{"REMOTE_ADDR"} = '127.0.0.1'; my $p; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Null', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', exportedVars => { uid => "TEST_STRING", }, } ) ); ok( $p->setSessionInfo() == PE_OK, 'Run setSessionInfo' ); ok( $p->{sessionInfo}->{"uid"} eq "OK", 'Read info in session' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/20-Lemonldap-NG-Portal-AuthApache.t0000644000175000017500000000155512542740732026153 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSsl.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 2; BEGIN { use_ok('Lemonldap::NG::Portal::Simple') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. $ENV{"REQUEST_METHOD"} = 'GET'; my $p; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Apache', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', } ) ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/26-Lemonldap-NG-Portal-AuthChoice.t0000644000175000017500000000340512542740732026166 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 5; use strict; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } our @ISA = qw(Lemonldap::NG::Portal::Simple); ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $p; # CGI Environment $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; $ENV{REMOTE_ADDR} = '127.0.0.1'; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Choice', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', getUser => sub { PE_OK }, setSessionInfo => sub { PE_OK }, portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, authChoiceModules => { '1_LDAP_Directory' => 'LDAP|LDAP|LDAP', '2_CIA_Backdoor' => 'Null|Null|Null' }, } ), 'Portal object' ); my $authLoop = $p->_buildAuthLoop(); ok( ref $authLoop eq "ARRAY", "Authentication loop is an array reference" ); ok( $authLoop->[0]->{key} =~ /(1_LDAP|2_CIA_Backdoor)/, "Key registered in auth loop" ); ok( $authLoop->[0]->{name} =~ /(LDAP|CIA\sBackdoor)/, "Name parsed and registered in auth loop" ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-AuthGoogle.t0000644000175000017500000000011212542740732026201 0ustar clementclementuse Test::More tests => 1; use_ok('Lemonldap::NG::Portal::AuthGoogle'); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/05-Lemonldap-NG-Portal-Safe.t0000644000175000017500000000356512542740732025034 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 10; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. # Create portal object with Safe jail (the default) my $p; $ENV{REQUEST_METHOD} = "GET"; ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Null', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', useSafeJail => 1, } ), 'Portal object with Safe jail' ); # Fake data my $sessionData = "coudot"; $p->{sessionInfo}->{uid} = $sessionData; my $envData = "127.0.0.1"; $ENV{REMOTE_ADDR} = $envData; # Real Safe jail ok( $p->{useSafeJail} == 1, 'Safe jail on' ); ok( $p->safe->reval('$uid') eq $sessionData, 'Safe jail on - session data' ); ok( $p->safe->reval('$ENV{REMOTE_ADDR}') eq $envData, 'Safe jail on - env data' ); ok( defined $p->safe->reval('checkDate(0,1)'), 'Safe jail on - extended function' ); # Reset safe object $Lemonldap::NG::Portal::Simple::safe = undef; $p->{useSafeJail} = 0; # Fake Safe jail ok( $p->{useSafeJail} == 0, 'Safe jail off' ); ok( $p->safe->reval('$uid') eq $sessionData, 'Safe jail off - session data' ); ok( $p->safe->reval('$ENV{REMOTE_ADDR}') eq $envData, 'Safe jail off - env data' ); ok( defined $p->safe->reval('checkDate(0,1)'), 'Safe jail off - extended function' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/02-Lemonldap-NG-Portal-SharedConf.t0000644000175000017500000000220012542740732026150 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-SharedConf.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 2; BEGIN { use_ok('Lemonldap::NG::Portal::SharedConf') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. # Try to load an alternate conffile use File::Temp; my $dir = File::Temp::tempdir(); my $ini = File::Temp->new( DIR => $dir ); print $ini "[all] [configuration] type=File dirName=$dir [portal] portalSkin = test "; $ini->flush(); open( CONF, ">$dir/lmConf-1" ) or die $@; print CONF " cfgNum 1 useXForwardedForIP 0 key tmp "; CONF->flush(); my $portal = Lemonldap::NG::Portal::SharedConf->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', configStorage => { confFile => "$ini" }, } ); my $test = $portal->{portalSkin}; ok( $test eq "test", "Custom INI file" ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-UserDBFacebook.t0000644000175000017500000000011612542740732026725 0ustar clementclementuse Test::More tests => 1; use_ok('Lemonldap::NG::Portal::UserDBFacebook'); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-AuthOpenID.t0000644000175000017500000000041512542740732026111 0ustar clementclementuse Test::More tests => 1; SKIP: { eval { require Net::OpenID::Consumer; }; skip "Net::OpenID::Consumer is not installed, so " . "Lemonldap::NG::Portal::AuthOpenID will not be useable", 1 if ($@); use_ok('Lemonldap::NG::Portal::AuthOpenID'); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/04-Lemonldap-NG-Portal-SOAP.t0000644000175000017500000000602312542740732024707 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use strict; use IO::String; use Test::More tests => 4; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } our @ISA = qw(Lemonldap::NG::Portal::Simple); sub abort { shift; $, = ''; print STDERR @_; die 'abort has been called'; } sub quit { 2; } our $param; sub param { return $param; } sub soapfunc { return 'SoapOK'; } our $buf; tie *STDOUT, 'IO::String', $buf; our $lastpos = 0; sub diff { my $str = $buf; $str =~ s/^.{$lastpos}//s if ($lastpos); $str =~ s/\r//gs; $lastpos = length $buf; return $str; } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $p; # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; SKIP: { eval { require SOAP::Lite }; skip "SOAP::Lite is not installed, so CGI SOAP functions will not work", 3 if ($@); ok( $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', globalStorageOptions => { Directory => '/tmp/', LockDirectory => '/tmp/', }, domain => 'example.com', cookieName => 'lemonldaptest', authentication => 'Multi SSL;Demo', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', soap => 1, whatToTrace => 'uid', securedCookie => 0, hiddenAttributes => '_passwd', } ), 'Portal object' ); bless $p, 'My::Portal'; open STDERR, '>/dev/null'; $p->getCookies( "dwho", "test" ); ok( $p->{error} != 0, 'getCookies with bad password' ); $p = Lemonldap::NG::Portal::Simple->new( { globalStorage => 'Apache::Session::File', globalStorageOptions => { Directory => '/tmp/', LockDirectory => '/tmp/', }, domain => 'example.com', cookieName => 'lemonldaptest', authentication => 'Multi SSL;Demo', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', soap => 1, whatToTrace => 'uid', securedCookie => 0, hiddenAttributes => '_passwd', } ); $p->getCookies( "dwho", "dwho" ); ok( $p->{error} == 0, 'getCookies with good password' ); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/40-Lemonldap-NG-Portal-CDA.t0000644000175000017500000000206212542740732024533 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use Test::More tests => 3; BEGIN { use_ok('Lemonldap::NG::Portal::CDA') } our @ISA = ('Lemonldap::NG::Portal::CDA'); # skipping SharedConf::getConf sub getConf { return Lemonldap::NG::Portal::Simple::getConf(@_); } # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', cookieName => 'lemonldap', authentication => 'Null', userDB => 'Null', passwordDB => 'Null', registerDB => 'Null', } ), 'Portal object' ); ok( $p->{cda}, 'CDA is set' ); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/65-Lemonldap-NG-Portal-IssuerDBCAS.t0000644000175000017500000000077612542740732026174 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSsl.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; BEGIN { use_ok('Lemonldap::NG::Portal::IssuerDBCAS') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. lemonldap-ng-1.4.6/lemonldap-ng-portal/t/99-pod.t0000644000175000017500000000020112542740732021263 0ustar clementclementuse Test::More; eval "use Test::Pod 1.00"; plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; all_pod_files_ok(); lemonldap-ng-1.4.6/lemonldap-ng-portal/t/25-Lemonldap-NG-Portal-Multi.t0000644000175000017500000002346612542740732025254 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use Test::More tests => 14; use IO::String; use strict; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ) } our @ISA = qw(Lemonldap::NG::Portal::Simple); ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. our $buf; tie *STDOUT, 'IO::String', $buf; our $lastpos = 0; sub lmLog { my ( $self, $mess, $level ) = @_; print STDERR "$mess\n" unless ( $level =~ /^(?:debug|info)$/ ); } sub diff { my $str = $buf; $str =~ s/^.{$lastpos}//s if ($lastpos); $str =~ s/\r//gs; $lastpos = length $buf; return $str; } sub abort { shift; local $, = ' '; #print STDERR @_; } sub goToPortal { PE_BADCREDENTIALS; } #sub _sub { # my $self = shift; # print STDERR "DEBUG: $_[0]\n"; # return $self->SUPER::_sub(@_); #} my $p; # CGI Environment $ENV{SCRIPT_NAME} = '/test.pl'; $ENV{SCRIPT_FILENAME} = '/tmp/test.pl'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{REQUEST_URI} = '/'; $ENV{QUERY_STRING} = ''; $ENV{REMOTE_ADDR} = '127.0.0.1'; $ENV{HTTP_ACCEPT_LANGUAGE} = 'en'; my ( $test, $testU ); { $INC{'Lemonldap/NG/Portal/Auth1.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; $INC{'Lemonldap/NG/Portal/Auth2.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; $INC{'Lemonldap/NG/Portal/UserDB1.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; $INC{'Lemonldap/NG/Portal/UserDB2.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; $INC{'Lemonldap/NG/Portal/UserDB3.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; $INC{'Lemonldap/NG/Portal/UserDB4.pm'} = 't/25-Lemonldap-NG-Portal-Multi.t'; ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1;2', userDB => 'Multi 1;2', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', getUser => sub { PE_OK }, setSessionInfo => sub { PE_OK }, portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); $test = 0; ok( ( $p->process() == 1 and $p->{error} == PE_OK and $test == 1 ), 'Second module was called' ); ok( ( $p->getDisplayType() eq "display2" ), 'Display type from module 2 was found' ); ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1;2', userDB => 'Multi 1;2', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); $test = 0; $testU = 0; ok( ( $p->process() == 1 and $p->{error} == PE_OK and $testU == 1 ), 'Second userDB module was called' ); ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1;2', userDB => 'Multi 3;4', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); $test = 0; $testU = 0; ok( ( $p->process() == 1 and $p->{error} == PE_OK and $testU == 1 ), 'Second userDB module was not called' ); ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1 1==0;2 1==0', userDB => 'Multi 3;4', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); ok( ( $p->process() == 0 and $p->{error} == PE_NOSCHEME ), 'No scheme available' ); ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1;2 1==0', userDB => 'Multi 3;4', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); ok( ( $p->process() == 0 and $p->{error} == PE_ERROR ), 'Error from previous module' ); ok( $p = My::Portal->new( { globalStorage => 'Apache::Session::File', domain => 'example.com', authentication => 'Multi 1;2 1==1', userDB => 'Multi 3;4', passwordDB => 'Null', registerDB => 'Null', cookieName => 'lemonldap', whatToTrace => 'dummy', multiValuesSeparator => '; ', securedCookie => 0, hiddenAttributes => '', portal => 'http://abc', sessionInfo => { uid => 't', }, userNotice => sub { }, user => 'jdoe', } ), 'Portal object' ); ok( ( $p->process() == 1 ), '1 failed, 2 succeed' ); } package Lemonldap::NG::Portal::Auth1; sub authInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub extractFormInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub setAuthSessionInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub authenticate { $test = 1; Lemonldap::NG::Portal::Simple::PE_ERROR; } sub getDisplayType { return "display1"; } package Lemonldap::NG::Portal::Auth2; sub authInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub extractFormInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub setAuthSessionInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub authenticate { Lemonldap::NG::Portal::Simple::PE_OK; } sub getDisplayType { return "display2"; } package Lemonldap::NG::Portal::UserDB1; sub userDBInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub getUser { Lemonldap::NG::Portal::Simple::PE_OK; } sub setSessionInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub setGroups { Lemonldap::NG::Portal::Simple::PE_OK; } package Lemonldap::NG::Portal::UserDB2; sub userDBInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub getUser { Lemonldap::NG::Portal::Simple::PE_OK; } sub setSessionInfo { $testU = 1; Lemonldap::NG::Portal::Simple::PE_OK; } sub setGroups { Lemonldap::NG::Portal::Simple::PE_OK; } package Lemonldap::NG::Portal::UserDB3; sub userDBInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub getUser { Lemonldap::NG::Portal::Simple::PE_OK; } sub setSessionInfo { $testU = 1; Lemonldap::NG::Portal::Simple::PE_OK; } sub setGroups { Lemonldap::NG::Portal::Simple::PE_OK; } package Lemonldap::NG::Portal::UserDB4; sub userDBInit { Lemonldap::NG::Portal::Simple::PE_OK; } sub getUser { Lemonldap::NG::Portal::Simple::PE_OK; } sub setSessionInfo { Lemonldap::NG::Portal::Simple::PE_OK; } sub setGroups { Lemonldap::NG::Portal::Simple::PE_OK; } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/27-Lemonldap-NG-Portal-IssuerDBOpenID.t0000644000175000017500000000566412542740732026703 0ustar clementclementpackage My::Portal; use Test::More tests => 14; use strict; our @ISA = qw(Lemonldap::NG::Portal::IssuerDBOpenID Lemonldap::NG::Portal::OpenID::SREG Lemonldap::NG::Portal::Simple); sub lmLog { my ( $self, $msg, $level ) = splice @_; #print STDERR "[$level] $msg\n"; } our $param = { confirm => 0 }; sub param { my ( $self, $key ) = splice @_; return $param->{$key}; } sub info { } sub _sub { } sub updatePersistentSession { } $ENV{HTTP_ACCEPT_LANGUAGE} = 'en'; SKIP: { eval { require Net::OpenID::Server; }; skip( "Net::OpenID::Consumer is not installed, so " . "Lemonldap::NG::Portal::AuthOpenID will not be useable", 14 ) if ($@); use_ok('Lemonldap::NG::Portal::OpenID::Server'); use_ok('Lemonldap::NG::Portal::IssuerDBOpenID'); use_ok('Lemonldap::NG::Portal::OpenID::SREG'); my $p = bless { sessionInfo => { uid => 'test', mail => 'x.x.org' }, whatToTrace => 'uid', }, __PACKAGE__; my ( $r, $h ); ( $r, $h ) = $p->sregHook( '', '', 0, 0, {} ); ok( $r == 0, 'SREG: Call sregHook with untrusted request' ); $param->{confirm} = -1; ok( !$p->sregHook( '', '', 1, 1, {} ), 'SREG: call sregHook with confirm => -1' ); $param->{confirm} = 1; ok( $p->sregHook( '', '', 1, 1, {} ), 'SREG: call sregHook without arguments' ); ( $r, $h ) = $p->sregHook( '', '', 1, 1, { required => 'fullname,email', optional => 'nickname' }, ); ok( $r == 0, 'SREG: 0 returned unless required attributes are configured' ); $p->{openIdSreg_fullname} = '$uid'; $p->{openIdSreg_email} = '$mail'; $p->{openIdSreg_nickname} = '$uid'; ( $r, $h ) = $p->sregHook( '', '', 1, 1, { required => 'fullname,email', optional => 'nickname' }, ); ok( $r == 1, 'SREG: 1 returned if required attributes are configured' ); ok( ref($h), 'SREG: Parameters returned as hashref' ); ok( ( $h->{email} eq 'x.x.org' and $h->{fullname} eq 'test' ), 'SREG: required attributes returned' ); ok( !defined( $h->{nickname} ), 'SREG: optional parameter not returned' ); $param->{sreg_nickname} = 0; ( $r, $h ) = $p->sregHook( '', '', 1, 1, { required => 'fullname,email', optional => 'nickname' }, ); ok( !defined( $h->{nickname} ), 'SREG: optional unwanted parameter not returned' ); $param->{sreg_nickname} = 'OK'; ( $r, $h ) = $p->sregHook( '', '', 1, 1, { required => 'fullname,email', optional => 'nickname' }, ); ok( defined( $h->{nickname} ), 'SREG: optional wanted parameter returned' ); $param->{confirm} = 0; ( $r, $h ) = $p->sregHook( '', '', 1, 1, { required => 'fullname,email', optional => 'nickname' }, ); ok( ( $r == 0 and ref($h) ), 'SREG: 0 returned for unconfirmed parameters' ); } lemonldap-ng-1.4.6/lemonldap-ng-portal/t/03-XSS-protection.t0000644000175000017500000001072712542740732023341 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; package My::Portal; use strict; use Test::More tests => 22; BEGIN { use_ok( 'Lemonldap::NG::Portal::Simple', ':all' ); sub Lemonldap::NG::Portal::Simple::lmLog { } } #use Lemonldap::NG::Portal::Simple; our @ISA = 'Lemonldap::NG::Portal::Simple'; my ( $url, $result, $logout ); $logout = 0; my @h = ( '' => PE_OK, 'Empty', # 4 http://test.example.com/ 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20v' => PE_OK, 'Protected virtual host', # 5 http://test.example.com 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20v' => PE_OK, 'Missing / in URL', # 6 http://test.example.com:8000/test 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb206ODAwMC90ZXN0' => PE_OK, 'Non default port', # 7 http://test.example.com:8000/ 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb206ODAwMA==' => PE_BADURL, 'Non default port with missing /', # 8 http://t.example2.com/test 'aHR0cDovL3QuZXhhbXBsZTIuY29tL3Rlc3Q=' => PE_OK, 'Undeclared virtual host in trusted domain', # 9 http://testexample2.com/ 'aHR0cDovL3Rlc3RleGFtcGxlMi5jb20vCg==' => PE_BADURL, 'Undeclared virtual host in untrusted domain' . ' (looks like a trusted domain, but is not)', # 10 http://test.example3.com/ 'aHR0cDovL3Rlc3QuZXhhbXBsZTMuY29tLwo=' => PE_BADURL, 'Undeclared virtual host in untrusted domain (domain name' . ' "example3.com" is trusted, but domain "*.example3.com" not)', # 11 http://example3.com/ 'aHR0cDovL2V4YW1wbGUzLmNvbS8K' => PE_OK, 'Undeclared virtual host with trusted domain name', # 12 http://t.example.com/test 'aHR0cDovL3QuZXhhbXBsZS5jb20vdGVzdA==' => PE_BADURL, 'Undeclared virtual host in (untrusted) protected domain', # 13 'http://test.com/' => PE_BADURL, 'Non base64 encoded characters', # 14 http://test.example.com:8000V 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb206ODAwMFY=' => PE_BADURL, 'Non number in port', # 15 http://t.ex.com/test 'aHR0cDovL3QuZXguY29tL3Rlc3Q=' => PE_BADURL, 'Undeclared virtual host in untrusted domain', # 16 http://test.example.com/%00 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20vJTAw' => PE_BADURL, 'Base64 encoded \0', # 17 http://test.example.com/test\0 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20vdGVzdAA=' => PE_BADURL, 'Base64 and url encoded \0', # 18 'XX%00' => PE_BADURL, 'Non base64 encoded \0 ', # 19 http://test.example.com/test? 'aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20vdGVzdD88c2NyaXB0PmFsZXJ0KCk8L3NjcmlwdD4=' => PE_BADURL, 'base64 encoded HTML tags', # LOGOUT TESTS 'LOGOUT', # 20 url=http://www.toto.com/, bad referer 'aHR0cDovL3d3dy50b3RvLmNvbS8=', 'http://bad.com/' => PE_BADURL, 'Logout required by bad site', # 21 url=http://www.toto.com/, good referer 'aHR0cDovL3d3dy50b3RvLmNvbS8=', 'http://test.example.com/' => PE_OK, 'Logout required by good site', # 22 url=http://www?\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "
\n"; print "

CAS sample client

\n"; print "
\n"; my $ticket = $cgi->param('ticket'); # First time access unless ($ticket) { print "

Login on $cas_url

\n"; print "
\n"; print "Simple login\n"; print "Renew login\n"; print "Gateway login\n"; print "
\n"; } # Ticket receveived else { print "
\n"; print "
\n"; print "

CAS login result

\n"; print "
\n"; print "
\n"; print $cgi->h4("Service ticket: $ticket"); # Get user my $user = $cas->validateST( $cgi->url(), $ticket ); if ($user) { print $cgi->h4("Authenticated user: $user"); } else { print "
Error: " . &AuthCAS::get_errors() . "
\n"; } # Get proxy granting ticket my $pgtId = $cas->{pgtId}; if ($pgtId) { print $cgi->h4("Proxy granting ticket: $pgtId"); # Try to request proxy ticket my $pt = $cas->retrievePT($proxiedService); if ($pt) { print $cgi->h4("Proxy ticket: $pt"); # Use proxy ticket my ( $puser, @proxies ) = $cas->validatePT( $proxiedService, $pt ); print $cgi->h4("Proxied user: $puser"); print $cgi->h4("Proxies used: @proxies"); } else { print "
Error: " . &AuthCAS::get_errors() . "
\n"; } } else { print "
Error: Unable to get proxy granting ticket
\n"; } print "
\n"; print "
\n"; print "\n"; } print "
\n"; print "
\n"; print $cgi->end_html(); # Remove PGT file unlink $pgtFile; } exit; lemonldap-ng-1.4.6/lemonldap-ng-portal/example/soaperrortest.pl0000755000175000017500000000124212542740730024525 0ustar clementclement#!/usr/bin/perl #============================================================================== # # Simple script to test LemonLDAP::NG SOAP error method # #============================================================================== use strict; use SOAP::Lite; use Data::Dumper; my $error_code = 15; # Service my $soap = SOAP::Lite->new( proxy => 'http://auth.example.com/index.pl' ); $soap->default_ns('urn:Lemonldap/NG/Common/CGI/SOAPService'); # Call error SOAP method my $error_fr = $soap->call( 'error', $error_code, 'fr' )->result(); print Dumper $error_fr; my $error_en = $soap->call( 'error', $error_code, 'en' )->result(); print Dumper $error_en; exit; lemonldap-ng-1.4.6/lemonldap-ng-portal/example/metadata.pl0000755000175000017500000000314412542740732023376 0ustar clementclement#!/usr/bin/perl use Lemonldap::NG::Portal::SharedConf; use Lemonldap::NG::Common::Conf::SAML::Metadata; use strict; my $portal = Lemonldap::NG::Portal::SharedConf->new( { # ACCESS TO CONFIGURATION # By default, Lemonldap::NG uses the default lemonldap-ng.ini file to # know where to find its configuration # (generaly /etc/lemonldap-ng/lemonldap-ng.ini) # You can specify by yourself this file : #configStorage => { confFile => '/path/to/my/file' }, # or set explicitely parameters : #configStorage => { # type => 'File', # dirName => '/usr/local/lemonldap-ng/data//conf' #}, # Note that YOU HAVE TO SET configStorage here if you've declared this # portal as SOAP configuration server in the manager # OTHERS # You can also overload any parameter issued from manager # configuration. Example: #globalStorage => 'Apache::Session::File', #globalStorageOptions => { # 'Directory' => '/var/lib/lemonldap-ng/sessions/', # 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/', #}, # Note that YOU HAVE TO SET globalStorage here if you've declared this # portal as SOAP session server in the manager } ); my $skin = 'common'; my $skin_dir = $portal->getApacheHtdocsPath() . '/skins'; my $skin_file = 'saml2-metadata.tpl'; my $metadata = Lemonldap::NG::Common::Conf::SAML::Metadata->new(); print $portal->header('text/xml; charset=utf-8'); print $metadata->serviceToXML( $skin_dir . '/' . $skin . '/' . $skin_file, $portal ); lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/0000775000175000017500000000000012542740732022405 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/0000775000175000017500000000000012542740732023662 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/customheader.tpl0000644000175000017500000000004012542740732027056 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/openid.tpl0000644000175000017500000000157412542740732025666 0ustar clementclement

//images/logo-lock.png" />

:

//images/arrow.png" />" class="positive">

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/yubikeyform.tpl0000644000175000017500000000156212542740732026752 0ustar clementclement


()


lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/footer.tpl0000644000175000017500000000014112542740732025673 0ustar clementclement
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/mail.tpl0000644000175000017500000001314612542740732025330 0ustar clementclement
//images/logo-ok.png" />

" /> " value="" /> " />
.
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/notification.tpl0000644000175000017500000000211512542740732027066 0ustar clementclement
//images/logo-ok.png" />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/customfooter.tpl0000644000175000017500000000100212542740732027123 0ustar clementclement

LemonLDAP::NG, .

//images/logo_lemonldap-ng_400px.png" alt="LemonLDAP::NG logo" width="120" /> lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/error.tpl0000644000175000017500000000315012542740732025531 0ustar clementclement
//images/logo-warn.png" />

">

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/info.tpl0000644000175000017500000000251112542740732025333 0ustar clementclement
//images/logo-info.png" />

" method="" class="login"> " value="" />
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/login.tpl0000644000175000017500000002162412542740732025516 0ustar clementclement


">
" method="post" class="login "> " /> " value="" />






//images/logo-info.png" />

//images/logo-info.png" />

//images/arrow.png" />" class="positive">

//images/logo-info.png" />

//images/arrow.png" />" class="negative">

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/register.tpl0000644000175000017500000001134012542740732026224 0ustar clementclement
//images/logo-ok.png" />

.
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/authmessage.tpl0000644000175000017500000000124612542740732026712 0ustar clementclement

//images/logo-lock.png" />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/confirm.tpl0000644000175000017500000000571612542740732026047 0ustar clementclement
//images/logo-info.png" />

" class="login"> " /> " value="" /> " />

checked/>
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/css/0000775000175000017500000000000012542740732024452 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/css/styles.css0000644000175000017500000001534212542740732026512 0ustar clementclement/* CSS for skin IMPACT */ /* Shipped with LemonLDAP::NG */ /* -------------------------------------------------------------------------- */ /* Common */ /* -------------------------------------------------------------------------- */ body { background:#F0F0F0 url("../images/bg.png") repeat-x; font-size: 0.8em; font-family:Arial, Helvetica, Verdana; } a { color: #0AAF11; text-decoration: none; } form { margin: 0px; padding: 0px; } hr.solid { margin-top: 15px; margin-bottom: 15px; border: 0px; height: 1px; color: #aaa; background: #aaa; } form input[name=user], form input[name=firstname], form input[name=lastname] { border: 1px solid #aaa; padding: 5px; width: 200px; background: #FFFFFF url("../../common/user_suit.png") 5px 5px no-repeat; padding-left: 25px; } form input[type=password], form input[name=captcha_user_code] { border: 1px solid #aaa; padding: 5px; width: 200px; background: #FFFFFF url("../../common/key.png") 5px 5px no-repeat; padding-left: 25px; } form input[name=mail] { border: 1px solid #aaa; padding: 5px; width: 200px; background: #FFFFFF url("../../common/email.png") 5px 5px no-repeat; padding-left: 25px; } form input[name=openid_identifier] { border: 1px solid #aaa; padding: 5px; width: 200px; background: #FFFFFF url("../../common/openid-16x16.gif") 5px 5px no-repeat; padding-left: 25px; } /* -------------------------------------------------------------------------- */ /* Custom classes */ /* -------------------------------------------------------------------------- */ span.text-error, div.text-error, p.text-error { color: #E00; font-weight: bold; } span.text-help, div.text-help, p.text-help { font-size: 0.9em; } span.text-info, div.text-info, p.text-info { font-style: italic; } span.text-label, div.text-label, p.text-label { font-weight: bold; } div.panel-buttons { text-align: right; } div.title { vertical-align: bottom; font-weight: bold; font-size: 2em; } div.title img { vertical-align: bottom; } ul.nostyle, ul.nostyle li { list-style-type: none; margin: 0px; padding: 0px; } div.authLogo { text-align: center; margin-top: 10px; } /* -------------------------------------------------------------------------- */ /* Main layout */ /* -------------------------------------------------------------------------- */ #layout { position: absolute; top: 100px; right: 0px; left: 0px; width: 700px; height: 340px; margin: auto; } #content { padding: 20px; background-color: #F8F8F8; color: #000; border: 1px solid #EAEAEA; border-radius: 10px; -moz-border-radius:10px; -webkit-border-radius:10px; } #content-all { padding: 10px; } #content-all table { margin: 0px; padding: 0px; } #content-all table tr td { vertical-align: top; } #content-all-info { padding: 10px; margin-bottom: 15px; background-color: #D5EFD1; color: #000; border: 1px solid #B5CFB6; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; } #content-all-info2 { text-align: center; padding: 10px; margin-bottom: 15px; background-color: #D5EFD1; color: #000; border: 1px solid #B5CFB6; border-radius: 10px; -moz-border-radius: 0px 0px 10px 10px; -webkit-border-radius: 0px 0px 10px 10px; } #content-all-info table.info, #content-all-info2 table.info { width: 100%; border-collapse: collapse; } #content-all-info table.info th, #content-all-info2 table.info th { background-color: #B5CFB6; } #content-all-info table.info th, #content-all-info2 table.info th #content-all-info table.info td, #content-all-info2 table.info td { text-align: left; border-bottom: 1px dotted #B5CFB6; padding: 5px; } #content-left { position: absolute; width: 370px; padding: 10px; } #content-left h1 { font-size: 1.5em; } #content-right { margin-left: 400px; padding: 10px; background-color: #D5EFD1; color: #000; border: 1px solid #B5CFB6; border-radius: 10px; -moz-border-radius:10px; -webkit-border-radius:10px; } #content-right h1 { font-size: 1.3em; } #content-right hr { color: #B5CFB6; background-color: #B5CFB6; } #content-right img { vertical-align: top; } #content-right a { vertical-align: bottom; text-decoration: underline; } /* -------------------------------------------------------------------------- */ /* Footer layout */ /* -------------------------------------------------------------------------- */ #layout-footer { padding: 5px; text-align: center; } #layout-footer a { text-decoration: none; font-weight: bold; } #layout-footer a img { border: 0px; } /* -------------------------------------------------------------------------- */ /* Applications layer */ /* -------------------------------------------------------------------------- */ .clearfix { clear:both; } div.category { border:1px solid #B5CFB6; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; margin:10px 50px; padding:0; clear:both; } div.category h3.catname { background-color:#C7DFC3; border-radius:10px 10px 0 0; -moz-border-radius:10px 10px 0 0; -webkit-border-radius:10px 10px 0 0; margin:0; padding:10px; } div.application { margin:10px; padding:5px; float:left; width:200px; height:70px; overflow:hidden; } div.application:hover { background:#C7DFC3; } div.application img.applogo { width:32px; height:32px; float:left; } div.application h4.appname { text-align:left; padding:0 5px; margin:0 0 0 40px; } div.application p.appdesc { text-align:left; padding:0 5px; margin:0 0 0 40px; text-size:8pt; color:#000; font-style:italic; } /* -------------------------------------------------------------------------- */ /* Menu */ /* -------------------------------------------------------------------------- */ #menu, #authMenu { background-color: #C7DFC3; border: 1px solid #B5CFB6; border-bottom: 0px; border-radius: 10px 10px 0px 0px; -moz-border-radius: 10px 10px 0px 0px; -webkit-border-radius: 10px 10px 0px 0px; } #authMenu { border-bottom: 1px solid #B5CFB6; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; } #menu ul, #authMenu ul { list-style: none; margin: 0px; padding: 5px; } #menu ul li, #authMenu ul li { list-style: none; display: inline; } #menu ul li a img, #authMenu ul li a img { border: none; vertical-align: bottom; margin-left: 10px; } .ui-tabs-hide { display:none; } lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/password.tpl0000644000175000017500000000401112542740732026237 0ustar clementclement
" value="" /> " />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/images/0000775000175000017500000000000012542740732025127 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/images/bg.png0000644000175000017500000000033112542740732026220 0ustar clementclementPNG  IHDRX,isRGB pHYs  tIME*ؐ0tEXtCommentCreated with GIMPWFIDATH퓱 L D2dԨFU't$'z-dq!gXur6IENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/images/arrow.png0000644000175000017500000000056612542740732026774 0ustar clementclementPNG  IHDRabKGDC pHYs  IDAT8c`flRN" Q*3NJRpeR C??WJMhTlygFfVng!Ĭۯ/'1.3Hqj0dM5 J30?W{Ź4À 20pɁvl:lɫs 7 ~~p;ϬZr`7L, | <8uUo2$@@O@dcIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/images/logo_lemonldap-ng_400px.png0000644000175000017500000002470712542740732032175 0ustar clementclementPNG  IHDRLC4,sRGBbKGD pHYs B(xtIME65zZ IDATx}ogC)R,˖e[(`-(-(?` t_ /mm۸o[uQa"E 8 9(ZN0Erg/ ;pЀU ` F*w QUEi(2 Y`߾}hkkCAAuofggݍߌcii /BgVljjhLl6^$*o xG0133~022h4:; WF:.o>Q2kՇ^oׯc~~>{N[ `EQZٜ0 :::P[[ <( FeCHxǯE4F 6& ė_~ +Nl6cuuU)빭d*++"AQ&&&d,t\Iqp|T'" v;t:@zB4ʈxy:"*,`0l6# `FV\Y'0/AAi À(13o&PH@W4.}Q᷎ KtN"FFF& uuuq`fffZVTVV)BH$P(Q͇LPRRҸBPm1 ڔ " ! " !(2/ eeep8~?U(TTTfbd95jEMM JKKaX<#瘛S\3z^:I-p y@x2 h47ހl`ddd-hj7099C)tFxLNFfX;uyjW(QVV2czqq1jkkqVVV066!*%eBpU xͳ mrIn/?/D.CmhZl6l6c׮]XXX{|lFyyyyQWW2tj())@SSWj~>VEAрSav8ׄZxnA#̗ $Sfaa_| EIׇUUt:aveen à ÈY\\̚@KϞ=obʌUhy.\5޹fC[[O>E___dqqΝhZF%Z$^X[$PaQ"8Np`0(Anr\qKKh---hhhn`000%(,,DCCZZZPTTɄP(ϟٳgp\Yyl6աVF<ϋI\*TTT?z,BѠ lMX[[4FGG166HoV.Tc˸x">nwUՆlFmmD$a444W> R$n3"]Ç8x (Bqq1_+)x( J[ZZJ"R3Ö sNtuun'q[VTTT ~:S0 <(cdd8v$0R裪 ŕ+WD#EQ(++ӧp8$EEE(++Css3zzzpb4Jjhii#GP\\6 hoo nݺ˕vޛpaǏNXVƍݻeanGGYKK ߿R]]- eY,//cnn%%%"6LYK j1@WPP bihFaaaAd ,~ر6 mmmx"ӗ(:ASS(r~M9+sfD.\H8Np8o[r0 ػw/Xŋ,N'{、7niÇKsףΝC___ji13~߿Nm2pah4\|9+Nz+H >|vQUgP\\,[:īI~?3_J:CK$|r'`ǎ8yȐٳ)%K͆?PFO񻚝/ t:D* 9b#sV"a"N^XZoxa,--r8v477nCѠ1==jL&=zhϟ?,|>F#N'JJJhhى>np8&&& QXXzq\ىfTgg'/籸qCѠNEq8u"HJą/HwW9;; ۍX,ݎZQ*Moo/2J ϟceeETy l6Φ/1E 81~c߾}긌L`PQ0H@hNk?y^ryW2~߻w( {I aYYZ[[ܦ96Fۻw/>sw اRPP)EQp:aDD.W' bxxXL!ġ#LK4M*I%w_6DJn>ҍI,,,!D'ޣ$R-?GQc8Ea~.\Rn2x7Ee/G z/- }$9ùsp-aI>W\sjmmEWW~?ɓ'B><Ο?/qܾ};hVWWWӃ> +++qp4PVV={D5Μ9>?Kb#-WFQjI thllx_%Y411L[f=c}}}ubbBuΓl#>|( z"f} H2^*XEU4{nǃW*knnCCCdJ&T ZeY6I: JN,~799)i4466BժWWTTGJ *R'L6jbbwNժڐ+IF~x^F*,E#T&[͈K0ػw">|JU^9rǑ11ﵵ5\.ZZZz6MX!GFFT' {5D"j"lrv455t<{>łӧO'1( àPֽrRud@ Ge|N{%i cǎ֣kjj$Z/x=?axx8;#z*N;;e9JiAKKKu ۭzWR!zOK@I*xt:eW KWC&FrcmmMax<ڵkWZi5)((@}}gaY. ^j w?pm466Bd2СC Kn2 jm6x_ik4͌@OpO}Jmy/1>gD0ɋ h4JK֓ur]`PF% Z$3_w C b#,3(#3lYDH# FE^D"$@rgČ~?nݺ3 oI%Y1GVKK JJJDIM-̒cRm=xq.TAVOy{1'QYK .Bɕ"Ԡ8;vbnV% 5\}:!#mz\A߇R$rXՊ.̷?E:x<NYPhooGAA, SIKpI,"beeͪftgB8˗Q[[ ajq1D,(0J`P6B^x1RqK;#V*6s¢(J"}rFlU,R y!DnXIŔ}Ϩ$fznYPDIb (((EQؾ}{t6z׿UbK%Ԯ˅1477RHUUƒ:p8[n~gX HF6cټV@9*%Aȵ +HחQFD:dGQaOOQ!1ՋTmTa%JrYgB4|-..T:MMMO~qNv333MpOjE$A}6N'f1:: @Ҝ v#.'j dնXDy.e\G EeYܽ{WU)L02 fKUNѨG$Q(uݒIfEJV*5'g6ExivԔMs<|'N{… x<EAj1Ͱise 1p*TF$GiQj5]_hT`0\v]B@'V*SHLǐڿveeELԈYs۷`0l+p5FSZJ}gXںi\9²lJ#z%.*,(ҡ-v`A4jjj0LFs\(,,jUL*xrrRF$TF8lۭE{{䳧O&Tiw\4۷%)mHhmmDÓ'Op׃(ٳwUN8ǏQ]] 0 vލnU52x/eUXh4ɠTr/s#9x^1]ss3 UTFVG& ļ1,B6Nm۶k4+Ff1rj{IUܽ{W6yϞ="($4/Lf3mۆ^l,Wk?Hn7޽:ƎM~8OAٳgfFGbAh49iZbcy>m6ڵk8y9"V U].>|Ǐ~w1??ߛFK UX<x^X8ܹ'Oǎ*n<4ͲjʖCT;?p\b.R;v .\P\ZNBQQ Ir%lDQ; *a܌q\t)ɵVU٨eDRQQT3lB[[?.>Ӵ'g?YN|}z9]j/bրr|/^,+~ϭgE>OZUUUƕBXWp}hZXV?'|'O(4inG}}=N: ]6n&h6JϣYL{!XV>}w?[YY% <{&s8OF=,I ;IDAT'Nl`0$02Z-, с:I󘘘TXOjeeϞ=ywΝ;_O *TbP6r%jbFE@MՇVEkk$?ݘc7oDgg 21 E'|>Hd***ݸr N2Il:#dA1KWa局) `l6?̸a˲tZ[[EcbG}A455%1t0I׿bBJTTTayy9k5&QBNu8ڈfdx$FG{H( qqttt`nnzbmwNRCbFz)2J_D"Q yXa_xgSKbۣp y<G}});::k.e]XlrA{@GrH(  O>lFWW4 t:>CI&&<{,.\Qu|@z}')V$s7;;˗/ڵk)mK8f*pdy PWW'~aQ"p6*ߍ> ǎKJcv>".\ۍ~鷤%%%g<|gΜhZ{NBK_9\j}wDű? 8zhȓ#lff===#ƱcׄݻX\\ɓ'qС$D3rիh Ϛ,`0- KIןƯ~+ܾ}Bss3l6F#8C FFFpE"|[Sʕ+,՜-..իIU2d~gffpE a|>,--avvǶl(z^nx/ݾ}Cd{(½{822݌]>_}ĈnLCCC|2(B$js! JV@ v0>Skhkk@QQz==n7#:}D O4V}inF=5J.!CӉ̅(nϧ:=ap8`2<0^/<+hF@2PXX $VCbF"#ܐъbq%BTVwIxʗ cs buuuCWh4m5;|icXUYuVa%f<3u/үl:0Q3t "Bs|f- l6Sd &(ul&!Y/(1OYPTل7w1 `S HTH A) ȖoyF?AZъEI ~9 zn ^9  c rhƒ"fy/[c*! H˲BQ(/OLg8hRh<,"o%# ue<Fv v  j|Czfql~i? &&&DpZCF#!"x`jjJ}|BrH$R$% yI}2+cXA@ш5 `Y`333V'U*Q @Vhl` J<σeYD"A|> l⽩(`p@EQZp| ɋfszQC vh5HVZ`Tw 멭u^y(4b~asBIT|d pHYsodtEXtSoftwareAdobe FireworksONtEXtCreation Time04/27/08^ IDATxy$e}~̜93,3þ(" KQQ5& &WL-wMb1՘o "QĈ (0 ìv饶OG~|ͼ兵,w =nvKYXC }"P ' Fna;˜pcq Xq|~3ϚUUƳ|?\`3`ttJ?˦?Kȏc|XΓ}.:|< NA"P(H$(Di{@i >~1Wǡs'a $tp沋lf[p✟}GnC.fn>+Ҍyar|% s.]zO.;;O晛h48kىe?~"M2Q4L֪׮^Q1{yD"BH"]J V@''\&1gv=I5V] ۩V!,]tF́{=i͚5wka~ݷQruWM2j$"RB5œ }bg@A%=>b `@{Q40@H d@ 8"HHCLMY2c{MLLP,;s1kQ1ZTtﺮ{\O͵zHI-0Zi)a9iaUae`)x_z8"NJz O ;O O% W]g[ j>J‹j((#]ۋtm0 R⺮94 5Z*g:;;?hEu~rlN\7N%Ƌ& }gBZʜ *VrZlYq6\׬['x}޻*ǭ?h703a X H(GHB,˯L?U~* @AK=gyy>hKY/r[xwj8hOִ{ұֲw[2^Njjr%.N^y b>@waםu'vo~l2=q "6 I&s, D6J!3q'i#ñ۝[Nނ}}siӲ, d2`ѫ-[|8ϟdL>0Zku6>+n4f_ LV'Eu:KyIaғXؼw3!,{3|DjwxBy\;GN]GJ7<3?0"Z*|}QN_v:ZX̗UtɄdc[t;@ ʁLh\5ec;mSFuqyx(:PJY@. '  ȕPLVJRMXԢ ۲C} Wm{۶g|b$FFF.WC]ܶm820N%u[&D+x~jFTgWp\iSg,d{ԣI\uYy\+O*R<1~4t{[q{j+vV$03{O)P9_iT4rNφ׶Mh| 8݇Y X,~";F0}q:SqZ402ɽ8 3ϓT2*@PPtzxņAc}sƂS!ox9\$+#/NB'8dݚRm#eb菧m@"g[]fy_J<#~MO5g)C*qi+_A, Gytn| gc'{?aSoU8rV%d|-}\  UOYcY G l[x mKC|fNùҌ[R/Rl>1\+-2ޑZ{1<ߣ(:83OWj4Jvi-C R;͈t4FӹK87_$L7}ov wcy9 ~,d30W^yk]׽G<8Vj8^Ԉ=Zg)"?1ٸB!,AݫXR7yvuI_^pJ<_yM-:E.D-nƦiMT6*:8m"@'Vtl4#J:`HkdLt~Ч8{˔{ydQt#Ɉ,M6@`3[Y4bPK?{30=>:U5 Ѵ;%]lG`y!φS6 *@ I$H'=} `[V*dsjIq ex}$!AR$N+ f ggQ#B80s:6̅iymI57}_šNIY7R*_3t 5SL!(RiOV\Y9"> b!@yG%c$4M bZZB!0lqB9y5 O?]ro3w)]`M8#!Z6=u]~T#ReĿaNڻ:4T (d EJeNS=LJHh%Y @,a qUІ`}?Rp3\3Q[Zrq֛}!ϣR jLYWkR$b-G4K? B#\k: wHj Y?ўDˎHmARs,P @X| D*kuD>Q?:4bV?lrvS.\%JG?fFg@byAʈHFr͙D?dH!՟=5Ќm Fftt<0e\h vkkOމg&̐M֣gS 4OI 49˝ UHK-hZ #w 9Tƈm-KTv+c S` xRp!_+V8N2mˏE5N] f6wmD @"V*"h* qZ6qu3^F6k@ʞۮWχ$mztL)|>}#?a*g "LK!MfDT`!qr=`I"8TK]6 2b^āS\(}z3|d(µ O+ c066?/Gf`ɀpߘT'$.";]dUw(:jR#g2t3DJ5ՖQVH͓)n|ur8c[ؖ]8Q& M()KRlz~/jp_9}ȗ eLeOC*d؞ g(ؐw+|)PHymYqx.O)AGH%V[RJyw)ԐUY]&eA~maUiQwL# \mp;@:$&SyYh-$  J']nGx(" Ŭܴkz/D&,4zDǫvDX"3ax_*(;tQC}&*Q?ZH%xTboXeyjSzYS^ λIDAT4 0oryZhD3PZ0_e2ۆVw"긖,] ply/=@/R)/\.KTPz۪b$] ;&~7bHIeJD^`y@({t ۭ91]K n#Lf&ۏhf$.{ HB {mCN)ZWe5$AЇ 鶙/G&l)3nJy<^ "S813I 5|~z9adsZ4ǡ3ԣ r"qaH1_0jЀPމ1dDDtl.^֣6tx_@T4)I̼y>v y0˰h{Hd vHOY[8k%- (YFȯ#Z*6q}2?@I[KR+,V((ŜfH=.B -=[-2\= ~聅|)U,=U,/`)!UgQ7qbLm҄0 Il]$΅JV71lIÀvgiiłېxO2,=!"?U dlTߢz>=/%8|5k(qeɹ<>dI(c̑l,zH9;BҊ,: )8eN[uJ>OFORo`)֫j$H4T">b&I$%RFXtSf_q4 Euٔ6EZUA,e+mQO=, |1I_}FɊwm3 SJ B4Vs7ٴ31$򥦈T4P"Enj;}m0FHCT &c 6;/>;T D2*{^g̅|Q\藛FYݻkVćhXn ǮZy>Alx(d1AjU/'Y^^뎻r]HxQ=.tŮšC)@yD#<.>׼Rf%A?`Gp2obn$R"8c=[(f(up3V㽽gO㶝IOފfE,xeKXz- !!\f}!,, NǶ51]'H7<UA$!Oa&hҷ(Saa!+Tbee Mk a hGgū2ȏ=ܙ7o~*SSؽ{7mtsvj=?8HvML laaVHc3}X, *]`"@ܢ9GgV:S{f? m܇omw_Ȁd V.BafL殝+ HV5;s+^jQle/nնoP*!#89,l]y.'׍D\Qa(J㖥5i`fTjG~zhU۲뀘*\n836R*w o߾M'~1O-ikLmݶcrrW!ʎM(3l4NRe( cM;ռO/Qry)MWO>k )s:;z>ZJ|̯Z- 0 ݼf|_n9kt~ɀ)nh$&FQҸjaޕߑ =?ɐgzqvh1jTh_[<4rYWy0 aEww]G g 3Dp{: c}RTZ}󟰡cHjפTjHjAg@!3jCzNEjdkrLoax&I-0Uz5oXVN@8(%D*^3#&Ʒfy;.䒻AT-wp__a-Rfcfi&V$g+;*eSdJR9"]94jSDYJc$m,l U'C|pߚJ):a&6@; {춾]oetRVп˿z>TP|a "c[t/}]gMO N:cbJ31$6@[=la ,G8Q xi><=j5F:Umٶ#vajuGooյZh/ خRӯtW<}.^@{}sv-IS'Ɍ4cfPHgdefNg^_ɔ0t*A AmSԒH K[:h"hjc?4]S&yzl&.Rmkt0Qfۊ_f s"@͸pW/z{{-"IBX M fqi4@-g$uZ7gV!l];~6Όz1YSg F8Ñ#GXf2 5L7`C hٗ3.}g m߾}e˶bɚq(#j eBɐ U&-'m]&7S2GZk[?O_Yo[(9r<± F<ʹx\YEcccӭD:eYDQ|(vF^˰"{g]:~w7ĦM6>O*=oe%Axc@k 2b~lۉ*<)m%5Xkt=@,4Q/bSn9k!7O[$rG?%\EV}v?~5mi;WUӾK|}3m=0!]tׄv=oD3 P0GY?EdK*9' ]oVq&F1&x|/f:H)Sn{y =uꩧw||\1ZY[ + ӽ\+|Go-秎yItO VHePI Ȥ" WNb0]og Aݚܱ-]hw!D2±,Q1oc '>>sN)zqc-c>˒F>}j||A&KۆgDV=F 5t5ה?яxͧf-,ݵ |HIZ,qQfށ31-,ik-XJ5a"T_&g)erVAOTdx0˜7D%lS>˶޹ _зqm(ڐr2t ?h\0L0b⸼cEX#%MZeR,$j0ΨϨW'pxǖ?yLy}}}x7+gE.cttWտGXBKjf12oB%mtWٲemOw7w&U Gh-DW ,llr:Rhi:]qbot)&DH,q PTFbƟx~l;٨ROE 8~ th(k z J!L_>xUW]7g`mLE'GdwLCr2p!6L*+D0¸?̘l̛76픜[TJ100А] N'ASWrM7CAP&W)fvc_@&}su]$A>7TIކ-(:N-2|!@5D {-BԣI*0A 6<~yҚx9|0cccmwӽ}՝woo?2_ @C)5s HaDi*5\uVOΡ~B% C*R=386 `*i 84DHz8A=UL֖Vmqkغ5gLUL,w9=U,jְuGqAfe~VLb{| 73Z/#R_UJMYj6%K nƫwuYnvڙLbbbr 5zz.y|hXb?BW4#0kvL7-[u7K.On*txR0 СC9r$3avbrT*_җ>/] /BGgD7MvAPbujUk^_kmvұ.X^,25y3::ʑ#Gov=}:;vCԣeB3DX3\`c]h5`Aɸ o|/yk_;o͛^I)EE4 &''ȑ# A72U̴mlOu]"3=z޸wsf|rf3QAʤC*:s֭[=3Oݶmgqs G }}&''ell!FFFlt۶5^/ym(k_vmB +X?䓜p1%*M0fU@jb4 ,xDm$=}<|Q|mi{0\ۛtfv?n72~fqbetJjb2epi+urJefƾͼsY$$7+'+k{CշL{hdQ$:BBVTG*"s1xm|养y멛w;i}O|䝟5cV4pXa#T WUQO`Š03e&E/QsYXk !_Y{Ƚ|h pCLOϰvvOkAʼ%3XRo UsLGxA~ecHBǔ)y%2XL9Rt]p獿p 2YQVaZMfb y ȧ@JU;U \`&qڼvm)fh5n "AJAk݃?e!>pm O\1JB k@ a- O0?7 m,e ZD`X!)J<޷Ziÿ9=#G۬d䖛$O$uB <>; W:&&3)P&E5-6 MؿzO&%Y5!31f6Oh;NF(gkN;qG#,%¿e" HcGλ­l&N8fm5Xy$k2s]Igu*@|C.t 0:B !k"D~EКJžI$%6VZ[muױm j 6tKXrGLN@kJ~>11 cg+ VhX9(c;X#HLBfSrFct6*6'X@7Ru[N8A[ڪ•%b(VX` OyƓ!|Bs.Ȥ}A(R ԏ8_L&"Z+t\ΧϢ6xEI%`e E"N^?")i22PZa|FZ?坯D8nY<m鲖3UbD kp3.Z80FClX<ᬦ*;d}?I3s'z{fM LvR H] ʹ' zu|]x'1hr&%NP&CJ,s^ <'z(׭[7S9UYDS5htVU(+#}N/-NDE:&5 JHu1Iӭ&e2;:W?k}⹟n8O/Pq }o ,ƇY%ܲ@2s撚N! tY<-,lHd[b(vb\y#QQE61)$d&W3 pwzoESKBDŤ:!1 MtX\[ʭ~144t_^X{&/'p3vQvWCAmJS~eW\! ,_`͏STQ}#b!*$ B5Ai鞞m@'T6HR|}1~>`H#P*M~;ws);-**Atk2㈅˅eU9.QR qxt%Z"N%&''0q604j)\I8AH@wžFFT)&MS3Zk2R&x죏>񫯾ϱCp::`oMnj恹6&¡psfy %"V}=-j+Z928(5q<00ɲJtu}`; ͦBJnᆋ/._cO N8RrAIrL\u]\ץT*>QmȃoHI`Z;}:-  ]vKڊ4M iƘ Cj5>#5\@NÍK8$2]`W\ł jME*---j5* RYTBJ9511[[n$ŧ UB8JR8㭝tttjjJBR|ߟm_/06 m)4ҩݔp $.91I)) SpB6lY[V=ʲ%d:ӫ9ٽ|] 5V.矯?0( !Bl}駟r饗yRo~6=4͓M<4!ȒGi)*R(}َg.]:Y@kR|- ZkXu%,i7豖Rۻ57nl@\>#[#L.oһN|*(,-ถS9>J)|UToii'uGӓoiwmt3Ş' f3!3&)6Ԇ%Ҝ5}%_y) 5J\6/o(x4Nu6,AA%Fe墴!C"ul89_,l:)%ݟ.'X{iӄ{LU謶'J+JK4ZH4q$BIFhH2@{v**[oN>g8̏%=]]Nz.- ئX_$jbXL<8! )CДnTQ ڤ )[Rj@y0i <nSH⠬Ix@#!)f_*e=A!˪%kݼ돻e|UEC8`fAdk>6.i+an+mbRv*ը!R< Za klui'EWq'u |,sk_z:1-#s5 ,!p-,_ë$%2}@P`-Nmz`/)!T~uwh79VޭضJHsto'_Ǫ%k, yfyv;%?kH'R>EoiLV.ͤl %:ivofՒ2+G:Ö3 h !N uvxfo]z6,aHHDDDo.3Q¥%Nm;e6=UǬ6?.mCQZ鋧K1F  #^B%ѹӸ;:Bnݗw`A^%cQ*Bk 5V(-tDJ35;w<c\BiND@͗Y4C, `&לxEeoK P뺍򫤍z"!B& ǢjK˄[mH^ئ͏߂FmX}C¨kxEg}_'%rC0.*B*E)-!ĸWU!pȵt\fnT.e՘Y옲RX~[d2EPٓ6g}@m)RjIs4cL˰ Ӱ0iX&mhb9>PGj%lzE.w.TT*iƭvoo㭭'zd3N\xTZҏ,}$I2_D0}_K7G.69}n%| " C|GJҽ馛Dhmm7?eJ6ˆ]ab`hCʀݕNp;W趵dlSôTLa22d:@UysFq7jY58C__9s\X@KE@ q]~ԔxfOodR| SXQ4{6n!T[79JxmÈ{*۶ . 6 m{`0P $E=RoB;sy4,uyQv e F2V[qPIUY"RdNzp*f/Aoo/===5L0 |Zv6l|M'k FĕdqXb~ܹskf:dSK;eC`fߺǰ<^ @,8N~ݺuW,[1KF';ǔJ%vIwww-@-˪8axMLǂ8<`Щ]5! &ϟP>묳袋Λ7oޙg&mٱVZۇ֚l6K*¶mS,z^{"q[=Z QE˗/… Ϝ?={6|4 ÐJ}}}E Jp88W_}SK,CtZ{j8JݙPG?X1mڴ'N4 \L&C&!Q__O6%NJjJ'AۻwsvH"E!0 >KKX\(hiibPPWWՑdtlY^֭[JGGG71MCj}@SRs&Ndʔ)K |>l8V47mذa˖-[z?a[^GTQIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/images/logo-warn.png0000644000175000017500000000673112542740732027547 0ustar clementclementPNG  IHDR00WsBIT|d pHYsodtEXtSoftwareAdobe FireworksONtEXtCreation Time04/27/08^ 5IDAThy?{{?|?lۇqԄhEڂi1HNG@EFBT Ȫd7% uGIGƿ|;v=3}no> *uG3;~g}fZk/ ԥ7l_d ˲.i.|R\.wi7Rf" ZkRֺ,<Auvm'\k R|1_*ݠH٨WkuEqgϞx q1h?*_d٧L!NQ9pq~THEjRV߰{ٲqxw\.?』D̙3 ::;LKw3gjrʕ-lmE&&p"$t)[rM3A]J],ze#RKN;tzg41׈޺kCCsP8о[ii!x1X;w8ݻɭ[7C"KFm*-?Lƍt|D##itqA :fH(En6^L WG>@R)umۯ~bYS&.u~4\XA)"tBG@%^PhH^M0:J7ašC.EkMtO@qhfN>~{MMᅬ %DѬ: g|y(G>q2qO$_!R"0 c02ċ/h6gwiܲ8yqyGxc>R"Q+_3ci^;n?~=܂x1P*R % IUPY#= e!0  wpa|2|!wcc; @9N7{::SqMm6 qz)@[8:08|%"qgrOL.V ^S ^hLT`b@ P h폎:Pqޚдf FSEp5NHr]noBQDKrzS=5A Q!0ѹsDěj5$FK 2 Ѯ;B&m?'`d=80>YU4k@e/GlCV*5 D…d+_-B[OFҮ>]kPظo>(NMnkiqU*bUF^F V^FUa|$7_=F2x-F^aY8{Nr>g6nyO;gQ've-o]Q,f7Rp@Uz:a˗GeΙ_.t|Dǵj:qDy5R*\`!1Fga@t> RO!DFa4u5+W(Hohhn&od /ԪA@?~g}VtIa!088ARؼ{g6nf>22r9 eZo+E$owq)%AJ)*޺ځV !9V^} K~c6lKjø`|Gf1{{lUd399R 5J)0$vJI{bxR\w/Nq&ڲPB4%aB&XԲeNN"?ҟagt%"RH)gT;{˖-9!B=܆ fEJ]]̕"RmÀT D F>(JJZoEΜbQL$Ja&a`6SSSo]vKTh|#1IO  }s۶mO7lFM> /Hpf.cjZJΞE>Z︃-[~sff||˚Ŧ&N3==>?kW_$b`\S__A4>{]b1'2M|P^ 7м~=f[SSS8LT*5m޳ge8 @|_JCMvu]Bqċs C>!]Gd[B睝\(.okky+ˑfijj"ɄmSԙ(rǎoy7I|&.Wcb%R^GBauKKK{BiǤvuqUA>L݋.[0XbGIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/customhead.tpl0000644000175000017500000000006712542740732026540 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/standardform.tpl0000644000175000017500000000437012542740732027071 0ustar clementclement


" tabindex="1" />






//images/arrow.png" />?skin=&=">

//images/arrow.png" />?skin=&=">

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/openidform.tpl0000644000175000017500000000163612542740732026551 0ustar clementclement


()


lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/README0000644000175000017500000000047112542740732024542 0ustar clementclement Impact Theme for LemonLDAP::NG. A special thanks to: - Anne Perny to have found the name of this theme; - Bruno Maia for its IconTexto WebDev icon pack (http://www.icontexto.com), available under Creative Commons; - Alexandre Moore for some icons available on iconlet (http://www.iconlet.com), under GPL. lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/header.tpl0000644000175000017500000000255112542740732025634 0ustar clementclement <lang en="Authentication portal" fr="Portail d'authentification"/> //css/styles.css" /> /common/favicon.ico" rel="icon" type="image/x-icon" /> /common/favicon.ico" rel="shortcut icon" /> " /> " />
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/menu.tpl0000644000175000017500000001557312542740732025360 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/impact/redirect.tpl0000777000175000017500000000000012542740732032224 2../common/redirect.tplustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/0000775000175000017500000000000012542740731023674 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/customheader.tpl0000644000175000017500000000004012542740731027070 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/openid.tpl0000644000175000017500000000147112542740731025674 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/yubikeyform.tpl0000644000175000017500000000161312542740731026761 0ustar clementclement

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/footer.tpl0000644000175000017500000000016312542740731025711 0ustar clementclement
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/mail.tpl0000644000175000017500000001345212542740731025342 0ustar clementclement
">
" /> " value="" /> " />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/notification.tpl0000644000175000017500000000210612542740731027100 0ustar clementclement
">
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/customfooter.tpl0000644000175000017500000000047712542740731027154 0ustar clementclement

LemonLDAP::NG, .

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/error.tpl0000644000175000017500000000277512542740731025557 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/info.tpl0000644000175000017500000000244112542740731025347 0ustar clementclement
" method="" class="login"> " value="" />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/login.tpl0000644000175000017500000001476712542740731025542 0ustar clementclement
">
">
" method="post" class="login "> " /> " value="" />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/register.tpl0000644000175000017500000001113512542740731026240 0ustar clementclement
">
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/confirm.tpl0000644000175000017500000000513612542740731026055 0ustar clementclement
" class="login"> " /> " value="" /> " />

\s*$/g, // We have to close these tags to support XHTML (#13200) wrapMap = { option: [ 1, "" ], legend: [ 1, "
", "
" ], area: [ 1, "", "" ], param: [ 1, "", "" ], thead: [ 1, "

checked/>
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/css/0000775000175000017500000000000012542740731024464 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/css/styles.css0000644000175000017500000001233112542740731026517 0ustar clementclement/* CSS for skin PASTEL */ /* Shipped with LemonLDAP::NG */ /* Use buttons CSS */ @import url("../../common/css/buttons.css"); /* Use input icons CSS */ @import url("../../common/css/inputicons.css"); body { font-family:Arial, Helvetica, Verdana; font-size:11pt; color:#000; background:#eee url(../images/hatch.gif); margin:0; padding:0; } h1, h2, h3, h4 { margin:0; padding:0 0 5px 0; } h3 { margin:20px; } a img,:link img,:visited img { border:none; } a, a:link, a:visited { text-decoration:none; color:#336699; } #page { margin:20px 40px; padding:0; background:#fff; border:1px solid #C6D880; text-align:center; box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -moz-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } #footer { clear:both; padding:5px; margin:0; text-align:center; font-size:10pt; } #footer p { margin:10px; padding:5px; background-color:#f5f5f5; border:1px solid #dedede; font-size:8pt; border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } div.loginlogo { background:url(../images/lock.png) no-repeat center; width:200px; height:250px; float:left; } div.menulogo { display:none; } div.user { float:right; text-align:right; color:#529214; font-size:10pt; font-weight:bold; margin:13px 15px 0 0; } div.message { margin:20px 50px; padding:0; display:none; text-align:left; box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -moz-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } ul { list-style:none; margin:0; padding:5px; } li { list-style:none; } div.message li { font-size:11pt; font-weight:bold; list-style-type:none; background-repeat:no-repeat; background-position:0% 60%; padding:3px 0 3px 30px; } .message.negative li { background-image:url("../../common/warning.png"); } .message.positive li { background-image:url("../../common/ok.png"); } .message.warning li { background-image:url("../../common/warning_triangle.png"); } #authMenu ul { margin:0px 200px -20px 200px; box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -moz-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } form, div.form { display:block; overflow:visible; padding:0; margin:10px; text-align:center; background-color:#dff4ff; border:1px solid #c2e1ef; color:#336699; box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -moz-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } form.login, form.password, div.form { margin:40px 200px; } form table, div.form table { border:0; margin: 0 auto 10px; } form th { text-align: right; } form input { border:1px solid #c2e1ef; padding:5px; width: 200px; } form input[name=openid_identifier] { width: 300px; } form input[type=checkbox] { width: auto; } /* JQuery tabs */ .ui-tabs-hide { display:none; } .ui-tabs-nav { text-align:left; margin:10px 0; padding:12px 5px 10px 5px; background-color:#C6D880; } .ui-tabs-nav li{ display:inline; margin-left:10px; padding:9px 10px 6px 10px; font-size:10pt; border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; } .ui-tabs-nav li a{ color:#529214; font-weight:bold; } li.ui-tabs-active{ background-color:#E6EFC2; } /* Application list */ #appslist{ padding: 10px; } .clearfix { clear:both; } div.category { border:1px solid #c2e1ef; box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -moz-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); -webkit-box-shadow:0 3px 6px rgba(0, 0, 0, 0.25); border-radius:10px 10px 10px 10px; -moz-border-radius:10px 10px 10px 10px; -webkit-border-radius:10px 10px 10px 10px; margin:10px 50px; padding:0; clear:both; } div.category h3.catname { background-color:#dff4ff; color:#336699; border-radius:10px 10px 0 0; -moz-border-radius:10px 10px 0 0; -webkit-border-radius:10px 10px 0 0; margin:0; padding:10px; } div.application { margin:10px; padding:5px; float:left; width:30%; height:50px; overflow:hidden; } div.application:hover { background:#eee; } div.application img.applogo { width:32px; height:32px; float:left; } div.application h4.appname { text-align:left; padding:0 5px; margin:0 0 0 40px; } div.application p.appdesc { text-align:left; padding:0 5px; margin:0 0 0 40px; text-size:8pt; color:#aaa; font-style:italic; } /* Logout */ #logout .buttons a, #logout .buttons button, #error .buttons a, #error .buttons button{ display:block; display:inline !important; float:none; margin:0 10px 0 0; width:150px; } #logout { margin-bottom:20px; } /* Info */ table.info, .info td, .info tr, .info th{ text-align:center; border-collapse:collapse; border:1px solid #C2E1EF; padding:5px 10px; } .info th{ background-color:#C2E1EF; } p.removeOther{ font-weight:bold; } div.link, div.login_info { text-align:center; font-weight:bold; margin:40px 200px; } lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/password.tpl0000644000175000017500000000403112542740731026253 0ustar clementclement
" value="" /> " />

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/images/0000775000175000017500000000000012542740731025141 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/images/hatch.gif0000644000175000017500000000006612542740731026717 0ustar clementclementGIF89a!, DnɾPTN;lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/images/lock.png0000644000175000017500000003422312542740731026601 0ustar clementclementPNG  IHDRrGsRGBbKGD pHYs B(xtIME (^A IDATx}[ywN_河;{b(%2ilI)rE*YrTr%/IU⤜\ǩ; mK8X6-EQHDq@ bwgw>'ۧ^>w_nm7FJRiX$"6.1ƚ` yr,o`x> Ng&''Zubj - 9,,,\g2RlmnnHJQ.->OK)OG) }X,ޙdC Z,2 ,BbO,8BF5jy׿ f`C."~t||Ǐ/y8s &''.,B^kudYr9pyr?~eA h4PTƆY.^t !X.7o`mÜ~̙y<,b*.`~~PBݤ<nvjKKKrqqzҥWx㍯4?-˭[LϿ[Jz׻~'G6eYd2rpezB bjjʞ:R,s>/~~üs}{O:{'~;y})ض )%677M4 t:~?y~nK3fFA" !"8\ fgg3޻uGY_]]=>U*~'Ǐ^j T]B}?nnZ Z z=c |sss( &&&v W9B6$fggQ(9BJ"_xqܹjojW^z-s}?{G>#gggUthAwrkkU[ZZW*Z ``\>/ `rrRLOO)ev}P(رcm>{ܹw{.egϲn{_>裟y'Ʀ#Z-X\\DRݵZ ׮]VVVſ{׾)"W x[˲_|jiuRZeeYfv4J)#~nP(DZsuD~n/--rSNM:u?C8S,#fZŋj r5bmmt:_<ﲔ)?^m7 '?==És/^/--}h6=8qB<{#*ĉh6Gwϟ0pK//==ZBuڂQ(TVnto\ty5RڇMoiiꫯƪ333g]=H) B3er:6|GAXD&" ۶h4z777[ ۣ>jt}zs^x".]yv^ϟ:^paիFlnn?sssNg.t^|fy?я*JSkL&pԩp3̶m}ڵkxvAZv؃NSN*T*h4QȧnۓR|tѳ333,ˡGu\va3քV [[[X]]Eل"xvB S7+9rϟ8q"2inPVElll^fӤ6sZ0 .rXTb7Ξ=pffte<:^u47;+8;]r\>BL&c } BA"H)QVqU,--n~A|kI)VlFeg1u1>>9fvq)0G BirrrW5\ !~/k1*c kkkP*?R"ȑ#( pT\n4(Jܶc\Nc!t],//cqq^OJ) !X8|:yfj mF.CXTp @f2|T>?Z, l6uH)}(0T*e-vOeP@Qeq&Rؾs.ceYn&L {-2(H)_l=.vOE6<92LTr8u 3;;r\Ĕ lmm! iXeX)w8c);u)5 )epq qLOOG7gkk vկjUa Etl~@@TL;sX,@6jXm,`lllD\m yhd2ZJ-v:j5t:$NR C|6l 4 S.{7Bʧiyu-#[i0R$u(ԥ} B&AhmJH)63g65hR@i9 tO63yz?(`rg0`¶m8TPBa~ U)NLh;ӮBp @Aڹ!.AȾ3mJ8Y m; XUzP<7,˲t+'̑R6K4`GQ@ ao*;&_DW'M1Ƽ! ͮ BHq0>>NB0R&K"\7Vv1b6&''U_T*C@( $,Xi6*Rr`jjJhT pV5uaY7J8ǁ*pfQ-U Ծ }(jضwֹpV:Tl8p:<)pqrh4:v;ҥc+ecz'>v4T뺙AT:)l 1dșJCلѬB0u]uLůjZ-[iSXXX8GP0TlZEVyTc i'\.o6z.^9<Jl^FU ^ZSSAHv5V=$Ou?+}r :ήLȜ( f8zAfFI)ǂ (?}j;0lllj>:Nt2p]wayyn#Rb\aEO?mdP\O~t:H調O TNb{u̶mX;.82Dݵkv,rȏQ;[mA+W^@ٌH:VM#PM7aTUiyJүeeXpCV__|Ķ?mn)%CMV޻j[t: i ~eeY!Yacla5ѭVPeYRF_mhYRJ|{ߋƻf2h x׋:WxERD!o9Ǿ/σҵk׺juB PR+P(~tb"?M?u]2>r\Ԥ紤>_88 ۍ__ul۶ǑdPբi|666>G>8\PR8&@ yclm\p!j2 D՘yKXDSD@Cz'F /&}?#Q}hp111RǏ:L&Sm1R::bzV&v)8<ΪbkjXse:ӨEQ84F +:*VN "GQdM`:ɪ$^Gyj}):xUVRUF&^z~G@zLzws:#BT]f2蒬j"\:Nt9*LꙫB-9*S+_n[$YKh4"?9fض^z lXQqB8' (Now]4M4TΛ] .E]A&Ppt`Y%c,`YE]rh6{l;8WT:6+s4IsWAU eJ=55~>&#\ yqzBu]m]^ܜ ׵b(@:Boг~DN]J]d +|-6G*rzt%$ϫ #UlAz`Ԋףu)C |٤B(2hrm/۶-JVTzDochR4NpEx_ YLQn_mL~iz[# XZc/| |dL@x*G&F(:o:tjUЋRԮTCAWD&EVur2블r;FA\B:Jf9Q3F3ja/.OjU?W}޼ntX}VJ2}1P3MApt`Y&9s4uթd8:p=)`s!Uz; {04Z )ܨz4 M*|%xj"GKi^%PWPR&H}*m8W]Sm;f{D0(eY=xB_dSvpJmZ I9SXGS 4A *"BA17R,iYք"1nj)OWRz2Ft6!PДRT{Q s 1!z:1i h͝RQ^Om^A=o ShtWQA&H-4E cRʙvƩxGUԊW6r}*lB?zR4%loLCs}/亮t]W(ߔ-9mPQ*U CE3D*V6JXʏ@`Y@S4Gc,s\qt/UתcDUFPpKoPBWI˹u ۔Vg)㦿kvN1t]06[SiJFsi2z,MM鸉N3I4/]&RJwv0M#p0&\'0 4dcs*tjߩ>T˶ߥN))aݔ27u&SwrM 'i#c䥔LP+k*POW (CBDrтSI/8h=rЙ@۠QAz.D Fe-biTL3R6nի(@tASBVʺu_&<ר J)GLf1-b SճjTPz҆J =QSGuLϦMaQ`gF.5N鼿gb3M&u:O>E5 &Q F (yL?TN8Ks]{䱫n}cr)0>ҩppfAGcNWը(k,5JXtKkUF͗N ̡)l,wt˲j34R+U{UΟFDPߏ)#IGDI[eqZSO=5,g+vgW?N= $}IDAT1L t+ DiQ\o@%K)',"NKO M Α^__ /.TӣSRO _gߢݣ&Я+a!}>&c,Y6Z}N)brMT+n.TJ%⸊ϴOtX^idrb9猛ml۶hKO!Vf]usAD>rBd ic#3wB;-MDΔZ~z(kzrM=ɴ"_r5 HĴ#^wmۖxB2Oki>_5RA}7]TWͦ2/u_c2V%A o O=Ԍ.;; U?׹dB'r E33|L̤MԳ+Zm^wP8'NR~ Ma!zXu MWf\wmR|GZokMgZ7)=}J%c=Tӓfb*6xᙾǙ=ѣ"A:&C .w3:+D)C"i4 L(ܾA&)Lz}?fYeYt*=[ݺI']ItJUOƱzɔ$ 6Чоo*-LH)Cl۶L.ʺL &g1)|A\T`;k;HtaL AEJs{C ؝*Wߧ8c39m&'+TGFL/>q@#l9n `m[SW:*IBR8JИhg җdK)o`%^5QAQ:C&d&Ab4i$DaGp@qQteTqᠩhD+9$H]q)k51qN ,*7L;6iL)飓KIM*I.|u5?ȗR/ΖS2= Z`*3n:P4`L=q/<0ƘEVaLe by}qw W:9nyq8UqӶMBgE<8uoL>IDzISMdinKh*)PSG9;N8vA+zY٠^tsA `P $0kIުlNIiaCS@|PL9r}JJbPһ(oCkU. }g29v۶8<i~_fyVmێ s|߷]u mv(p+_5Kg]qS"94@E M },ԥq+Spk})e [X/|m,n"m[t]WA ~_/N>-}Yh]|q9W3zTͱ s 7%4cJ\Rr˲cϫߌʎBn'>'nm[ۭvknms#E~cHx=^4PzCCp kc@W$ & N}axM?8XLscuoi[1){/#  a֩euJ1'>S¾N5 kB䚐yp{@aK DcR҂^^!Uo B{<I\.$v=SyHLtodsB@]:p};]{{}&(~;#NNPkq>DqK {q$Y9_-Kta#᜼c@jhW5c$V 5{>{|A >vzzc~]Lƞ@G]qa㍋P3xM7A $Ĭ 8+ 6<[}᭓"pzBH_ A(&ᨕKp-azu :FhBV7O{M [zLߕ)Ӟ`B&?OJ])B0LR~qHEBԠk,h@!)h BbB$kHXEմHCh9v="ZxSP-! 㺧/y4< !) m&7t/ c44M~LGi 0,!T^ذUbHUEST`IN8m 0\W鳆HpX E i8vLvfj/7dL ?(q"W& 4(>vgEB22 i4 )G\(5:WōvKxe /<=K Ay8⸀$c~ b%D1'kFK'{yH 48$ @)186×d >HJaqLeRI4R?2&DDHJ 7Gĩ8>)WsU HKآ'Py1`\,NbH#Ӱq>Jp=QUƘҵ, i$=Q#b4K>G|,462|Ba!|$!Ay?bh!bU*b7]z18 aPo]&62>X [ZA_v"o/-+")Mt0S0|l492el.4{&qw؋yٗP WflP5` F 6TW-bM&~9[bAdʠh Q>ꇤR"C eӴ.eĨd~Ԍ-SbB$'>j<1*|uDA ~ON-!cXC628"E)o>vgqTkЕjg ΚH\9Oa14 o q= kimu\$Ҕ:ș4 H.0$Vv2ɇ1u F$?$A>}IH0}b5:"8 A,0|t  / aZ4kRAM| :q0(rRYV6qD7.40ЪI'N9e L@01|Ru/N bFN\O{RD1$ą`"!\Y'0N}0f !L`z0I 쑫 ebj 8Ak/$HA - F I߸ikbpYai>q\(}I 0^IDQ!q#I2&LL$?h||h1@`p|\Y0 <$@3:t# ;hSo\x Ұx4dOɐ͑m`@X4>!iKSe.ҜhAվ2Ie?1 <@R)R8y{2i<%G&&i.c^A@@B*}$K€ ݠ^bFHGQ"85T'wBwuj4@+M"FsA3~˹si὘8-wçOPq& уI\:O[EW: I덞Iۋ:ߋ?' i#uwvځA3 Қ4?pi@C鷰s}S xS ?ƨi= [Fp8޺D ZǬ(髒uj\3v@/ȱs51/P! tz#_4n )2RxL2%)Ā`4>}9v'^<+8 n47hCaib^@l >ÍG(W0" ڥDWu 5@7~/l0 tzH7|aIB`J  _ 7@}U)w@.U?kOJp+"q]犾ᗂ6'E0hțfoK_)S(q8)i˯7 markups, like CSS, js, etc. --> lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/standardform.tpl0000644000175000017500000000503112542740731027076 0ustar clementclement

" tabindex="1" />
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/openidform.tpl0000644000175000017500000000173312542740731026561 0ustar clementclement

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/header.tpl0000644000175000017500000000254012542740731025644 0ustar clementclement <lang en="Authentication portal" fr="Portail d'authentification"/> //css/styles.css" /> /common/favicon.ico" rel="icon" type="image/x-icon" /> /common/favicon.ico" rel="shortcut icon" /> " /> " />
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/menu.tpl0000644000175000017500000001631112542740731025361 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/pastel/redirect.tpl0000777000175000017500000000000012542740731032236 2../common/redirect.tplustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/0000775000175000017500000000000012542740731023674 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/mail_confirm.tpl0000644000175000017500000000056212542740731027055 0ustar clementclement

$cn,

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/mail_footer.tpl0000644000175000017500000000041212542740731026710 0ustar clementclement
lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/Apache.png0000644000175000017500000001074012542740731025563 0ustar clementclementPNG  IHDRdsRGBbKGD pHYsgRtIME ';(d`IDAThyfWYs~mgzY`b!P@Y7pHk)% h nF2If23==wa T\yTݳ9su?6{ui:0vH]xU>u{/SGGLrO㜛`ǑioHw`0z`Ӆٓ_> Ń n5s׎#eSm`{|( ڛodo@AqQ(b|=0 BмݼnnbS߱ž='6" 8;"Jc!u#fjGM*=Wp%\G6ɓU.=:E:f"5X}|8H(m=oH2J)Ș!kP)q`^npI ϝCfۙle؂U9i'tڏr_;r`]†Ozyv=F.lC֯ 9]d48|Wpf:)W"a֮){Al4C¨- Aގ]$buSLݦNT;cFF-81v J~Jh,}J = $Ǹ60 (H#x_ˣ+Ǿv ه0"@l)vC{7Xׯg7Y 3la-)OŠOӮ!B#A6_ LAw2IR5h}aҤI-bf^ij@/XA/dBIԹ۬uSTؑJ LU%9r%GZJX H+A!ss [dcқ9w\|i0/1{8()"OzփNm`:"}T$Z(D5JPmU% 3BqÌALg)![*`nPwSb> |#v'>e.-5AI3M ܌>,G" lؤku=\8)8p+1:+sȽMm7wwP\PIC6с3MwPoguD`u3( , [1MtE{eA Fi [?b6Kņ]gKƟ `ݺtIܣS%X]K%,Ö1(f1Q´B4&Akz"fTAUʾ}@~8~{gYXefV$zp_7PI im[ ^@691Xh~ 3QR R $jCz᱑/dDI*t1YF,X9&Ieb=6z#e:iF,C|iU!K;Ƶ<2ᣤLRS.c5Hcsƣr>U5S{" ˑK۹%7sP/!K\?H761 j_&hF,r>B2:w#(Vf)hl6fD#TгȼKI6i9ʀu 舜n:eqAzUb"/+Qm9gs &5g(@)eZr^%v9bf3+7 ASe>BWtIzzgVQJ3xFbaΧ}`F+FD)*_ex+S1x%C| 3z<+:g$A,DN 2R(c'>0y~BBX2! .4m,8 :Aő:Lz9XƊl Iuص*q>mYcIKkb;Ѣo8T3[}- `c Ul#ضpk-ek~!GOYRml=On9E!戀l-$"y >&&9r)j'@QbB0BFW]V 4W0U !*G 2llY'TPX'I0݁]!Vm.LEDnvK\Wdӥjָ/W nvCCe[! }t/ʶYJɇw=9ό˄S4U-4HlRg8P@P>ʒً# :Q֊e"q] !6$ b96L1e!lF"AH"Շ 䙋oEj$D=3D5xr|!YgWzWn9Z!9jN{ѳ nPJmnRH!оM;SLy4/+HID\!Hw6Z.xv%]2''wM=./Lzn W + Οe㷙ʴ{:+~ξ|f{?;;  A>5>qM yQ 5,Juq[Rc(W:Kbc)q@^Jl 1.^؉i\&ʶIPbL`:QJUale **az?<ݰhbf vӰ?‡?825~nCLq5{^6;z~hm.Yy 仮m61 QXCNt+;.!;h$b0+@=DI .J=ѵ1q򪃔&{!n}k iǓL0 ^,'ʎR)2i\řǮh<9tD&؋_Av#u20uwt~Ǝ!U<|mk^q`:rR/61&9ig%sw^q)E~n֯s:/rhaǦ+o= =BígE`Tn͍Fe~v؈wL뱩UReh5 ZIteVoXY顑㫳 :t27_efrm#nOA*h1g;d'NZs[Bz W5@0td\N$%7_oY m֯|0cv4'w䛫- XprtW3{ K_{ R:bdE")2Io_IENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/saml2-metadata.tpl0000644000175000017500000002232712542740731027215 0ustar clementclement "> " protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> " index="" Binding="" Location="" /> " Location="" /> " Location="" ResponseLocation="" /> " Location="" ResponseLocation="" /> urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos urn:oasis:names:tc:SAML:2.0:nameid-format:entity urn:oasis:names:tc:SAML:2.0:nameid-format:transient " Location="" ResponseLocation="" /> " Location="" ResponseLocation="" /> " Location="" ResponseLocation="" /> " Location="" /> " WantAssertionsSigned="" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> " index="" Binding="" Location="" /> " Location="" /> " Location="" ResponseLocation="" /> " Location="" ResponseLocation="" /> urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos urn:oasis:names:tc:SAML:2.0:nameid-format:entity urn:oasis:names:tc:SAML:2.0:nameid-format:transient " index="" Binding="" Location="" /> " index="" Binding="" Location="" /> " Location=""/> urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos urn:oasis:names:tc:SAML:2.0:nameid-format:entity urn:oasis:names:tc:SAML:2.0:nameid-format:transient lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/calendar.png0000644000175000017500000000107412542740731026153 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥kTAw  &X!!`@ZD[+Q?A B=Pl DL#QE X{w°2|f^VmwQ3C jht+#9ߘ?0?<2SfD9  oBDjGKHR@ U+o[RbhCC: {\>߭s!~7SҳOt֖zn?Wx#ŠQ$@@C:kQ bh;Q ߒK u@4ܝ}T;8ͧLD kMtl$ '&89Y%c,Y%@x)ijU1i޾ṋ݅ճA-Qh4DqW^<4&.IENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/Twitter.png0000644000175000017500000002416512542740731026052 0ustar clementclementPNG  IHDR>a(7IDATx^\}eWu_cf^޼fL&iI 6JVihQ㤡jFƈ  RZK--JPIg>g|{Ϫ9wYl/m9{ﳿo}HJμOnoO 8$D̑8 8_kP~tҏz/E2tgqeLОU9A7Eq!,SY"AYXޑW?'?Tν?PPD 2̕o$mZ96 K2%eN\Q%50+cDܺgDDœj`Œ5@Yo%GYT `D:8T@{Dbuh&u$,i\v.~#Z*mP1 \ @[ (>^ &ND/ >UAIf>J*8XFR"9^x)S)L"2Z L(3PdI&A X -i9m]S) 7\ m)j֙M&e,_ nI~ţUz X"Z@J D zm`\CH M&0C/bIO1oT?I1R?;89zϨyLZn@ ̧kqe0@/lcNgu'du?ŸR0ֽh_ӆ MG?K"yTRԞOK-x?)bw?ͳmb`ICtT 9վ11"4 5/&pS73!nq\vՎ lJ}@bؖ 8?+H$RտQvZЃSTz.1Ȃ{m4ῗ^2j_DiRQ9]LmJsL_$0BBo04c@58Ѓt {80A$EMl/ZGɞ B0{a|m[^uсhC| arY $~mDǢj"z/Pe) 0C-Mai m[@|AN{1FH| tes[gAHRn&;k }n - n%{:~ Hn#`s$z"s~0~nZGuk:gyxak< 9 :d L^3i_$0V@PuhBBVPlR装:= 'XxC$p*mR. -gR ˧$7eL9r&Y.[a ehY0}p% ujv&:0 zo"Ooq@V3FMb vh.d1Arlr^X|XdMjGF[gG-J>%bHCnw^#>p§Ovq5N[W#1!*dZmq!#0A)a (5J c7@[mt !i;-xs^Hܹ ' p_g^ێWx8Ż+\c,~vK3e4R?zpVSFR77gUZ/$*($L30pnxx'a#.8ZA: {1<}!=\}b{ CjgHՎAʦeŇ퀥wۋ& h#vwL%x*񾭄4dk0:y_H?!¿_Ľrob  u}^T4?^;6}p\=5A} ~OkܾJg3a}&J1_g1-ߺx۝ex*4 á k Pr.(:}FB.{Mo񀍟J!d1LD5 ;t10901E@P. $ =xɡ˧'͛Nh?I=SFo _r,k̟u"xH013'cӷS=|xOф3+D`_L2 xkHz`ϥ9فo;mU-=A*P1y$.qu]|>scخpL PCЁkDw3LܿNL8:Lk/2BV)20G0zL N|*?jCTp(ͦ]#ZIxvO^t qWu^;YH!BI 2 28 "= ʮ|ĠtކW&͆t2fV*u9ŧNvG Hv2hl_=e5([FnOL_pq$HP&NV ~\crɩS-7_9A? ]3DЀZ C[NW*;A$)3!C&Xzjֳ!>bxP7a3ZW>U&`FDUs.#]UHJӴ.nFeZ QleZ`J& CE,;n".y~ ^ONv{V~\WS*pϊ Ҩw>rOp%gl_"5ЛPIpEn }*מ! T6HǶ 1ҞڧIPil)鵄G+<7@YEM@r76,0@1?Oz 8'^_zv 2H oR; MPC SU~c?-l&w׸2q+XJj.nF@Eo&;uvEʯ /րo!5޺s*[{=ug>tA[ S,DE  &P1ш&|*A@KK[ZJN[眽'|sM&{f^{N{}{mf6 %ptC˰D\JR&].84#@A糡bcHPT5k[zȞ4ϛʐ~Ze[*ǡF wz yn|"rxMU['K~-4 ^N[K #CA!\`o ~v{ƫwDB0m  H)|pٴlxV@FN t7Op0P(3*Dٙ sMawvڼxg+W;`:I!BnW y랜mj -SJҩK94_wmC&>%䬗,CU5;ptFWrlB7/=b;2!F0R8jl»~8}.fB1ә "Ce_rˁ%>z7GZ+2+B m> u`o$qyO(e{x\zmcsc7ϔ\4X;lgŸ~(ddSMV"NM&/ș *#@t7{rZBi* t~tL @CQĠ[=A`\hR,2*ZB3S%oU4b`9$eVZ>0|ȕ=8)ATZT+lаh+sGNT,&zpfIQRxF1h Y(snX+#&"'(o Wn]_ JpiF&P;UA!=ЧZU;S=70 Wr9 ~ebsر;E k ҍFZդlUpP D+9/SzZ>w2&8`;Ҏtri\33X[}h i嚼Gd5ʖw .FDw!Uƣzv|<l#5E@Gc h ťc]mkd$FGy3am `? JTƫWc(l؀<4S̊#t5֋gA PsB5aDMڼb} 4M>Ql-7"MrL16_WT9ڤu&&76*W>z XQ%Ueea!D i7߻ߞ\)ѹpN Ž:-)z xQo,vM%kPv5'o׏4Ǖ)#懼5.NFaJFnh1&MSh0':CT GUetʅ˦[6_k7}{9^C#ђ_k.Lǘw FC^틪lg x[Q9S9\ҍc/E` aU HnLe6S$4 Bm_;gnҽr7l6S1_pgB^2DUQ;,KaɫdB.pF n)AJTwEɌ?)"6f+P3b?_/\=$WTUA 6nD bw [c7 D.xlPF& "dRI!Dxp?7&x8hQsсWf.0nxBFb^'}%-t35 M//r,?w.dhg DRУ5jr]vTOթC@y¡! VƖ,^C8|~8o|9^{{3!|挥v_ M582Ab}X! M*{3jDE9ht;r_ % 2ٚ/pt`÷sW /yn^M[ikgV ND\FCfpw9;A&P^4U;?`~f! [w`-_ZK-_>{sHJh.ٓ8w;gԧ@T% *2\[jΠ .r N`#~Og ۝1TOF&4cC>s >Trg^5 *tNL>)2fm]RVg!!BDd2KCng{?3o25R>2J}>}\y`͙n[Y{ŧcU&vbmbZemL "Xч|SW"BD6*(P2 33MY* 5ջrwY&Dqs^<P>>sqa'xM/gr1TmF!jO]aHz7\#5 R ap9TET•3MܷZ?Ol;:|r3&{ B#XT|0 dcCZ,тs'~V+gn c'cTR8^YhԛM<Γ7XrU 1*JDШtz}%mqZ Cf(1`C9g2pTl; BCHIP2(ai94_pp%"X s v7mh+X7IŤBZ]LTj㫓>Y?TPzKj0U ::!*HP\mPv,6 CA~IHAтဉth#"K0,@YTh kX3ۂɌ9s9n2h"HTJUbH\P2'+4+-/Ɠb#.:&2Rs0*5"@+ɜ(- +QYʉR92z6F!e ,+z B;J@,7_BIw**oӢZ'6iHCF*͉/B1mt%LbcWׄ-A"":#mG ŨDP$J=NpW~i;Mi yG K>T4 %{ة*Q,*1F2n fts DET6/]H!(QW,$=sm4^&# jS|$"(!ZMضI!CZ. j|mHZG6w5q4qCwQu<_6%bhh\R8@ bٺ$&^*T|e-Qׂ5[\\Q5in߷1s{+>E60u942&9mczJ jv_mTꗃGVsu#mW=U̘䁓4$2jMJbE!SfՒ_PMu5l`E@Hl8Ұ( *&6@~[rCj<\ 3nζW3+UScZ az&4GPd%#>?`,m {KU 82=rxs}ȁn.T5*>uP&YMn#mc@UT(T3Gj#c v^U$REym !.44J́"t&bC0NRjL2;N+|t"7xzQe~ڄ b}.yo{i(qt q1VM7;rǁJu1x=@ÖY$R .ɓSƇpZiOza6ߕjI3c)' 1USId*xs'c* 5 ಉ7t בۨ3^Aq+U/{ԃ__:/9ڏ$xNI'uXa͉:'0*fu1 pvN7cP3>G $+&A!5>\D "7.Kw*TxVT'޼IcvB/'_WL#[@-|$ߨI 0*&ozI $4IYHc9#^#`Ә 0edjChZu_o%`*c3~=w A!@%QtQIq qTq̂VՆSFϨZnxHVtCGu!)|1&v]M|GtP^2ußY~jã${AJυZ`fY54ɢAw2%$]LPY Yᅺd{}*ŠR}VTE%~-ʹF\9 fâլ(ϣh𺝁`L'ugVȎz-Q |w.b ʵynsIB>NB>O=SQIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/favicon.ico0000644000175000017500000000217612542740731026021 0ustar clementclement h(  #- F^`l0= ahqz3LnOQ)M6]6R"q  g(;vQt(Dn.]~m_;j ~*q]o"+;1GRmͦq:\4.x!uh=`/ e [6cQlUtc`Fy(2VQVy 5+'?\dZ{jc7R 9;IsqPrLp/FEW}m\}1X:_PmNhPklHh J4[5,[R3&' = 5[?lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/email.png0000644000175000017500000000120112542740731025461 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATNa@9T)Xk\{nݺ3q!;M.0ݳlRJ;әb<0'\! 8:ũ✒:%uJTt:?|oUe9I{ȱ[IENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/cancel.png0000644000175000017500000000111312542740731025621 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥kkAkH !)4^cƘ4eJKi(̇\ ĕή;OgV7U/ þϙ3`  Fe` ݇[:WnF{2 28dA2I>w&B;6Y$ ZŽ=DUemӁfZ/Rm Cz/ tB ̛NJ a;rd N,XX'>Kry88 x__Y7ͫʹZȋ ==tajD_RA#(Uxf84ݹ9n2$b'C{M9Hj9,=ݫ R,2Z˾u0(fԘycRݵt#]畸ݿIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/vcard_edit.png0000644000175000017500000000140712542740731026506 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥;LSa"Pb1A#!"bta2N:nD:&Z)XUE{S<99NWL R8R%.#J*`1oq.bBsGu܌ lW8krO( icdm 3!׺[SI$0p~ qm_!R̯ @{*wҴ} t֎Nb:)]2ZF]Mk8/y^M-)!jfj/4N $3TMϋ 2>ʃU.w^r_B's] >_> ==h&s`n,Kd5 DQrl}}L&CԾyWI^5<0ػBFغ?Odz>^0  -?J iPN*TLc8~I/g?x'r,HqdYfI> ^n q{`Z9X`TZnPsթ!QHbfM=l9`Q7ފbZ,3nPed2"L"NX,m0EA*B<G2kW iۓi|thUS(bF(0T*H$-$0|>_x&4./M}? q>\!BkjKeܼyX0rbbhkk kzzH3wbaa+X͜GG^SWF Ȓb)i!wviel6qDQÇ1119755[n>CTµkװP6z92]8krZ,qUb0Y7nΝ;4533oʲ[nD3`Tjoڕ?VWW䩩)Ӗ׎߿pM~|eӵKQ fE^-ߥR DaKQLOO[$˅v\.HrK8#i`EkDPhY +`IZ4r[5R" ʵj;A{`iVl. j3]ĉP3L-g/ ms=jjj6F+^$⩽Vp:m46*ڄڀr*W`iI*4#=F\}/Tg 趗$8fx"n߾M2W>tm, y V8Z=~MokI/I\դ!3(nKp:U@)SX۱_6bi`j`,P(UOksb axު4PVoޱܞwj %Iox64)qmǫm|%DMJ^ϐUc^=H]޲f,V=z<u½B?e`1 cH^TkkkC  wގcheYnCW#mv+[]a5+x#ob$ҀUHgo#I~))U?۽ ʌA;>K`%>xÑkezVs޼FHݲ>=,3ZEZ_y-d]Nd ?`krjF"٥TIZFN'0N!'v X%$UVs^ t+quX*cUZr>L&DZl8 u\wE/--! oȨw Ut1 0;샥m"<[

1gfVjmŲnx0< YE8FOOD*Ɠ. ǎ֊eX<|  3: LUez$i˵H&:DUU$ qC$(% ߏ"VVV 'k[}[e>0[q* ߭g]@E`QQ(XT,* EW@ +R:IENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/accept.png0000644000175000017500000000141512542740731025640 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥KSa;vvl dD!P{$; ż,Kݽ6cL2r^H)-jsNm֔2qQB̽BatoL#z {q' r=)La8,u%2Rg>ݾW ϛJ߸Pd makD|=G Vn6[Įd桚(Pm.0Q`'Fb#&ܧ6aP׏Q12[+zi; ]C17оpI9̾jD}›?7ayze,hXAK^3*bk @+wQ=!}uXzq:g쯺n= :d+_GTA;Ր Jƣ.!P)5!H:epր"݂"Kyw|{H2!i~3z_X;okBZK* ^R:O(jF*^ȰS诿_ gЬycIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/mail_header.tpl0000644000175000017500000000043212542740731026644 0ustar clementclement

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/door_out.png0000644000175000017500000000126012542740731026231 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<BIDAT8˕kAfI Dh AP+-?NAXYW4>( dgc,VYltrÙsӗ.ƙw6XY)zƲglEOd ʺM6g^ Y}}}Z4;yL"9;"JLﭘfk\_B:fՄ`pM@ R }ʖ鱵8bWUqI& o+0:4kp'⊘p&u6)|ѡjK\*AI*"]?];O[iES;؛o={LJTTKDK"u\#&눩Ň#eTf0uL 7'1cILxKK{ Z#L#!qwTSSd-!$6qIP'vj@ =  L yzz֣gEI[ş5>y-w8u0a3r\9j~Mw{ͽIENDB`lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/script.tpl0000644000175000017500000000374612542740731025731 0ustar clementclement lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/mail_register_confirm.tpl0000644000175000017500000000063212542740731030757 0ustar clementclement

$firstname $lastname,

lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/css/0000775000175000017500000000000012542740731024464 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/css/inputicons.css0000644000175000017500000000124612542740731027372 0ustar clementclement/* Input icons */ form input[name=user], form input[name=firstname], form input[name=lastname] { background:#FFFFFF url("../user_suit.png") 5px 5px no-repeat; padding-left:25px; } form input[type=password], form input[name=captcha_user_code] { background:#FFFFFF url("../key.png") 5px 5px no-repeat; padding-left: 25px; } form input[name=mail] { background:#FFFFFF url("../email.png") 5px 5px no-repeat; padding-left: 25px; } form input[name=openid_identifier] { background:#FFFFFF url("../openid-16x16.gif") 5px 5px no-repeat; padding-left: 25px; } form input[name=yubikeyOTP] { background:#FFFFFF url("../yubico-icon-small.gif") 5px 5px no-repeat; padding-left: 25px; } lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/css/buttons.css0000644000175000017500000000330712542740731026675 0ustar clementclement/* BUTTONS */ /* See http://particletree.com/features/rediscovering-the-button-element/ */ .buttons { margin:0; } form .buttons { margin:10px 0 0 0; } .buttons a, .buttons button { display:block; float:right; margin:0 0 0 7px; background-color:#f5f5f5; border:1px solid #dedede; border-top:1px solid #eee; border-left:1px solid #eee; text-decoration:none; font-weight:bold; color:#565656; cursor:pointer; padding:5px 10px 6px 7px; /* Links */ } .buttons button { width:auto; overflow:visible; padding:4px 10px 3px 7px; /* IE6 */ } .buttons button[type]{ padding:5px 10px 5px 7px; /* Firefox */ line-height:17px; /* Safari */ } *:first-child+html button[type]{ padding:4px 10px 3px 7px; /* IE7 */ } .buttons button img, .buttons a img{ margin:0 3px -3px 0 !important; padding:0; border:none; width:16px; height:16px; } /* STANDARD */ button:hover, .buttons a:hover, div.message{ background-color:#dff4ff; border:1px solid #c2e1ef; color:#336699; } .buttons a:active{ background-color:#6299c5; border:1px solid #6299c5; color:#fff; } /* POSITIVE */ button.positive, .buttons a.positive{ color:#529214; } .buttons a.positive:hover, button.positive:hover, div.positive{ background-color:#E6EFC2; border:1px solid #C6D880; color:#529214; } .buttons a.positive:active{ background-color:#529214; border:1px solid #529214; color:#fff; } /* NEGATIVE */ .buttons a.negative, button.negative{ color:#d12f19; } .buttons a.negative:hover, button.negative:hover, div.negative{ background:#fbe3e4; border:1px solid #fbc2c4; color:#d12f19; } .buttons a.negative:active{ background-color:#d12f19; border:1px solid #d12f19; color:#fff; } /* WARNING */ div.warning{ background-color:#ffe17a; border:1px solid #ffca10; color:#a03400; } lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/js/0000775000175000017500000000000012542740731024310 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/js/info.js0000644000175000017500000000074612542740731025606 0ustar clementclement/* Timer for information page */ var i = 10; var _go = 1; function stop() { _go = 0; $('#timer').html("..."); } function go() { if (_go) { $("#form").submit(); } } function timer() { var h = $('#timer').html(); if (i > 0) { i--; } h = h.replace(/\d+/, i); $('#timer').html(h); window.setTimeout('timer()', 1000); } $(document).ready(function() { if (activeTimer) { window.setTimeout('go()', 10000); window.setTimeout('timer()', 1000); } else { stop(); } }); lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/js/browseridlogin.js0000644000175000017500000000074712542740731027705 0ustar clementclement$(document).ready(function() { // Manage auto login if (browserIdAutoLogin.match('1')) { launchRequest(); } // Intercept submit the first time var intercepted = 0; $("form.BrowserID").submit(function(event) { if (!intercepted) { event.preventDefault(); intercepted = 1; launchRequest(); } }); }); function launchRequest() { navigator.id.request({ siteName: browserIdSiteName, siteLogo: browserIdSiteLogo, backgroundColor: browserIdBackgroundColor }); } lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/js/confirm.js0000644000175000017500000000054212542740731026302 0ustar clementclement/* Timer for confirmation page */ var i = 5; function go() { $("#form").submit(); } function timer() { var h = $('#timer').html(); if (i > 0) { i--; } h = h.replace(/\d+/, i); $('#timer').html(h); window.setTimeout('timer()', 1000); } $(document).ready(function() { window.setTimeout('go()', 5000); window.setTimeout('timer()', 1000); }); lemonldap-ng-1.4.6/lemonldap-ng-portal/example/skins/common/js/jquery-1.10.2.js0000644000175000017500000102545712542740731026716 0ustar clementclement/*! * jQuery JavaScript Library v1.10.2 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2013-07-03T13:48Z */ (function( window, undefined ) { // Can't do this because several apps including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) // Support: Firefox 18+ //"use strict"; var // The deferred used on DOM ready readyList, // A central reference to the root jQuery(document) rootjQuery, // Support: IE<10 // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` core_strundefined = typeof undefined, // Use the correct document accordingly with window argument (sandbox) location = window.location, document = window.document, docElem = document.documentElement, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // [[Class]] -> type pairs class2type = {}, // List of deleted data cache ids, so we can reuse them core_deletedIds = [], core_version = "1.10.2", // Save a reference to some core methods core_concat = core_deletedIds.concat, core_push = core_deletedIds.push, core_slice = core_deletedIds.slice, core_indexOf = core_deletedIds.indexOf, core_toString = class2type.toString, core_hasOwn = class2type.hasOwnProperty, core_trim = core_version.trim, // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Used for matching numbers core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, // Used for splitting on whitespace core_rnotwhite = /\S+/g, // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }, // The ready event handler completed = function( event ) { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } }, // Clean-up method for dom ready events detach = function() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: core_version, constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; // scripts is true for back-compat jQuery.merge( this, jQuery.parseHTML( match[1], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return core_slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }, slice: function() { return this.pushStack( core_slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: core_push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger("ready").off("ready"); } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, isWindow: function( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }, isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { if ( obj == null ) { return String( obj ); } return typeof obj === "object" || typeof obj === "function" ? class2type[ core_toString.call(obj) ] || "object" : typeof obj; }, isPlainObject: function( obj ) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. if ( jQuery.support.ownLast ) { for ( key in obj ) { return core_hasOwn.call( obj, key ); } } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for ( key in obj ) {} return key === undefined || core_hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, error: function( msg ) { throw new Error( msg ); }, // data: string of html // context (optional): If specified, the fragment will be created in this context, defaults to document // keepScripts (optional): If true, will include scripts passed in the html string parseHTML: function( data, context, keepScripts ) { if ( !data || typeof data !== "string" ) { return null; } if ( typeof context === "boolean" ) { keepScripts = context; context = false; } context = context || document; var parsed = rsingleTag.exec( data ), scripts = !keepScripts && []; // Single tag if ( parsed ) { return [ context.createElement( parsed[1] ) ]; } parsed = jQuery.buildFragment( [ data ], context, scripts ); if ( scripts ) { jQuery( scripts ).remove(); } return jQuery.merge( [], parsed.childNodes ); }, parseJSON: function( data ) { // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } if ( data === null ) { return data; } if ( typeof data === "string" ) { // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); if ( data ) { // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, "@" ) .replace( rvalidtokens, "]" ) .replace( rvalidbraces, "")) ) { return ( new Function( "return " + data ) )(); } } } jQuery.error( "Invalid JSON: " + data ); }, // Cross-browser xml parsing parseXML: function( data ) { var xml, tmp; if ( !data || typeof data !== "string" ) { return null; } try { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } } catch( e ) { xml = undefined; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var value, i = 0, length = obj.length, isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } } return obj; }, // Use native String.trim function wherever possible trim: core_trim && !core_trim.call("\uFEFF\xA0") ? function( text ) { return text == null ? "" : core_trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { core_push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( core_indexOf ) { return core_indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var l = second.length, i = first.length, j = 0; if ( typeof l === "number" ) { for ( ; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var retVal, ret = [], i = 0, length = elems.length; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, i = 0, length = elems.length, isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } } // Flatten any nested arrays return core_concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = core_slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function access: function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[0], key ) : emptyGet; }, now: function() { return ( new Date() ).getTime(); }, // A method for quickly swapping in/out CSS properties to get correct calculations. // Note: this method belongs to the css module but it's needed here for the support module. // If support gets modularized, this method should be moved back to the css module. swap: function( elem, options, callback, args ) { var ret, name, old = {}; // Remember the old values, and insert the new ones for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } ret = callback.apply( elem, args || [] ); // Revert the old values for ( name in options ) { elem.style[ name ] = old[ name ]; } return ret; } }); jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch(e) {} if ( top && top.doScroll ) { (function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left"); } catch(e) { return setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } })(); } } } return readyList.promise( obj ); }; // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); function isArraylike( obj ) { var length = obj.length, type = jQuery.type( obj ); if ( jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || type !== "function" && ( length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj ); } // All jQuery objects should point back to these rootjQuery = jQuery(document); /*! * Sizzle CSS Selector Engine v1.10.2 * http://sizzlejs.com/ * * Copyright 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2013-07-03 */ (function( window, undefined ) { var i, support, cachedruns, Expr, getText, isXML, compile, outermostContext, sortInput, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + -(new Date()), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), hasDuplicate = false, sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; return 0; } return 0; }, // General-purpose constants strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf if we can't use a native one indexOf = arr.indexOf || function( elem ) { var i = 0, len = this.length; for ( ; i < len; i++ ) { if ( this[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", // Prefer arguments quoted, // then not containing pseudos/brackets, // then attribute selectors/non-parenthetical expressions, // then anything else // These preferences are here to reduce the number of selectors // needing tokenize in the PSEUDO preFilter pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rsibling = new RegExp( whitespace + "*[+~]" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : // BMP codepoint high < 0 ? String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector; if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; results = results || []; if ( !selector || typeof selector !== "string" ) { return results; } if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { return []; } if ( documentIsHTML && !seed ) { // Shortcuts if ( (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // QSA path if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { nid = old = expando; newContext = context; newSelector = nodeType === 9 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + toSelector( groups[i] ); } newContext = rsibling.test( selector ) && context.parentNode || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {Function(string, Object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key += " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = attrs.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Detect xml * @param {Element|Object} elem An element or a document */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; // Expose support vars for convenience support = Sizzle.support = {}; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView; // If no document and documentElement is available, return if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Set our document document = doc; docElem = doc.documentElement; // Support tests documentIsHTML = !isXML( doc ); // Support: IE>8 // If iframe document is assigned to "document" variable and if iframe has been reloaded, // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 // IE6-8 do not support the defaultView property so parent will be undefined if ( parent && parent.attachEvent && parent !== parent.top ) { parent.attachEvent( "onbeforeunload", function() { setDocument(); }); } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( doc.createComment("") ); return !div.getElementsByTagName("*").length; }); // Check if getElementsByClassName can be trusted support.getElementsByClassName = assert(function( div ) { div.innerHTML = "
"; // Support: Safari<4 // Catch class over-caching div.firstChild.className = "i"; // Support: Opera<10 // Catch gEBCN failure to find non-leading classes return div.getElementsByClassName("i").length === 2; }); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !doc.getElementsByName || !doc.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== strundefined && documentIsHTML ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== strundefined ) { return context.getElementsByTagName( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 div.innerHTML = ""; // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } }); assert(function( div ) { // Support: Opera 10-12/IE8 // ^= $= *= and empty values // Should not select anything // Support: Windows 8 Native Apps // The type attribute is restricted during .innerHTML assignment var input = doc.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "t", "" ); if ( div.querySelectorAll("[t^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ // Element contains another // Purposefully does not implement inclusive descendent // As in, an element does not contain itself contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = docElem.compareDocumentPosition ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); if ( compare ) { // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === doc || contains(preferredDoc, a) ) { return -1; } if ( b === doc || contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } // Not directly comparable, sort on existence of method return a.compareDocumentPosition ? -1 : 1; } : function( a, b ) { var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; // Parentless nodes are either documents or disconnected } else if ( !aup || !bup ) { return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return doc; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch(e) {} } return Sizzle( expr, document, null, [elem] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val === undefined ? support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null : val; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array for ( ; (node = elem[i]); i++ ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (see #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[5] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] && match[4] !== undefined ) { match[2] = match[4]; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || (parent[ expando ] = {}); cache = outerCache[ type ] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = cache[0] === dirruns && cache[2]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } // Use previously-cached element index if available } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { diff = cache[1]; // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), // not comment, processing instructions, or others // Thanks to Diego Perini for the nodeName shortcut // Greater than "@" means alpha characters (specifically not starting with "#" or "?") for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( tokens = [] ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); } function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var data, cache, outerCache, dirkey = dirruns + " " + doneName; // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { if ( (data = cache[1]) === true || data === cachedruns ) { return data === true; } } else { cache = outerCache[ dir ] = [ dirkey ]; cache[1] = matcher( elem, context, xml ) || cachedruns; if ( cache[1] === true ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // A counter to specify which element is currently being matched var matcherCachedRuns = 0, bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, expandContext ) { var elem, j, matcher, setMatched = [], matchedCount = 0, i = "0", unmatched = seed && [], outermost = expandContext != null, contextBackup = outermostContext, // We must always have either seed elements or context elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); if ( outermost ) { outermostContext = context !== document && context; cachedruns = matcherCachedRuns; } // Add elements passing elementMatchers directly to results // Keep `i` a string if there are no elements so `matchedCount` will be "00" below for ( ; (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; cachedruns = ++matcherCachedRuns; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !group ) { group = tokenize( selector ); } i = group.length; while ( i-- ) { cached = matcherFromTokens( group[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); } return cached; }; function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function select( selector, context, results, seed ) { var i, tokens, token, type, find, match = tokenize( selector ); if ( !seed ) { // Try to minimize operations if there is only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && context.parentNode || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } } // Compile and execute a filtering function // Provide `match` to avoid retokenization if we modified the selector above compile( selector, match )( seed, context, !documentIsHTML, results, rsibling.test( selector ) ); return results; } // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome<14 // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return (val = elem.getAttributeNode( name )) && val.specified ? val.value : elem[ name ] === true ? name.toLowerCase() : null; } }); } jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; })( window ); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // First callback to fire (used internally by add and fireWith) firingStart, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); }, // Remove all callbacks from the list empty: function() { list = []; firingLength = 0; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( list && ( !fired || stack ) ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var action = tuple[ 0 ], fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ](function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } }); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[1] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[0] ] = function() { deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[0] + "With" ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = core_slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; if( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }); jQuery.support = (function( support ) { var all, a, input, select, fragment, opt, eventName, isSupported, i, div = document.createElement("div"); // Setup div.setAttribute( "className", "t" ); div.innerHTML = "
a"; // Finish early in limited (non-browser) environments all = div.getElementsByTagName("*") || []; a = div.getElementsByTagName("a")[ 0 ]; if ( !a || !a.style || !all.length ) { return support; } // First batch of tests select = document.createElement("select"); opt = select.appendChild( document.createElement("option") ); input = div.getElementsByTagName("input")[ 0 ]; a.style.cssText = "top:1px;float:left;opacity:.5"; // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) support.getSetAttribute = div.className !== "t"; // IE strips leading whitespace when .innerHTML is used support.leadingWhitespace = div.firstChild.nodeType === 3; // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables support.tbody = !div.getElementsByTagName("tbody").length; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE support.htmlSerialize = !!div.getElementsByTagName("link").length; // Get the style information from getAttribute // (IE uses .cssText instead) support.style = /top/.test( a.getAttribute("style") ); // Make sure that URLs aren't manipulated // (IE normalizes it by default) support.hrefNormalized = a.getAttribute("href") === "/a"; // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 support.opacity = /^0.5/.test( a.style.opacity ); // Verify style float existence // (IE uses styleFloat instead of cssFloat) support.cssFloat = !!a.style.cssFloat; // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) support.checkOn = !!input.value; // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) support.optSelected = opt.selected; // Tests for enctype support on a form (#6743) support.enctype = !!document.createElement("form").enctype; // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>"; // Will be defined later support.inlineBlockNeedsLayout = false; support.shrinkWrapBlocks = false; support.pixelPosition = false; support.deleteExpando = true; support.noCloneEvent = true; support.reliableMarginRight = true; support.boxSizingReliable = true; // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as disabled) select.disabled = true; support.optDisabled = !opt.disabled; // Support: IE<9 try { delete div.test; } catch( e ) { support.deleteExpando = false; } // Check if we can trust getAttribute("value") input = document.createElement("input"); input.setAttribute( "value", "" ); support.input = input.getAttribute( "value" ) === ""; // Check if an input maintains its value after becoming a radio input.value = "t"; input.setAttribute( "type", "radio" ); support.radioValue = input.value === "t"; // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( "checked", "t" ); input.setAttribute( "name", "t" ); fragment = document.createDocumentFragment(); fragment.appendChild( input ); // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked = input.checked; // WebKit doesn't clone checked state correctly in fragments support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Opera does not clone events (and typeof div.attachEvent === undefined). // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() if ( div.attachEvent ) { div.attachEvent( "onclick", function() { support.noCloneEvent = false; }); div.cloneNode( true ).click(); } // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) for ( i in { submit: true, change: true, focusin: true }) { div.setAttribute( eventName = "on" + i, "t" ); support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; } div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; // Support: IE<9 // Iteration over object's inherited properties before its own. for ( i in jQuery( support ) ) { break; } support.ownLast = i !== "0"; // Run tests that need a body at doc ready jQuery(function() { var container, marginDiv, tds, divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", body = document.getElementsByTagName("body")[0]; if ( !body ) { // Return for frameset docs that don't have a body return; } container = document.createElement("div"); container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; body.appendChild( container ).appendChild( div ); // Support: IE8 // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). div.innerHTML = "
t
"; tds = div.getElementsByTagName("td"); tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; isSupported = ( tds[ 0 ].offsetHeight === 0 ); tds[ 0 ].style.display = ""; tds[ 1 ].style.display = "none"; // Support: IE8 // Check if empty table cells still have offsetWidth/Height support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); // Check box-sizing and margin behavior. div.innerHTML = ""; div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; // Workaround failing boxSizing test due to offsetWidth returning wrong value // with some non-1 values of body zoom, ticket #13543 jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { support.boxSizing = div.offsetWidth === 4; }); // Use window.getComputedStyle because jsdom on node.js will break without it. if ( window.getComputedStyle ) { support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. (#3333) // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right marginDiv = div.appendChild( document.createElement("div") ); marginDiv.style.cssText = div.style.cssText = divReset; marginDiv.style.marginRight = marginDiv.style.width = "0"; div.style.width = "1px"; support.reliableMarginRight = !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); } if ( typeof div.style.zoom !== core_strundefined ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.innerHTML = ""; div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Support: IE6 // Check if elements with layout shrink-wrap their children div.style.display = "block"; div.innerHTML = "
"; div.firstChild.style.width = "5px"; support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); if ( support.inlineBlockNeedsLayout ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); // Null elements to avoid leaks in IE container = div = tds = marginDiv = null; }); // Null elements to avoid leaks in IE all = select = fragment = opt = a = input = null; return support; })({}); var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; function internalData( elem, name, data, pvt /* Internal Use Only */ ){ if ( !jQuery.acceptData( elem ) ) { return; } var ret, thisCache, internalKey = jQuery.expando, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( typeof name === "string" ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, i, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split(" "); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } i = name.length; while ( i-- ) { delete thisCache[ name[i] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */ } else if ( jQuery.support.deleteExpando || cache != cache.window ) { /* jshint eqeqeq: true */ delete cache[ id ]; // When all else fails, null } else { cache[ id ] = null; } } jQuery.extend({ cache: {}, // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "applet": true, "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { // Do not set data on non-element because it will not be cleared (#8335). if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { return false; } var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; // nodes accept data unless otherwise specified; rejection can be conditional return !noData || noData !== true && elem.getAttribute("classid") === noData; } }); jQuery.fn.extend({ data: function( key, value ) { var attrs, name, data = null, i = 0, elem = this[0]; // Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { attrs = elem.attributes; for ( ; i < attrs.length; i++ ) { name = attrs[i].name; if ( name.indexOf("data-") === 0 ) { name = jQuery.camelCase( name.slice(5) ); dataAttr( elem, name, data[ name ] ); } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } return arguments.length > 1 ? // Sets one value this.each(function() { jQuery.data( this, key, value ); }) : // Gets one value // Try to fetch any internally stored data first elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray(data) ) { queue = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; return this.queue( type, function( next, hooks ) { var timeout = setTimeout( next, time ); hooks.stop = function() { clearTimeout( timeout ); }; }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var nodeHook, boolHook, rclass = /[\t\r\n\f]/g, rreturn = /\r/g, rfocusable = /^(?:input|select|textarea|button|object)$/i, rclickable = /^(?:a|area)$/i, ruseDefault = /^(?:checked|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute, getSetInput = jQuery.support.input; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each(function() { jQuery.removeAttr( this, name ); }); }, prop: function( name, value ) { return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { name = jQuery.propFix[ name ] || name; return this.each(function() { // try/catch handles cases where IE balks (such as removing a property on window) try { this[ name ] = undefined; delete this[ name ]; } catch( e ) {} }); }, addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = typeof value === "string" && value; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call( this, j, this.className ) ); }); } if ( proceed ) { // The disjunction here is for better compressibility (see removeClass) classes = ( value || "" ).match( core_rnotwhite ) || []; for ( ; i < len; i++ ) { elem = this[ i ]; cur = elem.nodeType === 1 && ( elem.className ? ( " " + elem.className + " " ).replace( rclass, " " ) : " " ); if ( cur ) { j = 0; while ( (clazz = classes[j++]) ) { if ( cur.indexOf( " " + clazz + " " ) < 0 ) { cur += clazz + " "; } } elem.className = jQuery.trim( cur ); } } } return this; }, removeClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = arguments.length === 0 || typeof value === "string" && value; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).removeClass( value.call( this, j, this.className ) ); }); } if ( proceed ) { classes = ( value || "" ).match( core_rnotwhite ) || []; for ( ; i < len; i++ ) { elem = this[ i ]; // This expression is here for better compressibility (see addClass) cur = elem.nodeType === 1 && ( elem.className ? ( " " + elem.className + " " ).replace( rclass, " " ) : "" ); if ( cur ) { j = 0; while ( (clazz = classes[j++]) ) { // Remove *all* instances while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { cur = cur.replace( " " + clazz + " ", " " ); } } elem.className = value ? jQuery.trim( cur ) : ""; } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value; if ( typeof stateVal === "boolean" && type === "string" ) { return stateVal ? this.addClass( value ) : this.removeClass( value ); } if ( jQuery.isFunction( value ) ) { return this.each(function( i ) { jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), classNames = value.match( core_rnotwhite ) || []; while ( (className = classNames[ i++ ]) ) { // check each className given, space separated list if ( self.hasClass( className ) ) { self.removeClass( className ); } else { self.addClass( className ); } } // Toggle whole class name } else if ( type === core_strundefined || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // If the element has a class name or if we're passed "false", // then remove the whole classname (if there was one, the above saved it). // Otherwise bring back whatever was previously saved (if anything), // falling back to the empty string if nothing was stored. this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " ", i = 0, l = this.length; for ( ; i < l; i++ ) { if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { return true; } } return false; }, val: function( value ) { var ret, hooks, isFunction, elem = this[0]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { return ret; } ret = elem.value; return typeof ret === "string" ? // handle most common string cases ret.replace(rreturn, "") : // handle cases where value is null/undef or number ret == null ? "" : ret; } return; } isFunction = jQuery.isFunction( value ); return this.each(function( i ) { var val; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call( this, i, jQuery( this ).val() ); } else { val = value; } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map(val, function ( value ) { return value == null ? "" : value + ""; }); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); } }); jQuery.extend({ valHooks: { option: { get: function( elem ) { // Use proper attribute retrieval(#6932, #12072) var val = jQuery.find.attr( elem, "value" ); return val != null ? val : elem.text; } }, select: { get: function( elem ) { var value, option, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one" || index < 0, values = one ? null : [], max = one ? index + 1 : options.length, i = index < 0 ? max : one ? index : 0; // Loop through all the selected options for ( ; i < max; i++ ) { option = options[ i ]; // oldIE doesn't update selected after form reset (#2551) if ( ( option.selected || i === index ) && // Don't return options that are disabled or in a disabled optgroup ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } return values; }, set: function( elem, value ) { var optionSet, option, options = elem.options, values = jQuery.makeArray( value ), i = options.length; while ( i-- ) { option = options[ i ]; if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { optionSet = true; } } // force browsers to behave consistently when non-matching value is set if ( !optionSet ) { elem.selectedIndex = -1; } return values; } } }, attr: function( elem, name, value ) { var hooks, ret, nType = elem.nodeType; // don't get/set attributes on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === core_strundefined ) { return jQuery.prop( elem, name, value ); } // All attributes are lowercase // Grab necessary hook if one is defined if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ name ] || ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); } if ( value !== undefined ) { if ( value === null ) { jQuery.removeAttr( elem, name ); } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { elem.setAttribute( name, value + "" ); return value; } } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { ret = jQuery.find.attr( elem, name ); // Non-existent attributes return null, we normalize to undefined return ret == null ? undefined : ret; } }, removeAttr: function( elem, value ) { var name, propName, i = 0, attrNames = value && value.match( core_rnotwhite ); if ( attrNames && elem.nodeType === 1 ) { while ( (name = attrNames[i++]) ) { propName = jQuery.propFix[ name ] || name; // Boolean attributes get special treatment (#10870) if ( jQuery.expr.match.bool.test( name ) ) { // Set corresponding property to false if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { elem[ propName ] = false; // Support: IE<9 // Also clear defaultChecked/defaultSelected (if appropriate) } else { elem[ jQuery.camelCase( "default-" + name ) ] = elem[ propName ] = false; } // See #9699 for explanation of this approach (setting first, then removal) } else { jQuery.attr( elem, name, "" ); } elem.removeAttribute( getSetAttribute ? name : propName ); } } }, attrHooks: { type: { set: function( elem, value ) { if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { // Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to default in case type is set after value during creation var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { elem.value = val; } return value; } } } }, propFix: { "for": "htmlFor", "class": "className" }, prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set properties on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); if ( notxml ) { // Fix name and attach hooks name = jQuery.propFix[ name ] || name; hooks = jQuery.propHooks[ name ]; } if ( value !== undefined ) { return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? ret : ( elem[ name ] = value ); } else { return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? ret : elem[ name ]; } }, propHooks: { tabIndex: { get: function( elem ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ // Use proper attribute retrieval(#12072) var tabindex = jQuery.find.attr( elem, "tabindex" ); return tabindex ? parseInt( tabindex, 10 ) : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : -1; } } } }); // Hooks for boolean attributes boolHook = { set: function( elem, value, name ) { if ( value === false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { // IE<8 needs the *property* name elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); // Use defaultChecked and defaultSelected for oldIE } else { elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; } return name; } }; jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? function( elem, name, isXML ) { var fn = jQuery.expr.attrHandle[ name ], ret = isXML ? undefined : /* jshint eqeqeq: false */ (jQuery.expr.attrHandle[ name ] = undefined) != getter( elem, name, isXML ) ? name.toLowerCase() : null; jQuery.expr.attrHandle[ name ] = fn; return ret; } : function( elem, name, isXML ) { return isXML ? undefined : elem[ jQuery.camelCase( "default-" + name ) ] ? name.toLowerCase() : null; }; }); // fix oldIE attroperties if ( !getSetInput || !getSetAttribute ) { jQuery.attrHooks.value = { set: function( elem, value, name ) { if ( jQuery.nodeName( elem, "input" ) ) { // Does not return so that setAttribute is also used elem.defaultValue = value; } else { // Use nodeHook if defined (#1954); otherwise setAttribute is fine return nodeHook && nodeHook.set( elem, value, name ); } } }; } // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { // Use this for any attribute in IE6/7 // This fixes almost every IE6/7 issue nodeHook = { set: function( elem, value, name ) { // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); if ( !ret ) { elem.setAttributeNode( (ret = elem.ownerDocument.createAttribute( name )) ); } ret.value = value += ""; // Break association with cloned elements by also using setAttribute (#9646) return name === "value" || value === elem.getAttribute( name ) ? value : undefined; } }; jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = // Some attributes are constructed with empty-string values when not defined function( elem, name, isXML ) { var ret; return isXML ? undefined : (ret = elem.getAttributeNode( name )) && ret.value !== "" ? ret.value : null; }; jQuery.valHooks.button = { get: function( elem, name ) { var ret = elem.getAttributeNode( name ); return ret && ret.specified ? ret.value : undefined; }, set: nodeHook.set }; // Set contenteditable to false on removals(#10429) // Setting to empty string throws an error as an invalid value jQuery.attrHooks.contenteditable = { set: function( elem, value, name ) { nodeHook.set( elem, value === "" ? false : value, name ); } }; // Set width and height to auto instead of 0 on empty string( Bug #8150 ) // This is for removals jQuery.each([ "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = { set: function( elem, value ) { if ( value === "" ) { elem.setAttribute( name, "auto" ); return value; } } }; }); } // Some attributes require a special call on IE // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !jQuery.support.hrefNormalized ) { // href/src property should get the full normalized URL (#10299/#12915) jQuery.each([ "href", "src" ], function( i, name ) { jQuery.propHooks[ name ] = { get: function( elem ) { return elem.getAttribute( name, 4 ); } }; }); } if ( !jQuery.support.style ) { jQuery.attrHooks.style = { get: function( elem ) { // Return undefined in the case of empty string // Note: IE uppercases css property names, but if we were to .toLowerCase() // .cssText, that would destroy case senstitivity in URL's, like in "background" return elem.style.cssText || undefined; }, set: function( elem, value ) { return ( elem.style.cssText = value + "" ); } }; } // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { jQuery.propHooks.selected = { get: function( elem ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } return null; } }; } jQuery.each([ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() { jQuery.propFix[ this.toLowerCase() ] = this; }); // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { jQuery.propFix.enctype = "encoding"; } // Radios and checkboxes getter/setter jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); } } }; if ( !jQuery.support.checkOn ) { jQuery.valHooks[ this ].get = function( elem ) { // Support: Webkit // "" is returned instead of "on" if a value isn't specified return elem.getAttribute("value") === null ? "on" : elem.value; }; } }); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; function returnTrue() { return true; } function returnFalse() { return false; } function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !(events = elemData.events) ) { events = elemData.events = {}; } if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( core_rnotwhite ) || [""]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first if ( !(handlers = events[ type ]) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( core_rnotwhite ) || [""]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = core_hasOwn.call( event, "type" ) ? event.type : event, namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf(".") >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join("."); event.namespace_re = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === (elem.ownerDocument || document) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { event.preventDefault(); } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, ret, handleObj, matched, j, handlerQueue = [], args = core_slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { if ( (event.result = ret) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var sel, handleObj, matches, i, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers // Black-hole SVG instance trees (#13180) // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { /* jshint eqeqeq: true */ // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, handlers: matches }); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Chrome 23+, Safari? // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Even when returnValue equals to undefined Firefox will still show alert if ( event.result !== undefined ) { event.originalEvent.returnValue = event.result; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, to properly expose it to GC if ( typeof elem[ name ] === core_strundefined ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !jQuery._data( form, "submitBubbles" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); jQuery._data( form, "submitBubbles", true ); } }); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._just_changed = true; } }); jQuery.event.add( this, "click._change", function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event, true ); }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); jQuery._data( elem, "changeBubbles", true ); } }); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Create "bubbling" focus and blur events if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout var attaches = 0, handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { if ( attaches++ === 0 ) { document.addEventListener( orig, handler, true ); } }, teardown: function() { if ( --attaches === 0 ) { document.removeEventListener( orig, handler, true ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var type, origFn; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { var elem = this[0]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } }); var isSimple = /^.[^:#\[\.,]*$/, rparentsprev = /^(?:parents|prev(?:Until|All))/, rneedsContext = jQuery.expr.match.needsContext, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var i, ret = [], self = this, len = self.length; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, not: function( selector ) { return this.pushStack( winnow(this, selector || [], true) ); }, filter: function( selector ) { return this.pushStack( winnow(this, selector || [], false) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, ret = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)) ) { cur = ret.push( cur ); break; } } } return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[0], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( jQuery.unique(all) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { ret = jQuery.unique( ret ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { ret = ret.reverse(); } } return this.pushStack( ret ); }; }); jQuery.extend({ filter: function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; })); }, dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; }); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; }); } if ( typeof qualifier === "string" ) { if ( isSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; }); } function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rtbody = /
", "
" ], tr: [ 2, "", "
" ], col: [ 2, "", "
" ], td: [ 3, "", "
" ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] }, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement("div") ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; jQuery.fn.extend({ text: function( value ) { return jQuery.access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, append: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } }); }, prepend: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } }); }, before: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } }); }, after: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } }); }, // keepData is for internal use only--do not document remove: function( selector, keepData ) { var elem, elems = selector ? jQuery.filter( selector, this ) : this, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) { if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, "script" ) ); } elem.parentNode.removeChild( elem ); } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function () { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return jQuery.access( this, function( value ) { var elem = this[0] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for (; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[i] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var // Snapshot the DOM in case .domManip sweeps something relevant into its fragment args = jQuery.map( this, function( elem ) { return [ elem.nextSibling, elem.parentNode ]; }), i = 0; // Make the changes, replacing each context element with the new content this.domManip( arguments, function( elem ) { var next = args[ i++ ], parent = args[ i++ ]; if ( parent ) { // Don't use the snapshot next if it has moved (#13810) if ( next && next.parentNode !== parent ) { next = this.nextSibling; } jQuery( this ).remove(); parent.insertBefore( elem, next ); } // Allow new content to include elements from the context set }, true ); // Force removal if there was no new content (e.g., from empty arguments) return i ? this : this.remove(); }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, callback, allowIntersection ) { // Flatten any nested arrays args = core_concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = this.length, set = this, iNoClone = l - 1, value = args[0], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { return this.each(function( index ) { var self = set.eq( index ); if ( isFunction ) { args[0] = value.call( this, index, self.html() ); } self.domManip( args, callback, allowIntersection ); }); } if ( l ) { fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( this[i], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Hope ajax is available... jQuery._evalUrl( node.src ); } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return this; } }); // Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName("tbody")[0] || elem.appendChild( elem.ownerDocument.createElement("tbody") ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[1]; } else { elem.removeAttribute("type"); } return elem; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); } } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone(true); jQuery( insert[i] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() core_push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; }); function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Used in buildFragment, fixes the defaultChecked property function fixDefaultChecked( elem ) { if ( manipulation_rcheckableType.test( elem.type ) ) { elem.defaultChecked = elem.checked; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; (node = srcElements[i]) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[i] ) { fixCloneNodeIssues( node, destElements[i] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; (node = srcElements[i]) != null; i++ ) { cloneCopyEvent( node, destElements[i] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, buildFragment: function( elems, context, scripts, selection ) { var j, elem, contains, tmp, tag, tbody, wrap, l = elems.length, // Ensure a safe fragment safe = createSafeFragment( context ), nodes = [], i = 0; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || safe.appendChild( context.createElement("div") ); // Deserialize a standard representation tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; // Descend through wrappers to the right content j = wrap[0]; while ( j-- ) { tmp = tmp.lastChild; } // Manually add leading whitespace removed by IE if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); } // Remove IE's autoinserted from table fragments if ( !jQuery.support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[1] === "
" && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !jQuery.support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( (elem = nodes[ i++ ]) ) { // #4087 - If origin and destination elements are the same, and this is // that element, do not do anything if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( (elem = tmp[ j++ ]) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; }, cleanData: function( elems, /* internal */ acceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, deleteExpando = jQuery.support.deleteExpando, special = jQuery.event.special; for ( ; (elem = elems[i]) != null; i++ ) { if ( acceptData || jQuery.acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( deleteExpando ) { delete elem[ internalKey ]; } else if ( typeof elem.removeAttribute !== core_strundefined ) { elem.removeAttribute( internalKey ); } else { elem[ internalKey ] = null; } core_deletedIds.push( id ); } } } } }, _evalUrl: function( url ) { return jQuery.ajax({ url: url, type: "GET", dataType: "script", async: false, global: false, "throws": true }); } }); jQuery.fn.extend({ wrapAll: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapAll( html.call(this, i) ); }); } if ( this[0] ) { // The elements to wrap the target around var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); if ( this[0].parentNode ) { wrap.insertBefore( this[0] ); } wrap.map(function() { var elem = this; while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { elem = elem.firstChild; } return elem; }).append( this ); } return this; }, wrapInner: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapInner( html.call(this, i) ); }); } return this.each(function() { var self = jQuery( this ), contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); } else { self.append( html ); } }); }, wrap: function( html ) { var isFunction = jQuery.isFunction( html ); return this.each(function(i) { jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); }); }, unwrap: function() { return this.parent().each(function() { if ( !jQuery.nodeName( this, "body" ) ) { jQuery( this ).replaceWith( this.childNodes ); } }).end(); } }); var iframe, getStyles, curCSS, ralpha = /alpha\([^)]*\)/i, ropacity = /opacity\s*=\s*([^)]*)/, rposition = /^(top|right|bottom|left)$/, // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, rmargin = /^margin/, rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), elemdisplay = { BODY: "block" }, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: 0, fontWeight: 400 }, cssExpand = [ "Top", "Right", "Bottom", "Left" ], cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; // return a css property mapped to a potentially vendor prefixed property function vendorPropName( style, name ) { // shortcut for names that are not vendor prefixed if ( name in style ) { return name; } // check for vendor prefixed names var capName = name.charAt(0).toUpperCase() + name.slice(1), origName = name, i = cssPrefixes.length; while ( i-- ) { name = cssPrefixes[ i ] + capName; if ( name in style ) { return name; } } return origName; } function isHidden( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); } function showHide( elements, show ) { var display, elem, hidden, values = [], index = 0, length = elements.length; for ( ; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } values[ index ] = jQuery._data( elem, "olddisplay" ); display = elem.style.display; if ( show ) { // Reset the inline display of this element to learn if it is // being hidden by cascaded rules or not if ( !values[ index ] && display === "none" ) { elem.style.display = ""; } // Set elements which have been overridden with display: none // in a stylesheet to whatever the default browser style is // for such an element if ( elem.style.display === "" && isHidden( elem ) ) { values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); } } else { if ( !values[ index ] ) { hidden = isHidden( elem ); if ( display && display !== "none" || !hidden ) { jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); } } } } // Set the display of most of the elements in a second loop // to avoid the constant reflow for ( index = 0; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } if ( !show || elem.style.display === "none" || elem.style.display === "" ) { elem.style.display = show ? values[ index ] || "" : "none"; } } return elements; } jQuery.fn.extend({ css: function( name, value ) { return jQuery.access( this, function( elem, name, value ) { var len, styles, map = {}, i = 0; if ( jQuery.isArray( name ) ) { styles = getStyles( elem ); len = name.length; for ( ; i < len; i++ ) { map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); } return map; } return value !== undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); }, name, value, arguments.length > 1 ); }, show: function() { return showHide( this, true ); }, hide: function() { return showHide( this ); }, toggle: function( state ) { if ( typeof state === "boolean" ) { return state ? this.show() : this.hide(); } return this.each(function() { if ( isHidden( this ) ) { jQuery( this ).show(); } else { jQuery( this ).hide(); } }); } }); jQuery.extend({ // Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks: { opacity: { get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity var ret = curCSS( elem, "opacity" ); return ret === "" ? "1" : ret; } } } }, // Don't automatically add "px" to these possibly-unitless properties cssNumber: { "columnCount": true, "fillOpacity": true, "fontWeight": true, "lineHeight": true, "opacity": true, "order": true, "orphans": true, "widows": true, "zIndex": true, "zoom": true }, // Add in properties whose names you wish to fix before // setting or getting the value cssProps: { // normalize float css property "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" }, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { // Don't set styles on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { return; } // Make sure that we're working with the right name var ret, type, hooks, origName = jQuery.camelCase( name ), style = elem.style; name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // Check if we're setting a value if ( value !== undefined ) { type = typeof value; // convert relative number strings (+= or -=) to relative numbers. #7345 if ( type === "string" && (ret = rrelNum.exec( value )) ) { value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type = "number"; } // Make sure that NaN and null values aren't set. See: #7116 if ( value == null || type === "number" && isNaN( value ) ) { return; } // If a number was passed in, add 'px' to the (except for certain CSS properties) if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; } // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, // but it would mean to define eight (for every problematic property) identical functions if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { style[ name ] = "inherit"; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { // Wrapped to prevent IE from throwing errors when 'invalid' values are provided // Fixes bug #5509 try { style[ name ] = value; } catch(e) {} } } else { // If a hook was provided get the non-computed value from there if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { return ret; } // Otherwise just get the value from the style object return style[ name ]; } }, css: function( elem, name, extra, styles ) { var num, val, hooks, origName = jQuery.camelCase( name ); // Make sure that we're working with the right name name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // If a hook was provided get the computed value from there if ( hooks && "get" in hooks ) { val = hooks.get( elem, true, extra ); } // Otherwise, if a way to get the computed value exists, use that if ( val === undefined ) { val = curCSS( elem, name, styles ); } //convert "normal" to computed value if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform[ name ]; } // Return, converting to number if forced or a qualifier was provided and val looks numeric if ( extra === "" || extra ) { num = parseFloat( val ); return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; } return val; } }); // NOTE: we've included the "window" in window.getComputedStyle // because jsdom on node.js will break without it. if ( window.getComputedStyle ) { getStyles = function( elem ) { return window.getComputedStyle( elem, null ); }; curCSS = function( elem, name, _computed ) { var width, minWidth, maxWidth, computed = _computed || getStyles( elem ), // getPropertyValue is only needed for .css('filter') in IE9, see #12537 ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, style = elem.style; if ( computed ) { if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { ret = jQuery.style( elem, name ); } // A tribute to the "awesome hack by Dean Edwards" // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { // Remember the original values width = style.width; minWidth = style.minWidth; maxWidth = style.maxWidth; // Put in the new values to get a computed value out style.minWidth = style.maxWidth = style.width = ret; ret = computed.width; // Revert the changed values style.width = width; style.minWidth = minWidth; style.maxWidth = maxWidth; } } return ret; }; } else if ( document.documentElement.currentStyle ) { getStyles = function( elem ) { return elem.currentStyle; }; curCSS = function( elem, name, _computed ) { var left, rs, rsLeft, computed = _computed || getStyles( elem ), ret = computed ? computed[ name ] : undefined, style = elem.style; // Avoid setting ret to empty string here // so we don't default to auto if ( ret == null && style && style[ name ] ) { ret = style[ name ]; } // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels // but not position css attributes, as those are proportional to the parent element instead // and we can't measure the parent instead because it might trigger a "stacking dolls" problem if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { // Remember the original values left = style.left; rs = elem.runtimeStyle; rsLeft = rs && rs.left; // Put in the new values to get a computed value out if ( rsLeft ) { rs.left = elem.currentStyle.left; } style.left = name === "fontSize" ? "1em" : ret; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; if ( rsLeft ) { rs.left = rsLeft; } } return ret === "" ? "auto" : ret; }; } function setPositiveNumber( elem, value, subtract ) { var matches = rnumsplit.exec( value ); return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : value; } function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? // If we already have the right measurement, avoid augmentation 4 : // Otherwise initialize for horizontal or vertical properties name === "width" ? 1 : 0, val = 0; for ( ; i < 4; i += 2 ) { // both box models exclude margin, so add it if we want it if ( extra === "margin" ) { val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); } if ( isBorderBox ) { // border-box includes padding, so remove it if we want content if ( extra === "content" ) { val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); } // at this point, extra isn't border nor margin, so remove border if ( extra !== "margin" ) { val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } else { // at this point, extra isn't content, so add padding val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); // at this point, extra isn't content nor padding, so add border if ( extra !== "padding" ) { val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } return val; } function getWidthOrHeight( elem, name, extra ) { // Start with offset property, which is equivalent to the border-box value var valueIsBorderBox = true, val = name === "width" ? elem.offsetWidth : elem.offsetHeight, styles = getStyles( elem ), isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; // some non-html elements return undefined for offsetWidth, so check for null/undefined // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 if ( val <= 0 || val == null ) { // Fall back to computed then uncomputed css if necessary val = curCSS( elem, name, styles ); if ( val < 0 || val == null ) { val = elem.style[ name ]; } // Computed unit is not pixels. Stop here and return. if ( rnumnonpx.test(val) ) { return val; } // we need the check for style in case a browser which returns unreliable values // for getComputedStyle silently falls back to the reliable elem.style valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); // Normalize "", auto, and prepare for extra val = parseFloat( val ) || 0; } // use the active box-sizing model to add/subtract irrelevant styles return ( val + augmentWidthOrHeight( elem, name, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, styles ) ) + "px"; } // Try to determine the default display value of an element function css_defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = ( iframe || jQuery("' . '' . '' . ''; } # HTTP-POST elsif ( $method == Lasso::Constants::HTTP_METHOD_POST ) { $self->lmLog( "Build POST relay logout request to $providerID", 'debug' ); # Create a new relay session my $relayInfos = $self->getSamlSession(); my $infos; # Store infos $infos->{type} = 'relay'; $infos->{_utime} = time; $infos->{url} = $logout->msg_url; $infos->{body} = $logout->msg_body; $infos->{relayState} = $logout->msg_relayState; $relayInfos->update($infos); my $relayID = $relayInfos->id; # Build the URL that could be used to play this logout request my $slo_url = $self->{portal} . '/saml/relaySingleLogoutPOST?relay=' . $relayID; # Create iFrame $info .= '' . '' . '' . ''; } # HTTP-SOAP elsif ( $method == Lasso::Constants::HTTP_METHOD_SOAP ) { # Build a relay request, to be used after SLO process is done if ($relay) { $self->lmLog( "Build SOAP relay logout request for $providerID", 'debug' ); # Create a new relay session my $relayInfos = $self->getSamlSession(); # Build needed information to be stored into samlStorage unless ( $logout->get_session() && $logout->get_identity() ) { $self->lmLog( "No session and identity found into logout object", 'error' ); return ( 0, $method, undef ); } my $infos; $infos->{type} = 'relay'; $infos->{_utime} = time; $infos->{_lassoSessionDump} = $logout->get_session->dump; $infos->{_lassoIdentityDump} = $logout->get_identity->dump; $infos->{_providerID} = $providerID; $infos->{_relayState} = $logout->msg_relayState; $relayInfos->update($infos); my $relayID = $relayInfos->id; # Build the URL that could be used to play this logout request my $slo_url = $self->{portal} . '/saml/relaySingleLogoutSOAP?relay=' . $relayID; # Display information to the user $info .= '' . '' . '' . ''; } # Send the request directly else { $self->lmLog( "Send SOAP logout request to $providerID", 'debug' ); my $slo_url = $logout->msg_url; my $slo_body = $logout->msg_body; # Send SOAP request and manage response my $sp_response = $self->sendSOAPMessage( $slo_url, $slo_body ); unless ($sp_response) { $self->lmLog( "No logout response to SOAP request", 'error' ); return ( 0, $method, undef ); } # Process logout response my $sp_result = $self->processLogoutResponseMsg( $logout, $sp_response ); unless ($sp_result) { $self->lmLog( "Fail to process logout response", 'error' ); return ( 0, $method, undef ); } # Store success status for this SLO request my $sloStatusSessionInfos = $self->getSamlSession($relayState); if ($sloStatusSessionInfos) { $sloStatusSessionInfos->update( { $confKey => 1 } ); $self->lmLog( "Store SLO status for $confKey in session $relayState", 'debug' ); } else { $self->lmLog( "Unable to store SLO status for $confKey in session $relayState", 'warn' ); } $self->lmLog( "Logout response is valid", 'debug' ); } } return ( 1, $method, $info ); } ## @pmethod int sendLogoutRequestToProviders(Lasso::Logout logout, string relayState ) # Send logout response issue from a logout request to all other # providers. If information have to be displayed to users, such as # iframe to send HTTP-Redirect or HTTP-POST logout request, then # $self->{_info} will be updated. # @param logout Lasso Logout object # @param relayState Relay State for SLO status # @return int Number of concerned providers. sub sendLogoutRequestToProviders { my ( $self, $logout, $relayState ) = splice @_; my $server = $self->{_lassoServer}; my $providersCount = 0; my $info = ''; # Reset providerID into Lasso::Logout object $self->resetProviderIdIndex($logout); # Header of the block which will be displayed to the user, if needed. $info .= '

' . $self->msg(Lemonldap::NG::Portal::Simple::PM_SAML_SPLOGOUT) . '

' . '
' . $providerName . '
' . '' . '' . $providerName . '
' . '' . $providerName . '
'; # Foreach SP found in session, get it from configuration, and send the # appropriate logout request (HTTP,POST,SOAP). while ( my $providerID = $self->getNextProviderId($logout) ) { # Send logout request my ( $rstatus, $rmethod, $rinfo ) = $self->sendLogoutRequestToProvider( $logout, $providerID, undef, 1, $relayState ); next unless ($rstatus); # Count providers that have to be request by HTTP redirect $providersCount++; # Add information if necessary if ($rinfo) { $info .= $rinfo; } } # End of information block to be displayed to the user. $info .= '
'; # Print some information to the user. $self->info($info) if $providersCount; return $providersCount; } ## @method boolean checkSignatureStatus(Lasso::Profile profile) # Check signature status # @param profile Lasso::Profile object # @return result sub checkSignatureStatus { my ( $self, $profile ) = splice @_; eval { Lasso::Profile::get_signature_status($profile); }; return $self->checkLassoError($@); } ## @method int authnContext2authnLevel(string authnContext) # Return authentication level corresponding to authnContext # @param authnContext SAML authentication context # return authentication level sub authnContext2authnLevel { my ( $self, $authnContext ) = splice @_; return $self->{samlAuthnContextMapPassword} if ( $authnContext eq $self->getAuthnContext("password") ); return $self->{samlAuthnContextMapPasswordProtectedTransport} if ( $authnContext eq $self->getAuthnContext("password-protected-transport") ); return $self->{samlAuthnContextMapKerberos} if ( $authnContext eq $self->getAuthnContext("kerberos") ); return $self->{samlAuthnContextMapTLSClient} if ( $authnContext eq $self->getAuthnContext("tls-client") ); return 0; } ## @method int authnLevel2authnContext(int authnLevel) # Return SAML authentication context corresponding to authnLevel # @param authnLevel internal authentication level # return SAML authentication context sub authnLevel2authnContext { my ( $self, $authnLevel ) = splice @_; return $self->getAuthnContext("password") if ( $authnLevel == $self->{samlAuthnContextMapPassword} ); return $self->getAuthnContext("password-protected-transport") if ( $authnLevel == $self->{samlAuthnContextMapPasswordProtectedTransport} ); return $self->getAuthnContext("kerberos") if ( $authnLevel == $self->{samlAuthnContextMapKerberos} ); return $self->getAuthnContext("tls-client") if ( $authnLevel == $self->{samlAuthnContextMapTLSClient} ); return $self->getAuthnContext("unspecified"); } ## @method boolean checkDestination(Lasso::Node message, string url) # If SAML Destination attribute is present, check it # @param message SAML request or response # @param url Requested URL # @return Result sub checkDestination { my ( $self, $message, $url ) = splice @_; my $destination; # Read Destination eval { $destination = $message->Destination(); }; # Ok if no Destination if ( $@ or !$destination ) { $self->lmLog( "No Destination in SAML message", 'debug' ); return 1; } $self->lmLog( "Destination $destination found in SAML message", 'debug' ); # Retrieve full URL my $portal = $self->{portal}; $portal =~ s#^(https?://[^/]+)/.*#$1#; # remove path of portal URL $url = $portal . $url; # Compare Destination and URL if ( $destination eq $url ) { $self->lmLog( "Destination match URL $url", 'debug' ); return 1; } $self->lmLog( "Destination does not match URL $url", 'error' ); return 0; } ## @method hashref getSamlSession(string id) # Try to recover the SAML session corresponding to id and return session # If id is set to undef, return a new session # @param id session reference # @return Lemonldap::NG::Common::Session object sub getSamlSession { my ( $self, $id ) = splice @_; my $samlSession = Lemonldap::NG::Common::Session->new( { storageModule => $self->{samlStorage}, storageModuleOptions => $self->{samlStorageOptions}, cacheModule => $self->{localSessionStorage}, cacheModuleOptions => $self->{localSessionStorageOptions}, id => $id, kind => "SAML", } ); if ( $samlSession->error ) { if ($id) { $self->_sub( 'userInfo', "SAML session $id isn't yet available" ); } else { $self->lmLog( "Unable to create new SAML session", 'error' ); $self->lmLog( $samlSession->error, 'error' ); } return undef; } return $samlSession; } ## @method Lasso::Saml2Attribute createAttribute(string name, string format, string friendly_name) # Create a new SAML attribute # @param name Attribute name # @param format optional Attribute format # @param friendly_name optional Attribute friendly name # @return SAML attribute sub createAttribute { my ( $self, $name, $format, $friendly_name ) = splice @_; my $attribute; # Name is required return unless defined $name; # SAML2 attribute eval { $attribute = Lasso::Saml2Attribute->new(); }; if ($@) { $self->checkLassoError($@); return; } # Default values $friendly_name ||= $name; $format ||= Lasso::Constants::SAML2_ATTRIBUTE_NAME_FORMAT_BASIC; # Set attribute properties $attribute->Name($name); $attribute->NameFormat($format); $attribute->FriendlyName($friendly_name); return $attribute; } ## @method Lasso::Saml2AttributeValue createAttributeValue(string value) # Create a new SAML attribute value # @param value Value to store # @return SAML attribute value sub createAttributeValue { my ( $self, $value ) = splice @_; my $saml2value; # Value is required return unless defined $value; # SAML2 attribute value eval { $saml2value = Lasso::Saml2AttributeValue->new(); }; if ($@) { $self->checkLassoError($@); return; } my @any; # Text node my $textNode; eval { $textNode = Lasso::MiscTextNode->new(); }; if ($@) { $self->checkLassoError($@); return; } $textNode->text_child(1); $textNode->content($value); push @any, $textNode; $saml2value->any(@any); return $saml2value; } ## @method int getEncryptionMode(string encryption_mode) # Return Lasso encryption mode # @param encryption_mode Encryption mode string # @return Lasso encryption mode sub getEncryptionMode { my ( $self, $encryption_mode ) = splice @_; return Lasso::Constants::ENCRYPTION_MODE_NAMEID if ( $encryption_mode =~ /^nameid$/i ); return Lasso::Constants::ENCRYPTION_MODE_ASSERTION if ( $encryption_mode =~ /^assertion$/i ); return Lasso::Constants::ENCRYPTION_MODE_NONE; } ## @method boolean setProviderEncryptionMode(Lasso::Provider provider, int encryption_mode) # Set encryption mode on a provider # @param provider Lasso::Provider object # @param encryption_mode Lasso encryption mode # @return result sub setProviderEncryptionMode { my ( $self, $provider, $encryption_mode ) = splice @_; eval { Lasso::Provider::set_encryption_mode( $provider, $encryption_mode ); }; return $self->checkLassoError($@); } ## @method boolean deleteSAMLSecondarySessions(string session_id) # Find and delete SAML sessions bounded to a primary session # @param session_id Primary session ID # @return result sub deleteSAMLSecondarySessions { my ( $self, $session_id ) = splice @_; my $result = 1; # Find SAML sessions my $moduleOptions = $self->{samlStorageOptions} || {}; $moduleOptions->{backend} = $self->{samlStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $saml_sessions = $module->searchOn( $moduleOptions, "_saml_id", $session_id ); if ( my @saml_sessions_keys = keys %$saml_sessions ) { foreach my $saml_session (@saml_sessions_keys) { # Get session $self->lmLog( "Retrieve SAML session $saml_session", 'debug' ); my $samlSessionInfo = $self->getSamlSession($saml_session); # Delete session if ( $samlSessionInfo->remove ) { $self->lmLog( "SAML session $saml_session deleted", 'debug' ); } else { $self->lmLog( "Unable to delete SAML session $saml_session", 'error' ); $self->lmLog( $samlSessionInfo->error, "error" ); $result = 0; } } } else { $self->lmLog( "No SAML session found for session $session_id ", 'debug' ); } return $result; } ## @method void sendSLOErrorResponse(Lasso::Logout logout, string method) # Send an SLO error response # @param logout Lasso::Logout object # @param method HTTP method # @return nothing sub sendSLOErrorResponse { my ( $self, $logout, $method ) = splice @_; # Load empty session my $session = ''; unless ( $self->setSessionFromDump( $logout, $session ) ) { $self->lmLog( "Could not set empty session in logout object", 'error' ); $self->quit(); } # Send unvalidated SLO response return $self->sendLogoutResponseToServiceProvider( $logout, $method ); } ## @method string getQueryString() # Return query string with or without CGI query_string() method # @return query string sub getQueryString { my ($self) = splice @_; my $query_string; if ( $self->{samlUseQueryStringSpecific} ) { my @pairs = split( /&/, $ENV{'QUERY_STRING'} ); $query_string = join( ';', @pairs ); } else { $query_string = $self->query_string(); } return $query_string; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::_SAML - Common SAML functions =head1 SYNOPSIS use Lemonldap::NG::Portal::_SAML; =head1 DESCRIPTION This module contains common methods for SAML authentication and user information loading =head1 METHODS =head2 loadLasso Load Lasso module =head2 loadService Load SAML service by creating a Lasso::Server =head2 loadIDPs Load SAML identity providers =head2 loadSPs Load SAML service providers =head2 checkMessage Check SAML requests and responses =head2 checkLassoError Log Lasso error code and message if this is actually a Lasso::Error with code > 0 =head2 createServer Load service metadata and create Lasso::Server object =head2 addIDP Add IDP to an existing Lasso::Server =head2 addSP Add SP to an existing Lasso::Server =head2 addAA Add Attribute Authority to an existing Lasso::Server =head2 addProvider Add provider to an existing Lasso::Server =head2 getOrganizationName Return name of organization picked up from metadata =head2 createAuthnRequest Create authentication request for selected IDP =head2 createLogin Create Lasso::Login object =head2 initAuthnRequest Init authentication request =head2 initIdpInitiatedAuthnRequest Init authentication request for IDP initiated =head2 buildAuthnRequestMsg Build authentication request message =head2 processAuthnRequestMsg Process authentication request message =head2 validateRequestMsg Validate request message =head2 buildAuthnResponseMsg Build authentication response message =head2 buildArtifactMsg Build artifact message =head2 buildAssertion Build assertion =head2 processAuthnResponseMsg Process authentication response message =head2 getNameIdentifier Get NameID from Lasso Profile =head2 createIdentity Create Lasso::Identity object =head2 createSession Create Lasso::Session object =head2 acceptSSO Accept SSO from IDP =head2 storeRelayState Store information in relayState database and return =head2 extractRelayState Extract RelayState information into $self =head2 getAssertion Get assertion in Lasso::Login object =head2 getAttributeValue Get SAML attribute value corresponding to name, format and friendly_name Multivaluated values are separated by ';' =head2 validateConditions Validate conditions =head2 createLogoutRequest Create logout request for selected entity =head2 createLogout Create Lasso::Logout object =head2 initLogoutRequest Init logout request =head2 buildLogoutRequestMsg Build logout request message =head2 setSessionFromDump Set session from dump in Lasso::Profile object =head2 setIdentityFromDump Set identity from dump in Lasso::Profile object =head2 getMetaDataURL Get URL stored in a service metadata configuration key =head2 processLogoutResponseMsg Process logout response message =head2 processLogoutRequestMsg Process logout request message =head2 validateLogoutRequest Validate logout request =head2 buildLogoutResponseMsg Build logout response msg =head2 storeReplayProtection Store ID of an SAML message in Replay Protection base =head2 replayProtection Check if SAML message do not correspond to a previously responded message =head2 resolveArtifact Resolve artifact to get the real SAML message =head2 storeArtifact Store artifact =head2 loadArtifact Load artifact =head2 createArtifactResponse Create artifact response =head2 processArtRequestMsg Process artifact response message =head2 processArtResponseMsg Process artifact response message =head2 sendSOAPMessage Send SOAP message and get response =head2 createAssertionQuery Create a new assertion query =head2 createAttributeRequest Create an attribute request =head2 validateAttributeRequest Validate an attribute request =head2 processAttributeRequest Process an attribute request =head2 buildAttributeResponse Build attribute response =head2 processAttributeResponse Process an attribute response =head2 getNameIDFormat Convert configuration string into SAML2 NameIDFormat string =head2 getHttpMethod Convert configuration string into Lasso HTTP Method integer =head2 getHttpMethodString Convert configuration Lasso HTTP Method integer into string =head2 getFirstHttpMethod Find a suitable HTTP method for an entity with a given protocol =head2 disableSignature Modify Lasso signature hint to disable signature =head2 forceSignature Modify Lasso signature hint to force signature =head2 disableSignatureVerification Modify Lasso signature hint to disable signature verification =head2 forceSignatureVerification Modify Lasso signature hint to force signature verification =head2 getAuthnContext Convert configuration string into SAML2 AuthnContextClassRef string =head2 timestamp2samldate Convert timestamp into SAML2 date format =head2 samldate2timestamp Convert SAML2 date format into timestamp =head2 sendLogoutResponseToServiceProvider Send logout response issue from a logout request =head2 sendLogoutRequestToProvider Send logout request to a provider =head2 sendLogoutRequestToProviders Send logout response issue from a logout request to all other providers. If information have to be displayed to users, such as iframe to send HTTP-Redirect or HTTP-POST logout request, then $self->{_info} will be updated. =head2 checkSignatureStatus Check signature status =head2 authnContext2authnLevel Return authentication level corresponding to authnContext =head2 authnLevel2authnContext Return SAML authentication context corresponding to authnLevel =head2 checkDestination If SAML Destination attribute is present, check it =head2 getSamlSession Try to recover the SAML session corresponding to id and return session datas =head2 createAttribute Create a new SAML attribute =head2 createAttributeValue Create a new SAML attribute value =head2 getEncryptionMode Return Lasso encryption mode =head2 setProviderEncryptionMode Set encryption mode on a provider =head2 deleteSAMLSecondarySessions Find and delete SAML sessions bounded to a primary session =head2 sendSLOErrorResponse Send an SLO error response =head2 getQueryString Get query string with or without CGI query_string() method =head1 SEE ALSO L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010, 2011, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2011, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2010, 2011 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthAD.pm0000644000175000017500000001020612605702673025514 0ustar clementclement##@file # AD authentication backend file ##@class # AD authentication backend class package Lemonldap::NG::Portal::AuthAD; use strict; our $VERSION = '1.4.6'; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::AuthLDAP); *_formateFilter = *Lemonldap::NG::Portal::UserDBAD::formateFilter; *getDisplayType = *Lemonldap::NG::Portal::AuthLDAP::getDisplayType; ## @apmethod int authInit() # Add specific attributes for search # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; $self->{ldapExportedVars}->{_AD_pwdLastSet} = 'pwdLastSet'; $self->{ldapExportedVars}->{_AD_userAccountControl} = 'userAccountControl'; $self->{ldapExportedVars}->{_AD_msDS_UACC} = 'msDS-User-Account-Control-Computed'; return $self->SUPER::authInit(); } ## @apmethod int authenticate() # Authenticate user by LDAP mechanism. # Check AD specific attribute to get password state. # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; my $res = $self->SUPER::authenticate; unless ( $res == PE_OK ) { # Check specific AD attributes my $pls = $self->{sessionInfo}->{_AD_pwdLastSet}; my $computed = $self->{sessionInfo}->{_AD_msDS_UACC}; my $mask = 0xf00000; # mask to get the 8 at 6th position my $expired_flag = 0x800000; # 8 at 6th position for flag UF_PASSWORD_EXPIRED to be set if ( ( $computed & $mask ) == $expired_flag ) { $self->lmLog( "[AD] Password has expired", 'warn' ); $res = PE_PP_PASSWORD_EXPIRED; } # Password must be changed if pwdLastSet 0 if ( $pls == 0 ) { $self->lmLog( "[AD] Password reset. User must change his password", 'warn' ); $res = PE_PP_CHANGE_AFTER_RESET; } } else { # Getting password max age (delay) my $ADPwdMaxAge = $self->{ADPwdMaxAge} || 0; $ADPwdMaxAge *= 10000000; # padding with '0' to obtain 0.1 micro-seconds # Getting password expiration warning time (delay) my $ADPwdExpireWarning = $self->{ADPwdExpireWarning} || 0; $ADPwdExpireWarning *= 10000000; # padding with '0' to obtain 0.1 micro-seconds if ( $ADPwdExpireWarning > $ADPwdMaxAge ) { $ADPwdExpireWarning = $ADPwdMaxAge; $self->lmLog( "Error: ADPwdExpireWarning > ADPwdMaxAge, this should not happen", 'warn' ); } # get userAccountControl to ckeck password expiration flags my $_adUac = $self->{sessionInfo}->{_AD_userAccountControl} || 0; # Compute current timestamp in AD format (date) my $time = time; # unix timestamp (seconds since Jan 01 1970) my $a_time = $time + 11644473600; # adding difference (in s) from Jan 01 1601 my $timestamp = $a_time . '0000000'; # padding with '0' to obatin 0.1 micro-seconds # Compute password expiration time (date) my $_pwdExpire = $self->{sessionInfo}->{_AD_pwdLastSet} || $timestamp; $_pwdExpire += $ADPwdMaxAge; # computing when the warning message is displayed on portal (date - delay = date) my $_pwdWarning = $_pwdExpire - $ADPwdExpireWarning; # display warning if account warning time before expiration is # reached and flag "password nevers expires" is not set if ( $timestamp > $_pwdWarning && $timestamp < $_pwdExpire && ( $_adUac & 0x10000 ) != 0x10000 ) { # calculating remaining time before password expiration my $remainingTime = $_pwdExpire - $timestamp; $self->info( "

" . sprintf( $self->msg(PM_PP_EXP_WARNING), $self->convertSec( substr( $remainingTime, 0, length($remainingTime) - 7 ) ) ) . "

" ); } } # Remember password if password reset needed $self->{oldpassword} = $self->{password} if ( $res == PE_PP_CHANGE_AFTER_RESET ); return $res; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBAD.pm0000644000175000017500000000331012542740733026620 0ustar clementclement##@file # AD password backend file ##@class # AD password backend class package Lemonldap::NG::Portal::PasswordDBAD; use strict; use Lemonldap::NG::Portal::Simple; #inherits Lemonldap::NG::Portal::_SMTP our $VERSION = '1.3.0'; use base qw(Lemonldap::NG::Portal::PasswordDBLDAP); *_formateFilter = *Lemonldap::NG::Portal::UserDBAD::formateFilter; *_search = *Lemonldap::NG::Portal::UserDBAD::search; ## @apmethod int modifyPassword() # Modify the password by LDAP mechanism. # Use AD specific method # @return Lemonldap::NG::Portal constant sub modifyPassword { my $self = shift; # Exit method if no password change requested return PE_OK unless ( $self->{newpassword} ); unless ( $self->ldap ) { return PE_LDAPCONNECTFAILED; } # Set the dn unless done before unless ( $self->{dn} ) { my $tmp = $self->_subProcess(qw(_formateFilter _search)); return $tmp if ($tmp); } $self->lmLog( "Modify password request for " . $self->{dn}, 'debug' ); # Call the modify password method for AD my $code = $self->ldap->userModifyPassword( $self->{dn}, $self->{newpassword}, $self->{confirmpassword}, $self->{oldpassword}, 1 ); return $code unless ( $code == PE_PASSWORD_OK ); # If force reset, set reset flag if ( $self->{forceReset} ) { my $result = $self->ldap->modify( $self->{dn}, replace => { 'pwdLastSet' => '0' } ); unless ( $result->code == 0 ) { $self->lmLog( "LDAP modify pwdLastSet error: " . $result->code, 'error' ); $code = PE_LDAPERROR; } $self->lmLog( "pwdLastSet set to 0", 'debug' ); } return $code; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBNull.pm0000644000175000017500000000121712542740733026366 0ustar clementclement## @file # Null userDB mechanism ## @class # Null userDB mechanism class package Lemonldap::NG::Portal::UserDBNull; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.0.0'; ## @apmethod int userDBInit() # Do nothing # @return Lemonldap::NG::Portal constant sub userDBInit { PE_OK; } ## @apmethod int getUser() # Do nothing # @return Lemonldap::NG::Portal constant sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Do nothing # @return Lemonldap::NG::Portal constant sub setSessionInfo { PE_OK; } ## @apmethod int setGroups() # Do nothing # @return Lemonldap::NG::Portal constant sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBNull.pm0000644000175000017500000000070412542740733027252 0ustar clementclement##@file # Null password backend file ##@class # Null password backend class package Lemonldap::NG::Portal::PasswordDBNull; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.1.0'; ## @apmethod int passwordDBInit() # Does nothing # @return Lemonldap::NG::Portal constant sub passwordDBInit { PE_OK; } ## @apmethod int modifyPassword() # Does nothing # @return Lemonldap::NG::Portal constant sub modifyPassword { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/CDA.pm0000644000175000017500000001017512542740733025001 0ustar clementclement## @file # Deprecated: use "cda" parameter instead ## @class # Deprecated: use "cda" parameter instead package Lemonldap::NG::Portal::CDA; use strict; use Lemonldap::NG::Portal::SharedConf qw(:all); our $VERSION = '1.0.0'; use base ('Lemonldap::NG::Portal::SharedConf'); *EXPORT_OK = *Lemonldap::NG::Portal::SharedConf::EXPORT_OK; *EXPORT_TAGS = *Lemonldap::NG::Portal::SharedConf::EXPORT_TAGS; *EXPORT = *Lemonldap::NG::Portal::SharedConf::EXPORT; ################## # OVERLOADED SUB # ################## ## @cmethod Lemonldap::NG::Portal::CDA new(array params) # Call Lemonldap::NG::Portal::SharedConf::new() with "cda" parameter set to 1 # @param params Lemonldap::NG::Portal::SharedConf::new() parameters # @return New Lemonldap::NG::Portal::CDA object sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->{cda} = 1; return $self; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::CDA - Perl extension for building Lemonldap::NG compatible portals with Cross Domain Authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::SharedConf( { cda => 1, configStorage => { type => 'DBI', dbiChain => "dbi:mysql:...", dbiUser => "lemonldap", dbiPassword => "password", dbiTable => "lmConfig", }, } ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # Write here the html form used to authenticate with CGI methods. # $portal->error returns the error message if athentification failed # Warning: by defaut, input names are "user" and "password" print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; print '
'; # In your form, the following value is required for redirection print ''; # Next, login and password print 'Login :
'; print 'Password : '; print ''; print '
'; } Modify your httpd.conf: SSLVerifyClient require SSLOptions +ExportCertData +CompatEnvVars +StdEnvVars =head1 DESCRIPTION This file is maintened only for compatibility. Now set "cda => 1" in the portal. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2007, 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2008 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthDBI.pm0000644000175000017500000000374212542740733025634 0ustar clementclement##@file # DBI authentication backend file ##@class # LDAP authentication backend class package Lemonldap::NG::Portal::AuthDBI; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::_WebForm Lemonldap::NG::Portal::_DBI); use strict; our $VERSION = '1.2.0'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @apmethod int authInit() # Check DBI paramaters #@return Lemonldap::NG::Portal constant sub authInit { my $self = shift; return PE_OK if ($initDone); unless ($self->{dbiAuthChain} and $self->{dbiAuthTable} and $self->{dbiAuthUser} and $self->{dbiAuthPassword} and $self->{dbiAuthLoginCol} and $self->{dbiAuthPasswordCol} ) { $self->lmLog( "Missing configuration parameters for DBI authentication", 'error' ); return PE_ERROR; } $self->{_authnLevel} = $self->{dbiAuthnLevel}; $initDone = 1; PE_OK; } ## @apmethod int authenticate() # Find row in DBI backend with user and password criterions #@return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; # Connect my $dbh = $self->dbh( $self->{dbiAuthChain}, $self->{dbiAuthUser}, $self->{dbiAuthPassword} ); return PE_ERROR unless $dbh; # Check credentials my $result = $self->check_password($dbh); if ($result) { return PE_OK; } else { return PE_BADCREDENTIALS; } } ## @apmethod int authFinish() # Disconnect. # @return Lemonldap::NG::Portal constant sub authFinish { my $self = shift; eval { $self->{_dbh}->disconnect(); }; PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "standardform"; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthNull.pm0000644000175000017500000000726012542740733026147 0ustar clementclement##@file # Null authentication backend file ##@class # Null authentication backend class package Lemonldap::NG::Portal::AuthNull; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.2.0'; ## @apmethod int authInit() # Does nothing # @return Lemonldap::NG::Portal constant sub authInit { PE_OK; } ## @apmethod int setAuthSessionInfo() # Set _user value to 'anonymous' and authenticationLevel to 0 # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{'_user'} = 'anonymous'; $self->{sessionInfo}->{authenticationLevel} = $self->{nullAuthnLevel}; PE_OK; } ## @apmethod int extractFormInfo() # Does nothing # @return Lemonldap::NG::Portal constant sub extractFormInfo { PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return ""; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthNull - Perl extension for building Lemonldap::NG compatible portals with no authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Null', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

Unable to work

"; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to create sessions for anonymous users. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthWebID.pm0000644000175000017500000001252312542740733026165 0ustar clementclement##@file # WebID authentication backend file ##@class # WebID authentication backend class package Lemonldap::NG::Portal::AuthWebID; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::AuthSSL; use Lemonldap::NG::Common::Regexp; use Regexp::Assemble; our $VERSION = '1.4.1'; our @ISA = qw(Lemonldap::NG::Portal::AuthSSL); our $initDone; our $reWebIDWhitelist; BEGIN { eval { require threads::shared; threads::shared::share($initDone); threads::shared::share($reWebIDWhitelist); }; } *getDisplayType = *Lemonldap::NG::Portal::AuthSSL::getDisplayType; ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; my $tmp = $self->SUPER::authInit(@_); return $tmp unless ( $tmp eq PE_OK ); unless ($initDone) { eval "use Web::ID"; $self->abort( 'Unable to load Web::ID', $@ ) if ($@); $initDone++; # Now examine white list and compile it my @hosts = split /\s+/, $self->{webIDWhitelist}; $self->abort( 'WebID white list is empty', 'Set it in manager, use * to accept all FOAF providers' ) unless (@hosts); my $re = Regexp::Assemble->new(); foreach my $h (@hosts) { $self->lmLog( "Add $h in WebID whitelist", 'debug' ); $h = quotemeta($h); $h =~ s/\\\*/\.\*\?/g; $re->add($h); } $reWebIDWhitelist = '^https?://' . $re->as_string . '(?:/.*|)$'; } PE_OK; } sub extractFormInfo { my $self = shift; # 1. Verify SSL exchange unless ( $ENV{SSL_CLIENT_S_DN} ) { $self->_sub( 'userError', "No certificate found for " . $self->ipAddr ); $self->lmLog( 'No certificate found, be sure to have "SSLOptions +StdEnvVars +ExportCertData" for .pl files', 'debug' ); return PE_CERTIFICATEREQUIRED; } # 2. Return an error if SSL_CLIENT_CERT is not set $self->abort( 'SSL configuration error', 'Unable to get client certificate, SSL_CLIENT_CERT is not set
' . 'Be sure to have "SSLOptions +StdEnvVars +ExportCertData" for .pl files' ) unless ( $ENV{SSL_CLIENT_CERT} ); # 3. Verify that certificate is WebID compliant # NB: WebID URI is used as user field eval { $self->{_webid} = Web::ID->new( certificate => $ENV{SSL_CLIENT_CERT} ) and $self->{user} = $self->{_webid}->uri->as_string; }; return PE_BADCERTIFICATE if ( $@ or not( $self->{user} ) ); # 4. Verify that FOAF host is in white list return PE_BADPARTNER unless ( $self->{user} =~ $reWebIDWhitelist ); # 5. Verify FOAF document return PE_BADCREDENTIALS unless ( $self->{_webid}->valid() ); $self->{_webIdAuthDone}++; # 6. OK, access granted return PE_OK; } ## @apmethod int authenticate() # Just test that authentication has been done: job is done in # extractFormInfo() else launch extractFormInfo() # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; return $self->{_webIdAuthDone} ? PE_OK : PE_ERROR; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthWebID - Perl extension for building Lemonldap::NG compatible portals with WebID authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'WebID', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

Unable to work

"; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use WebID authentication mechanism. See L for usage and other methods. =head1 SEE ALSO L, L, L, L L =head1 AUTHOR =over =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2013 by Xavier Guimard, Ex.guimard@free.frE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBChoice.pm0000644000175000017500000000222612542740733026647 0ustar clementclement##@file # Choice user backend file ##@class # Choice user backend class package Lemonldap::NG::Portal::UserDBChoice; use strict; use Lemonldap::NG::Portal::_Choice; use Lemonldap::NG::Portal::Simple; #inherits Lemonldap::NG::Portal::_Choice our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Does nothing # @return Lemonldap::NG::Portal constant sub userDBInit { my $self = shift; return $self->_choice->try( 'userDBInit', 1 ); } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal constant sub getUser { my $self = shift; return $self->_choice->try( 'getUser', 1 ); } ## @apmethod int setSessionInfo() # Does nothing # @return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; return $self->_choice->try( 'setSessionInfo', 1 ); } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal constant sub setGroups { my $self = shift; return $self->_choice->try( 'setGroups', 1 ); } ## @apmethod int userDBFinish() # Does nothing # @return Lemonldap::NG::Portal constant sub userDBFinish { my $self = shift; return $self->_choice->try( 'userDBFinish', 1 ); } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm0000644000175000017500000004411012542740733025312 0ustar clementclement##@file # menu for lemonldap::ng portal ##@class # menu class for lemonldap::ng portal package Lemonldap::NG::Portal::Menu; use strict; use warnings; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_LibAccess; use base qw(Lemonldap::NG::Portal::_LibAccess); use Clone qw(clone); our $VERSION = '1.4.0'; our $catlevel = 0; ## @method void menuInit() # Prepare menu template elements # @return nothing sub menuInit { my $self = shift; $self->{apps}->{imgpath} ||= '/apps/'; # Modules to display $self->{menuModules} ||= "Appslist ChangePassword LoginHistory Logout"; $self->{menuDisplayModules} = $self->displayModules(); # Extract password from POST data $self->{oldpassword} = $self->param('oldpassword'); $self->{newpassword} = $self->param('newpassword'); $self->{confirmpassword} = $self->param('confirmpassword'); $self->{dn} = $self->{sessionInfo}->{dn}; $self->{user} = $self->{sessionInfo}->{_user}; # Try to change password $self->{menuError} = $self->_subProcess( qw(passwordDBInit modifyPassword passwordDBFinish sendPasswordMail)) unless $self->{ignorePasswordChange}; # Default menu error code $self->{menuError} = PE_PASSWORD_OK if ( $self->{passwordWasChanged} ); $self->{menuError} ||= $self->{error}; # Tab to display # Get the tab URL parameter $self->{menuDisplayTab} = $self->param("tab") || "none"; # Default to appslist if invalid tab URL parameter $self->{menuDisplayTab} = "appslist" unless ( $self->{menuDisplayTab} =~ /^(password|logout|loginHistory)$/ ); # Force password tab in case of password error $self->{menuDisplayTab} = "password" if ( ( scalar( grep { $_ == $self->{menuError} } ( 25, #PE_PP_CHANGE_AFTER_RESET 26, #PE_PP_PASSWORD_MOD_NOT_ALLOWED 27, #PE_PP_MUST_SUPPLY_OLD_PASSWORD 28, #PE_PP_INSUFFICIENT_PASSWORD_QUALITY 29, #PE_PP_PASSWORD_TOO_SHORT 30, #PE_PP_PASSWORD_TOO_YOUNG 31, #PE_PP_PASSWORD_IN_HISTORY 32, #PE_PP_GRACE 33, #PE_PP_EXP_WARNING 34, #PE_PASSWORD_MISMATCH 39, #PE_BADOLDPASSWORD 74, #PE_MUST_SUPPLY_OLD_PASSWORD ) ) ) ); # Application list for old templates if ( $self->{useOldMenuItems} ) { $self->{menuAppslistMenu} = $self->appslistMenu(); $self->{menuAppslistDesc} = $self->appslistDescription(); } return; } ## @method arrayref displayModules() # List modules that can be displayed in Menu # @return modules list sub displayModules { my $self = shift; my $displayModules = []; # Modules list my @modules = split( /\s/, $self->{menuModules} ); # Foreach module, eval condition # Store module in result if condition is valid foreach my $module (@modules) { my $cond = $self->{ 'portalDisplay' . $module }; $cond = 1 unless defined $cond; $self->lmLog( "Evaluate condition $cond for module $module", 'debug' ); if ( $self->safe->reval($cond) ) { my $moduleHash = { $module => 1 }; $moduleHash->{'APPSLIST_LOOP'} = $self->appslist() if ( $module eq 'Appslist' ); if ( $module eq 'LoginHistory' ) { $moduleHash->{'SUCCESS_LOGIN'} = $self->mkSessionArray( $self->{sessionInfo}->{loginHistory}->{successLogin}, "", 0, 0 ); $moduleHash->{'FAILED_LOGIN'} = $self->mkSessionArray( $self->{sessionInfo}->{loginHistory}->{failedLogin}, "", 0, 1 ); } push @$displayModules, $moduleHash; } } return $displayModules; } ## @method arrayref appslist() # Returns categories and applications list as HTML::Template loop # @return categories and applications list sub appslist { my ($self) = splice @_; my $appslist = []; return $appslist unless defined $self->{applicationList}; # Reset level $catlevel = 0; my $applicationList = clone( $self->{applicationList} ); my $filteredList = $self->_filter($applicationList); push @$appslist, $self->_buildCategoryHash( "", $filteredList, $catlevel ); # We must return an ARRAY ref return ( ref $appslist->[0]->{categories} eq "ARRAY" ) ? $appslist->[0]->{categories} : []; } ## @method private hashref _buildCategoryHash(string catname,hashref cathash, int catlevel) # Build hash for a category # @param catname Category name # @param cathash Hash of category elements # @param catlevel Category level # @return Category Hash sub _buildCategoryHash { my ( $self, $catid, $cathash, $catlevel ) = splice @_; my $catname = $cathash->{catname} || $catid; my $applications; my $categories; # Extract applications from hash my $apphash; foreach my $catkey ( sort keys %$cathash ) { next if $catkey =~ /(type|options|catname)/; if ( $cathash->{$catkey}->{type} eq "application" ) { $apphash->{$catkey} = $cathash->{$catkey}; } } # Display applications first if ( scalar keys %$apphash > 0 ) { foreach my $appkey ( sort keys %$apphash ) { push @$applications, $self->_buildApplicationHash( $appkey, $apphash->{$appkey} ); } } # Display subcategories foreach my $catkey ( sort keys %$cathash ) { next if $catkey =~ /(type|options|catname)/; if ( $cathash->{$catkey}->{type} eq "category" ) { push @$categories, $self->_buildCategoryHash( $catkey, $cathash->{$catkey}, $catlevel + 1 ); } } my $categoryHash = { category => 1, catname => $catname, catid => $catid, catlevel => $catlevel }; $categoryHash->{applications} = $applications if $applications; $categoryHash->{categories} = $categories if $categories; return $categoryHash; } ## @method private hashref _buildApplicationHash(string appid, hashref apphash) # Build hash for an application # @param $appid Application ID # @param $apphash Hash of application elements # @return Application Hash sub _buildApplicationHash { my ( $self, $appid, $apphash ) = splice @_; my $applications; # Get application items my $appname = $apphash->{options}->{name} || $appid; my $appuri = $apphash->{options}->{uri} || ""; my $appdesc = $apphash->{options}->{description}; my $applogo = $apphash->{options}->{logo}; # Detect sub applications my $subapphash; foreach my $key ( sort keys %$apphash ) { next if $key =~ /(type|options|catname)/; if ( $apphash->{$key}->{type} eq "application" ) { $subapphash->{$key} = $apphash->{$key}; } } # Display sub applications if ( scalar keys %$subapphash > 0 ) { foreach my $appkey ( sort keys %$subapphash ) { push @$applications, $self->_buildApplicationHash( $appkey, $subapphash->{$appkey} ); } } my $applicationHash = { application => 1, appname => $appname, appuri => $appuri, appdesc => $appdesc, applogo => $applogo, appid => $appid, }; $applicationHash->{applications} = $applications if $applications; return $applicationHash; } ## @method string appslistMenu() # Returns HTML code for application list menu. # @return HTML string sub appslistMenu { my $self = shift; # We no more use XML file for menu configuration unless ( defined $self->{applicationList} ) { $self->abort( "XML menu configuration is deprecated", "Please use lmMigrateConfFiles2ini to migrate your menu configuration" ); } # Use configuration to get menu parameters my $applicationList = clone( $self->{applicationList} ); my $filteredList = $self->_filter($applicationList); return $self->_displayConfCategory( "", $filteredList, $catlevel ); } ## @method string appslistDescription() # Returns HTML code for application description. # @return HTML string sub appslistDescription { my $self = shift; # We no more use XML file for menu configuration unless ( defined $self->{applicationList} ) { $self->lmLog( "XML menu configuration is deprecated. Please use lmMigrateConfFiles2ini to migrate your menu configuration", 'error' ); return " "; } # Use configuration to get menu parameters my $applicationList = clone( $self->{applicationList} ); return $self->_displayConfDescription( "", $applicationList ); } ## @method string _displayConfCategory(string catname, hashref cathash, int catlevel) # Creates and returns HTML code for a category. # @param catname Category name # @param cathash Hash of category elements # @param catlevel Category level # @return HTML string sub _displayConfCategory { my ( $self, $catname, $cathash, $catlevel ) = splice @_; my $html; my $key; # Init HTML list $html .= "
    \n"; $html .= "
  • \n"; $html .= "$catname\n" if $catname; # Increase category level $catlevel++; # Extract applications from hash my $apphash; foreach $key ( keys %$cathash ) { next if $key =~ /(type|options|catname)/; if ( $cathash->{$key}->{type} and $cathash->{$key}->{type} eq "application" ) { $apphash->{$key} = $cathash->{$key}; } } # display applications first if ( scalar keys %$apphash > 0 ) { $html .= "
      "; foreach $key ( keys %$apphash ) { $html .= $self->_displayConfApplication( $key, $apphash->{$key} ); } $html .= "
    "; } # Display subcategories foreach $key ( keys %$cathash ) { next if $key =~ /(type|options|catname)/; if ( $cathash->{$key}->{type} and $cathash->{$key}->{type} eq "category" ) { $html .= $self->_displayConfCategory( $key, $cathash->{$key}, $catlevel ); } } # Close HTML list $html .= "
  • \n"; $html .= "
\n"; return $html; } ## @method private string _displayConfApplication(string appid, hashref apphash) # Creates HTML code for an application. # @param $appid Application ID # @param $apphash Hash of application elements # @return HTML string sub _displayConfApplication { my $self = shift; my ( $appid, $apphash ) = @_; my $html; my $key; # Get application items my $appname = $apphash->{options}->{name} || $appid; my $appuri = $apphash->{options}->{uri} || ""; # Display application $html .= "
  • " . ( $appuri ? "$appname" : "$appname" ) . "\n"; # Detect sub applications my $subapphash; foreach $key ( keys %$apphash ) { next if $key =~ /(type|options|catname)/; if ( $apphash->{$key}->{type} eq "application" ) { $subapphash->{$key} = $apphash->{$key}; } } # Display sub applications if ( scalar keys %$subapphash > 0 ) { $html .= "
      "; foreach $key ( keys %$subapphash ) { $html .= $self->_displayConfApplication( $key, $subapphash->{$key} ); } $html .= "
    "; } $html .= "
  • "; return $html; } ## @method private string _displayConfDescription(string appid, hashref apphash) # Create HTML code for application description. # @param $appid Application ID # @param $apphash Hash # @return HTML string sub _displayConfDescription { my $self = shift; my ( $appid, $apphash ) = @_; my $html = ""; my $key; if ( defined $apphash->{type} and $apphash->{type} eq "application" ) { # Get application items my $appname = $apphash->{options}->{name} || $appid; my $appuri = $apphash->{options}->{uri} || ""; my $appdesc = $apphash->{options}->{description}; my $applogofile = $apphash->{options}->{logo}; my $applogo = $self->{apps}->{imgpath} . $applogofile if $applogofile; # Display application description $html .= "
    \n"; $html .= "\"$appid\n" if $applogofile; $html .= "

    $appname

    \n" if defined $appname; $html .= "

    $appdesc

    \n" if defined $appdesc; $html .= "
    \n"; } # Sublevels foreach $key ( keys %$apphash ) { next if $key =~ /(type|options|catname)/; $html .= $self->_displayConfDescription( $key, $apphash->{$key} ); } return $html; } ## @method private string _filter(hashref apphash) # Duplicate hash reference # Remove unauthorized menu elements # Hide empty categories # @param $apphash Menu elements # @return filtered hash sub _filter { my ( $self, $apphash ) = splice @_; my $filteredHash; my $key; # Copy hash reference into a new hash foreach $key ( keys %$apphash ) { $filteredHash->{$key} = $apphash->{$key}; } # Filter hash $self->_filterHash($filteredHash); # Hide empty categories $self->_isCategoryEmpty($filteredHash); return $filteredHash; } ## @method private string _filterHash(hashref apphash) # Remove unauthorized menu elements # @param $apphash Menu elements # @return filtered hash sub _filterHash { my $self = shift; my ($apphash) = @_; my $key; my $appkey; foreach $key ( keys %$apphash ) { next if $key =~ /(type|options|catname)/; if ( $apphash->{$key}->{type} and $apphash->{$key}->{type} eq "category" ) { # Filter the category $self->_filterHash( $apphash->{$key} ); } if ( $apphash->{$key}->{type} and $apphash->{$key}->{type} eq "application" ) { # Find sub applications and filter them foreach $appkey ( keys %{ $apphash->{$key} } ) { next if $appkey =~ /(type|options|catname)/; # We have sub elements, so we filter them $self->_filterHash( $apphash->{$key} ); } # Check rights my $appdisplay = $apphash->{$key}->{options}->{display} || "auto"; my $appuri = $apphash->{$key}->{options}->{uri}; # Remove if display is "no" or "off" delete $apphash->{$key} and next if ( $appdisplay =~ /^(no|off)$/ ); # Keep node if display is "yes" or "on" next if ( $appdisplay =~ /^(yes|on)$/ ); # Check grant function if display is "auto" (this is the default) delete $apphash->{$key} unless ( $self->_grant($appuri) ); next; } } } ## @method private void _isCategoryEmpty(hashref apphash) # Check if a category is empty # @param $apphash Menu elements # @return boolean sub _isCategoryEmpty { my $self = shift; my ($apphash) = @_; my $key; # Test sub categories foreach $key ( keys %$apphash ) { next if $key =~ /(type|options|catname)/; if ( $apphash->{$key}->{type} and $apphash->{$key}->{type} eq "category" ) { delete $apphash->{$key} if $self->_isCategoryEmpty( $apphash->{$key} ); } } # Test this category if ( $apphash->{type} and $apphash->{type} eq "category" ) { # Temporary store 'options' my $tmp_options = $apphash->{options}; my $tmp_catname = $apphash->{catname}; delete $apphash->{type}; delete $apphash->{options}; delete $apphash->{catname}; if ( scalar( keys %$apphash ) ) { # There are sub categories or sub applications # Restore type and options $apphash->{type} = "category"; $apphash->{options} = $tmp_options; $apphash->{catname} = $tmp_catname; # Return false return 0; } else { # Return true return 1; } } return 0; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::Menu - Portal menu functions =head1 SYNOPSIS use Lemonldap::NG::Portal::Simple; my $portal = Lemonldap::NG::Portal::Simple->new( { } ); # Init portal menu $portal->menuInit(); =head1 DESCRIPTION Lemonldap::NG::Portal::Menu is used to build menu. =head1 SEE ALSO L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Choice.pm0000644000175000017500000001577212542740733025753 0ustar clementclement## @file # Common functions for authentication choice ## @class # Common functions for authentication choice package Lemonldap::NG::Portal::_Choice; use Lemonldap::NG::Portal::Simple; use Scalar::Util 'weaken'; our $VERSION = '1.4.0'; ## @cmethod Lemonldap::NG::Portal::_Choice new(Lemonldap::NG::Portal::Simple portal) # Constructor # @param $portal Lemonldap::NG::Portal::Simple object # @return new Lemonldap::NG::Portal::_Choice object sub new { my ( $class, $portal ) = splice @_; # Create object with portal parameter my $self = bless { p => $portal }, $class; weaken $self->{p}; # Recover authChoice from session $portal->{_authChoice} ||= $portal->{sessionInfo}->{_authChoice}; # Test authChoice unless ( $portal->{_authChoice} and exists $portal->{authChoiceModules}->{ $portal->{_authChoice} } ) { $portal->lmLog( "No authentication choice done, or wrong choice", 'debug' ); $portal->{_authChoice} = ""; } # Special workaround for Captcha # Init Captcha to have it displayed even if no choice already done if ( $portal->{captcha_login_enabled} ) { eval { $portal->initCaptcha(); }; $portal->lmLog( "Can't init captcha: $@", "error" ) if $@; } # Special workaround for SAML # because we cannot easily set SSO return URL # and SLO URL with authChoice parameter # Test authForce to see if URL is an SAML URL unless ( $portal->{_authChoice} ) { my $samlModule = 'Lemonldap::NG::Portal::AuthSAML'; my $samlForce = 0; eval { $portal->loadModule( $samlModule, 1 ); $authForce = $samlModule . '::authForce'; $samlForce = $portal->$authForce; }; if ($@) { $portal->lmLog( "SAML choice force not tested: $@", 'debug' ); } # Force SAML choice if needed if ($samlForce) { $portal->lmLog( "SAML is a forced choice", 'debug' ); $portal->{_authChoice} = 'forcedSAML'; $portal->{authChoiceModules}->{'forcedSAML'} = 'SAML|SAML|Null'; } } return $self unless $portal->{_authChoice}; # Find modules associated to authChoice my ( $auth, $userDB, $passwordDB ) = split( /\|/, $portal->{authChoiceModules}->{ $portal->{_authChoice} } ); if ( $auth and $userDB and $passwordDB ) { my $modulePrefix = 'Lemonldap::NG::Portal::'; my $authModule = $modulePrefix . 'Auth' . $auth; my $userDBModule = $modulePrefix . 'UserDB' . $userDB; my $passwordDBModule = $modulePrefix . 'PasswordDB' . $passwordDB; foreach my $module ( $authModule, $userDBModule, $passwordDBModule ) { $portal->abort( 'Bad configuration', "Unable to load $module" ) unless $portal->loadModule($module); } $self->{modules} = [ { m => $authModule, n => $auth }, { m => $userDBModule, n => $userDB }, { m => $passwordDBModule, n => $passwordDB } ]; $portal->lmLog( "Authentication module $auth selected", 'debug' ); $portal->lmLog( "User module $userDB selected", 'debug' ); $portal->lmLog( "Password module $passwordDB selected", 'debug' ); } else { $portal->abort( "Authentication choice " . $self->{_authChoice} . " value is invalid" ); } return $self; } ## @method int try(string sub,int type) # Main method: try to call $sub method in the choosen module. # If no choice, return default behavior # @param sub name of the method to launch # @param type 0 for authentication, 1 for userDB, 2 for passworDB # @return Lemonldap::NG::Portal error code returned by method $sub sub try { my ( $self, $sub, $type ) = splice @_; # Default behavior in no choice unless ( defined $self->{modules} ) { return PE_FIRSTACCESS if ( $sub eq 'extractFormInfo' ); return PE_OK; } # Launch wanted subroutine my $s = $self->{modules}->[$type]->{m} . "::$sub"; my $name = $self->{modules}->[$type]->{n}; $self->{p} ->lmLog( "Try to launch $sub on module $name (type $type)", 'debug' ); return $self->{p}->$s(); } package Lemonldap::NG::Portal::Simple; ## @method private Lemonldap::NG::Portal::_Choice _choice() # Return Lemonldap::NG::Portal::_Choice object and builds it if it was not build # before. This method is used if authentication is set to "Choice". # @return Lemonldap::NG::Portal::_Choice object sub _choice { my $self = shift; # Check if choice is already built return $self->{_choice} if ( $self->{_choice} ); # Get authentication choice $self->{_authChoice} = $self->param( $self->{authChoiceParam} ); # Check XSS Attack $self->{_authChoice} = "" if ( $self->{_authChoice} and $self->checkXSSAttack( $self->{authChoiceParam}, $self->{_authChoice} ) ); $self->lmLog( "Authentication choice found: " . $self->{_authChoice}, 'debug' ) if $self->{_authChoice}; return $self->{_choice} = Lemonldap::NG::Portal::_Choice->new($self); } ## @method private Lemonldap::NG::Portal::_Choice _buildAuthLoop() # Build authentication loop displayed in template # @return authLoop rarray reference sub _buildAuthLoop { my $self = shift; my @authLoop; # Test authentication choices unless ( ref $self->{authChoiceModules} eq 'HASH' ) { $self->lmLog( "No authentication choices defined", 'warn' ); return []; } foreach ( sort keys %{ $self->{authChoiceModules} } ) { my $name = $_; # Ignore 'forcedSAML' next if $name eq 'forcedSAML'; # Name can have a digit as first character # for sorting purpose # Remove it in displayed name $name =~ s/^(\d*)?(\s*)?//; # Replace also _ by space for a nice display $name =~ s/\_/ /g; # Find modules associated to authChoice my ( $auth, $userDB, $passwordDB, $url ) = split( /\|/, $self->{authChoiceModules}->{$_} ); if ( $auth and $userDB and $passwordDB ) { # Default URL $url ||= "#"; # Options to store in the loop my $optionsLoop = { name => $name, key => $_, module => $auth, url => $url }; # Get displayType for this module my $modulePrefix = 'Lemonldap::NG::Portal::'; my $authModule = $modulePrefix . 'Auth' . $auth; $self->loadModule($authModule); my $displayType = &{ $authModule . '::getDisplayType' }; $self->lmLog( "Display type $displayType for module $auth", 'debug' ); $optionsLoop->{$displayType} = 1; # Register item in loop push @authLoop, $optionsLoop; $self->lmLog( "Authentication choice $name will be displayed", 'debug' ); } else { $self->abort("Authentication choice $_ value is invalid"); } } return \@authLoop; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LDAP.pm0000644000175000017500000004767412605702673025310 0ustar clementclement##@file # LDAP common functions ##@class # LDAP common functions package Lemonldap::NG::Portal::_LDAP; use Net::LDAP; #inherits use Net::LDAP::Util qw(escape_filter_value); use Exporter; use base qw(Exporter Net::LDAP); use Lemonldap::NG::Portal::Simple; use Encode; use Unicode::String qw(utf8); use strict; our @EXPORT = qw(ldap); our $VERSION = '1.4.6'; our $ppLoaded = 0; BEGIN { eval { require threads::shared; threads::shared::share($ppLoaded); }; } ## @cmethod Lemonldap::NG::Portal::_LDAP new(Lemonldap::NG::Portal::Simple portal) # Build a Net::LDAP object using parameters issued from $portal # @return Lemonldap::NG::Portal::_LDAP object sub new { my $class = shift; my $portal = shift; my $self; unless ($portal) { $class->abort("$class : portal argument required !"); } my $useTls = 0; my $tlsParam; my @servers = (); foreach my $server ( split /[\s,]+/, $portal->{ldapServer} ) { if ( $server =~ m{^ldap\+tls://([^/]+)/?\??(.*)$} ) { $useTls = 1; $server = $1; $tlsParam = $2 || ""; } else { $useTls = 0; } push @servers, $server; } $self = Net::LDAP->new( \@servers, onerror => undef, ( $portal->{ldapPort} ? ( port => $portal->{ldapPort} ) : () ), ( $portal->{ldapTimeout} ? ( timeout => $portal->{ldapTimeout} ) : () ), ( $portal->{ldapVersion} ? ( version => $portal->{ldapVersion} ) : () ), ( $portal->{ldapRaw} ? ( raw => $portal->{ldapRaw} ) : () ), ); unless ($self) { $portal->lmLog( $@, 'error' ); return 0; } bless $self, $class; if ($useTls) { my %h = split( /[&=]/, $tlsParam ); $h{cafile} = $portal->{caFile} if ( $portal->{caFile} ); $h{capath} = $portal->{caPath} if ( $portal->{caPath} ); my $mesg = $self->start_tls(%h); if ( $mesg->code ) { $portal->lmLog( 'StartTLS failed', 'error' ); return 0; } } $self->{portal} = $portal; # Setting default LDAP password storage encoding to utf-8 $self->{portal}->{ldapPwdEnc} ||= 'utf-8'; return $self; } ## @method Net::LDAP::Message bind(string dn, hash args) # Reimplementation of Net::LDAP::bind(). Connection is done : # - with $dn and $args->{password} as dn/password if defined, # - or with Lemonldap::NG account, # - or with an anonymous bind. # @param $dn LDAP distinguish name # @param %args See Net::LDAP(3) manpage for more # @return Net::LDAP::Message sub bind { my $self = shift; my $mesg; my ( $dn, %args ) = splice @_; unless ($dn) { $dn = $self->{portal}->{managerDn}; $args{password} = $self->{portal}->{managerPassword}; } if ( $dn && $args{password} ) { if ( $self->{portal}->{ldapPwdEnc} ne 'utf-8' ) { eval { my $tmp = encode( $self->{portal}->{ldapPwdEnc}, decode( 'utf-8', $args{password} ) ); $args{password} = $tmp; }; print STDERR "$@\n" if ($@); } $mesg = $self->SUPER::bind( $dn, %args ); } else { $mesg = $self->SUPER::bind(); } return $mesg; } ## @method private boolean loadPP () # Load Net::LDAP::Control::PasswordPolicy # @return true if succeed. sub loadPP { my $self = shift; return 1 if ($ppLoaded); # Minimal version of Net::LDAP required if ( $Net::LDAP::VERSION < 0.38 ) { $self->{portal}->abort( "Module Net::LDAP is too old for password policy, please install version 0.38 or higher" ); } # Require Perl module eval { require Net::LDAP::Control::PasswordPolicy }; if ($@) { $self->{portal}->lmLog( "Module Net::LDAP::Control::PasswordPolicy not found in @INC", 'error' ); return 0; } $ppLoaded = 1; } ## @method protected int userBind(string dn, hash args) # Call bind() with dn/password and return # @param $dn LDAP distinguish name # @param %args See Net::LDAP(3) manpage for more # @return Lemonldap::NG portal error code sub userBind { my $self = shift; if ( $self->{portal}->{ldapPpolicyControl} ) { # Create Control object my $pp = Net::LDAP::Control::PasswordPolicy->new(); # Bind with user credentials my $mesg = $self->bind( @_, control => [$pp] ); # Get server control response my ($resp) = $mesg->control("1.3.6.1.4.1.42.2.27.8.5.1"); # Return direct unless control resonse unless ( defined $resp ) { if ( $mesg->code == 49 ) { $self->{portal}->_sub( 'userError', "Bad password for $self->{portal}->{user}" ); return PE_BADCREDENTIALS; } return ( $mesg->code == 0 ? PE_OK : PE_LDAPERROR ); } # Check for ppolicy error my $pp_error = $resp->pp_error; if ( defined $pp_error ) { $self->{portal}->_sub( 'userError', "Password policy error $pp_error for $self->{portal}->{user}" ); return [ PE_PP_PASSWORD_EXPIRED, PE_PP_ACCOUNT_LOCKED, PE_PP_CHANGE_AFTER_RESET, PE_PP_PASSWORD_MOD_NOT_ALLOWED, PE_PP_MUST_SUPPLY_OLD_PASSWORD, PE_PP_INSUFFICIENT_PASSWORD_QUALITY, PE_PP_PASSWORD_TOO_SHORT, PE_PP_PASSWORD_TOO_YOUNG, PE_PP_PASSWORD_IN_HISTORY, ]->[$pp_error]; } elsif ( $mesg->code == 0 ) { # Get expiration warning and graces if ( $resp->grace_authentications_remaining ) { $self->{portal}->info( "

    " . $resp->grace_authentications_remaining . " " . $self->{portal}->msg(PM_PP_GRACE) . "

    " ); } if ( $resp->time_before_expiration ) { $self->{portal}->info( "

    " . sprintf( $self->{portal}->msg(PM_PP_EXP_WARNING), $self->{portal} ->convertSec( $resp->time_before_expiration ) ) . "

    " ); } return PE_OK; } } else { my $mesg = $self->bind(@_); if ( $mesg->code == 0 ) { return PE_OK; } } $self->{portal} ->_sub( 'userError', "Bad password for $self->{portal}->{user}" ); return PE_BADCREDENTIALS; } ## @method int userModifyPassword(string dn, string newpassword, string confirmpassword, string oldpassword, boolean ad) # Change user's password. # @param $dn DN # @param $newpassword New password # @param $confirmpassword New password # @param $oldpassword Current password # @param $ad Active Directory mode # @return Lemonldap::NG::Portal constant sub userModifyPassword { my ( $self, $dn, $newpassword, $confirmpassword, $oldpassword, $ad ) = splice @_; my $ppolicyControl = $self->{portal}->{ldapPpolicyControl}; my $setPassword = $self->{portal}->{ldapSetPassword}; my $asUser = $self->{portal}->{ldapChangePasswordAsUser}; my $requireOldPassword = $self->{portal}->{portalRequireOldPassword}; my $passwordAttribute = "userPassword"; my $err; my $mesg; # Verify confirmation password matching unless ( $newpassword eq $confirmpassword ) { $self->{portal}->lmLog( "Password $newpassword and password $confirmpassword are not the same", 'debug' ); return PE_PASSWORD_MISMATCH; } # Adjust configuration for AD if ($ad) { $ppolicyControl = 0; $setPassword = 0; $passwordAttribute = "unicodePwd"; # Encode password for AD $newpassword = utf8( chr(34) . $newpassword . chr(34) )->utf16le(); if ( $oldpassword and $asUser ) { $oldpassword = utf8( chr(34) . $oldpassword . chr(34) )->utf16le(); } $self->{portal}->lmLog( "Active Directory mode enabled", 'debug' ); } # First case: no ppolicy if ( !$ppolicyControl ) { if ($setPassword) { # Bind as user if oldpassword and ldapChangePasswordAsUser if ( $oldpassword and $asUser ) { $mesg = $self->bind( $dn, password => $oldpassword ); if ( $mesg->code != 0 ) { $self->{portal}->lmLog( "Bad old password", 'debug' ); return PE_BADOLDPASSWORD; } } # Use SetPassword extended operation require Net::LDAP::Extension::SetPassword; $mesg = ($oldpassword) ? $self->set_password( user => $dn, oldpasswd => $oldpassword, newpasswd => $newpassword ) : $self->set_password( user => $dn, newpasswd => $newpassword ); # Catch the "Unwilling to perform" error if ( $mesg->code == 53 ) { $self->{portal}->lmLog( "Bad old password", 'debug' ); return PE_BADOLDPASSWORD; } } else { # AD specific # Change password as user with a delete/add modification if ( $ad and $oldpassword and $asUser ) { $mesg = $self->modify( $dn, changes => [ delete => [ $passwordAttribute => $oldpassword ], add => [ $passwordAttribute => $newpassword ] ] ); } else { if ($requireOldPassword) { return PE_MUST_SUPPLY_OLD_PASSWORD if ( !$oldpassword ); # Check old password with a bind $mesg = $self->bind( $dn, password => $oldpassword ); # For AD password expiration to work: # ppolicy must be desactivated, # and "change as user" must be desactivated if ($ad) { if ( $mesg->error =~ /LdapErr: .* data ([^,]+),.*/ ) { # extended data message code: # 532: password expired (but provided password is correct) # 773: must change password at next connection (but provided password is correct) # 52e: password is incorrect unless ( ( $1 eq '532' ) || ( $1 eq '773' ) ) { $self->{portal} ->lmLog( "Bad old password", 'warn' ); return PE_BADOLDPASSWORD; } } # if error message has not been catched, then it IS a success } else { # this is not AD, a 0 error code means good old password if ( $mesg->code != 0 ) { $self->{portal} ->lmLog( "Bad old password", 'warn' ); return PE_BADOLDPASSWORD; } } # Rebind as Manager only if user is not granted to change its password $self->bind() unless $asUser; } # Use standard modification $mesg = $self->modify( $dn, replace => { $passwordAttribute => $newpassword } ); } } $self->{portal} ->lmLog( "Modification return code: " . $mesg->code, 'debug' ); return PE_WRONGMANAGERACCOUNT if ( $mesg->code == 50 || $mesg->code == 8 ); return PE_PP_INSUFFICIENT_PASSWORD_QUALITY if ( $mesg->code == 53 && $ad ); return PE_PP_PASSWORD_MOD_NOT_ALLOWED if ( $mesg->code == 19 && $ad ); return PE_LDAPERROR unless ( $mesg->code == 0 ); $self->{portal} ->_sub( 'userNotice', "Password changed $self->{portal}->{user}" ); # Rebind as manager for next LDAP operations if we were bound as user $self->bind() if $asUser; return PE_PASSWORD_OK; } else { # Create Control object my $pp = Net::LDAP::Control::PasswordPolicy->new; if ($setPassword) { # Bind as user if oldpassword and ldapChangePasswordAsUser if ( $oldpassword and $asUser ) { $mesg = $self->bind( $dn, password => $oldpassword ); if ( $mesg->code != 0 ) { $self->{portal}->lmLog( "Bad old password", 'debug' ); return PE_BADOLDPASSWORD; } } # Use SetPassword extended operation # Warning: need a patch on Perl-LDAP # See http://groups.google.com/group/perl.ldap/browse_thread/thread/5703a41ccb17b221/377a68f872cc2bb4?lnk=gst&q=setpassword#377a68f872cc2bb4 use Net::LDAP::Extension::SetPassword; $mesg = ($oldpassword) ? $self->set_password( user => $dn, oldpasswd => $oldpassword, newpasswd => $newpassword, control => [$pp] ) : $self->set_password( user => $dn, newpasswd => $newpassword, control => [$pp] ); # Catch the "Unwilling to perform" error if ( $mesg->code == 53 ) { $self->{portal}->lmLog( "Bad old password", 'debug' ); return PE_BADOLDPASSWORD; } } else { if ($oldpassword) { # Check old password with a bind $mesg = $self->bind( $dn, password => $oldpassword ); if ( $mesg->code != 0 ) { $self->{portal}->lmLog( "Bad old password", 'debug' ); return PE_BADOLDPASSWORD; } # Rebind as Manager only if user is not granted to change its password $self->bind() unless $asUser; } # Use standard modification $mesg = $self->modify( $dn, replace => { $passwordAttribute => $newpassword }, control => [$pp] ); } # Get server control response my ($resp) = $mesg->control("1.3.6.1.4.1.42.2.27.8.5.1"); $self->{portal} ->lmLog( "Modification return code: " . $mesg->code, 'debug' ); return PE_WRONGMANAGERACCOUNT if ( $mesg->code == 50 || $mesg->code == 8 ); if ( $mesg->code == 0 ) { $self->{portal}->_sub( 'userNotice', "Password changed $self->{portal}->{user}" ); # Rebind as manager for next LDAP operations if we were bound as user $self->bind() if $asUser; return PE_PASSWORD_OK; } if ( defined $resp ) { my $pp_error = $resp->pp_error; if ( defined $pp_error ) { $self->{portal}->_sub( 'userError', "Password policy error $pp_error for $self->{portal}->{user}" ); return [ PE_PP_PASSWORD_EXPIRED, PE_PP_ACCOUNT_LOCKED, PE_PP_CHANGE_AFTER_RESET, PE_PP_PASSWORD_MOD_NOT_ALLOWED, PE_PP_MUST_SUPPLY_OLD_PASSWORD, PE_PP_INSUFFICIENT_PASSWORD_QUALITY, PE_PP_PASSWORD_TOO_SHORT, PE_PP_PASSWORD_TOO_YOUNG, PE_PP_PASSWORD_IN_HISTORY, ]->[$pp_error]; } } else { return PE_LDAPERROR; } } } ## @method protected Lemonldap::NG::Portal::_LDAP ldap() # @return Lemonldap::NG::Portal::_LDAP object sub ldap { my $self = shift; return $self->{ldap} if ( ref( $self->{ldap} ) and $self->{flags}->{ldapActive} ); if ( $self->{ldap} = Lemonldap::NG::Portal::_LDAP->new($self) and my $mesg = $self->{ldap}->bind ) { if ( $mesg->code != 0 ) { $self->lmLog( "LDAP error: " . $mesg->error, 'error' ); $self->{ldap}->unbind; } else { if ( $self->{ldapPpolicyControl} and not $self->{ldap}->loadPP() ) { $self->lmLog( "LDAP password policy error", 'error' ); $self->{ldap}->unbind; } else { $self->{flags}->{ldapActive} = 1; return $self->{ldap}; } } } else { $self->lmLog( "LDAP error: $@", 'error' ); } return 0; } ## @method string searchGroups(string base, string key, string value, string attributes) # Get groups from LDAP directory # @param base LDAP search base # @param key Attribute name in group containing searched value # @param value Searched value # @param attributes to get from found groups (array ref) # @return hashRef groups sub searchGroups { my ( $self, $base, $key, $value, $attributes ) = splice @_; my $portal = $self->{portal}; my $groups = {}; # Creating search filter my $searchFilter = "(&(objectClass=" . $portal->{ldapGroupObjectClass} . ")(|"; foreach ( split( $portal->{multiValuesSeparator}, $value ) ) { $searchFilter .= "(" . $key . "=" . escape_filter_value($_) . ")"; } $searchFilter .= "))"; $portal->lmLog( "Group search filter: $searchFilter", 'debug' ); # Search my $mesg = $self->search( base => $base, filter => $searchFilter, attrs => $attributes, ); # Browse results if ( $mesg->code() == 0 ) { foreach my $entry ( $mesg->all_entries ) { $portal->lmLog( "Matching group " . $entry->dn() . " found", 'debug' ); # If recursive search is activated, do it here if ( $portal->{ldapGroupRecursive} ) { # Get searched value my $group_value = $self->getLdapValue( $entry, $portal->{ldapGroupAttributeNameGroup} ); # Launch group search if ($group_value) { $portal->lmLog( "Recursive search for $group_value", 'debug' ); my $recursive_groups = $self->searchGroups( $base, $key, $group_value, $attributes ); my %allGroups = ( %$groups, %$recursive_groups ) if ( ref $recursive_groups ); $groups = \%allGroups; } } # Use first attribute as group name my $groupName = $entry->get_value( $attributes->[0] ); $groups->{$groupName}->{name} = $groupName; # Now parse attributes foreach (@$attributes) { # Next if group attribute value next if ( $_ eq $portal->{ldapGroupAttributeValueGroup} ); my $data = $entry->get_value( $_, asref => 1 ); if ($data) { $portal->lmLog( "Store values of $_ in group $groupName", 'debug' ); $groups->{$groupName}->{$_} = $data; } } } } return $groups; } ## @method string getLdapValue(Net::LDAP::Entry entry, string attribute) # Get the dn, or the attribute value with a separator for multi-valuated attributes # @param entry LDAP entry # @param attribute Attribute name # @return string value sub getLdapValue { my ( $self, $entry, $attribute ) = splice @_; return $entry->dn() if ( $attribute eq "dn" ); my $value; foreach ( $entry->get_value($attribute) ) { $value .= $_; $value .= $self->{portal}->{multiValuesSeparator}; } $value =~ s/\Q$self->{portal}->{multiValuesSeparator}\E$//; return $value; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBLDAP.pm0000644000175000017500000001472112604503464026175 0ustar clementclement##@file # LDAP user database backend file ##@class # LDAP user database backend class package Lemonldap::NG::Portal::UserDBLDAP; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_LDAP 'ldap'; #link protected ldap our $VERSION = '1.4.6'; ## @method int userDBInit() # Transform ldapGroupAttributeNameSearch in ARRAY ref # @return Lemonldap::NG::Portal constant sub userDBInit { my $self = shift; unless ( ref $self->{ldapGroupAttributeNameSearch} eq 'ARRAY' ) { my @values = split( /\s/, $self->{ldapGroupAttributeNameSearch} ); $self->{ldapGroupAttributeNameSearch} = \@values; } PE_OK; } ## @apmethod int getUser() # 7) Launch formateFilter() and search() # @return Lemonldap::NG::Portal constant sub getUser { my $self = shift; return $self->_subProcess(qw(formateFilter search)); } ## @apmethod protected int formateFilter() # Set the LDAP filter. # By default, the user is searched in the LDAP server with its UID. # @return Lemonldap::NG::Portal constant sub formateFilter { my $self = shift; $self->{LDAPFilter} = $self->{mail} ? $self->{mailLDAPFilter} : $self->{AuthLDAPFilter} || $self->{LDAPFilter}; if ( $self->{LDAPFilter} ) { $self->lmLog( "LDAP submitted filter: " . $self->{LDAPFilter}, 'debug' ); } else { $self->{LDAPFilter} = $self->{mail} ? '(&(mail=$mail)(objectClass=inetOrgPerson))' : '(&(uid=$user)(objectClass=inetOrgPerson))'; } $self->{LDAPFilter} =~ s/\$(user|_?password|mail)/$self->{$1}/g; $self->{LDAPFilter} =~ s/\$(\w+)/$self->{sessionInfo}->{$1}/g; $self->lmLog( "LDAP transformed filter: " . $self->{LDAPFilter}, 'debug' ); PE_OK; } ## @apmethod protected int search() # Search the LDAP DN of the user. # @return Lemonldap::NG::Portal constant sub search { my $self = shift; unless ( $self->ldap ) { return PE_LDAPCONNECTFAILED; } my @attrs = ( values %{ $self->{exportedVars} }, values %{ $self->{ldapExportedVars} } ); my $mesg = $self->ldap->search( base => $self->{ldapBase}, scope => 'sub', filter => $self->{LDAPFilter}, attrs => \@attrs, ); $self->lmLog( 'LDAP Search with base: ' . $self->{ldapBase} . ' and filter: ' . $self->{LDAPFilter}, 'debug' ); if ( $mesg->code() != 0 ) { $self->lmLog( 'LDAP Search error: ' . $mesg->error, 'error' ); $self->ldap->unbind; $self->{flags}->{ldapActive} = 0; return PE_LDAPERROR; } if ( $mesg->count() > 1 ) { $self->lmLog( 'More than one entry returned by LDAP directory', 'error' ); $self->ldap->unbind; $self->{flags}->{ldapActive} = 0; return PE_BADCREDENTIALS; } unless ( $self->{entry} = $mesg->entry(0) ) { my $user = $self->{mail} || $self->{user}; $self->_sub( 'userError', "$user was not found in LDAP directory" ); $self->ldap->unbind; $self->{flags}->{ldapActive} = 0; return PE_BADCREDENTIALS; } $self->{dn} = $self->{entry}->dn(); PE_OK; } ## @apmethod int setSessionInfo() # 7) Load all parameters included in exportedVars parameter. # Multi-value parameters are loaded in a single string with # a separator (param multiValuesSeparator) # @return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; $self->{sessionInfo}->{dn} = $self->{dn}; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{ldapExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { $self->{sessionInfo}->{$k} = $self->{ldap}->getLdapValue( $self->{entry}, $v ) || ""; } PE_OK; } ## @apmethod int setGroups() # Load all groups in $groups. # @return Lemonldap::NG::Portal constant sub setGroups { my $self = shift; my $groups = $self->{sessionInfo}->{groups}; my $hGroups = $self->{sessionInfo}->{hGroups}; if ( $self->{ldapGroupBase} ) { # Push group attribute value for recursive search push( @{ $self->{ldapGroupAttributeNameSearch} }, $self->{ldapGroupAttributeNameGroup} ) if ( $self->{ldapGroupRecursive} and $self->{ldapGroupAttributeNameGroup} ne "dn" ); # Get value for group search my $group_value = $self->{ldap} ->getLdapValue( $self->{entry}, $self->{ldapGroupAttributeNameUser} ); $self->lmLog( "Searching LDAP groups in " . $self->{ldapGroupBase} . " for $group_value", 'debug' ); # Call searchGroups my $ldapGroups = $self->{ldap}->searchGroups( $self->{ldapGroupBase}, $self->{ldapGroupAttributeName}, $group_value, $self->{ldapGroupAttributeNameSearch} ); foreach ( keys %$ldapGroups ) { my $groupName = $_; $hGroups->{$groupName} = $ldapGroups->{$groupName}; my $groupValues = []; foreach ( @{ $self->{ldapGroupAttributeNameSearch} } ) { next if $_ =~ /^name$/; my $firstValue = $ldapGroups->{$groupName}->{$_}->[0]; push @$groupValues, $firstValue; } $groups .= $self->{multiValuesSeparator} . join( '|', @$groupValues ); } } $self->{sessionInfo}->{groups} = $groups; $self->{sessionInfo}->{hGroups} = $hGroups; PE_OK; } ## @method boolean setUserDBValue(string key, string value) # Store a value in UserDB # @param key Key in user information # @param value Value to store # @return result sub setUserDBValue { my ( $self, $key, $value ) = splice @_; # Mandatory attributes return 0 unless defined $key; # Write in LDAP $self->lmLog( "Replace $key attribute in LDAP with value $value", 'debug' ); my $modification = $self->{ldap}->modify( $self->{dn}, replace => { $key => $value } ); # Check result if ( $modification->code ) { $self->lmLog( "LDAP error " . $modification->code . ": " . $modification->error, 'error' ); return 0; } return 1; } ## @apmethod int userDBFinish() # Unbind. # @return Lemonldap::NG::Portal constant sub userDBFinish { my $self = shift; if ( ref( $self->{ldap} ) && $self->{flags}->{ldapActive} ) { $self->ldap->unbind(); $self->{flags}->{ldapActive} = 0; } PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm0000644000175000017500000002541112604503464025307 0ustar clementclement## @file # SOAP methods for Lemonldap::NG portal ## @class # Add SOAP methods to the Lemonldap::NG portal. package Lemonldap::NG::Portal::_SOAP; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_LibAccess; require SOAP::Lite; use base qw(Lemonldap::NG::Portal::_LibAccess); our $VERSION = '1.4.6'; ## @method void startSoapServices() # Check the URI requested (PATH_INFO environment variable) and launch the # corresponding SOAP methods using soapTest(). # If "soapOnly" is set, reject other request. Else, simply return. sub startSoapServices { my $self = shift; # Load SOAP services $self->{CustomSOAPServices} ||= {}; if ( $ENV{PATH_INFO} and my $tmp = { %{ $self->{CustomSOAPServices} }, '/sessions' => 'getCookies getAttributes isAuthorizedURI getMenuApplications', '/adminSessions' => 'getAttributes setAttributes isAuthorizedURI ' . 'newSession deleteSession get_key_from_all_sessions', '/config' => 'getConfig lastCfg' }->{ $ENV{PATH_INFO} } ) { # If $tmp is a HASHREF, extract SOAP functions and Object # tmp->f: functions list # tmp->o: object if ( ref($tmp) =~ /HASH/ ) { $self->soapTest( $tmp->{f}, $tmp->{o} ); } else { $self->soapTest($tmp); } $self->{soapOnly} = 1; } else { $self->soapTest("getCookies error"); } $self->abort( 'Bad request', 'Only SOAP requests are accepted here' ) if ( $self->{soapOnly} ); } #################### # SOAP subroutines # #################### =begin WSDL _IN user $string User name _IN password $string Password _RETURN $getCookiesResponse Response =end WSDL =cut ##@method SOAP::Data getCookies(string user,string password, string sessionid) # Called in SOAP context, returns cookies in an array. # This subroutine works only for portals working with user and password #@param user uid #@param password password #@param sessionid optional session identifier #@return session => { error => code , cookies => { cookieName1 => value ,... } } sub getCookies { my ( $self, $user, $password, $sessionid ) = splice @_; $self->{user} = $user; $self->{password} = $password; $self->{id} = $sessionid if ( defined($sessionid) && $sessionid ); $self->{error} = PE_OK; $self->lmLog( "SOAP authentication request for $user", 'debug' ); # Skip extractFormInfo step, as we already get input data $self->{skipExtractFormInfo} = 1; # User and password are required unless ( $self->{user} && $self->{password} ) { $self->{error} = PE_FORMEMPTY; } # Launch process else { $self->{error} = $self->_subProcess( qw(authInit userDBInit extractFormInfo getUser setAuthSessionInfo setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups authenticate grantSession removeOther store authFinish buildCookie) ); $self->lmLog( "SOAP authentication result for $user: code $self->{error}", 'debug' ); $self->updateSession(); } my @tmp = (); push @tmp, SOAP::Data->name( errorCode => $self->{error} ); my @cookies = (); unless ( $self->{error} ) { foreach ( @{ $self->{cookie} } ) { push @cookies, SOAP::Data->name( $_->name, $_->value )->type("string"); } } push @tmp, SOAP::Data->name( cookies => \SOAP::Data->value(@cookies) ); my $res = SOAP::Data->name( session => \SOAP::Data->value(@tmp) ); $self->updateStatus; return $res; } =begin WSDL _IN id $string Cookie value _RETURN $getAttributesResponse Response =end WSDL =cut ##@method SOAP::Data getAttributes(string id) # Return attributes of the session identified by $id. # @param $id Cookie value # @return SOAP::Data sequence sub getAttributes { my ( $self, $id ) = splice @_; die 'id is required' unless ($id); my $session = $self->getApacheSession( $id, 1 ); my @tmp = (); unless ($session) { $self->_sub( 'userNotice', "SOAP attributes request: session $id not found" ); push @tmp, SOAP::Data->name( error => 1 )->type('int'); } else { $self->_sub( 'userInfo', "SOAP attributes request for " . $session->data->{ $self->{whatToTrace} } ); push @tmp, SOAP::Data->name( error => 0 )->type('int'); push @tmp, SOAP::Data->name( attributes => _buildSoapHash( $session->data, $self->exportedAttr ) ); } my $res = SOAP::Data->name( session => \SOAP::Data->value(@tmp) ); return $res; } ## @method SOAP::Data setAttributes(string id,hashref args) # Update datas in the session referenced by $id # @param $id Id of the session # @param $args datas to store # @return true if succeed sub setAttributes { my ( $self, $id, $args ) = splice @_; die 'id is required' unless ($id); my $session = $self->getApacheSession($id); unless ($session) { $self->lmLog( "Session $id does not exists ($@)", 'warn' ); return 0; } $self->lmLog( "SOAP request to update session $id", 'debug' ); my $infos = {}; $infos->{$_} = $args->{$_} foreach ( keys %{$args} ); $session->update($infos); return 1; } ##@method SOAP::Data getConfig() # Return Lemonldap::NG configuration. Warning, this is not a well formed # SOAP::Data object so it can be difficult to read by other languages than # Perl. It's not really a problem since this function is written to be read by # Lemonldap::NG components and is not designed to be shared. # @return hashref serialized in SOAP by SOAP::Lite sub getConfig { my $self = shift; my $conf = $self->{lmConf}->getConf() or die("No configuration available"); return $conf; } ##@method int lastCfg() # SOAP method that return the last configuration number. # Call Lemonldap::NG::Common::Conf::lastCfg(). # @return Last configuration number sub lastCfg { my $self = shift; return $self->{lmConf}->lastCfg(); } ## @method SOAP::Data newSession(hashref args) # Store a new session. # @return Session datas sub newSession { my ( $self, $args ) = splice @_; my $session = $self->getApacheSession(); unless ($session) { $self->lmLog( "Unable to create session", 'error' ); return 0; } my $infos = {}; $infos->{$_} = $args->{$_} foreach ( keys %{$args} ); $infos->{_utime} = time(); $session->update($infos); $self->lmLog( "SOAP request to store " . $session->id . " (" . $session->data->{ $self->{whatToTrace} } . ")", 'debug' ); return SOAP::Data->name( attributes => _buildSoapHash( $session->data ) ); } ## @method SOAP::Data deleteSession() # Deletes an existing session sub deleteSession { my ( $self, $id ) = splice @_; die('id parameter is required') unless ($id); my $session = $self->getApacheSession($id); return 0 unless ($session); $self->lmLog( "SOAP request to delete session $id", 'debug' ); return $self->_deleteSession($session); } ##@method SOAP::Data get_key_from_all_sessions # Returns key from all sessions sub get_key_from_all_sessions { my $self = shift; shift; my $moduleOptions = $self->{globalStorageOptions} || {}; $moduleOptions->{backend} = $self->{globalStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; require $module; no strict 'refs'; return $module->get_key_from_all_sessions( $moduleOptions, @_ ); } =begin WSDL _IN id $string Cookie value _IN uri $string URI to test _RETURN $isAuthorizedURIResponse Response =end WSDL =cut ## @method boolean isAuthorizedURI (string id, string uri) # Check user's authorization for uri. # @param $id Id of the session # @param $uri URL string # @return True if granted sub isAuthorizedURI { my $self = shift; my ( $id, $uri ) = @_; die 'id is required' unless ($id); die 'uri is required' unless ($uri); # Get user session. my $session = $self->getApacheSession( $id, 1 ); unless ($session) { $self->lmLog( "Session $id does not exists", 'warn' ); return 0; } $self->{sessionInfo} = $session->data; my $r = $self->_grant($uri); return $r; } =begin WSDL _IN id $string Cookie value _RETURN $getMenuApplicationsResponse Response =end WSDL =cut ##@method SOAP::Data getMenuApplications(string id) # @param $id Id of the session #@return SOAP::Data sub getMenuApplications { my ( $self, $id ) = splice @_; die 'id is required' unless ($id); $self->lmLog( "SOAP getMenuApplications request for id $id", 'debug' ); # Get user session. my $session = $self->getApacheSession( $id, 1 ); unless ($session) { $self->lmLog( "Session $id does not exists", 'warn' ); return 0; } $self->{sessionInfo} = $session->data; # Build application list my $appslist = $self->appslist(); # Return result return _buildSoapHash( { menu => $appslist } ); } ######################### # Auxiliary subroutines # ######################### ## @method array exportedAttr # Parse XML string to sustitute macros # @return list of session data available through getAttribute SOAP request sub exportedAttr { my $self = shift; if ( $self->{exportedAttr} and $self->{exportedAttr} !~ /^\s*\+/ ) { return split /\s+/, $self->{exportedAttr}; } else { my @attributes = ( 'authenticationLevel', 'groups', 'ipAddr', 'startTime', '_utime', '_lastSeen' ); if ( my $exportedAttr = $self->{exportedAttr} ) { $exportedAttr =~ s/^\s*\+\s+//; @attributes = ( @attributes, split( /\s+/, $exportedAttr ) ); } # convert @attributes into hash to remove duplicates my %attributes = map( { $_ => 1 } @attributes ); %attributes = ( %attributes, %{ $self->{exportedVars} }, %{ $self->{macros} }, ); return sort keys %attributes; } } ####################### # Private subroutines # ####################### ##@fn private SOAP::Data _buildSoapHash() # Serialize a hashref into SOAP::Data. Types are fixed to "string". # @return SOAP::Data serialized datas sub _buildSoapHash { my ( $h, @keys ) = @_; my @tmp = (); @keys = keys %$h unless (@keys); foreach (@keys) { if ( ref( $h->{$_} ) eq 'ARRAY' ) { push @tmp, SOAP::Data->name( $_, @{ $h->{$_} } ); } elsif ( ref( $h->{$_} ) ) { push @tmp, SOAP::Data->name( $_ => _buildSoapHash( $h->{$_} ) ); } else { push @tmp, SOAP::Data->name( $_, $h->{$_} )->type('string') if ( defined( $h->{$_} ) ); } } return \SOAP::Data->value(@tmp); } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBDBI.pm0000644000175000017500000000762712542740733026065 0ustar clementclement## @file # DBI userDB mechanism ## @class # DBI userDB mechanism class package Lemonldap::NG::Portal::UserDBDBI; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_DBI; #inherits our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Set default values # @return Lemonldap::NG::Portal constant sub userDBInit { my $self = shift; # DBI access to user is the same as authentication by default $self->{dbiUserChain} ||= $self->{dbiAuthChain}; $self->{dbiUserUser} ||= $self->{dbiAuthUser}; $self->{dbiUserPassword} ||= $self->{dbiAuthPassword}; $self->{dbiUserTable} ||= $self->{dbiAuthTable}; $self->{userPivot} ||= $self->{dbiAuthLoginCol}; PE_OK; } ## @apmethod int getUser() # Do nothing # @return Lemonldap::NG::Portal constant sub getUser { my $self = shift; # Connect my $dbh = $self->dbh( $self->{dbiUserChain}, $self->{dbiUserUser}, $self->{dbiUserPassword} ); return PE_ERROR unless $dbh; my $table = $self->{dbiUserTable}; my $pivot = $self->{userPivot}; my $user = $self->{user}; # If in mailProcess, adapt search criteriums if ( $self->{mail} ) { $pivot = $self->{dbiPasswordMailCol}; $user = $self->{mail}; } $user =~ s/'/''/g; my $sth; eval { $sth = $dbh->prepare("SELECT * FROM $table WHERE $pivot=?"); $sth->execute($user); }; if ($@) { $self->lmLog( "DBI error: $@", 'error' ); return PE_ERROR; } unless ( $self->{entry} = $sth->fetchrow_hashref() ) { $self->_sub( 'userNotice', "User $user not found" ); return PE_BADCREDENTIALS; } # In mail process, get user value if ( $self->{mail} ) { $table = $self->{dbiAuthTable}; $pivot = $self->{dbiAuthLoginCol}; $user = $self->{entry}->{ $self->{userPivot} }; eval { $sth = $dbh->prepare("SELECT * FROM $table WHERE $pivot=?"); $sth->execute($user); }; if ($@) { $self->lmLog( "DBI error: $@", 'error' ); return PE_ERROR; } my $results; unless ( $results = $sth->fetchrow_hashref() ) { $self->_sub( 'userNotice', "User $user not found" ); return PE_BADCREDENTIALS; } $self->{user} = $results->{$pivot}; } PE_OK; } ## @apmethod int setSessionInfo() # Get columns for each exportedVars # @return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; # Set _user unless already defined $self->{sessionInfo}->{_user} ||= $self->{user}; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{dbiExportedVars} } ); while ( my ( $var, $attr ) = each %vars ) { $self->{sessionInfo}->{$var} = $self->{entry}->{$attr} if ( defined $self->{entry}->{$attr} ); } PE_OK; } ## @apmethod int setGroups() # Do nothing # @return Lemonldap::NG::Portal constant sub setGroups { PE_OK; } ## @method boolean setUserDBValue(string key, string value) # Store a value in UserDB # @param key Key in user information # @param value Value to store # @return result sub setUserDBValue { my ( $self, $key, $value ) = splice @_; # Mandatory attributes return 0 unless defined $key; # Write in database $self->lmLog( "Replace $key attribute in database with value $value", 'debug' ); # Connect my $dbh = $self->dbh( $self->{dbiUserChain}, $self->{dbiUserUser}, $self->{dbiUserPassword} ); return 0 unless $dbh; my $table = $self->{dbiUserTable}; my $pivot = $self->{userPivot}; my $user = $self->{user}; $user =~ s/'/''/g; my $sth; eval { $sth = $dbh->prepare("UPDATE $table SET $key = $value WHERE $pivot=?"); $sth->execute($user); }; # Check result if ($@) { $self->lmLog( "DBI error: $@", 'error' ); return 0; } return 1; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/RegisterDBAD.pm0000644000175000017500000000371012542740733026606 0ustar clementclement##@file # AD register backend file ##@class # AD register backend class package Lemonldap::NG::Portal::RegisterDBAD; use strict; use Lemonldap::NG::Portal::Simple; use base qw/Lemonldap::NG::Portal::RegisterDBLDAP/; use Unicode::String qw(utf8); ## @method int createUser # Insert new user # @result Lemonldap::NG::Portal constant sub createUser { my ($self) = splice @_; my $name = ucfirst $self->{registerInfo}->{firstname} . " " . uc $self->{registerInfo}->{lastname}; my $mesg = $self->ldap->add( "cn=$name," . $self->{ldapBase}, attrs => [ objectClass => [qw/top person organizationalPerson user/], sAMAccountName => $self->{registerInfo}->{login}, cn => $name, sn => uc $self->{registerInfo}->{lastname}, givenName => ucfirst $self->{registerInfo}->{firstname}, unicodePwd => utf8( chr(34) . $self->{registerInfo}->{password} . chr(34) ) ->utf16le(), mail => $self->{registerInfo}->{mail}, ] ); if ( $mesg->is_error ) { $self->lmLog( "Can not create entry for " . $self->{registerInfo}->{login}, 'error' ); $self->lmLog( "LDAP error " . $mesg->error, 'error' ); return PE_LDAPERROR; } return PE_OK; } ## @method bool isLoginUsed # Search if login is already in use # @result 0 if login is used, 1 else sub isLoginUsed { my ( $self, $login ) = splice @_; my $mesg = $self->ldap->search( base => $self->{ldapBase}, filter => "(sAMAccountName=$login)", scope => "sub", attrs => ['1.1'], ); if ( $mesg->code() != 0 ) { $self->lmLog( "LDAP Search error for $login: " . $mesg->error, 'warn' ); return 1; } if ( $mesg->count() > 0 ) { $self->lmLog( "Login $login already used in LDAP", 'debug' ); return 1; } return 0; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/IssuerDBSAML.pm0000644000175000017500000023770012542740733026554 0ustar clementclement## @file # SAML Issuer file ## @class # SAML Issuer class package Lemonldap::NG::Portal::IssuerDBSAML; use strict; use Lemonldap::NG::Common::Conf::SAML::Metadata; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_SAML; our @ISA = qw(Lemonldap::NG::Portal::_SAML); our $VERSION = '1.4.2'; ## @method void issuerDBInit() # Load and check SAML configuration # @return Lemonldap::NG::Portal error code sub issuerDBInit { my $self = shift; # Load SAML service return PE_SAML_LOAD_SERVICE_ERROR unless $self->loadService(); # Load SAML service providers return PE_SAML_LOAD_SP_ERROR unless $self->loadSPs(); # Load SAML identity providers # Required to manage SLO in Proxy mode return PE_SAML_LOAD_IDP_ERROR unless $self->loadIDPs(); PE_OK; } ## @apmethod int issuerForUnAuthUser() # Check if there is an SAML authentication request # Called only for unauthenticated users, check isPassive flag # @return Lemonldap::NG::Portal error code sub issuerForUnAuthUser { my $self = shift; my $server = $self->{_lassoServer}; # Get configuration parameter my $saml_sso_soap_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceSOAP", 1 ); my $saml_sso_soap_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceSOAP", 2 ); my $saml_sso_get_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect", 1 ); my $saml_sso_get_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect", 2 ); my $saml_sso_post_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPPost", 1 ); my $saml_sso_post_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPPost", 2 ); my $saml_sso_art_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact", 1 ); my $saml_sso_art_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact", 2 ); my $saml_slo_soap_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceSOAP", 1 ); my $saml_slo_soap_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceSOAP", 2 ); my $saml_slo_get_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect", 1 ); my $saml_slo_get_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect", 2 ); my $saml_slo_post_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPPost", 1 ); my $saml_slo_post_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPPost", 2 ); my $saml_ars_url = $self->getMetaDataURL( "samlIDPSSODescriptorArtifactResolutionServiceArtifact"); my $saml_slo_url_relay_soap = $self->{portal} . '/saml/relaySingleLogoutSOAP'; my $saml_slo_url_relay_post = $self->{portal} . '/saml/relaySingleLogoutPOST'; my $saml_slo_url_relay_term = $self->{portal} . '/saml/relaySingleLogoutTermination'; my $saml_att_soap_url = $self->getMetaDataURL( "samlAttributeAuthorityDescriptorAttributeServiceSOAP", 1 ); # Get HTTP request informations to know # if we are receving SAML request or response my $url = $self->url( -absolute => 1 ); my $request_method = $self->request_method(); my $content_type = $self->content_type(); my $idp_initiated = $self->param('IDPInitiated'); my $idp_initiated_sp = $self->param('sp'); my $idp_initiated_spConfKey = $self->param('spConfKey'); # 1.1. SSO if ( $url =~ /^(\Q$saml_sso_soap_url\E|\Q$saml_sso_soap_url_ret\E|\Q$saml_sso_get_url\E|\Q$saml_sso_get_url_ret\E|\Q$saml_sso_post_url\E|\Q$saml_sso_post_url_ret\E|\Q$saml_sso_art_url\E|\Q$saml_sso_art_url_ret\E)$/io ) { $self->lmLog( "URL $url detected as an SSO request URL", 'debug' ); # Get hidden params for IDP initiated if needed $idp_initiated = $self->getHiddenFormValue('IDPInitiated') unless defined $idp_initiated; $idp_initiated_sp = $self->getHiddenFormValue('sp') unless defined $idp_initiated_sp; $idp_initiated_spConfKey = $self->getHiddenFormValue('spConfKey') unless defined $idp_initiated_spConfKey; # Check message my ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type ); # Create Login object my $login = $self->createLogin($server); # Ignore signature verification $self->disableSignatureVerification($login); # Process the request if ($request) { # Process authentication request my $result; if ($artifact) { $result = $self->processArtResponseMsg( $login, $request ); } else { $result = $self->processAuthnRequestMsg( $login, $request ); } unless ($result) { $self->lmLog( "SSO: Fail to process authentication request", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SSO: authentication request is valid", 'debug' ); # Get SP entityID my $sp = $login->remote_providerID(); $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Do we check signature? my $checkSSOMessageSignature = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsCheckSSOMessageSignature}; if ($checkSSOMessageSignature) { $self->forceSignatureVerification($login); if ($artifact) { $result = $self->processArtResponseMsg( $login, $request ); } else { $result = $self->processAuthnRequestMsg( $login, $request ); } unless ($result) { $self->lmLog( "Signature is not valid", 'error' ); return PE_SAML_SIGNATURE_ERROR; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Get SAML request my $saml_request = $login->request(); unless ($saml_request) { $self->lmLog( "No SAML request found", 'error' ); return PE_SAML_SSO_ERROR; } # Check Destination return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $saml_request, $url ) ); # Check isPassive flag my $isPassive = $saml_request->IsPassive(); if ($isPassive) { $self->lmLog( "Found isPassive flag in SAML request, not compatible with unauthenticated user", 'error' ); return PE_SAML_SSO_ERROR; } # Store SAML elements in memory in case of proxying $self->{_proxiedSamlRequest} = $saml_request; $self->{_proxiedRequest} = $request; $self->{_proxiedMethod} = $method; $self->{_proxiedRelayState} = $relaystate; $self->{_proxiedArtifact} = $artifact; # Create a back link on SP displayed on login page my $html = "referer() . "\">" . $self->msg(PM_BACKTOSP) . ""; $self->loginInfo($html); return PE_OK; } elsif ($response) { $self->lmLog( "Authentication responses are not managed by this module", 'debug' ); return PE_OK; } else { if ($idp_initiated) { # Keep IDP initiated parameters $self->setHiddenFormValue( 'IDPInitiated', $idp_initiated ) if defined $idp_initiated; $self->setHiddenFormValue( 'sp', $idp_initiated_sp ) if defined $idp_initiated_sp; $self->setHiddenFormValue( 'spConfKey', $idp_initiated_spConfKey ) if defined $idp_initiated_spConfKey; $self->lmLog( "Store URL parameters for IDP initiated request", 'debug' ); } else { # No request or response # This should not happen $self->lmLog( "No request or response found", 'debug' ); } return PE_OK; } } # 1.2. SLO if ( $url =~ /^(\Q$saml_slo_soap_url\E|\Q$saml_slo_soap_url_ret\E|\Q$saml_slo_get_url\E|\Q$saml_slo_get_url_ret\E|\Q$saml_slo_post_url\E|\Q$saml_slo_post_url_ret\E)$/io ) { $self->lmLog( "URL $url detected as an SLO URL", 'debug' ); # Check SAML Message my ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type, "logout" ); # Create Logout object my $logout = $self->createLogout($server); # Ignore signature verification $self->disableSignatureVerification($logout); if ($request) { # Process logout request unless ( $self->processLogoutRequestMsg( $logout, $request ) ) { $self->lmLog( "SLO: Fail to process logout request", 'error' ); # Cannot send SLO error response if request not processed return PE_SAML_SLO_ERROR; } $self->lmLog( "SLO: Logout request is valid", 'debug' ); # We accept only SOAP here unless ( $method eq $self->getHttpMethod('soap') ) { $self->lmLog( "Only SOAP requests allowed here", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Get SP entityID my $sp = $logout->remote_providerID(); $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Do we check signature? my $checkSLOMessageSignature = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsCheckSLOMessageSignature}; if ($checkSLOMessageSignature) { $self->forceSignatureVerification($logout); unless ( $self->processLogoutRequestMsg( $logout, $request ) ) { $self->lmLog( "Signature is not valid", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Get SAML request my $saml_request = $logout->request(); unless ($saml_request) { $self->lmLog( "No SAML request found", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Check Destination return $self->sendSLOErrorResponse( $logout, $method ) unless ( $self->checkDestination( $saml_request, $url ) ); # Get session index my $session_index; eval { $session_index = $logout->request()->SessionIndex; }; # SLO requests without session index are not accepted unless ( defined $session_index ) { $self->lmLog( "No session index in SLO request from $spConfKey SP", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Decrypt session index my $local_session_id = $self->{cipher}->decrypt($session_index); $self->lmLog( "Get session id $local_session_id (decrypted from $session_index)", 'debug' ); # Open local session my $local_session = $self->getApacheSession( $local_session_id, 1 ); unless ($local_session) { $self->lmLog( "No local session found", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Load Session and Identity if they exist my $session = $local_session->data->{_lassoSessionDump}; my $identity = $local_session->data->{_lassoIdentityDump}; if ($session) { unless ( $self->setSessionFromDump( $logout, $session ) ) { $self->lmLog( "Unable to load Lasso Session", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "Lasso Session loaded", 'debug' ); } if ($identity) { unless ( $self->setIdentityFromDump( $logout, $identity ) ) { $self->lmLog( "Unable to load Lasso Identity", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "Lasso Identity loaded", 'debug' ); } # Close SAML sessions unless ( $self->deleteSAMLSecondarySessions($local_session_id) ) { $self->lmLog( "Fail to delete SAML sessions", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Close local session unless ( $self->_deleteSession($local_session) ) { $self->lmLog( "Fail to delete session $local_session_id", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Validate request if no previous error unless ( $self->validateLogoutRequest($logout) ) { $self->lmLog( "SLO request is not valid", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Try to send SLO request trough SOAP $self->resetProviderIdIndex($logout); while ( my $providerID = $self->getNextProviderId($logout) ) { # Send logout request my ( $rstatus, $rmethod, $rinfo ) = $self->sendLogoutRequestToProvider( $logout, $providerID, $self->getHttpMethod('soap'), 0 ); if ($rstatus) { $self->lmLog( "SOAP SLO successful on $providerID", 'debug' ); } else { $self->lmLog( "SOAP SLO error on $providerID", 'debug' ); } } # Set RelayState if ($relaystate) { $logout->msg_relayState($relaystate); $self->lmLog( "Set $relaystate in RelayState", 'debug' ); } # Signature my $signSLOMessage = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsSignSLOMessage}; if ( $signSLOMessage == 0 ) { $self->lmLog( "SLO response will not be signed", 'debug' ); $self->disableSignature($logout); } elsif ( $signSLOMessage == 1 ) { $self->lmLog( "SLO response will be signed", 'debug' ); $self->forceSignature($logout); } else { $self->lmLog( "SLO response signature according to metadata", 'debug' ); } # Send logout response if ( my $tmp = $self->sendLogoutResponseToServiceProvider( $logout, $method ) ) { return $tmp; } else { return $self->sendSLOErrorResponse( $logout, $method ); } } elsif ($response) { # Process logout response my $result = $self->processLogoutResponseMsg( $logout, $response ); unless ($result) { $self->lmLog( "Fail to process logout response", 'error' ); return PE_IMG_NOK; } $self->lmLog( "Logout response is valid", 'debug' ); # Check Destination return PE_IMG_NOK unless ( $self->checkDestination( $logout->response, $url ) ); # Get SP entityID my $sp = $logout->remote_providerID(); $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return PE_IMG_NOK; } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Do we check signature? my $checkSLOMessageSignature = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsCheckSLOMessageSignature}; if ($checkSLOMessageSignature) { unless ( $self->checkSignatureStatus($logout) ) { $self->lmLog( "Signature is not valid", 'error' ); return PE_IMG_NOK; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Store success status for this SLO request my $sloStatusSessionInfos = $self->getSamlSession($relaystate); if ($sloStatusSessionInfos) { $sloStatusSessionInfos->update( { $spConfKey => 1 } ); $self->lmLog( "Store SLO status for $spConfKey in session $relaystate", 'debug' ); } else { $self->lmLog( "Unable to store SLO status for $spConfKey in session $relaystate", 'warn' ); } # SLO response is OK $self->lmLog( "Display OK status for SLO on $spConfKey", 'debug' ); return PE_IMG_OK; } else { # No request or response # This should not happen $self->lmLog( "No request or response found", 'debug' ); return PE_OK; } } # 1.3. SLO relay # 1.3.1 SOAP # This URL is used by IMG html tag, and should returned PE_IMG_* if ( $url =~ /^(\Q$saml_slo_url_relay_soap\E)/io ) { $self->lmLog( "URL $url detected as a SOAP relay service URL", 'debug' ); # Check if relay parameter is present (mandatory) my $relayID; unless ( $relayID = $self->param('relay') ) { $self->lmLog( "No relayID detected", 'error' ); return PE_IMG_NOK; } # Retrieve the corresponding data from samlStorage my $relayInfos = $self->getSamlSession($relayID); unless ($relayInfos) { $self->lmLog( "Could not get relay session $relayID", 'error' ); return PE_IMG_NOK; } $self->lmLog( "Found relay session $relayID", 'debug' ); # Rebuild the logout object my $logout; unless ( $logout = $self->createLogout($server) ) { $self->lmLog( "Could not rebuild logout object", 'error' ); return PE_IMG_NOK; } # Load Session and Identity if they exist my $session = $relayInfos->data->{_lassoSessionDump}; my $identity = $relayInfos->data->{_lassoIdentityDump}; my $providerID = $relayInfos->data->{_providerID}; my $relayState = $relayInfos->data->{_relayState}; my $spConfKey = $self->{_spList}->{$providerID}->{confKey}; if ($session) { unless ( $self->setSessionFromDump( $logout, $session ) ) { $self->lmLog( "Unable to load Lasso Session", 'error' ); return PE_IMG_NOK; } $self->lmLog( "Lasso Session loaded", 'debug' ); } if ($identity) { unless ( $self->setIdentityFromDump( $logout, $identity ) ) { $self->lmLog( "Unable to load Lasso Identity", 'error' ); return PE_IMG_NOK; } $self->lmLog( "Lasso Identity loaded", 'debug' ); } # Send the logout request my ( $rstatus, $rmethod, $rinfo ) = $self->sendLogoutRequestToProvider( $logout, $providerID, Lasso::Constants::HTTP_METHOD_SOAP ); unless ($rstatus) { $self->lmLog( "Fail to process SOAP logout request to $providerID", 'error' ); return PE_IMG_NOK; } # Store success status for this SLO request my $sloStatusSessionInfos = $self->getSamlSession($relayState); if ($sloStatusSessionInfos) { $sloStatusSessionInfos->update( { $spConfKey => 1 } ); $self->lmLog( "Store SLO status for $spConfKey in session $relayState", 'debug' ); } else { $self->lmLog( "Unable to store SLO status for $spConfKey in session $relayState", 'warn' ); } # Delete relay session $relayInfos->remove(); # SLO response is OK $self->lmLog( "Display OK status for SLO on $spConfKey", 'debug' ); return PE_IMG_OK; } # 1.3.2 POST # This URL is used as iframe source, and autoPost a form # Can return an error img if ( $url =~ /^(\Q$saml_slo_url_relay_post\E)/io ) { $self->lmLog( "URL $url detected as a POST relay service URL", 'debug' ); # Check if relay parameter is present (mandatory) my $relayID; unless ( $relayID = $self->param('relay') ) { $self->lmLog( "No relayID detected", 'error' ); return PE_IMG_NOK; } # Retrieve the corresponding data from samlStorage my $relayInfos = $self->getSamlSession($relayID); unless ($relayInfos) { $self->lmLog( "Could not get relay session $relayID", 'error' ); return PE_IMG_NOK; } $self->lmLog( "Found relay session $relayID", 'debug' ); # Get data to build POST form $self->{postUrl} = $relayInfos->data->{url}; $self->{postFields}->{'SAMLRequest'} = $relayInfos->data->{body}; $self->{postFields}->{'RelayState'} = $relayInfos->data->{relayState}; # Delete relay session $relayInfos->remove(); return $self->_subProcess(qw(autoPost)); } # 1.3.3 Termination # Used to send SLO response to SP issuing SLO request if ( $url =~ /^(\Q$saml_slo_url_relay_term\E)/io ) { $self->lmLog( "URL $url detected as a SLO Termination relay service URL", 'debug' ); # Check if relay parameter is present (mandatory) my $relayID; unless ( $relayID = $self->getHiddenFormValue('relay') ) { $self->lmLog( "No relayID detected", 'error' ); return PE_SAML_SLO_ERROR; } # Retrieve the corresponding data from samlStorage my $relayInfos = $self->getSamlSession($relayID); unless ($relayInfos) { $self->lmLog( "Could not get relay session $relayID", 'error' ); return PE_SAML_SESSION_ERROR; } $self->lmLog( "Found relay session $relayID", 'debug' ); # Get data from relay session my $logout_dump = $relayInfos->data->{_logout}; my $session_dump = $relayInfos->data->{_session}; my $method = $relayInfos->data->{_method}; unless ($logout_dump) { $self->lmLog( "Could not get logout dump", 'error' ); return PE_SAML_SLO_ERROR; } # Rebuild Lasso::Logout object my $logout = $self->createLogout( $server, $logout_dump ); unless ($logout) { $self->lmLog( "Could not build Lasso::Logout", 'error' ); return PE_SAML_SLO_ERROR; } # Inject session unless ($session_dump) { $self->lmLog( "Could not get session dump", 'error' ); return PE_SAML_SLO_ERROR; } unless ( $self->setSessionFromDump( $logout, $session_dump ) ) { $self->lmLog( "Could not set session from dump", 'error' ); return PE_SAML_SLO_ERROR; } # Get Lasso::Session my $session = $logout->get_session(); unless ($session) { $self->lmLog( "Could not get session from logout", 'error' ); return PE_SAML_SLO_ERROR; } # Loop on assertions and remove them if SLO status is OK $self->resetProviderIdIndex($logout); while ( my $sp = $self->getNextProviderId($logout) ) { # Try to get SLO status from SLO session my $spConfKey = $self->{_spList}->{$sp}->{confKey}; my $status = $relayInfos->data->{$spConfKey}; # Remove assertion if status is OK if ($status) { eval { $session->remove_assertion($sp); }; if ($@) { $self->lmLog( "Unable to remove assertion for $sp", 'warn' ); } else { $self->lmLog( "Assertion removed for $sp", 'debug' ); } } else { $self->lmLog( "SLO status was not ok for $sp, assertion not removed", 'debug' ); } } # Reinject session unless ( $session->is_empty() ) { $self->setSessionFromDump( $logout, $session->dump ); } # Delete relay session $relayInfos->remove(); # Send SLO response if ( my $tmp = $self->sendLogoutResponseToServiceProvider( $logout, $method ) ) { return $tmp; } else { $self->lmLog( "Fail to send SLO response", 'error' ); return PE_SAML_SLO_ERROR; } } # 1.4. Artifacts if ( $url =~ /^(\Q$saml_ars_url\E)$/io ) { $self->lmLog( "URL $url detected as an artifact resolution service URL", 'debug' ); # Artifact request are sent with SOAP trough POST my $art_request = $self->param('POSTDATA'); my $art_response; # Create Login object my $login = $self->createLogin($server); # Process request message unless ( $self->processArtRequestMsg( $login, $art_request ) ) { $self->lmLog( "Unable to process artifact request message", 'error' ); $self->returnSOAPMessage(); } # Check Destination $self->returnSOAPMessage() unless ( $self->checkDestination( $login->request, $url ) ); # Create artifact response unless ( $art_response = $self->createArtifactResponse($login) ) { $self->lmLog( "Unable to create artifact response message", 'error' ); $self->returnSOAPMessage(); } $self->{SOAPMessage} = $art_response; $self->lmLog( "Send SOAP Message: " . $self->{SOAPMessage}, 'debug' ); # Return SOAP message $self->returnSOAPMessage(); # If we are here, there was a problem with SOAP request $self->lmLog( "Artifact response was not sent trough SOAP", 'error' ); $self->quit(); } # 1.5 Attribute query if ( $url =~ /^(\Q$saml_att_soap_url\E)$/io ) { $self->lmLog( "URL $url detected as an attribute service URL", 'debug' ); # Attribute request are sent with SOAP trough POST my $att_request = $self->param('POSTDATA'); my $att_response; # Process request my $query = $self->processAttributeRequest( $server, $att_request ); unless ($query) { $self->lmLog( "Unable to process attribute request", 'error' ); $self->returnSOAPMessage(); } # Get SP entityID my $sp = $query->remote_providerID(); $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Check Destination $self->returnSOAPMessage() unless ( $self->checkDestination( $query->request, $url ) ); # Validate request unless ( $self->validateAttributeRequest($query) ) { $self->lmLog( "Attribute request not valid", 'error' ); $self->returnSOAPMessage(); } # Get NameID my $name_id = $query->nameIdentifier(); unless ($name_id) { $self->lmLog( "Fail to get NameID from attribute request", 'error' ); $self->returnSOAPMessage(); } my $user = $name_id->content(); # Get sessionInfo for the given NameID my $sessionInfo; my $moduleOptions = $self->{samlStorageOptions} || {}; $moduleOptions->{backend} = $self->{samlStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $saml_sessions = $module->searchOn( $moduleOptions, "_nameID", $name_id->dump ); if ( my @saml_sessions_keys = keys %$saml_sessions ) { # Warning if more than one session found if ( $#saml_sessions_keys > 0 ) { $self->lmLog( "More than one SAML session found for user $user", 'warn' ); } # Take the first session my $saml_session = shift @saml_sessions_keys; # Get session $self->lmLog( "Retrieve SAML session $saml_session for user $user", 'debug' ); my $samlSessionInfo = $self->getSamlSession($saml_session); # Get real session my $real_session = $samlSessionInfo->data->{_saml_id}; $self->lmLog( "Retrieve real session $real_session for user $user", 'debug' ); $sessionInfo = $self->getApacheSession( $real_session, 1 ); unless ($sessionInfo) { $self->lmLog( "Cannot get session $real_session", 'error' ); $self->returnSOAPMessage(); } } else { $self->lmLog( "No SAML session found for user $user", 'error' ); $self->returnSOAPMessage(); } # Get requested attributes my @requested_attributes; eval { @requested_attributes = $query->request()->Attribute(); }; if ($@) { $self->checkLassoError($@); $self->returnSOAPMessage(); } # Returned attributes my @returned_attributes; # Browse SP authorized attributes foreach ( keys %{ $self->{samlSPMetaDataExportedAttributes}->{$spConfKey} } ) { my $sp_attr = $_; # Extract fields from exportedAttr value my ( $mandatory, $name, $format, $friendly_name ) = split( /;/, $self->{samlSPMetaDataExportedAttributes}->{$spConfKey} ->{$sp_attr} ); foreach (@requested_attributes) { my $req_attr = $_; my $rname = $req_attr->Name(); my $rformat = $req_attr->NameFormat(); my $rfriendly_name = $req_attr->FriendlyName(); # Skip if name does not match next unless ( $rname =~ /^$name$/ ); # Check format and friendly name next if ( $rformat and $rformat !~ /^$format$/ ); next if ( $rfriendly_name and $rfriendly_name !~ /^$friendly_name$/ ); $self->lmLog( "SP $spConfKey is authorized to access attribute $rname", 'debug' ); $self->lmLog( "Attribute $rname is linked to $sp_attr session key", 'debug' ); # Check if values are given my $rvalue = $self->getAttributeValue( $rname, $rformat, $rfriendly_name, [$req_attr] ); $self->lmLog( "Some values are explicitely requested: $rvalue", 'debug' ) if defined $rvalue; # Get session value if ( $sessionInfo->data->{$sp_attr} ) { my @values = split $self->{multiValuesSeparator}, $sessionInfo->data->{$sp_attr}; my @saml2values; # SAML2 attribute my $ret_attr = $self->createAttribute( $rname, $rformat, $rfriendly_name ); unless ($ret_attr) { $self->lmLog( "Unable to create a new SAML attribute", 'error' ); $self->returnSOAPMessage(); } foreach (@values) { my $local_value = $_; # Check if values were set in requested attribute # In this case, only requested values can be returned if ( $rvalue and !map( /^$local_value$/, split( $self->{multiValuesSeparator}, $rvalue ) ) ) { $self->lmLog( "$local_value value is not in requested values, it will not be sent", 'warn' ); next; } # SAML2 attribute value my $saml2value = $self->createAttributeValue($local_value); unless ($saml2value) { $self->lmLog( "Unable to create a new SAML attribute value", 'error' ); $self->returnSOAPMessage(); } push @saml2values, $saml2value; $self->lmLog( "Push $local_value in SAML attribute $name", 'debug' ); } $ret_attr->AttributeValue(@saml2values); # Push attribute in attribute list push @returned_attributes, $ret_attr; } else { $self->lmLog( "No session value for $sp_attr", 'debug' ); } } } # Create attribute statement if ( scalar @returned_attributes ) { my $attribute_statement; eval { $attribute_statement = Lasso::Saml2AttributeStatement->new(); }; if ($@) { $self->checkLassoError($@); $self->returnSOAPMessage(); } # Register attributes in attribute statement $attribute_statement->Attribute(@returned_attributes); # Create assetion my $assertion; eval { $assertion = Lasso::Saml2Assertion->new(); }; if ($@) { $self->checkLassoError($@); $self->returnSOAPMessage(); } # Add attribute statement in response assertion my @attributes_statement = ($attribute_statement); $assertion->AttributeStatement(@attributes_statement); # Set response assertion $query->response->Assertion( ($assertion) ); } # Build response $att_response = $self->buildAttributeResponse($query); unless ($att_response) { $self->lmLog( "Unable to build attribute response", 'error' ); $self->returnSOAPMessage(); } $self->{SOAPMessage} = $att_response; # Return SOAP message $self->returnSOAPMessage(); # If we are here, there was a problem with SOAP request $self->lmLog( "Attribute response was not sent trough SOAP", 'error' ); $self->quit(); } PE_OK; } ## @apmethod int issuerForAuthUser() # Check if there is an SAML authentication request for an authenticated user # Build assertions and redirect user # @return Lemonldap::NG::Portal error code sub issuerForAuthUser { my $self = shift; my $server = $self->{_lassoServer}; my $login; my $protocolProfile; my $artifact_method; my $authn_context; # Session ID my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id}; # Session creation timestamp my $time = $self->{sessionInfo}->{_utime} || time(); # Get configuration parameter my $saml_sso_soap_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceSOAP", 1 ); my $saml_sso_soap_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceSOAP", 2 ); my $saml_sso_get_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect", 1 ); my $saml_sso_get_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect", 2 ); my $saml_sso_post_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPPost", 1 ); my $saml_sso_post_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPPost", 2 ); my $saml_sso_art_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact", 1 ); my $saml_sso_art_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact", 2 ); my $saml_slo_soap_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceSOAP", 1 ); my $saml_slo_soap_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceSOAP", 2 ); my $saml_slo_get_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect", 1 ); my $saml_slo_get_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect", 2 ); my $saml_slo_post_url = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPPost", 1 ); my $saml_slo_post_url_ret = $self->getMetaDataURL( "samlIDPSSODescriptorSingleLogoutServiceHTTPPost", 2 ); # Get HTTP request informations to know # if we are receving SAML request or response my $url = $self->url( -absolute => 1 ); my $request_method = $self->request_method(); my $content_type = $self->content_type(); my $idp_initiated = $self->param('IDPInitiated'); my $idp_initiated_sp = $self->param('sp'); my $idp_initiated_spConfKey = $self->param('spConfKey'); # 1.1. SSO (SSO URL or Proxy Mode) if ( $url =~ /^(\Q$saml_sso_soap_url\E|\Q$saml_sso_soap_url_ret\E|\Q$saml_sso_get_url\E|\Q$saml_sso_get_url_ret\E|\Q$saml_sso_post_url\E|\Q$saml_sso_post_url_ret\E|\Q$saml_sso_art_url\E|\Q$saml_sso_art_url_ret\E)$/io or $self->{_proxiedRequest} ) { $self->lmLog( "URL $url detected as an SSO request URL", 'debug' ); # Get hidden params for IDP initiated if needed $idp_initiated = $self->getHiddenFormValue('IDPInitiated') unless defined $idp_initiated; $idp_initiated_sp = $self->getHiddenFormValue('sp') unless defined $idp_initiated_sp; $idp_initiated_spConfKey = $self->getHiddenFormValue('spConfKey') unless defined $idp_initiated_spConfKey; # Check message my ( $request, $response, $method, $relaystate, $artifact ); if ( $self->{_proxiedRequest} ) { $request = $self->{_proxiedRequest}; $method = $self->{_proxiedMethod}; $relaystate = $self->{_proxiedRelayState}; $artifact = $self->{_proxiedArtifact}; } else { ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type ); } # Create Login object my $login = $self->createLogin($server); # Ignore signature verification $self->disableSignatureVerification($login); # Process the request or use IDP initiated mode if ( $request or $idp_initiated ) { # Load Session and Identity if they exist my $session = $self->{sessionInfo}->{_lassoSessionDump}; my $identity = $self->{sessionInfo}->{_lassoIdentityDump}; if ($session) { unless ( $self->setSessionFromDump( $login, $session ) ) { $self->lmLog( "Unable to load Lasso Session", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "Lasso Session loaded", 'debug' ); } if ($identity) { unless ( $self->setIdentityFromDump( $login, $identity ) ) { $self->lmLog( "Unable to load Lasso Identity", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "Lasso Identity loaded", 'debug' ); } my $result; # Create fake request if IDP initiated mode if ($idp_initiated) { # Need sp or spConfKey parameter unless ( $idp_initiated_sp or $idp_initiated_spConfKey ) { $self->lmLog( "sp or spConfKey parameter needed to make IDP initiated SSO", 'error' ); return PE_SAML_SSO_ERROR; } unless ($idp_initiated_sp) { # Get SP from spConfKey foreach ( keys %{ $self->{_spList} } ) { if ( $self->{_spList}->{$_}->{confKey} eq $idp_initiated_spConfKey ) { $idp_initiated_sp = $_; last; } } } else { unless ( defined $self->{_spList}->{$idp_initiated_sp} ) { $self->lmLog( "SP $idp_initiated_sp not known", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $idp_initiated_spConfKey = $self->{_spList}->{$idp_initiated_sp}->{confKey}; } # Check if IDP Initiated SSO is allowed unless ( $self->{samlSPMetaDataOptions}->{$idp_initiated_spConfKey} ->{samlSPMetaDataOptionsEnableIDPInitiatedURL} ) { $self->lmLog( "IDP Initiated SSO not allowed for SP $idp_initiated_spConfKey", 'error' ); return PE_SAML_SSO_ERROR; } $result = $self->initIdpInitiatedAuthnRequest( $login, $idp_initiated_sp ); unless ($result) { $self->lmLog( "SSO: Fail to init IDP Initiated authentication request", 'error' ); return PE_SAML_SSO_ERROR; } } # Process authentication request if ($artifact) { $result = $self->processArtResponseMsg( $login, $request ); } else { $result = $self->processAuthnRequestMsg( $login, $request ); } unless ($result) { $self->lmLog( "SSO: Fail to process authentication request", 'error' ); return PE_SAML_SSO_ERROR; } # Get SP entityID my $sp = $request ? $login->remote_providerID() : $idp_initiated_sp; $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Do we check signature? my $checkSSOMessageSignature = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsCheckSSOMessageSignature}; if ($checkSSOMessageSignature) { $self->forceSignatureVerification($login); if ($artifact) { $result = $self->processArtResponseMsg( $login, $request ); } else { $result = $self->processAuthnRequestMsg( $login, $request ); } unless ($result) { $self->lmLog( "Signature is not valid", 'error' ); return PE_SAML_SIGNATURE_ERROR; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Validate request unless ( $self->validateRequestMsg( $login, 1, 1 ) ) { $self->lmLog( "Unable to validate SSO request message", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SSO: authentication request is valid", 'debug' ); # Get ForceAuthn flag my $force_authn; eval { $force_authn = $login->request()->ForceAuthn(); }; if ($@) { $self->lmLog( "Unable to get ForceAuthn flag, set it to false", 'warn' ); $force_authn = 0; } $self->lmLog( "Found ForceAuthn flag with value $force_authn", 'debug' ); # Get ForceAuthn sessions for this session_id my $moduleOptions = $self->{samlStorageOptions} || {}; $moduleOptions->{backend} = $self->{samlStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $forceAuthn_sessions = $module->searchOn( $moduleOptions, "_saml_id", $session_id ); my $forceAuthn_session; my $forceAuthnSessionInfo; if ( my @forceAuthn_sessions_keys = keys %$forceAuthn_sessions ) { # Warning if more than one session found if ( $#forceAuthn_sessions_keys > 0 ) { $self->lmLog( "More than one ForceAuthn session found for session $session_id", 'warn' ); } # Take the first session $forceAuthn_session = shift @forceAuthn_sessions_keys; # Get session $self->lmLog( "Retrieve ForceAuthn session $forceAuthn_session for session $session_id", 'debug' ); $forceAuthnSessionInfo = $self->getSamlSession($forceAuthn_session); # Check forceAuthn flag for current SP if ( $forceAuthnSessionInfo->data->{$spConfKey} ) { $self->lmLog( "User was already forced to reauthenticate for SP $spConfKey", 'debug' ); $force_authn = 1; } } else { $self->lmLog( "No ForceAuthn session found for session $session_id", 'debug' ); } # Force authentication if flag is on, or previous flag still active if ($force_authn) { # Store flag for further requests $forceAuthnSessionInfo = $self->getSamlSession($forceAuthn_session); $forceAuthnSessionInfo->update( { $spConfKey => 1 } ); unless ($forceAuthn_session) { my $forceInfos; $forceInfos->{'_type'} = "forceAuthn"; $forceInfos->{'_saml_id'} = $session_id; $forceInfos->{'_utime'} = $time; $forceAuthnSessionInfo->update($forceInfos); $forceAuthn_session = $forceAuthnSessionInfo->id; $self->lmLog( "Create ForceAuthn session $forceAuthn_session", 'debug' ); } $self->lmLog( "Set ForceAuthn flag for SP $spConfKey in ForceAuthn session $forceAuthn_session", 'debug' ); # Replay authentication process $self->{updateSession} = 1; $self->{error} = $self->_subProcess( qw(issuerDBInit authInit issuerForUnAuthUser extractFormInfo userDBInit getUser setAuthSessionInfo setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups authenticate store authFinish) ); # Return error if any return $self->{error} if $self->{error} > 0; # Else remove flag $forceAuthnSessionInfo = $self->getSamlSession($forceAuthn_session); $forceAuthnSessionInfo->update( { $spConfKey => 0 } ); $self->lmLog( "Unset ForceAuthn flag for SP $spConfKey in ForceAuthn session $forceAuthn_session", 'debug' ); } # Check Destination (only in non proxy mode) unless ( $self->{_proxiedRequest} ) { return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $login->request, $url ) ); } # Map authenticationLevel with SAML2 authentication context my $authenticationLevel = $self->{sessionInfo}->{authenticationLevel}; $authn_context = $self->authnLevel2authnContext($authenticationLevel); $self->lmLog( "Authentication context is $authn_context", 'debug' ); # Get SP options notOnOrAfterTimeout my $notOnOrAfterTimeout = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsNotOnOrAfterTimeout}; # Build Assertion unless ( $self->buildAssertion( $login, $authn_context, $notOnOrAfterTimeout ) ) { $self->lmLog( "Unable to build assertion", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SSO: assertion is built", 'debug' ); # Get default NameID Format from configuration # Set to "email" if no value in configuration my $nameIDFormatKey = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsNameIDFormat} || "email"; my $nameIDFormat; # Check NameID Policy in request if ( $login->request()->NameIDPolicy ) { $nameIDFormat = $login->request()->NameIDPolicy->Format(); $self->lmLog( "Get NameID format $nameIDFormat from request", 'debug' ); } # NameID unspecified is forced to default NameID format if ( !$nameIDFormat or $nameIDFormat eq $self->getNameIDFormat("unspecified") ) { $nameIDFormat = $self->getNameIDFormat($nameIDFormatKey); } # Get session key associated with NameIDFormat # Not for unspecified, transient, persistent, entity, encrypted my $nameIDFormatConfiguration = { $self->getNameIDFormat("email") => 'samlNameIDFormatMapEmail', $self->getNameIDFormat("x509") => 'samlNameIDFormatMapX509', $self->getNameIDFormat("windows") => 'samlNameIDFormatMapWindows', $self->getNameIDFormat("kerberos") => 'samlNameIDFormatMapKerberos', }; my $nameIDSessionKey = $self->{ $nameIDFormatConfiguration->{$nameIDFormat} }; # Override default NameID Mapping if ( $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsNameIDSessionKey} ) { $nameIDSessionKey = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsNameIDSessionKey}; } my $nameIDContent; if ( defined $self->{sessionInfo}->{$nameIDSessionKey} ) { $nameIDContent = $self->getFirstValue( $self->{sessionInfo}->{$nameIDSessionKey} ); } # Manage Entity NameID format if ( $nameIDFormat eq $self->getNameIDFormat("entity") ) { $nameIDContent = $self->getMetaDataURL( "samlEntityID", 0, 1 ); } # Manage Transient NameID format if ( $nameIDFormat eq $self->getNameIDFormat("transient") ) { eval { my @assert = $login->response->Assertion; $nameIDContent = $assert[0]->Subject->NameID->content; }; } if ( $login->nameIdentifier ) { $login->nameIdentifier->Format($nameIDFormat); $login->nameIdentifier->content($nameIDContent) if $nameIDContent; } else { my $nameIdentifier = Lasso::Saml2NameID->new(); $nameIdentifier->Format($nameIDFormat); $nameIdentifier->content($nameIDContent) if $nameIDContent; $login->nameIdentifier($nameIdentifier); } $self->lmLog( "NameID Format is " . $login->nameIdentifier->Format, 'debug' ); $self->lmLog( "NameID Content is " . $login->nameIdentifier->content, 'debug' ); # Push mandatory attributes my @attributes; foreach ( keys %{ $self->{samlSPMetaDataExportedAttributes}->{$spConfKey} } ) { # Extract fields from exportedAttr value my ( $mandatory, $name, $format, $friendly_name ) = split( /;/, $self->{samlSPMetaDataExportedAttributes}->{$spConfKey} ->{$_} ); # Name is required next unless $name; # Do not send attribute if not mandatory unless ($mandatory) { $self->lmLog( "SAML2 attribute $name is not mandatory", 'debug' ); next; } # Error if corresponding attribute is not in user session my $value = $self->{sessionInfo}->{$_}; unless ( defined $value ) { $self->lmLog( "Session key $_ is required to set SAML $name attribute", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SAML2 attribute $name will be set with $_ session key", 'debug' ); # SAML2 attribute my $attribute = $self->createAttribute( $name, $format, $friendly_name ); unless ($attribute) { $self->lmLog( "Unable to create a new SAML attribute", 'error' ); return PE_SAML_SSO_ERROR; } # Set attribute value(s) my @values = split $self->{multiValuesSeparator}, $value; my @saml2values; foreach (@values) { # SAML2 attribute value my $saml2value = $self->createAttributeValue($_); unless ($saml2value) { $self->lmLog( "Unable to create a new SAML attribute value", 'error' ); $self->checkLassoError($@); return PE_SAML_SSO_ERROR; } push @saml2values, $saml2value; $self->lmLog( "Push $_ in SAML attribute $name", 'debug' ); } $attribute->AttributeValue(@saml2values); # Push attribute in attribute list push @attributes, $attribute; } # Get response assertion my @response_assertions = $login->response->Assertion; unless ( $response_assertions[0] ) { $self->lmLog( "Unable to get response assertion", 'error' ); return PE_SAML_SSO_ERROR; } # Set subject NameID $response_assertions[0] ->set_subject_name_id( $login->nameIdentifier ); # Set basic conditions my $oneTimeUse = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsOneTimeUse}; my $conditionNotOnOrAfter = $notOnOrAfterTimeout || "86400"; eval { $response_assertions[0] ->set_basic_conditions( 60, $conditionNotOnOrAfter, $oneTimeUse ); }; if ($@) { $self->lmLog( "Basic conditions not set: $@", 'debug' ); } # Create attribute statement if ( scalar @attributes ) { my $attribute_statement; eval { $attribute_statement = Lasso::Saml2AttributeStatement->new(); }; if ($@) { $self->checkLassoError($@); return PE_SAML_SSO_ERROR; } # Register attributes in attribute statement $attribute_statement->Attribute(@attributes); # Add attribute statement in response assertion my @attributes_statement = ($attribute_statement); $response_assertions[0] ->AttributeStatement(@attributes_statement); } # Get AuthnStatement my @authn_statements = $response_assertions[0]->AuthnStatement(); # Set sessionIndex # sessionIndex is the encrypted session_id my $sessionIndex = $self->{cipher}->encrypt($session_id); $authn_statements[0]->SessionIndex($sessionIndex); $self->lmLog( "Set sessionIndex $sessionIndex (encrypted from $session_id)", 'debug' ); # Set SessionNotOnOrAfter my $sessionNotOnOrAfterTimeout = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsSessionNotOnOrAfterTimeout}; $sessionNotOnOrAfterTimeout ||= $self->{timeout}; my $timeout = $time + $sessionNotOnOrAfterTimeout; my $sessionNotOnOrAfter = $self->timestamp2samldate($timeout); $authn_statements[0]->SessionNotOnOrAfter($sessionNotOnOrAfter); $self->lmLog( "Set sessionNotOnOrAfter $sessionNotOnOrAfter", 'debug' ); # Register AuthnStatement in assertion $response_assertions[0]->AuthnStatement(@authn_statements); # Set response assertion $login->response->Assertion(@response_assertions); # Signature my $signSSOMessage = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsSignSSOMessage}; if ( $signSSOMessage == 0 ) { $self->lmLog( "SSO response will not be signed", 'debug' ); $self->disableSignature($login); } elsif ( $signSSOMessage == 1 ) { $self->lmLog( "SSO response will be signed", 'debug' ); $self->forceSignature($login); } else { $self->lmLog( "SSO response signature according to metadata", 'debug' ); } # log that a SAML authn response is build my $user = $self->{sessionInfo}->{ $self->{whatToTrace} }; my $nameIDLog; foreach my $format (qw(persistent transient)) { if ( $login->nameIdentifier->Format eq $self->getNameIDFormat($format) ) { $nameIDLog = " with $format NameID " . $login->nameIdentifier->content; last; } } $self->_sub( 'userNotice', "SAML authentication response sent to SAML SP $spConfKey for $user$nameIDLog" ); # Build SAML response $protocolProfile = $login->protocolProfile(); # Artifact if ( $protocolProfile == Lasso::Constants::LOGIN_PROTOCOL_PROFILE_BRWS_ART ) { # Choose method $artifact_method = $self->getHttpMethod("artifact-get") if ( $method == $self->getHttpMethod("redirect") || $method == $self->getHttpMethod("artifact-get") ); $artifact_method = $self->getHttpMethod("artifact-post") if ( $method == $self->getHttpMethod("post") || $method == $self->getHttpMethod("artifact-post") ); # Build artifact message unless ( $self->buildArtifactMsg( $login, $artifact_method ) ) { $self->lmLog( "Unable to build SSO artifact response message", 'error' ); return PE_SAML_ART_ERROR; } $self->lmLog( "SSO: artifact response is built", 'debug' ); # Get artifact ID and Content, and store them my $artifact_id = $login->get_artifact; my $artifact_message = $login->get_artifact_message; $self->storeArtifact( $artifact_id, $artifact_message, $session_id ); } # No artifact else { unless ( $self->buildAuthnResponseMsg($login) ) { $self->lmLog( "Unable to build SSO response message", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SSO: authentication response is built", 'debug' ); } # Save Identity and Session if ( $login->is_identity_dirty ) { # Update session $self->lmLog( "Save Lasso identity in session", 'debug' ); $self->updatePersistentSession( { _lassoIdentityDump => $login->get_identity->dump }, undef, $session_id ); } if ( $login->is_session_dirty ) { $self->lmLog( "Save Lasso session in session", 'debug' ); $self->updateSession( { _lassoSessionDump => $login->get_session->dump }, $session_id ); } # Keep SAML elements for later queries my $nameid = $login->nameIdentifier; $self->lmLog( "Store NameID " . $nameid->dump . " and SessionIndex $sessionIndex for session $session_id", 'debug' ); my $samlSessionInfo = $self->getSamlSession(); return PE_SAML_SESSION_ERROR unless $samlSessionInfo; my $infos; $infos->{type} = 'saml'; # Session type $infos->{_utime} = $time; # Creation time $infos->{_saml_id} = $session_id; # SSO session id $infos->{_nameID} = $nameid->dump; # SAML NameID $infos->{_sessionIndex} = $sessionIndex; # SAML SessionIndex $samlSessionInfo->update($infos); my $saml_session_id = $samlSessionInfo->id; $self->lmLog( "Link session $session_id to SAML session $saml_session_id", 'debug' ); # Send SSO Response # Register IDP in Common Domain Cookie if needed if ( $self->{samlCommonDomainCookieActivation} and $self->{samlCommonDomainCookieWriter} ) { my $cdc_idp = $self->getMetaDataURL( "samlEntityID", 0, 1 ); $self->lmLog( "Will register IDP $cdc_idp in Common Domain Cookie", 'debug' ); # Redirection to CDC Writer page in a hidden iframe my $cdc_writer_url = $self->{samlCommonDomainCookieWriter}; $cdc_writer_url .= ( $self->{samlCommonDomainCookieWriter} =~ /\?/ ? '&idp=' . $cdc_idp : '?url=' . $cdc_idp ); my $cdc_iframe = ""; $self->info( "

    " . $self->msg(PM_CDC_WRITER) . "

    " ); $self->info($cdc_iframe); } # HTTP-REDIRECT if ( $protocolProfile eq Lasso::Constants::LOGIN_PROTOCOL_PROFILE_REDIRECT or $artifact_method == $self->getHttpMethod("artifact-get") ) { # Redirect user to response URL my $sso_url = $login->msg_url; $self->lmLog( "Redirect user to $sso_url", 'debug' ); $self->{urldc} = $sso_url; return $self->_subProcess(qw(autoRedirect)); } # HTTP-POST if ( $protocolProfile eq Lasso::Constants::LOGIN_PROTOCOL_PROFILE_BRWS_POST or $artifact_method == $self->getHttpMethod("artifact-post") ) { # Use autosubmit form my $sso_url = $login->msg_url; my $sso_body = $login->msg_body; $self->{postUrl} = $sso_url; if ( $artifact_method == $self->getHttpMethod("artifact-post") ) { $self->{postFields} = { 'SAMLart' => $sso_body }; } else { $self->{postFields} = { 'SAMLResponse' => $sso_body }; } # RelayState $self->{postFields}->{'RelayState'} = $relaystate if ($relaystate); return $self->_subProcess(qw(autoPost)); } } elsif ($response) { $self->lmLog( "Authentication responses are not managed by this module", 'debug' ); return PE_OK; } else { # No request or response # This should not happen $self->lmLog( "No request or response found", 'debug' ); return PE_OK; } } # 1.2. SLO if ( $url =~ /^(\Q$saml_slo_soap_url\E|\Q$saml_slo_soap_url_ret\E|\Q$saml_slo_get_url\E|\Q$saml_slo_get_url_ret\E|\Q$saml_slo_post_url\E|\Q$saml_slo_post_url_ret\E)$/io ) { $self->lmLog( "URL $url detected as an SLO URL", 'debug' ); # Check SAML Message my ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type, "logout" ); # Create Logout object my $logout = $self->createLogout($server); # Ignore signature verification $self->disableSignatureVerification($logout); if ($request) { # Process logout request unless ( $self->processLogoutRequestMsg( $logout, $request ) ) { $self->lmLog( "SLO: Fail to process logout request", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "SLO: Logout request is valid", 'debug' ); # Load Session and Identity if they exist my $session = $self->{sessionInfo}->{_lassoSessionDump}; my $identity = $self->{sessionInfo}->{_lassoIdentityDump}; if ($session) { unless ( $self->setSessionFromDump( $logout, $session ) ) { $self->lmLog( "Unable to load Lasso Session", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "Lasso Session loaded", 'debug' ); } if ($identity) { unless ( $self->setIdentityFromDump( $logout, $identity ) ) { $self->lmLog( "Unable to load Lasso Identity", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "Lasso Identity loaded", 'debug' ); } # Get SP entityID my $sp = $logout->remote_providerID(); $self->lmLog( "Found entityID $sp in SAML message", 'debug' ); # SP conf key my $spConfKey = $self->{_spList}->{$sp}->{confKey}; unless ($spConfKey) { $self->lmLog( "$sp do not match any SP in configuration", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } $self->lmLog( "$sp match $spConfKey SP in configuration", 'debug' ); # Do we check signature? my $checkSLOMessageSignature = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsCheckSLOMessageSignature}; if ($checkSLOMessageSignature) { $self->forceSignatureVerification($logout); unless ( $self->processLogoutRequestMsg( $logout, $request ) ) { $self->lmLog( "Signature is not valid", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Check Destination return $self->sendSLOErrorResponse( $logout, $method ) unless ( $self->checkDestination( $logout->request, $url ) ); # Get session index my $session_index; eval { $session_index = $logout->request()->SessionIndex; }; # SLO requests without session index are not accepted if ( $@ or !defined $session_index ) { $self->lmLog( "No session index in SLO request from $spConfKey SP", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Validate request if no previous error unless ( $self->validateLogoutRequest($logout) ) { $self->lmLog( "SLO request is not valid", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } # Set RelayState if ($relaystate) { $logout->msg_relayState($relaystate); $self->lmLog( "Set $relaystate in RelayState", 'debug' ); } # Create SLO status session and get ID my $sloStatusSessionInfo = $self->getSamlSession(); my $sloInfos; $sloInfos->{type} = 'sloStatus'; $sloInfos->{_utime} = time; $sloInfos->{_logout} = $logout->dump; $sloInfos->{_session} = $logout->get_session() ? $logout->get_session()->dump : ""; $sloInfos->{_method} = $method; $sloStatusSessionInfo->update($sloInfos); my $relayID = $sloStatusSessionInfo->id; # Prepare logout on all others SP my $provider_nb = $self->sendLogoutRequestToProviders( $logout, $relayID ); # Decrypt session index my $local_session_id = $self->{cipher}->decrypt($session_index); $self->lmLog( "Get session id $local_session_id (decrypted from $session_index)", 'debug' ); my $user = $self->{sessionInfo}->{user}; my $local_session = $self->getApacheSession( $local_session_id, 1 ); # Close SAML sessions unless ( $self->deleteSAMLSecondarySessions($local_session_id) ) { $self->lmLog( "Fail to delete SAML sessions", 'error' ); } # Close local session unless ( $self->_deleteSession($local_session) ) { $self->lmLog( "Fail to delete session $local_session_id for user $user", 'error' ); } # Signature my $signSLOMessage = $self->{samlSPMetaDataOptions}->{$spConfKey} ->{samlSPMetaDataOptionsSignSLOMessage}; unless ($signSLOMessage) { $self->lmLog( "Do not sign this SLO response", 'debug' ); return $self->sendSLOErrorResponse( $logout, $method ) unless ( $self->disableSignature($logout) ); } # If no waiting SP, return directly SLO response unless ($provider_nb) { if ( my $tmp = $self->sendLogoutResponseToServiceProvider( $logout, $method ) ) { return $tmp; } else { $self->lmLog( "Fail to send SLO response", 'error' ); return $self->sendSLOErrorResponse( $logout, $method ); } } # Else build SLO status relay URL and display info else { $self->{urldc} = $self->{portal} . '/saml/relaySingleLogoutTermination'; $self->setHiddenFormValue( 'relay', $relayID ); return PE_INFO; } } elsif ($response) { # No SLO response should be here # else it means SSO session was not closed $self->lmLog( "SLO response found on an active SSO session, ignoring it", 'debug' ); return PE_OK; } else { # No request or response # This should not happen $self->lmLog( "No request or response found", 'debug' ); return PE_OK; } } return PE_OK; } ## @apmethod int issuerLogout() # Send logout to SP when logout is initiated by IDP # @return Lemonldap::NG::Portal error code sub issuerLogout { my $self = shift; # Session ID my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id}; # Close SAML sessions unless ( $self->deleteSAMLSecondarySessions($session_id) ) { $self->lmLog( "Fail to delete SAML sessions", 'error' ); } # Create Logout object my $logout = $self->createLogout( $self->{_lassoServer} ); # Load Session and Identity if they exist my $session = $self->{sessionInfo}->{_lassoSessionDump}; my $identity = $self->{sessionInfo}->{_lassoIdentityDump}; if ($session) { unless ( $self->setSessionFromDump( $logout, $session ) ) { $self->lmLog( "Unable to load Lasso Session", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "Lasso Session loaded", 'debug' ); } # No need to initiate logout requests on SP, if no SAML session is # available into the session. else { return PE_OK; } if ($identity) { unless ( $self->setIdentityFromDump( $logout, $identity ) ) { $self->lmLog( "Unable to load Lasso Identity", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "Lasso Identity loaded", 'debug' ); } # Proceed to logout on all others SP. # Verify that logout response is correctly sent. If we have to wait for # providers during HTTP-REDIRECT process, return PE_INFO to notify to wait # for them. # Redirect on logout page when all is done. if ( $self->sendLogoutRequestToProviders($logout) ) { $self->{urldc} = $ENV{SCRIPT_NAME} . "?logout=1"; return PE_INFO; } return PE_OK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::IssuerDBSAML - SAML IssuerDB for LemonLDAP::NG =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = Lemonldap::NG::Portal::SharedConf->new({ issuerDB => SAML, }); =head1 DESCRIPTION SAML IssuerDB for LemonLDAP::NG =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2009, 2010, 2011, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2010 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBAD.pm0000644000175000017500000000121212542740733025733 0ustar clementclement##@file # AD user database backend file ##@class # AD user database backend class package Lemonldap::NG::Portal::UserDBAD; use strict; our $VERSION = '1.3'; use base qw(Lemonldap::NG::Portal::UserDBLDAP); ## @apmethod protected int formateFilter() # Set the default LDAP filter for AD. # By default, the user is searched in the LDAP server with sAMAccountName. # @return Lemonldap::NG::Portal constant sub formateFilter { my $self = shift; $self->{AuthLDAPFilter} ||= '(&(sAMAccountName=$user)(objectClass=person))'; $self->{mailLDAPFilter} ||= '(&(mail=$mail)(objectClass=person))'; return $self->SUPER::formateFilter; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthFacebook.pm0000644000175000017500000002035412542740733026745 0ustar clementclement##@file # Facebook authentication backend file ##@class # Facebook authentication backend class. # # You need to have an application ID and an application secret (take a look at # https://developers.facebook.com/apps package Lemonldap::NG::Portal::AuthFacebook; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Regexp; use Lemonldap::NG::Portal::_Browser; use URI::Escape; our @ISA = (qw(Lemonldap::NG::Portal::_Browser)); our $VERSION = '1.4.0'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @method Net::Facebook::Oauth2 fb() # @return Net::Facebook::Oauth2 object sub fb { my $self = shift; return $self->{_fb} if ( $self->{_fb} ); # Build callback uri my $sep = '?'; my $ret = $self->{portal}; foreach my $v ( [ $self->{_url}, "url" ], [ $self->param( $self->{authChoiceParam} ), $self->{authChoiceParam} ] ) { if ( $v->[0] ) { $ret .= "$sep$v->[1]=$v->[0]"; $sep = '&'; } } # Build Net::Facebook::Oauth2 object eval { $self->{_fb} = Net::Facebook::Oauth2->new( application_id => $self->{facebookAppId}, application_secret => $self->{facebookAppSecret}, callback => $ret, ); }; unless ( $self->{_fb} ) { $self->abort( 'Unable to build Net::Facebook::Oauth2 object', $@ ); } return $self->{_fb}; } ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; unless ($initDone) { eval { require Net::Facebook::Oauth2; }; $self->abort( 'Unable to load Net::Facebook::Oauth2', $@ ) if ($@); foreach my $arg (qw(facebookAppId facebookAppSecret)) { $self->abort("Parameter $arg is required") unless ( $self->{$arg} ); } $initDone++; } PE_OK; } ## @apmethod int extractFormInfo() # Read username return by Facebook authentication system. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; # 1. Check Facebook responses # 1.1 Good responses if ( my $code = $self->param('code') ) { if ( my $access_token = $self->fb()->get_access_token( code => $code ) ) { $self->{sessionInfo}->{_facebookToken} = $access_token; # Get fields (see https://developers.facebook.com/tools/explorer) my @fields = ( 'id', 'username' ); # Look at wanted fields my %vars = ( %{ $self->{exportedVars} }, %{ $self->{facebookExportedVars} } ); if ( $self->get_module('user') =~ /^Facebook/ ) { push @fields, map { /^(\w+)$/ ? ($1) : () } values %vars; } my $datas; # When a field is not granted, Facebook returns only an error # without real explanation. So here we try to reduce query until # having a valid response while (@fields) { $datas = $self->fb->get( 'https://graph.facebook.com/me', { fields => join( ',', @fields ) } )->as_hash; unless ( ref $datas ) { $self->lmLog( "Unable to get any Facebook field", 'error' ); return PE_ERROR; } if ( $datas->{error} ) { my $tmp = pop @fields; $self->lmLog( "Unable to get some Facebook fields ($datas->{error}->{message}). Retrying without $tmp", 'warn' ); } else { last; } } unless (@fields) { $self->lmLog( "Unable to get any Facebook field", 'error' ); return PE_ERROR; } # Look if a field can be used to trace user unless ( $self->{user} = $datas->{username} ) { $self->lmLog( 'Unable to get Facebook username', 'warn' ); unless ( $self->{user} = $datas->{id} ) { $self->lmLog( 'Unable to get Facebook id', 'error' ); return PE_ERROR; } } $self->{_facebookDatas} = $datas; # Force redirection to avoid displaying Oauth datas $self->{mustRedirect} = 1; return PE_OK; } return PE_BADCREDENTIALS; } # 1.2 Bad responses if ( my $error_code = $self->param('error_code') ) { my $error_message = $self->param('error_message'); $self->lmLog( "Facebook error code $error_code: $error_message", 'error' ); return PE_ERROR; } # 2. Else redirect user to Facebook login page: # Build Facebook redirection # TODO: use a param to use "publish_stream" or not my $check_url = $self->fb()->get_authorization_url( scope => ['offline_access'], display => 'page', ); print $self->redirect($check_url); $self->quit(); } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{'_user'} = $self->{user}; $self->{sessionInfo}->{authenticationLevel} = $self->{facebookAuthnLevel} || 1; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthFacebook - Perl extension for building Lemonldap::NG compatible portals with Facebook authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Facebook', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Facebook authentication mechanism. See L for usage and other methods. =head1 SEE ALSO L, L, L, L L =head1 AUTHOR =over =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2013 by Xavier Guimard, Ex.guimard@free.frE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SMTP.pm0000644000175000017500000001245412542740733025336 0ustar clementclement##@file # SMTP common functions ##@class # SMTP common functions package Lemonldap::NG::Portal::_SMTP; use strict; use String::Random; use MIME::Lite; use MIME::Base64; use Encode; our $VERSION = '1.4.2'; ## @method string gen_password(string regexp) # Generate a complex password based on a regular expression # @param regexp regular expression # @return complex password sub gen_password { my $self = shift; my $regexp = shift; my $random = new String::Random; return $random->randregex($regexp); } ## @method int send_mail(string mail, string subject, string body, string html) # Send mail # @param mail recipient address # @param subject mail subject # @param body mail body # @param html optional set content type to HTML # @return boolean result sub send_mail { my ( $self, $mail, $subject, $body, $html ) = splice @_; # Set charset my $charset = $self->{mailCharset} ? $self->{mailCharset} : "utf-8"; # Encode the body with the given charset $body = encode( $charset, $body ); $subject = encode( $charset, $subject ); # Debug messages $self->lmLog( "SMTP From " . $self->{mailFrom}, 'debug' ); $self->lmLog( "SMTP To " . $mail, 'debug' ); $self->lmLog( "SMTP Subject " . $subject, 'debug' ); $self->lmLog( "SMTP Body " . $body, 'debug' ); $self->lmLog( "SMTP HTML flag " . ( $html ? "on" : "off" ), 'debug' ); $self->lmLog( "SMTP Reply-To " . $self->{mailReplyTo}, 'debug' ) if $self->{mailReplyTo}; # Encode the subject $subject = encode_base64($subject); $subject =~ s/\s//g; $subject = "=?$charset?B?" . $subject . "?="; # Detect included images (cid) my %cid = ( $body =~ m/"cid:([^:]+):([^"]+)"/g ); # Replace cid in body $body =~ s/"cid:([^:]+):([^"]+)"/"cid:$1"/g; eval { # Create message my $message; # HTML case if ($html) { $message = MIME::Lite->new( From => $self->{mailFrom}, To => $mail, "Reply-To" => $self->{mailReplyTo}, Subject => $subject, Type => 'multipart/related', ); # Attach HTML message $message->attach( Type => "text/html; charset=$charset", Data => qq{$body}, ); # Attach included images foreach ( keys %cid ) { $message->attach( Type => "image/" . ( $cid{$_} =~ m/\.(\w+)/ )[0], Id => $_, Path => $self->getApacheHtdocsPath() . "/" . $cid{$_}, ); } } # Plain text case else { $message = MIME::Lite->new( From => $self->{mailFrom}, To => $mail, "Reply-To" => $self->{mailReplyTo}, Subject => $subject, Type => 'TEXT', Data => $body, ); # Manage content type and charset $message->attr( "content-type" => "text/plain" ); $message->attr( "content-type.charset" => $charset ); } # Send the mail $self->{SMTPServer} ? $message->send( "smtp", $self->{SMTPServer}, AuthUser => $self->{SMTPAuthUser}, AuthPass => $self->{SMTPAuthPass} ) : $message->send(); }; if ($@) { $self->lmLog( "Send message failed: $@", 'error' ); return 0; } return 1; } ## @method string getMailSession(string user) # Check if a mail session exists # @param user the value of the user key in session # @return the first session id found or nothing if no session sub getMailSession { my ( $self, $user ) = splice @_; my $moduleOptions = $self->{globalStorageOptions} || {}; $moduleOptions->{backend} = $self->{globalStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; # Search on mail sessions my $sessions = $module->searchOn( $moduleOptions, "user", $user ); # Browse found sessions to check if it's a mail session foreach my $id ( keys %$sessions ) { my $mailSession = $self->getApacheSession( $id, 1 ); next unless ($mailSession); return $id if ( $mailSession->data->{_type} =~ /^mail$/ ); } # No mail session found, return empty string return ""; } ## @method string getRegisterSession(string mail) # Check if a register session exists # @param mail the value of the mail key in session # @return the first session id found or nothing if no session sub getRegisterSession { my ( $self, $mail ) = splice @_; my $moduleOptions = $self->{globalStorageOptions} || {}; $moduleOptions->{backend} = $self->{globalStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; # Search on register sessions my $sessions = $module->searchOn( $moduleOptions, "mail", $mail ); # Browse found sessions to check if it's a register session foreach my $id ( keys %$sessions ) { my $registerSession = $self->getApacheSession( $id, 1 ); next unless ($registerSession); return $id if ( $registerSession->data->{_type} =~ /^register$/ ); } # No register session found, return empty string return ""; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthGoogle.pm0000644000175000017500000003127612542740733026455 0ustar clementclement##@file # Google authentication backend file ##@class # Google authentication backend class. package Lemonldap::NG::Portal::AuthGoogle; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Regexp; use Lemonldap::NG::Portal::_Browser; use URI::Escape; use constant AXSPECURL => 'http://openid.net/srv/ax/1.0'; use constant GOOGLEENDPOINT => 'https://www.google.com/accounts/o8/id'; our @ISA = (qw(Lemonldap::NG::Portal::_Browser)); our $VERSION = '1.4.0'; our $googleEndPoint; BEGIN { eval { require threads::shared; threads::shared::share($googleEndPoint); }; } ## @method string googleEndPoint() # Return the Google OpenID endpoint given by # https://www.google.com/accounts/o8/id # @return string sub googleEndPoint { my $self = shift; # First time, get and store Google endpoint unless ($googleEndPoint) { my $response = $self->ua()->get( GOOGLEENDPOINT, Accept => 'application/xrds+xml' ); if ( $response->is_success ) { # Dirty XML parse # (searching for https://www.google.com/accounts/o8/ud) my $tmp = $response->decoded_content; if ( $tmp =~ m#\s*(\S+)\s*#mi ) { $googleEndPoint = $1; } else { $self->lmLog( 'Here is the Google response: ' . $response->decoded_content, 'error' ); $self->abort('Can\'t find endpoint in Google response'); } } else { $self->abort( 'Can\'t access to Google endpoint:', $response->status_line ); } } return $googleEndPoint; } ## @method boolean checkGoogleSession() # Search for claimed_id in persistent sessions DB. # @return true if sessions was recovered sub checkGoogleSession { my $self = shift; # Find in Google response for AX attributes # See https://developers.google.com/accounts/docs/OpenID#Parameters # for more ( $self->{_AXNS} ) = map { ( /^openid\.ns\.(.*)/ and $self->param($_) eq AXSPECURL ) ? ($1) : () } $self->param(); # Look at persistent database my $id = $self->_md5hash( $self->param('openid.claimed_id') ); my $pSession = $self->getPersistentSession($id); my $gs; # No AX response, if datas are already shared, store them unless ( $self->{_AXNS} ) { if ( $pSession->data ) { $self->{user} = $pSession->data->{email}; while ( my ( $k, $v ) = each %{ $pSession->data } ) { $gs->{$k} = $v; } } } else { # Parse AX response # First store email as user key. Note that this is the returned value # so if it's empty, request is retried $self->{user} = $self->param("openid.$self->{_AXNS}.value.email"); # Retrieve AX datas (and store them in persistent session) my $infos; foreach my $k ( $self->param() ) { if ( $k =~ /^openid\.$self->{_AXNS}\.value\.(\w+)$/ ) { $gs->{$1} = $infos->{$1} = $self->param($k); } } $pSession->update($infos); } # Now store datas in session my %vars = ( %{ $self->{exportedVars} }, %{ $self->{googleExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { my $attr = $k; $attr =~ s/^!//; # Value (ie AX attribute) must be one of: if ( $v =~ Lemonldap::NG::Common::Regexp::GOOGLEAXATTR() ) { # One value is missing: unless ( exists( $gs->{$v} ) ) { # Case 1: value was asked but not returned, set an empty value # in persistent session (so that it's defined) if ( $self->{_AXNS} ) { $self->_sub( 'userInfo', "$v required attribute is missing in Google response, storing ''" ); $gs->{$v} = ''; $pSession->update( { $v => '' } ); } # Case 2: value is not stored, probably configuration has # changed and this value was never asked else { $self->_sub( 'userInfo', "$v required attribute is missing in persistent session, let's ask it" ); return 0; } } $self->{sessionInfo}->{$attr} = $gs->{$v}; } # If an exported variable is not AX compliant, just warn else { $self->lmLog( "Ignoring attribute $v which is not a valid Google OpenID AX attribute", 'warn' ); } } # Boolean value: ~false if no $user value return $self->{user}; } ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { PE_OK; } ## @apmethod int extractFormInfo() # Read username return by Google authentication system. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; my $ax = ''; # 1. Check Google responses if ( $self->param('openid.mode') ) { # 1.1 First, verify that the response isn't forged # Build verification request my $check_url = $self->googleEndPoint() . "?" . join( '&', map { my $val = $self->param($_); $val = 'check_authentication' if $_ eq 'openid.mode'; sprintf '%s=%s', uri_escape_utf8($_), uri_escape_utf8($val); } $self->param() ); # Launch request my $response = $self->ua()->get( $check_url, Accept => 'text/plain' ); unless ( $response->is_success ) { $self->abort( 'Can\'t verify Google authentication', $response->status_line ); } else { my %tmp = map { my ( $key, $value ) = split /:/, $_, 2; $key => $value } split /\n/, $response->decoded_content; # Reject invalid requests unless ( $tmp{is_valid} eq 'true' ) { return PE_BADCREDENTIALS; } # 1.2 Check if datas are already shared with Google unless ( $self->checkGoogleSession() ) { # Datas are missing, prepare AX query which will be added to # the request to Google # a) email is required, will be used as 'user' field $ax = '&openid.ns.ax=' . AXSPECURL . '&openid.ax.mode=fetch_request' . '&openid.ax.type.email=http://axschema.org/contact/email' . '&openid.ax.required=email'; # b) if UserDB is Google, ask for exported variables if ( $self->get_module('user') eq 'Google' ) { my $u; while ( my ( $v, $k ) = each %{ $self->{exportedVars} } ) { next if ( $k eq 'email' ); # Check if wanted attribute is known by Google if ( $k =~ /^(?:(?:la(?:nguag|stnam)|firstnam)e|country)$/ ) { $ax .= ",$k"; # Note: AX type seems to be required by Google $u .= "&openid.ax.type.$k=" . { country => "http://axschema.org/contact/country/home", firstname => "http://axschema.org/namePerson/first", lastname => "http://axschema.org/namePerson/last", language => "http://axschema.org/pref/language" }->{$k}; } else { $self->lmLog( "Field name: $k is not exported by Google", 'warn' ); } } $ax .= $u; } } # 1.3 Datas are recovered, user is authenticated else { $self->lmLog( 'Good Google authentication', 'debug' ); # Force redirection to avoid displaying OpenID datas $self->{mustRedirect} = 1; return PE_OK; } } } # 2. Redirect user to Google login page: # => no OpenID response or missing datas # Build request to Google my $check_url = $self->googleEndPoint() . '?openid.mode=checkid_setup' . '&openid.ns=http://specs.openid.net/auth/2.0' . '&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select' . '&openid.identity=http://specs.openid.net/auth/2.0/identifier_select' . $ax; # Requested attributes if set # Build portal URI... my $sep = '?'; my $returnTo = $self->{portal}; foreach my $v ( [ $self->{_url}, "url" ], [ $self->param( $self->{authChoiceParam} ), $self->{authChoiceParam} ] ) { if ( $v->[0] ) { $returnTo .= "$sep$v->[1]=$v->[0]"; $sep = '&'; } } # ... and add it $check_url .= '&openid.return_to=' . uri_escape_utf8($returnTo); # Now redirect user print $self->redirect($check_url); $self->quit(); } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{'_user'} = $self->{user}; $self->{sessionInfo}->{authenticationLevel} = $self->{googleAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthGoogle - Perl extension for building Lemonldap::NG compatible portals with Google authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Google', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Google authentication mechanism. See L for usage and other methods. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2013 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2013 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Display.pm0000644000175000017500000003457212542740733026026 0ustar clementclement## @file # Display functions for LemonLDAP::NG Portal ## @class # Display functions for LemonLDAP::NG Portal package Lemonldap::NG::Portal::Display; use strict; use Lemonldap::NG::Portal::Simple; use utf8; our $VERSION = '1.4.0'; ## @method array display() # Call portal process and set template parameters # @return template name and template parameters sub display { my $self = shift; my $skin_dir = $self->getApacheHtdocsPath() . "/skins"; my ( $skinfile, %templateParams ); my $http_error = $self->param('lmError'); # 0. Display error page if ($http_error) { $skinfile = 'error.tpl'; # Error code my $error500 = 1 if ( $http_error eq "500" ); my $error403 = 1 if ( $http_error eq "403" ); my $error503 = 1 if ( $http_error eq "503" ); # Check URL $self->_sub('controlUrlOrigin'); # Load session content $self->_sub('controlExistingSession'); %templateParams = ( PORTAL_URL => $self->{portal}, LOGOUT_URL => $self->{portal} . "?logout=1", URL => $self->{urldc}, ERROR403 => $error403, ERROR500 => $error500, ERROR503 => $error503, ); } # 1. Good authentication elsif ( $self->process() ) { # 1.1 Image mode if ( $self->{error} == PE_IMG_OK || $self->{error} == PE_IMG_NOK ) { $skinfile = "$skin_dir/common/" . ( $self->{error} == PE_IMG_OK ? 'ok.png' : 'warning.png' ); $self->printImage( $skinfile, 'image/png' ); exit; } # 1.2 Case : there is a message to display elsif ( my $info = $self->info() ) { $skinfile = 'info.tpl'; %templateParams = ( AUTH_ERROR_TYPE => $self->error_type, MSG => $info, URL => $self->{urldc}, HIDDEN_INPUTS => $self->buildHiddenForm(), ACTIVE_TIMER => $self->{activeTimer}, FORM_METHOD => $self->{infoFormMethod}, ); } # 1.3 Redirection elsif ( $self->{error} == PE_REDIRECT ) { $skinfile = "redirect.tpl"; %templateParams = ( URL => $self->{urldc}, HIDDEN_INPUTS => $self->buildHiddenForm(), FORM_METHOD => $self->{redirectFormMethod}, ); } # 1.4 Case : display menu else { # Initialize menu elements $self->_sub('menuInit'); $skinfile = 'menu.tpl'; my $auth_user = $self->{sessionInfo}->{ $self->{portalUserAttr} }; utf8::decode($auth_user); %templateParams = ( AUTH_USER => $auth_user, AUTOCOMPLETE => $self->{portalAutocomplete}, NEWWINDOW => $self->{portalOpenLinkInNewWindow}, AUTH_ERROR => $self->error( $self->{menuError} ), AUTH_ERROR_TYPE => $self->error_type( $self->{menuError} ), DISPLAY_TAB => $self->{menuDisplayTab}, LOGOUT_URL => "$ENV{SCRIPT_NAME}?logout=1", REQUIRE_OLDPASSWORD => $self->{portalRequireOldPassword}, HIDE_OLDPASSWORD => 0, # Do not hide old password if it is required DISPLAY_MODULES => $self->{menuDisplayModules}, APPSLIST_MENU => $self->{menuAppslistMenu}, # For old templates APPSLIST_DESC => $self->{menuAppslistDesc}, # For old templates SCRIPT_NAME => $ENV{SCRIPT_NAME}, APPSLIST_ORDER => $self->{sessionInfo}->{'appsListOrder'}, PING => $self->{portalPingInterval}, ); } } # 2. Authentication not complete # 2.1 A notification has to be done (session is created but hidden and unusable # until the user has accept the message) elsif ( my $notif = $self->notification ) { $skinfile = 'notification.tpl'; %templateParams = ( AUTH_ERROR_TYPE => $self->error_type, NOTIFICATION => $notif, HIDDEN_INPUTS => $self->buildHiddenForm(), AUTH_URL => $self->get_url, CHOICE_PARAM => $self->{authChoiceParam}, CHOICE_VALUE => $self->{_authChoice}, ); } # 2.2 An authentication (or userDB) module needs to ask a question # before processing to the request elsif ( $self->{error} == PE_CONFIRM ) { $skinfile = 'confirm.tpl'; %templateParams = ( AUTH_ERROR => $self->error, AUTH_ERROR_TYPE => $self->error_type, AUTH_URL => $self->get_url, MSG => $self->info(), HIDDEN_INPUTS => $self->buildHiddenForm(), ACTIVE_TIMER => $self->{activeTimer}, FORM_METHOD => $self->{confirmFormMethod}, CHOICE_PARAM => $self->{authChoiceParam}, CHOICE_VALUE => $self->{_authChoice}, CHECK_LOGINS => $self->{portalCheckLogins} && $self->{login}, ASK_LOGINS => $self->{checkLogins}, CONFIRMKEY => $self->stamp(), LIST => $self->{list} || [], ); } # 2.3 There is a message to display elsif ( my $info = $self->info() ) { $skinfile = 'info.tpl'; %templateParams = ( AUTH_ERROR => $self->error, AUTH_ERROR_TYPE => $self->error_type, MSG => $info, URL => $self->{urldc}, HIDDEN_INPUTS => $self->buildHiddenForm(), ACTIVE_TIMER => $self->{activeTimer}, FORM_METHOD => $self->{infoFormMethod}, CHOICE_PARAM => $self->{authChoiceParam}, CHOICE_VALUE => $self->{_authChoice}, ); } # 2.4 OpenID menu page elsif ($self->{error} == PE_OPENID_EMPTY or $self->{error} == PE_OPENID_BADID ) { $skinfile = 'openid.tpl'; my $p = $self->{portal} . $self->{issuerDBOpenIDPath}; $p =~ s#(? $self->error, AUTH_ERROR_TYPE => $self->error_type, PROVIDERURI => $p, ID => $self->{_openidPortal} . $self->{sessionInfo} ->{ $self->{openIdAttr} || $self->{whatToTrace} }, PORTAL_URL => $self->{portal}, MSG => $self->info(), ); } # 2.5 Authentication has been refused OR this is the first access else { $skinfile = 'login.tpl'; %templateParams = ( AUTH_ERROR => $self->error, AUTH_ERROR_TYPE => $self->error_type, AUTH_URL => $self->get_url, LOGIN => $self->get_user, AUTOCOMPLETE => $self->{portalAutocomplete}, CHECK_LOGINS => $self->{portalCheckLogins}, ASK_LOGINS => $self->{checkLogins}, DISPLAY_RESETPASSWORD => $self->{portalDisplayResetPassword}, DISPLAY_REGISTER => $self->{portalDisplayRegister}, MAIL_URL => $self->{mailUrl}, REGISTER_URL => $self->{registerUrl}, HIDDEN_INPUTS => $self->buildHiddenForm(), LOGIN_INFO => $self->loginInfo(), ); # Display captcha if it's enabled if ( $self->{captcha_login_enabled} ) { %templateParams = ( %templateParams, CAPTCHA_IMG => $self->{captcha_img}, CAPTCHA_CODE => $self->{captcha_code}, CAPTCHA_SIZE => $self->{captcha_size} ); } # Show password form if password policy error if ( $self->{error} == PE_PP_CHANGE_AFTER_RESET or $self->{error} == PE_PP_MUST_SUPPLY_OLD_PASSWORD or $self->{error} == PE_PP_INSUFFICIENT_PASSWORD_QUALITY or $self->{error} == PE_PP_PASSWORD_TOO_SHORT or $self->{error} == PE_PP_PASSWORD_TOO_YOUNG or $self->{error} == PE_PP_PASSWORD_IN_HISTORY or $self->{error} == PE_PASSWORD_MISMATCH or $self->{error} == PE_BADOLDPASSWORD or $self->{error} == PE_PASSWORDFORMEMPTY ) { %templateParams = ( %templateParams, REQUIRE_OLDPASSWORD => 1, # Old password is required to check user credentials DISPLAY_FORM => 0, DISPLAY_OPENID_FORM => 0, DISPLAY_YUBIKEY_FORM => 0, DISPLAY_PASSWORD => 1, DISPLAY_RESETPASSWORD => 0, AUTH_LOOP => [], CHOICE_PARAM => $self->{authChoiceParam}, CHOICE_VALUE => $self->{_authChoice}, OLDPASSWORD => $self->checkXSSAttack( 'oldpassword', $self->{oldpassword} ) ? "" : $self->{oldpassword}, HIDE_OLDPASSWORD => $self->{hideOldPassword}, ); } # Disable all forms on: # * Logout message # * Bad URL error elsif ($self->{error} == PE_LOGOUT_OK or $self->{error} == PE_BADURL ) { %templateParams = ( %templateParams, DISPLAY_RESETPASSWORD => 0, DISPLAY_FORM => 0, DISPLAY_OPENID_FORM => 0, DISPLAY_YUBIKEY_FORM => 0, AUTH_LOOP => [], PORTAL_URL => $self->{portal}, MSG => $self->info(), ); } # Display authentifcation form else { # Authentication loop if ( $self->{authLoop} ) { %templateParams = ( %templateParams, AUTH_LOOP => $self->{authLoop}, CHOICE_PARAM => $self->{authChoiceParam}, CHOICE_VALUE => $self->{_authChoice}, DISPLAY_FORM => 0, DISPLAY_OPENID_FORM => 0, DISPLAY_YUBIKEY_FORM => 0, ); } # Choose what form to display if not in a loop else { my $displayType = $self->getDisplayType(); $self->lmLog( "Display type $displayType ", 'debug' ); %templateParams = ( %templateParams, DISPLAY_FORM => $displayType eq "standardform" ? 1 : 0, DISPLAY_OPENID_FORM => $displayType eq "openidform" ? 1 : 0, DISPLAY_YUBIKEY_FORM => $displayType eq "yubikeyform" ? 1 : 0, DISPLAY_LOGO_FORM => $displayType eq "logo" ? 1 : 0, module => $displayType eq "logo" ? $self->get_module('auth') : "", AUTH_LOOP => [], PORTAL_URL => $displayType eq "logo" ? $self->{portal} : 0, MSG => $self->info(), ); } } } ## Common template params my $skin = $self->getSkin(); my $portalPath = $self->{portal}; $portalPath =~ s#^https?://[^/]+/?#/#; $portalPath =~ s#[^/]+\.pl$##; %templateParams = ( %templateParams, SKIN_PATH => $portalPath . "skins", SKIN => $skin, ANTIFRAME => $self->{portalAntiFrame}, ); ## Custom template params if ( my $customParams = $self->getCustomTemplateParameters() ) { %templateParams = ( %templateParams, %$customParams ); } return ( "$skin_dir/$skin/$skinfile", %templateParams ); } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::Display - Display functions for LemonLDAP::NG Portal =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; use HTML::Template; my $portal = Lemonldap::NG::Portal::SharedConf->new(); my($templateName,%templateParams) = $portal->display(); my $template = HTML::Template->new( filename => $templateName, die_on_bad_params => 0, cache => 0, global_vars => 1, filter => sub { $portal->translate_template(@_) } ); while ( my ( $k, $v ) = each %templateParams ) { $template->param( $k, $v ); } print $portal->header('text/html; charset=utf-8'); print $template->output; =head1 DESCRIPTION This module is used to build all templates parameters to display LemonLDAP::NG Portal =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2011, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2011 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBChoice.pm0000644000175000017500000000145612542740733027537 0ustar clementclement##@file # Choice user backend file ##@class # Choice user backend class package Lemonldap::NG::Portal::PasswordDBChoice; use strict; use Lemonldap::NG::Portal::_Choice; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.4.0'; ## @apmethod int passwordDBInit() # Does nothing # @return Lemonldap::NG::Portal constant sub passwordDBInit { my $self = shift; return $self->_choice->try( 'passwordDBInit', 2 ); } ## @apmethod int modifyPassword() # Does nothing # @return Lemonldap::NG::Portal constant sub modifyPassword { my $self = shift; return $self->_choice->try( 'modifyPassword', 2 ); } ## @apmethod int passwordDBFinish() # Does nothing # @return Lemonldap::NG::Portal constant sub passwordDBFinish { my $self = shift; return $self->_choice->try( 'passwordDBFinish', 2 ); } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthBrowserID.pm0000644000175000017500000001713712542740733027101 0ustar clementclement##@file # BrowserID authentication backend file ##@class # BrowserID authentication backend class package Lemonldap::NG::Portal::AuthBrowserID; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_Browser; use HTTP::Request; use JSON; our @ISA = (qw(Lemonldap::NG::Portal::_Browser)); our $VERSION = '1.3.0'; ## @apmethod int authInit() # Enables Browser ID (required for templates) # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; $self->{browserIdVerificationURL} ||= "https://verifier.login.persona.org/verify"; $self->{browserIdAuthnLevel} = "2" unless defined $self->{browserIdAuthnLevel}; $self->{browserIdSiteName} ||= "LemonLDAP::NG"; $self->{browserIdBackgroundColor} ||= "#000"; $self->{browserIdAutoLogin} ||= "0"; # Enable BrowserID in template $self->{tpl_browserIdEnabled} = 1; # Set BrowserID customization parameters $self->{tpl_browserIdSiteName} = $self->{browserIdSiteName} if $self->{browserIdSiteName}; $self->{tpl_browserIdSiteLogo} = $self->{browserIdSiteLogo} if $self->{browserIdSiteLogo}; $self->{tpl_browserIdBackgroundColor} = $self->{browserIdBackgroundColor} if $self->{browserIdBackgroundColor}; $self->{tpl_browserIdAutoLogin} = $self->{browserIdAutoLogin} if $self->{browserIdAutoLogin}; PE_OK; } ## @apmethod int setAuthSessionInfo() # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{_user} = $self->{user}; $self->{sessionInfo}->{authenticationLevel} = $self->{browserIdAuthnLevel}; $self->{sessionInfo}->{_browserIdAnswer} = $self->{browserIdAnswer}; $self->{sessionInfo}->{_browserIdAnswerRaw} = $self->{browserIdAnswerRaw}; PE_OK; } ## @apmethod int extractFormInfo() # Get BrowserID assertion # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; # Assertion should be browserIdAssertion parameter if ( $self->{browserIdAssertion} = $self->param('browserIdAssertion') ) { $self->lmLog( "BrowserID Assertion found: " . $self->{browserIdAssertion}, 'debug' ); # Resolve assertion my $postdata = "assertion=" . $self->{browserIdAssertion} . "&audience=" . $self->{portal}; $self->lmLog( "Send $postdata to " . $self->{browserIdVerificationURL}, 'debug' ); my $request = HTTP::Request->new( 'POST' => $self->{browserIdVerificationURL} ); $request->content_type('application/x-www-form-urlencoded'); $request->content($postdata); my $answer = $self->ua()->request($request); $self->lmLog( "Verification response: " . $answer->as_string, 'debug' ); if ( $answer->code() == "200" ) { # Get JSON answser $self->{browserIdAnswerRaw} = $answer->content; $self->lmLog( "Received BrowserID answer: " . $self->{browserIdAnswerRaw}, 'debug' ); my $json = new JSON(); $self->{browserIdAnswer} = $json->decode( $self->{browserIdAnswerRaw} ); if ( $self->{browserIdAnswer}->{status} eq "okay" ) { $self->{user} = $self->{browserIdAnswer}->{email}; $self->lmLog( "Found user " . $self->{user} . " in BrowserID verification answer", 'debug' ); return PE_OK; } else { if ( $self->{browserIdAnswer}->{reason} ) { $self->lmLog( "Assertion " . $self->{browserIdAssertion} . " verification error: " . $self->{browserIdAnswer}->{reason}, 'error' ); } else { $self->lmLog( "Assertion " . $self->{browserIdAssertion} . " not verified by BrowserID provider", 'error' ); } return PE_BADCREDENTIALS; } } else { $self->lmLog( "Fail to validate BrowserId assertion " . $self->{browserIdAssertion}, 'error' ); return PE_ERROR; } return PE_OK; } # No assertion, return to login page with BrowserID login script $self->{tpl_browserIdLoadLoginScript} = 1; return PE_FIRSTACCESS; } ## @apmethod int authenticate() # Verify assertion and audience # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Call BrowserID logout method # @return Lemonldap::NG::Portal constant sub authLogout { my $self = shift; $self->{tpl_browserIdLoadLogoutScript} = 1; PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthBrowserID - Perl extension for building Lemonldap::NG compatible portals with Mozilla BrowserID protocol =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'BrowserID', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to create sessions for anonymous users. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2013 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/RegisterDBLDAP.pm0000644000175000017500000000536112542740733027046 0ustar clementclement##@file # LDAP register backend file ##@class # LDAP register backend class package Lemonldap::NG::Portal::RegisterDBLDAP; use strict; use Lemonldap::NG::Portal::Simple; ## @method int computeLogin # Compute a login from register infos # @result Lemonldap::NG::Portal constant sub computeLogin { my ($self) = splice @_; # Get first letter of firstname and lastname my $login = substr( lc $self->{registerInfo}->{firstname}, 0, 1 ) . lc $self->{registerInfo}->{lastname}; my $finalLogin = $login; # The uid must be unique my $i = 0; while ( $self->isLoginUsed($finalLogin) ) { $i++; $finalLogin = $login . $i; } $self->{registerInfo}->{login} = $finalLogin; return PE_OK; } ## @method int createUser # Insert new user # @result Lemonldap::NG::Portal constant sub createUser { my ($self) = splice @_; my $mesg = $self->ldap->add( "uid=" . $self->{registerInfo}->{login} . "," . $self->{ldapBase}, attrs => [ objectClass => [qw/top person organizationalPerson inetOrgPerson/], uid => $self->{registerInfo}->{login}, cn => ucfirst $self->{registerInfo}->{firstname} . " " . uc $self->{registerInfo}->{lastname}, sn => uc $self->{registerInfo}->{lastname}, givenName => ucfirst $self->{registerInfo}->{firstname}, userPassword => $self->{registerInfo}->{password}, mail => $self->{registerInfo}->{mail}, ] ); if ( $mesg->is_error ) { $self->lmLog( "Can not create entry for " . $self->{registerInfo}->{login}, 'error' ); $self->lmLog( "LDAP error " . $mesg->error, 'error' ); $self->ldap->unbind(); $self->{flags}->{ldapActive} = 0; return PE_LDAPERROR; } return PE_OK; } ## @method bool isLoginUsed # Search if login is already in use # @result 0 if login is used, 1 else sub isLoginUsed { my ( $self, $login ) = splice @_; my $mesg = $self->ldap->search( base => $self->{ldapBase}, filter => "(uid=$login)", scope => "sub", attrs => ['1.1'], ); if ( $mesg->code() != 0 ) { $self->lmLog( "LDAP Search error for $login: " . $mesg->error, 'warn' ); return 1; } if ( $mesg->count() > 0 ) { $self->lmLog( "Login $login already used in LDAP", 'debug' ); return 1; } return 0; } ## @apmethod int registerDBFinish() # Unbind. # @return Lemonldap::NG::Portal constant sub registerDBFinish { my $self = shift; if ( ref( $self->{ldap} ) && $self->{flags}->{ldapActive} ) { $self->ldap->unbind(); $self->{flags}->{ldapActive} = 0; } PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/MailReset.pm0000644000175000017500000003716212542740733026304 0ustar clementclement## @file # Module for password reset by mail ## @class Lemonldap::NG::Portal::MailReset # Module for password reset by mail package Lemonldap::NG::Portal::MailReset; use strict; use warnings; our $VERSION = '1.4.5'; use Lemonldap::NG::Portal::Simple qw(:all); use base qw(Lemonldap::NG::Portal::SharedConf Exporter); use HTML::Template; use Encode; use POSIX qw(strftime); #inherits Lemonldap::NG::Portal::_SMTP *EXPORT_OK = *Lemonldap::NG::Portal::Simple::EXPORT_OK; *EXPORT_TAGS = *Lemonldap::NG::Portal::Simple::EXPORT_TAGS; *EXPORT = *Lemonldap::NG::Portal::Simple::EXPORT; ## @method boolean process() # Call functions to handle password reset by mail issued from # - itself: # - smtpInit # - extractMailInfo # - getMailUser # - storeMailSession # - sendConfirmationMail # - changePassword # - sendPasswordMail # - portal core module: # - setMacros # - setLocalGroups # - setGroups # - authentication module: # - authInit # - authFinish # - userDB module: # - userDBInit # - setSessionInfo # - userDBFinish # - passwordDB module: # - passwordDBInit # - passwordDBFinish # @return 1 if all is OK sub process { my ($self) = splice @_; # Process subroutines $self->{error} = PE_OK; $self->{error} = $self->_subProcess( qw(smtpInit authInit extractMailInfo userDBInit getMailUser setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups userDBFinish storeMailSession sendConfirmationMail passwordDBInit changePassword passwordDBFinish sendPasswordMail authFinish) ); return ( ( $self->{error} <= 0 or $self->{error} == PE_PASSWORD_OK or $self->{error} == PE_CAPTCHAERROR or $self->{error} == PE_CAPTCHAEMPTY or $self->{error} == PE_MAILCONFIRMOK or $self->{error} == PE_MAILOK ) ? 0 : 1 ); } ## @method int smtpInit() # Load SMTP methods # @return Lemonldap::NG::Portal constant sub smtpInit { my ($self) = splice @_; eval { use base qw(Lemonldap::NG::Portal::_SMTP) }; if ($@) { $self->lmLog( "Unable to load SMTP functions ($@)", 'error' ); return PE_ERROR; } PE_OK; } ## @method int extractMailInfo # Get mail from form or from mail_token # @return Lemonldap::NG::Portal constant sub extractMailInfo { my ($self) = splice @_; if ( $self->{captcha_mail_enabled} ) { eval { $self->initCaptcha(); }; $self->lmLog( "Can't init captcha: $@", "error" ) if $@; } unless ( $self->param('mail') || $self->param('mail_token') ) { return PE_MAILFIRSTACCESS if ( $self->request_method =~ /GET/ ); return PE_MAILFORMEMPTY; } $self->{mail_token} = $self->param('mail_token'); $self->{newpassword} = $self->param('newpassword'); $self->{confirmpassword} = $self->param('confirmpassword'); # If a mail token is present, find the corresponding mail if ( $self->{mail_token} ) { $self->lmLog( "Token given for password reset: " . $self->{mail_token}, 'debug' ); # Get the corresponding session my $mailSession = $self->getApacheSession( $self->{mail_token} ); if ($mailSession) { $self->{mail} = $mailSession->data->{user}; $self->{mailAddress} = $mailSession->data->{ $self->{mailSessionKey} }; $self->lmLog( "User associated to token: " . $self->{mail}, 'debug' ); } return PE_BADMAILTOKEN unless ( $self->{mail} ); } else { # Use submitted value $self->{mail} = $self->param('mail'); # Captcha for mail form # Only if mail session does not already exist if ( $self->{captcha_mail_enabled} && $self->{mail} && !$self->getMailSession( $self->{mail} ) ) { $self->{captcha_user_code} = $self->param('captcha_user_code'); $self->{captcha_check_code} = $self->param('captcha_code'); unless ( $self->{captcha_user_code} && $self->{captcha_check_code} ) { $self->lmLog( "Captcha not filled", 'warn' ); return PE_CAPTCHAEMPTY; } $self->lmLog( "Captcha data received: " . $self->{captcha_user_code} . " and " . $self->{captcha_check_code}, 'debug' ); # Check captcha my $captcha_result = $self->checkCaptcha( $self->{captcha_user_code}, $self->{captcha_check_code} ); if ( $captcha_result != 1 ) { if ( $captcha_result == -3 or $captcha_result == -2 ) { $self->lmLog( "Captcha failed: wrong code", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == 0 ) { $self->lmLog( "Captcha failed: code not checked (file error)", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == -1 ) { $self->lmLog( "Captcha failed: code has expired", 'warn' ); return PE_CAPTCHAERROR; } } $self->lmLog( "Captcha code verified", 'debug' ); } } # Check mail return PE_MALFORMEDUSER unless ( $self->{mail} =~ /$self->{userControl}/o ); PE_OK; } ## @method int getMailUser # Search for user using UserDB module # @return Lemonldap::NG::Portal constant sub getMailUser { my ($self) = splice @_; my $error = $self->getUser(); if ( $error == PE_USERNOTFOUND or $error == PE_BADCREDENTIALS ) { $self->_sub('userDBFinish'); return PE_MAILNOTFOUND; } return $error; } ## @method int storeMailSession # Create mail session and store token # @return Lemonldap::NG::Portal constant sub storeMailSession { my ($self) = splice @_; # Skip this step if confirmation was already sent return PE_OK if ( $self->{mail_token} or $self->getMailSession( $self->{mail} ) ); # Create a new session my $mailSession = $self->getApacheSession(); # Set _utime for session autoremove # Use default session timeout and mail session timeout to compute it my $time = time(); my $timeout = $self->{timeout}; my $mailTimeout = $self->{mailTimeout} || $timeout; my $infos = {}; $infos->{_utime} = $time + ( $mailTimeout - $timeout ); # Store expiration timestamp for further use $infos->{mailSessionTimeoutTimestamp} = $time + $mailTimeout; $self->{mailSessionTimeoutTimestamp} = $time + $mailTimeout; # Store start timestamp for further use $infos->{mailSessionStartTimestamp} = $time; $self->{mailSessionStartTimestamp} = $time; # Store mail $infos->{ $self->{mailSessionKey} } = $self->getFirstValue( $self->{sessionInfo}->{ $self->{mailSessionKey} } ); # Store user $infos->{user} = $self->{mail}; # Store type $infos->{_type} = "mail"; # Update session $mailSession->update($infos); PE_OK; } ## @method int sendConfirmationMail # Send confirmation mail # @return Lemonldap::NG::Portal constant sub sendConfirmationMail { my ($self) = splice @_; # Skip this step if user clicked on the confirmation link return PE_OK if $self->{mail_token}; # Check if confirmation mail has already been sent my $mail_session = $self->getMailSession( $self->{mail} ); $self->{mail_already_sent} = ( $mail_session and !$self->{id} ) ? 1 : 0; # Read mail session to get creation and expiration dates $self->{id} = $mail_session unless $self->{id}; $self->lmLog( "Mail session found: $mail_session", 'debug' ); my $mailSession = $self->getApacheSession( $mail_session, 1 ); $self->{mailSessionTimeoutTimestamp} = $mailSession->data->{mailSessionTimeoutTimestamp}; $self->{mailSessionStartTimestamp} = $mailSession->data->{mailSessionStartTimestamp}; # Mail session expiration date my $expTimestamp = $self->{mailSessionTimeoutTimestamp}; $self->lmLog( "Mail expiration timestamp: $expTimestamp", 'debug' ); $self->{expMailDate} = strftime( "%d/%m/%Y", localtime $expTimestamp ); $self->{expMailTime} = strftime( "%H:%M", localtime $expTimestamp ); # Mail session start date my $startTimestamp = $self->{mailSessionStartTimestamp}; $self->lmLog( "Mail start timestamp: $startTimestamp", 'debug' ); $self->{startMailDate} = strftime( "%d/%m/%Y", localtime $startTimestamp ); $self->{startMailTime} = strftime( "%H:%M", localtime $startTimestamp ); # Ask if user want another confirmation email if ( $self->{mail_already_sent} and !$self->param('resendconfirmation') ) { return PE_MAILCONFIRMATION_ALREADY_SENT; } # Get mail address unless ( $self->{mailAddress} ) { $self->{mailAddress} = $self->getFirstValue( $self->{sessionInfo}->{ $self->{mailSessionKey} } ); } # Build confirmation url my $url = $self->{mailUrl} . "?mail_token=" . $self->{id}; $url .= '&skin=' . $self->getSkin(); $url .= '&' . $self->{authChoiceParam} . '=' . $self->{_authChoice} if ( $self->{_authChoice} ); # Build mail content my $subject = $self->{mailConfirmSubject}; my $body; my $html; if ( $self->{mailConfirmBody} ) { # We use a specific text message, no html $body = $self->{mailConfirmBody}; } else { # Use HTML template my $tplfile = $self->getApacheHtdocsPath . "/skins/$self->{portalSkin}/mail_confirm.tpl"; $tplfile = $self->getApacheHtdocsPath . "/skins/common/mail_confirm.tpl" unless ( -e $tplfile ); my $template = HTML::Template->new( filename => $tplfile, filter => sub { $self->translate_template(@_) } ); $body = $template->output(); $html = 1; } # Replace variables in body $body =~ s/\$expMailDate/$self->{expMailDate}/g; $body =~ s/\$expMailTime/$self->{expMailTime}/g; $body =~ s/\$url/$url/g; $body =~ s/\$(\w+)/decode("utf8",$self->{sessionInfo}->{$1})/ge; # Send mail return PE_MAILERROR unless $self->send_mail( $self->{mailAddress}, $subject, $body, $html ); PE_MAILCONFIRMOK; } ## @method int changePassword # Change the password or generate a new password # @return Lemonldap::NG::Portal constant sub changePassword { my ($self) = splice @_; # Check if user wants to generate the new password if ( $self->param('reset') ) { $self->lmLog( "Reset password request for " . $self->{sessionInfo}->{_user}, 'debug' ); # Generate a complex password my $password = $self->gen_password( $self->{randomPasswordRegexp} ); $self->lmLog( "Generated password: " . $password, 'debug' ); $self->{newpassword} = $password; $self->{confirmpassword} = $password; $self->{forceReset} = 1; } # Else a password is required else { unless ( $self->{newpassword} && $self->{confirmpassword} ) { return PE_PASSWORDFIRSTACCESS if ( $self->request_method =~ /GET/ ); return PE_PASSWORDFORMEMPTY; } } # Modify the password $self->{portalRequireOldPassword} = 0; my $result = $self->modifyPassword(); # Mail token can be used only one time, delete the session if all is ok if ( $result == PE_PASSWORD_OK or $result == PE_OK ) { # Get the corresponding session my $mailSession = $self->getApacheSession( $self->{mail_token} ); if ($mailSession) { $self->lmLog( "Delete mail session " . $self->{mail_token}, 'debug' ); $mailSession->remove; } else { $self->lmLog( "Mail session not found", 'warn' ); } # Force result to PE_OK to continue the process $result = PE_OK; } return $result; } ## @method int sendPasswordMail # Send mail containing the new password # @return Lemonldap::NG::Portal constant sub sendPasswordMail { my ($self) = splice @_; # Get mail address unless ( $self->{mailAddress} ) { $self->{mailAddress} = $self->getFirstValue( $self->{sessionInfo}->{ $self->{mailSessionKey} } ); } # Build mail content my $subject = $self->{mailSubject}; my $body; my $html; if ( $self->{mailBody} ) { # We use a specific text message, no html $body = $self->{mailBody}; } else { # Use HTML template my $tplfile = $self->getApacheHtdocsPath . "/skins/$self->{portalSkin}/mail_password.tpl"; $tplfile = $self->getApacheHtdocsPath . "/skins/common/mail_password.tpl" unless ( -e $tplfile ); my $template = HTML::Template->new( filename => $tplfile, filter => sub { $self->translate_template(@_) } ); $template->param( RESET => $self->{forceReset} ); $body = $template->output(); $html = 1; } # Replace variables in body my $password = $self->{newpassword}; $body =~ s/\$password/$password/g; $body =~ s/\$(\w+)/decode("utf8",$self->{sessionInfo}->{$1})/ge; # Send mail return PE_MAILERROR unless $self->send_mail( $self->{mailAddress}, $subject, $body, $html ); PE_MAILOK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::MailReset - Manage password reset by mail =head1 SYNOPSIS use Lemonldap::NG::Portal::MailReset; my $portal = new Lemonldap::NG::Portal::MailReset(); $portal->process(); # Write here HTML to manage errors and confirmation messages =head1 DESCRIPTION Lemonldap::NG::Portal::MailReset enables password reset by mail See L for a complete example of use of Lemonldap::Portal::* libraries. =head1 METHODS =head3 process Main method. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2011 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Remote.pm0000644000175000017500000000543412542740733026006 0ustar clementclement## @file # Remote authentication and userDB base. ## @class # Remote authentication and userDB base class. package Lemonldap::NG::Portal::_Remote; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Session; use MIME::Base64; our $VERSION = '1.4.1'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @apmethod int init() # Checks if remote portal parameters are set. # @return Lemonldap::NG::Portal constant sub init { my $self = shift; return PE_OK if ($initDone); my @missing = (); foreach (qw(remotePortal remoteGlobalStorage)) { push @missing, $_ unless ( defined( $self->{$_} ) ); } $self->abort( "Missing parameters", "Required parameters: " . join( ', ', @missing ) ) if (@missing); eval "require " . $self->{remoteGlobalStorage}; $self->abort( "Configuration error", "Module " . $self->{remoteGlobalStorage} . " not found in \@INC" ) if ($@); $self->{remoteCookieName} ||= $self->{cookieName}; $initDone = 1; PE_OK; } ## @apmethod int checkRemoteId() # check if a CDA mechanism has been instanciated and if session is available. # Redirect the user to the remote portal else by calling goToPortal(). # @return Lemonldap::NG::Portal constant sub checkRemoteId { my $self = shift; my %h; if ( my $rId = $self->param( $self->{remoteCookieName} ) ) { $self->{mustRedirect} = 1; # Trying to recover session from global session storage my $remoteSession = Lemonldap::NG::Common::Session->new( { storageModule => $self->{remoteGlobalStorage}, storageModuleOptions => $self->{remoteGlobalStorageOptions}, cacheModule => $self->{localSessionStorage}, cacheModuleOptions => $self->{localSessionStorageOptions}, id => $rId, kind => "REMOTE", } ); if ( $remoteSession->error ) { $self->lmLog( "Remote session error", 'error' ); $self->lmLog( $remoteSession->error, 'error' ); return PE_ERROR; } %{ $self->{rSessionInfo} } = %{ $remoteSession->data() }; delete( $self->{rSessionInfo}->{'_password'} ) unless ( $self->{storePassword} ); return PE_OK; } return $self->_sub('goToPortal'); } ## @method protected void goToPortal() # Redirect the user to the remote portal. sub goToPortal { my $self = shift; print $self->redirect( $self->{remotePortal} . "?url=" . encode_base64( $self->{portal} . ( $ENV{QUERY_STRING} ? "?$ENV{QUERY_STRING}" : '' ), '' ) ); exit; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_DBI.pm0000644000175000017500000001065612542740733025153 0ustar clementclement##@file # DBI common functions ##@class # DBI common functions package Lemonldap::NG::Portal::_DBI; use DBI; use base qw(Exporter); use Lemonldap::NG::Portal::Simple; use strict; our @EXPORT = qw(dbh); our $VERSION = '1.3.2'; ## @method protected Lemonldap::NG::Portal::_DBI dbh(string dbiChain, string dbiUser, string dbiPassword) # Create connection to database # @param dbiChain DBI connection chain # @param dbiUser DBI connection user # @param dbiPassword DBI connection password # @return dbh object sub dbh { my $self = shift; my $dbiChain = shift; my $dbiUser = shift; my $dbiPassword = shift; my $dbh; # Open connection to database eval { $dbh = DBI->connect_cached( $dbiChain, $dbiUser, $dbiPassword, { RaiseError => 1, }, ); }; if ($@) { $self->lmLog( "DBI connection error: $@", 'error' ); return 0; } $self->{_dbh} = $dbh; return $dbh; } ## @method protected Lemonldap::NG::Portal::_DBI hash_password(string password, string hash) # Return hashed password for use in SQL statement # @param password clear password # @param hash hash mechanism # @return SQL statement string sub hash_password { my $self = shift; my $password = shift; my $hash = shift; if ( $hash =~ /^(md5|sha|sha1|encrypt)$/i ) { $self->lmLog( "Using " . uc($hash) . " to hash password", 'debug' ); return uc($hash) . "($password)"; } else { $self->lmLog( "No valid password hash, using clear text for password", 'warn' ); return $password; } } ## @method protected Lemonldap::NG::Portal::_DBI hash_password_for_select(string password, string hash) # Return hashed password for use in SQL SELECT statement # Call hash_password unless encrypt hash is choosen # @param password clear password # @param hash hash mechanism # @return SQL statement string sub hash_password_for_select { my $self = shift; my $password = shift; my $hash = shift; my $passwordCol = $self->{dbiAuthPasswordCol}; if ( $hash =~ /^encrypt$/i ) { return uc($hash) . "($password,$passwordCol)"; } else { return $self->hash_password( $password, $hash ); } } ## @method protected Lemonldap::NG::Portal::_DBI check_password(ref dbh, string user, string password) # Verify user and password with SQL SELECT # @param dbh database handle # @param user user # @param password password # @return boolean result sub check_password { my $self = shift; my $dbh = shift; my $user = shift || $self->{user}; my $password = shift || $self->{password}; my $table = $self->{dbiAuthTable}; my $loginCol = $self->{dbiAuthLoginCol}; my $passwordCol = $self->{dbiAuthPasswordCol}; # Password hash my $passwordsql = $self->hash_password_for_select( "?", $self->{dbiAuthPasswordHash} ); my @rows = (); eval { my $sth = $dbh->prepare( "SELECT $loginCol FROM $table WHERE $loginCol=? AND $passwordCol=$passwordsql" ); $sth->execute( $user, $password ); @rows = $sth->fetchrow_array(); }; if ($@) { $self->lmLog( "DBI error: $@", 'error' ); return 0; } if ( @rows == 1 ) { $self->lmLog( "One row returned by SQL query", 'debug' ); return 1; } else { $self->_sub( 'userError', "Bad password for $user" ); return 0; } } ## @method protected Lemonldap::NG::Portal::_DBI modify_password(string user, string password, string userCol, string passwordCol) # Modify password with SQL UPDATE # @param user user # @param password password # @param userCol optional user column # @param passwordCol optional password column # @return boolean result sub modify_password { my $self = shift; my $user = shift; my $password = shift; my $userCol = shift || $self->{dbiAuthLoginCol}; my $passwordCol = shift || $self->{dbiAuthPasswordCol}; my $table = $self->{dbiAuthTable}; # Password hash my $passwordsql = $self->hash_password( "?", $self->{dbiAuthPasswordHash} ); eval { my $sth = $self->{_dbh}->prepare( "UPDATE $table SET $passwordCol=$passwordsql WHERE $userCol=?"); $sth->execute( $password, $user ); }; if ($@) { $self->lmLog( "DBI password modification error: $@", 'error' ); return 0; } return 1; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_CAS.pm0000644000175000017500000002317412542740733025162 0ustar clementclement## @file # Common CAS functions ## @class # Common CAS functions package Lemonldap::NG::Portal::_CAS; use strict; use Lemonldap::NG::Portal::_Browser; use Lemonldap::NG::Common::Session; our @ISA = (qw(Lemonldap::NG::Portal::_Browser)); our $VERSION = '1.4.1'; ## @method hashref getCasSession(string id) # Try to recover the CAS session corresponding to id and return session datas # If id is set to undef, return a new session # @param id session reference # @return CAS session object sub getCasSession { my ( $self, $id ) = splice @_; my $casSession = Lemonldap::NG::Common::Session->new( { storageModule => $self->{casStorage}, storageModuleOptions => $self->{casStorageOptions}, cacheModule => $self->{localSessionStorage}, cacheModuleOptions => $self->{localSessionStorageOptions}, id => $id, kind => "CAS", } ); if ( $casSession->error ) { if ($id) { $self->_sub( 'userInfo', "CAS session $id isn't yet available" ); } else { $self->lmLog( "Unable to create new CAS session", 'error' ); $self->lmLog( $casSession->error, 'error' ); } return undef; } return $casSession; } ## @method void returnCasValidateError() # Return an error for CAS VALIDATE request # @return nothing sub returnCasValidateError { my ($self) = splice @_; $self->lmLog( "Return CAS validate error", 'debug' ); print $self->header(); print "no\n\n"; $self->quit(); } ## @method void returnCasValidateSuccess(string username) # Return success for CAS VALIDATE request # @param username User name # @return nothing sub returnCasValidateSuccess { my ( $self, $username ) = splice @_; $self->lmLog( "Return CAS validate success with username $username", 'debug' ); print $self->header(); print "yes\n$username\n"; $self->quit(); } ## @method void returnCasServiceValidateError(string code, string text) # Return an error for CAS SERVICE VALIDATE request # @param code CAS error code # @param text Error text # @return nothing sub returnCasServiceValidateError { my ( $self, $code, $text ) = splice @_; $code ||= 'INTERNAL_ERROR'; $text ||= 'No description provided'; $self->lmLog( "Return CAS service validate error $code ($text)", 'debug' ); print $self->header( -type => 'application/xml' ); print "\n"; print "\t\n"; print "\t\t$text\n"; print "\t\n"; print "\n"; $self->quit(); } ## @method void returnCasServiceValidateSuccess(string username, string pgtIou, string proxies) # Return success for CAS SERVICE VALIDATE request # @param username User name # @param pgtIou Proxy granting ticket IOU # @param proxies List of used CAS proxies # @return nothing sub returnCasServiceValidateSuccess { my ( $self, $username, $pgtIou, $proxies ) = splice @_; $self->lmLog( "Return CAS service validate success with username $username", 'debug' ); print $self->header( -type => 'application/xml' ); print "\n"; print "\t\n"; print "\t\t$username\n"; if ( defined $pgtIou ) { $self->lmLog( "Add proxy granting ticket $pgtIou in response", 'debug' ); print "\t\t$pgtIou\n"; } if ($proxies) { $self->lmLog( "Add proxies $proxies in response", 'debug' ); print "\t\t\n"; print "\t\t\t$_\n" foreach ( split( /$self->{multiValuesSeparator}/, $proxies ) ); print "\t\t\n"; } print "\t\n"; print "\n"; $self->quit(); } ## @method void returnCasProxyError(string code, string text) # Return an error for CAS PROXY request # @param code CAS error code # @param text Error text # @return nothing sub returnCasProxyError { my ( $self, $code, $text ) = splice @_; $code ||= 'INTERNAL_ERROR'; $text ||= 'No description provided'; $self->lmLog( "Return CAS proxy error $code ($text)", 'debug' ); print $self->header( -type => 'application/xml' ); print "\n"; print "\t\n"; print "\t\t$text\n"; print "\t\n"; print "\n"; $self->quit(); } ## @method void returnCasProxySuccess(string ticket) # Return success for CAS PROXY request # @param ticket Proxy ticket # @return nothing sub returnCasProxySuccess { my ( $self, $ticket ) = splice @_; $self->lmLog( "Return CAS proxy success with ticket $ticket", 'debug' ); print $self->header( -type => 'application/xml' ); print "\n"; print "\t\n"; print "\t\t$ticket\n"; print "\t\n"; print "\n"; $self->quit(); } ## @method boolean deleteCasSecondarySessions(string session_id) # Find and delete CAS sessions bounded to a primary session # @param session_id Primary session ID # @return result sub deleteCasSecondarySessions { my ( $self, $session_id ) = splice @_; my $result = 1; # Find CAS sessions my $moduleOptions = $self->{casStorageOptions} || {}; $moduleOptions->{backend} = $self->{casStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $cas_sessions = $module->searchOn( $moduleOptions, "_cas_id", $session_id ); if ( my @cas_sessions_keys = keys %$cas_sessions ) { foreach my $cas_session (@cas_sessions_keys) { # Get session $self->lmLog( "Retrieve CAS session $cas_session", 'debug' ); my $casSession = $self->getCasSession($cas_session); # Delete session $result = $self->deleteCasSession($casSession); } } else { $self->lmLog( "No CAS session found for session $session_id ", 'debug' ); } return $result; } ## @method boolean deleteCasSession(Lemonldap::NG::Common::Session session) # Delete an opened CAS session # @param session object # @return result sub deleteCasSession { my ( $self, $session ) = splice @_; # Check session object unless ( $session && $session->data ) { $self->lmLog( "No session to delete", 'error' ); return 0; } # Get session_id my $session_id = $session->id; # Delete session unless ( $session->remove ) { $self->lmLog( $session->error, 'error' ); return 0; } $self->lmLog( "CAS session $session_id deleted", 'debug' ); return 1; } ## @method boolean callPgtUrl(string pgtUrl, string pgtIou, string pgtId) # Call proxy granting URL on CAS client # @param pgtUrl Proxy granting URL # @param pgtIou Proxy granting ticket IOU # @param pgtId Proxy granting ticket # @return result sub callPgtUrl { my ( $self, $pgtUrl, $pgtIou, $pgtId ) = splice @_; # Build URL my $url = $pgtUrl; $url .= ( $pgtUrl =~ /\?/ ? '&' : '?' ); $url .= "pgtIou=$pgtIou&pgtId=$pgtId"; $self->lmLog( "Call URL $url", 'debug' ); # GET URL my $response = $self->ua()->get($url); # Return result return $response->is_success(); } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::_CAS - Common CAS functions =head1 SYNOPSIS use Lemonldap::NG::Portal::_CAS; =head1 DESCRIPTION This module contains common methods for CAS =head1 METHODS =head2 getCasSession Try to recover the CAS session corresponding to id and return session datas If id is set to undef, return a new session =head2 returnCasValidateError Return an error for CAS VALIDATE request =head2 returnCasValidateSuccess Return success for CAS VALIDATE request =head2 deleteCasSecondarySessions Find and delete CAS sessions bounded to a primary session =head2 returnCasServiceValidateError Return an error for CAS SERVICE VALIDATE request =head2 returnCasServiceValidateSuccess Return success for CAS SERVICE VALIDATE request =head2 returnCasProxyError Return an error for CAS PROXY request =head2 returnCasProxySuccess Return success for CAS PROXY request =head2 deleteCasSession Delete an opened CAS session =head2 callPgtUrl Call proxy granting URL on CAS client =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthSAML.pm0000644000175000017500000014372112542740733025774 0ustar clementclement## @file # SAML Service Provider - Authentication ## @class # SAML Service Provider - Authentication package Lemonldap::NG::Portal::AuthSAML; use strict; use MIME::Base64; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_SAML; #inherits use Lemonldap::NG::Common::Conf::SAML::Metadata; our $VERSION = '1.4.2'; our @ISA = qw(Lemonldap::NG::Portal::_SAML); ## @apmethod int authInit() # Load Lasso and metadata # @return Lemonldap::NG::Portal error code sub authInit { my $self = shift; # Load SAML service return PE_SAML_LOAD_SERVICE_ERROR unless $self->loadService(); # Load SAML identity providers return PE_SAML_LOAD_IDP_ERROR unless $self->loadIDPs(); PE_OK; } ## @apmethod int extractFormInfo() # Check authentication statement or create authentication request # @return Lemonldap::NG::Portal error code sub extractFormInfo { my $self = shift; my $server = $self->{_lassoServer}; # 1. Get HTTP request informations to know # if we are receving SAML request or response my $url = $self->url( -absolute => 1 ); my $request_method = $self->request_method(); my $content_type = $self->content_type(); my $saml_acs_art_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact"); my $saml_acs_post_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPPost"); my $saml_acs_get_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPRedirect"); my $saml_slo_soap_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceSOAP", 1 ); my $saml_slo_soap_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceSOAP", 2 ); my $saml_slo_get_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPRedirect", 1 ); my $saml_slo_get_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPRedirect", 2 ); my $saml_slo_post_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPPost", 1 ); my $saml_slo_post_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPPost", 2 ); my $saml_ars_url = $self->getMetaDataURL( "samlSPSSODescriptorArtifactResolutionServiceArtifact"); # 1.1 SSO assertion consumer if ( $url =~ /^(\Q$saml_acs_art_url\E|\Q$saml_acs_post_url\E|\Q$saml_acs_get_url\E)$/io ) { $self->lmLog( "URL $url detected as an SSO assertion consumer URL", 'debug' ); # Check SAML Message my ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type, "login" ); # Create Login object my $login = $self->createLogin($server); # Ignore signature verification $self->disableSignatureVerification($login); if ($response) { # Process authentication response my $result; if ($artifact) { $result = $self->processArtResponseMsg( $login, $response ); } else { $result = $self->processAuthnResponseMsg( $login, $response ); } unless ($result) { $self->lmLog( "SSO: Fail to process authentication response", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "SSO: authentication response is valid", 'debug' ); # Get IDP entityID my $idp = $login->remote_providerID(); $self->lmLog( "Found entityID $idp in SAML message", 'debug' ); # IDP conf key my $idpConfKey = $self->{_idpList}->{$idp}->{confKey}; unless ($idpConfKey) { $self->lmLog( "$idp do not match any IDP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$idp match $idpConfKey IDP in configuration", 'debug' ); # Do we check signature? my $checkSSOMessageSignature = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsCheckSSOMessageSignature}; if ($checkSSOMessageSignature) { $self->forceSignatureVerification($login); if ($artifact) { $result = $self->processArtResponseMsg( $login, $response ); } else { $result = $self->processAuthnResponseMsg( $login, $response ); } unless ($result) { $self->lmLog( "Signature is not valid", 'error' ); return PE_SAML_SIGNATURE_ERROR; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Get SAML response my $saml_response = $login->response(); unless ($saml_response) { $self->lmLog( "No SAML response found", 'error' ); return PE_SAML_SSO_ERROR; } # Check Destination return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $saml_response, $url ) ); # Replay protection if this is a response to a created authn request my $assertion_responded = $saml_response->InResponseTo; if ($assertion_responded) { unless ( $self->replayProtection($assertion_responded) ) { # Assertion was already consumed or is expired # Force authentication replay $self->lmLog( "Message $assertion_responded already used or expired, replay authentication", 'error' ); delete $self->{urldc}; $self->{mustRedirect} = 1; return $self->_subProcess(qw(autoRedirect)); } } else { $self->lmLog( "Assertion is not a response to a created authentication request, do not control replay", 'debug' ); } # Get SAML assertion my $assertion = $self->getAssertion($login); unless ($assertion) { $self->lmLog( "No assertion found", 'error' ); return PE_SAML_SSO_ERROR; } # Do we check conditions? my $checkConditions = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsCheckConditions}; # Check conditions - time and audience if ( $checkConditions and !$self->validateConditions( $assertion, $self->getMetaDataURL( "samlEntityID", 0, 1 ) ) ) { $self->lmLog( "Conditions not validated", 'error' ); return PE_SAML_CONDITIONS_ERROR; } # Extract RelayState information if ( $self->extractRelayState($relaystate) ) { $self->lmLog( "RelayState $relaystate extracted", 'debug' ); } # Check if we accept direct login from IDP my $allowLoginFromIDP = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsAllowLoginFromIDP}; if ( !$assertion_responded and !$allowLoginFromIDP ) { $self->lmLog( "Direct login from IDP $idpConfKey is not allowed", 'error' ); return PE_SAML_IDPSSOINITIATED_NOTALLOWED; } # Check authentication context my $responseAuthnContext; eval { $responseAuthnContext = $assertion->AuthnStatement()->AuthnContext() ->AuthnContextClassRef(); }; if ($@) { $self->lmLog( "Unable to get authentication context from $idpConfKey", 'debug' ); $responseAuthnContext = $self->getAuthnContext("unspecified"); } else { $self->lmLog( "Found authentication context: $responseAuthnContext", 'debug' ); } # Map authentication context to authentication level $self->{sessionInfo}->{authenticationLevel} = $self->authnContext2authnLevel($responseAuthnContext); # Force redirection to portal if no urldc found # (avoid displaying the whole SAML URL in user browser URL field) $self->{mustRedirect} = 1 unless ( $self->{urldc} ); # Get SessionIndex my $session_index; eval { $session_index = $assertion->AuthnStatement()->SessionIndex(); }; if ( $@ or !defined($session_index) ) { $self->lmLog( "No SessionIndex found", 'debug' ); } else { $self->lmLog( "Found SessionIndex $session_index", 'debug' ); } # Get NameID my $nameid = $login->nameIdentifier; # Set user my $user = $nameid->content; unless ($user) { $self->lmLog( "No NameID value found", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "Found NameID: $user", 'debug' ); $self->{user} = $user; # Store Lasso objects $self->{_lassoLogin} = $login; $self->{_idp} = $idp; $self->{_idpConfKey} = $idpConfKey; $self->{_nameID} = $nameid; $self->{_sessionIndex} = $session_index; # Store Token my $saml_token = $assertion->export_to_xml; $self->lmLog( "SAML Token: $saml_token", 'debug' ); $self->{_samlToken} = $saml_token; # Restore initial SAML request in case of proxying my $moduleOptions = $self->{samlStorageOptions} || {}; $moduleOptions->{backend} = $self->{samlStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $saml_sessions = $module->searchOn( $moduleOptions, "ProxyID", $assertion_responded ); if ( my @saml_sessions_keys = keys %$saml_sessions ) { # Warning if more than one session found if ( $#saml_sessions_keys > 0 ) { $self->lmLog( "More than one SAML proxy session found for ID $assertion_responded", 'warn' ); } # Take the first session my $saml_session = shift @saml_sessions_keys; # Get session $self->lmLog( "Retrieve SAML proxy session $saml_session for ID $assertion_responded", 'debug' ); my $samlSessionInfo = $self->getSamlSession($saml_session); $self->{_proxiedRequest} = $samlSessionInfo->data->{Request}; $self->{_proxiedMethod} = $samlSessionInfo->data->{Method}; $self->{_proxiedRelayState} = $samlSessionInfo->data->{RelayState}; $self->{_proxiedArtifact} = $samlSessionInfo->data->{Artifact}; # Save values in hidden fields in case of other user interactions $self->setHiddenFormValue( 'SAMLRequest', $self->{_proxiedRequest} ); $self->setHiddenFormValue( 'Method', $self->{_proxiedMethod} ); $self->setHiddenFormValue( 'RelayState', $self->{_proxiedRelayState} ); $self->setHiddenFormValue( 'SAMLart', $self->{_proxiedArtifact} ); # Delete session $samlSessionInfo->remove(); } return PE_OK; } elsif ($request) { # Do nothing $self->lmLog( "This module do not manage SSO request, see IssuerDBSAML", 'debug' ); return PE_OK; } else { # This should not happen $self->lmLog( "SSO request or response was not found", 'error' ); # Redirect user $self->{mustRedirect} = 1; return $self->_subProcess(qw(autoRedirect)); } } # 1.2 SLO elsif ( $url =~ /^(\Q$saml_slo_soap_url\E|\Q$saml_slo_soap_url_ret\E|\Q$saml_slo_get_url\E|\Q$saml_slo_get_url_ret\E|Q$saml_slo_post_url\E|\Q$saml_slo_post_url_ret\E)$/io ) { $self->lmLog( "URL $url detected as an SLO URL", 'debug' ); # Check SAML Message my ( $request, $response, $method, $relaystate, $artifact ) = $self->checkMessage( $url, $request_method, $content_type, "logout" ); # Create Logout object my $logout = $self->createLogout($server); # Ignore signature verification $self->disableSignatureVerification($logout); if ($response) { # Process logout response my $result = $self->processLogoutResponseMsg( $logout, $response ); unless ($result) { $self->lmLog( "Fail to process logout response", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "Logout response is valid", 'debug' ); # Check Destination return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $logout->response, $url ) ); # Get IDP entityID my $idp = $logout->remote_providerID(); $self->lmLog( "Found entityID $idp in SAML message", 'debug' ); # IDP conf key my $idpConfKey = $self->{_idpList}->{$idp}->{confKey}; unless ($idpConfKey) { $self->lmLog( "$idp do not match any IDP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$idp match $idpConfKey IDP in configuration", 'debug' ); # Do we check signature? my $checkSLOMessageSignature = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsCheckSLOMessageSignature}; if ($checkSLOMessageSignature) { $self->forceSignatureVerification($logout); $result = $self->processLogoutResponseMsg( $logout, $response ); unless ($result) { $self->lmLog( "Signature is not valid", 'error' ); return PE_SAML_SIGNATURE_ERROR; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Replay protection my $samlID = $logout->response()->InResponseTo; unless ( $self->replayProtection($samlID) ) { # Logout request was already consumed or is expired $self->lmLog( "Message $samlID already used or expired", 'error' ); return PE_SAML_SLO_ERROR; } # If URL in RelayState, different from portal, redirect user if ( $self->extractRelayState($relaystate) ) { $self->lmLog( "RelayState $relaystate extracted", 'debug' ); $self->lmLog( "URL " . $self->{urldc} . " found in RelayState", 'debug' ); } return $self->_subProcess(qw(autoRedirect)) if ( $self->{urldc} and $self->{portal} !~ /\Q$self->{urldc}\E\/?/ ); # Else, inform user that logout is OK return PE_LOGOUT_OK; } elsif ($request) { # Logout error my $logout_error = 0; # Lasso::Session dump my $session_dump; # Process logout request unless ( $self->processLogoutRequestMsg( $logout, $request ) ) { $self->lmLog( "Fail to process logout request", 'error' ); $logout_error = 1; } $self->lmLog( "Logout request is valid", 'debug' ); # Check Destination return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $logout->request, $url ) ); # Get IDP entityID my $idp = $logout->remote_providerID(); $self->lmLog( "Found entityID $idp in SAML message", 'debug' ); # IDP conf key my $idpConfKey = $self->{_idpList}->{$idp}->{confKey}; unless ($idpConfKey) { $self->lmLog( "$idp do not match any IDP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$idp match $idpConfKey IDP in configuration", 'debug' ); # Do we check signature? my $checkSLOMessageSignature = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsCheckSLOMessageSignature}; if ($checkSLOMessageSignature) { unless ( $self->checkSignatureStatus($logout) ) { $self->lmLog( "Signature is not valid", 'error' ); return PE_SAML_SIGNATURE_ERROR; } else { $self->lmLog( "Signature is valid", 'debug' ); } } else { $self->lmLog( "Message signature will not be checked", 'debug' ); } # Get NameID and SessionIndex my $name_id = $logout->request()->NameID; my $session_index = $logout->request()->SessionIndex; my $user = $name_id->content; unless ($name_id) { $self->lmLog( "Fail to get NameID from logout request", 'error' ); $logout_error = 1; } $self->lmLog( "Logout request NameID content: $user", 'debug' ); # Get SAML sessions with the same NameID my $moduleOptions = $self->{samlStorageOptions} || {}; $moduleOptions->{backend} = $self->{samlStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; my $local_sessions = $module->searchOn( $moduleOptions, "_nameID", $name_id->dump ); if ( my @local_sessions_keys = keys %$local_sessions ) { # At least one session was found foreach (@local_sessions_keys) { my $local_session = $_; # Get session $self->lmLog( "Retrieve SAML session $local_session for user $user", 'debug' ); my $sessionInfo = $self->getSamlSession($local_session); # If session index is defined and not equal to SAML session index, # jump to next session if ( defined $session_index and $session_index ne $sessionInfo->data->{_sessionIndex} ) { $self->lmLog( "Session $local_session has not the good session index, skipping", 'debug' ); next; } # Delete session else { # Open real session my $real_session = $sessionInfo->data->{_saml_id}; my $ssoSession = $self->getApacheSession( $real_session, 1 ); # Get Lasso::Session dump # This value is erased if a next session match the SLO request if ( $ssoSession && $ssoSession->data->{_lassoSessionDump} ) { $self->lmLog( "Get Lasso::Session dump from session $real_session", 'debug' ); $session_dump = $ssoSession->data->{_lassoSessionDump}; } # Delete real session my $del_real_result = $self->_deleteSession($ssoSession); $self->lmLog( "Delete real session $real_session result: $del_real_result", 'debug' ); $logout_error = 1 unless $del_real_result; # Delete SAML session my $del_saml_result = $sessionInfo->remove(); $self->lmLog( "Delete SAML session $local_session result: $del_saml_result", 'debug' ); $logout_error = 1 unless $del_saml_result; } } # Set session from dump unless ( $self->setSessionFromDump( $logout, $session_dump ) ) { $self->lmLog( "Cannot set session from dump in logout", 'error' ); $logout_error = 1; } } else { # No corresponding session found $self->lmLog( "No SAML session found for user $user", 'debug' ); $logout_error = 1; } # Validate request if no previous error unless ($logout_error) { unless ( $self->validateLogoutRequest($logout) ) { $self->lmLog( "SLO request is not valid", 'error' ); } } # Set RelayState if ($relaystate) { $logout->msg_relayState($relaystate); $self->lmLog( "Set $relaystate in RelayState", 'debug' ); } # Do we set signature? my $signSLOMessage = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsSignSLOMessage}; if ( $signSLOMessage == 0 ) { $self->lmLog( "SLO message to IDP $idpConfKey will not be signed", 'debug' ); $self->disableSignature($logout); } elsif ( $signSLOMessage == 1 ) { $self->lmLog( "SLO message to IDP $idpConfKey will be signed", 'debug' ); $self->forceSignature($logout); } else { $self->lmLog( "SLO message to IDP $idpConfKey signature according to metadata", 'debug' ); } # Logout response unless ( $self->buildLogoutResponseMsg($logout) ) { $self->lmLog( "Unable to build SLO response", 'error' ); return PE_SAML_SLO_ERROR; } # Send response depending on request method # HTTP-REDIRECT if ( $method == Lasso::Constants::HTTP_METHOD_REDIRECT ) { # Redirect user to response URL my $slo_url = $logout->msg_url; $self->lmLog( "Redirect user to $slo_url", 'debug' ); $self->{urldc} = $slo_url; return $self->_subProcess(qw(autoRedirect)); } # HTTP-POST elsif ( $method == Lasso::Constants::HTTP_METHOD_POST ) { # Use autosubmit form my $slo_url = $logout->msg_url; my $slo_body = $logout->msg_body; $self->{postUrl} = $slo_url; $self->{postFields} = { 'SAMLResponse' => $slo_body }; # RelayState $self->{postFields}->{'RelayState'} = $relaystate if ($relaystate); return $self->_subProcess(qw(autoPost)); } # HTTP-SOAP elsif ( $method == Lasso::Constants::HTTP_METHOD_SOAP ) { my $slo_body = $logout->msg_body; $self->lmLog( "SOAP response $slo_body", 'debug' ); $self->{SOAPMessage} = $slo_body; $self->_subProcess(qw(returnSOAPMessage)); # If we are here, there was a problem with SOAP response $self->lmLog( "Logout response was not sent trough SOAP", 'error' ); return PE_SAML_SLO_ERROR; } } else { # This should not happen $self->lmLog( "SLO request or response was not found", 'error' ); # Redirect user $self->{mustRedirect} = 1; return $self->_subProcess(qw(autoRedirect)); } } # 1.3 Artifact elsif ( $url =~ /^(\Q$saml_ars_url\E)$/io ) { $self->lmLog( "URL $url detected as an artifact resolution service URL", 'debug' ); # Artifact request are sent with SOAP trough POST my $art_request = $self->param('POSTDATA'); my $art_response; # Create Login object my $login = $self->createLogin($server); # Process request message unless ( $self->processArtRequestMsg( $login, $art_request ) ) { $self->lmLog( "Unable to process artifact request message", 'error' ); return PE_SAML_ART_ERROR; } # Check Destination return PE_SAML_DESTINATION_ERROR unless ( $self->checkDestination( $login->request, $url ) ); # Create artifact response unless ( $art_response = $self->createArtifactResponse($login) ) { $self->lmLog( "Unable to create artifact response message", 'error' ); return PE_SAML_ART_ERROR; } $self->{SOAPMessage} = $art_response; $self->lmLog( "Send SOAP Message: " . $self->{SOAPMessage}, 'debug' ); # Return SOAP message $self->returnSOAPMessage(); # If we are here, there was a problem with SOAP request $self->lmLog( "Artifact response was not sent trough SOAP", 'error' ); return PE_SAML_ART_ERROR; } # 2. IDP resolution # Search a selected IdP my ( $idp, $idp_cookie ) = $self->_sub('getIDP'); # Get confirmation flag my $confirm_flag = $self->param("confirm"); # If confirmation is -1 from resolved IDP screen, # or IDP was not resolve, let the user choose its IDP if ( $confirm_flag == -1 or !$idp ) { $self->lmLog( "Redirecting user to IDP list", 'debug' ); # Control url parameter my $urlcheck = $self->controlUrlOrigin(); return $urlcheck unless ( $urlcheck == PE_OK ); # IDP list my @list = (); foreach ( keys %{ $self->{_idpList} } ) { push @list, { val => $_, name => $self->{_idpList}->{$_}->{name} }; } $self->{list} = \@list; # Delete existing IDP resolution cookie push @{ $self->{cookie} }, $self->cookie( -name => $self->{samlIdPResolveCookie}, -value => 0, -domain => $self->{domain}, -path => "/", -secure => 0, -expires => '-1d', ); $self->{login} = 1; return PE_CONFIRM; } # If IDP is found but not confirmed, let the user confirm it elsif ( $confirm_flag != 1 ) { $self->lmLog( "IDP $idp selected, need user confirmation", 'debug' ); # Control url parameter my $urlcheck = $self->controlUrlOrigin(); return $urlcheck unless ( $urlcheck == PE_OK ); # Choosen IDP my $html = '

    ' . $self->msg(PM_SAML_IDPCHOOSEN) . "

    \n" . "

    " . $self->{_idpList}->{$idp}->{name} . "

    \n" . "

    " . $idp . "

    \n" . "param("url") . "\" />" . "\n"; $self->info($html); $self->{login} = 1; return PE_CONFIRM; } # Here confirmation is OK (confirm_flag == 1), store choosen IDP in cookie unless ( $idp_cookie and $idp eq $idp_cookie ) { $self->lmLog( "Build cookie to remember $idp as IDP choice", 'debug' ); # Control url parameter my $urlcheck = $self->controlUrlOrigin(); return $urlcheck unless ( $urlcheck == PE_OK ); # User can choose temporary (0) or persistent cookie (1) my $cookie_type = $self->param("cookie_type") || "0"; push @{ $self->{cookie} }, $self->cookie( -name => $self->{samlIdPResolveCookie}, -value => $idp, -domain => $self->{domain}, -path => "/", -secure => $self->{securedCookie}, -httponly => $self->{httpOnly}, -expires => $cookie_type ? "+365d" : "", ); } # 3. Build authentication request # IDP conf key my $idpConfKey = $self->{_idpList}->{$idp}->{confKey}; unless ($idpConfKey) { $self->lmLog( "$idp do not match any IDP in configuration", 'error' ); return PE_SAML_UNKNOWN_ENTITY; } $self->lmLog( "$idp match $idpConfKey IDP in configuration", 'debug' ); # IDP ForceAuthn my $forceAuthn = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsForceAuthn}; # IDP IsPassive my $isPassive = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsIsPassive}; # IDP NameIDFormat my $nameIDFormat = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsNameIDFormat}; $nameIDFormat = $self->getNameIDFormat($nameIDFormat) if $nameIDFormat; # IDP ProxyRestriction my $allowProxiedAuthn = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsAllowProxiedAuthn}; # IDP HTTP method my $method = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsSSOBinding}; $method = $self->getHttpMethod($method) if $method; # If no method defined, get first HTTP method unless ( defined $method ) { my $protocolType = Lasso::Constants::MD_PROTOCOL_TYPE_SINGLE_SIGN_ON; $method = $self->getFirstHttpMethod( $server, $idp, $protocolType ); } # Failback to HTTP-REDIRECT unless ( defined $method and $method != -1 ) { $self->lmLog( "No method found with IDP $idpConfKey for SSO profile", 'debug' ); $method = $self->getHttpMethod("redirect"); } $self->lmLog( "Use method " . $self->getHttpMethodString($method) . " with IDP $idpConfKey for SSO profile", 'debug' ); # Set signature my $signSSOMessage = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsSignSSOMessage}; # Authentication Context my $requestedAuthnContext = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsRequestedAuthnContext}; $requestedAuthnContext = $self->getAuthnContext($requestedAuthnContext) if $requestedAuthnContext; # Create SSO request my $login = $self->createAuthnRequest( $server, $idp, $method, $forceAuthn, $isPassive, $nameIDFormat, $allowProxiedAuthn, $signSSOMessage, $requestedAuthnContext ); unless ($login) { $self->lmLog( "Could not create authentication request on $idpConfKey", 'error' ); return PE_SAML_SSO_ERROR; } $self->lmLog( "Authentication request created", 'debug' ); # Keep assertion ID in memory to prevent replay my $samlID = $login->request()->ID; unless ( $self->storeReplayProtection($samlID) ) { $self->lmLog( "Unable to store assertion ID", 'error' ); return PE_SAML_SSO_ERROR; } # Keep initial SAML request data in memory in case of proxing if ( $self->{_proxiedSamlRequest} ) { my $samlSessionInfo = $self->getSamlSession(); return PE_SAML_SESSION_ERROR unless $samlSessionInfo; my $infos; $infos->{type} = 'proxy'; $infos->{_utime} = time; $infos->{Request} = $self->{_proxiedRequest}; $infos->{Method} = $self->{_proxiedMethod}; $infos->{RelayState} = $self->{_proxiedRelayState}; $infos->{Artifact} = $self->{_proxiedArtifact}; $infos->{ProxyID} = $samlID; $samlSessionInfo->update($infos); $self->lmLog( "Keep initial SAML request data in memory for ID $samlID", 'debug' ); } # Send SSO request depending on request method # HTTP-REDIRECT if ( $method == $self->getHttpMethod('redirect') or $method == $self->getHttpMethod('artifact-get') ) { # Redirect user to response URL my $sso_url = $login->msg_url; $self->lmLog( "Redirect user to $sso_url", 'debug' ); $self->{urldc} = $sso_url; return $self->_subProcess(qw(autoRedirect)); } # HTTP-POST elsif ($method == $self->getHttpMethod('post') or $method == $self->getHttpMethod('artifact-post') ) { # Use autosubmit form my $sso_url = $login->msg_url; my $sso_body = $login->msg_body; $self->{postUrl} = $sso_url; if ( $method == $self->getHttpMethod("artifact-post") ) { $self->{postFields} = { 'SAMLart' => $sso_body }; } else { $self->{postFields} = { 'SAMLRequest' => $sso_body }; } # RelayState $self->{postFields}->{'RelayState'} = $login->msg_relayState if ( $login->msg_relayState ); return $self->_subProcess(qw(autoPost)); } # No SOAP transport for SSO request } ## @apmethod int setAuthSessionInfo() # Extract attributes sent in authentication statement # @return Lemonldap::NG::Portal error code sub setAuthSessionInfo { my $self = shift; my $server = $self->{_lassoServer}; my $login = $self->{_lassoLogin}; my $idp = $self->{_idp}; my $idpConfKey = $self->{_idpConfKey}; # Get SAML assertion my $assertion = $self->getAssertion($login); unless ($assertion) { $self->lmLog( "No assertion found", 'error' ); return PE_SAML_SSO_ERROR; } # Force UTF-8 my $force_utf8 = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsForceUTF8}; # Try to get attributes if attribute statement is present in assertion my $attr_statement = $assertion->AttributeStatement(); if ($attr_statement) { # Get attributes my @attributes = $attr_statement->Attribute(); # Wanted attributes are defined in IDP configuration foreach ( keys %{ $self->{samlIDPMetaDataExportedAttributes}->{$idpConfKey} } ) { # Extract fields from exportedAttr value my ( $mandatory, $name, $format, $friendly_name ) = split( /;/, $self->{samlIDPMetaDataExportedAttributes}->{$idpConfKey}->{$_} ); # Try to get value my $value = $self->getAttributeValue( $name, $format, $friendly_name, \@attributes, $force_utf8 ); # Store value in sessionInfo $self->{sessionInfo}->{$_} = $value if defined $value; } } # Store other informations in session $self->{sessionInfo}->{_user} = $self->{user}; $self->{sessionInfo}->{_idp} = $idp; $self->{sessionInfo}->{_idpConfKey} = $idpConfKey; # Adapt _utime with SessionNotOnOrAfter my $sessionNotOnOrAfter; eval { $sessionNotOnOrAfter = $assertion->AuthnStatement()->SessionNotOnOrAfter(); }; if ( $@ or !$sessionNotOnOrAfter ) { $self->lmLog( "No SessionNotOnOrAfter value found", 'debug' ); } else { my $samltime = $self->samldate2timestamp($sessionNotOnOrAfter); my $utime = time(); my $timeout = $self->{timeout}; my $adaptSessionUtime = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsAdaptSessionUtime}; if ( ( $utime + $timeout > $samltime ) and $adaptSessionUtime ) { # Use SAML time to determine the start of the session my $new_utime = $samltime - $timeout; $self->{sessionInfo}->{_utime} = $new_utime; $self->lmLog( "Adapt _utime with SessionNotOnOrAfter value, new _utime: $new_utime", 'debug' ); } } # Establish federation (required for attribute request in UserDBSAML) unless ( $self->acceptSSO($login) ) { $self->lmLog( "Error while accepting SSO from IDP $idpConfKey", 'error' ); return PE_SAML_SSO_ERROR; } # Get created Lasso::Session and Lasso::Identity my $session = $login->get_session; my $identity = $login->get_identity; # Dump Lasso objects in session $self->{sessionInfo}->{_lassoSessionDump} = $session->dump() if $session; $self->{sessionInfo}->{_lassoIdentityDump} = $identity->dump() if $identity; $self->{sessionInfo}->{_samlToken} = $self->{_samlToken}; $self->{_lassoLogin} = $login; PE_OK; } ## @apmethod int authenticate() # Do nothing # @return PE_OK sub authenticate { PE_OK; } ## @method protected *string getIDP() # Try to find an IdP using : # * HTTP parameter # * "samlIdPResolveCookie" cookie # * Rules # * Common Domain Cookie # # @return Array containing : # * IdP found (or undef) # * Cookie value if exists sub getIDP { my $self = shift; my $idp; my $idpName; my %cookies = fetch CGI::Cookie; my $idp_cookie = $cookies{ $self->{samlIdPResolveCookie} }; $idp_cookie &&= $idp_cookie->value; # Case 1: Recover IDP from idp URL Parameter unless ( $idp = $self->param("idp") ) { # Case 2: Recover IDP from idpName URL Parameter if ( $idpName = $self->param("idpName") ) { foreach ( keys %{ $self->{_idpList} } ) { my $idpConfKey = $self->{_idpList}->{$_}->{confKey}; if ( $idpName eq $idpConfKey ) { $idp = $_; $self->lmLog( "IDP $idp found from idpName URL Parameter ($idpName)", 'debug' ); last; } } } # Case 3: Recover IDP from cookie if ( !$idp and $idp = $idp_cookie ) { $self->lmLog( "IDP $idp found in IDP resolution cookie", 'debug' ); } # Case 4: check all IDP resolution rules # The first match win else { foreach ( keys %{ $self->{_idpList} } ) { my $idpConfKey = $self->{_idpList}->{$_}->{confKey}; my $cond = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsResolutionRule}; next unless defined $cond; if ( $self->safe->reval($cond) ) { $self->lmLog( "IDP $idpConfKey resolution rule match", 'debug' ); $idp = $_; last; } } } # Case 5: use Common Domain Cookie if ( !$idp and $self->{samlCommonDomainCookieActivation} and $self->{samlCommonDomainCookieReader} ) { $self->lmLog( "Will try to use Common Domain Cookie for IDP resolution", 'debug' ); # Add current URL to CDC Reader URL my $return_url = encode_base64( $self->self_url(), '' ); my $cdc_reader_url = $self->{samlCommonDomainCookieReader}; $cdc_reader_url .= ( $self->{samlCommonDomainCookieReader} =~ /\?/ ? '&url=' . $return_url : '?url=' . $return_url ); $self->lmLog( "Redirect user to $cdc_reader_url", 'debug' ); $self->{urldc} = $cdc_reader_url; return $self->_subProcess('autoRedirect'); } $self->lmLog( 'No IDP found', 'debug' ) unless ($idp); } # Alert when selected IDP is unknown if ( $idp and !exists $self->{_idpList}->{$idp} ) { $self->_sub( 'userError', "Required IDP $idp does not exists" ); $idp = undef; } return ( $idp, $idp_cookie ); } ## @apmethod void authLogout() # Logout SP # @return Lemonldap::NG::Portal error code sub authLogout { my $self = shift; my $idp = $self->{sessionInfo}->{_idp}; my $idpConfKey = $self->{sessionInfo}->{_idpConfKey}; my $session_id = $self->{sessionInfo}->{_session_id}; my $method; # Real session was previously deleted, # remove corresponding SAML sessions $self->deleteSAMLSecondarySessions($session_id); # Get Lasso Server unless ( $self->{_lassoServer} ) { $self->_sub('Lemonldap::NG::Portal::AuthSAML::authInit'); } my $server = $self->{_lassoServer}; # Recover Lasso::Session dump my $session_dump = $self->{sessionInfo}->{_lassoSessionDump}; unless ($session_dump) { $self->lmLog( "Could not get session dump from session", 'error' ); return PE_SAML_SLO_ERROR; } # IDP HTTP method $method = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsSLOBinding}; $method = $self->getHttpMethod($method) if $method; # If no method defined, get first HTTP method unless ( defined $method ) { my $protocolType = Lasso::Constants::MD_PROTOCOL_TYPE_SINGLE_LOGOUT; $method = $self->getFirstHttpMethod( $server, $idp, $protocolType ); } # Failback to SOAP unless ( defined $method and $method != -1 ) { $self->lmLog( "No method found with IDP $idpConfKey for SLO profile", 'debug' ); $method = $self->getHttpMethod("soap"); } $self->lmLog( "Use method " . $self->getHttpMethodString($method) . " with IDP $idpConfKey for SLO profile", 'debug' ); # Set signature my $signSLOMessage = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsSignSLOMessage}; # Build Logout Request my $logout = $self->createLogoutRequest( $server, $session_dump, $method, $signSLOMessage ); unless ($logout) { $self->lmLog( "Could not create logout request", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "Logout request created", 'debug' ); # Keep request ID in memory to prevent replay unless ( $self->storeReplayProtection( $logout->request()->ID ) ) { $self->lmLog( "Unable to store Logout request ID", 'error' ); return PE_SAML_SLO_ERROR; } # Send request depending on request method # HTTP-REDIRECT if ( $method == Lasso::Constants::HTTP_METHOD_REDIRECT ) { # Redirect user to response URL my $slo_url = $logout->msg_url; $self->lmLog( "Redirect user to $slo_url", 'debug' ); $self->{urldc} = $slo_url; # Redirect done in Portal/Simple.pm return PE_OK; } # HTTP-POST elsif ( $method == Lasso::Constants::HTTP_METHOD_POST ) { # Use autosubmit form my $slo_url = $logout->msg_url; my $slo_body = $logout->msg_body; $self->{postUrl} = $slo_url; $self->{postFields} = { 'SAMLRequest' => $slo_body }; # RelayState $self->{postFields}->{'RelayState'} = $logout->msg_relayState if ( $logout->msg_relayState ); # Post done in Portal/Simple.pm return PE_OK; } # HTTP-SOAP elsif ( $method == Lasso::Constants::HTTP_METHOD_SOAP ) { my $slo_url = $logout->msg_url; my $slo_body = $logout->msg_body; # Send SOAP request and manage response my $response = $self->sendSOAPMessage( $slo_url, $slo_body ); unless ($response) { $self->lmLog( "No logout response to SOAP request", 'error' ); return PE_SAML_SLO_ERROR; } # Create Logout object $logout = $self->createLogout($server); # Process logout response my $result = $self->processLogoutResponseMsg( $logout, $response ); unless ($result) { $self->lmLog( "Fail to process logout response", 'error' ); return PE_SAML_SLO_ERROR; } $self->lmLog( "Logout response is valid", 'debug' ); # Replay protection my $samlID = $logout->response()->InResponseTo; unless ( $self->replayProtection($samlID) ) { # Logout request was already consumed or is expired $self->lmLog( "Message $samlID already used or expired", 'error' ); return PE_SAML_SLO_ERROR; } return PE_OK; } } ## @apmethod boolean authForce() # Check if authentication should be forced # @return nothing sub authForce { my $self = shift; my $url = $self->url( -absolute => 1 ); my $saml_acs_art_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact"); my $saml_acs_post_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPPost"); my $saml_acs_get_url = $self->getMetaDataURL( "samlSPSSODescriptorAssertionConsumerServiceHTTPRedirect"); my $saml_slo_soap_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceSOAP", 1 ); my $saml_slo_soap_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceSOAP", 2 ); my $saml_slo_get_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPRedirect", 1 ); my $saml_slo_get_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPRedirect", 2 ); my $saml_slo_post_url = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPPost", 1 ); my $saml_slo_post_url_ret = $self->getMetaDataURL( "samlSPSSODescriptorSingleLogoutServiceHTTPPost", 2 ); my $saml_ars_url = $self->getMetaDataURL( "samlSPSSODescriptorArtifactResolutionServiceArtifact"); return 1 if ( $url =~ /^(\Q$saml_acs_art_url\E|\Q$saml_acs_post_url\E|\Q$saml_acs_get_url\E|\Q$saml_slo_soap_url\E|\Q$saml_slo_soap_url_ret\E|\Q$saml_slo_get_url\E|\Q$saml_slo_get_url_ret\E|\Q$saml_slo_post_url\E|\Q$saml_slo_post_url_ret\E|\Q$saml_ars_url\E)$/io ); return 0; } ## @apmethod boolean authFinish() # Associate NameID and SessionIndex to a local session # @return Lemonldap::NG::Portal error code sub authFinish { my $self = shift; my %h; # Real session was stored, get id and utime my $id = $self->{id}; my $utime = $self->{sessionInfo}->{_utime}; # Get saved Lasso objects my $nameid = $self->{_nameID}; my $session_index = $self->{_sessionIndex}; $self->lmLog( "Store NameID " . $nameid->dump . " and SessionIndex $session_index for session $id", 'debug' ); # Save SAML session my $samlSessionInfo = $self->getSamlSession(); return PE_SAML_SESSION_ERROR unless $samlSessionInfo; my $infos; $infos->{type} = 'saml'; # Session type $infos->{_utime} = $utime; # Creation time $infos->{_saml_id} = $id; # SSO session id $infos->{_nameID} = $nameid->dump; # SAML NameID $infos->{_sessionIndex} = $session_index; # SAML SessionIndex $samlSessionInfo->update($infos); my $session_id = $samlSessionInfo->id; $self->lmLog( "Link session $id to SAML session $session_id", 'debug' ); return PE_OK; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthSAML - SAML Authentication backend =head1 SYNOPSIS use Lemonldap::NG::Portal::AuthSAML; =head1 DESCRIPTION Use SAML to authenticate users =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2010 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBMulti.pm0000644000175000017500000000136112604503464026543 0ustar clementclement## @file # UserDB chaining mechanism ## @class # UserDB chaining mechanism package Lemonldap::NG::Portal::UserDBMulti; use Lemonldap::NG::Portal::_Multi; #inherits our $VERSION = '1.4.6'; sub userDBInit { my $self = shift; return $self->_multi->try( 'userDBInit', 1 ); } sub getUser { my $self = shift; return $self->_multi->try( 'getUser', 1 ); } sub setSessionInfo { my $self = shift; $self->{sessionInfo}->{_userDBMulti} = $self->{_multi}->{stack}->[1]->[0]->{n}; return $self->_multi->try( 'setSessionInfo', 1 ); } sub setGroups { my $self = shift; return $self->_multi->try( 'setGroups', 1 ); } sub userDBFinish { my $self = shift; return $self->_multi->try( 'userDBFinish', 1 ); } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LibAccess.pm0000644000175000017500000001056312542740733026402 0ustar clementclement##@file # Access control library for lemonldap::ng portal ##@class # Access control library for lemonldap::ng portal package Lemonldap::NG::Portal::_LibAccess; use strict; our $VERSION = '1.4.2'; # Global variables our ( $defaultCondition, $locationCondition, $locationRegexp, $cfgNum ) = ( undef, undef, undef, 0 ); BEGIN { eval { require threads::shared; threads::shared::share($defaultCondition); threads::shared::share($locationCondition); threads::shared::share($locationRegexp); threads::shared::share($cfgNum); }; } ## @method private boolean _grant(string uri) # Check user's authorization for $uri. # @param $uri URL string # @return True if granted sub _grant { my ( $self, $uri ) = splice @_; $self->lmLog( "Evaluate access right on $uri", 'debug' ); $uri =~ m{(\w+)://([^/:]+)(:\d+)?(/.*)?$} or return 0; my ( $protocol, $vhost, $port, $path ); ( $protocol, $vhost, $port, $path ) = ( $1, $2, $3, $4 ); $path ||= '/'; $self->lmLog( "Evaluation for vhost $vhost and path $path", 'debug' ); # Check global maintenance mode return 0 if $self->{maintenance}; # Check vhost maintenance mode return 0 if $self->{vhostOptions}->{$vhost}->{vhostMaintenance}; $self->_compileRules() if ( $cfgNum != $self->{cfgNum} ); if ( defined $locationRegexp->{$vhost} ) { # Not just a default rule $self->lmLog( "Applying access rule from $vhost", 'debug' ); for ( my $i = 0 ; $i < @{ $locationRegexp->{$vhost} } ; $i++ ) { if ( $path =~ $locationRegexp->{$vhost}->[$i] ) { $self->lmLog( "Applying access rule " . $locationCondition->{$vhost}->[$i] . " for path $path", 'debug' ); return &{ $locationCondition->{$vhost}->[$i] }($self); } } } else { $self->lmLog( "Applying default access rule from $vhost", 'debug' ); } unless ( $defaultCondition->{$vhost} ) { $self->lmLog( "Application $uri did not match any configured virtual host", 'warn' ); return 0; } return &{ $defaultCondition->{$vhost} }($self); return 1; } ## @method private boolean _compileRules() # Parse configured rules and compile them # @return True sub _compileRules { my $self = shift; foreach my $vhost ( keys %{ $self->{locationRules} } ) { my $i = 0; foreach my $alias ( @{ $self->_getAliases( $vhost, $self->{vhostOptions} ) } ) { $self->lmLog( "Compiling rules for $alias", 'debug' ); foreach ( keys %{ $self->{locationRules}->{$vhost} } ) { if ( $_ eq 'default' ) { $defaultCondition->{$alias} = $self->_conditionSub( $self->{locationRules}->{$vhost}->{$_} ); } else { $locationCondition->{$alias}->[$i] = $self->_conditionSub( $self->{locationRules}->{$vhost}->{$_} ); $locationRegexp->{$alias}->[$i] = qr/$_/; $i++; } } # Default policy $defaultCondition->{$alias} ||= $self->_conditionSub('accept'); } } $cfgNum = $self->{cfgNum}; 1; } ## @method private CODE _conditionSub(string cond) # Return subroutine giving authorization condition. # @param $cond boolean expression # @return Compiled routine sub _conditionSub { my ( $self, $cond ) = splice @_; return sub { 1 } if ( $cond =~ /^(?:accept|unprotect|skip)$/i ); return sub { 0 } if ( $cond =~ /^(?:deny$|logout)/i ); my $sub = "sub {my \$self = shift; return ( $cond )}"; return $self->safe->reval($sub); } ## @method arrayref _getAliases(scalar vhost, hashref options) # Check aliases of a vhost # @param vhost vhost name # @param options vhostOptions configuration item # @return arrayref of vhost and aliases sub _getAliases { my ( $self, $vhost, $options ) = splice @_; my $aliases = [$vhost]; if ( $options->{$vhost}->{vhostAliases} ) { foreach ( split /\s+/, $options->{$vhost}->{vhostAliases} ) { push @$aliases, $_; $self->lmLog( "$_ is an alias for $vhost", 'debug' ); } } return $aliases; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDemo.pm0000644000175000017500000000275712542740733027236 0ustar clementclement##@file # Demo password backend file ##@class # Demo password backend class package Lemonldap::NG::Portal::PasswordDBDemo; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.2.2'; ## @apmethod int passwordDBInit() # Check the use of AuthDemo # @return Lemonldap::NG::Portal constant sub passwordDBInit { my $self = shift; if ( $self->get_module('auth') eq 'Demo' ) { return PE_OK; } else { $self->lmLog( "Use PasswordDBDemo only with AuthDemo", 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int modifyPassword() # Check old password and password mismatch # @return Lemonldap::NG::Portal constant sub modifyPassword { my $self = shift; # Exit if no password change requested return PE_OK unless ( $self->{newpassword} ); # Check if portal require old password if ( $self->{portalRequireOldPassword} ) { unless ( $self->{oldpassword} ) { $self->lmLog( "Portal require old password", 'error' ); return PE_PP_MUST_SUPPLY_OLD_PASSWORD; } } # Verify confirmation password matching return PE_PASSWORD_MISMATCH unless ( $self->{newpassword} eq $self->{confirmpassword} ); # Check old password if ( $self->{oldpassword} ) { # Old password must be the same as uid return PE_BADOLDPASSWORD if ( $self->{oldpassword} ne $self->{sessionInfo}->{uid} ); } # Else accept all passwords # They will not be changed PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/IssuerDBNull.pm0000644000175000017500000000404712542740733026726 0ustar clementclement## @file # Null Issuer file ## @class # Null Issuer class package Lemonldap::NG::Portal::IssuerDBNull; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.0.0'; ## @method void issuerDBInit() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerDBInit { return PE_OK; } ## @apmethod int issuerForUnAuthUser() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerForUnAuthUser { PE_OK; } ## @apmethod int issuerForAuthUser() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerForAuthUser { PE_OK; } ## @apmethod int issuerLogout() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerLogout { PE_OK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::IssuerDBNull - Fake IssuerDB for Lemonldap::NG =head1 DESCRIPTION This is a fake module for Issuer implementation in LemonLDAP::NG =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2009, 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBWebID.pm0000644000175000017500000000322212542740733026404 0ustar clementclement## @file # UserDB WebID module ## @class # UserDB WebID module package Lemonldap::NG::Portal::UserDBWebID; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.3.0'; ## @apmethod int userDBInit() # Check if authentication module is WebID # @return Lemonldap::NG::Portal error code sub userDBInit { my $self = shift; unless ( $self->get_module('auth') =~ /^WebID/ ) { $self->lmLog( 'UserDBWebID isn\'t useable unless authentication module is set to WebID', 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal error code sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Get attributes from FOAF # @return Lemonldap::NG::Portal error code sub setSessionInfo { my $self = shift; unless ( $self->{_webid} ) { $self->lmLog( 'No webid object found', 'error' ); return PE_ERROR; } my %vars = ( %{ $self->{exportedVars} }, %{ $self->{webIDExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { my $attr = $k; my $req; $attr =~ s/^!// and $req = 1; eval { $self->{sessionInfo}->{$attr} = $self->{_webid}->get($v) }; $self->lmLog( "Unable to get $v from FOAF document: $@", 'error' ) if ($@); if ( $req and not $self->{sessionInfo}->{$attr} ) { $self->_sub( 'userNotice', "Required attribute $v is missing (user: $self->{user})" ); return PE_MISSINGREQATTR; } } PE_OK; } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal error code sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Proxy.pm0000644000175000017500000000560712542740733025676 0ustar clementclement## @file # Proxy authentication and userDB base. ## @class # Proxy authentication and userDB base class. package Lemonldap::NG::Portal::_Proxy; use strict; use Lemonldap::NG::Portal::Simple; use MIME::Base64; use SOAP::Lite; our $VERSION = '1.0.0'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @apmethod int proxyInit() # Checks if remote portal parameters are set. # @return Lemonldap::NG::Portal constant sub proxyInit { my $self = shift; $self->{soapSessionService} ||= $self->{soapAuthService} . 'index.pl/sessions'; $self->{soapSessionService} =~ s/\.plindex.pl/\.pl/; $self->{remoteCookieName} ||= $self->{cookieName}; return PE_OK if ($initDone); my @missing = (); foreach (qw(soapAuthService)) { push @missing, $_ unless ( defined( $self->{$_} ) ); } $self->abort( "Missing parameters", "Required parameters: " . join( ', ', @missing ) ) if (@missing); $initDone = 1; PE_OK; } ## @apmethod int proxyQuery() # Queries the remote portal to authenticate users using given credentials sub proxyQuery { my $self = shift; return PE_OK if ( $self->{_proxyQueryDone} ); my $soap = SOAP::Lite->proxy( $self->{soapAuthService} ) ->uri('urn:Lemonldap::NG::Common::CGI::SOAPService'); my $r = $soap->getCookies( $self->{user}, $self->{password} ); if ( $r->fault ) { $self->abort( "Unable to query authentication service", $r->fault->{faultstring} ); } my $res = $r->result(); # If authentication failed, display error if ( $res->{error} ) { $self->_sub( 'userError', "Authentication failed for $self->{user} " . $soap->error( $res->{error} )->result() ); return PE_BADCREDENTIALS; } $self->{_remoteId} = $res->{cookies}->{ $self->{remoteCookieName} } or $self->abort("No cookie named $self->{remoteCookieName}"); $self->{_proxyQueryDone}++; PE_OK; } ## @apmethod int setSessionInfo() # Queries the remote portal to get users attributes and # store them in local session sub setSessionInfo { my $self = shift; return PE_OK if ( $self->{_setSessionInfoDone} ); my $soap = SOAP::Lite->proxy( $self->{soapSessionService} ) ->uri('urn:Lemonldap::NG::Common::CGI::SOAPService'); my $r = $soap->getAttributes( $self->{_remoteId} ); if ( $r->fault ) { $self->abort( "Unable to query authentication service", $r->fault->{faultstring} ); } my $res = $r->result(); if ( $res->{error} ) { $self->_sub( 'userError', "Unable to get attributes for $self->{user} " ); return PE_ERROR; } foreach ( keys %{ $res->{attributes} } ) { $self->{sessionInfo}->{$_} ||= $res->{attributes}->{$_} unless (/^_/); } $self->{_setSessionInfoDone}++; PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBGoogle.pm0000644000175000017500000000313512542740733026671 0ustar clementclement## @file # UserDB Google module ## @class # UserDB Google module package Lemonldap::NG::Portal::UserDBGoogle; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Regexp; our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Check if authentication module is Google # @return Lemonldap::NG::Portal error code sub userDBInit { my $self = shift; unless ( $self->get_module('auth') =~ /^Google/ ) { $self->lmLog( 'UserDBGoogle isn\'t useable unless authentication module is set to Google', 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal error code sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Since the job is done by AuthGoogle, here just check that required # attributes are not null # @return Lemonldap::NG::Portal error code sub setSessionInfo { my $self = shift; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{googleExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { my $attr = $k; next unless ( $attr =~ s/^!// and $v =~ Lemonldap::NG::Common::Regexp::GOOGLEAXATTR() ); unless ( defined( $self->{sessionInfo}->{$attr} ) ) { $self->lmLog( "Required parameter $attr is not provided by Google server, aborted", 'warn' ); $self->{mustRedirect} = 0; return PE_MISSINGREQATTR; } } PE_OK; } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal error code sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthApache.pm0000644000175000017500000001051012542740733026406 0ustar clementclement##@file # Apache authentication backend file ##@class # Apache authentication backend class package Lemonldap::NG::Portal::AuthApache; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.2.0'; ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { PE_OK; } ## @apmethod int extractFormInfo() # Read username return by Apache authentication system. # By default, authentication is valid if REMOTE_USER environment # variable is set. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; unless ( $self->{user} = $ENV{REMOTE_USER} ) { $self->lmLog( 'Apache is not configured to authenticate users!', 'error' ); return PE_ERROR; } # This is needed for Kerberos authentication $self->{user} =~ s/^(.*)@.*$/$1/g; PE_OK; } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Store user submitted login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; $self->{sessionInfo}->{authenticationLevel} = $self->{apacheAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthApache - Perl extension for building Lemonldap::NG compatible portals with Apache authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Apache', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # If the user enters here, IT MEANS THAT APACHE AUTHENTICATION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } and of course, configure Apache to protect the portal. =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Apache authentication mechanism: we've just try to get REMOTE_USER environment variable. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2007, 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2009, 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Browser.pm0000644000175000017500000000112412542740733026166 0ustar clementclement##@file # Add LWP::UserAgent object ##@class # Add LWP::UserAgent object package Lemonldap::NG::Portal::_Browser; use strict; our $VERSION = '1.3.0'; our $_ua; ## @method LWP::UserAgent ua() # @return LWP::UserAgent object sub ua { my $self = shift; return $_ua if ($_ua); eval { require LWP::UserAgent; }; $self->abort( 'LWP::UserAgent isn\'t installed', $@ ) if ($@); # TODO : LWP options to use a proxy for example $_ua = LWP::UserAgent->new() or $self->abort($@); push @{ $_ua->requests_redirectable }, 'POST'; $_ua->env_proxy(); return $_ua; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/RegisterDBDemo.pm0000644000175000017500000000160512542740733027207 0ustar clementclement##@file # Demo register backend file ##@class # Demo register backend class package Lemonldap::NG::Portal::RegisterDBDemo; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.4.0'; ## @method int computeLogin # Compute a login from register infos # @result Lemonldap::NG::Portal constant sub computeLogin { my ($self) = splice @_; # Get first letter of firstname and lastname my $login = substr( lc $self->{registerInfo}->{firstname}, 0, 1 ) . lc $self->{registerInfo}->{lastname}; $self->{registerInfo}->{login} = $login; return PE_OK; } ## @method int createUser # Do nothing # @result Lemonldap::NG::Portal constant sub createUser { my ($self) = splice @_; return PE_OK; } ## @method int registerDBFinish # Do nothing # @result Lemonldap::NG::Portal constant sub registerDBFinish { my ($self) = splice @_; return PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthDemo.pm0000644000175000017500000000773212542740733026125 0ustar clementclement##@file # Demo authentication backend file ##@class # Demo authentication backend class package Lemonldap::NG::Portal::AuthDemo; use strict; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::_WebForm); our $VERSION = '1.2.0'; ## @apmethod int authInit() # Initialize demo accounts # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; # Sample accounts from Doctor Who characters $self->{_demoAccounts} = { 'rtyler' => { 'uid' => 'rtyler', 'cn' => 'Rose Tyler', 'mail' => 'rtyler@badwolf.org', }, 'msmith' => { 'uid' => 'msmith', 'cn' => 'Mickey Smith', 'mail' => 'msmith@badwolf.org', }, 'dwho' => { 'uid' => 'dwho', 'cn' => 'Doctor Who', 'mail' => 'dwho@badwolf.org', }, }; $self->{_authnLevel} = 0; # Add warning in log $self->lmLog( "Using demonstration mode, go in Manager to edit the configuration", 'warn' ); PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; return PE_BADCREDENTIALS unless ( $self->{user} eq $self->{password} ); PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "standardform"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthDemo - Perl extension for building Lemonldap::NG compatible portals with built-in authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Demo', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to create sessions for sample users. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBSlave.pm0000644000175000017500000000144412542740733026530 0ustar clementclement## @file # Slave userDB mechanism ## @class # Slave userDB mechanism class package Lemonldap::NG::Portal::UserDBSlave; use strict; use Lemonldap::NG::Portal::_Slave; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::UserDBNull; our $VERSION = '1.4.0'; our @ISA = qw(Lemonldap::NG::Portal::UserDBNull); ## @apmethod int setSessionInfo() # Search exportedVars values in HTTP headers. # @return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; return PE_FORBIDDENIP unless ( $self->checkIP ); my %vars = ( %{ $self->{exportedVars} }, %{ $self->{slaveExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { $v = 'HTTP_' . uc($v); $v =~ s/\-/_/g; $self->{sessionInfo}->{$k} = $ENV{$v}; } return PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Multi.pm0000644000175000017500000001266212604503464025643 0ustar clementclement## @file # Authentication and UserDB chaining mechanism ## @class # Authentication and UserDB chaining mechanism. # To use it set your authentication module like this : # authentication => 'Multi CAS;LDAP' # # If CAS failed, LDAP will be used. You can also add a condition. Example: # authentication => 'Multi Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/' package Lemonldap::NG::Portal::_Multi; use Lemonldap::NG::Portal::Simple; use Scalar::Util 'weaken'; our $VERSION = '1.4.6'; ## @cmethod Lemonldap::NG::Portal::_Multi new(Lemonldap::NG::Portal::Simple portal) # Constructor # @param $portal Lemonldap::NG::Portal::Simple object # @return new Lemonldap::NG::Portal::_Multi object sub new { my ( $class, $portal ) = splice @_; my $self = bless { p => $portal, res => PE_NOSCHEME }, $class; weaken $self->{p}; # Browse authentication and userDB configuration my @stack = ( $portal->{authentication}, $portal->{userDB} ); for ( my $i = 0 ; $i < 2 ; $i++ ) { $stack[$i] =~ s/^Multi\s*//; foreach my $l ( split /;/, $stack[$i] ) { $l =~ s/^\s+//; # Remove first space $l =~ /^([\w#]+)(?:\s+(.*))?$/ or $portal->abort( 'Bad configuration', "Unable to read $l" ); my ( $mod, $cond ) = ( $1, $2 ); my $name = $mod; $mod =~ s/#(.*)$//; my $shortname = $mod; $cond = 1 unless ( defined $cond ); $mod = "Lemonldap::NG::Portal::" . [ 'Auth', 'UserDB' ]->[$i] . $mod unless ( $mod =~ /::/ ); $portal->abort( 'Bad configuration', "Unable to load $mod" ) unless $self->{p}->loadModule($mod); push @{ $self->{stack}->[$i] }, { m => $mod, c => $cond, n => $name, s => $shortname }; } # Override portal settings %{ $self->{p} } = ( %{ $self->{p} }, %{ $self->{p}->{multi}->{ $self->{stack}->[$i]->[0]->{n} } } ) if ( $self->{p}->{multi}->{ $self->{stack}->[$i]->[0]->{n} } ); } # Return _Multi object return $self; } ## @method int try(string sub,int type) # Main method: try to call $sub method in the current authentication or # userDB module. If it fails, call next() and replay() # @param sub name of the method to launch # @param type 0 for authentication, 1 for userDB # @return Lemonldap::NG::Portal error code returned by method $sub sub try { my ( $self, $sub, $type ) = splice @_; my $res; my $s = $self->{stack}->[$type]->[0]->{m} . "::$sub"; my $old = $self->{stack}->[$type]->[0]->{n}; my $ci; # Store last module used $self->{last}->[$type] = $self->{stack}->[$type]->[0]->{m}; if ( $ci = $self->{p}->safe->reval( $self->{stack}->[$type]->[0]->{c} ) ) { # Log used module $self->{p} ->lmLog( "Multi (type $type): trying $sub for module $old", 'debug' ); # Run subroutine $res = $self->{p}->$s(); # Stop if no error, or if confirmation needed, or if form not filled return $res if ( $res <= 0 or $res == PE_CONFIRM or $res == PE_FIRSTACCESS or $res == PE_FORMEMPTY ); } unless ( $self->next($type) ) { return ( $ci ? $res : $self->{res} ); } $self->{res} = $res if ( defined($res) ); $self->{p}->lmLog( [ 'Authentication', 'Retriving user' ]->[$type] . " with $old failed, trying next", 'info' ) if ($ci); $res = $self->replay( $sub, $type ); return $res; } ## @method protected boolean next(int type) # Set the next authentication or userDB module as current. If both # authentication and userDB module have the same name, both are changed if # possible. # @param type 0 for authentication, 1 for userDB # return true if an other module is available sub next { my ( $self, $type ) = splice @_; if ( $self->{stack}->[$type]->[0]->{n} eq $self->{stack}->[ 1 - $type ]->[0]->{n} and $self->{stack}->[ 1 - $type ]->[1] ) { shift @{ $self->{stack}->[ 1 - $type ] }; } shift @{ $self->{stack}->[$type] }; # Manage end of the stack return 0 unless ( @{ $self->{stack}->[$type] } ); %{ $self->{p} } = ( %{ $self->{p} }, %{ $self->{p}->{multi}->{ $self->{stack}->[$type]->[0]->{n} } } ) if ( $self->{p}->{multi}->{ $self->{stack}->[$type]->[0]->{n} } ); return 1; } ## @method protected int replay(string sub) # replay all methods since authInit() until method $sub with the new module. # @param $sub name of the method who has failed # @return Lemonldap::NG::Portal error code sub replay { my ( $self, $sub ) = splice @_; my @subs = (); $self->{p}->lmLog( "Replay all methods until sub $sub", 'debug' ); foreach ( qw(authInit extractFormInfo userDBInit getUser setAuthSessionInfo setSessionInfo setGroups authenticate authFinish) ) { push @subs, $_; last if ( $_ eq $sub ); } return $self->{p}->_subProcess(@subs); } package Lemonldap::NG::Portal::Simple; ## @method private Lemonldap::NG::Portal::_Multi _multi() # Return Lemonldap::NG::Portal::_Multi object and builds it if it was not build # before. This method is used if authentication is set to "Multi". # @return Lemonldap::NG::Portal::_Multi object sub _multi { my $self = shift; return $self->{_multi} if ( $self->{_multi} ); return $self->{_multi} = Lemonldap::NG::Portal::_Multi->new($self); } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthLDAP.pm0000644000175000017500000000416612542740733025757 0ustar clementclement##@file # LDAP authentication backend file ##@class # LDAP authentication backend class package Lemonldap::NG::Portal::AuthLDAP; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_LDAP 'ldap'; #link protected ldap use Lemonldap::NG::Portal::_WebForm; use Lemonldap::NG::Portal::UserDBLDAP; #inherits our $VERSION = '1.4.0'; use base qw(Lemonldap::NG::Portal::_WebForm); *_formateFilter = *Lemonldap::NG::Portal::UserDBLDAP::formateFilter; *_search = *Lemonldap::NG::Portal::UserDBLDAP::search; ## @apmethod int authInit() # Set _authnLevel # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; $self->{_authnLevel} = $self->{ldapAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Authenticate user by LDAP mechanism. # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; unless ( $self->ldap ) { return PE_LDAPCONNECTFAILED; } # Set the dn unless done before unless ( $self->{dn} ) { my $tmp = $self->_subProcess(qw(_formateFilter _search)); $self->{sessionInfo}->{dn} = $self->{dn}; return $tmp if ($tmp); } my $res = $self->ldap->userBind( $self->{dn}, password => $self->{password} ); # Remember password if password reset needed $self->{oldpassword} = $self->{password} if ( $res == PE_PP_CHANGE_AFTER_RESET ); # Unbind if there was an error unless ( $res == PE_OK ) { $self->ldap->unbind; $self->{flags}->{ldapActive} = 0; } return $res; } ## @apmethod int authFinish() # Unbind. # @return Lemonldap::NG::Portal constant sub authFinish { my $self = shift; if ( ref( $self->{ldap} ) && $self->{flags}->{ldapActive} ) { $self->ldap->unbind(); $self->{flags}->{ldapActive} = 0; } PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "standardform"; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBProxy.pm0000644000175000017500000000122512542740733026574 0ustar clementclement## @file # Proxy userDB mechanism ## @class # Proxy userDB mechanism class package Lemonldap::NG::Portal::UserDBProxy; use strict; use Lemonldap::NG::Portal::_Proxy; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::_Proxy); our $VERSION = '1.0.0'; ## @apmethod int userDBInit() # Call Lemonldap::NG::Portal::_Proxy::proxyInit(); # @return Lemonldap::NG::Portal constant *userDBInit = *Lemonldap::NG::Portal::_Proxy::proxyInit; ## @apmethod int getUser() # Call Lemonldap::NG::Portal::_Proxy::proxyQuery() # @return Lemonldap::NG::Portal constant *getUser = *Lemonldap::NG::Portal::_Proxy::proxyQuery; sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/IssuerDBCAS.pm0000644000175000017500000006171512542740733026427 0ustar clementclement## @file # CAS Issuer file ## @class # CAS Issuer class package Lemonldap::NG::Portal::IssuerDBCAS; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_CAS; use base qw(Lemonldap::NG::Portal::_CAS Lemonldap::NG::Portal::_LibAccess); our $VERSION = '1.4.3'; ## @method void issuerDBInit() # Nothing to do # @return Lemonldap::NG::Portal error code sub issuerDBInit { my $self = shift; return PE_OK; } ## @apmethod int issuerForUnAuthUser() # Manage CAS request for unauthenticated user # @return Lemonldap::NG::Portal error code sub issuerForUnAuthUser { my $self = shift; # CAS URLs my $issuerDBCASPath = $self->{issuerDBCASPath}; my $cas_login = 'login'; my $cas_logout = 'logout'; my $cas_validate = 'validate'; my $cas_serviceValidate = 'serviceValidate'; my $cas_proxyValidate = 'proxyValidate'; my $cas_proxy = 'proxy'; # Called URL my $url = $self->url(); my $url_path = $self->url( -absolute => 1 ); $url_path =~ s#^//#/#; # 1. LOGIN if ( $url_path =~ m#${issuerDBCASPath}${cas_login}# ) { $self->lmLog( "URL $url detected as an CAS LOGIN URL", 'debug' ); # GET parameters my $service = $self->getHiddenFormValue('service') || $self->param('service'); my $renew = $self->getHiddenFormValue('renew') || $self->param('renew'); my $gateway = $self->getHiddenFormValue('gateway') || $self->param('gateway'); # Keep values in hidden fields $self->setHiddenFormValue( 'service', $service ); $self->setHiddenFormValue( 'renew', $renew ); $self->setHiddenFormValue( 'gateway', $gateway ); # Gateway if ( $gateway eq 'true' ) { # User should already be authenticated $self->lmLog( "Gateway authentication requested, but user is not logged in", 'error' ); # Redirect user to the service $self->lmLog( "Redirect user to $service", 'debug' ); $self->{urldc} = $service; return $self->_subProcess(qw(autoRedirect)); } } # 2. LOGOUT if ( $url_path =~ m#${issuerDBCASPath}${cas_logout}# ) { $self->lmLog( "URL $url detected as an CAS LOGOUT URL", 'debug' ); # GET parameters my $logout_url = $self->param('url'); if ($logout_url) { # Display a link to the provided URL $self->lmLog( "Logout URL $logout_url will be displayed", 'debug' ); $self->info( "

    " . $self->msg(PM_BACKTOCASURL) . "

    " ); $self->info("

    $logout_url

    "); $self->{activeTimer} = 0; return PE_CONFIRM; } return PE_LOGOUT_OK; } # 3. VALIDATE [CAS 1.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_validate}# ) { $self->lmLog( "URL $url detected as an CAS VALIDATE URL", 'debug' ); # GET parameters my $service = $self->param('service'); my $ticket = $self->param('ticket'); my $renew = $self->param('renew'); # Required parameters: service and ticket unless ( $service and $ticket ) { $self->lmLog( "Service and Ticket parameters required", 'error' ); $self->returnCasValidateError(); } $self->lmLog( "Get validate request with ticket $ticket for service $service", 'debug' ); unless ( $ticket =~ s/^ST-// ) { $self->lmLog( "Provided ticket is not a service ticket (ST)", 'error' ); $self->returnCasValidateError(); } my $casServiceSession = $self->getCasSession($ticket); unless ($casServiceSession) { $self->lmLog( "Service ticket session $ticket not found", 'error' ); $self->returnCasValidateError(); } $self->lmLog( "Service ticket session $ticket found", 'debug' ); # Check service unless ( $service eq $casServiceSession->data->{service} ) { $self->lmLog( "Submitted service $service does not match initial service " . $casServiceSession->data->{service}, 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasValidateError(); } $self->lmLog( "Submitted service $service math initial servce", 'debug' ); # Check renew if ( $renew eq 'true' ) { # We should check the ST was delivered with primary credentials $self->lmLog( "Renew flag detected ", 'debug' ); unless ( $casServiceSession->data->{renew} ) { $self->lmLog( "Authentication renew requested, but not done in former authentication process", 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasValidateError(); } } # Open local session my $localSession = $self->getApacheSession( $casServiceSession->data->{_cas_id}, 1 ); unless ($localSession) { $self->lmLog( "Local session " . $casServiceSession->data->{_cas_id} . " notfound", 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasValidateError(); } # Get username my $username = $localSession->data->{ $self->{casAttr} || $self->{whatToTrace} }; $self->lmLog( "Get username $username", 'debug' ); # Return success message $self->deleteCasSession($casServiceSession); $self->returnCasValidateSuccess($username); # We should not be there return PE_ERROR; } # 4. SERVICE VALIDATE [CAS 2.0] # 5. PROXY VALIDATE [CAS 2.0] if ( ( $url_path =~ m#${issuerDBCASPath}${cas_serviceValidate}# ) || ( $url_path =~ m#${issuerDBCASPath}${cas_proxyValidate}# ) ) { my $urlType = ( $url_path =~ m#${issuerDBCASPath}${cas_serviceValidate}# ? 'SERVICE' : 'PROXY' ); $self->lmLog( "URL $url detected as an CAS $urlType VALIDATE URL", 'debug' ); # GET parameters my $service = $self->param('service'); my $ticket = $self->param('ticket'); my $pgtUrl = $self->param('pgtUrl'); my $renew = $self->param('renew'); # PGTIOU my $casProxyGrantingTicketIOU; # Required parameters: service and ticket unless ( $service and $ticket ) { $self->lmLog( "Service and Ticket parameters required", 'error' ); $self->returnCasServiceValidateError( 'INVALID_REQUEST', 'Missing mandatory parameters (service, ticket)' ); } $self->lmLog( "Get " . lc($urlType) . " validate request with ticket $ticket for service $service", 'debug' ); # Get CAS session corresponding to ticket if ( $urlType eq 'SERVICE' and !( $ticket =~ s/^ST-// ) ) { $self->lmLog( "Provided ticket is not a service ticket (ST)", 'error' ); $self->returnCasServiceValidateError( 'INVALID_TICKET', 'Provided ticket is not a service ticket' ); } elsif ( $urlType eq 'PROXY' and !( $ticket =~ s/^(P|S)T-// ) ) { $self->lmLog( "Provided ticket is not a service or proxy ticket ($1T)", 'error' ); $self->returnCasServiceValidateError( 'INVALID_TICKET', 'Provided ticket is not a service or proxy ticket' ); } my $casServiceSession = $self->getCasSession($ticket); unless ($casServiceSession) { $self->lmLog( "$urlType ticket session $ticket not found", 'error' ); $self->returnCasServiceValidateError( 'INVALID_TICKET', 'Ticket not found' ); } $self->lmLog( "$urlType ticket session $ticket found", 'debug' ); # Check service unless ( $service eq $casServiceSession->data->{service} ) { $self->lmLog( "Submitted service $service does not match initial service " . $casServiceSession->data->{service}, 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasServiceValidateError( 'INVALID_SERVICE', 'Submitted service does not match initial service' ); } $self->lmLog( "Submitted service $service match initial servce", 'debug' ); # Check renew if ( $renew eq 'true' ) { # We should check the ST was delivered with primary credentials $self->lmLog( "Renew flag detected ", 'debug' ); unless ( $casServiceSession->data->{renew} ) { $self->lmLog( "Authentication renew requested, but not done in former authentication process", 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasValidateError(); } } # Proxies (for PROXY VALIDATE only) my $proxies = $casServiceSession->data->{proxies}; # Proxy granting ticket if ($pgtUrl) { # Create a proxy granting ticket $self->lmLog( "Create a CAS proxy granting ticket for service $service", 'debug' ); my $casProxyGrantingSession = $self->getCasSession(); if ($casProxyGrantingSession) { my $PGinfos; # PGT session $PGinfos->{type} = 'casProxyGranting'; $PGinfos->{service} = $service; $PGinfos->{_cas_id} = $casServiceSession->data->{_cas_id}; $PGinfos->{_utime} = $casServiceSession->data->{_utime}; # Trace proxies $PGinfos->{proxies} = ( $proxies ? $proxies . $self->{multiValuesSeparator} . $pgtUrl : $pgtUrl ); my $casProxyGrantingSessionID = $casProxyGrantingSession->id; my $casProxyGrantingTicket = "PGT-" . $casProxyGrantingSessionID; $casProxyGrantingSession->update($PGinfos); $self->lmLog( "CAS proxy granting session $casProxyGrantingSessionID created", 'debug' ); # Generate the proxy granting ticket IOU my $tmpCasSession = $self->getCasSession(); if ($tmpCasSession) { $casProxyGrantingTicketIOU = "PGTIOU-" . $tmpCasSession->id; $self->deleteCasSession($tmpCasSession); $self->lmLog( "Generate proxy granting ticket IOU $casProxyGrantingTicketIOU", 'debug' ); # Request pgtUrl if ( $self->callPgtUrl( $pgtUrl, $casProxyGrantingTicketIOU, $casProxyGrantingTicket ) ) { $self->lmLog( "Proxy granting URL $pgtUrl called with success", 'debug' ); } else { $self->lmLog( "Error calling proxy granting URL $pgtUrl", 'warn' ); $casProxyGrantingTicketIOU = undef; } } } else { $self->lmLog( "Error in proxy granting ticket management, bypass it", 'warn' ); } } # Open local session my $localSession = $self->getApacheSession( $casServiceSession->data->{_cas_id}, 1 ); unless ($localSession) { $self->lmLog( "Local session " . $casServiceSession->data->{_cas_id} . " notfound", 'error' ); $self->deleteCasSession($casServiceSession); $self->returnCasServiceValidateError( 'INTERNAL_ERROR', 'No session associated to ticket' ); } # Get username my $username = $localSession->data->{ $self->{casAttr} || $self->{whatToTrace} }; $self->lmLog( "Get username $username", 'debug' ); # Return success message $self->deleteCasSession($casServiceSession); $self->returnCasServiceValidateSuccess( $username, $casProxyGrantingTicketIOU, $proxies ); # We should not be there return PE_ERROR; } # 6. PROXY [CAS 2.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_proxy}# ) { $self->lmLog( "URL $url detected as an CAS PROXY URL", 'debug' ); # GET parameters my $pgt = $self->param('pgt'); my $targetService = $self->param('targetService'); # Required parameters: pgt and targetService unless ( $pgt and $targetService ) { $self->lmLog( "Pgt and TargetService parameters required", 'error' ); $self->returnCasProxyError( 'INVALID_REQUEST', 'Missing mandatory parameters (pgt, targetService)' ); } $self->lmLog( "Get proxy request with ticket $pgt for service $targetService", 'debug' ); # Get CAS session corresponding to ticket unless ( $pgt =~ s/^PGT-// ) { $self->lmLog( "Provided ticket is not a proxy granting ticket (PGT)", 'error' ); $self->returnCasProxyError( 'BAD_PGT', 'Provided ticket is not a proxy granting ticket' ); } my $casProxyGrantingSession = $self->getCasSession($pgt); unless ($casProxyGrantingSession) { $self->lmLog( "Proxy granting ticket session $pgt not found", 'error' ); $self->returnCasProxyError( 'BAD_PGT', 'Ticket not found' ); } $self->lmLog( "Proxy granting session $pgt found", 'debug' ); # Create a proxy ticket $self->lmLog( "Create a CAS proxy ticket for service $targetService", 'debug' ); my $casProxySession = $self->getCasSession(); unless ($casProxySession) { $self->lmLog( "Unable to create CAS proxy session", 'error' ); $self->returnCasProxyError( 'INTERNAL_ERROR', 'Error in proxy session management' ); } my $Pinfos; $Pinfos->{type} = 'casProxy'; $Pinfos->{service} = $targetService; $Pinfos->{_cas_id} = $casProxyGrantingSession->data->{_cas_id}; $Pinfos->{_utime} = $casProxyGrantingSession->data->{_utime}; $Pinfos->{proxies} = $casProxyGrantingSession->data->{proxies}; $casProxySession->update($Pinfos); my $casProxySessionID = $casProxySession->id; my $casProxyTicket = "PT-" . $casProxySessionID; $self->lmLog( "CAS proxy session $casProxySessionID created", 'debug' ); # Return success message $self->returnCasProxySuccess($casProxyTicket); # We should not be there return PE_ERROR; } return PE_OK; } ## @apmethod int issuerForAuthUser() # Manage CAS request for unauthenticated user # @return Lemonldap::NG::Portal error code sub issuerForAuthUser { my $self = shift; # CAS URLs my $issuerDBCASPath = $self->{issuerDBCASPath}; my $cas_login = 'login'; my $cas_logout = 'logout'; my $cas_validate = 'validate'; my $cas_serviceValidate = 'serviceValidate'; my $cas_proxyValidate = 'proxyValidate'; my $cas_proxy = 'proxy'; # Called URL my $url = $self->url(); my $url_path = $self->url( -absolute => 1 ); $url_path =~ s#^//#/#; # Session ID my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id}; # Session creation timestamp my $time = $self->{sessionInfo}->{_utime} || time(); # 1. LOGIN if ( $url_path =~ m#${issuerDBCASPath}${cas_login}# ) { $self->lmLog( "URL $url detected as an CAS LOGIN URL", 'debug' ); # GET parameters my $service = $self->getHiddenFormValue('service') || $self->param('service'); my $renew = $self->getHiddenFormValue('renew') || $self->param('renew'); my $gateway = $self->getHiddenFormValue('gateway') || $self->param('gateway'); my $casServiceTicket; # Renew if ( $renew eq 'true' ) { # Authentication must be replayed $self->lmLog( "Authentication renew requested", 'debug' ); $self->{updateSession} = 1; $self->{error} = $self->_subProcess( qw(issuerDBInit authInit issuerForUnAuthUser extractFormInfo userDBInit getUser setAuthSessionInfo setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups authenticate store authFinish) ); # Return error if any if ( $self->{error} > 0 ) { $self->lmLog( "Error in authentication renew process", 'error' ); return $self->{error}; } } # If no service defined, exit unless ( defined $service ) { $self->lmLog( "No service defined in CAS URL", 'debug' ); return PE_OK; } # Check access on the service my $casAccessControlPolicy = $self->{casAccessControlPolicy}; if ( $casAccessControlPolicy =~ /^(error|faketicket)$/i ) { $self->lmLog( "CAS access control requested on service $service", 'debug' ); if ( $self->_grant($service) ) { $self->lmLog( "CAS service $service access allowed", 'debug' ); } else { $self->lmLog( "CAS service $service access not allowed", 'error' ); if ( $casAccessControlPolicy =~ /^(error)$/i ) { $self->lmLog( "Return error instead of redirecting user on CAS service", 'debug' ); return PE_CAS_SERVICE_NOT_ALLOWED; } else { $self->lmLog( "Redirect user on CAS service with a fake ticket", 'debug' ); $casServiceTicket = "ST-F4K3T1CK3T"; } } } unless ($casServiceTicket) { # Check last authentication time to decide if # the authentication is recent or not my $casRenewFlag = 0; my $last_authn_utime = $self->{sessionInfo}->{_lastAuthnUTime} || 0; if ( time() - $last_authn_utime < $self->{portalForceAuthnInterval} ) { $self->lmLog( "Authentication is recent, will set CAS renew flag to true", 'debug' ); $casRenewFlag = 1; } # Create a service ticket $self->lmLog( "Create a CAS service ticket for service $service", 'debug' ); my $casServiceSession = $self->getCasSession(); unless ($casServiceSession) { $self->lmLog( "Unable to create CAS session", 'error' ); return PE_ERROR; } my $Sinfos; $Sinfos->{type} = 'casService'; $Sinfos->{service} = $service; $Sinfos->{renew} = $casRenewFlag; $Sinfos->{_cas_id} = $session_id; $Sinfos->{_utime} = $time; $casServiceSession->update($Sinfos); my $casServiceSessionID = $casServiceSession->id; $casServiceTicket = "ST-" . $casServiceSessionID; $self->lmLog( "CAS service session $casServiceSessionID created", 'debug' ); } # Redirect to service my $service_url = $service; $service_url .= ( $service =~ /\?/ ? '&ticket=' . $casServiceTicket : '?ticket=' . $casServiceTicket ); $self->lmLog( "Redirect user to $service_url", 'debug' ); $self->{urldc} = $service_url; return $self->_subProcess(qw(autoRedirect)); } # 2. LOGOUT if ( $url_path =~ m#${issuerDBCASPath}${cas_logout}# ) { $self->lmLog( "URL $url detected as an CAS LOGOUT URL", 'debug' ); # GET parameters my $logout_url = $self->param('url'); # Delete linked CAS sessions $self->deleteCasSecondarySessions($session_id); # Delete local session unless ( $self->_deleteSession( $self->getApacheSession( $session_id, 1 ) ) ) { $self->lmLog( "Fail to delete session $session_id ", 'error' ); } if ($logout_url) { # Display a link to the provided URL $self->lmLog( "Logout URL $logout_url will be displayed", 'debug' ); $self->info( "

    " . $self->msg(PM_BACKTOCASURL) . "

    " ); $self->info("

    $logout_url

    "); $self->{activeTimer} = 0; return PE_CONFIRM; } return PE_LOGOUT_OK; } # 3. VALIDATE [CAS 1.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_validate}# ) { $self->lmLog( "URL $url detected as an CAS VALIDATE URL", 'debug' ); # This URL must not be called by authenticated users $self->lmLog( "CAS VALIDATE URL called by authenticated user, ignore it", 'info' ); return PE_OK; } # 4. SERVICE VALIDATE [CAS 2.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_serviceValidate}# ) { $self->lmLog( "URL $url detected as an CAS SERVICE VALIDATE URL", 'debug' ); # This URL must not be called by authenticated users $self->lmLog( "CAS SERVICE VALIDATE URL called by authenticated user, ignore it", 'info' ); return PE_OK; } # 5. PROXY VALIDATE [CAS 2.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_proxyValidate}# ) { $self->lmLog( "URL $url detected as an CAS PROXY VALIDATE URL", 'debug' ); # This URL must not be called by authenticated users $self->lmLog( "CAS PROXY VALIDATE URL called by authenticated user, ignore it", 'info' ); return PE_OK; } # 6. PROXY [CAS 2.0] if ( $url_path =~ m#${issuerDBCASPath}${cas_proxy}# ) { $self->lmLog( "URL $url detected as an CAS PROXY URL", 'debug' ); # This URL must not be called by authenticated users $self->lmLog( "CAS PROXY URL called by authenticated user, ignore it", 'info' ); return PE_OK; } return PE_OK; } ## @apmethod int issuerLogout() # Destroy linked CAS sessions # @return Lemonldap::NG::Portal error code sub issuerLogout { my $self = shift; # Session ID my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id}; # Delete linked CAS sessions $self->deleteCasSecondarySessions($session_id); return PE_OK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::IssuerDBCAS - CAS IssuerDB for LemonLDAP::NG =head1 DESCRIPTION CAS Issuer implementation in LemonLDAP::NG =head1 SEE ALSO L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDBI.pm0000644000175000017500000000426012542740733026737 0ustar clementclement##@file # DBI password backend file ##@class # DBI password backend class package Lemonldap::NG::Portal::PasswordDBDBI; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::AuthDBI; #inherits use base qw(Lemonldap::NG::Portal::_DBI ); #inherits Lemonldap::NG::Portal::_SMTP our $VERSION = '1.3.2'; ## @apmethod int passwordDBInit() # Load SMTP functions and call DBI authInit() # @return Lemonldap::NG::Portal constant sub passwordDBInit { my $self = shift; eval { use base qw(Lemonldap::NG::Portal::_SMTP) }; if ($@) { $self->lmLog( "Unable to load SMTP functions ($@)", 'error' ); return PE_ERROR; } unless ( $self->{dbiPasswordMailCol} ) { $self->lmLog( "Missing configuration parameters for DBI password reset", 'error' ); return PE_ERROR; } return $self->Lemonldap::NG::Portal::AuthDBI::authInit(); } ## @apmethod int modifyPassword() # Modify the password # @return Lemonldap::NG::Portal constant sub modifyPassword { my $self = shift; # Exit if no password change requested return PE_OK unless ( $self->{newpassword} ); # Check if portal require old password if ( $self->{portalRequireOldPassword} ) { unless ( $self->{oldpassword} ) { $self->lmLog( "Portal require old password", 'error' ); return PE_PP_MUST_SUPPLY_OLD_PASSWORD; } } # Verify confirmation password matching return PE_PASSWORD_MISMATCH unless ( $self->{newpassword} eq $self->{confirmpassword} ); # Connect my $dbh = $self->dbh( $self->{dbiAuthChain}, $self->{dbiAuthUser}, $self->{dbiAuthPassword} ); return PE_ERROR unless $dbh; my $user = $self->{sessionInfo}->{_user}; # Check old password if ( $self->{oldpassword} ) { my $result = $self->check_password( $dbh, $user, $self->{oldpassword} ); unless ($result) { return PE_BADOLDPASSWORD; } } # Modify password my $result = $self->modify_password( $user, $self->{newpassword} ); unless ($result) { return PE_ERROR; } $self->lmLog( "Password changed for $user", 'debug' ); PE_PASSWORD_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_WebForm.pm0000644000175000017500000001024012542740733026103 0ustar clementclement##@file # Web form authentication backend file ##@class # Web form authentication backend class package Lemonldap::NG::Portal::_WebForm; use Lemonldap::NG::Portal::Simple qw(:all); use strict; our $VERSION = '1.4.0'; ## @apmethod int authInit() # Does nothing. # @return Lemonldap::NG::Portal constant sub authInit { PE_OK; } ## @apmethod int extractFormInfo() # Read username and password from POST datas # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; # Init captcha if ( $self->{captcha_login_enabled} ) { eval { $self->initCaptcha(); }; $self->lmLog( "Can't init captcha: $@", "error" ) if $@; } # Detect first access and empty forms my $defUser = defined $self->param('user'); my $defPassword = defined $self->param('password'); my $defOldPassword = defined $self->param('oldpassword'); # 1. No user defined at all -> first access return PE_FIRSTACCESS unless $defUser; # 2. If user and password defined -> login form if ( $defUser && $defPassword ) { return PE_FORMEMPTY unless ( ( $self->{user} = $self->param('user') ) && ( $self->{password} = $self->param('password') ) ); } # 3. If user and oldpassword defined -> password form if ( $defUser && $defOldPassword ) { return PE_PASSWORDFORMEMPTY unless ( ( $self->{user} = $self->param('user') ) && ( $self->{oldpassword} = $self->param('oldpassword') ) && ( $self->{newpassword} = $self->param('newpassword') ) && ( $self->{confirmpassword} = $self->param('confirmpassword') ) ); } # 4. Captcha for login form if ( $self->{captcha_login_enabled} && $defUser && $defPassword ) { $self->{captcha_user_code} = $self->param('captcha_user_code'); $self->{captcha_check_code} = $self->param('captcha_code'); unless ( $self->{captcha_user_code} && $self->{captcha_check_code} ) { $self->lmLog( "Captcha not filled", 'warn' ); return PE_CAPTCHAEMPTY; } $self->lmLog( "Captcha data received: " . $self->{captcha_user_code} . " and " . $self->{captcha_check_code}, 'debug' ); # Check captcha my $captcha_result = $self->checkCaptcha( $self->{captcha_user_code}, $self->{captcha_check_code} ); if ( $captcha_result != 1 ) { if ( $captcha_result == -3 or $captcha_result == -2 ) { $self->lmLog( "Captcha failed: wrong code", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == 0 ) { $self->lmLog( "Captcha failed: code not checked (file error)", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == -1 ) { $self->lmLog( "Captcha failed: code has expired", 'warn' ); return PE_CAPTCHAERROR; } } $self->lmLog( "Captcha code verified", 'debug' ); } # Other parameters $self->{timezone} = $self->param('timezone'); # Check user return PE_MALFORMEDUSER unless $self->get_user; PE_OK; } ## @apmethod int setAuthSessionInfo() # Set password in session datas if wanted. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # authenticationLevel # -1 if password can be remebered # +1 for user/password with HTTPS $self->{_authnLevel} ||= 0; $self->{_authnLevel} += 1 if $self->https(); $self->{_authnLevel} -= 1 if $self->{portalAutocomplete}; $self->{sessionInfo}->{authenticationLevel} = $self->{_authnLevel}; # Store user submitted login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; # Store submitted password if set in configuration # WARNING: it can be a security hole if ( $self->{storePassword} ) { $self->{sessionInfo}->{'_password'} = $self->{'newpassword'} || $self->{'password'}; } # Store user timezone $self->{sessionInfo}->{'_timezone'} = $self->{'timezone'}; PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthRemote.pm0000644000175000017500000001037112542740733026465 0ustar clementclement## @file # Remote authentication module ## @class # Remote authentication module: It simply check the remote session using cross # domain mechanism. package Lemonldap::NG::Portal::AuthRemote; use strict; use Lemonldap::NG::Portal::_Remote; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::_Remote); our $VERSION = '1.2.0'; *authInit = *Lemonldap::NG::Portal::_Remote::init; ## @apmethod int extractFormInfo() # Call checkRemoteId() and set $self->{user} and $self->{password} # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; my $r = $self->checkRemoteId(); return $r unless ( $r == PE_OK ); $self->{user} = $self->{rSessionInfo}->{ $self->{remoteUserField} || 'uid' }; $self->{password} = $self->{rSessionInfo}->{'_password'}; PE_OK; } ## @apmethod int setAuthSessionInfo() # Delete stored password if local policy does not accept stored passwords. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Store user login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; # Store password (deleted in checkRemoteId() if local policy does not accept #stored passwords) $self->{sessionInfo}->{'_password'} = $self->{'password'}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthRemote - Authentication module for Lemonldap::NG that delegates authentication to a remote Lemonldap::NG portal. =head1 SYNOPSIS use Lemonldap::NG::Portal::Simple; my $portal = new Lemonldap::NG::Portal::Simple( # AUTHENTICATION PART authentication => 'Remote', remotePortal => 'https://auth.remote.com/', # Example with SOAP access to remote session DB remoteGlobalStorage => 'Lemonldap::NG::Common::Apache::Session::SOAP', remoteGlobalStorageOptions => { proxy => 'https://auth.remote.com/index.pl/sessions', ns => 'urn://auth.remote.com/Lemonldap/NG/Common/CGI/SOAPService', user => 'myuser', password => 'mypass', } # Optional parameters if remote parameters are not the same. # Example with default values: remoteCookieName => 'lemonldap', remoteUserField => 'uid', # USER DATABASE PART (not required if remote users exists in your DB) userDB => 'Remote', ); =head1 DESCRIPTION Authentication module for Lemonldap::NG portal that delegates authentication to a remote portal. =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2009, 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthMulti.pm0000644000175000017500000000211312604503464026314 0ustar clementclement## @file # Authentication chaining mechanism ## @class # Authentication chaining mechanism package Lemonldap::NG::Portal::AuthMulti; use Lemonldap::NG::Portal::_Multi; #inherits our $VERSION = '1.4.6'; sub authInit { my $self = shift; return $self->_multi->try( 'authInit', 0 ); } sub extractFormInfo { my $self = shift; return $self->_multi->try( 'extractFormInfo', 0 ); } sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{_authMulti} = $self->{_multi}->{stack}->[0]->[0]->{n}; return $self->_multi->try( 'setAuthSessionInfo', 0 ); } sub authenticate { my $self = shift; return $self->_multi->try( 'authenticate', 0 ); } sub authFinish { my $self = shift; return $self->_multi->try( 'authFinish', 0 ); } sub authLogout { my $self = shift; return $self->_multi->try( 'authLogout', 0 ); } sub authForce { my $self = shift; return $self->_multi->try( 'authForce', 0 ); } sub getDisplayType { my $self = shift; my $s = $self->{_multi}->{last}->[0] . "::getDisplayType"; return &{$s}; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBFacebook.pm0000644000175000017500000000331312542740733027164 0ustar clementclement## @file # UserDB Facebook module ## @class # UserDB Facebook module # # To know attributes that can be asked, take a look at # https://developers.facebook.com/tools/explorer package Lemonldap::NG::Portal::UserDBFacebook; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Check if authentication module is Facebook # @return Lemonldap::NG::Portal error code sub userDBInit { my $self = shift; unless ( $self->get_module('auth') =~ /^Facebook/ ) { $self->lmLog( 'UserDBFacebook isn\'t useable unless authentication module is set to Facebook', 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal error code sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Since the job is done by AuthFacebook, here just check that required # attributes are not null # @return Lemonldap::NG::Portal error code sub setSessionInfo { my $self = shift; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{facebookExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { my $attr = $k; my $required = ( $attr =~ s/^!// ) ? 1 : 0; $self->{sessionInfo}->{$attr} = $self->{_facebookDatas}->{$v}; if ( $required and not( defined $self->{sessionInfo}->{$attr} ) ) { $self->lmLog( "Required parameter $v is not provided by Facebook server, aborted", 'warn' ); $self->{mustRedirect} = 0; return PE_MISSINGREQATTR; } } PE_OK; } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal error code sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthTwitter.pm0000644000175000017500000001663512542740733026705 0ustar clementclement##@file # Twitter authentication backend file ##@class # Twitter authentication backend class. package Lemonldap::NG::Portal::AuthTwitter; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.2.0'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; return PE_OK if ($initDone); unless ( $self->{twitterKey} and $self->{twitterSecret} ) { $self->abort( 'Bad configuration', 'twitterKey and twitterSecret parameters are required' ); } eval { require Net::Twitter }; $self->abort("Unable to load Net::Twitter: $@") if ($@); $initDone = 1; PE_OK; } ## @apmethod int extractFormInfo() # Authenticate users by Twitter and set user # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; # Build Net::Twitter object $self->{_twitter} = Net::Twitter->new( traits => [qw/API::REST OAuth/], consumer_key => $self->{twitterKey}, consumer_secret => $self->{twitterSecret}, clientname => $self->{twitterAppName} || 'Lemonldap::NG' ); # 1. Request to authenticate unless ( $self->param('twitterback') ) { $self->lmLog( 'Redirection to Twitter', 'debug' ); my $url; # 1.1 Try to get token to dialog with Twitter eval { $url = $self->{_twitter}->get_authorization_url( callback => "$self->{portal}?twitterback=1&url=" . $self->get_url() ); }; # If 401 is returned => application not declared on Twitter if ($@) { if ( $@ =~ /\b401\b/ ) { $self->abort('Twitter application undeclared'); } $self->lmLog( "Net::Twitter error: $@", 'error' ); return PE_ERROR; } # 1.2 Store token key and secret in cookies push @{ $self->{cookie} }, $self->cookie( -name => '_twitTok', -value => $self->{_twitter}->request_token, -expires => '+3m' ), $self->cookie( -name => '_twitSec', -value => $self->{_twitter}->request_token_secret, -expires => '+3m' ); # 1.3 Redirect user to Twitter $self->redirect( -uri => $url ); $self->quit(); } # 2. User is back from Twitter my $request_token = $self->param('oauth_token'); my $verifier = $self->param('oauth_verifier'); unless ( $request_token and $verifier ) { $self->lmLog( 'Twitter OAuth protocol error', 'error' ); return PE_ERROR; } # 2.1 Reconnect to Twitter ( $self->{sessionInfo}->{_access_token}, $self->{sessionInfo}->{_access_token_secret} ) = $self->{_twitter}->request_access_token( token => $self->cookie('_twitTok'), token_secret => $self->cookie('_twitSec'), verifier => $verifier ); # 2.2 Ask for user_timeline : I've not found an other way to access to user # datas ! my $status = eval { $self->{_twitter}->user_timeline( { count => 1 } ) }; # 2.3 Check if user has accepted authentication if ($@) { if ( $@ =~ /\b401\b/ ) { $self->userError('Twitter authentication refused'); return PE_BADCREDENTIALS; } $self->lmLog( "Net::Twitter error: $@", 'error' ); } # 2.4 Set $self->{user} to twitter.com/ $self->{_twitterUser} = $status->[0]->{user}; $self->{user} = 'twitter.com/' . $status->{_twitterUser}->{screen_name}; $self->lmLog( "Good Twitter authentication for $self->{user}", 'debug' ); # Force redirection to avoid displaying OAuth datas $self->{mustRedirect} = 1; # Clean temporaries cookies push @{ $self->{cookie} }, $self->cookie( -name => '_twitTok', -value => 0, -expires => '-3m' ), $self->cookie( -name => '_twitSec', -value => 0, -expires => '-3m' ); PE_OK; } ## @apmethod int setAuthSessionInfo() # Set authenticationLevel and Twitter attributes. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # TODO: set a parameter to choose this foreach (qw(screen_name location lang name url)) { $self->{sessionInfo}->{$_} = $self->{_twitterUser}->{$_}; } $self->{sessionInfo}->{authenticationLevel} = $self->{twitterAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthTwitter - Perl extension for building Lemonldap::NG compatible portals with Twitter authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Twitter', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Twitter authentication mechanism. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/CDC.pm0000644000175000017500000001367112542740733025007 0ustar clementclement## @file # Module for SAML Common Domain Cookie Support ## @class Lemonldap::NG::Portal::CDC # Class for SAML Common Domain Cookie Support package Lemonldap::NG::Portal::CDC; use strict; use warnings; use MIME::Base64; use Lemonldap::NG::Portal::SharedConf; # inherits use Lemonldap::NG::Portal::_SAML; # inherits our $VERSION = '1.0.0'; our @ISA = qw(Lemonldap::NG::Portal::_SAML Lemonldap::NG::Portal::SharedConf); ## @method int process() # Main method to process CDC requests # @return portal error code sub process { my $self = shift; my $cdc_idp = ""; my $cdc_cookie = ""; # Default values my $cdc_name = $self->{samlCommonDomainCookieName} || '_saml_idp'; my $cdc_domain = $self->{samlCommonDomainCookieDomain} || $ENV{'HTTP_HOST'}; $self->lmLog( "[CDC] Cookie name: $cdc_name", 'debug' ); $self->lmLog( "[CDC] Domain name: $cdc_domain", 'debug' ); # Request parameter my $action = $self->param('action') || ""; # What we do my $idp = $self->param('idp'); # IDP ID in write mode # Control URL my $control_url = $self->_sub('controlUrlOrigin'); unless ( $control_url == PE_OK ) { $self->lmLog( "[CDC] Bad URL", 'error' ); return $control_url; } # Get cookie my %cookies = fetch CGI::Cookie; $cdc_cookie = $cookies{$cdc_name} if %cookies; $cdc_cookie &&= $cdc_cookie->value; if ($cdc_cookie) { $self->lmLog( "[CDC] Cookie found with value $cdc_cookie", 'debug' ); } # Write request # Called in an iFrame # Get or build common domain cookie # Append IDP to common domain cookie if ( $action eq 'write' ) { $self->lmLog( "[CDC] Write request detected", 'debug' ); # Check IDP value unless ($idp) { $self->lmLog( "[CDC] No IDP given", 'error' ); return PE_SAML_ERROR; } # Add IDP value $self->lmLog( "[CDC] Will add IDP $idp to IDP list", 'debug' ); my $encoded_idp = encode_base64( $idp, '' ); # Remove IDP value if already present $cdc_cookie =~ s/$encoded_idp(\s+)?//g; # Add a space separator $cdc_cookie .= ( $cdc_cookie ? " " : "" ); $cdc_cookie .= $encoded_idp; $self->lmLog( "[CDC] Build cookie $cdc_name with value $cdc_cookie", 'debug' ); # Build cookie push @{ $self->{cookie} }, $self->cookie( -name => $cdc_name, -value => $cdc_cookie, -domain => $cdc_domain, -path => "/", # See SAML protocol -secure => 1, # See SAML protocol -httponly => $self->{httpOnly}, -expires => $self->{cookieExpiration}, ); } # Read request # Get last IDP from domain cookie # Return on SP with idp as parameter elsif ( $action eq 'read' ) { $self->lmLog( "[CDC] Read request detected", 'debug' ); # Get last IDP from cookie if ($cdc_cookie) { $cdc_idp = decode_base64( ( split /\s+/, $cdc_cookie )[-1] ); $self->lmLog( "[CDC] Get value $cdc_idp", 'debug' ); } else { $self->lmLog( "[CDC] No cookie, set a default value", 'debug' ); $cdc_idp = 'notfound'; } } # Redirect if needed if ( $self->{urldc} ) { # Add CDC IDP in return URL if needed # olStyleUrl can be set to 1 to use & instead of ; $self->{urldc} .= ( $cdc_idp ? ( $self->{urldc} =~ /\?/ ? ( $self->{oldStyleUrl} ? '&' : ';' ) . 'idp=' . $cdc_idp : '?idp=' . $cdc_idp ) : '' ); # Redirect return $self->_subProcess('autoRedirect'); } if ($cdc_cookie) { # Parse cookie to display it if not redirected my @cdc_values = map( decode_base64($_), ( split( /\s+/, $cdc_cookie ) ) ); $self->{cdc_values} = \@cdc_values; } return PE_OK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::CDC - Manage SAML Common Domain Cookie =head1 SYNOPSIS use Lemonldap::NG::Portal::CDC; my $portal = new Lemonldap::NG::Portal::CDC(); $portal->process(); # Write here HTML to manage errors and confirmation messages =head1 DESCRIPTION Lemonldap::NG::Portal::CDC - Manage SAML Common Domain Cookie See L for a complete example of use of Lemonldap::Portal::* libraries. =head1 METHODS =head3 process Main method. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthSSL.pm0000644000175000017500000001327112542740733025675 0ustar clementclement##@file # SSL authentication backend file ##@class # SSL authentication backend class package Lemonldap::NG::Portal::AuthSSL; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::AuthNull; our $VERSION = '1.4.1'; our @ISA = qw(Lemonldap::NG::Portal::AuthNull); ## @apmethod int authInit() # Check if SSL environment variables are set. # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; $self->{SSLVar} ||= 'SSL_CLIENT_S_DN_Email'; PE_OK; } ## @apmethod int extractFormInfo() # Read username in SSL environment variables, or return an error # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; my $user = $self->https ? $ENV{ $self->{SSLVar} } : 0; if ($user) { $self->{user} = $user; return PE_OK; } elsif ( $ENV{SSL_CLIENT_S_DN} ) { $self->_sub( 'userError', "$self->{SSLVar} was not found in user certificate" ); return PE_BADCERTIFICATE; } else { $self->_sub( 'userError', 'No certificate found' ); return PE_CERTIFICATEREQUIRED; } } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Store user certificate login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; $self->{sessionInfo}->{authenticationLevel} = $self->{SSLAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Just test that SSL authentication has been done: job is done in # extractFormInfo() # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; return ( $self->{user} and $ENV{ $self->{SSLVar} } ) ? PE_OK : PE_ERROR; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthSSL - Perl extension for building Lemonldap::NG compatible portals with SSL authentication. =head1 SYNOPSIS With Lemonldap::NG::Portal::SharedConf, set authentication field to "SSL" in configuration database. With Lemonldap::NG::Portal::Simple: use Lemonldap::NG::Portal::Simple; my $portal = new Lemonldap::NG::Portal::Simple( domain => 'example.com', globalStorage => 'Apache::Session::MySQL', globalStorageOptions => { DataSource => 'dbi:mysql:database', UserName => 'db_user', Password => 'db_password', TableName => 'sessions', }, ldapServer => 'ldap.domaine.com', securedCookie => 1, authentication => 'SSL', # SSLVar: field to search in client certificate # default: SSL_CLIENT_S_DN_Email the mail address SSLVar => 'SSL_CLIENT_S_DN_CN', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # If the user enters here, IT MEANS THAT YOUR SSL PARAMETERS ARE BAD print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } Modify your httpd.conf: SSLVerifyClient optional # or 'require' if login/password are disabled SSLOptions +StdEnvVars =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Apache SSLv3 mechanism: we've just to verify that C<$ENV{SSL_CLIENT_S_DN_Email}> exists. So remenber to export SSL variables to CGI. If SSL is used, authenticationLevel is set to 5. You can use this parameter in L rules to force users to use certificates in some applications: virtualHost1 => { 'default' => '$authenticationLevel > 5 and $uid = "jeff"', }, Note that you can use Apache SSL environment variables in "exported variables". See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2006, 2007, 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012, 2013 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2006, 2009, 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBDemo.pm0000644000175000017500000000331612542740733026342 0ustar clementclement## @file # Demo userDB mechanism ## @class # Demo userDB mechanism class package Lemonldap::NG::Portal::UserDBDemo; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Check AuthDemo use # @return Lemonldap::NG::Portal constant sub userDBInit { my $self = shift; if ( $self->get_module('auth') =~ /^Demo/ ) { # Call authInit if demo accounts not found $self->authInit() unless defined $self->{_demoAccounts}; return PE_OK; } else { $self->lmLog( "Use UserDBDemo only with AuthDemo", 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int getUser() # Check known accounts # @return Lemonldap::NG::Portal constant sub getUser { my $self = shift; # Search by login if ( $self->{user} ) { return PE_OK if ( defined $self->{_demoAccounts}->{ $self->{user} } ); } # Search by mail if ( $self->{mail} ) { foreach my $user ( keys %{ $self->{_demoAccounts} } ) { if ( $self->{_demoAccounts}->{$user}->{mail} eq $self->{mail} ) { $self->{user} = $user; return PE_OK; } } } PE_USERNOTFOUND; } ## @apmethod int setSessionInfo() # Get sample data # @return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{demoExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { $self->{sessionInfo}->{$k} = $self->{_demoAccounts}->{ $self->{user} }->{$v} || ""; } PE_OK; } ## @apmethod int setGroups() # Do nothing # @return Lemonldap::NG::Portal constant sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthGoogleMigration.pm0000644000175000017500000001775212542740733030332 0ustar clementclement##@file # Google authentication backend file - Migration to OpenID Connect ##@class # Google authentication backend class. package Lemonldap::NG::Portal::AuthGoogleMigration; #== Disclaimer # This module provides a quick and unsafe solution to # migrate from old Google module (OpenID 2.0) # It will be replaced by AuthOpenIDConnect in next # major version #== use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_Browser; use URI::Escape; use JSON; use MIME::Base64 qw/encode_base64url encode_base64 decode_base64url decode_base64/; our @ISA = (qw(Lemonldap::NG::Portal::_Browser)); our $VERSION = '1.4.4'; ## @apmethod int authInit() # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; unless ( $self->{googleClientId} and $self->{googleClientSecret} ) { $self->lmLog( "You need to register this application and configure client ID and client secret", 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int extractFormInfo() # Read username return by Google authentication system. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; my $response_type = "code"; my $scope = "openid email"; my $client_id = $self->{googleClientId}; my $client_secret = $self->{googleClientSecret}; my $redirect_uri = $self->{portal} . "?googlecb=1"; my $state = encode_base64url( $self->{urldc} ); # Ask for profile if googleExportedVars requested my %vars = ( %{ $self->{exportedVars} }, %{ $self->{googleExportedVars} } ); if (%vars) { $scope .= " profile"; } my $callback = $self->param("googlecb"); if ($callback) { my $code = $self->param("code"); my $error = $self->param("error"); if ($error) { $self->lmLog( "Error returned by Google: $error", 'error' ); return PE_ERROR; } my %form; $form{"code"} = $code; $form{"redirect_uri"} = $redirect_uri; $form{"grant_type"} = "authorization_code"; $form{"client_id"} = $client_id; $form{"client_secret"} = $client_secret; my $response = $self->ua->post( "https://www.googleapis.com/oauth2/v3/token", \%form, "Content-Type" => 'application/x-www-form-urlencoded' ); if ( $response->is_error ) { $self->lmLog( "Error returned by Google: " . $response->message, 'error' ); return PE_ERROR; } my $content = $response->decoded_content; my $json; eval { $json = decode_json $content; }; my $access_token = $json->{access_token}; my $id_token = $json->{id_token}; my ( $id_token_header, $id_token_payload, $id_token_signature ) = split( /\./, $id_token ); my $id_token_payload_raw = decode_base64url($id_token_payload); my $id_token_payload_hash; eval { $id_token_payload_hash = decode_json $id_token_payload_raw; }; $self->{user} = $id_token_payload_hash->{email}; if ( $self->param("state") ) { $self->{urldc} = decode_base64url( $self->param("state") ); } if (%vars) { # Request UserInfo my $ui_response = $self->ua->get( "https://www.googleapis.com/oauth2/v3/userinfo", "Authorization" => "Bearer $access_token" ); my $ui_content = $ui_response->decoded_content; my $ui_json; eval { $ui_json = decode_json($ui_content); }; # Convert OpenID attribute name into OIDC UserInfo field my $convertAttr = { "firstname" => "given_name", "lastname" => "family_name", "language" => "locale", "email" => "email", }; # Store attributes in session while ( my ( $k, $v ) = each %vars ) { my $attr = $k; $attr =~ s/^!//; my $oidc_attr = $convertAttr->{$v}; $self->{sessionInfo}->{$attr} = $ui_json->{$oidc_attr}; } } return PE_OK; } my $redirect_url = "https://accounts.google.com/o/oauth2/auth" . "?response_type=" . uri_escape($response_type) . "&client_id=" . uri_escape($client_id) . "&scope=" . uri_escape($scope) . "&redirect_uri=" . uri_escape($redirect_uri) . "&state=" . uri_escape($state); $self->{urldc} = $redirect_url; $self->lmLog( "Redirect user to $redirect_url", 'debug' ); $self->_sub('autoRedirect'); } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{'_user'} = $self->{user}; $self->{sessionInfo}->{authenticationLevel} = $self->{googleAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthGoogle - Perl extension for building Lemonldap::NG compatible portals with Google authentication (migration to OpenID Connect). =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'GoogleMigration', googleClientId => '...', googleClientSecret => '...', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use Google authentication mechanism. See L for usage and other methods. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2013 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2013 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm0000644000175000017500000027333012604503464025644 0ustar clementclement##@file # Base package for Lemonldap::NG portal ##@class Lemonldap::NG::Portal::Simple # Base class for Lemonldap::NG portal package Lemonldap::NG::Portal::Simple; use strict; use warnings; use Exporter 'import'; use warnings; use MIME::Base64; use Lemonldap::NG::Common::CGI; use CGI::Cookie; use POSIX qw(strftime); use Lemonldap::NG::Portal::_i18n; #inherits use Lemonldap::NG::Common::Captcha; use Lemonldap::NG::Common::Session; use Lemonldap::NG::Common::Apache::Session ; #link protected session Apache::Session object use Lemonldap::NG::Common::Safe; #link protected safe Safe object use Lemonldap::NG::Common::Safelib; use Digest::MD5; # Special comments for doxygen #inherits Lemonldap::NG::Portal::_SOAP #inherits Lemonldap::NG::Portal::AuthApache; #inherits Lemonldap::NG::Portal::AuthAD; #inherits Lemonldap::NG::Portal::AuthCAS; #inherits Lemonldap::NG::Portal::AuthChoice; #inherits Lemonldap::NG::Portal::AuthDBI; #inherits Lemonldap::NG::Portal::AuthFacebook; #inherits Lemonldap::NG::Portal::AuthGoogle; #inherits Lemonldap::NG::Portal::AuthLDAP; #inherits Lemonldap::NG::Portal::AuthMulti; #inherits Lemonldap::NG::Portal::AuthNull; #inherits Lemonldap::NG::Portal::AuthOpenID; #inherits Lemonldap::NG::Portal::AuthProxy; #inherits Lemonldap::NG::Portal::AuthRadius; #inherits Lemonldap::NG::Portal::AuthRemote; #inherits Lemonldap::NG::Portal::AuthSAML; #inherits Lemonldap::NG::Portal::AuthSSL; #inherits Lemonldap::NG::Portal::AuthTwitter; #inherits Lemonldap::NG::Portal::Display; #inherits Lemonldap::NG::Portal::IssuerDBCAS #inherits Lemonldap::NG::Portal::IssuerDBNull #inherits Lemonldap::NG::Portal::IssuerDBOpenID #inherits Lemonldap::NG::Portal::IssuerDBSAML #inherits Lemonldap::NG::Portal::Menu #link Lemonldap::NG::Common::Notification protected notification #inherits Lemonldap::NG::Portal::PasswordDBChoice; #inherits Lemonldap::NG::Portal::PasswordDBDBI; #inherits Lemonldap::NG::Portal::PasswordDBLDAP; #inherits Lemonldap::NG::Portal::PasswordDBNull; #inherits Lemonldap::NG::Portal::UserDBAD; #inherits Lemonldap::NG::Portal::UserDBChoice; #inherits Lemonldap::NG::Portal::UserDBDBI; #inherits Lemonldap::NG::Portal::UserDBFacebook; #inherits Lemonldap::NG::Portal::UserDBGoogle; #inherits Lemonldap::NG::Portal::UserDBLDAP; #inherits Lemonldap::NG::Portal::UserDBMulti; #inherits Lemonldap::NG::Portal::UserDBNull; #inherits Lemonldap::NG::Portal::UserDBOpenID; #inherits Lemonldap::NG::Portal::UserDBProxy; #inherits Lemonldap::NG::Portal::UserDBRemote; #inherits Lemonldap::NG::Portal::UserDBSAML; #inherits Lemonldap::NG::Portal::PasswordDBDBI #inherits Lemonldap::NG::Portal::PasswordDBLDAP #inherits Apache::Session #link Lemonldap::NG::Common::Apache::Session::SOAP protected globalStorage our $VERSION = '1.4.6'; use base qw(Lemonldap::NG::Common::CGI Exporter); our @ISA; # Constants use constant { # Portal errors # Developers warning, do not use PE_INFO, it's reserved to autoRedirect. # If you want to send an information, use $self->info('text'). PE_IMG_NOK => -5, PE_IMG_OK => -4, PE_INFO => -3, PE_REDIRECT => -2, PE_DONE => -1, PE_OK => 0, PE_SESSIONEXPIRED => 1, PE_FORMEMPTY => 2, PE_WRONGMANAGERACCOUNT => 3, PE_USERNOTFOUND => 4, PE_BADCREDENTIALS => 5, PE_LDAPCONNECTFAILED => 6, PE_LDAPERROR => 7, PE_APACHESESSIONERROR => 8, PE_FIRSTACCESS => 9, PE_BADCERTIFICATE => 10, PE_PP_ACCOUNT_LOCKED => 21, PE_PP_PASSWORD_EXPIRED => 22, PE_CERTIFICATEREQUIRED => 23, PE_ERROR => 24, PE_PP_CHANGE_AFTER_RESET => 25, PE_PP_PASSWORD_MOD_NOT_ALLOWED => 26, PE_PP_MUST_SUPPLY_OLD_PASSWORD => 27, PE_PP_INSUFFICIENT_PASSWORD_QUALITY => 28, PE_PP_PASSWORD_TOO_SHORT => 29, PE_PP_PASSWORD_TOO_YOUNG => 30, PE_PP_PASSWORD_IN_HISTORY => 31, PE_PP_GRACE => 32, PE_PP_EXP_WARNING => 33, PE_PASSWORD_MISMATCH => 34, PE_PASSWORD_OK => 35, PE_NOTIFICATION => 36, PE_BADURL => 37, PE_NOSCHEME => 38, PE_BADOLDPASSWORD => 39, PE_MALFORMEDUSER => 40, PE_SESSIONNOTGRANTED => 41, PE_CONFIRM => 42, PE_MAILFORMEMPTY => 43, PE_BADMAILTOKEN => 44, PE_MAILERROR => 45, PE_MAILOK => 46, PE_LOGOUT_OK => 47, PE_SAML_ERROR => 48, PE_SAML_LOAD_SERVICE_ERROR => 49, PE_SAML_LOAD_IDP_ERROR => 50, PE_SAML_SSO_ERROR => 51, PE_SAML_UNKNOWN_ENTITY => 52, PE_SAML_DESTINATION_ERROR => 53, PE_SAML_CONDITIONS_ERROR => 54, PE_SAML_IDPSSOINITIATED_NOTALLOWED => 55, PE_SAML_SLO_ERROR => 56, PE_SAML_SIGNATURE_ERROR => 57, PE_SAML_ART_ERROR => 58, PE_SAML_SESSION_ERROR => 59, PE_SAML_LOAD_SP_ERROR => 60, PE_SAML_ATTR_ERROR => 61, PE_OPENID_EMPTY => 62, PE_OPENID_BADID => 63, PE_MISSINGREQATTR => 64, PE_BADPARTNER => 65, PE_MAILCONFIRMATION_ALREADY_SENT => 66, PE_PASSWORDFORMEMPTY => 67, PE_CAS_SERVICE_NOT_ALLOWED => 68, PE_MAILFIRSTACCESS => 69, PE_MAILNOTFOUND => 70, PE_PASSWORDFIRSTACCESS => 71, PE_MAILCONFIRMOK => 72, PE_RADIUSCONNECTFAILED => 73, PE_MUST_SUPPLY_OLD_PASSWORD => 74, PE_FORBIDDENIP => 75, PE_CAPTCHAERROR => 76, PE_CAPTCHAEMPTY => 77, PE_REGISTERFIRSTACCESS => 78, PE_REGISTERFORMEMPTY => 79, PE_REGISTERALREADYEXISTS => 80, # Portal messages PM_USER => 0, PM_DATE => 1, PM_IP => 2, PM_SESSIONS_DELETED => 3, PM_OTHER_SESSIONS => 4, PM_REMOVE_OTHER_SESSIONS => 5, PM_PP_GRACE => 6, PM_PP_EXP_WARNING => 7, PM_SAML_IDPSELECT => 8, PM_SAML_IDPCHOOSEN => 9, PM_REMEMBERCHOICE => 10, PM_SAML_SPLOGOUT => 11, PM_REDIRECTION => 12, PM_BACKTOSP => 13, PM_BACKTOCASURL => 14, PM_LOGOUT => 15, PM_OPENID_EXCHANGE => 16, PM_CDC_WRITER => 17, PM_OPENID_RPNS => 18, # OpenID "requested parameter is not set" PM_OPENID_PA => 19, # "OpenID policy available at" PM_OPENID_AP => 20, # OpenID "Asked parameter" PM_ERROR_MSG => 21, PM_LAST_LOGINS => 22, PM_LAST_FAILED_LOGINS => 23, }; # EXPORTER PARAMETERS our @EXPORT = qw( PE_IMG_NOK PE_IMG_OK PE_INFO PE_REDIRECT PE_DONE PE_OK PE_SESSIONEXPIRED PE_FORMEMPTY PE_WRONGMANAGERACCOUNT PE_USERNOTFOUND PE_BADCREDENTIALS PE_LDAPCONNECTFAILED PE_LDAPERROR PE_APACHESESSIONERROR PE_FIRSTACCESS PE_BADCERTIFICATE PE_PP_ACCOUNT_LOCKED PE_PP_PASSWORD_EXPIRED PE_CERTIFICATEREQUIRED PE_ERROR PE_PP_CHANGE_AFTER_RESET PE_PP_PASSWORD_MOD_NOT_ALLOWED PE_PP_MUST_SUPPLY_OLD_PASSWORD PE_PP_INSUFFICIENT_PASSWORD_QUALITY PE_PP_PASSWORD_TOO_SHORT PE_PP_PASSWORD_TOO_YOUNG PE_PP_PASSWORD_IN_HISTORY PE_PP_GRACE PE_PP_EXP_WARNING PE_PASSWORD_MISMATCH PE_PASSWORD_OK PE_NOTIFICATION PE_BADURL PE_NOSCHEME PE_BADOLDPASSWORD PE_MALFORMEDUSER PE_SESSIONNOTGRANTED PE_CONFIRM PE_MAILFORMEMPTY PE_BADMAILTOKEN PE_MAILERROR PE_MAILOK PE_LOGOUT_OK PE_SAML_ERROR PE_SAML_LOAD_SERVICE_ERROR PE_SAML_LOAD_IDP_ERROR PE_SAML_SSO_ERROR PE_SAML_UNKNOWN_ENTITY PE_SAML_DESTINATION_ERROR PE_SAML_CONDITIONS_ERROR PE_SAML_IDPSSOINITIATED_NOTALLOWED PE_SAML_SLO_ERROR PE_SAML_SIGNATURE_ERROR PE_SAML_ART_ERROR PE_SAML_SESSION_ERROR PE_SAML_LOAD_SP_ERROR PE_SAML_ATTR_ERROR PE_OPENID_EMPTY PE_OPENID_BADID PE_MISSINGREQATTR PE_BADPARTNER PE_MAILCONFIRMATION_ALREADY_SENT PE_PASSWORDFORMEMPTY PE_CAS_SERVICE_NOT_ALLOWED PE_MAILFIRSTACCESS PE_MAILNOTFOUND PE_PASSWORDFIRSTACCESS PE_MAILCONFIRMOK PE_MUST_SUPPLY_OLD_PASSWORD PE_FORBIDDENIP PE_CAPTCHAERROR PE_CAPTCHAEMPTY PE_REGISTERFIRSTACCESS PE_REGISTERFORMEMPTY PE_REGISTERALREADYEXISTS PM_USER PM_DATE PM_IP PM_SESSIONS_DELETED PM_OTHER_SESSIONS PM_REMOVE_OTHER_SESSIONS PM_PP_GRACE PM_PP_EXP_WARNING PM_SAML_IDPSELECT PM_SAML_IDPCHOOSEN PM_REMEMBERCHOICE PM_SAML_SPLOGOUT PM_REDIRECTION PM_BACKTOSP PM_BACKTOCASURL PM_LOGOUT PM_OPENID_EXCHANGE PM_CDC_WRITER PM_OPENID_RPNS PM_OPENID_PA PM_OPENID_AP PM_ERROR_MSG PM_LAST_LOGINS PM_LAST_FAILED_LOGINS ); our %EXPORT_TAGS = ( 'all' => [ @EXPORT, 'import' ], ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); # Share secure jail between threads our $safe; BEGIN { eval { require threads::shared; threads::shared::share($safe); }; } ##@cmethod Lemonldap::NG::Portal::Simple new(hashRef args) # Class constructor. #@param args hash reference #@return Lemonldap::NG::Portal::Simple object sub new { @ISA = qw(Lemonldap::NG::Common::CGI Exporter); binmode( STDOUT, ":utf8" ); my $class = shift; return $class if ( ref($class) ); my $self = $class->SUPER::new() or return undef; # Reinit _url $self->{_url} = ''; # Get global configuration $self->getConf(@_) or $self->abort( "Configuration error", "Unable to get configuration: $Lemonldap::NG::Common::Conf::msg" ); # Test mandatory elements # 1. Sessions backend $self->abort( "Configuration error", "You've to indicate a an Apache::Session storage module !" ) unless ( $self->{globalStorage} ); # Use global storage for all backends by default # Persistent $self->{persistentStorage} ||= $self->{globalStorage}; if ( !$self->{persistentStorageOptions} or !%{ $self->{persistentStorageOptions} } ) { $self->{persistentStorageOptions} = $self->{globalStorageOptions}; } # SAML $self->{samlStorage} ||= $self->{globalStorage}; if ( !$self->{samlStorageOptions} or !%{ $self->{samlStorageOptions} } ) { $self->{samlStorageOptions} = $self->{globalStorageOptions}; } # CAS $self->{casStorage} ||= $self->{globalStorage}; if ( !$self->{casStorageOptions} or !%{ $self->{casStorageOptions} } ) { $self->{casStorageOptions} = $self->{globalStorageOptions}; } # Captcha $self->{captchaStorage} ||= $self->{globalStorage}; if ( !$self->{captchaStorageOptions} or !%{ $self->{captchaStorageOptions} } ) { $self->{captchaStorageOptions} = $self->{globalStorageOptions}; } # 2. Domain $self->abort( "Configuration error", "You've to indicate a domain for cookies" ) unless ( $self->{domain} ); $self->{domain} =~ s/^([^\.])/.$1/; # Load Display and Menu functions $self->loadModule('Lemonldap::NG::Portal::Menu'); $self->loadModule('Lemonldap::NG::Portal::Display'); # Rules to allow redirection $self->{mustRedirect} = defined $ENV{REQUEST_METHOD} ? ( $ENV{REQUEST_METHOD} eq "POST" and not $self->param('newpassword') ) : $self->param('logout') ? 1 : 0; # Push authentication/userDB/passwordDB modules in @ISA foreach my $type (qw(authentication userDB passwordDB registerDB)) { my $module_name = 'Lemonldap::NG::Portal::'; my $db_type = $type; my $db_name = $self->{$db_type}; # Adapt module type to real module name $db_type =~ s/authentication/Auth/; $db_type =~ s/userDB/UserDB/; $db_type =~ s/passwordDB/PasswordDB/; $db_type =~ s/registerDB/RegisterDB/; # Full module name $module_name .= $db_type . $db_name; # Remove white spaces $module_name =~ s/\s.*$//; # Try to load module $self->abort( "Configuration error", "Unable to load $module_name" ) unless $self->loadModule($module_name); # $self->{authentication} and $self->{userDB} can contains arguments # (key1 = scalar_value; key2 = ...) unless ( $db_name =~ /^Multi/ ) { $db_name =~ s/^\w+\s*//; my %h = split( /\s*[=;]\s*/, $db_name ) if ($db_name); %$self = ( %h, %$self ); } } # Check issuerDB path to load the correct issuerDB module foreach my $issuerDBtype (qw(SAML OpenID CAS)) { my $module_name = 'Lemonldap::NG::Portal::IssuerDB' . $issuerDBtype; $self->lmLog( "[IssuerDB activation] Try issuerDB module $issuerDBtype", 'debug' ); # Check activation flag my $activation = $self->{ "issuerDB" . $issuerDBtype . "Activation" } ||= "0"; unless ($activation) { $self->lmLog( "[IssuerDB activation] Activation flag set to off, trying next", 'debug' ); next; } # Check the path my $path = $self->{ "issuerDB" . $issuerDBtype . "Path" }; if ( defined $path ) { $self->lmLog( "[IssuerDB activation] Found path $path", 'debug' ); # Get current path my $url_path = $self->url( -absolute => 1 ); $url_path =~ s#^//#/#; $self->lmLog( "[IssuerDB activation] Path of current request is $url_path", 'debug' ); # Match regular expression if ( $url_path =~ m#$path# ) { $self->abort( "Configuration error", "Unable to load $module_name" ) unless $self->loadModule($module_name); # Remember loaded module $self->{_activeIssuerDB} = $issuerDBtype; $self->lmLog( "[IssuerDB activation] IssuerDB module $issuerDBtype loaded", 'debug' ); last; } else { $self->lmLog( "[IssuerDB activation] Path do not match, trying next", 'debug' ); next; } } else { $self->lmLog( "[IssuerDB activation] No path defined", 'debug' ); next; } } # Load default issuerDB module if none was choosed unless ( $self->{_activeIssuerDB} ) { # Manage old configuration format my $db_type = $self->{'issuerDB'} || 'Null'; my $module_name = 'Lemonldap::NG::Portal::IssuerDB' . $db_type; $self->abort( "Configuration error", "Unable to load $module_name" ) unless $self->loadModule($module_name); # Remember loaded module $self->{_activeIssuerDB} = $db_type; $self->lmLog( "[IssuerDB activation] IssuerDB module $db_type loaded", 'debug' ); } # Notifications if ( $self->{notification} ) { require Lemonldap::NG::Common::Notification; my $tmp; # Use configuration options if ( $self->{notificationStorage} ) { $tmp->{type} = $self->{notificationStorage}; foreach ( keys %{ $self->{notificationStorageOptions} } ) { $tmp->{$_} = $self->{notificationStorageOptions}->{$_}; } } # Else use the configuration backend else { (%$tmp) = ( %{ $self->{lmConf} } ); $self->abort( "notificationStorage not defined", "This parameter is required to use notification system" ) unless ( ref($tmp) ); # Get the type $tmp->{type} =~ s/.*:://; $tmp->{type} =~ s/(CDBI|RDBI)/DBI/; # CDBI/RDBI are DBI # If type not File, DBI or LDAP, abort $self->abort("Only File, DBI or LDAP supported for Notifications") unless $tmp->{type} =~ /^(File|DBI|LDAP)$/; # Force table name $tmp->{table} = 'notifications'; } $tmp->{p} = $self; $self->{notifObject} = Lemonldap::NG::Common::Notification->new($tmp); $self->abort($Lemonldap::NG::Common::Notification::msg) unless ( $self->{notifObject} ); } # SOAP if ( $self->{Soap} or $self->{soap} ) { $self->loadModule('Lemonldap::NG::Portal::_SOAP'); if ( $self->{notification} and $ENV{PATH_INFO} ) { $self->{CustomSOAPServices} ||= {}; $self->{CustomSOAPServices}->{'/notification'} = { f => 'newNotification deleteNotification', o => $self->{notifObject} }; } $self->startSoapServices(); } # Trusted domains $self->{trustedDomains} ||= ""; $self->{trustedDomains} = "*" if ( $self->{trustedDomains} =~ /(^|\s)\*(\s|$)/ ); if ( $self->{trustedDomains} and $self->{trustedDomains} ne "*" ) { $self->{trustedDomains} =~ s#(^|\s+)\.#${1}[^/]+.#g; $self->{trustedDomains} = '(' . join( '|', split( /\s+/, $self->{trustedDomains} ) ) . ')'; $self->{trustedDomains} =~ s/\./\\./g; } return $self; } ##@method boolean loadModule(string module, boolean ignoreError) # Load a module into portal namespace # @param module module name # @param ignoreError set to 1 if error should not appear in logs # @return boolean sub loadModule { my ( $self, $module, $ignoreError ) = splice @_; return 1 unless $module; # Load module test eval "require $module"; if ($@) { $self->lmLog( "$module load error: $@", 'error' ) unless $ignoreError; return 0; } # Push module in @ISA push @ISA, $module; $self->lmLog( "Module $module loaded", 'debug' ); return 1; } ##@method protected boolean getConf(hashRef args) # Copy all parameters in caller object. #@param args hash-ref #@return True sub getConf { my ($self) = shift; my %args; if ( ref( $_[0] ) ) { %args = %{ $_[0] }; } else { %args = @_; } %$self = ( %$self, %args ); 1; } ## @method protected void setHiddenFormValue(string fieldname, string value, string prefix, boolean base64) # Add element into $self->{portalHiddenFormValues}, those values could be # used to hide values into HTML form. # @param fieldname The field name which will contain the correponding value # @param value The associated value # @param prefix Prefix of the field key # @param base64 Encode value in base64 # @return nothing sub setHiddenFormValue { my ( $self, $key, $val, $prefix, $base64 ) = splice @_; # Default values $prefix = "lmhidden_" unless defined $prefix; $base64 = 1 unless defined $base64; # Store value if ($val) { $key = $prefix . $key; $val = encode_base64($val) if $base64; $self->{portalHiddenFormValues}->{$key} = $val; } } ## @method public void getHiddenFormValue(string fieldname, string prefix, boolean base64) # Get value into $self->{portalHiddenFormValues}. # @param fieldname The existing field name which contains a value # @param prefix Prefix of the field key # @param base64 Decode value from base64 # @return string The associated value sub getHiddenFormValue { my ( $self, $key, $prefix, $base64 ) = splice @_; # Default values $prefix = "lmhidden_" unless defined $prefix; $base64 = 1 unless defined $base64; $key = $prefix . $key; # Get value if ( my $val = $self->param($key) ) { $val = decode_base64($val) if $base64; return $val; } # No value found return undef; } ## @method protected void clearHiddenFormValue(arrayref keys) # Clear values form stored hidden fields # Delete all keys if no keys provided # @param keys Array reference of keys # @return nothing sub clearHiddenFormValue { my ( $self, $keys ) = splice @_; unless ( defined $keys ) { delete $self->{portalHiddenFormValues}; } else { delete $self->{portalHiddenFormValues}->{$_} foreach (@$keys); } return; } ##@method public string buildHiddenForm() # Return an HTML representation of hidden values. # @return HTML code sub buildHiddenForm { my $self = shift; my @keys = keys %{ $self->{portalHiddenFormValues} }; my $val = ''; foreach (@keys) { # Check XSS attacks next if $self->checkXSSAttack( $_, $self->{portalHiddenFormValues}->{$_} ); # Build hidden input HTML code $val .= qq{'; } return $val; } ## @method void initCaptcha(void) # init captcha module and generate captcha # @return nothing sub initCaptcha { my $self = shift; # Create new captcha my $captcha = Lemonldap::NG::Common::Captcha->new( { storageModule => $self->{captchaStorage}, storageModuleOptions => $self->{captchaStorageOptions}, size => $self->{captcha_size}, } ); $self->{captcha_secret} = $captcha->code; $self->{captcha_code} = $captcha->md5; $self->{captcha_img} = $self->{portal} . "?displayCaptcha=" . $captcha->md5; $self->lmLog( "Captcha code generated: " . $self->{captcha_code}, 'debug' ); return; } ## @method int checkCaptcha(code, ccode) # Check captcha auth # @param code that user enter in the form # @param captcha code generated by Authen::Captcha # @return a constant sub checkCaptcha { my ( $self, $code, $ccode ) = splice @_; # Get captcha object my $captcha = Lemonldap::NG::Common::Captcha->new( { storageModule => $self->{captchaStorage}, storageModuleOptions => $self->{captchaStorageOptions}, md5 => $ccode, size => $self->{captcha_size}, } ); # Check code if ( $captcha && $captcha->code ) { if ( $code eq $captcha->code ) { $self->lmLog( "Code $code match captcha $ccode", 'debug' ); return 1; } return -2; } return 0; } ## @method int removeCaptcha(ccode) # Remove captcha session # @param captcha code generated by Authen::Captcha # @return a constant sub removeCaptcha { my ( $self, $ccode ) = splice @_; # Get captcha object my $captcha = Lemonldap::NG::Common::Captcha->new( { storageModule => $self->{captchaStorage}, storageModuleOptions => $self->{captchaStorageOptions}, md5 => $ccode, size => $self->{captcha_size}, } ); # Remove captcha session (will not be used anymore) if ( $captcha->removeSession ) { $self->lmLog( "Captcha session $ccode removed", 'debug' ); return 0; } else { $self->lmLog( "Unable to remove captcha session $ccode", 'warn' ); return 1; } } ## @method boolean isTrustedUrl(string url) # Check if an URL's domain name is declared in LL::NG config or is declared as trusted domain # @param url Parameter url # @param value Parameter value # @return 1 if url can be trusted, 0 else sub isTrustedUrl { my ( $self, $url ) = splice @_; return $url =~ m#^https?://$self->{reVHosts}(:\d+)?/#o || $self->{trustedDomains} eq "*" || $self->{trustedDomains} && $url =~ m#^https?://$self->{trustedDomains}(:\d+)?/#o; } ## @method boolean checkXSSAttack(string name, string value) # Check value to detect XSS attack # @param name Parameter name # @param value Parameter value # @return 1 if attack detected, 0 else sub checkXSSAttack { my ( $self, $name, $value ) = splice @_; # Empty values are not bad return 0 unless $value; # Test value if ( $value =~ m/(?:\0|<|'|"|`|\%(?:00|25|3C|22|27|2C))/ ) { $self->lmLog( "XSS attack detected (param: $name | value: $value)", "warn" ); return $self->{checkXSS}; } return 0; } =begin WSDL _IN lang $string Language _IN code $int Error code _RETURN $string Error string =end WSDL =cut ##@method string msg(int code) # calls Portal/_i18n.pm to display message in the client's language. #@param $code message code #@return message sub msg { my $self = shift; my $code = shift; return &Lemonldap::NG::Portal::_i18n::msg( $code, $self->{lang} ); } ##@method string error(int code) # calls Portal/_i18n.pm to display error in the client's language. #@param $code optional error code #@return error message sub error { my $self = shift; my $code = shift || $self->{error}; if ( my $lang = shift ) { # only for SOAP error requests $self->{lang} = $self->extract_lang($lang); } my $msg; # Check for customized message foreach ( @{ $self->{lang} } ) { if ( $self->{ "error_" . $_ . "_" . $code } ) { $msg = $self->{ "error_" . $_ . "_" . $code }; last; } } $msg ||= $self->{ "error_" . $code }; # Use customized message or built-in message if ( defined $msg ) { # Manage UTF-8 utf8::decode($msg); $self->lmLog( "Use customized message $msg for error $code", 'debug' ); } else { $msg = &Lemonldap::NG::Portal::_i18n::error( $code, $self->{lang} ); } # Return message # Manage SOAP return $msg; } ##@method string error_type(int code) # error_type tells if error is positive, warning or negative # @param $code Lemonldap::NG error code # @return "positive", "warning" or "negative" sub error_type { my $self = shift; my $code = shift || $self->{error}; # Positive errors return "positive" if ( scalar( grep { /^$code$/ } ( PE_REDIRECT, PE_DONE, PE_OK, PE_PASSWORD_OK, PE_MAILOK, PE_LOGOUT_OK, PE_MAILFIRSTACCESS, PE_PASSWORDFIRSTACCESS, PE_MAILCONFIRMOK, PE_REGISTERFIRSTACCESS, ) ) ); # Warning errors return "warning" if ( scalar( grep { /^$code$/ } ( PE_INFO, PE_SESSIONEXPIRED, PE_FORMEMPTY, PE_FIRSTACCESS, PE_PP_GRACE, PE_PP_EXP_WARNING, PE_NOTIFICATION, PE_BADURL, PE_CONFIRM, PE_MAILFORMEMPTY, PE_MAILCONFIRMATION_ALREADY_SENT, PE_PASSWORDFORMEMPTY, PE_CAPTCHAEMPTY, PE_REGISTERFORMEMPTY, ) ) ); # Negative errors (default) return "negative"; } ##@method void header() # Overload CGI::header() to add Lemonldap::NG cookie. sub header { my $self = shift; unshift @_, '-type' unless ($#_); if ( $self->{cookie} ) { $self->SUPER::header( @_, -cookie => $self->{cookie} ); } else { $self->SUPER::header(@_); } } ##@method void redirect() # Overload CGI::redirect() to add Lemonldap::NG cookie. sub redirect { my $self = shift; if ( $self->{cookie} ) { $self->SUPER::redirect( @_, -cookie => $self->{cookie} ); } else { $self->SUPER::redirect(@_); } } ## @method protected hashref getApacheSession(string id, boolean noInfo) # Try to recover the session corresponding to id and return session datas. # If $id is set to undef, return a new session. # @param id session reference # @param noInfo do not set Apache REMOTE_USER # return Lemonldap::NG::Common::Session object sub getApacheSession { my ( $self, $id, $noInfo ) = @_; my $apacheSession = Lemonldap::NG::Common::Session->new( { storageModule => $self->{globalStorage}, storageModuleOptions => $self->{globalStorageOptions}, cacheModule => $self->{localSessionStorage}, cacheModuleOptions => $self->{localSessionStorageOptions}, id => $id, kind => "SSO", } ); if ( $apacheSession->error ) { $self->lmLog( $apacheSession->error, 'debug' ); return; } unless ($noInfo) { $self->setApacheUser( $apacheSession->data->{ $self->{whatToTrace} } ) if ($id); $self->{id} = $apacheSession->id; } return $apacheSession; } ## @method protected hashref getPersistentSession(string id) # Try to recover the persitent session corresponding to id and return session datas. # If $id is set to undef, return a new session. # @param id session reference # return Lemonldap::NG::Common::Session object sub getPersistentSession { my ( $self, $id ) = splice @_; my $persistentSession = Lemonldap::NG::Common::Session->new( { storageModule => $self->{persistentStorage}, storageModuleOptions => $self->{persistentStorageOptions}, cacheModule => $self->{localSessionStorage}, cacheModuleOptions => $self->{localSessionStorageOptions}, id => $id, force => 1, kind => "Persistent", } ); if ( $persistentSession->error ) { $self->lmLog( $persistentSession->error, 'debug' ); } return $persistentSession; } ## @method protected string _md5hash(string s) # Return md5(s) # @param $s String to hash # @return hashed value sub _md5hash { my ( $self, $s ) = splice @_; return substr( Digest::MD5::md5_hex($s), 0, 32 ); } ## @method void updatePersistentSession(hashRef infos, string uid, string id) # Update persistent session. # Call updateSession() and store %$infos in a persistent session. # Note that if the session does not exists, it will be created. # @param infos hash reference of information to update # @param uid optional Unhashed persistent session ID # @param id optional SSO session ID # @return nothing sub updatePersistentSession { my ( $self, $infos, $uid, $id ) = splice @_; # Return if no infos to update return () unless ( ref $infos eq 'HASH' and %$infos ); # Update current session $self->updateSession( $infos, $id ); $uid ||= $self->{sessionInfo}->{ $self->{whatToTrace} }; return () unless ($uid); my $persistentSession = $self->getPersistentSession( $self->_md5hash($uid) ); $persistentSession->update($infos); if ( $persistentSession->error ) { $self->lmLog( "Cannot update persistent session " . $self->_md5hash($uid), 'error' ); $self->lmLog( $persistentSession->error, 'error' ); } } ## @method void updateSession(hashRef infos, string id) # Update session stored. # If no id is given, try to get it from cookie. # If the session is available, update datas with $info. # Note that outdated session data may remain some time on # server local cache, if there are several LL::NG servers. # @param infos hash reference of information to update # @param id Session ID # @return nothing sub updateSession { my ( $self, $infos, $id ) = splice @_; # Return if no infos to update return () unless ( ref $infos eq 'HASH' and %$infos ); # Recover session ID unless given $id ||= $self->{id}; unless ($id) { my %cookies = fetch CGI::Cookie; $id ||= $cookies{ $self->{cookieName} }->value if ( defined $cookies{ $self->{cookieName} } ); } if ($id) { # Update sessionInfo data ## sessionInfo updated if $id defined : quite strange !! ## See http://jira.ow2.org/browse/LEMONLDAP-430 foreach ( keys %$infos ) { $self->lmLog( "Update sessionInfo $_ with " . $infos->{$_}, 'debug' ); $self->{sessionInfo}->{$_} = $infos->{$_}; } # Update session in global storage if ( my $apacheSession = $self->getApacheSession( $id, 1 ) ) { # Store updateTime $infos->{updateTime} = strftime( "%Y%m%d%H%M%S", localtime() ); # Store/update session values $apacheSession->update($infos); if ( $apacheSession->error ) { $self->lmLog( "Cannot update session $id", 'error' ); $self->lmLog( $apacheSession->error, 'error' ); } } } } ## @method void addSessionValue(string key, string value, string id) # Add a value into session key if not already present # @param key Session key # @param value Value to add # @param id optional Session identifier sub addSessionValue { my ( $self, $key, $value, $id ) = splice @_; # Mandatory parameters return () unless defined $key; return () unless defined $value; # Get current key value my $old_value = $self->{sessionInfo}->{$key}; # Split old values if ( defined $old_value ) { my @old_values = split /\Q$self->{multiValuesSeparator}\E/, $old_value; # Do nothing if value already exists foreach (@old_values) { return () if ( $_ eq $value ); } # Add separator $old_value .= $self->{multiValuesSeparator}; } else { $old_value = ""; } # Store new value my $new_value = $old_value . $value; $self->updateSession( { $key => $new_value }, $id ); # Return return (); } ## @method string getFirstValue(string value) # Get the first value of a multivaluated session value # @param value the complete value # @return first value sub getFirstValue { my ( $self, $value ) = splice @_; my @values = split /\Q$self->{multiValuesSeparator}\E/, $value; return $values[0]; } ##@method protected int _subProcess(array @subs) # Execute methods until an error is returned. # If $self->{$sub} exists, launch it, else launch $self->$sub #@param @subs array list of subroutines #@return Lemonldap::NG::Portal error sub _subProcess { my $self = shift; my @subs = @_; my $err = undef; foreach my $sub (@subs) { last if ( $err = $self->_sub($sub) ); } return $err; } ##@method protected void updateStatus() # Inform status mechanism module. # If an handler is launched on the same server with "status=>1", inform the # status module with the result (portal error). sub updateStatus { my $self = shift; print $Lemonldap::NG::Handler::Simple::statusPipe ( $self->{user} ? $self->{user} : $self->ipAddr ) . " => $ENV{SERVER_NAME}$ENV{SCRIPT_NAME} " . $self->{error} . "\n" if ($Lemonldap::NG::Handler::Simple::statusPipe); } ##@method protected string notification() #@return Notification stored by checkNotification() sub notification { my $self = shift; return $self->{_notification}; } ##@method protected string get_url() # Return url parameter # @return url parameter if good, nothing else. sub get_url { my $self = shift; return $self->{_url}; } ##@method protected string get_user() # Return user parameter # @return user parameter if good, nothing else. sub get_user { my $self = shift; return undef unless $self->{user}; unless ( $self->{user} =~ /$self->{userControl}/o ) { $self->lmLog( "Value " . $self->{user} . " does not match userControl regexp: " . $self->{userControl}, 'warn' ); return undef; } return $self->{user}; } ## @method string get_module(string type) # Return current used module # @param type auth/user/password/issuer # @return module name sub get_module { my ( $self, $type ) = splice @_; if ( $type =~ /auth/i ) { if ( defined $self->{_multi}->{stack}->[0] ) { return $self->{_multi}->{stack}->[0]->[0]->{s}; } if ( defined $self->{_choice}->{modules} ) { return $self->{_choice}->{modules}->[0]->{n}; } else { return $self->{authentication}; } } if ( $type =~ /user/i ) { if ( defined $self->{_multi}->{stack}->[1] ) { return $self->{_multi}->{stack}->[1]->[0]->{s}; } if ( defined $self->{_choice}->{modules} ) { return $self->{_choice}->{modules}->[1]->{n}; } else { return $self->{userDB}; } } if ( $type =~ /password/i ) { if ( defined $self->{_choice}->{modules} ) { return $self->{_choice}->{modules}->[2]->{n}; } else { return $self->{passwordDB}; } } if ( $type =~ /issuer/i ) { return $self->{_activeIssuerDB}; } return; } ##@method private Safe safe() # Provide the security jail. #@return Safe object sub safe { my $self = shift; # Test if safe already exists if ($safe) { # Refresh the portal object inside it $safe->{p} = $self; # Refresh environment variables $safe->share_from( 'main', ['%ENV'] ); return $safe; } # Else create it $safe = Lemonldap::NG::Common::Safe->new($self); # Get custom functions my @t = $self->{customFunctions} ? split( /\s+/, $self->{customFunctions} ) : (); foreach (@t) { my $sub = $_; unless (/::/) { $sub = ref($self) . "::$_"; } else { s/^.*:://; } next if ( $self->can($_) ); eval "sub $_ { return $sub( '$self->{portal}', \@_ ); }"; $self->lmLog( $@, 'error' ) if ($@); } # Share %ENV $safe->share_from( 'main', ['%ENV'] ); # Share Safelib $safe->share_from( 'Lemonldap::NG::Common::Safelib', $Lemonldap::NG::Common::Safelib::functions ); # Share custom functions and &encode_base64 $safe->share( '&encode_base64', @t ); return $safe; } ##@method private boolean _deleteSession(Lemonldap::NG::Common::Session session, boolean preserveCookie) # Delete an existing session. If "securedCookie" is set to 2, the http session # will also be removed. # @param h tied Apache::Session object # @param preserveCookie do not delete cookie # @return True if session has been deleted sub _deleteSession { my ( $self, $session, $preserveCookie ) = @_; # Invalidate http cookie and session, if set if ( $self->{securedCookie} >= 2 ) { # Try to find a linked http session (securedCookie == 2) if ( my $id2 = $session->data->{_httpSession} ) { if ( my $session2 = $self->getApacheSession( $id2, 1 ) ) { $session2->remove; if ( $session2->error ) { $self->lmLog( "Unable to remove linked session $id2", 'debug' ); $self->lmLog( $session2->error, 'debug' ); } } } # Create an obsolete cookie to remove it push @{ $self->{cookie} }, $self->cookie( -name => $self->{cookieName} . 'http', -value => 0, -domain => $self->{domain}, -path => "/", -secure => 0, -expires => '-1d', @_, ) unless ($preserveCookie); } $session->remove; # Create an obsolete cookie to remove it push @{ $self->{cookie} }, $self->cookie( -name => $self->{cookieName}, -value => 0, -domain => $self->{domain}, -path => "/", -secure => 0, -expires => '-1d', @_, ) unless ($preserveCookie); # Log my $user = $self->{sessionInfo}->{ $self->{whatToTrace} }; $self->_sub( 'userNotice', "User $user has been disconnected" ) if $user; return $session->error ? 0 : 1; } ##@method private void _dump(void* variable) # Dump variable in debug mode # @param $variable # @return void sub _dump { my $self = shift; my $variable = shift; require Data::Dumper; $Data::Dumper::Indent = 0; $self->lmLog( "Dump: " . Data::Dumper::Dumper($variable), 'debug' ); return; } ##@method protected string info(string t) # Get or set info to display to the user. # @param $t optional text to store # @return HTML text to display sub info { my ( $self, $t ) = @_; $self->{_info} .= $t if ( defined $t ); return $self->{_info}; } ##@method protected string loginInfo(string t) # Get or set info to display to the user on login screen # @param $t optional text to store # @return HTML text to display sub loginInfo { my ( $self, $t ) = @_; $self->{_loginInfo} .= $t if ( defined $t ); return $self->{_loginInfo}; } ##@method public void printImage(string file, string type) # Print image to STDOUT # @param $file The path to the file to print # @param $type The content-type to use (ie: image/png) # @return void sub printImage { my ( $self, $file, $type ) = @_; binmode STDOUT; unless ( open( IMAGE, '<', $file ) ) { $self->lmLog( "Could not display image '$file'", 'error' ); return; } print $self->header( $type . '; charset=utf-8; content-length=' . ( stat($file) )[10] ); my $buffer = ""; while ( read( IMAGE, $buffer, 4096 ) ) { print $buffer; } close(IMAGE); } sub stamp { my $self = shift; return $self->{cipher} ? $self->{cipher}->encrypt( time() ) : 1; } ## @method string convertSec(int sec) # Convert seconds to hours, minutes, seconds # @param $sec number of seconds # @return a formated time sub convertSec { my ( $self, $sec ) = splice @_; my ( $day, $hrs, $min ) = ( 0, 0, 0 ); # Calculate the minutes if ( $sec > 60 ) { $min = $sec / 60, $sec %= 60; $min = int($min); } # Calculate the hours if ( $min > 60 ) { $hrs = $min / 60, $min %= 60; $hrs = int($hrs); } # Calculate the days if ( $hrs > 24 ) { $day = $hrs / 24, $hrs %= 24; $day = int($day); } # Return the date return ( $day, $hrs, $min, $sec ); } ## @method string getSkin() # Return skin name # @return skin name sub getSkin { my ($self) = splice @_; my $skin = $self->{portalSkin}; # Fill sessionInfo to eval rule if empty (unauthenticated user) $self->{sessionInfo}->{_url} ||= $self->{urldc}; $self->{sessionInfo}->{ipAddr} ||= $self->ipAddr; # Load specific skin from skinRules if ( $self->{portalSkinRules} ) { foreach my $skinRule ( sort keys %{ $self->{portalSkinRules} } ) { if ( $self->safe->reval($skinRule) ) { $skin = $self->{portalSkinRules}->{$skinRule}; $self->lmLog( "Skin $skin selected from skin rule", 'debug' ); } } } # Check skin GET/POST parameter my $skinParam = $self->param('skin'); if ( defined $skinParam && !$self->checkXSSAttack( 'skin', $skinParam ) ) { $skin = $skinParam; $self->lmLog( "Skin $skin selected from GET/POST parameter", 'debug' ); } return $skin; } ############################################################### # MAIN subroutine: call all steps until one returns something # # different than PE_OK # ############################################################### ##@method boolean process() # Main method calling functions issued from: # - itself: # - controlUrlOrigin # - checkNotifBack # - controlExistingSession # - setMacros # - setLocalGroups # - setPersistentSessionInfo # - removeOther # - grantSession # - store # - buildCookie # - checkNotification # - autoRedirect # - updateStatus # - authentication module: # - authInit # - extractFormInfo # - setAuthSessionInfo # - authenticate # - authFinish # - userDB module: # - userDBInit # - getUser # - setSessionInfo # - setGroups # - passwordDB module: # - passwordDBInit # - modifyPassword # - issuerDB module: # - issuerDBInit # - issuerForUnAuthUser # - issuerForAuthUser # - MailReset: # - sendPasswordMail # #@return 1 if all is OK, 0 if session isn't created or a notification has to be done sub process { my ($self) = @_; $self->{error} = PE_OK; $self->{error} = $self->_subProcess( qw(controlUrlOrigin checkNotifBack controlExistingSession issuerDBInit authInit issuerForUnAuthUser extractFormInfo userDBInit getUser setAuthSessionInfo passwordDBInit modifyPassword setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups sendPasswordMail authenticate authFinish userDBFinish passwordDBFinish grantSession removeOther store buildCookie checkNotification issuerForAuthUser autoRedirect) ); $self->updateStatus; return ( ( $self->{error} > 0 ) ? 0 : 1 ); } ##@apmethod int controlUrlOrigin() # If the user was redirected here, loads 'url' parameter. # Check also confirm parameter. #@return Lemonldap::NG::Portal constant sub controlUrlOrigin { my $self = shift; if ( my $c = $self->param('confirm') ) { # Replace confirm stamp by 1 or -1 $c =~ s/^(-?)(.*)$/${1}1/; # Decrypt confirm stamp if cipher available # and confirm not already decrypted if ( $self->{cipher} and $2 ne "1" ) { my $time = time() - $self->{cipher}->decrypt($2); if ( $time < 600 ) { $self->lmLog( "Confirm parameter accepted $c", 'debug' ); $self->param( 'confirm', $c ); } else { $self->lmLog( 'Confirmation to old, refused', 'notice' ); $self->param( 'confirm', 0 ); } } } $self->{_url} ||= ''; if ( my $url = $self->param('url') ) { # REJECT NON BASE64 URL except for CAS IssuerDB if ( $self->get_module('issuer') ne "CAS" ) { if ( $url =~ m#[^A-Za-z0-9\+/=]# ) { $self->lmLog( "Value must be in BASE64 (param: url | value: $url)", "warn" ); return PE_BADURL; } $self->{urldc} = decode_base64($url); $self->{urldc} =~ s/[\r\n]//sg; } else { $self->{urldc} = $url; } # For logout request, test if Referer comes from an authorizated site my $tmp = ( $self->param('logout') ? $ENV{HTTP_REFERER} : $self->{urldc} ); # XSS attack if ( $self->checkXSSAttack( $self->param('logout') ? 'HTTP Referer' : 'urldc', $self->{urldc} ) ) { delete $self->{urldc}; return PE_BADURL; } # Non protected hosts if ( $tmp and !$self->isTrustedUrl($tmp) ) { $self->lmLog( "URL contains a non protected host (param: " . ( $self->param('logout') ? 'HTTP Referer' : 'urldc' ) . " | value: $tmp)", "warn" ); delete $self->{urldc}; return PE_BADURL; } $self->{_url} = $url; } PE_OK; } ##@apmethod int checkNotifBack() # Checks if a message has been notified to the connected user. # Call Lemonldap::NG::Common::Notification::checkNotification() #@return Lemonldap::NG::Portal error code sub checkNotifBack { my $self = shift; if ( $self->{notification} and grep( /^reference/, $self->param() ) ) { $self->lmLog( "User was on a notification step", 'debug' ); unless ( $self->{notifObject}->checkNotification($self) ) { $self->lmLog( "All notifications have not been accepted, display them again", 'debug' ); $self->{_notification} = $self->{notifObject}->getNotification($self); return PE_NOTIFICATION; } else { $self->lmLog( "All notifications have been accepted, follow the authentication process", 'debug' ); $self->{error} = $self->_subProcess( qw(issuerDBInit authInit issuerForAuthUser authFinish autoRedirect) ); return $self->{error} || PE_DONE; } } PE_OK; } ##@apmethod int controlExistingSession(string id) # Control existing sessions. # To overload to control what to do with existing sessions. # what to do with existing sessions ? # - nothing: user is authenticated and process returns true (default) # - delete and create a new session (not implemented) # - re-authentication (set portalForceAuthn to 1) #@param $id optional value of the session-id else cookies are examinated. #@return Lemonldap::NG::Portal constant sub controlExistingSession { my ( $self, $id ) = @_; my %cookies; %cookies = fetch CGI::Cookie unless ($id); # Special request "display captcha" if ( $self->param("displayCaptcha") ) { my $captcha = Lemonldap::NG::Common::Captcha->new( { storageModule => $self->{captchaStorage}, storageModuleOptions => $self->{captchaStorageOptions}, md5 => $self->param("displayCaptcha"), size => $self->{captcha_size}, } ); if ( $captcha && $captcha->image ) { binmode STDOUT; print $self->header( 'image/png' . '; charset=utf-8; content-length=' . length( $captcha->image ) ); print $captcha->image; } $self->quit(); } # Test if Lemonldap::NG cookie is available if ( $id or ( $cookies{ $self->{cookieName} } and $id = $cookies{ $self->{cookieName} }->value ) ) { my $apacheSession = $self->getApacheSession($id); if ($apacheSession) { %{ $self->{sessionInfo} } = %{ $apacheSession->data }; # Logout if required if ( $self->param('logout') ) { # Delete session unless ( $self->_deleteSession($apacheSession) ) { $self->lmLog( "Unable to delete session $id", 'error' ); $self->lmLog( $apacheSession->error, 'error' ); return PE_ERROR; } else { $self->lmLog( "Session $id deleted from global storage", 'debug' ); } # Call issuerDB logout on each used issuerDBmodule my $issuerDBList = $self->{sessionInfo}->{_issuerDB}; if ( defined $issuerDBList ) { foreach my $issuerDBtype ( split( /\Q$self->{multiValuesSeparator}\E/, $issuerDBList ) ) { my $module_name = 'Lemonldap::NG::Portal::IssuerDB' . $issuerDBtype; $self->lmLog( "Process logout for issuerDB module $issuerDBtype", 'debug' ); # Load current IssuerDB module unless ( $self->loadModule($module_name) ) { $self->lmLog( "Unable to load $module_name", 'error' ); next; } $self->{error} = $self->_subProcess( $module_name . "::issuerDBInit", $module_name . '::issuerLogout' ); } } # Call logout for the module used to authenticate $self->lmLog( "Process logout for authentication module " . $self->{sessionInfo}->{_auth}, 'debug' ); if ( $self->{sessionInfo}->{'_auth'} ne $self->get_module('auth') ) { my $module_name = 'Lemonldap::NG::Portal::Auth' . $self->{sessionInfo}->{_auth}; unless ( $self->loadModule($module_name) ) { $self->lmLog( "Unable to load $module_name", 'error' ); } else { eval { $self->{error} = $self->_subProcess( $module_name . "::authInit", $module_name . "::authLogout" ); }; } } else { eval { $self->{error} = $self->_subProcess( 'authInit', 'authLogout' ); }; } if ($@) { $self->lmLog( "Error when calling authentication logout: $@", 'debug' ); } return $self->{error} if $self->{error} > 0; # Collect logout services and build hidden iFrames if ( %{ $self->{logoutServices} } ) { $self->lmLog( "Create iFrames to forward logout to services", 'debug' ); $self->info( "

    " . $self->msg(PM_LOGOUT) . "

    " ); foreach ( keys %{ $self->{logoutServices} } ) { my $logoutServiceName = $_; my $logoutServiceUrl = $self->{logoutServices}->{$logoutServiceName}; $self->lmLog( "Find logout service $logoutServiceName ($logoutServiceUrl)", 'debug' ); my $iframe = ""; $self->info($iframe); } # Redirect on logout page if no other target defined if ( !$self->{urldc} and !$self->{postUrl} ) { $self->{urldc} = $ENV{SCRIPT_NAME} . "?logout=1"; } } # Redirect or Post if asked by authLogout return $self->_subProcess(qw(autoRedirect)) if ( $self->{urldc} and $self->{urldc} ne $self->{portal} ); return $self->_subProcess(qw(autoPost)) if ( $self->{postUrl} ); # Display logout message return PE_LOGOUT_OK; } # If the user wants to purge other sessions elsif ( $self->param('removeOther') ) { $self->{notifyDeleted} = 1; $self->{singleSession} = 1; $self->_sub( 'removeOther', $id ); } # Special ajax request "ping" to check if session is available if ( $self->param('ping') ) { print $self->header( -type => 'application/json' ) . '{"auth":true}'; $self->quit(); } # Special ajax request "storeAppsListOrder" if ( $self->param('storeAppsListOrder') ) { my $order = $self->param('storeAppsListOrder'); $self->lmLog( "Get new apps list order: $order", 'debug' ); $self->updatePersistentSession( { appsListOrder => $order } ); $self->quit(); } $self->{id} = $id; # A session has been found => call existingSession my $r = $self->_sub( 'existingSession', $id, $self->{sessionInfo} ); if ( $r == PE_DONE ) { $self->{error} = $self->_subProcess( qw(checkNotification issuerDBInit authInit issuerForAuthUser authFinish autoRedirect) ); return $self->{error} || PE_DONE; } else { return $r; } } } # Special ajax request "ping" to check if session is available if ( $self->param('ping') ) { print $self->header( -type => 'application/json' ) . '{"auth":false}'; $self->quit(); } # Display logout success if logout asked # and we do not have valid session return PE_LOGOUT_OK if $self->param('logout'); # Else continue authentication process PE_OK; } ## @method int existingSession() # Launched by controlExistingSession() to know what to do with existing # sessions. # Can return: # - PE_DONE: session is unchanged and process() return true # - PE_OK: process() return false to display the form #@return Lemonldap::NG::Portal constant sub existingSession { my $self = shift; my $forceAuthn; # Check portalForceAuthn parameter # and authForce method eval { $forceAuthn = $self->_sub('authForce'); }; if ($@) { $self->lmLog( "Error when calling authForce: $@", 'debug' ); } $forceAuthn = 1 if ( $self->{portalForceAuthn} ); if ($forceAuthn) { my $referer = $self->referer(); my $id = $self->{id}; # Do not force authentication when password is modified return PE_DONE if $self->param('newpassword'); # Do not force authentication if last successful authentication is recent my $last_authn_utime = $self->{sessionInfo}->{_lastAuthnUTime} || 0; if ( time() - $last_authn_utime < $self->{portalForceAuthnInterval} ) { $self->lmLog( "Authentication is recent, so do not force authentication for session $id", 'debug' ); return PE_DONE; } # If coming from the portal follow the normal process to update the session if ( $referer ? ( $referer =~ m#$self->{portal}#i ) : 0 ) { $self->lmLog( "Portal referer detected for session $id", 'debug' ); # Set flag to update session timestamp $self->{updateSession} = 1; # Process $self->{error} = $self->_subProcess( qw(issuerDBInit authInit issuerForUnAuthUser extractFormInfo userDBInit getUser setAuthSessionInfo setSessionInfo setMacros setGroups setPersistentSessionInfo setLocalGroups authenticate authFinish userDBFinish store) ); return $self->{error} || PE_DONE; } else { $self->lmLog( "Force reauthentication for session $id", 'debug' ); return PE_OK; } } # Else return PE_DONE PE_DONE; } # issuerDBInit(): must be implemented in IssuerDB* module # authInit(): must be implemented in Auth* module # issuerForUnAuthUser(): must be implemented in IssuerDB* module ##@apmethod int extractFormInfo() # Extract data common to all authentication modules, # and call extractFormInfo() in Auth* module # Auth*::extractFormInfo set $self->{user} and in some cases # authenticate user (done in authenticate() else) #@return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; return PE_OK if $self->{skipExtractFormInfo}; $self->{checkLogins} = $self->param('checkLogins'); return $self->SUPER::extractFormInfo; } # getUser(): must be implemented in UserDB* module ## @apmethod int setAuthSessionInfo() # Set _auth # call setAuthSessionInfo in Auth* module #@return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Get the current authentication module $self->{sessionInfo}->{_auth} = $self->get_module("auth"); return $self->SUPER::setAuthSessionInfo(); } ## @apmethod int passwordDBInit() # Set _passwordDB # call passwordDBInit in passwordDB* module # @return Lemonldap::NG::Portal constant sub passwordDBInit { my $self = shift; # Get the current password module $self->{sessionInfo}->{_passwordDB} = $self->get_module("password"); return $self->SUPER::passwordDBInit(); } ## @apmethod int modifyPassword() # Call modifyPassword from PasswordDB* module # Continue auth process if password change is ok # @return Lemonldap::NG::Portal constant sub modifyPassword { my $self = shift; my $res = $self->SUPER::modifyPassword(); if ( $res == PE_PASSWORD_OK ) { # Update password in session if needed $self->lmLog( "Update password in session for " . $self->{user}, 'debug' ); my $infos; $infos->{_password} = $self->{newpassword}; $self->updateSession($infos) if ( $self->{storePassword} ); # Set a flag to ignore password change in Menu $self->{ignorePasswordChange} = 1; # Set a flag to allow sending a mail $self->{passwordWasChanged} = 1; # Continue process if password change is ok return PE_OK; } return $res; } ##@apmethod int setSessionInfo() # Set ipAddr, startTime, updateTime, _utime and _userDB # Call setSessionInfo() in UserDB* module #@return Lemonldap::NG::Portal constant sub setSessionInfo { my $self = shift; # Get the current user module $self->{sessionInfo}->{_userDB} = $self->get_module("user"); # Store IP address from remote address or X-FORWARDED-FOR header $self->{sessionInfo}->{ipAddr} = $self->ipAddr; # Date and time if ( $self->{updateSession} ) { $self->{sessionInfo}->{updateTime} = strftime( "%Y%m%d%H%M%S", localtime() ); } else { $self->{sessionInfo}->{_utime} ||= time(); $self->{sessionInfo}->{startTime} = strftime( "%Y%m%d%H%M%S", localtime() ); } # Get environment variables matching exportedVars foreach ( keys %{ $self->{exportedVars} } ) { if ( my $tmp = $ENV{ $self->{exportedVars}->{$_} } ) { $tmp =~ s/[\r\n]/ /gs; $self->{sessionInfo}->{$_} = $tmp; delete $self->{exportedVars}->{$_}; } } # Store URL origin in session $self->{sessionInfo}->{_url} = $self->{urldc}; # Call UserDB setSessionInfo if ( my $res = $self->SUPER::setSessionInfo() ) { return $res; } PE_OK; } ##@apmethod int setMacros() # Macro mechanism. # * store macro results in $self->{sessionInfo} #@return Lemonldap::NG::Portal constant sub setMacros { my $self = shift; foreach ( sort keys %{ $self->{macros} } ) { $self->{sessionInfo}->{$_} = $self->safe->reval( $self->{macros}->{$_} ); } PE_OK; } ##@apmethod int setLocalGroups() # Groups mechanism. # * store all groups name that the user match in $self->{sessionInfo}->{groups} #@return Lemonldap::NG::Portal constant sub setLocalGroups { my $self = shift; foreach ( sort keys %{ $self->{groups} } ) { if ( $self->safe->reval( $self->{groups}->{$_} ) ) { $self->{sessionInfo}->{groups} .= $self->{multiValuesSeparator} . $_; $self->{sessionInfo}->{hGroups}->{$_}->{name} = $_; } } # Clear values separator at the beginning if ( $self->{sessionInfo}->{groups} ) { $self->{sessionInfo}->{groups} =~ s/^\Q$self->{multiValuesSeparator}\E//; } PE_OK; } # setGroups(): must be implemented in UserDB* module ##@apmethod int setPersistentSessionInfo() # Restore persistent session info #@return Lemonldap::NG::Portal constant sub setPersistentSessionInfo { my $self = shift; # Do not restore infos if session already opened unless ( $self->{id} ) { my $key = $self->{sessionInfo}->{ $self->{whatToTrace} }; return PE_OK unless ( $key and length($key) ); my $persistentSession = $self->getPersistentSession( $self->_md5hash($key) ); if ($persistentSession) { $self->lmLog( "Persistent session found for $key", 'debug' ); foreach my $k ( keys %{ $persistentSession->data } ) { # Do not restore some parameters next if $k =~ /^_session_id$/; next if $k =~ /^_session_kind$/; $self->lmLog( "Restore persistent parameter $k", 'debug' ); $self->{sessionInfo}->{$k} = $persistentSession->data->{$k}; } } } PE_OK; } ## @apmethod sendPasswordMail # Call sendPasswordMail from MailReset if option is configured # @return Lemonldap::NG::Portal constant sub sendPasswordMail { my $self = shift; if ( $self->{mailOnPasswordChange} && $self->{passwordWasChanged} ) { $self->lmLog( "Send password by mail requested", 'debug' ); eval "require Lemonldap::NG::Portal::MailReset"; &Lemonldap::NG::Portal::MailReset::smtpInit($self); &Lemonldap::NG::Portal::MailReset::sendPasswordMail($self); } # Never stop the process here return PE_OK; } ##@apmethod int authenticate() # Call authenticate() in Auth* module, and registerLogin() # if authentication failed, userNotice() if it succeeded. #@return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; if ( my $errorCode = $self->SUPER::authenticate() ) { $self->registerLogin($errorCode); return $errorCode; } # Log good authentication my $user = $self->{sessionInfo}->{ $self->{whatToTrace} }; $self->_sub( 'userNotice', "Good authentication for $user by $self->{sessionInfo}->{_auth}" ) if $user; # Set _lastAuthnUTime $self->{sessionInfo}->{_lastAuthnUTime} = time(); PE_OK; } ##@method registerLogin # Store current login in login history # @param $errorCode Code returned by authenticate() sub registerLogin { my ( $self, $errorCode ) = @_; if ( $self->{loginHistoryEnabled} ) { my $history = $self->{sessionInfo}->{loginHistory} ||= {}; my $type = ( $errorCode ? "failed" : "success" ) . "Login"; $history->{$type} ||= []; $self->lmLog( "Current login saved into $type", "debug" ); # Gather current login's parameters my $login = $self->_sumUpSession( $self->{sessionInfo}, 1 ); $login->{error} = $self->error($errorCode) if ($errorCode); # Add current login into history unshift @{ $history->{$type} }, $login; # Forget oldest logins splice @{ $history->{$type} }, $self->{ $type . "Number" } if ( scalar @{ $history->{$type} } > $self->{ $type . "Number" } ); # Save into persistent session $self->updatePersistentSession( { loginHistory => $history, } ); } } ##@apmethod int removeOther() # check singleSession or singleIP parameters, and remove other sessions if needed #@return Lemonldap::NG::Portal constant sub removeOther { my ( $self, $current ) = @_; $self->{deleted} = []; $self->{otherSessions} = []; my $moduleOptions = $self->{globalStorageOptions} || {}; $moduleOptions->{backend} = $self->{globalStorage}; my $module = "Lemonldap::NG::Common::Apache::Session"; if ( $self->{singleSession} or $self->{singleIP} or $self->{notifyOther} ) { my $sessions = $module->searchOn( $moduleOptions, $self->{whatToTrace}, $self->{sessionInfo}->{ $self->{whatToTrace} } ); foreach my $id ( keys %$sessions ) { next if ( $current and ( $current eq $id ) ); my $session = $self->getApacheSession( $id, 1 ) or next; if ( $self->{singleSession} or ( $self->{singleIP} and $self->{sessionInfo}->{ipAddr} ne $session->data->{ipAddr} ) ) { push @{ $self->{deleted} }, $self->_sumUpSession( $session->data ); $self->_deleteSession( $session, 1 ); } else { push @{ $self->{otherSessions} }, $self->_sumUpSession( $session->data ); } } } if ( $self->{singleUserByIP} ) { my $sessions = $module->searchOn( $moduleOptions, 'ipAddr', $self->ipAddr ); foreach my $id ( keys %$sessions ) { next if ( $current and $current eq $id ); my $session = $self->getApacheSession( $id, 1 ) or next; unless ( $self->{sessionInfo}->{ $self->{whatToTrace} } eq $session->data->{ $self->{whatToTrace} } ) { push @{ $self->{deleted} }, $self->_sumUpSession( $session->data ); $self->_deleteSession( $session, 1 ); } } } $self->info( $self->mkSessionArray( $self->{deleted}, $self->msg(PM_SESSIONS_DELETED), 1 ) ) if ( $self->{notifyDeleted} and @{ $self->{deleted} } ); $self->info( $self->mkSessionArray( $self->{otherSessions}, $self->msg(PM_OTHER_SESSIONS), 1 ) . $self->_mkRemoveOtherLink() ) if ( $self->{notifyOther} and @{ $self->{otherSessions} } ); $self->info( ( $self->{sessionInfo}->{loginHistory}->{successLogin} ? $self->mkSessionArray( $self->{sessionInfo}->{loginHistory}->{successLogin}, $self->msg(PM_LAST_LOGINS), 0, 0 ) : "" ) . ( $self->{sessionInfo}->{loginHistory}->{failedLogin} ? $self->mkSessionArray( $self->{sessionInfo}->{loginHistory}->{failedLogin}, $self->msg(PM_LAST_FAILED_LOGINS), 0, 1 ) : "" ) ) if ( $self->{checkLogins} ); PE_OK; } ##@method private hashref _sumUpSession(Lemonldap::NG::Common::Session session) # put main session data into a hash ref # @param hashref $session The session to sum up # @return hashref sub _sumUpSession { my ( $self, $session, $withoutUser ) = @_; my $res = $withoutUser ? {} : { user => $session->{ $self->{whatToTrace} } }; $res->{$_} = $session->{$_} foreach ( "_utime", "ipAddr", keys %{ $self->{sessionDataToRemember} } ); return $res; } ##@method private string mkSessionArray(string title,array datas) # Build an HTML array to display sessions # @param $sessions Array ref of hash ref containing sessions datas # @param $title Title of the array # @param $displayUser To display "User" column # @param $displaError To display "Error" column # @return HTML string sub mkSessionArray { my ( $self, $sessions, $title, $displayUser, $displayError ) = @_; return "" unless ( ref $sessions eq "ARRAY" and @$sessions ); my $tmp = $title ? "

    $title

    " : ""; $tmp .= ""; $tmp .= ""; $tmp .= "" if ($displayUser); $tmp .= ""; $tmp .= ""; $tmp .= "" foreach ( keys %{ $self->{sessionDataToRemember} } ); $tmp .= '' if ($displayError); $tmp .= ''; foreach my $session (@$sessions) { $tmp .= ""; $tmp .= "" if ($displayUser); $tmp .= ""; $tmp .= ""; $tmp .= "" foreach ( keys %{ $self->{sessionDataToRemember} } ); $tmp .= "" if ($displayError); $tmp .= ""; } $tmp .= '
    " . $self->msg(PM_USER) . "" . $self->msg(PM_DATE) . "" . $self->msg(PM_IP) . "" . $self->{sessionDataToRemember}->{$_} . "' . $self->msg(PM_ERROR_MSG) . '
    $session->{user}$session->{ipAddr}" . ( $session->{$_} || "" ) . "$session->{error}
    '; return $tmp; } ## @method private string _mkRemoveOtherLink() # Build the removeOther link # Last part of URL is built trough javascript # @return removeOther link in HTML code sub _mkRemoveOtherLink { my $self = shift; my $link = $self->{portal} . "?removeOther=1"; return "

    " . $self->msg(PM_REMOVE_OTHER_SESSIONS) . "

    "; } ##@apmethod int grantSession() # Check grantSessionRule to allow session creation. #@return Lemonldap::NG::Portal constant sub grantSession { my ($self) = @_; if ( defined $self->{grantSessionRule} ) { # Eval grantSessionRule # Kept for backward compatibility with LL::NG 1.1.2 and previous my $grantSessionRule = $self->{grantSessionRule}; unless ( $self->safe->reval($grantSessionRule) ) { $self->lmLog( "User " . $self->{user} . " was not granted to open session", 'error' ); $self->registerLogin(PE_SESSIONNOTGRANTED); return PE_SESSIONNOTGRANTED; } } # Eval grantSessionRules sorted by comments sub sortByComment { my $A = ( $a =~ /^.*?##(.*)$/ )[0]; my $B = ( $b =~ /^.*?##(.*)$/ )[0]; return !$A ? 1 : !$B ? -1 : $A cmp $B; } foreach ( sort sortByComment keys %{ $self->{grantSessionRules} } ) { $self->lmLog( "Grant session condition \"$_\" checked", "debug" ); unless ( $self->safe->reval($_) ) { $self->lmLog( "User " . $self->{user} . " was not granted to open session", 'error' ); my $msg = $self->safe->reval( $self->{grantSessionRules}->{$_} ); $msg = $self->{grantSessionRules}->{$_} if ($@); $self->{ "error_" . PE_SESSIONNOTGRANTED } = $msg if ($msg); $self->registerLogin(PE_SESSIONNOTGRANTED); return PE_SESSIONNOTGRANTED; } } my $user = $self->{sessionInfo}->{ $self->{whatToTrace} }; $self->_sub( 'userNotice', "Session granted for $user" ) if ($user); $self->registerLogin(PE_OK); return PE_OK; } ##@apmethod int store() # Store user's datas in sessions database. # Now, the user is known, authenticated and session variable are evaluated. # It's time to store his parameters with Apache::Session::* module #@return Lemonldap::NG::Portal constant sub store { my ($self) = @_; # Now, user is authenticated => inform Apache $self->setApacheUser( $self->{sessionInfo}->{ $self->{whatToTrace} } ); # Create second session for unsecure cookie if ( $self->{securedCookie} == 2 ) { my $session2 = $self->getApacheSession( undef, 1 ); my %infos = %{ $self->{sessionInfo} }; $infos{_httpSessionType} = 1; $session2->update( \%infos ); $self->{sessionInfo}->{_httpSession} = $session2->id; } # Main session my $session = $self->getApacheSession( $self->{id} ); return PE_APACHESESSIONERROR unless ($session); # Compute unsecure cookie value if needed if ( $self->{securedCookie} == 3 ) { $self->{sessionInfo}->{_httpSession} = $self->{cipher}->encryptHex( $self->{id}, "http" ); } # Fill session my $infos = {}; foreach my $k ( keys %{ $self->{sessionInfo} } ) { next unless defined $self->{sessionInfo}->{$k}; my $displayValue = $self->{sessionInfo}->{$k}; if ( $self->{hiddenAttributes} =~ /\b$k\b/ ) { $displayValue = '****'; } $self->lmLog( "Store $displayValue in session key $k", 'debug' ); $self->_dump($displayValue) if ref($displayValue); $infos->{$k} = $self->{sessionInfo}->{$k}; } $session->update($infos); PE_OK; } ## @apmethod int authFinish # Call authFinish method from authentication module # @return Lemonldap::NG::Portal constant sub authFinish { my $self = shift; # Remove captcha session if ( $self->{captcha_check_code} ) { $self->removeCaptcha( $self->{captcha_check_code} ); } eval { $self->{error} = $self->SUPER::authFinish; }; if ($@) { $self->lmLog( "Optional authFinish method not defined in current authentication module: $@", 'debug' ); return PE_OK; } return $self->{error}; } ## @apmethod int userDBFinish # Call userDBFinish method from userDB module # @return Lemonldap::NG::Portal constant sub userDBFinish { my $self = shift; eval { $self->{error} = $self->SUPER::userDBFinish; }; if ($@) { $self->lmLog( "Optional userDBFinish method not defined in current userDB module: $@", 'debug' ); return PE_OK; } return $self->{error}; } ## @apmethod int passwordDBFinish # Call passwordDBFinish method from passwordDB module # @return Lemonldap::NG::Portal constant sub passwordDBFinish { my $self = shift; eval { $self->{error} = $self->SUPER::passwordDBFinish; }; if ($@) { $self->lmLog( "Optional passwordDBFinish method not defined in current passwordDB module: $@", 'debug' ); return PE_OK; } return $self->{error}; } ##@apmethod int buildCookie() # Build the Lemonldap::NG cookie. #@return Lemonldap::NG::Portal constant sub buildCookie { my $self = shift; push @{ $self->{cookie} }, $self->cookie( -name => $self->{cookieName}, -value => $self->{id}, -domain => $self->{domain}, -path => "/", -secure => $self->{securedCookie}, -httponly => $self->{httpOnly}, -expires => $self->{cookieExpiration}, @_, ); if ( $self->{securedCookie} >= 2 ) { push @{ $self->{cookie} }, $self->cookie( -name => $self->{cookieName} . "http", -value => $self->{sessionInfo}->{_httpSession}, -domain => $self->{domain}, -path => "/", -secure => 0, -httponly => $self->{httpOnly}, -expires => $self->{cookieExpiration}, @_, ); } PE_OK; } ##@apmethod int checkNotification() # Check if messages has to be notified. # Call Lemonldap::NG::Common::Notification::getNotification(). #@return Lemonldap::NG::Portal constant sub checkNotification { my $self = shift; if ( $self->{notification} and $self->{_notification} ||= $self->{notifObject}->getNotification($self) ) { return PE_NOTIFICATION; } return PE_OK; } ## @apmethod int issuerForAuthUser() # Check IssuerDB activation rule # Register used module in user session # @return Lemonldap::NG::Portal constant sub issuerForAuthUser { my $self = shift; # User information my $user = $self->{sessionInfo}->{ $self->{whatToTrace} } || 'unknown'; # Get active module my $issuerDBtype = $self->get_module('issuer'); # Eval activation rule my $rule = $self->{ 'issuerDB' . $issuerDBtype . 'Rule' }; if ( defined $rule ) { $self->lmLog( "Applying rule: $rule", 'debug' ); unless ( $self->safe->reval($rule) ) { $self->lmLog( "User $user was not allowed to use IssuerDB $issuerDBtype", 'warn' ); return PE_OK; } } else { $self->lmLog( "No rule found for IssuerDB $issuerDBtype", 'debug' ); } $self->lmLog( "User $user allowed to use IssuerDB $issuerDBtype", 'debug' ); # Register IssuerDB module in session $self->addSessionValue( '_issuerDB', $issuerDBtype, $self->{id} ); # Call IssuerDB module method return $self->SUPER::issuerForAuthUser(); } ##@apmethod int autoRedirect() # If the user was redirected to the portal, we will now redirect him # to the requested URL. #@return Lemonldap::NG::Portal constant sub autoRedirect { my $self = shift; $self->clearHiddenFormValue(); # Default redirection URL $self->{urldc} ||= $self->{portal} if ( $self->{mustRedirect} or $self->info() ); # Display info before redirecting if ( $self->info() ) { $self->{infoFormMethod} = $self->param('method') || "get"; $self->clearHiddenFormValue(); my ($query_string) = ( $self->{urldc} =~ /.+?\?(.+)/ ); if ($query_string) { $self->lmLog( "Transform query string $query_string into hidden form values", 'debug' ); my $query = CGI->new($query_string); my $formFields = $query->Vars; foreach ( keys %$formFields ) { $self->setHiddenFormValue( $_, $formFields->{$_}, "", 0 ); } } return PE_INFO; } # Redirection should be made if # - urldc defined if ( $self->{urldc} ) { # Cross-domain mechanism if ( $self->{cda} and $self->{id} and $self->{urldc} !~ m#^https?://[^/]*$self->{domain}(:\d+)?/#oi and $self->isTrustedUrl( $self->{urldc} ) ) { my $ssl = $self->{urldc} =~ /^https/; $self->lmLog( 'CDA request', 'debug' ); $self->{urldc} .= ( $self->{urldc} =~ /\?/ ? '&' : '?' ) . ( ( $self->{securedCookie} < 2 or $ssl ) ? $self->{cookieName} . "=" . $self->{id} : $self->{cookieName} . "http=" . $self->{sessionInfo}->{_httpSession} ); } $self->updateStatus; if ( $self->safe->reval( $self->{jsRedirect} ) ) { $self->{redirectFormMethod} = "get"; return PE_REDIRECT; } else { print $self->redirect( -status => '303 See Other', -location => $self->{urldc}, ); $self->quit(); } } PE_OK; } ## @method void returnSOAPMessage() # Print SOAP message # @return void sub returnSOAPMessage { my $self = shift; # Quit if no SOAP message $self->quit() unless $self->{SOAPMessage}; # Print HTTP header and SOAP message binmode( STDOUT, ":bytes" ); print $self->header( -type => 'application/xml' ); print $self->{SOAPMessage}; # Exit $self->quit(); } ## @method void autoPost() # Transfer POST data with auto submit # @return void sub autoPost { my $self = shift; # Get URL and Form fields $self->{urldc} = $self->{postUrl}; my $formFields = $self->{postFields}; $self->clearHiddenFormValue(); foreach ( keys %$formFields ) { $self->setHiddenFormValue( $_, $formFields->{$_}, "", 0 ); } # Display info before redirecting if ( $self->info() ) { $self->{infoFormMethod} = $self->param('method') || "post"; return PE_INFO; } $self->{redirectFormMethod} = "post"; return PE_REDIRECT; } ## @method HASHREF getCustomTemplateParameters() # Find custom templates parameters # @return Custom parameters sub getCustomTemplateParameters { my $self = shift; my $customTplParams = {}; foreach ( keys %$self ) { next unless ( $_ =~ /^tpl_(.+)$/ ); my $tplParam = $1; my $tplValue = $self->{ "tpl_" . $tplParam }; $self->lmLog( "Set custom template parameter $tplParam with $tplValue", 'debug' ); $customTplParams->{$tplParam} = $tplValue; } return $customTplParams; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::Simple - Base module for building Lemonldap::NG compatible portals =head1 SYNOPSIS use Lemonldap::NG::Portal::Simple; my $portal = new Lemonldap::NG::Portal::Simple( domain => 'example.com', globalStorage => 'Apache::Session::MySQL', globalStorageOptions => { DataSource => 'dbi:mysql:database=dbname;host=127.0.0.1', UserName => 'db_user', Password => 'db_password', TableName => 'sessions', LockDataSource => 'dbi:mysql:database=dbname;host=127.0.0.1', LockUserName => 'db_user', LockPassword => 'db_password', }, ldapServer => 'ldap.domaine.com,ldap-backup.domaine.com', securedCookie => 1, exportedVars => { uid => 'uid', cn => 'cn', mail => 'mail', appli => 'appli', }, # Activate SOAP service Soap => 1 ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # Write here the html form used to authenticate with CGI methods. # $portal->error returns the error message if athentification failed # Warning: by defaut, input names are "user" and "password" print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; print '
    '; # In your form, the following value is required for redirection print ''; # Next, login and password print 'Login :
    '; print 'Password : '; print ''; print '
    '; } SOAP mode authentication (client) : #!/usr/bin/perl -l use SOAP::Lite; use Data::Dumper; my $soap = SOAP::Lite->proxy('http://auth.example.com/') ->uri('urn:/Lemonldap::NG::Common::CGI::SOAPService'); my $r = $soap->getCookies( 'user', 'password' ); # Catch SOAP errors if ( $r->fault ) { print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { my $res = $r->result(); # If authentication failed, display error if ( $res->{error} ) { print STDERR "Error: " . $soap->error( $res->{error} )->result(); } # print session-ID else { print "Cookie: lemonldap=" . $res->{cookies}->{lemonldap}; } } =head1 DESCRIPTION Lemonldap::NG::Portal::Simple is the base module for building Lemonldap::NG compatible portals. You can use it either by inheritance or by writing anonymous methods like in the example above. See L for a complete example of use of Lemonldap::Portal::* libraries. =head1 METHODS =head2 Constructor (new) =head3 Args =over =item * ldapServer: server(s) used to retrive session information and to valid credentials (localhost by default). More than one server can be set here separated by commas. The servers will be tested in the specifies order. To use TLS, set "ldap+tls://server" and to use LDAPS, set "ldaps://server" instead of server name. If you use TLS, you can set any of the Net::LDAP->start_tls() sub like this: "ldap/tls://server/verify=none&capath=/etc/ssl" You can also use caFile and caPath parameters. =item * ldapPort: tcp port used by ldap server. =item * ldapBase: base of the ldap directory. =item * managerDn: dn to used to connect to ldap server. By default, anonymous bind is used. =item * managerPassword: password to used to connect to ldap server. By default, anonymous bind is used. =item * securedCookie: set it to 1 if you want to protect user cookies. =item * cookieName: name of the cookie used by Lemonldap::NG (lemon by default). =item * domain: cookie domain. You may have to give it else the SSO will work only on your server. =item * globalStorage: required: L library to used to store session information. =item * globalStorageOptions: parameters to bind to L module =item * authentication: sheme to authenticate users (default: "ldap"). It can be set to: =over =item * B: See L. =back =item * caPath, caFile: if you use ldap+tls you can overwrite cafile or capath options with those parameters. This is useful if you use a shared configuration. =item * ldapPpolicyControl: set it to 1 if you want to use LDAP Password Policy =item * grantSessionRule: rule applied to grant session opening for a user. Can use all exported attributes, macros, groups and custom functions. =back =head2 Methods that can be overloaded All the functions above can be overloaded to adapt Lemonldap::NG to your environment. They MUST return one of the exported constants (see above) and are called in this order by process(). =head3 controlUrlOrigin If the user was redirected by a Lemonldap::NG handler, stores the url that will be used to redirect the user after authentication. =head3 controlExistingSession Controls if a previous session is always available. If true, it call the sub C with two parameters: id and a scalar tied on Apache::Session module choosed to store sessions. See below =head3 existingSession This sub is called only if a previous session exists and is available. By defaults, it returns PE_OK so user is re-authenticated. You can overload it: for example if existingSession just returns PE_DONE: authenticated users are not re-authenticated and C<>process> returns true. =head3 extractFormInfo Method implemented into Lemonldap::NG::Portal::Auth* modules. By default (ldap bind), converts form input into object variables ($self->{user} and $self->{password}). =head3 formateParams Does nothing. To be overloaded if needed. =head3 formateFilter Creates the ldap filter using $self->{user}. By default : $self->{filter} = "(&(uid=" . $self->{user} . ")(objectClass=inetOrgPerson))"; If $self->{AuthLDAPFilter} is set, it is used instead of this. This is used by Lemonldap::NG::Portal::Auth* modules to overload filter. =head3 connectLDAP Connects to LDAP server. =head3 bind Binds to the LDAP server using $self->{managerDn} and $self->{managerPassword} if exist. Anonymous bind is provided else. =head3 search Retrives the LDAP entry corresponding to the user using $self->{filter}. =head3 setAuthSessionInfo Same as setSessionInfo but implemented in Lemonldap::NG::Portal::Auth* modules. =head3 setSessionInfo Prepares variables to store in central cache (stored temporarily in C<$self->{sessionInfo}>). It use C entry (passed to the new sub) if defined to know what to store else it stores uid, cn and mail attributes. =head3 getSessionInfo Pick up an information stored in session. =head3 setGroups Does nothing by default. =head3 authenticate Method implemented in Lemonldap::NG::Portal::Auth* modules. By default (ldap), authenticates the user by rebinding to the LDAP server using the dn retrived with search() and the password. =head3 grantSession Use grantSessionRule parameter to allow session opening. =head3 store Stores information collected by setSessionInfo into the central cache. The portal connects the cache using the L module passed by the globalStorage parameters (see constructor). =head3 unbind Disconnects from the LDAP server. =head3 buildCookie Creates the Lemonldap::NG cookie. =head3 log Does nothing. To be overloaded if wanted. =head3 autoRedirect Redirects the user to the url stored by controlUrlOrigin(). =head2 Other methods =head3 process Main method. =head3 error Returns the error message corresponding to the error returned by the methods described above =head3 error_type Give the type of the error (positive, warning or positive) =head3 _bind( $ldap, $dn, $password ) Method used to bind to the ldap server. =head3 header Overloads the CGI::header method to add Lemonldap::NG cookie. =head3 redirect Overloads the CGI::redirect method to add Lemonldap::NG cookie. =head2 EXPORT =head3 Constants =over 5 =item * B: all is good =item * B: the user session has expired =item * B: Nothing was entered in the login form =item * B: the user was not found in the (ldap) directory =item * B: the account used to bind to LDAP server in order to find the user distinguished name (dn) was refused by the server =item * B: bad login or password =item * B: abnormal error from ldap =item * B: abnormal error from Apache::Session =item * B: First access to the portal =item * B: Wrong certificate =item * PE_PP_ACCOUNT_LOCKED: account locked =item * PE_PP_PASSWORD_EXPIRED: password axpired =item * PE_CERTIFICATEREQUIRED: certificate required =item * PE_ERROR: unclassified error =back =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =item Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2006, 2007, 2008, 2009, 2010, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by Sandro Cazzaniga, Ecazzaniga.sandro@gmail.comE =item Copyright (C) 2012, 2012, 2013 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2010, 2011 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/RegisterDBNull.pm0000644000175000017500000000060212542740733027231 0ustar clementclement##@file # Null register backend file ##@class # Null register backend class package Lemonldap::NG::Portal::RegisterDBNull; use strict; use Lemonldap::NG::Portal::Simple; our $VERSION = '1.4.0'; sub getLogin { my $self = splice @_; $self->{registerInfo}->{login} = ""; return PE_OK; } sub createUser { return PE_OK; } sub registerDBFinish { return PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthProxy.pm0000644000175000017500000000736212542740733026361 0ustar clementclement## @file # Proxy authentication module ## @class # Proxy authentication module: It simply call another Lemonldap::NG portal by # SOAP using credentials package Lemonldap::NG::Portal::AuthProxy; use strict; use Lemonldap::NG::Portal::_Proxy; use Lemonldap::NG::Portal::_WebForm; use Lemonldap::NG::Portal::Simple; use base qw(Lemonldap::NG::Portal::_WebForm Lemonldap::NG::Portal::_Proxy); our $VERSION = '1.2.0'; ## @apmethod int authInit() # Call Lemonldap::NG::Portal::_Proxy::proxyInit(); # @return Lemonldap::NG::Portal constant *authInit = *Lemonldap::NG::Portal::_Proxy::proxyInit; ## @apmethod int authenticate() # Call Lemonldap::NG::Portal::_Proxy::proxyQuery() # @return Lemonldap::NG::Portal constant *authenticate = *Lemonldap::NG::Portal::_Proxy::proxyQuery; ## @apmethod int setAuthSessionInfo() # Call Lemonldap::NG::Portal::_Proxy::setSessionInfo() # @return Lemonldap::NG::Portal constant *setAuthSessionInfo = *Lemonldap::NG::Portal::_Proxy::setSessionInfo; ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "standardform"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthProxy - Authentication module for Lemonldap::NG that delegates authentication to a remote Lemonldap::NG portal. The difference with Remote authentication module is that the client will never be redirect to the main Lemonldap::NG portal. This configuration is usable if you want to expose your internal SSO to another network (DMZ). =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::SharedConf( # REQUIRED PARAMETERS authentication => 'Proxy', userDB => 'Proxy', soapAuthService => 'https://auth.internal.network/', # OTHER PARAMETERS # remoteCookieName (default: same name) remoteCookieName => 'lemonldap', # soapSessionService (default ${soapAuthService}index.pl/sessions) soapSessionService => 'https://auth2.internal.network/index.pl/sessions', ); =head1 DESCRIPTION Authentication module for Lemonldap::NG portal that forward credentials to a remote Lemonldap::NGportal using SOAP request. Note that the remote portal must accept SOAP requests ("Soap=>1"). =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/SharedConf.pm0000644000175000017500000002056012542740733026425 0ustar clementclement## @file # Main portal for Lemonldap::NG portal ## @class # Main portal for Lemonldap::NG portal package Lemonldap::NG::Portal::SharedConf; use strict; use Lemonldap::NG::Portal::Simple qw(:all); use Lemonldap::NG::Common::Conf; #link protected lmConf Configuration use Lemonldap::NG::Common::Conf::Constants; #inherits use Regexp::Assemble; use URI::Split qw(uri_split); *EXPORT_OK = *Lemonldap::NG::Portal::Simple::EXPORT_OK; *EXPORT_TAGS = *Lemonldap::NG::Portal::Simple::EXPORT_TAGS; *EXPORT = *Lemonldap::NG::Portal::Simple::EXPORT; our $VERSION = '1.4.2'; use base qw(Lemonldap::NG::Portal::Simple); our $confCached; BEGIN { eval { require threads::shared; threads::shared::share($confCached); }; } ################## # OVERLOADED SUB # ################## ## @method protected boolean getConf(hashRef args) # Copy all parameters returned by the Lemonldap::NG::Common::Conf object in $self. # @param args hash # @return True sub getConf { my $self = shift; my %args; if ( ref( $_[0] ) ) { %args = %{ $_[0] }; } else { %args = @_; } if ( defined( $args{configStorage} ) ) { $self->{configStorage} = $args{configStorage}; } my $num; my $lConf; # If useLocalConf is set, just verify that current conf has the same number # than local cache one if ( $confCached and $confCached->{useLocalConf} ) { $lConf = $self->__lmConf->getLocalConf(PORTALSECTION); eval { $num = $lConf->{cfgNum} }; } else { $num = $self->__lmConf->lastCfg(); } # Reload configuration unless ( $confCached and $confCached->{cfgNum} == $num ) { $lConf ||= $self->__lmConf->getLocalConf(PORTALSECTION); my $prm = { cfgNum => $num }; if ( $args{useLocalConf} or $lConf->{useLocalConf} ) { $prm->{local} = 1; $self->lmLog( 'useLocalConf set to true', 'debug' ); } my $gConf = $self->__lmConf->getConf($prm); unless ( ref($gConf) and ref($lConf) ) { $self->abort( "Cannot get configuration", $Lemonldap::NG::Common::Conf::msg ); } $self->lmLog( "Cached configuration too old, get configuration $num " . "($Lemonldap::NG::Common::Conf::msg)", 'debug' ); %$confCached = ( %$gConf, %$lConf ); my $re = Regexp::Assemble->new(); foreach my $vhost ( keys %{ $confCached->{locationRules} } ) { my $quotedVhost = quotemeta($vhost); $self->lmLog( "Vhost $vhost added in reVHosts", 'debug' ); $re->add($quotedVhost); # Add aliases if ( $confCached->{vhostOptions}->{$vhost}->{vhostAliases} ) { foreach my $alias ( split /\s+/, $confCached->{vhostOptions}->{$vhost}->{vhostAliases} ) { $self->lmLog( "Alias $alias added in reVHosts", 'debug' ); $re->add( quotemeta($alias) ); } } } # Add portal vhost my ( $portal_scheme, $portal_auth ) = uri_split( $confCached->{portal} ); $re->add($portal_auth); $self->lmLog( "Portal vhost $portal_auth added in reVHosts", 'debug' ); $confCached->{reVHosts} = $re->as_string; } %$self = ( %$self, %$confCached, %args, ); $self->lmLog( "Now using configuration: " . $confCached->{cfgNum}, 'debug' ); 1; } sub __lmConf { my $self = shift; return $self->{lmConf} if ( $self->{lmConf} ); my $r = Lemonldap::NG::Common::Conf->new( $self->{configStorage} ); $self->abort( "Cannot create configuration object", $Lemonldap::NG::Common::Conf::msg ) unless ( ref($r) ); $self->{lmConf} = $r; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::SharedConf - Module for building Lemonldap::NG compatible portals using a central configuration database. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::SharedConf( { configStorage => { type => 'DBI', dbiChain => "dbi:mysql:...", dbiUser => "lemonldap", dbiPassword => "password", dbiTable => "lmConfig", }, # Activate SOAP service Soap => 1 } ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # Write here the html form used to authenticate with CGI methods. # $portal->error returns the error message if athentification failed # Warning: by defaut, input names are "user" and "password" print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see L) print "..."; print '
    '; # In your form, the following value is required for redirection print ''; # Next, login and password print 'Login :
    '; print 'Password : '; print ''; print '
    '; } SOAP mode authentication (client) : #!/usr/bin/perl -l use SOAP::Lite; use Data::Dumper; my $soap = SOAP::Lite->proxy('http://auth.example.com/') ->uri('urn:/Lemonldap::NG::Common::::CGI::SOAPService'); my $r = $soap->getCookies( 'user', 'password' ); # Catch SOAP errors if ( $r->fault ) { print STDERR "SOAP Error: " . $r->fault->{faultstring}; } else { my $res = $r->result(); # If authentication failed, display error if ( $res->{error} ) { print STDERR "Error: " . $soap->error( $res->{error} )->result(); } # print session-ID else { print "Cookie: lemonldap=" . $res->{cookies}->{lemonldap}; } } =head1 DESCRIPTION Lemonldap::NG::Portal::SharedConf is the base module for building Lemonldap::NG compatible portals using a central database configuration. You have to use by inheritance. See L for a complete example. =head1 METHODS Same as L, but Lemonldap::NG::Portal::SharedConf adds a new sub: =over =item * scanexpr: used by setGroups to read combined LDAP and Perl expressions. See L for more. =back =head3 Args Lemonldap::NG::Portal::SharedConf use the same arguments than L, but you can set them either using local variables passed to C or using variables issued from the database. =head2 EXPORT =head3 Constants Same as L. =head1 SEE ALSO L, L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2006, 2007, 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2006, 2009, 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBSAML.pm0000644000175000017500000001543012542740733026212 0ustar clementclement## @file # UserDB SAML module ## @class # UserDB SAML module package Lemonldap::NG::Portal::UserDBSAML; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_SAML; use Encode; our @ISA = qw(Lemonldap::NG::Portal::_SAML); our $VERSION = '1.0.0'; ## @apmethod int userDBInit() # Check if authentication module is SAML # @return Lemonldap::NG::Portal error code sub userDBInit { my $self = shift; if ( $self->get_module('auth') =~ /^SAML/ ) { return PE_OK; } else { $self->lmLog( "SAML user module require SAML authentication", 'error' ); return PE_SAML_ERROR; } } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal error code sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Get all required attributes # @return Lemonldap::NG::Portal error code sub setSessionInfo { my $self = shift; my $idp = $self->{_idp}; my $idpConfKey = $self->{_idpConfKey}; my $nameid = $self->{_nameID}; my $exportedAttr; # Force UTF-8 my $force_utf8 = $self->{samlIDPMetaDataOptions}->{$idpConfKey} ->{samlIDPMetaDataOptionsForceUTF8}; # Get all required attributes, not already set # in setAuthSessionInfo() foreach ( keys %{ $self->{samlIDPMetaDataExportedAttributes}->{$idpConfKey} } ) { # Extract fields from exportedAttr value my ( $mandatory, $name, $format, $friendly_name ) = split( /;/, $self->{samlIDPMetaDataExportedAttributes}->{$idpConfKey}->{$_} ); # Keep mandatory attributes not sent in authentication response if ( $mandatory and not defined $self->{sessionInfo}->{$_} ) { $exportedAttr->{$_} = $self->{samlIDPMetaDataExportedAttributes}->{$idpConfKey}->{$_}; $self->lmLog( "Attribute $_ will be requested to $idpConfKey", 'debug' ); } } unless ( keys %$exportedAttr ) { $self->lmLog( "All mandatory attributes were present in authentication response", 'debug' ); return PE_OK; } # Save current Lasso::Server object, and get a new one my $current_server = $self->{_lassoServer}; $self->loadService(1); my $server = $self->{_lassoServer}; unless ($server) { $self->lmLog( "Unable to create service for attribute request", 'error' ); return PE_SAML_LOAD_SERVICE_ERROR; } $self->lmLog( "Service for attribute request created", 'debug' ); # Add current IDP as Attribute Authority my $idp_metadata = $self->{samlIDPMetaDataXML}->{$idpConfKey}->{samlIDPMetaDataXML}; if ( $self->{samlMetadataForceUTF8} ) { $idp_metadata = encode( "utf8", $idp_metadata ); } # Add this IDP to Lasso::Server as AA unless ( $self->addAA( $server, $idp_metadata ) ) { $self->lmLog( "Fail to use IDP $idpConfKey Metadata as Attribute Authority", 'error' ); return PE_SAML_LOAD_IDP_ERROR; } # Build Attribute Request my $query = $self->createAttributeRequest( $server, $idp, $exportedAttr, $nameid ); unless ($query) { $self->lmLog( "Unable to build attribute request for $idpConfKey", 'error' ); return PE_SAML_ATTR_ERROR; } # Use SOAP to send request and get response my $query_url = $query->msg_url; my $query_body = $query->msg_body; # Send SOAP request and manage response my $response = $self->sendSOAPMessage( $query_url, $query_body ); unless ($response) { $self->lmLog( "No attribute response to SOAP request", 'error' ); return PE_SAML_ATTR_ERROR; } # Manage Attribute Response my $result = $self->processAttributeResponse( $server, $response ); unless ($result) { $self->lmLog( "Fail to process attribute response", 'error' ); return PE_SAML_ATTR_ERROR; } # Attributes in response my @response_attributes; eval { @response_attributes = $result->response()->Assertion()->AttributeStatement()->Attribute(); }; if ($@) { $self->lmLog( "No attributes defined in attribute response", 'error' ); return PE_SAML_ATTR_ERROR; } # Check we have all required attributes foreach ( keys %$exportedAttr ) { # Extract fields from exportedAttr value my ( $mandatory, $name, $format, $friendly_name ) = split( /;/, $exportedAttr->{$_} ); # Try to get value my $value = $self->getAttributeValue( $name, $format, $friendly_name, \@response_attributes, $force_utf8 ); unless ($value) { $self->lmLog( "Attribute $_ is mandatory, but was not delivered by $idpConfKey", 'error' ); return PE_SAML_ATTR_ERROR; } $self->lmLog( "Get value $value for attribute $_", 'debug' ); # Store value in sessionInfo $self->{sessionInfo}->{$_} = $value; } # Restore current Lasso::Server $self->{_lassoServer} = $current_server; return PE_OK; } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal error code sub setGroups { PE_OK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::UserDBSAML - SAML User backend =head1 SYNOPSIS use Lemonldap::NG::Portal::UserDBSAML; =head1 DESCRIPTION Collect all required attributes trough SAML Attribute Requests =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2009, 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2010 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Slave.pm0000644000175000017500000000112712542740733025620 0ustar clementclement##@file # Slave common functions ##@class # Slave common functions package Lemonldap::NG::Portal::_Slave; use Exporter; use base qw(Exporter); use strict; our @EXPORT = qw(checkIP); our $VERSION = '1.2.0'; ## @method Lemonldap::NG::Portal::_Slave checkIP() # @return true if remote IP is accredited in LL::NG conf sub checkIP { my $self = shift; my $remoteIP = $self->remote_addr; return 1 if (!$self->{slaveMasterIP} || $self->{slaveMasterIP} =~ /\b$remoteIP\b/ ); $self->_sub( 'userError', "Client IP not accredited for Slave module" ); return 0; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_i18n.pm0000644000175000017500000004767112542740733025343 0ustar clementclement##@file # Internationalization for Lemonldap::NG portal ##@class # Internationalization for Lemonldap::NG portal package Lemonldap::NG::Portal::_i18n; # Developpers warning : this file must stay UTF-8 encoded use AutoLoader qw(AUTOLOAD); our $VERSION = '1.4.0'; use utf8; ## @fn string msg(int msg, array ref lang) # @param $msg Number of msg to resolve # @param $lang Array ref for 2-letters languages (e.g. ['es', 'fr']) # @return Message string in the first matching language sub msg { my ( $msg, $lang ) = splice @_; foreach ( @{$lang} ) { if ( __PACKAGE__->can("msg_$_") ) { return &{"msg_$_"}->[$msg]; } } return &msg_en->[$msg]; } ## @fn string error(int error, array ref lang) # @param $error Number of error to resolve # @param $lang Array ref for 2-letters languages (e.g. ['es', 'fr']) # @return Error string in the first matching language sub error { my ( $error, $lang ) = splice @_; $error = 0 if ( $error < 0 ); foreach ( @{$lang} ) { if ( __PACKAGE__->can("error_$_") ) { my $tmp = &{"error_$_"}->[$error]; utf8::encode($tmp) if ( $ENV{FCGI_ROLE} ); return $tmp; } } return &error_en->[$error]; } 1; __END__ # Order of the constants: # * PE_OK 0 # * PE_SESSIONEXPIRED 1 # * PE_FORMEMPTY 2 # * PE_WRONGMANAGERACCOUNT 3 # * PE_USERNOTFOUND 4 # * PE_BADCREDENTIALS 5 # * PE_LDAPCONNECTFAILED 6 # * PE_LDAPERROR 7 # * PE_APACHESESSIONERROR 8 # * PE_FIRSTACCESS 9 # * PE_BADCERTIFICATE 10 # * PE_LA_FAILED 11 # * PE_LA_ARTFAILED 12 # * PE_LA_DEFEDFAILED 13 # * PE_LA_QUERYEMPTY 14 # * PE_LA_SOAPFAILED 15 # * PE_LA_SLOFAILED 16 # * PE_LA_SSOFAILED 17 # * PE_LA_SSOINITFAILED 18 # * PE_LA_SESSIONERROR 19 # * PE_LA_SEPFAILED 20 # * PE_PP_ACCOUNT_LOCKED 21 # * PE_PP_PASSWORD_EXPIRED 22 # * PE_CERTIFICATEREQUIRED 23 # * PE_ERROR 24 # * PE_PP_CHANGE_AFTER_RESET 25 # * PE_PP_PASSWORD_MOD_NOT_ALLOWED 26 # * PE_PP_MUST_SUPPLY_OLD_PASSWORD 27 # * PE_PP_INSUFFICIENT_PASSWORD_QUALITY 28 # * PE_PP_PASSWORD_TOO_SHORT 29 # * PE_PP_PASSWORD_TOO_YOUNG 30 # * PE_PP_PASSWORD_IN_HISTORY 31 # * PE_PP_GRACE 32 # * PE_PP_EXP_WARNING 33 # * PE_PASSWORD_MISMATCH 34 # * PE_PASSWORD_OK 35 # * PE_NOTIFICATION 36 # * PE_BADURL 37 # * PE_NOSCHEME 38 # * PE_BADOLDPASSWORD 39 # * PE_MALFORMEDUSER 40 # * PE_SESSIONNOTGRANTED 41 # * PE_CONFIRM 42 # * PE_MAILFORMEMPTY 43 # * PE_BADMAILTOKEN 44 # * PE_MAILERROR 45 # * PE_MAILOK 46 # * PE_LOGOUT_OK 47 # * PE_SAML_ERROR 48 # * PE_SAML_LOAD_SERVICE_ERROR 49 # * PE_SAML_LOAD_IDP_ERROR 50 # * PE_SAML_SSO_ERROR 51 # * PE_SAML_UNKNOWN_ENTITY 52 # * PE_SAML_DESTINATION_ERROR 53 # * PE_SAML_CONDITIONS_ERROR 54 # * PE_SAML_IDPSSOINITIATED_NOTALLOWED 55 # * PE_SAML_SLO_ERROR 56 # * PE_SAML_SIGNATURE_ERROR 57 # * PE_SAML_ART_ERROR 58 # * PE_SAML_SESSION_ERROR 59 # * PE_SAML_LOAD_SP_ERROR 60 # * PE_SAML_ATTR_ERROR 61 # * PE_OPENID_EMPTY 62 # * PE_OPENID_BADID 63 # * PE_MISSINGREQATTR 64 # * PE_BADPARTNER 65 # * PE_MAILCONFIRMATION_ALREADY_SENT 66 # * PE_PASSWORDFORMEMPTY 67 # * PE_CAS_SERVICE_NOT_ALLOWED 68 # * PE_MAILFIRSTACCESS 69 # * PE_MAILNOTFOUND 70 # * PE_PASSWORDFIRSTACCESS 71 # * PE_MAILCONFIRMOK 72 # * PE_RADIUSCONNECTFAILED 73 # * PE_MUST_SUPPLY_OLD_PASSWORD 74 # * PE_FORBIDDENIP 75 # * PE_CAPTCHAERROR 76 # * PE_CAPTCHAEMPTY 77 # * PE_REGISTERFIRSTACCESS 78 # * PE_REGISTERFORMEMPTY 79 # * PE_REGISTERALREADYEXISTS 80 # Not used in errors: # * PE_DONE -1 # * PE_REDIRECT -2 ## @fn private arrayRef error_fr() # French translation. # @return Array of error messages sub error_fr { use utf8; [ 'Utilisateur authentifié', 'Votre session a expiré, vous devez vous réauthentifier', 'Identifiant ou mot de passe non renseigné', 'Compte ou mot de passe LDAP de l\'application incorrect', 'Utilisateur inexistant', 'Mot de passe ou identifiant incorrect', 'Connexion impossible au serveur LDAP', 'Erreur anormale du serveur LDAP', 'Erreur du module Apache::Session choisi', 'Veuillez vous authentifier', 'Certificat invalide', 'Échec de l\'initialisation de Lasso:Login ou Lasso:Logout', 'Échec de la résolution de l\'artefact Liberty Alliance', 'Échec de la défédération Liberty Alliance', 'La requête renvoyée par le fournisseur d\'identité Liberty Alliance est vide', 'Un des appels SOAP Liberty Alliance a échoué', 'Un des appels de déconnexion Liberty Alliance a échoué', 'Aucun artefact SAML trouvé, ou échec de l\'auto-acceptation SSO', 'Initialisation, construction ou requête SSO en échec', 'Impossible d\'enregistrer l\'identifiant de connexion Liberty Alliance', 'Un processus terminal Liberty Alliance a échoué', 'Votre compte est bloqué', 'Votre mot de passe a expiré', 'Certificat exigé', 'Erreur', 'Le mot de passe a été réinitialisé et doit être changé', 'Modification du mot de passe non autorisée', 'Ancien mot de passe à fournir pour le changer', 'Qualité de mot de passe insuffisante', 'Mot de passe trop court', 'Mot de passe trop récent', 'Mot de passe utilisé trop récemment', ' authentifications restantes, changez votre mot de passe !', '%d jours, %d heures, %d minutes et %d secondes avant expiration de votre mot de passe, pensez à le changer !', 'Les mots de passe ne correspondent pas', 'Le mot de passe a été changé', 'Vous avez un nouveau message', 'Mauvaise URL', 'Aucun schéma disponible', 'Ancien mot de passe invalide', 'Nom d\'utilisateur incorrect', 'Ouverture de session interdite', 'Confirmation demandée', 'L\'adresse mail est obligatoire ', 'La clé de confirmation est invalide ou trop ancienne', 'L\'envoi du mail a échoué', 'Un mail vous a été envoyé', 'Vous avez été déconnecté', 'Erreur SAML non définie', 'Impossible de charger le service SAML', 'Problème au chargement d\'un fournisseur d\'identité', 'Une erreur est survenue lors de l\'authentification SAML', 'Le partenaire SAML n\'est pas reconnu', 'La destination du message SAML est incorrecte', 'Les conditions du message SAML ne sont pas respectées', 'L\'authentification initiée par le fournisseur d\'identité n\'est pas autorisée', 'Une erreur est survenue lors de la déconnexion SAML', 'Erreur lors de la gestion de la signature du message SAML', 'Une erreur est survenue lors de l\'utilisation d\'un artefact SAML', 'Erreur de communication avec les sessions SAML', 'Problème au chargement d\'un fournisseur de service', 'Une erreur est survenue lors de l\'échange d\'attributs SAML', 'Ceci est une page destinée aux serveurs OpenID', 'Vous tentez d\'utiliser une identité OpenID qui ne vous appartient pas', 'Un attribut exigé n\'est pas disponible', 'Fédération interdite par la politique de sécurité', 'Le mail de confirmation a déjà été envoyé', 'Mot de passe non renseigné', 'Accès non autorisé au service CAS', 'Merci de saisir votre adresse mail', 'Pas d\'utilisateur correspondant', 'Merci de saisir votre nouveau mot de passe', 'Un mail de confirmation vous a été envoyé', 'La connexion au serveur Radius a échoué', "L'ancien mot de passe est obligatoire", 'Vous venez d\'une adresse IP qui n\'est pas accréditée', 'Erreur dans la saisie du captcha', 'Vous devez saisir le captcha', 'Merci de saisir vos informations', 'Une information est manquante', 'Cette adresse est déjà utilisée', ]; } ## @fn private arrayRef error_en() # English translation. # @return Array of error messages sub error_en { [ 'User authenticated', 'Your connection has expired, you must authenticate once again', 'User and password fields must be filled', 'Wrong directory manager account or password', 'User not found in directory', 'Wrong credentials', 'Unable to connect to LDAP server', 'Abnormal error from LDAP server', 'Apache::Session module failed', 'Authentication required', 'Invalid certificate', 'Initialization of Lasso:Login or Lasso:Logout failed', 'Liberty-Alliance artefact resolution failed', 'Liberty-Alliance defederation failed', 'Liberty-Alliance query returned by IDP in assertion is empty', 'One of Liberty-Alliance soap calls failed', 'One of Liberty-Alliance single logout failed', 'No SAML artefact found, or auto-accepting SSO failed', 'Initializing, building or requesting SSO failed', 'Unable to store Liberty-Alliance session id', 'A Liberty-Alliance Soap End Point process failed', 'Your account is locked', 'Your password has expired', 'Certificate required', 'Error', 'Password has been reset and now must be changed', 'Password may not be modified', 'Old password must also be supplied when setting a new password', 'Insufficient password quality', 'Password too short', 'Password too young', 'Password used too recently', ' authentications remaining, change your password!', '%d days, %d hours, %d minutes and %d seconds before password expiration, change it!', 'Passwords mismatch', 'Password successfully changed', 'You have a new message', 'Bad URL', 'No scheme available', 'Bad old password', 'Bad username', 'Session opening not allowed', 'Confirmation required', 'Your mail address is mandatory', 'Confirmation key is invalid or too old', 'An error occurs when sending mail', 'A mail has been sent', 'You have been disconnected', 'Undefined SAML error', 'Unable to load SAML service', 'Problem when loading an identity provider', 'An error occured during SAML single sign on', 'SAML entity is not known', 'SAML message destination is not correct', 'SAML message conditions are not respected', 'Identity provider initiated single sign on is not authorized', 'An error occured during SAML single logout', 'Error in SAML message signature management', 'An error occured during SAML artifact use', 'Communication error with SAML sessions', 'Problem when loading a service provider', 'An error occured during SAML attributes exchange', 'This is an OpenID endpoint page', 'You try to use an OpenID identity which is not yours', 'A required attribute is not available', 'Federation forbidden by security policy', 'The confirmation mail was already sent', 'Password field must be filled', 'Access non granted on CAS service', 'Please provide your mail address', 'No matching user', 'Please provide your new password', 'A confirmation mail has been sent', 'Radius connection has failed', 'Old password is required', 'You came from an unaccredited IP address', 'You failed at typing the captcha', 'You have to type the captcha', 'Please enter your information', 'An information is missing', 'This address is already used', ]; } ## @fn private arrayRef error_ro() # Romanian translation. # @return Array of error messages sub error_ro { use utf8; [ 'Utilizator autentificat', 'Sesiunea dvs. a expirat, trebuie să vă reautentificaţi', 'Identificator sau parolă inexistentă', 'Cont sau parolă LDAP a aplicaţiei incorect', 'Utilizator inexistent', 'Parolă sau identificator incorect', 'Conexiune imposibilă la serverul LDAP', 'Eroare anormală a serverului LDAP', 'Eroare a modulului Apache::Session aleasă', 'Autentificare cerută', 'Certificat invalid', 'Eşec al iniţializării Lasso:Login sau Lasso:Logout', 'Eşec al rezoluţiei artefact-ului Liberty Alliance', 'Eşec al defederaţiei Liberty Alliance', 'Cererea retrimisă de către furnizorul de identitate Liberty Alliance este goală', 'Unul dintre apelurile SOAP Liberty Alliance a eşuat', 'Unul dintre apelurile de deconectare Liberty Alliance a eşuat', 'Nici un artefact SAML găsit, sau eşec al auto-acceptării SSO', 'Iniţiere, construcţie sau cerere SSO în eşec', 'Imposibil de a înregistra identificatorul de conectare Liberty Alliance', 'Un proces terminal Liberty Alliance a eşuat', 'Contul dvs. este blocat', 'Parola dvs. a expirat', 'Certificat cerut', 'Eroare', 'Parola a fost de resetare şi acum trebuie să fie schimbat', 'Parola nu poate fi modificat', 'Vechea parolă trebuie să fi, de asemenea, furnizate atunci când stabilesc o nouă parolă', 'Calitate parola insuficiente', 'Parola prea scurt', 'Prea parolă nouă', 'Parola folosit prea recent', ' authentications rămase, schimbaţi-vă parola!', '%d zile, %d ora, %d minute şi %d secundes înainte de expirarea parola dvs., asiguraţi-vă pentru a schimba!', 'Parolele nu se potrivesc', 'Parola a fost schimbată', 'Ai un mesaj nou', 'Rea URL', 'Nici o posibilitate disponibilă', 'Parola rău vechi', 'Nume de utilizator gresit', 'Conectare neautorizată', 'Confirmare necesare', 'Vă rugăm să introduceţi adresa dvs. de e-mail', 'Cheie de confirmare este invalid sau prea veche', 'Trimiterea mail nu a reuşit', 'Un e-mail a fost trimis', 'Aţi fost deconectat', 'SAML eroare necunoscută', 'Imposibil de a incarca serviciul SAML', 'Problem when loading an identity provider', 'Nu a fost o problemă la încărcarea unui furnizor de identitate', 'Entitatea SAML este necunoscut', 'Destinaţie de mesaj SAML nu este corectă', 'Condiţiile de mesaj SAML nu sunt îndeplinite', 'Autentificarea iniţiat de furnizor de identitate nu este permisă', 'A apărut o eroare atunci când debranşaţi SAML', 'Mesaj de eroare de gestionare a SAML semnatura', 'A apărut o eroare în timp ce folosiţi un artefact SAML', 'eroare de comunicare cu sesiuni SAML', 'Problemă la încărcarea unui furnizor de servicii', 'A apărut o eroare în timpul schimbului de SAML atribute', 'Această pagină este proiectat pentru servere OpenID', 'Când încercaţi să utilizaţi o identitate OpenID care nu vă aparţine', 'Un atribut solicitate nu sunt disponibile', 'Federation forbidden by security policy', 'The confirmation mail was already sent', 'Password field must be filled', 'Access non granted on CAS service', 'Vă rugăm să introduceţi adresa dvs. de e-mail', 'No matching user', 'Please provide your new password', 'Un e-mail a fost trimis', 'Radius connection has failed', 'Old password is required', 'You came from an unaccredited IP address', 'You failed at typing the captcha', 'trebuie să introduceţi CAPTCHA', 'Please enter your information', 'An information is missing', 'This address is already used', ]; } # Order of the constants: # * PM_USER 0 # * PM_DATE 1 # * PM_IP 2 # * PM_SESSIONS_DELETED 3 # * PM_OTHER_SESSIONS 4 # * PM_REMOVE_OTHER_SESSIONS 5 # * PM_PP_GRACE 6 # * PM_PP_EXP_WARNING 7 # * PM_SAML_IDPSELECT 8 # * PM_SAML_IDPCHOOSEN 9 # * PM_REMEMBERCHOICE 10 # * PM_SAML_SPLOGOUT 11 # * PM_REDIRECTION 12 # * PM_BACKTOSP 13 # * PM_BACKTOCASURL 14 # * PM_LOGOUT 15 # * PM_OPENID_EXCHANGE 16 # * PM_CDC_WRITER 17 # * PM_OPENID_RPNS 18 # * PM_OPENID_PA 19 # * PM_OPENID_AP 20 # * PM_ERROR_MSG 21 # * PM_LAST_LOGINS 22 # * PM_LAST_FAILED_LOGINS 23 sub msg_en { use utf8; [ 'User', 'Date', 'IP address', 'The following sessions have been closed', 'Other active sessions', 'Remove other sessions', 'authentications remaining, change your password!', '%d days, %d hours, %d minutes and %d seconds before password expiration, change it!', 'Select your Identity Provider', 'Redirection to your Identity Provider', 'Remember my choice', 'Logout from service providers...', 'Redirection in progress...', 'Go back to service provider', 'The application you just logged out of has provided a link it would like you to follow', 'Logout from other applications...', 'Do you want to authenticate yourself on %s ?', 'Update Common Domain Cookie', 'Parameter %s requested for federation isn\'t available', 'Data usage policy is available at', 'Do you agree to provide the following parameters?', 'Error Message', 'Your last logins', 'Your last failed logins', ]; } sub msg_fr { use utf8; [ 'Utilisateur', 'Date', 'Adresse IP', 'Les sessions suivantes ont été fermées', 'Autres sessions ouvertes', 'Fermer les autres sessions', 'authentifications restantes, changez votre mot de passe !', '%d jours, %d heures, %d minutes et %d secondes avant expiration de votre mot de passe, pensez à le changer !', 'Choisissez votre fournisseur d\'identité', 'Redirection vers votre fournisseur d\'identité', 'Se souvenir de mon choix', 'Déconnexion des services...', 'Redirection en cours...', 'Retourner sur le fournisseur de service', 'Le service duquel vous arrivez a fourni un lien que vous êtes invité à suivre', 'Déconnexion des autres applications...', 'Souhaitez-vous vous identifier sur le site %s ?', 'Mise à jour du cookie de domaine commun', 'Le paramètre %s exigé pour la fédération n\'est pas disponible', 'La politique d\'utilisation des données est disponible ici', 'Consentez-vous à communiquer les paramètres suivants ?', 'Message d\'erreur', 'Vos dernières connexions', 'Vos dernières connexions refusées', ]; } lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthChoice.pm0000644000175000017500000001030712542740733026423 0ustar clementclement##@file # Choice authentication backend file ##@class # Choice authentication backend class package Lemonldap::NG::Portal::AuthChoice; use strict; use Lemonldap::NG::Portal::_Choice; use Lemonldap::NG::Portal::Simple; #inherits Lemonldap::NG::Portal::_Choice our $VERSION = '1.0.2'; ## @apmethod int authInit() # Build authentication loop # Check authChoice parameter # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; # Build authLoop $self->{authLoop} = $self->_buildAuthLoop(); return $self->_choice->try( 'authInit', 0 ); } ## @apmethod int setAuthSessionInfo() # Remember authChoice in session # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; $self->{sessionInfo}->{_authChoice} = $self->{_authChoice}; return $self->_choice->try( 'setAuthSessionInfo', 0 ); } ## @apmethod int extractFormInfo() # Does nothing # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; return $self->_choice->try( 'extractFormInfo', 0 ); } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; return $self->_choice->try( 'authenticate', 0 ); } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { my $self = shift; return $self->_choice->try( 'authFinish', 0 ); } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { my $self = shift; return $self->_choice->try( 'authLogout', 0 ); } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { my $self = shift; return $self->_choice->try( 'authForce', 0 ); } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthChoice - Perl extension for building LemonLDAP::NG compatible portals with authentication choice. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Choice', authChoiceModules => { '1Local' => 'LDAP|LDAP|LDAP', '2OpenID' => 'OpenID|Null|Null' }, ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to prompt for authentication choice. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/IssuerDBOpenID.pm0000644000175000017500000002366312542740733027137 0ustar clementclement## @file # OpenID Issuer file ## @class # OpenID Issuer class package Lemonldap::NG::Portal::IssuerDBOpenID; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Regexp; # Special comments for doxygen #inherits Lemonldap::NG::Portal::OpenID::Server #link Lemonldap::NG::Portal::OpenID::SREG protected sreg_extension our $VERSION = '1.4.2'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @method void issuerDBInit() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerDBInit { my $self = shift; $self->{openIdIssuerSecret} ||= $self->{cipher}->encrypt(0); my $tmp = $self->{openIdSPList}; $tmp =~ s/^(\d);//; $self->{_openIdSPListIsWhite} = $1 + 0; $self->{_reopenIdSPList} = Lemonldap::NG::Common::Regexp::reDomainsToHost($tmp); return PE_OK if ($initDone); eval { require Lemonldap::NG::Portal::OpenID::Server }; $self->abort( 'Unable to load Net::OpenID::Server', $@ ) if ($@); $initDone = 1; return PE_OK; } ## @apmethod int issuerForUnAuthUser() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerForUnAuthUser { my $self = shift; # Restore datas $self->restoreOpenIDprm(); my $mode = $self->param('openid.mode'); unless ($mode) { $self->lmLog( 'OpenID SP test', 'debug' ); return PE_OPENID_EMPTY; } # Fill user attribute with OpenID user identity $self->{user} = ( split '/', $self->param('openid.identity') )[-1]; $self->lmLog( "Get OpenID user " . $self->{user}, 'debug' ); if ( $mode eq 'associate' ) { return $self->_openIDResponse( $self->openIDServer->_mode_associate() ); } elsif ( $mode eq 'check_authentication' ) { return $self->_openIDResponse( $self->openIDServer->_mode_check_authentication() ); } else { $self->storeOpenIDprm(); return PE_OK; } } ## @apmethod int issuerForAuthUser() # Do nothing # @return Lemonldap::NG::Portal error code sub issuerForAuthUser { my $self = shift; # Restore datas $self->restoreOpenIDprm(); my $mode = $self->param('openid.mode'); unless ($mode) { $self->lmLog( 'OpenID SP test', 'debug' ); return PE_OPENID_EMPTY; } unless ( $mode =~ /^checkid_(?:immediate|setup)/ ) { $self->lmLog( "OpenID error : $mode is not known at this step (issuerForAuthUser)", 'error' ); return PE_ERROR; } my @r = $self->openIDServer->_mode_checkid(); return $self->_openIDResponse(@r); } ## @apmethod int issuerLogout() # Does nothing since OpenID does not provide any logout system # @return Lemonldap::NG::Portal error code sub issuerLogout { PE_OK; } ## @method private void storeOpenIDprm() # Store openid parameters in a hidden value for forms using # setHiddenFormValue() sub storeOpenIDprm { my $self = shift; # Store all openid.* parameters my $params = {}; foreach ( keys %{ $self->{_prm} } ) { next if $_ !~ /^openid\./; $params->{$_} = $self->{_prm}->{$_}; } $self->setHiddenFormValue( 'openidprm', Storable::nfreeze($params) ); } ## @method private void restoreOpenIDprm() # Restore initial openid parameters stored with storeOpenIDprm() sub restoreOpenIDprm { my $self = shift; return if ( $self->{openIDRestored} ); if ( my $tmp = $self->getHiddenFormValue('openidprm') ) { $self->lmLog( 'Restore OpenID parameters', 'debug' ); eval { $tmp = Storable::thaw($tmp); $self->{_prm}->{$_} = $tmp->{$_} foreach ( keys %$tmp ); }; } $self->{openIDRestored} = 1; } ## @method private Lemonldap::NG::Portal::OpenID::Server openIDServer() # Create if not done a new Lemonldap::NG::Portal::OpenID::Server objet # @return Lemonldap::NG::Portal::OpenID::Server object sub openIDServer { my $self = shift; return $self->{_openidserver} if ( $self->{_openidserver} ); my $path = $self->{issuerDBOpenIDPath}; $path =~ s/\^//; $self->{_openidPortal} = $self->{portal} . $path; $self->{_openidPortal} =~ s#(?param(@_) }; $self->{_openidserver} = Lemonldap::NG::Portal::OpenID::Server->new( server_secret => sub { return $self->{openIdIssuerSecret} }, args => $sub, endpoint_url => $self->{_openidPortal}, setup_url => $self->{_openidPortal}, get_user => sub { return $self->{sessionInfo} ->{ $self->{openIdAttr} || $self->{whatToTrace} }; }, get_identity => sub { my ( $u, $identity ) = @_; return $identity unless $u; return $self->{_openidPortal} . $u; }, is_identity => sub { my ( $u, $identity ) = @_; return 0 unless ( $u and $identity ); if ( $u eq ( split '/', $identity )[-1] ) { return 1; } else { $self->{_badOpenIdentity} = 1; return 0; } }, is_trusted => sub { my ( $u, $trust_root, $is_identity ) = @_; return 0 unless ( $u and $is_identity ); my $tmp = $trust_root; $tmp =~ s#^http://(.*?)/#$1#; if ( $tmp =~ $self->{_reopenIdSPList} xor $self->{_openIdSPListIsWhite} ) { $self->lmLog( "$trust_root is forbidden for openID exchange", 'warn' ); $self->{_openIdForbidden} = 1; return 0; } elsif ( $self->{sessionInfo}->{"_openidTrust$trust_root"} ) { $self->lmLog( 'OpenID request already trusted', 'debug' ); return 1; } elsif ( $self->param("confirm") == 1 ) { $self->updatePersistentSession( { "_openidTrust$trust_root" => 1 } ); return 1; } elsif ( $self->param("confirm") == -1 ) { $self->updatePersistentSession( { "_openidTrust$trust_root" => 0 } ); return 0; } else { $self->lmLog( 'OpenID request not trusted' . $sub->("confirm"), 'debug' ); $self->{_openIdTrustRequired} = 1; return 0; } }, extensions => { sreg => sub { return ( 1, {} ) unless (@_); require Lemonldap::NG::Portal::OpenID::SREG; return $self->Lemonldap::NG::Portal::OpenID::SREG::sregHook(@_); }, }, ); return $self->{_openidserver}; } ## @method private int _openIDResponse() # Manage Lemonldap::NG::Portal::OpenID::Server responses # @return Lemonldap::NG::Portal error code sub _openIDResponse { my ( $self, $type, $data ) = splice @_; # Redirect if ( $type eq 'redirect' ) { $self->lmLog( "OpenID redirection to $data", 'debug' ); $self->{urldc} = $data; print $self->_sub('autoRedirect'); } # Setup elsif ( $type eq 'setup' ) { if ( $self->{_openIdTrustRequired} or $self->{_openIdTrustExtMsg} ) { # TODO $self->info( '

    ' . sprintf( $self->msg(PM_OPENID_EXCHANGE), $data->{trust_root} ) . "

    " ); $self->info( $self->{_openIdTrustExtMsg} ) if ( $self->{_openIdTrustExtMsg} ); $self->lmLog( 'OpenID confirmation', 'debug' ); $self->storeOpenIDprm(); return PE_CONFIRM; } elsif ( $self->{_badOpenIdentity} ) { $self->userNotice( "The user $self->{sessionInfo}->{_user} tries to use the id \"$data->{identity}\" on $data->{trust_root}" ); return PE_OPENID_BADID; } elsif ( $self->{_openIdForbidden} ) { return PE_BADPARTNER; } # User has refused sharing its datas else { $self->userNotice( $self->{sessionInfo}->{ $self->{whatToTrace} } . ' refused to share its OpenIdentity' ); return PE_OK; } } elsif ($type) { $self->lmLog( "OpenID generated page ($type)", 'debug' ); print $self->header($type); print $data; } else { $self->abort( 'OpenID error ', $self->openIDServer->err() ); } $self->quit(); } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::IssuerDBOpenID - OpenID IssuerDB for Lemonldap::NG =head1 DESCRIPTION OpenID Issuer implementation in LemonLDAP::NG =head1 SEE ALSO L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Register.pm0000644000175000017500000003611212542740733026175 0ustar clementclement## @file # Module for registering a new user ## @class Lemonldap::NG::Portal::Register # Module for registering a new user package Lemonldap::NG::Portal::Register; use strict; use warnings; our $VERSION = '1.4.5'; use Lemonldap::NG::Portal::Simple qw(:all); use base qw(Lemonldap::NG::Portal::SharedConf Exporter); use HTML::Template; use Encode; use POSIX qw(strftime); #inherits Lemonldap::NG::Portal::_SMTP *EXPORT_OK = *Lemonldap::NG::Portal::Simple::EXPORT_OK; *EXPORT_TAGS = *Lemonldap::NG::Portal::Simple::EXPORT_TAGS; *EXPORT = *Lemonldap::NG::Portal::Simple::EXPORT; ## @method boolean process() # Call functions for registering user # - itself: # - smtpInit # - extractRegisterInfo # - storeRegisterSession # - sendConfirmationMail # - registerUser # - sendRegisterMail # - authentication module: # - authInit # - authFinish # - userDB module: # - userDBInit # - getUser # - userDBFinish # - registerDB module: # - getLogin # - createUser # - registerDBFinish # @return 1 if all is OK sub process { my ($self) = splice @_; # Process subroutines $self->{error} = PE_OK; $self->{error} = $self->_subProcess( qw(smtpInit authInit extractRegisterInfo userDBInit getRegisterUser userDBFinish storeRegisterSession sendConfirmationMail registerUser registerDBFinish sendRegisterMail authFinish) ); return ( ( $self->{error} <= 0 or $self->{error} == PE_CAPTCHAERROR or $self->{error} == PE_CAPTCHAEMPTY or $self->{error} == PE_MAILCONFIRMOK or $self->{error} == PE_MAILOK ) ? 0 : 1 ); } ## @method int smtpInit() # Load SMTP methods # @return Lemonldap::NG::Portal constant sub smtpInit { my ($self) = splice @_; eval { use base qw(Lemonldap::NG::Portal::_SMTP) }; if ($@) { $self->lmLog( "Unable to load SMTP functions ($@)", 'error' ); return PE_ERROR; } PE_OK; } ## @method int extractRegisterInfo # Get info from form or from register_token # @return Lemonldap::NG::Portal constant sub extractRegisterInfo { my ($self) = splice @_; if ( $self->{captcha_register_enabled} ) { eval { $self->initCaptcha(); }; $self->lmLog( "Can't init captcha: $@", "error" ) if $@; } unless ( $self->param('mail') || $self->param('register_token') ) { return PE_REGISTERFIRSTACCESS if ( $self->request_method =~ /GET/ ); return PE_REGISTERFORMEMPTY; } $self->{register_token} = $self->param('register_token'); # If a register token is present, find the corresponding info if ( $self->{register_token} ) { $self->lmLog( "Token given for register: " . $self->{register_token}, 'debug' ); # Get the corresponding session my $registerSession = $self->getApacheSession( $self->{register_token} ); if ( $registerSession && $registerSession->data ) { $self->{registerInfo}->{mail} = $registerSession->data->{mail}; $self->{registerInfo}->{firstname} = $registerSession->data->{firstname}; $self->{registerInfo}->{lastname} = $registerSession->data->{lastname}; $self->{registerInfo}->{ipAddr} = $registerSession->data->{ipAddr}; $self->lmLog( "User associated to token: " . $self->{registerInfo}->{mail}, 'debug' ); } return PE_BADMAILTOKEN unless ( $self->{registerInfo}->{mail} ); } else { # Use submitted value $self->{registerInfo}->{mail} = $self->param('mail'); $self->{registerInfo}->{firstname} = $self->param('firstname'); $self->{registerInfo}->{lastname} = $self->param('lastname'); $self->{registerInfo}->{ipAddr} = $self->ipAddr(); # Captcha for register form # Only if register session does not already exist if ( $self->{captcha_register_enabled} && $self->{registerInfo}->{mail} && !$self->getRegisterSession( $self->{registerInfo}->{mail} ) ) { $self->{captcha_user_code} = $self->param('captcha_user_code'); $self->{captcha_check_code} = $self->param('captcha_code'); unless ( $self->{captcha_user_code} && $self->{captcha_check_code} ) { $self->lmLog( "Captcha not filled", 'warn' ); return PE_CAPTCHAEMPTY; } $self->lmLog( "Captcha data received: " . $self->{captcha_user_code} . " and " . $self->{captcha_check_code}, 'debug' ); # Check captcha my $captcha_result = $self->checkCaptcha( $self->{captcha_user_code}, $self->{captcha_check_code} ); if ( $captcha_result != 1 ) { if ( $captcha_result == -3 or $captcha_result == -2 ) { $self->lmLog( "Captcha failed: wrong code", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == 0 ) { $self->lmLog( "Captcha failed: code not checked (file error)", 'warn' ); return PE_CAPTCHAERROR; } elsif ( $captcha_result == -1 ) { $self->lmLog( "Captcha failed: code has expired", 'warn' ); return PE_CAPTCHAERROR; } } $self->lmLog( "Captcha code verified", 'debug' ); } } # Check mail return PE_MALFORMEDUSER unless ( $self->{registerInfo}->{mail} =~ /$self->{userControl}/o ); PE_OK; } ## @method int getRegisterUser # Search for user using UserDB module # If the user already exists, register is forbidden # @return Lemonldap::NG::Portal constant sub getRegisterUser { my ($self) = splice @_; $self->{mail} = $self->{registerInfo}->{mail}; if ( $self->getUser() == PE_OK ) { # User already exists $self->lmLog( "Register: refuse mail $self->{mail} because already exists in UserDB", 'error' ); return PE_REGISTERALREADYEXISTS; } return PE_OK; } ## @method int storeRegisterSession # Create register session and store token # @return Lemonldap::NG::Portal constant sub storeRegisterSession { my ($self) = splice @_; # Skip this step if confirmation was already sent return PE_OK if ( $self->{register_token} or $self->getRegisterSession( $self->{registerInfo}->{mail} ) ); # Create a new session my $registerSession = $self->getApacheSession(); # Set _utime for session autoremove # Use default session timeout and register session timeout to compute it my $time = time(); my $timeout = $self->{timeout}; my $registerTimeout = $self->{registerTimeout} || $timeout; my $infos = {}; $infos->{_utime} = $time + ( $registerTimeout - $timeout ); # Store expiration timestamp for further use $infos->{registerSessionTimeoutTimestamp} = $time + $registerTimeout; $self->{registerInfo}->{registerSessionTimeoutTimestamp} = $time + $registerTimeout; # Store start timestamp for further use $infos->{registerSessionStartTimestamp} = $time; $self->{registerInfo}->{registerSessionStartTimestamp} = $time; # Store infos $infos->{mail} = $self->{registerInfo}->{mail}; $infos->{firstname} = $self->{registerInfo}->{firstname}; $infos->{lastname} = $self->{registerInfo}->{lastname}; $infos->{ipAddr} = $self->{registerInfo}->{ipAddr}; # Store type $infos->{_type} = "register"; # Update session $registerSession->update($infos); PE_OK; } ## @method int sendConfirmationMail # Send confirmation mail # @return Lemonldap::NG::Portal constant sub sendConfirmationMail { my ($self) = splice @_; # Skip this step if user clicked on the confirmation link return PE_OK if $self->{register_token}; # Check if confirmation mail has already been sent my $register_session = $self->getRegisterSession( $self->{registerInfo}->{mail} ); $self->{mail_already_sent} = ( $register_session and !$self->{id} ) ? 1 : 0; # Read session to get creation and expiration dates $self->{id} = $register_session unless $self->{id}; $self->lmLog( "Register session found: $register_session", 'debug' ); my $registerSession = $self->getApacheSession( $register_session, 1 ); $self->{registerInfo}->{registerSessionTimeoutTimestamp} = $registerSession->data->{registerSessionTimeoutTimestamp}; $self->{registerInfo}->{registerSessionStartTimestamp} = $registerSession->data->{registerSessionStartTimestamp}; # Mail session expiration date my $expTimestamp = $self->{registerInfo}->{registerSessionTimeoutTimestamp}; $self->lmLog( "Register expiration timestamp: $expTimestamp", 'debug' ); $self->{expMailDate} = strftime( "%d/%m/%Y", localtime $expTimestamp ); $self->{expMailTime} = strftime( "%H:%M", localtime $expTimestamp ); # Mail session start date my $startTimestamp = $self->{registerInfo}->{registerSessionStartTimestamp}; $self->lmLog( "Register start timestamp: $startTimestamp", 'debug' ); $self->{startMailDate} = strftime( "%d/%m/%Y", localtime $startTimestamp ); $self->{startMailTime} = strftime( "%H:%M", localtime $startTimestamp ); # Ask if user want another confirmation email if ( $self->{mail_already_sent} and !$self->param('resendconfirmation') ) { return PE_MAILCONFIRMATION_ALREADY_SENT; } # Build confirmation url my $url = $self->{registerUrl} . "?register_token=" . $self->{id}; $url .= '&skin=' . $self->getSkin(); $url .= '&' . $self->{authChoiceParam} . '=' . $self->{_authChoice} if ( $self->{_authChoice} ); # Build mail content my $subject = $self->{registerConfirmSubject}; my $body; my $html = 1; # Use HTML template my $tplfile = $self->getApacheHtdocsPath . "/skins/$self->{portalSkin}/mail_register_confirm.tpl"; $tplfile = $self->getApacheHtdocsPath . "/skins/common/mail_register_confirm.tpl" unless ( -e $tplfile ); my $template = HTML::Template->new( filename => $tplfile, filter => sub { $self->translate_template(@_) } ); $body = $template->output(); # Replace variables in body $body =~ s/\$expMailDate/$self->{expMailDate}/g; $body =~ s/\$expMailTime/$self->{expMailTime}/g; $body =~ s/\$url/$url/g; $body =~ s/\$(\w+)/decode("utf8",$self->{registerInfo}->{$1})/ge; # Send mail return PE_MAILERROR unless $self->send_mail( $self->{registerInfo}->{mail}, $subject, $body, $html ); PE_MAILCONFIRMOK; } ## @method int registerUser # Create the account # @return Lemonldap::NG::Portal constant sub registerUser { my ($self) = splice @_; my $result; # Check mail is still unused $result = $self->getRegisterUser; unless ( $result == PE_OK ) { return $result; } # Generate a complex password my $password = $self->gen_password( $self->{randomPasswordRegexp} ); $self->lmLog( "Generated password: " . $password, 'debug' ); $self->{registerInfo}->{password} = $password; $self->{forceReset} = 1; # Find a login $result = $self->computeLogin; unless ( $result == PE_OK ) { $self->lmLog( "Could not compute login for " . $self->{registerInfo}->{mail}, 'error' ); return $result; } # Create user $self->lmLog( "Create new user $self->{registerInfo}->{login}", 'debug' ); $result = $self->createUser; unless ( $result == PE_OK ) { $self->lmLog( "Could not create user " . $self->{registerInfo}->{login}, 'error' ); return $result; } # Register token can be used only one time, delete the session if all is ok if ( $result == PE_OK ) { # Get the corresponding session my $registerSession = $self->getApacheSession( $self->{register_token} ); if ($registerSession) { $self->lmLog( "Delete register session " . $self->{register_token}, 'debug' ); $registerSession->remove; } else { $self->lmLog( "Register session not found", 'warn' ); } # Force result to PE_OK to continue the process $result = PE_OK; } return $result; } ## @method int sendRegisterMail # Send mail containing a temporary password # @return Lemonldap::NG::Portal constant sub sendRegisterMail { my ($self) = splice @_; # Build mail content my $subject = $self->{registerDoneSubject}; my $body; my $html = 1; # Use HTML template my $tplfile = $self->getApacheHtdocsPath . "/skins/$self->{portalSkin}/mail_register_done.tpl"; $tplfile = $self->getApacheHtdocsPath . "/skins/common/mail_register_done.tpl" unless ( -e $tplfile ); my $template = HTML::Template->new( filename => $tplfile, filter => sub { $self->translate_template(@_) } ); $body = $template->output(); # Replace variables in body $body =~ s/\$(\w+)/decode("utf8",$self->{registerInfo}->{$1})/ge; # Send mail return PE_MAILERROR unless $self->send_mail( $self->{registerInfo}->{mail}, $subject, $body, $html ); PE_MAILOK; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::Register - Regsiter a new user =head1 SYNOPSIS use Lemonldap::NG::Portal::Register; my $portal = new Lemonldap::NG::Portal::Register(); $portal->process(); # Write here HTML to manage errors and confirmation messages =head1 DESCRIPTION Lemonldap::NG::Portal::Register - Register a new user See L for a complete example of use of Lemonldap::Portal::* libraries. =head1 METHODS =head3 process Main method. =head1 SEE ALSO L, L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010, 2012 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/OpenID/0000775000175000017500000000000012542740733025170 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/OpenID/Server.pm0000644000175000017500000002252512542740733027000 0ustar clementclement## @file # Subclass of Net::OpenID::Server that manage OpenID extensions ## @class # Subclass of Net::OpenID::Server that manage OpenID extensions package Lemonldap::NG::Portal::OpenID::Server; use strict; use base qw(Net::OpenID::Server); use fields qw(_extensions); use Net::OpenID::Server; use Lemonldap::NG::Common::Regexp; use constant DEBUG => 0; our $VERSION = '1.4.2'; my $OPENID2_NS = qq!http://specs.openid.net/auth/2.0!; my $OPENID2_ID_SELECT = qq!http://specs.openid.net/auth/2.0/identifier_select!; *_push_url_arg = ( $Net::OpenID::Server::VERSION >= 1.09 ) ? *OpenID::util::push_url_arg : *Net::OpenID::Server::_push_url_arg; ## @cmethod Lemonldap::NG::Portal::OpenID::Server new(hash opts) # Call Net::OpenID::Server::new() and store extensions # @param %opts Net::OpenID::Server options # @return Lemonldap::NG::Portal::OpenID::Server new object sub new { my $class = shift; my $self = fields::new($class); my %opts = splice @_; $self->$_( delete $opts{$_} ) foreach (qw(extensions)); $self->SUPER::new(%opts); #$self->{get_args} = sub { $self->param(@_) }; } ## @method protected void extensions() # Manage "extensions" constructor parameter sub extensions { my $self = shift; $self->{_extensions} = shift; } ## @method protected list _mode_checkid(string mode, boolean redirect_for_setup) # Overload Net::OpenID::Server::_mode_checkid to call extensions hook # @param $mode OpenID mode # @param $redirect_for_setup indicates that user must be redirected or not for # setup # @return (string $type, hashref parameters) sub _mode_checkid { my Lemonldap::NG::Portal::OpenID::Server $self = shift; my ( $mode, $redirect_for_setup ) = @_; my $return_to = $self->args("openid.return_to"); return $self->_fail("no_return_to") unless ( $return_to and $return_to =~ Lemonldap::NG::Common::Regexp::HTTP_URI ); my $trust_root = $self->args("openid.trust_root") || $return_to; $trust_root = $self->args("openid.realm") if $self->args('openid.ns') eq $OPENID2_NS; return $self->_fail("invalid_trust_root") unless ( $trust_root =~ Lemonldap::NG::Common::Regexp::HTTP_URI and Net::OpenID::Server::_url_is_under( $trust_root, $return_to ) ); my $identity = $self->args("openid.identity"); # chop off the query string, in case our trust_root came from the return_to URL $trust_root =~ s/\?.*//; my $u = $self->_proxy("get_user"); if ( $self->args('openid.ns') eq $OPENID2_NS && $identity eq $OPENID2_ID_SELECT ) { $identity = $self->_proxy( "get_identity", $u, $identity ); } my $is_identity = $self->_proxy( "is_identity", $u, $identity ); my $is_trusted = $self->_proxy( "is_trusted", $u, $trust_root, $is_identity ); my ( %extVars, %is_ext_trusted ); my $is_exts_trusted = 1; if ( ref( $self->{_extensions} ) ) { my @list = $self->args->(); my %extArgs; foreach my $arg (@list) { next unless ( $arg =~ /^openid\.(\w+)\.([\w\.]+)?/ ); my $tmp = $1; my $val = $2; $extArgs{$tmp}->{$val} = scalar $self->args->($arg); } foreach my $ns ( keys %{ $self->{_extensions} } ) { print STDERR "Launching OpenIP $ns hook\n" if (DEBUG); my $h; ( $is_ext_trusted{$ns}, $h ) = $self->{_extensions}->{$ns}->( $u, $trust_root, $is_identity, $is_trusted, delete( $extArgs{$ns} ) || {} ); if ($h) { while ( my ( $k, $v ) = each %$h ) { print STDERR "$ns returned data: $k => $v\n" if (DEBUG); $extVars{"$ns.$k"} = $v; } } $is_exts_trusted &&= $is_ext_trusted{$ns}; } # TODO: warn if keys(%extArgs) } # assertion path: if ( $is_identity && $is_trusted && $is_exts_trusted ) { my %sArgs = ( identity => $identity, claimed_id => $self->args('openid.claimed_id'), return_to => $return_to, assoc_handle => $self->args("openid.assoc_handle"), ns => $self->args('openid.ns'), ); $sArgs{additional_fields} = \%extVars if (%extVars); my $ret_url = $self->signed_return_url(%sArgs); return ( "redirect", $ret_url ); } # Assertion could not be made, so user requires setup (login/trust... # something). Two ways that can happen: caller might have asked us for an # immediate return with a setup URL (the default), or explictly said that # we're in control of the user-agent's full window, and we can do whatever # we want with them now. # TODO: call extension sub for setup my %setup_args = ( $self->_setup_map("trust_root"), $trust_root, $self->_setup_map("realm"), $trust_root, $self->_setup_map("return_to"), $return_to, $self->_setup_map("identity"), $identity, $self->_setup_map("assoc_handle"), $self->args("openid.assoc_handle"), %extVars, ); $setup_args{ $self->_setup_map('ns') } = $self->args('openid.ns') if $self->args('openid.ns'); my $setup_url = $self->{setup_url} or Carp::croak("No setup_url defined."); _push_url_arg( \$setup_url, %setup_args ); if ( $mode eq "checkid_immediate" ) { my $ret_url = $return_to; if ( $self->args('openid.ns') eq $OPENID2_NS ) { _push_url_arg( \$ret_url, "openid.ns", $self->args('openid.ns') ); _push_url_arg( \$ret_url, "openid.mode", "setup_needed" ); } else { _push_url_arg( \$ret_url, "openid.mode", "id_res" ); _push_url_arg( \$ret_url, "openid.user_setup_url", $setup_url ); } return ( "redirect", $ret_url ); } else { # the "checkid_setup" mode, where we take control of the user-agent # and return to their return_to URL later. if ($redirect_for_setup) { return ( "redirect", $setup_url ); } else { return ( "setup", \%setup_args ); } } } #*args = \&get_args; #sub get_args { # my $self = shift; # # if ( my $what = shift ) { # Carp::croak("Too many parameters") if @_; # # # Lemonldap::NG only (direct CGI) # $self->{get_args} = sub { $what->param( $_[0] ) }; # # # INCLUDE IN PROPOSED PATCH FOR Net::OpenID::Server # #my $getter; # #if ( !ref $what ) { # # Carp::croak("No get_args defined") unless $self->{get_args}; # # return $self->{get_args}->($what) || ""; # #} # #elsif ( ref $what eq "HASH" ) { # # $getter = sub { $_[0] ? $what->{ $_[0] } : ( keys %$what ); }; # #} # #elsif ( ref $what eq "Apache" ) { # # my %get = $what->args; # # $getter = sub { $_[0] ? $get{ $_[0] } : ( keys %get ); }; # #} # #elsif ( ref $what eq "CODE" ) { # # $getter = $what; # #} # #else { # # my $r = eval { $what->can('param') }; # # if ( $@ or not $r ) { # # Carp::croak("Unknown parameter type ($what)"); # # } # # else { # # $getter = sub { # # $_[0] ? scalar $what->param( $_[0] ) : ( $what->param() ); # # }; # # } # #} # #if ($getter) { # # $self->{get_args} = $getter; # #} # } # $self->{get_args}; #} 1; __END__ =encoding utf8 =head1 NAME Lemonldap::NG::Portal::OpenID::Server - Add capability to manage extensions to Net::OpenID::Server =head1 SYNOPSIS use Lemonldap::NG::Portal::OpenID::Server; blah blah blah =head1 DESCRIPTION Stub documentation for Lemonldap::NG::Portal::OpenID::Server, created by h2xs. It looks like the author of the extension was negligent enough to leave the stub unedited. Blah blah blah. =head2 EXPORT None by default. =head1 SEE ALSO Mention other useful documentation such as the documentation of related modules or operating system documentation (such as man pages in UNIX), or any relevant external documentation such as RFCs or standards. If you have a mailing list set up for your module, mention it here. If you have a web site set up for your module, mention it here. =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2010, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/OpenID/SREG.pm0000644000175000017500000001674612542740733026302 0ustar clementclement## @file # OpenID SREG extension for Lemonldap::NG::Portal::IssuerOpenID class ## @class # OpenID SREG extension for Lemonldap::NG::Portal::IssuerOpenID class package Lemonldap::NG::Portal::OpenID::SREG; use strict; use Lemonldap::NG::Common::Regexp; use Lemonldap::NG::Portal::Simple; use utf8; ## @method protected hash sregHook(hash prm) # Hook called to add SREG parameters to the OpenID response # @return Hash containing wanted parameters sub sregHook { my ( $self, $u, $trust_root, $is_id, $is_trusted, $prm ) = splice @_; my ( @req, @opt ); # Refuse federation if rejected by user if ( $self->param('confirm') == -1 ) { my %h; $h{$_} = undef foreach ( qw(fullname nickname language postcode timezone country gender email dob) ); $self->updatePersistentSession( \%h ); return 0; } # If identity is not trusted, does nothing return ( 0, $prm ) unless ( $is_id and $is_trusted ); $self->lmLog( "SREG start", 'debug' ); my $accepted = 1; # Check all parameters while ( my ( $k, $v ) = each %$prm ) { # Store policy if provided if ( $k eq 'policy_url' ) { if ( $v =~ Lemonldap::NG::Common::Regexp::HTTP_URI ) { $self->{_openIdTrustExtMsg} .= '
    ' . $self->msg(PM_OPENID_PA) . " :
    $v
    "; # Question: is it important to notify policy changes ? # if yes, uncomment this #my $p = # $self->{sessionInfo}->{"_openidTrust$trust_root\_Policy"}; #$accepted = 0 unless ( $p and $p eq $v ); } else { $self->lmLog( "Bad policy url", 'error' ); } } # Parse required attributes elsif ( $k eq 'required' ) { $self->lmLog( "Required attr $v", 'debug' ); push @req, split( /,/, $v ); } # Parse optional attributes elsif ( $k eq 'optional' ) { $self->lmLog( "Optional attr $v", 'debug' ); push @opt, grep { defined $self->{"openIdSreg_$trust_root$_"} } split( /,/, $v ); } else { $self->lmLog( "Unknown OpenID SREG request $k", 'error' ); } } # Check if required keys are valid SREG requests # Question: reject bad SREG request ? Not done yet @req = sregfilter( $self, @req ); @opt = sregfilter( $self, @opt ); # Return if nothing is asked return ( 1, {} ) unless ( @req or @opt ); # If a required data is not available, returns nothing foreach my $k (@req) { unless ( $self->{"openIdSreg_$k"} ) { $self->lmLog( "Parameter $k is required by $trust_root but not defined in configuration", 'notice' ); $self->info( '

    ' . sprintf( $self->msg(PM_OPENID_RPNS), $k ) . '

    ' ); return ( 0, {} ); } } # Now set datas my ( %r, %msg, %ag, %toStore ); # Requested parameters: check if already agreed or confirm is set foreach my $k (@req) { my $agree = $self->{sessionInfo}->{"_openidTrust$trust_root\_$k"}; if ($accepted) { unless ( $self->param('confirm') or $agree ) { $accepted = 0; } elsif ( !$agree ) { $toStore{"_openidTrust$trust_root\_$k"} = 1; } } $self->{"openIdSreg_$k"} =~ s/^\$//; $msg{req}->{$k} = $r{$k} = $self->{sessionInfo}->{ $self->{"openIdSreg_$k"} } || ''; } # Optional parameters: foreach my $k (@opt) { $self->{"openIdSreg_$k"} =~ s/^\$//; my $agree = $self->{sessionInfo}->{"_openidTrust$trust_root\_$k"}; if ($accepted) { # First, check if already accepted unless ( $self->param('confirm') or defined($agree) ) { $accepted = 0; $r{$k} = $self->{sessionInfo}->{ $self->{"openIdSreg_$k"} } || ''; } # If confirmation is returned, check the value for this field elsif ( $self->param('confirm') == 1 ) { my $ck = 0; if ( defined( $self->param("sreg_$k") ) ) { $ck = ( $self->param("sreg_$k") eq 'OK' ) || 0; } # Store the value returned if ( !defined($agree) or $agree != $ck ) { $toStore{"_openidTrust$trust_root\_$k"} = $ck; $agree = $ck; } } } $msg{opt}->{$k} = $self->{sessionInfo}->{ $self->{"openIdSreg_$k"} } || ''; # Store the value only if user agree it if ($agree) { $r{$k} = $msg{opt}->{$k}; $ag{$k} = 1; } elsif ( !defined($agree) ) { $ag{$k} = 1; } else { $ag{$k} = 0; } } $self->updatePersistentSession( \%toStore ) if (%toStore); # Check if user has agreed request if ($accepted) { $self->_sub( 'userInfo', $self->{sessionInfo}->{ $self->{whatToTrace} } . " has accepted OpenID SREG exchange with $trust_root" ); return ( 1, \%r ); } # else build message and return 0 else { $self->{_openIdTrustExtMsg} .= "

    " . $self->msg(PM_OPENID_AP) . "

    \n"; $self->{_openIdTrustExtMsg} .= "\n"; # No choice for requested parameters: just an information foreach my $k (@req) { utf8::decode( $msg{req}->{$k} ); $self->{_openIdTrustExtMsg} .= "\n" . "\n" . "\n" . "\n" . "\n"; } # For optional parameters: checkboxes are displayed foreach my $k (@opt) { utf8::decode( $msg{opt}->{$k} ); $self->{_openIdTrustExtMsg} .= "\n" . "\n" . "\n" . "\n" . "\n"; } $self->{_openIdTrustExtMsg} .= "
    " . "" . "$k" . $msg{req}->{$k} . "
    \n" . "" . "$k" . $msg{opt}->{$k} . "
    \n"; $self->lmLog( 'Building validation form', 'debug' ); return ( 0, $prm ); } } ## @method private array sregfilter(array attr) # Filter the arguments passed as parameters by checking their compliance with # SREG. # @return fitered datas sub sregfilter { my ( $self, @attr ) = splice @_; my ( @ret, @rej ); # Browse attributes foreach my $s (@attr) { if ( $s =~ /^(?:(?:(?:full|nick)nam|languag|postcod|timezon)e|country|gender|email|dob)$/ ) { push @ret, $s; } else { $s =~ s/\W/\./sg; push @rej, $s; } } # Warn if some parameters are rejected if (@rej) { $self->lmLog( "Requested parameter(s) " . join( ',', @rej ) . "is(are) not valid OpenID SREG parameter(s)", 'warn' ); } # Return valid SREG parameters return @ret; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthCAS.pm0000644000175000017500000002231312542740733025637 0ustar clementclement##@file # CAS authentication backend file ##@class # CAS authentication backend class package Lemonldap::NG::Portal::AuthCAS; use strict; use Lemonldap::NG::Portal::Simple; use URI::Escape; our $VERSION = '1.2.3'; our $initDone; BEGIN { eval { require threads::shared; threads::shared::share($initDone); }; } ## @apmethod int authInit() # Try to load AuthCAS perl module # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; return PE_OK if ($initDone); # require Perl module eval { require AuthCAS }; if ($@) { $self->lmLog( "CAS: Module AuthCAS not found in @INC", 'error' ); return PE_ERROR; } $initDone = 1; PE_OK; } ## @apmethod int extractFormInfo() # Read username return by CAS authentication system. # If user isn't authenticated, redirect it to CAS portal. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; my $cas = new AuthCAS( casUrl => $self->{CAS_url}, CAFile => $self->{CAS_CAFile}, ); # Local URL my $local_url = $self->url(); # Add request state parameters if ( $self->{_url} ) { my $url_param = 'url=' . uri_escape( $self->{_url} ); $local_url .= ( $local_url =~ /\?/ ? '&' : '?' ) . $url_param; } if ( $self->param( $self->{authChoiceParam} ) ) { my $url_param = $self->{authChoiceParam} . '=' . uri_escape( $self->param( $self->{authChoiceParam} ) ); $local_url .= ( $local_url =~ /\?/ ? '&' : '?' ) . $url_param; } # Forward hidden fields if ( exists $self->{portalHiddenFormValues} ) { $self->lmLog( "Add hidden values to CAS redirect URL\n", 'debug' ); foreach ( keys %{ $self->{portalHiddenFormValues} } ) { $local_url .= ( $local_url =~ /\?/ ? '&' : '?' ) . $_ . '=' . uri_escape( $self->{portalHiddenFormValues}->{$_} ); } } # Act as a proxy if proxied services configured my $proxy = ref( $self->{CAS_proxiedServices} ) eq 'HASH' ? ( %{ $self->{CAS_proxiedServices} } ? 1 : 0 ) : 0; if ($proxy) { $self->lmLog( "CAS: Proxy mode activated", 'debug' ); my $proxy_url = $self->url() . '?casProxy=1'; if ( $self->param( $self->{authChoiceParam} ) ) { $proxy_url .= '&' . $self->{authChoiceParam} . '=' . ( $self->param( $self->{authChoiceParam} ) ); } $self->lmLog( "CAS Proxy URL: $proxy_url", 'debug' ); $cas->proxyMode( pgtFile => $self->{CAS_pgtFile}, pgtCallbackUrl => $proxy_url ); } # Catch proxy callback if ( $self->param('casProxy') ) { $self->lmLog( "CAS: Proxy callback detected", 'debug' ); my $pgtIou = $self->param('pgtIou'); my $pgtId = $self->param('pgtId'); if ( $pgtIou and $pgtId ) { # Store pgtId and pgtIou unless ( $cas->storePGT( $pgtIou, $pgtId ) ) { $self->lmLog( "CAS: error " . &AuthCAS::get_errors(), 'error' ); } else { $self->lmLog( "CAS: Store pgtIou $pgtIou and pgtId $pgtId", 'debug' ); } } # Exit print $self->header(); $self->quit(); } # Build login URL my $login_url = $cas->getServerLoginURL($local_url); $login_url .= '&renew=true' if $self->{CAS_renew}; $login_url .= '&gateway=true' if $self->{CAS_gateway}; # Check Service Ticket my $ticket = $self->param('ticket'); # Unless a ticket has been found, we redirect the user unless ($ticket) { $self->lmLog( "CAS: Redirect user to $login_url", 'debug' ); $self->{urldc} = $login_url; return $self->_subProcess(qw(autoRedirect)); } $self->lmLog( "CAS: Service Ticket received: $ticket", 'debug' ); # Ticket found, try to validate it unless ( $self->{user} = $cas->validateST( $local_url, $ticket ) ) { $self->lmLog( "CAS: error " . &AuthCAS::get_errors(), 'error' ); return PE_ERROR; } else { $self->lmLog( "CAS: User " . $self->{user} . " found", 'debug' ); } # Request proxy tickets for proxied services if ($proxy) { # Check we received a PGT my $pgtId = $cas->{pgtId}; unless ($pgtId) { $self->lmLog( "CAS: Proxy mode activated, but no PGT received", 'error' ); return PE_ERROR; } # Get a proxy ticket for each proxied service foreach ( keys %{ $self->{CAS_proxiedServices} } ) { my $service = $self->{CAS_proxiedServices}->{$_}; my $pt = $cas->retrievePT($service); unless ($pt) { $self->lmLog( "CAS: No proxy ticket recevied for service $service", 'error' ); return PE_ERROR; } $self->lmLog( "CAS: Received proxy ticket $pt for service $service", 'debug' ); # Store it in session $self->{sessionInfo}->{ '_casPT' . $_ } = $pt; } } PE_OK; } ## @apmethod int setAuthSessionInfo() # Set _user and authenticationLevel. # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Store user submitted login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; $self->{sessionInfo}->{authenticationLevel} = $self->{CAS_authnLevel}; PE_OK; } ## @apmethod int authenticate() # Does nothing. # @return Lemonldap::NG::Portal constant sub authenticate { PE_OK; } ## @apmethod int authFinish() # Does nothing. # @return Lemonldap::NG::Portal constant sub authFinish { PE_OK; } ## @apmethod int authLogout() # Call CAS server logout URL # @return Lemonldap::NG::Portal constant sub authLogout { my $self = shift; my $cas = new AuthCAS( casUrl => $self->{CAS_url}, CAFile => $self->{CAS_CAFile}, ); # Build CAS logout URL my $logout_url = $cas->getServerLogoutURL( $self->url() ); $self->lmLog( "Build CAS logout URL: $logout_url", 'debug' ); # Register CAS logout URL in logoutServices $self->{logoutServices}->{CASserver} = $logout_url; PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthCAS - Perl extension for building Lemonldap::NG compatible portals with CAS authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'CAS', CAS_url => 'https://cas.myserver', CAS_CAFile => '/etc/httpd/conf/ssl.crt/ca-bundle.crt', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to use CAS mechanism: we've just try to get CAS ticket. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item Xavier Guimard, Ex.guimard@free.frE =item Thomas Chemineau, Ethomas.chemineau@gmail.comE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2007, 2008, 2009, 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2009, 2010, 2012, 2013 by Clement Oudot, Eclem.oudot@gmail.comE =item Copyright (C) 2009 by Thomas Chemineau, Ethomas.chemineau@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthSlave.pm0000644000175000017500000000756612542740733026320 0ustar clementclement##@file # Slave authentication backend file ##@class # Slave authentication backend class package Lemonldap::NG::Portal::AuthSlave; use strict; use Lemonldap::NG::Portal::_Slave; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::AuthNull; our $VERSION = '1.2.0'; our @ISA = qw(Lemonldap::NG::Portal::AuthNull); ## @apmethod int extractFormInfo() # Read username in a specific header. # @return Lemonldap::NG::Portal constant sub extractFormInfo { my $self = shift; return PE_FORBIDDENIP unless ( $self->checkIP ); my $user_header = $self->{slaveUserHeader}; $user_header = 'HTTP_' . uc($user_header); $user_header =~ s/\-/_/g; unless ( $self->{user} = $ENV{$user_header} ) { $self->lmLog( "No header " . $self->{slaveUserHeader} . " found", 'error' ); return PE_USERNOTFOUND; } PE_OK; } ## @apmethod int setAuthSessionInfo() # Set _user value to 'anonymous' and authenticationLevel to 0 # @return Lemonldap::NG::Portal constant sub setAuthSessionInfo { my $self = shift; # Store user submitted login for basic rules $self->{sessionInfo}->{'_user'} = $self->{'user'}; $self->{sessionInfo}->{authenticationLevel} = $self->{slaveAuthnLevel}; PE_OK; } ## @method string getDisplayType # @return display type sub getDisplayType { return "logo"; } 1; __END__ =head1 NAME =encoding utf8 Lemonldap::NG::Portal::AuthSlave - Perl extension for building Lemonldap::NG compatible portals with Apache authentication. =head1 SYNOPSIS use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::Simple( configStorage => {...}, # See Lemonldap::NG::Portal authentication => 'Slave', ); if($portal->process()) { # Write here the menu with CGI methods. This page is displayed ONLY IF # the user was not redirected here. print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "..."; # or redirect the user to the menu print $portal->redirect( -uri => 'https://portal/menu'); } else { print $portal->header('text/html; charset=utf-8'); # DON'T FORGET THIS (see CGI(3)) print "

    Unable to work

    "; print "This server isn't well configured. Contact your administrator."; print ""; } =head1 DESCRIPTION This library just overload few methods of Lemonldap::NG::Portal::Simple to create sessions for anonymous users. See L for usage and other methods. =head1 SEE ALSO L, L, L =head1 AUTHOR =over =item Clement Oudot, Eclem.oudot@gmail.comE =item François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Xavier Guimard, Ex.guimard@free.frE =back =head1 BUG REPORT Use OW2 system to report bug or ask for features: L =head1 DOWNLOAD Lemonldap::NG is available at L =head1 COPYRIGHT AND LICENSE =over =item Copyright (C) 2010 by Xavier Guimard, Ex.guimard@free.frE =item Copyright (C) 2012 by François-Xavier Deltombe, Efxdeltombe@gmail.com.E =item Copyright (C) 2011, 2012 by Clement Oudot, Eclem.oudot@gmail.comE =back This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthRadius.pm0000644000175000017500000000367512542740733026472 0ustar clementclement##@file # Radius authentication backend file ##@class # Radius authentication backend class package Lemonldap::NG::Portal::AuthRadius; # Author: Sebastien Bahloul use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Portal::_WebForm; our $VERSION = '1.2.0'; use base qw(Lemonldap::NG::Portal::_WebForm); ## @apmethod int authInit() # Set _authnLevel # @return Lemonldap::NG::Portal constant sub authInit { my $self = shift; # require Perl module eval { require Authen::Radius; }; if ($@) { $self->lmLog( "Module Authen::Radius not found in @INC", 'error' ); return PE_ERROR; } $self->lmLog( "Opening connexion to " . $self->{radiusServer} . " ...", 'debug' ); $self->{radius} = new Authen::Radius( Host => $self->{radiusServer}, Secret => $self->{radiusSecret} ); unless ( $self->{radius} ) { return PE_RADIUSCONNECTFAILED; } $self->{_authnLevel} = $self->{radiusAuthnLevel}; PE_OK; } ## @apmethod int authenticate() # Authenticate user by LDAP mechanism. # @return Lemonldap::NG::Portal constant sub authenticate { my $self = shift; unless ( $self->{radius} ) { return PE_RADIUSCONNECTFAILED; } my $res = $self->{radius}->check_pwd( $self->{user}, $self->{password} ); unless ( $res == 1 ) { $self->_sub( 'userNotice', "Unable to authenticate " . $self->{user} . " !" ); return PE_BADCREDENTIALS; } return PE_OK; } ## @apmethod int authFinish() # Unbind. # @return Lemonldap::NG::Portal constant sub authFinish { my $self = shift; $self->{radius} = 0; PE_OK; } ## @apmethod int authLogout() # Does nothing # @return Lemonldap::NG::Portal constant sub authLogout { PE_OK; } ## @apmethod boolean authForce() # Does nothing # @return result sub authForce { return 0; } ## @method string getDisplayType # @return display type sub getDisplayType { return "standardform"; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBOpenID.pm0000644000175000017500000000371412542740733026576 0ustar clementclement## @file # UserDB OpenID module ## @class # UserDB OpenID module package Lemonldap::NG::Portal::UserDBOpenID; use strict; use Lemonldap::NG::Portal::Simple; use Lemonldap::NG::Common::Regexp; our $VERSION = '1.4.0'; ## @apmethod int userDBInit() # Check if authentication module is OpenID # @return Lemonldap::NG::Portal error code sub userDBInit { my $self = shift; unless ( $self->get_module('auth') =~ /^OpenID/ ) { $self->lmLog( 'UserDBOpenID isn\'t useable unless authentication module is set to OpenID', 'error' ); return PE_ERROR; } PE_OK; } ## @apmethod int getUser() # Does nothing # @return Lemonldap::NG::Portal error code sub getUser { PE_OK; } ## @apmethod int setSessionInfo() # Check if there are some exportedVars in OpenID response. # See http://openid.net/specs/openid-simple-registration-extension-1_0.html # for more # @return Lemonldap::NG::Portal error code sub setSessionInfo { my $self = shift; my %vars = ( %{ $self->{exportedVars} }, %{ $self->{openIdExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { my $attr = $k; my $required = ( $attr =~ s/^!// ); if ( $v =~ Lemonldap::NG::Common::Regexp::OPENIDSREGATTR() ) { $self->{sessionInfo}->{$attr} = $self->param("openid.sreg.$v"); } else { $self->lmLog( 'Ignoring attribute ' . $v . ' which is not a valid OpenID SREG attribute', 'warn' ); } if ( $required and not defined( $self->{sessionInfo}->{$attr} ) ) { $self->lmLog( "Required parameter $attr is not provided by OpenID server, aborted", 'warn' ); $self->{mustRedirect} = 0; return PE_MISSINGREQATTR; } } PE_OK; } ## @apmethod int setGroups() # Does nothing # @return Lemonldap::NG::Portal error code sub setGroups { PE_OK; } 1; lemonldap-ng-1.4.6/lemonldap-ng-portal/README0000644000175000017500000000177212542740732020510 0ustar clementclementLemonLDAP::NG ==================== LemonLDAP::NG is a modular Web-SSO based on Apache::Session modules. This is the portal part of it. You can find documentation here: * for administrators: http://lemonldap-ng.org/ * for developers: see embedded perldoc LemonLDAP::NG is a free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. Copyright: * 2006-2013 by Xavier Guimard and Clément Oudot * 2008-2011 by Thomas Chemineau * 2012-2013 by François-Xavier Deltombe and Sandro Cazzaniga lemonldap-ng-1.4.6/lemonldap-ng-portal/META.yml0000664000175000017500000000266712605702745021111 0ustar clementclement--- abstract: 'The authentication portal part of Lemonldap::NG Web-SSO system.' author: - 'Xavier Guimard , Clément Oudot , Thomas Chemineau , Mikael Ates ' build_requires: AuthCAS: '0' HTTP::Message: '0' IO::String: '0' LWP: '0' MIME::Lite: '0' Net::OpenID::Consumer: '0' Net::OpenID::Server: '0' SOAP::Lite: '0' String::Random: '0' Test::Pod: '1' XML::LibXML: '0' XML::LibXSLT: '0' XML::Simple: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142690' license: open_source meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Lemonldap-NG-Portal no_index: directory: - t - inc recommends: AuthCAS: '0' DBI: '0' Glib: '0' HTTP::Message: '0' LWP: '0' LWP::Protocol::https: '0' Lasso: v2.3.0 Lemonldap::NG::Handler: v1.4.6 MIME::Lite: '0' Net::Facebook::Oauth2: '0' Net::OpenID::Consumer: '0' Net::OpenID::Server: '0' Net::Twitter: '0' SOAP::Lite: '0' String::Random: '0' URI: '0' Web::ID: '0' XML::LibXML: '0' XML::LibXSLT: '0' XML::Simple: '0' requires: Authen::Captcha: '0' CGI: '3.08' Clone: '0' HTML::Template: '0' Lemonldap::NG::Common: v1.4.6 Net::LDAP: '0.38' Regexp::Assemble: '0' Unicode::String: '0' version: v1.4.6 lemonldap-ng-1.4.6/Doxyfile0000664000175000017500000016412712604503464015466 0ustar clementclement# Doxyfile 1.5.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = LemonLDAP::NG # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 1.4.6 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/devel/ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.pm *.pl # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = scripts # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. #INPUT_FILTER = INPUT_FILTER = ./scripts/doxygenfilter # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hiererachy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = NO # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = NO # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = NO # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is enabled by default, which results in a transparent # background. Warning: Depending on the platform used, enabling this option # may lead to badly anti-aliased labels on the edges of a graph (i.e. they # become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # ADDED lemonldap-ng-1.4.6/_example/0000775000175000017500000000000012542740742015542 5ustar clementclementlemonldap-ng-1.4.6/_example/conf/0000775000175000017500000000000012542740742016467 5ustar clementclementlemonldap-ng-1.4.6/_example/conf/lmConf-10000664000175000017500000001005112542740742017763 0ustar clementclementapplicationList '$data1 = {'1sample' => { catname => 'Sample applications',type => 'category', 'test1' => { type => 'application', options => { name => 'Application Test 1', uri => 'http://test1.__DNSDOMAIN__/', description => 'A simple application displaying authenticated user', logo => 'demo.png', display => 'auto', }, },'test2' => { type => 'application', options => { name => 'Application Test 2', uri => 'http://test2.__DNSDOMAIN__/', description => 'The same simple application displaying authenticated user', logo => 'thumbnail.png', display => 'auto', }, }, },'2administration' => { catname => 'Administration', type => 'category', 'manager' => { type => 'application', options => { name => 'WebSSO Manager', uri => 'http://manager.__DNSDOMAIN__/', description => 'Configure LemonLDAP::NG WebSSO', logo => 'configure.png', display => 'auto', }, },'sessions' => { type => 'application', options => { name => 'Sessions explorer', uri => 'http://manager.__DNSDOMAIN__/sessions.pl', description => 'Explore WebSSO sessions', logo => 'database.png', display => 'auto', }, }, 'notifications' => { type => 'application', options => { name => 'Notifications explorer', uri => 'http://manager.__DNSDOMAIN__/notifications.pl', description => 'Explore WebSSO notifications', logo => 'database.png', display => 'auto', }, }, }, '3documentation' => { catname => 'Documentation', type => 'category', 'localdoc' => { type => 'application', options => { name => 'Local documentation', uri => 'http://manager.__DNSDOMAIN__/doc/', description => 'Documentation supplied with LemonLDAP::NG', logo => 'help.png', display => 'on', }, },'officialwebsite' => { type => 'application', options => { name => 'Offical Website', uri => 'http://lemonldap-ng.org/', description => 'Official LemonLDAP::NG Website', logo => 'network.png', display => 'on', }, }, }, }' globalStorage 'Apache::Session::File' persistentStorage 'Apache::Session::File' cookieName 'lemonldap' demoExportedVars '$data1 = {'uid' => 'uid','cn' => 'cn','mail' => 'mail'};' exportedVars '$data1 = {'UA' => 'HTTP_USER_AGENT'};' authentication 'Demo' userDB 'Demo' passwordDB 'Demo' locationRules '$data1 = {'test2.__DNSDOMAIN__' => {'default' => 'accept','^/logout' => 'logout_sso'},'test1.__DNSDOMAIN__' => {'default' => 'accept','^/logout' => 'logout_sso'},'manager.__DNSDOMAIN__' => {'default' => '$uid eq "dwho"'}};' domain '__DNSDOMAIN__' timeout 72000 groups '$data1 = {};' portal 'http://auth.__DNSDOMAIN__/' exportedHeaders '$data1 = {'test2.__DNSDOMAIN__' => {'Auth-User' => '$uid'},'test1.__DNSDOMAIN__' => {'Auth-User' => '$uid'}};' globalStorageOptions '$data1 = {'Directory' => '__SESSIONDIR__','generateModule' => 'Lemonldap::NG::Common::Apache::Session::Generate::SHA256'};' persistentStorageOptions '$data1 = {'Directory' => '__PSESSIONDIR__'};' cfgNum 1 cfgAuthor 'The LemonLDAP::NG team' securedCookie 0 macros '$data1 = {'_whatToTrace' => '$_auth eq \'SAML\' ? "$_user\\@$_idpConfKey" : "$_user"'};' whatToTrace '_whatToTrace' loginHistoryEnabled 1 sessionDataToRemember '$data1 = {};' reloadUrls '$data1 = {'reload.__DNSDOMAIN__' => 'http://reload.__DNSDOMAIN__/reload'};' notification 1 notificationStorage 'File' notificationStorageOptions '$data1 = {'dirName' => '__NOTIFICATIONDIR__'};' lemonldap-ng-1.4.6/_example/test/0000775000175000017500000000000012542740742016521 5ustar clementclementlemonldap-ng-1.4.6/_example/test/index.pl0000775000175000017500000001417312542740742020176 0ustar clementclement#!/usr/bin/perl #================================================ # LemonLDAP::NG default test page # Display headers and environment #================================================ # Init CGI use CGI; my $cgi = CGI->new; # GET parameters my $name = $cgi->param("name") || "LemonLDAP::NG sample protected application"; my $color = $cgi->param("color") || "#ddd"; # Local parameters my $portal_url = "http://auth.__DNSDOMAIN__"; my $manager_url = "http://manager.__DNSDOMAIN__"; # CSS my $css = <{$a} = $_; } } # Display page print $cgi->header( -charset => 'utf-8' ); print "\n"; print "\n"; print "\n"; print "$name\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "
    \n"; print "
    \n"; print "

    $name

    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "

    Main informations

    \n"; print "
    \n"; print "
    \n"; print "
      \n"; print "
    • Authentication status: Success
    • \n"; print "
    • Connected user:
        \n"; print "
      • \$ENV{HTTP_AUTH_USER}: $ENV{HTTP_AUTH_USER}
      • \n"; print "
      • \$ENV{REMOTE_USER}: $ENV{REMOTE_USER}
      • \n"; print "
    • \n"; print "
    \n"; print "
    Be carefull, the \$ENV{REMOTE_USER} is set only if your script is in the same server than LemonLDAP::NG Handler (\$whatToTrace parameter). If you use it on a reverse-proxy, \$ENV{REMOTE_USER} is not set. See this documentation page to know how to convert an HTTP header into an environment variable.
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "

    HTTP headers

    \n"; print "
    \n"; print "
    \n"; print "

    To know who is connected in your applications, you can read HTTP headers:

    \n"; print "
    \n"; print "\n"; print "\n"; foreach ( sort keys %$headers ) { next if $_ =~ /(Accept|Cache|User-Agent|Connection|Keep-Alive)/i; print "\n"; } print "
    HeaderPerl CGIPHP scriptValue
    $_ \$ENV{$headers->{$_}} \$_SERVER{$headers->{$_}}
      "; foreach ( split( /;/, $ENV{ $headers->{$_} } ) ) { print "
    • $_
    • " if $_ ne " "; } print "☒" unless $ENV{ $headers->{$_} }; print "
    \n"; print "
    \n"; print "
    Note that LemonLDAP::NG cookie is hidden. So that application developpers can not spoof sessions.
    \n"; print "
    You can access to any information (IP address or LDAP attribute) by customizing exported headers with the LemonLDAP::NG Management interface.
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "

    Scripts parameters

    \n"; print "
    \n"; print "
    \n"; print "

    Find here all GET or POST parameters sent to this page:

    \n"; print "
    \n"; print "\n"; print "\n"; foreach ( sort $cgi->param() ) { my $tmp = $cgi->param($_); print "\n"; } print "
    ParameterValue
    $_ $tmp
    \n"; print "
    \n"; print "
    POST parameters can be forged by LemonLDAP::NG to autosubmit forms.
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "

    Environment for Perl CGI

    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "\n"; print "\n"; foreach ( sort keys %ENV ) { my $tmp = $ENV{$_}; $tmp =~ s/&/&/g; $tmp =~ s/>/>/g; $tmp =~ s/\n"; } print "
    Environment variableValue
    $_ $tmp
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; print $cgi->end_html; lemonldap-ng-1.4.6/_example/etc/0000775000175000017500000000000012542740742016315 5ustar clementclementlemonldap-ng-1.4.6/_example/etc/test-apache2.X.conf0000664000175000017500000000221712542740742021654 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG sample applications #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Sample application ServerName test1.__DNSDOMAIN__ ServerAlias test2.__DNSDOMAIN__ # SSO protection PerlHeaderParserHandler Lemonldap::NG::Handler # DocumentRoot DocumentRoot __TESTDIR__ = 2.3> Require all granted Order Deny,Allow Allow from all Options +ExecCGI # Perl script (application test is written in Perl) SetHandler perl-script PerlResponseHandler ModPerl::Registry # Display Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu # Directory index DirectoryIndex index.pl index.html lemonldap-ng-1.4.6/_example/etc/handler-apache2.4.conf0000664000175000017500000000216312542740742022246 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Handler #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Load LemonLDAP::NG Handler PerlOptions +GlobalRequest PerlRequire Lemonldap/NG/Handler.pm # Common error page and security parameters ErrorDocument 403 http://auth.__DNSDOMAIN__/?lmError=403 ErrorDocument 500 http://auth.__DNSDOMAIN__/?lmError=500 ErrorDocument 503 http://auth.__DNSDOMAIN__/?lmError=503 ServerName reload.__DNSDOMAIN__ # Configuration reload mechanism (only 1 per physical server is # needed): choose your URL to avoid restarting Apache when # configuration change Require ip 127 PerlHeaderParserHandler Lemonldap::NG::Handler->refresh # Uncomment this to activate status module # # Require ip 127 # PerlHeaderParserHandler Lemonldap::NG::Handler->status # lemonldap-ng-1.4.6/_example/etc/handler-apache2.conf0000664000175000017500000000234312542740742022104 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Handler #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Load LemonLDAP::NG Handler PerlOptions +GlobalRequest PerlRequire Lemonldap/NG/Handler.pm # Common error page and security parameters ErrorDocument 403 http://auth.__DNSDOMAIN__/?lmError=403 ErrorDocument 500 http://auth.__DNSDOMAIN__/?lmError=500 ErrorDocument 503 http://auth.__DNSDOMAIN__/?lmError=503 ServerName reload.__DNSDOMAIN__ # Configuration reload mechanism (only 1 per physical server is # needed): choose your URL to avoid restarting Apache when # configuration change Order deny,allow Deny from all Allow from 127.0.0.0/8 PerlHeaderParserHandler Lemonldap::NG::Handler->refresh # Uncomment this to activate status module # # Order deny,allow # Deny from all # Allow from 127.0.0.0/8 # PerlHeaderParserHandler Lemonldap::NG::Handler->status # lemonldap-ng-1.4.6/_example/etc/portal-apache2.X.conf0000664000175000017500000000755012542740742022203 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Portal #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Portal Virtual Host (auth.__DNSDOMAIN__) ServerName auth.__DNSDOMAIN__ # DocumentRoot DocumentRoot __PORTALDIR__ = 2.3> Require all granted Order Deny,Allow Allow from all Options +ExecCGI +FollowSymLinks # Perl script SetHandler perl-script PerlResponseHandler ModPerl::Registry DirectoryIndex index.pl index.html # SOAP functions for sessions management (disabled by default) = 2.3> Require all denied Order Deny,Allow Deny from all # SOAP functions for sessions access (disabled by default) = 2.3> Require all denied Order Deny,Allow Deny from all # SOAP functions for configuration access (disabled by default) = 2.3> Require all denied Order Deny,Allow Deny from all # SOAP functions for notification insertion (disabled by default) = 2.3> Require all denied Order Deny,Allow Deny from all # SAML2 Issuer RewriteEngine On RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/.* /index.pl # CAS Issuer RewriteEngine On RewriteRule ^/cas/.* /index.pl # OpenID Issuer RewriteEngine On RewriteRule ^/openidserver/.* /index.pl AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ############################################## ## Best performance under ModPerl::Registry ## ############################################## # Uncomment this to increase performance of Portal: #require Lemonldap::NG::Portal::SharedConf; #Lemonldap::NG::Portal::SharedConf->compile( # qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Uncomment this line if you use Lemonldap::NG menu #require Lemonldap::NG::Portal::Menu; # Uncomment this line if you use portal SOAP capabilities #require SOAP::Lite; lemonldap-ng-1.4.6/_example/etc/portal-apache2.4.conf0000664000175000017500000000614512542740742022136 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Portal #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Portal Virtual Host (auth.__DNSDOMAIN__) ServerName auth.__DNSDOMAIN__ # DocumentRoot DocumentRoot __PORTALDIR__ Require all granted Options +ExecCGI +FollowSymLinks # Perl script SetHandler perl-script PerlResponseHandler ModPerl::Registry DirectoryIndex index.pl index.html # SOAP functions for sessions management (disabled by default) Require all denied # SOAP functions for sessions access (disabled by default) Require all denied # SOAP functions for configuration access (disabled by default) Require all denied # SOAP functions for notification insertion (disabled by default) Require all denied # SAML2 Issuer RewriteEngine On RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/.* /index.pl # CAS Issuer RewriteEngine On RewriteRule ^/cas/.* /index.pl # OpenID Issuer RewriteEngine On RewriteRule ^/openidserver/.* /index.pl AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ############################################## ## Best performance under ModPerl::Registry ## ############################################## # Uncomment this to increase performance of Portal: #require Lemonldap::NG::Portal::SharedConf; #Lemonldap::NG::Portal::SharedConf->compile( # qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Uncomment this line if you use Lemonldap::NG menu #require Lemonldap::NG::Portal::Menu; # Uncomment this line if you use portal SOAP capabilities #require SOAP::Lite; lemonldap-ng-1.4.6/_example/etc/handler-apache2.X.conf0000664000175000017500000000277412542740742022322 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Handler #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Load LemonLDAP::NG Handler PerlOptions +GlobalRequest PerlRequire Lemonldap/NG/Handler.pm # Common error page and security parameters ErrorDocument 403 http://auth.__DNSDOMAIN__/?lmError=403 ErrorDocument 500 http://auth.__DNSDOMAIN__/?lmError=500 ErrorDocument 503 http://auth.__DNSDOMAIN__/?lmError=503 ServerName reload.__DNSDOMAIN__ # Configuration reload mechanism (only 1 per physical server is # needed): choose your URL to avoid restarting Apache when # configuration change = 2.3> Require ip 127 Order Deny,Allow Deny from all Allow from 127.0.0.0/8 PerlHeaderParserHandler Lemonldap::NG::Handler->refresh # Uncomment this to activate status module # # = 2.3> # Require ip 127 # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.0/8 # # PerlHeaderParserHandler Lemonldap::NG::Handler->status # lemonldap-ng-1.4.6/_example/etc/manager-apache.conf0000664000175000017500000000437312542740742022024 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Manager #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Manager virtual host (manager.__DNSDOMAIN__) ServerName manager.__DNSDOMAIN__ # DocumentRoot DocumentRoot __MANAGERDIR__ Order deny,allow Allow from all Options +ExecCGI +FollowSymLinks # On-line documentation Alias /doc/ __DEFDOCDIR__ Alias /lib/ __DEFDOCDIR__lib/ Order allow,deny Allow from all ErrorDocument 404 /notfound.html Options +FollowSymLinks # French version (needs fr-doc installation) Alias /fr-doc/ __FRDOCDIR__ Order deny,allow Allow from all ErrorDocument 404 /notfoundfr.html Options +FollowSymLinks # Perl script # Note: to avoid manager stay in memory, we don't use ModPerl::Registry # by default. Change this to increase manager performances SetHandler cgi-script #SetHandler perl-script #PerlHandler Apache::Registry # Directory index DirectoryIndex index.pl index.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" lemonldap-ng-1.4.6/_example/etc/manager-apache2.conf0000664000175000017500000000466512542740742022112 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Manager #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Manager virtual host (manager.__DNSDOMAIN__) ServerName manager.__DNSDOMAIN__ # DocumentRoot DocumentRoot __MANAGERDIR__ Order deny,allow Allow from all Options +ExecCGI +FollowSymLinks # On-line documentation Alias /doc/ __DEFDOCDIR__ Alias /lib/ __DEFDOCDIR__lib/ Order allow,deny Allow from all ErrorDocument 404 /notfound.html Options +FollowSymLinks # French version (needs fr-doc installation) Alias /fr-doc/ __FRDOCDIR__ Order deny,allow Allow from all ErrorDocument 404 /notfoundfr.html Options +FollowSymLinks # Perl script # Note: to avoid manager stay in memory, we don't use ModPerl::Registry # by default. Change this to increase manager performances SetHandler cgi-script #SetHandler perl-script #PerlResponseHandler ModPerl::Registry # Directory index DirectoryIndex index.pl index.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresActive On ExpiresDefault "access plus 1 month" lemonldap-ng-1.4.6/_example/etc/portal-apache.conf0000664000175000017500000000616212542740742021711 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Portal #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Portal Virtual Host (auth.__DNSDOMAIN__) ServerName auth.__DNSDOMAIN__ # DocumentRoot DocumentRoot __PORTALDIR__ Order allow,deny Allow from all Options +ExecCGI +FollowSymLinks # Perl script SetHandler perl-script PerlHandler Apache::Registry # Directory index DirectoryIndex index.pl index.html # SOAP functions for sessions management (disabled by default) Order deny,allow Deny from all # SOAP functions for sessions access (disabled by default) Order deny,allow Deny from all # SOAP functions for configuration access (disabled by default) Order deny,allow Deny from all # SOAP functions for notification insertion (disabled by default) Order deny,allow Deny from all # SAML2 Issuer RewriteEngine On RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/.* /index.pl # CAS Issuer RewriteEngine On RewriteRule ^/cas/.* /index.pl # OpenID Issuer RewriteEngine On RewriteRule ^/openidserver/.* /index.pl AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" # Best performance under ModPerl::Registry # Uncomment this to increase performance of Portal #require Lemonldap::NG::Portal::SharedConf; #Lemonldap::NG::Portal::SharedConf->compile( # qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Uncomment this line if you use Lemonldap::NG menu #require Lemonldap::NG::Portal::Menu; # Uncomment this line if you use portal SOAP capabilities #require SOAP::Lite; lemonldap-ng-1.4.6/_example/etc/portal-apache2.conf0000664000175000017500000000631112542740742021767 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Portal #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Portal Virtual Host (auth.__DNSDOMAIN__) ServerName auth.__DNSDOMAIN__ # DocumentRoot DocumentRoot __PORTALDIR__ Order allow,deny Allow from all Options +ExecCGI +FollowSymLinks # Perl script SetHandler perl-script PerlResponseHandler ModPerl::Registry DirectoryIndex index.pl index.html # SOAP functions for sessions management (disabled by default) Order deny,allow Deny from all # SOAP functions for sessions access (disabled by default) Order deny,allow Deny from all # SOAP functions for configuration access (disabled by default) Order deny,allow Deny from all # SOAP functions for notification insertion (disabled by default) Order deny,allow Deny from all # SAML2 Issuer RewriteEngine On RewriteRule ^/saml/metadata /metadata.pl RewriteRule ^/saml/.* /index.pl # CAS Issuer RewriteEngine On RewriteRule ^/cas/.* /index.pl # OpenID Issuer RewriteEngine On RewriteRule ^/openidserver/.* /index.pl AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ############################################## ## Best performance under ModPerl::Registry ## ############################################## # Uncomment this to increase performance of Portal: #require Lemonldap::NG::Portal::SharedConf; #Lemonldap::NG::Portal::SharedConf->compile( # qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Uncomment this line if you use Lemonldap::NG menu #require Lemonldap::NG::Portal::Menu; # Uncomment this line if you use portal SOAP capabilities #require SOAP::Lite; lemonldap-ng-1.4.6/_example/etc/handler-apache.conf0000664000175000017500000000230712542740742022022 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Handler #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Load LemonLDAP::NG Handler PerlRequire Lemonldap/NG/Handler.pm # Common error page and security parameters ErrorDocument 403 http://auth.__DNSDOMAIN__/?lmError=403 ErrorDocument 500 http://auth.__DNSDOMAIN__/?lmError=500 ErrorDocument 503 http://auth.__DNSDOMAIN__/?lmError=503 ServerName reload.__DNSDOMAIN__ # Configuration reload mechanism (only 1 per physical server is # needed): choose your URL to avoid restarting Apache when # configuration change Order deny,allow Deny from all Allow from 127.0.0.0/8 PerlHeaderParserHandler Lemonldap::NG::Handler->refresh # Uncomment this to activate status module # # Order deny,allow # Deny from all # Allow from 127.0.0.0/8 # PerlHeaderParserHandler Lemonldap::NG::Handler->status # lemonldap-ng-1.4.6/_example/etc/test-apache2.4.conf0000664000175000017500000000176412542740742021616 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG sample applications #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Sample application ServerName test1.__DNSDOMAIN__ ServerAlias test2.__DNSDOMAIN__ # SSO protection PerlHeaderParserHandler Lemonldap::NG::Handler # DocumentRoot DocumentRoot __TESTDIR__ Require all granted Options +ExecCGI # Perl script (application test is written in Perl) SetHandler perl-script PerlResponseHandler ModPerl::Registry # Display Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu # Directory index DirectoryIndex index.pl index.html lemonldap-ng-1.4.6/_example/etc/for_etc_hosts0000664000175000017500000000016112542740742021077 0ustar clementclement127.0.0.1 auth.__DNSDOMAIN__ manager.__DNSDOMAIN__ test1.__DNSDOMAIN__ test2.__DNSDOMAIN__ reload.__DNSDOMAIN__ lemonldap-ng-1.4.6/_example/etc/test-apache2.conf0000664000175000017500000000201012542740742021435 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG sample applications #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Sample application ServerName test1.__DNSDOMAIN__ ServerAlias test2.__DNSDOMAIN__ # SSO protection PerlHeaderParserHandler Lemonldap::NG::Handler # DocumentRoot DocumentRoot __TESTDIR__ Order allow,deny Allow from all Options +ExecCGI # Perl script (application test is written in Perl) SetHandler perl-script PerlResponseHandler ModPerl::Registry # Display Menu PerlOutputFilterHandler Lemonldap::NG::Handler::Menu # Directory index DirectoryIndex index.pl index.html lemonldap-ng-1.4.6/_example/etc/manager-apache2.4.conf0000664000175000017500000000457112542740742022250 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Manager #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Manager virtual host (manager.__DNSDOMAIN__) ServerName manager.__DNSDOMAIN__ # DocumentRoot DocumentRoot __MANAGERDIR__ Require all granted Options +ExecCGI +FollowSymLinks # On-line documentation Alias /doc/ __DEFDOCDIR__ Alias /lib/ __DEFDOCDIR__lib/ Require all granted ErrorDocument 404 /notfound.html Options +FollowSymLinks # French version (needs fr-doc installation) Alias /fr-doc/ __FRDOCDIR__ Require all granted ErrorDocument 404 /notfoundfr.html Options +FollowSymLinks # Perl script # Note: to avoid manager stay in memory, we don't use ModPerl::Registry # by default. Change this to increase manager performances SetHandler cgi-script #SetHandler perl-script #PerlResponseHandler ModPerl::Registry # Directory index DirectoryIndex index.pl index.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresActive On ExpiresDefault "access plus 1 month" lemonldap-ng-1.4.6/_example/etc/manager-apache2.X.conf0000664000175000017500000000551212542740742022310 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG Manager #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Manager virtual host (manager.__DNSDOMAIN__) ServerName manager.__DNSDOMAIN__ # DocumentRoot DocumentRoot __MANAGERDIR__ = 2.3> Require all granted Order Deny,Allow Allow from all Options +ExecCGI +FollowSymLinks # On-line documentation Alias /doc/ __DEFDOCDIR__ Alias /lib/ __DEFDOCDIR__lib/ = 2.3> Require all granted Order Deny,Allow Allow from all ErrorDocument 404 /notfound.html Options +FollowSymLinks # French version (needs fr-doc installation) Alias /fr-doc/ __FRDOCDIR__ = 2.3> Require all granted Order Deny,Allow Allow from all ErrorDocument 404 /notfoundfr.html Options +FollowSymLinks # Perl script # Note: to avoid manager stay in memory, we don't use ModPerl::Registry # by default. Change this to increase manager performances SetHandler cgi-script #SetHandler perl-script #PerlResponseHandler ModPerl::Registry # Directory index DirectoryIndex index.pl index.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresActive On ExpiresDefault "access plus 1 month" lemonldap-ng-1.4.6/_example/etc/test-apache.conf0000664000175000017500000000165112542740742021365 0ustar clementclement#==================================================================== # Apache configuration for LemonLDAP::NG sample applications #==================================================================== # Uncomment this if no previous NameVirtualHost declaration #NameVirtualHost __VHOSTLISTEN__ # Sample application ServerName test1.__DNSDOMAIN__ ServerAlias test2.__DNSDOMAIN__ # SSO protection PerlHeaderParserHandler Lemonldap::NG::Handler # DocumentRoot DocumentRoot __TESTDIR__ Order allow,deny Allow from all Options +ExecCGI # Perl script (application test is written in Perl) SetHandler perl-script PerlHandler Apache::Registry # Directory index DirectoryIndex index.pl index.html lemonldap-ng-1.4.6/GPL0000664000175000017500000004325412542740737014331 0ustar clementclement GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. lemonldap-ng-1.4.6/lemonldap-ng-manager/0000775000175000017500000000000012605703002017721 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/t/0000775000175000017500000000000012604503464020175 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/t/20-Manager-i18n.t0000644000175000017500000000222312542740737022734 0ustar clementclement# Lemonldap::NG::Manager translation test # # Here, we test : # 1) each keyword is translated in each language # 2) display functions in english language BEGIN { our %lang = ( en => 'English', fr => 'French', ); require Test::More; Test::More->import( tests => ( scalar keys(%lang) ) ); } use_ok('Lemonldap::NG::Manager::_i18n'); foreach ( keys %lang ) { ok( &compare( "en", $_ ), "Compare English and $lang{$_} translation coverage" ) unless ( $_ eq 'en' ); } $ENV{SCRIPT_NAME} = "__SCRIPTNAME__"; $ENV{SCRIPT_FILENAME} = $0; $ENV{HTTP_ACCEPT_LANGUAGE} = 'en'; my $h; @ARGV = ("help=groups"); sub compare { my ( $l1, $l2 ) = @_; $r1 = &{ "Lemonldap::NG::Manager::_i18n::" . $l1 }; $r2 = &{ "Lemonldap::NG::Manager::_i18n::" . $l2 }; my $r = 1; foreach ( keys %$r1 ) { unless ( $r2->{$_} ) { print STDERR "$_ is present in $l1 but miss in $l2"; $r = 0; } } foreach ( keys %$r2 ) { unless ( $r1->{$_} ) { print STDERR "$_ is present in $l2 but miss in $l1"; $r = 0; } } return $r; } lemonldap-ng-1.4.6/lemonldap-ng-manager/t/50-Cli.t0000644000175000017500000000047312542740737021324 0ustar clementclement######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; use strict; # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. use_ok('Lemonldap::NG::Manager::Cli'); lemonldap-ng-1.4.6/lemonldap-ng-manager/t/40-Manager-Sessions.t0000644000175000017500000000147512542740737023775 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Manager-Sessions.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; use strict; use Cwd 'abs_path'; use File::Basename; use File::Temp; my $ini = File::Temp->new(); my $dir = dirname( abs_path($0) ); print $ini "[all] [configuration] type=File dirName=$dir "; $ini->flush(); use Env qw(LLNG_DEFAULTCONFFILE); $LLNG_DEFAULTCONFFILE = $ini->filename; use_ok('Lemonldap::NG::Manager::Sessions'); $LLNG_DEFAULTCONFFILE = undef; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. __END__ lemonldap-ng-1.4.6/lemonldap-ng-manager/t/10-Manager.t0000644000175000017500000000170412542740737022161 0ustar clementclement# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lemonldap-NG-Manager.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; use IO::String; use strict; use Cwd 'abs_path'; use File::Basename; use File::Temp; my $ini = File::Temp->new(); my $dir = dirname( abs_path($0) ); print $ini "[all] [configuration] type=File dirName=$dir "; $ini->flush(); use Env qw(LLNG_DEFAULTCONFFILE); $LLNG_DEFAULTCONFFILE = $ini->filename; use_ok('Lemonldap::NG::Manager'); $LLNG_DEFAULTCONFFILE = undef; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. __END__ $ENV{SCRIPT_NAME} = "__SCRIPTNAME__"; $ENV{SCRIPT_FILENAME} = $0; my $h; our $buf; tie *STDOUT, 'IO::String', $buf; our $lastpos = 0; lemonldap-ng-1.4.6/lemonldap-ng-manager/t/99-pod.t0000644000175000017500000000020112542740737021401 0ustar clementclementuse Test::More; eval "use Test::Pod 1.00"; plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; all_pod_files_ok(); lemonldap-ng-1.4.6/lemonldap-ng-manager/t/30-Manager-Struct.t0000644000175000017500000000146612604503464023443 0ustar clementclement######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 7; #use IO::String; use strict; BEGIN { use_ok('Lemonldap::NG::Manager::_Struct') } ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $tests = Lemonldap::NG::Manager::_Struct::testStruct(); my $ok = [ cookieName => 'lemon', domain => 'example.com', domain => 'test.123.com', ]; my $nok = [ cookieName => ' lemon', domain => ' example.com', domain => '.example.com' ]; while (@$ok) { my ( $k, $v ) = splice @$ok, 0, 2; ok( $v =~ $tests->{$k}->{test}, "OK $k" ); } while (@$nok) { my ( $k, $v ) = splice @$nok, 0, 2; ok( $v !~ $tests->{$k}->{test}, "NOK $k" ); } lemonldap-ng-1.4.6/lemonldap-ng-manager/Changes0000644000175000017500000000720712542740737021240 0ustar clementclementRevision history for Perl extension Lemonldap::NG::Manager. See http://jira.ow2.org/browse/LEMONLDAP#selectedTab=com.atlassian.jira.plugin.system.project:changelog-panel&allVersions=true for newer revisions 0.9 Mon jun 29 11:58:54 2009 - Doxygen documentation - Sessions.pm now use $whatToTrace parameter instead of $uid - SOAP server is now obsolete (replaced by portal) 0.87 Tue dec 25 9:01:21 2008 - New module Sessions.pm and example - Configuration modules migrates to Lemonldap::NG::Common 0.86 Mon aug 25 22:02:23 2008 - UTF8 in _i18n.pm - change in default values 0.85 Tue may 6 7:02:34 2008 - CSS update 0.84 Mon apr 7 14:55:45 2008 - Javascript update (Closes: #308775 / forge.objectweb.org) 0.83 Fri feb 8 17:45:34 2008 - bugs in SOAP server - sessions timeout is now included in the manager 0.82 Sat jul 21 15:21:32 2007 - TLS support in LDAP - Help for new logout system 0.8 Sat jun 23 21:54:27 2007 - New feature: syntax errors are now displayed in the manager interface 0.72 Tue jun 20 22:00:15 2007 - Javascript rewrite 0.71 Mon jun 19 22:22:33 2007 - Bug in javascript : a 'z' is added in regexp 0.7 Tue jun 12 22:20:54 2007 - Changing storage format due to a bug in Storable module 0.66 Tue May 15 19:53:40 2007 - Little bug correction: '-' is authorized in domain names 0.65 Sun May 6 16:15:49 2007 - SOAP: HTTP basic authentication and little bug correction in 'sessions' mode - More tests in conf 0.64 Sun Apr 29 16:18:31 2007 - File permissions fix to 0640 in File.pm - Multiple configuration in the same server is now possible - LDAP help in english - LDAPS documentation - Javascript control (an XML id can not start with a number) - whatToTrace parameter in configuration interface - Fix tree bug when an hash ref is not defined - More tests - Next and previous conf 0.61 Thu Mar 29 21:45:44 2007 - configuration is checked before saving 0.6 Sat Mar 17 22:13:08 2007 - New feature : * restricted version of Manager. Only choosen virtual hosts are displayed 0.512 Tue Mar 13 7:57:30 2007 - New feature in Manager : "Delete VHost" button (Closes: #306761 / forge.objectweb.org) 0.511 Sun Mar 11 8:24:32 2007 - Bug correction: lock does not work with File.pm (Closes: #306760 / forge.objectweb.org) 0.51 Fri Mar 9 7:16:42 2007 - Bug corrections issued from test in real life. - More help in english 0.45 Sat Mar 3 9:26:08 2007 - New error system when uploading conf - Verification if configuration has changed before saving - New feature: "apply configuration" 0.44 Sat Feb 24 16:32:34 2007 - Adding SOAP support to access to configuration 0.43 Sun Jan 28 19:10:24 2007 - Little correction on patch 0.41->0.42 0.42 Wed Jan 17 20:35:43 2007 - Correction issued from the first test in real life: * Close #306573 / forge.objectweb.org * Close #306574 / forge.objectweb.org 0.41 Sun Jan 14 14:04:05 2007 - I18n in javascripts (close #306564 / forge.objectweb.org) - Increase number of help chapter (General Parameters) 0.4 Sat Jan 13 20:23:18 2007 - New configuration parameter named 'macros'. It can be used to declare new attributes (exported vars) calculated with Perl expressions on variables. TODO: documentation (but french help is done) 0.3 Thu Jan 4 9:22:34 2007 - Help system skeleton and help in french 0.2 Sun Dec 31 16:40:04 2006 - Localization (fr and en) 0.1 - Bug corrections 0.03 Sun Dec 16 12:29:12 2006 - Autoload does not work when inherits from CGI. Temporarly disabled 0.02 Mon Dec 4 7:57:25 2006 - little doc 0.01 Sun Dec 3 13:23:58 2006 - original version; created by h2xs 1.23 with options -Xn Lemonldap::NG::Manager lemonldap-ng-1.4.6/lemonldap-ng-manager/Makefile.PL0000644000175000017500000000247112604503464021706 0ustar clementclementuse 5.008; use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( NAME => 'Lemonldap::NG::Manager', VERSION_FROM => 'lib/Lemonldap/NG/Manager.pm', # finds $VERSION LICENSE => 'gpl', BUILD_REQUIRES => { 'IO::String' => 0, 'Test::Pod' => 1.00, }, META_MERGE => { 'LWP::Protocol::https' => 0, }, PREREQ_PM => { 'Convert::PEM' => 0, 'Crypt::OpenSSL::RSA' => 0, 'HTML::Template' => 0, 'JSON' => 0, 'Lemonldap::NG::Common' => '1.4.6', 'Lemonldap::NG::Handler' => '1.4.6', 'LWP' => 0, 'URI' => 0, 'XML::LibXSLT' => 0, 'XML::LibXML' => 0, }, # e.g., Module::Name => 1.1 ( $] >= 5.005 ? ## Add these new keywords supported since 5.005 ( ABSTRACT_FROM => 'lib/Lemonldap/NG/Manager.pm', # retrieve abstract from module AUTHOR => 'Xavier Guimard ' . ', Clément Oudot ' . ', Thomas Chemineau ' ) : () ), ); lemonldap-ng-1.4.6/lemonldap-ng-manager/example/0000775000175000017500000000000012542740741021367 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/0000775000175000017500000000000012542740737022523 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/0000775000175000017500000000000012542740740024141 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/css/0000775000175000017500000000000012542740740024731 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/css/accordion.css0000644000175000017500000000147212542740740027406 0ustar clementclement/* * Lemonldap::NG styles * Lightness theme for Manager */ @import url(manager.css); /* jQuery Simple Tree */ .simpleTree { margin:0; padding:0; } .simpleTree ul { text-align:center; } .simpleTree li { list-style:none; margin:0; padding:0 5px; } .simpleTree li span { display:block; padding:5px 25px; } .simpleTree li.doc span, .simpleTree li.doc-last span { color:#444; padding:5px; } .simpleTree ul { margin:0; padding:0; } .simpleTree .root { cursor:pointer; text-align:center; } .simpleTree .line { line-height:3px; height:3px; font-size:3px; } .simpleTree .ajax { background: url(../images/spinner.gif) no-repeat center 10px; height:30px; display:none; } .simpleTree .ajax li { display:none; margin:0; padding:0; } .simpleTree .trigger { position:relative; top:6px; left:8px; } lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/css/manager.css0000644000175000017500000000645112542740740027061 0ustar clementclement/* * Lemonldap::NG styles * Commin styles for Manager * * Coding rules: * selector * { * property:value; * } */ /* Main */ html,body { margin:0; padding:0; height:100%; min-height:100%; overflow:hidden; } body { font:normal 9pt sans-serif; background:#000 url('../images/logo_lemonldap-ng.png') no-repeat 10px 10px; } .content { display:block; } .hidden { display:none; } a, a:link, a:visited { text-decoration:none; } ul { text-align: left; list-style-position:inside; list-style-image:url("../images/bullet_orange.png"); } /* Buttons, Inputs*/ input, select, textarea { font-weight:bold; border:1px solid #bbb; padding:5px 10px; margin:5px; vertical-align: middle; } textarea.elastic { max-height: 8em; font:bold 9pt sans-serif; } textarea#filearea { font-size:8pt; font-family:monospace; background-color:#ddd; } input#text, select { width:80%; text-align:center; } input#int { width:100px; text-align:center; } option { margin:5px; } /* Divs */ #header { height:40px; padding:5px 5px; margin:5px 10px; text-align: center; } #header img { float:left; margin:0 10px } #menu { float:left; padding:10px; margin:0 10px; width:300px; overflow-x:hidden; overflow-y:auto; } #version { position: absolute; top: 50px; left: 15px; color: white; font-size:6pt; } #buttons, #edition, #help, #data { text-align:center; margin:0 10px 10px 340px; } #help h1, #buttons h1, #edition h1 { text-align:center; font-size:12pt; padding:5px 10px; margin:5px 10px; cursor:pointer; } #data h1, #data h2 { text-align:center; font-size:12pt; padding:5px 10px; margin:5px 10px; } #help h1 img, #buttons h1 img, #edition h1 img { vertical-align:bottom; margin-bottom:2px; margin-right:5px; } #help_content, #buttons_content, #content, #data { padding:5px 10px; margin:5px 10px; overflow:auto; } #help_content { padding:5px; overflow:hidden; text-align:center; } #help_content iframe { width:100%; height:100%; } #query-switch { padding:0; margin:10px 0; } #css-switch p { margin:10px 0; padding:10px; } /* Filearea */ #content_filearea table tr td { text-align:left; vertical-align:middle; } #content_filearea table { margin-left:auto; margin-right:auto; padding-left:20px; } #content_filearea span.loadimg { display:inline-block; width:20px; } /* saml */ #content_samlAssertion table, #content_samlService table { margin-left:auto; margin-right:auto; } /* Sessions explorer */ div.category { margin: 5px 50px; } div.category h2 { margin: 5px 50px; } /* Popup */ #popup h3 { text-align:center; letter-spacing:2px; border-bottom:1px solid #aaa; padding:5px; margin:5px 50px; } #popup ul { list-style-position:inside; list-style-image:url("../images/bullet_green.png"); margin:0; padding:0; } #popup ul.warning { list-style-image:url("../images/bullet_orange.png"); } #popup ul.error { list-style-image:url("../images/bullet_red.png"); } .ui-dialog { border:1px solid #000; box-shadow:1px 1px 15px #555; -moz-box-shadow:1px 1px 15px #555; -webkit-box-shadow:1px 1px 15px #555; } /* Skin selection */ input#skinText { text-align: center; } #content_skin img, #skinImagePicker img, #content_applicationListApplication img, #appsLogoPicker img { margin: 5px; } #skinImagePicker, #appsLogoPicker, #css-switch { text-align: center; } lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/css/tree.css0000644000175000017500000001017612542740740026405 0ustar clementclement/* * Lemonldap::NG styles * Default theme for Manager */ @import url(manager.css); .simpleTree { overflow:auto; margin:0; padding:0; } .simpleTree li { list-style: none; margin:0; padding:0 0 0 34px; line-height: 14px; } .simpleTree li span { display:inline; clear: left; white-space: nowrap; cursor:pointer; } .simpleTree ul { margin:0; padding:0; } .simpleTree .root { margin-left:-16px; background: url(../images/tree/root.gif) no-repeat 16px 0 transparent; /*background-position: -84px -1646px;width:16px*/ } .simpleTree .line { margin:0 0 0 -16px; padding:0; line-height: 3px; height:3px; font-size:3px; background: url(../images/tree/tree.png) 0 0 no-repeat transparent; background-position: -84px -1322px; } .simpleTree .line-last { margin:0 0 0 -16px; padding:0; line-height: 3px; height:3px; font-size:3px; background: url(../images/tree/tree.png) 0 0 no-repeat transparent; background-position: -84px -1712px; } .simpleTree .line-over { margin:0 0 0 -16px; padding:0; line-height: 3px; height:3px; font-size:3px; background: url(../images/tree/tree.png) 0 0 no-repeat transparent; background-position: -84px -1392px; } .simpleTree .line-over-last { margin:0 0 0 -16px; padding:0; line-height: 3px; height:3px; font-size:3px; background: url(../images/tree/tree.png) 0 0 no-repeat transparent; background-position: -84px -1462px; } .simpleTree .folder-open { margin-left:-16px; background: url(../images/tree/tree.png) 0 -2px no-repeat transparent; background-position: 0 -72px;width: 34px; } .simpleTree .folder-open-last { margin-left:-16px; background: url(../images/tree/tree.png) 0 -2px no-repeat transparent; background-position: 0 -72px; width: 34px; } .simpleTree .folder-close { margin-left:-16px; background: url(../images/tree/tree.png) 0 -2px no-repeat transparent; background-position: 0 -1394px; width: 34px;height:14px; } .simpleTree .folder-close-last { margin-left:-16px; background: url(../images/tree/tree.png) 0 -2px no-repeat transparent; background-position: 0 -1322px; width: 34px;height:16px; } .simpleTree .folder-hidden, .simpleTree .folder-hidden-last { display:none; } .simpleTree .doc { margin-left:-16px; background: url(../images/tree/tree.png) 0 -1px no-repeat transparent; background-position: -84px -72px; width: 32px;height:16px; } .simpleTree .doc-last { margin-left:-16px; background: url(../images/tree/tree.png) 0 -1px no-repeat transparent; background-position: -84px 0; width: 32px;height:16px; } .simpleTree .ajax { background: url(../images/spinner.gif) no-repeat 0 0 transparent; height: 16px; display:none; } .simpleTree .ajax li { display:none; margin:0; padding:0; } .simpleTree .trigger { display:inline; margin-left:-32px; width: 28px; height: 11px; cursor:pointer; } .simpleTree .text { } .simpleTree .active { background-color:#F7BE77; padding:0px 2px; border: 1px dashed #444; } #drag_container { background:transparent; color:#000; font: normal 11px arial, tahoma, helvetica, sans-serif; border: 1px dashed #767676; } #drag_container ul { list-style: none; padding:0; margin:0; } #drag_container li { list-style: none; background-color:transparent; line-height:18px; white-space: nowrap; padding:1px 1px 0px 16px; margin:0; } #drag_container li span { padding:0; } #drag_container li.doc, #drag_container li.doc-last { background: url(../images/tree/tree.png) no-repeat -17px 0 transparent; background-position: -84px -72px;width:32px; } #drag_container .folder-close, #drag_container .folder-close-last { background: url(../images/tree/tree.png) no-repeat -17px 0 transparent; background-position: 0 -1394px; width: 34px; } #drag_container .folder-open, #drag_container .folder-open-last { background: url(../images/tree/tree.png) no-repeat -17px 0 transparent; background-position: 0 -72px; width: 34px; } .content { display: block; } .hidden { display: none; } lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/0000775000175000017500000000000012542740740025406 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/spinner.gif0000644000175000017500000000302112542740737027553 0ustar clementclementGIF89aݻwwwfffUUUDDD333"""! NETSCAPE2.0!,w $B$B##( R!!,c $PxB +*-[dඁ+i@ )`L ?'I`JGb Ph XB)0׸XQ# } No "tI+ZI!!,\ $P`8* 1h0rx8BQaV  !MDl!4%BBe PDY00!!,] $$I>Q] d"28 GqH9 A2ȀB", DH('4C \0`UL"r(!! ,d $dI`ìkBB m A72, (PX鲪 8@R%a K*D2E {$ft5C%!;lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/logo_lemonldap-ng.png0000644000175000017500000001127612542740737031524 0ustar clementclementPNG  IHDR&lsRGBbKGD pHYs B(xtIME6(m_>IDATx][PSg~! | Gu=utfӛ^i[g:FzaE9nJ  Y}AYI8]<3ֻ߷RxAh".xʿ qqq7oBMQE0z0%@PKFF:>>^HQZ- bcc!ˣҌ⩇\.x9Nlyeh! ̬ŰBHOOGYYt:"ʲ8l6ܾ}C x/"g||bرcm$R/ߏXVVNh/$&& 15O`H,gt:_ ئT*`I>dDssm۶ihZtww)4Eш444`vv?99z0::NIIV?٨B󘛛J%2332444tp8NBXϯb1B{y~E92@CCJ% _~8Nff&h<4 022 y7| {"99o7L۷oGoop',+SZZ:с۷ovyVL&(Jv $;Io@$9r}L#Br$ |~/_FUU !111&LMMA..]j5BۍܸqCTCRRa2P^^FyCb(d%9Ԗa0 HJJ–-[p=IVl6ܹsUUUEQaߚuo0 d( GJw}N<~TUUMMMZjzq̀(ա 8_|K/hoo߿?Z-Z[[qE0 =zf{Ecccw*++ٳgEn_;wD[[H62Fee%t:I(,,Aoo/a4q݈$( t:t<ϕa!:"quwq"E gy5"ǀa9fC#HB?HMMEgg'nݺ@`1~o())8466bjjJlea0ЀڵkĊ0ZFAAN'E/v?vd2I fXVZHLLJDFնP*&$$@cttTTjӉ<4wr)$hPWWRGabbBl?22!gaaw܁bYrea088 j ,BR9QEARI>;X]<9p ;0Byy9J%Nmn7%}xO2+2@`@06&''#qrrfF aAPܵ(Z(EQ I "'I& ~_PQQ"twwG,+V&&&0<<<~eh~ߏaAKY0 fpj]UuAC浟r`Ś#L&..zFWK")> Vxj*Rw Bnp8D%2 |ܻ\.q(,,MӢc?6z*R~ԄӧOc߾}8{,"nGrr2b.i4;rAgpt`eYn]ti2>>e˖cmٲall,,V} 999k mmmbT-))A 3g0??Hɓ'QZZVEN /ӧOK"^pv8Erd EEE@GGV+p|Gpn^GII RSSg㸰XI0Z.0 ~ 'Nヒsa||8y$(Bccz,q38p8peqZ/>>999HKKIEOY^^bDYtuuEEEhiiM|$TWW _~%%ĉ( .]*3a؈SN!..N(믿Fjj*F#>S455appn ٨Y@ D*ꉾdo".AL&L&S>_-n} ?aM@\R9HpFt:?O/\k׮I (V\\91_U4&NW^y%,ƍb[ k.,۷o݋]vի*ZYAJFGv|'x뭷ēEǃ~ayA_\\, L\n#)+pGkwӢſtza>###2bZZJKK$044$Qf Hjµb|>I4 ǃ梴qqqp8hkkX4(((@ll,ÒFkɴpBhLLL4$~b9rf,.4Ld}HE||vj~75Tb *94@G|ѺaO HBh`#D#2<S[=E bbf & ey/ ^3pc"RD Psyb%_H)Nd5<>1C.fBf 'h`ĸEȖ 0sZz1yH~6Qb ;2#\(˥#5$nb!V?%CpW׻ =n (%JR`^h~ ;7n O!~*[62R]Hx22ዷt줣1d~{|t2@B:ڻwvYĩ3g2sLwwm7,p(=]Dplt/yd=y;gO~7kJ_ۏ%!% Ip56oWΰw{:>664sl{b{6Vv_=Opa[&]/_y| Wa>எ.{璉x}$\s$tqL;!# nn[?9y⩧ٷ>x7]codhj^ }}}{"Kj.0MR*5#:G.1u`Mk+4:zzְ{s nLB6sr`5&昮\竷ވ>8n̝PAZJX̂0p֕{c@sb0N ?,r}]M FU("tadLMP:SN+L ШжƯˠ2LGPij)M(_Y`3}G:btGV IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/mailappt.png0000644000175000017500000000304212542740737032012 0ustar clementclementPNG  IHDR DPLTE    &&&#####"!!!222AAA>>>,,,DEEHHH>>>AAAKKK555GGGHHHFFF-..EEFBCC:::JKK^^_DDEGGGFFGgggjjjbbbsstSTTsstTTUuuvabbvvv|}}tuuʣ¿خ nytRNS "'(+,..08<} @4uMv;zv4d6EUqV#OZ7mƬ> * \m[j߈`; (,hT'a~e,"pwAS$Lpu)H|HsOayD./!:'8n ɬIdP"S,*8r{|nN3^SRo+qU3l+*!;ws$NsH"Sc\&^Z8fs/! k*RŬXU z#g: E>iXYIg+=~-lIzLC!TyFlw8ݞo7q8K)&[0Ilh\0m 3;v,ȕQ6;ЊN{}1x~)G(TYzGNi#i6t M2T:`J.0Dnʖ9wJ΢ /7{׍4Ua·U@.dkϣ&T>7_ʂ+@S64M+qIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/folder.png0000644000175000017500000000254112542740737031461 0ustar clementclementPNG  IHDR szz(IDATXoE=3;ڛ&Qd9@r ?$ [.A<$")`$$ĉ TBpw*-hwG3]_UՌQU1==HdϖZ. Tv/؉:p lt\v$IV՝sSZm1fGZZrB@+SKo~OD0ۏW+JEQEaأ? v` yn###ݻke2TPdNzAHZ-7 V+Dqp3stz8KU{ƻ靣lq?Xpw%Osk4%M4y2czQQls!ID<pn :6 _1= rg/4 9^1pN gm8]%bW K@U^ ۙMG{T 9E _PU{PU\l*ރADzb,ցA (QN0Ti%K^7b)",0YY*v,MPVjYu./BsmA&(>U@Lau04жEus-oLu8x/:ppN6/;6ā:thjX`S #DahB`@{ѣm۶x\`%2Q7wTnȋY-"BrH'+J! %Ж[قJq;_/]̌צ0ݹ}҇O}|0X\\d~~Fafss㭗^~'}fXR&ٳ'շm8UWDdjٵk Oxedd˗?LLL4 #M\{_oyfc/^(O?ddy.4Skc`rro'~vFIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/gear.png0000644000175000017500000000373012542740737031125 0ustar clementclementPNG  IHDR szzIDATӽkLT7KVmKݤkFŦMj]Dia~dahnJ`vSDA`gf\9s9sܘa}.iv˜P]ہ>+#fhhh̙3Ȭ<|مc1H$@~MUMQ@D!3 .< ;wgW\y3ww]]]''2$$+UU'0k2]vp[k$`023;vJmm>g^AҐrE,v 8pFѰ(@0yIDD"PQQy^U__p`LdD\n(@ڒUdr0م?6ş~Wव@X8g3x@"-H2t&i4s4tvvײ8tYN(Ď0d8xG d%BṐDH!UADpB0{*@ssp8rìBAB @9zlYZf!57G[:Câ:UWWs]oݺUҥܬ;XmTE Dy5eee?;"iNʊ  d/hl, 3 Te" Uڐ X,~a\nviϞ=e"&9rSc-&XrȌB2/nݺ4ǖ6C ̘(a2Ϧgo>&G~um'O'.l=5 E`2[fwP8t9N? AmmÒר@SS4'V9Y GcAիSk$EEEG*bab,YuuuLG*;Κ8, AĄe˖{s2yyD C*8 l=qĝŻwf\! XmcU@Vj.J2tuuY 37%YAC`燉'١ѣGo {;؄9yn<& d@TUAuDT"UaddD@;WewP¢DEL+mN+DF <ǘ?~a P ^@"\ NEY8D+ Ç$PZZ"!2JdqP5 DI,!?v0(G f+@RWW7]XMdH$¢xP(ny(0[+p]ŞݻwGә J$B۹Y NHK-^</o z,FC$"Q¢H l`XdLdVCWǎrr$ FњW񿗖 JQx",JDMHS"A!몳!gPX'O/^,,."xdE~ӣ3s "@Cdx9~^QVOU} `09gΈ]v?09xNzs1 ;oWVV9N:ewIRTTt7^Eǯy!>4様oܹo|0u OEY^^g&k+rcKCÙaұcY/0a]>1IFfJNIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/wheels.png0000777000175000017500000000000012542740737033114 2gear.pngustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/attach.png0000644000175000017500000000272312542740737031454 0ustar clementclementPNG  IHDR szzIDATӵkHwMe/SgK!bVkjɖ~emVւBC5@M:MPfĎ ^kH jm5h.y/jzvuuygc?#.yQrU||ߘ~urEsii Z\\9t:]Ϗ_s^RAO8axꐐ@ _PP]]]!D %xbq ]l&vv(,99B:L{N3x) (=P~z+ٳ_ofd>x`# j5ͭ4?|8檪jH$9~Bxx &&&m'n/CVV y fxxV+LMMQGPTf l`gggwx^_ +~$IP*븮L&b2m|u@NNίj5Bww7DFFjwΎX,VhO# GFF@.p.' ..nP^^hyytF!C:]ZZvCFF Gف;J? ZZZZbSVVr9A~Og(66MMMPQQGtNmmmիAJZ˗/?X: >f`ɿk h+_\222Z9|W6 ւ/n'XafaaaY2a0ZO @$s^vtt,ܿWLOåKmWCb2V  C28~xな8/I?C*j"""N҉9Nj]k; jr:PrF u~b {^8}45/Jrjvv:y<ނB7 Np:Źs044-[qqqhtLNN bg% ;s̓{@twwF?v}|%`-ľrKAkxbs%0~n1n`uIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/bell.png0000644000175000017500000000353712542740737031132 0ustar clementclementPNG  IHDR szz&IDATX[dEUivf3ΰ.;XE/>bd  1FACbL&!11&]#F,e;===}?}ܪ|~I%տ~BkͮO&N ]~luDaOFg=ukg/pq\CzL08۫|A[+ߑsjyW߷|@0WV6DOh/tmZowB#7 Sܚ]q: S?XYH+K{P"OD*J:^٦R31.'~p]%/R Ӑҩ0P:1J4IS4ū((y,J%0Kv ̜aC^)pTyL!A#A)4'#v3@IF\EhЀF@ӁFk!Uq EV)Z iR4\BQY28˜(Eu'R(T/{E.lv I2$%KǸ}~"i!wpkw]_. Ɛ 2V$qxL{Vh؜֦!a.uTgW?~^9{,LĴ,F!"|7umIB'dϳxƹƩcǎR,Yǿyɗcn/ec>&$ J~oh4dg{Ç)`#v-N^CA`PAhhpvù?.o߼GN<ŀI2]0pR eIJsx2C M8HӐ1q0[+ˠ9`;xlm/_t׎UHFطr[֗H1Iůj NJյu%Ab.cL/5&'6sޥ 0]tvVkGC'F^аs<44^S~$ܸqHTXbv:}3%wq,AogDrJkZLeRTZ a/PJL)'T)d2D$i9(fYϲ, 0dhJӲN:y䬞iCӐc)e{}PA0w &"IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/database.png0000644000175000017500000000532712542740737031757 0ustar clementclementPNG  IHDR szz IDATX[l\y3WV\RryEQYȲeɲ-Y/4q"U]AHꇦ@@ں@8jR++1unDBrwL(|p>`p0g3EhD\nWJc:1$WbquoWYSLMMֆ)jkk3G>5˽(υBh* q<"br.C/.,EkdiNZ`Iy^sMM캺:_:u]\ץr]*`MOOufq[ڍKe~l`kI!pm7"eќJ"]%Y>g/)y%aHc\ωkF4pőmOYR޾?>e Fi (ܜ}PFkY*i>؞FHi@KQ9(ce1 (F@JQy>et`Frx"AX,R:H ,%QR"}@ ்` h4ƀQ m FkXح[4o[W _)w&[ Jk<ߧ|O)1rX*#D"Y#G?p(DqpmJ#%v- ۶,u`,+#HKp,ؖKqg{ "*66a @v!Cn?}\ʞ%H$H ˒50 6hoe8K߉Oil1b"sss'o8opSOL!8Ajr\ss۶ ;.UUa >>! nchIiB*ܹ~xݻD#m--Ta6F+1JBH-&'=͛D"a~g/^dqa.WoACC@S:ґ?/\|c+8,f20@.' SSSE,P(\&͒YPFgѱkWx#!6mjj#]242«?Qgbr7_xг7 \&x6%$N7#mK_CCCܳ$:H.`/,,O}}(eدs]d[imLgCMU /rf&hMm:Jqss e/ܦھS8!J"g_`xt+` $ J%Oy@JI8bqiqV+TTSOյ#7=9I۷ư?uܟ|۵\ĩ$7`dܝhX€n @{[;R)8'Oͷ~ʖFG#¢7;3}"ٞEum퟾{$~$In E{N"'͑gX Dk) q9vP(y|cJ!SӬXCmM-"lX]-uuU03sp?+W%c~]N={ر(!DtppݟZSs>{[:6uOd+"5$bH"V[Cv)033XRJٱci.^̙{t_<Z[Ƙb]___כogSrQڹg`|rannWB+ZXM PW#jav653:vc>%ZgZh68_åͱҚ6 rŕ|uDBAt=ztߙ3g12lmk<==ݴW> T23;իC\KTGCݻz{?hmkr'*`@ u@Hv8qbǙg z}scn~JqǀC<+2:6xڗlv}[ZZpՒXӜS"D+j$^i4;;X^^+K!, p8ﶤRMͷʎ+K@TKcYQ#Dڊ*83TJ)!2*2gE`X+֔_Fr B(Pq 8|eTbEfo͎e_ $sG>IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/bookmark.png0000644000175000017500000000333512542740737032015 0ustar clementclementPNG  IHDR szzIDATXMl\W3c{cO8B64)m*ZHTؓX 6R< +@ZHl@$hHMiB||G?s3Z˃<Ўz_fSlo}./xTEnON?/k SµM"ظYO+ρ^C?vjL|l2& +"؁g{#.iݤov[ωicd{oySg*PU}{fzS9}XπKcFAmhn*lظսȞ/}&+`wO]¦Su3&z`ڿ᝟I.NΫπA8VHꝫԹI[ou“"=vtOCLv+ݗMvvǻ:hZ ;!phxiLczP.ϗ*RqVx\)_Z&jM})e浃,ٝMǓ]qO`5U WM G/ 22@ V4B<{R uwo]PLh64#6uhmch\ʮDӉuvoxspېRi "|!'p݊]hỗ1S]@NOhxf'nP0"u ν =Fk#%<np)޺蟝8ǩz+: KL儵C^H1hL:Ԓ-$Enm( )N_ߝlMsԁ)^]1=}Y@Ȱ"Ӗ(,nܘ\]9\Wa:@K3/1Gvt9:]Jm JnnInsZ%Lh2՝=}[Yd\C~!RR.h-9a=ݍ8 B<2 s>U,}V >I*فZ雏S2[2~ezO X YنBW?,5 p HWeaaR;L?=ӗn'[duX@*s8VR.WgSZ Y`> əω'Xtͪ˓K(k[VUXsDO>'etkM7x[}`ā =7hey!j>'X%!kLb3IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/tools.png0000777000175000017500000000000012542740737034030 2configure.pngustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/money.png0000644000175000017500000000250312542740737031333 0ustar clementclementPNG  IHDR szz IDATXKlTU{zgN!4@VyDhPB1BRa•Ѡ$ ;c1߯Vb Ji(1;{\AĴԅ|~}9B\k>A/\/O?|oab.gŝ[ }ږ,w Pee2' }~έKn]_-Sv=q\./#А斕%q"sMWLD=Ɣ'*yh 4M[7u_-%H8~g&2^{~yIc'xm[le&'b۝גǩxC RRH8M4Q.mcI]l |hjk)*ibvr!P s,iFm,.nRD@ k|b|atgjwLXJ)t]tprE̟pΥ>5Қ*xs6 !A3B)iG"w^ƫzSsXp?{ ! mdIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/network.png0000644000175000017500000000474312542740737031705 0ustar clementclementPNG  IHDR szz IDATXiygy;]f ;`mHEH!$*imS?S+EQFZE*E%Uܸ!фT@ lˌgwf.~ cGzWwr`psrsb$Q|&G{ 9ct]Sos{"_ m 'z)x4چf7VI sTA䙣GڿswsR)N,)XmԚ٦72[F;5$ơdp >wǠ;/.}y ý{<Z`25r%:0Α%$S{ w,CϞX'?yC=|WeQH)H54VĩhƆ46Rh% $5@1։^F+Lgv519'/68" 9ZmClgXBvl9zrg__oZzG|MBH;#z}n*2[p:8EXpֱ9'-fzA5е$jsES%q4bJ3eu#A+=յfsrj#-,62(2;&뭌 8viMl?<;JSd,Jl J }ŀ(2ON/VXmetb)8YjA",1{ߗN~Z@moc-IbI2 9bSGX?|˷ !f 6֒Z3fz;W֘]$qb3190^{ɱ}0T!O'nY_Z)< H oh&; nF#e9>g~mK1?XX)>clKO='*Q* Bډe#9X|fhD9NЊ f`9b!ʕRv~lMofֽw|w}fV6B BHE> U<{=BXk\vlh2cY%Ky٣:w썧(ΰYWwwD2T8# _:c}?[zr$g*OIV\p⌢X)DaxǾ}f K8˒kDAMe$& 'IscC~)?d1j;IE>$C$qƾ›?=Ӭzu^uk?׏@󬡼wX|ێcmw?6>8^H8@8AlDč /铧ޘ$I0Hpv"Y~96@RDQךN8?R+VJ(xZNXXZ-WN q7m$IVʼn+Hq5{ tÙ2PRI%=+_J5s:%:eXc3UF~u]I&>[qΜy~KG3W~Mh4甶M (o a-GHIIs888jhjjRXX(|LL̫w+@]]Ki9EVV  99EUmqa>k,444}{UoUece%Ց~cгt15GUM}]{۸I¨%?`Ol~$'uI? ɾw/R7)h9"a32/UWUt [$-fD[ߖ(ro5󆺀˯&^g_|M#3] OMŖkuL\ӑMKD&n$+m6 RJ;l+#P4am9*tn-SՂnM[й{Bߑ QNh=K9L]%hm-Bv,kw0R[K֕c{]H*X_.`f}"DSDazŠ{Dqhji3{Y{[k*āB$9vN/++ jxUC1_TwN^_T)JTC2|Lҡ*W jXe],MƤ*W˃Wte+Y~ӰSҾeb#58\CB-J;|GkY}$Bʱ9YOY\ܨ. dh:lc rHؔ=~-k4Bh#6^5ʺ}445oDH?]Gg=]/l#Ⱥ3,ī =Xgd4Nubx2Ģ 2lZH6F`*eBPs֊L1s>Rs7)DoǶ^}wcTdoG@rPFpN>gs)=>xlF{ +9@޿sqtl)bf0z!ITkK+ JA$DsB1)B0w\Ez ҎSLv܄Ё8Zg%ÍcK]j>Tͮ5TK*v,{Haj"_:=Ҙ8ĉ1/`ӃϞEHߚٙY"$mWi)֭1~G15{3gE%NvDA<yFqazlMIŹFE{;,46HNLАm/܌L_'{yx=/p:&6:nj7ؘ˖ʕhpkMso1zZ\lU}?'o:XH-f6VTXiS`UR۷p +bzVru{_Z8ĖOLCoʦqݻ&.PWS[n Qu,8Ν gkCQ=P\T|47_D{[;پm{׉ YԿ54)0v`b2w5fͿ])'?0.`d '?+G<|)4AqoaPDf ~-4۸7Ľc*4>0.0 ]|hŒN.%BƆ ϰ44t/IG |?~Q(qtD%C\ gMg&D>̜/E :BBp+%QQ8BPN0Q-hbc=@Kt V TLv=Ív:Th4ȓˑ+OxZS=&okE3 288hڧM÷vu5B _^TtoKٴF؉Dv!!ӡ=E&C 0ؿݐV8NRoon+ܯsqd#؉>tHcR)2d'1d]9H^zS u >22')ثTb &D:C$2~fO p6pBI d ͽ `1$г7ƸkW_Ça6leg-XH-5ظbbKG1t#L"O.`IJrS!h|t=?΀A/} c׶; nȃГ\ryil!_75LMR)v xO6%:\y>A x-N13``eoС=uuw ~Kf=PW\AcD7 ;cFak!YۈIlkCI<ޣ!2YVg4┻ +C?y#tZf_'x+W]ϖ84+;L;,$[W- l%%^1" t1pUCJE䱢Tˍ΁FU rq!ucwHg -?,Y<5{C%t)8q :q":Ѱ?7s+OB}!maiw%{J@d)*x* Q;w᮷7OJfbׁ1tUy /eYAD a1 e;a!X0oZC* MfJT興@o%q={؜DҩBcA3 \8J5DJU+j5tFj2TZmR딪:mi6KkQ S_2ˑ˻T o%%H>z!WHl32Y |kD$"GH)9Hf)9DX,Ld͟7r"Z瓘]s\?bV7R`IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/tux.png0000644000175000017500000000471112542740737031027 0ustar clementclementPNG  IHDR szz IDATX]p]u{s?t>-Y²#a,eʇ2RN }hBTҤM Ifƀip*d $!ٺspei{f֜9gY^{V"¯r}ݝ7|D__Xӧ:陙SSW[l)o۶;󃃃;r/(m4g=u#|XDDs2;{Fo sr_<2}occcٳGz)YYiC=$===8Z+""@yyIyGd醑nu݋7_{dr4DQ,SS'رc⽈IsR|rsk܇"a3o2uBl-kmPgyFaShbo/26"LdbW#EK2? e߾}bn?I<߼Hʇq^q$3/!^CM[.4%JB s~@gVoh=u~ۅZ5_g)l=Bkח)֒fmg{b%ۚyrLo5"?\ ?aOQ~j~@.6"°I [IFIYS!#:)VYo^fEHgּf?gvgV 9@ZјkpNV B+U8ɭ:ɞS*ӊ̧O;]e'cJ~PI @BjqM7H#/[녦\ly8Z:v 14Mm6KXjA 5E1`r0)d \d![Wnp151YlCm ߲Y>\\f! tѪ+D7Ǒ""튿bWUۋk={BŐ_}CGRԆB_{d Ŷ33 fϜ+3tff%Ir-ÿߊRV0vMouexsݳR\9nAk1Ƈ~qS]Y^Wn^mdPZ6,^)nP0ѩSO?}-{SϪQ۸MRnL[K$1~/Go J>= ((d (,.KidRx* ՍhHn/BрUש([ B58KY Ve(% O,RF2wWz8qqEGaF{Ơ3EucW(f$=RFDҴ(Gyr'uM~s !`~xJTy_cY$5F筣1(6PJtUAAR ddBd:|IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/demo.png0000644000175000017500000000430712542740737031134 0ustar clementclementPNG  IHDR szzIDATXŗ{?}SV*"Ҡ4j+T-J5ilҤDж5Mk,im(bP`%{{uί̅M?z_fL~s3JD,LJΝɛqj.N6'4=,{%uG ئ`ƈ1X# 4\ uiw7}@`͌)m< }秜z|{,1ؗC78}ŀ]%J2G=Ϯ}Sf8u|J`B"l $4c:󢅇rd4 e9riqcp4 E Zэu2T9r &Xc0f8:Sf~r!Âfw8-QKQMGJT>Ov: 4 :| eP0@p{fT4嘝 ?˽Yȹ crF`ByR%&FCփ(?T ip F0g HV!@XA*F/ox_LiѤ2%"+H|P0աԿt3h XAD\A2#% ݳC6Q"ې". #>B (HU3s,}3wr"&1EBOƩ8B nk)A{l*(2$~Y\vH;y@JFkc0a& IF@ޢǚ3hAc=C%rP`G\>r|K #NO*f60*U y WoFlfR!PHC6, `EBRyptv},R&E.p/VQ*%.hD\my]}b̉VB׊ĦYN;sMEi70g|VoM\h0D 2ЫsA<sQ:(uX<'иh-",L]ֶ8|[_ibTʘC}__[q,-K( 8d tT]7W dHԱT_9)N=nY8ϚOQwrstn31S?zRDl Y%AaE0Qr5Zq֮y;RIg21jϭeXUaqc\;)\3t6°Ѭ^:tw1edXr˻vrsɛ"XumظQ߹[8bQw4' Pȍ?7>l#I{`ʻ?DyKrײe[1@ + Ν7 `+O)r7uIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/terminal.png0000644000175000017500000000231112542740737032014 0ustar clementclementPNG  IHDR szzIDATXnG=ٵD#d@.yDƍ LjW# x$(|C#@H\-ݙafڳkID\RkgUs6YH~WD Ti֌`@aepppp✻ny}cTU%C03~nh@L<Ɨrgmmh?_(pCnnB[Q p=&I$hYrjysb`x<Y;G`Ej-//s}^x˗/ɲ4MY$7ݻw;E @ÇNϕmFQU2 :kLd`yy9<c s@DN~p^Ԃ0 EGx9:9ܹÛ7o Xkg\pxx۷oB@RL ﳷWc(ཏ "xǏ4{5.:|,8\9T5F`ٳgXkYZZɄ=&LkmІ 꽏^/*Vզ""xq V^ t47Jc89^/{}˲;" hexO&0ư: bN+KD΂:n7hPU1EQDo""H\Oٽ^k-ڙ,Ȳ c +++3y.h߸ IvϻeE !ƀ6ccut l% >Z( :ND@D["ͼjP95|7$!{Sˌvj,x_Հr:߿2ZUc{{xWV]E[ؙȋ"9>>YkiOҕ A"B% o[߯]^"ɒ! ]UE1!=%EUG( \Q.ޗϟ~kwwwIDz@S# PK8sV (T5k׮8f7cIemɡ~if_IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/docs.png0000777000175000017500000000000012542740737033112 2folder.pngustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/help.png0000644000175000017500000000452412542740737031141 0ustar clementclementPNG  IHDR szz IDATӭ PA (%,!@ , !ȒW8nrE.UZuQ[hZ .ulK*ԭ^̼dr9'pnU No{]G 7tP^P(avLM,f"jJ֪Lo1!zS½)ʼ[*~ށ;~EK'E}C#'N  Ŷ0fYZiO{| |ھ-@s=RѦEgEkZR8 طtg*99hɝ;OtW1׿`WMrUB@3R ], FZ0 QDq̛mQ\/ƀ_>r5 oEQ聛j_.}.jBAi`f`W/^ J\%\i;|0j>{B\t- rF~Tr6c۞}((:VQ!TR.!]2]Fc&)TćYJ -O3xGLnNfJΆlw+ҥKW4xxڍH] WCL8wJ,-ΘqKŷ(](Щ^}̇9>D.P([-Mׇ>u"ӛf9Wd;*!:Ą!@? G!Kȉk!WxB-jkP!IfOIx%AvgEB/!nD=\.x7klb3 T-JjU f}uMMEe57Humxc_Xao14݀d;Eh[ o+.^EKKkO&;8b!?oBL?%ӪXh56,2{T!=8zL(?MQ%ߜ>S{^f]< (xRV= rҙѷ}9]ĵ6!^MܫoDRą:zS!?5OT\` x.hf?qP-B:dEC{;p*(ńz `­Ƿ栦pp ؞,6sŒxrq!ӤuH3?~F&Fz ;Ia#~#9 Ke.2o] sqZdJA @< p>|rOBMMrx{e(:xWk,|> 9B@#.;`U^hor^@Kk9t,^Ƞg`@Ӽ$kklQLo!7- }տ54\{b-eiA%< ApHP&{bb+*T:69wĶ}cBp`F2>]ZJLT:{E$04HFUnUC$ar`hsSBCga(Z{') I ,y8iӝ Ovuc)S xQ}bEH k|GFoE9^ h;a)wK1N(z_uYHd~LoK|(NڅH`/Ѹ܉cl9skf.ΪJNѱ#h Vcz)(@tqEDY|V`@WGj d>:O-ZDث]Ątp(ݧM{Ŋ懏Щet KZ~Wg7nT+2F\]غsM[ϛtլ_n_xuUafX;l?== [<@?{B `gQDdn'ccc$"ϛks~}/vh}+[IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/apps-logos/README0000644000175000017500000000042712542740737030361 0ustar clementclement/* LemonLDAP::NG project */ Icons of this folder are taken from Crystal project: TITLE: Crystal Project Icons AUTHOR: Everaldo Coelho SITE: http://www.everaldo.com CONTACT: everaldo@everaldo.com Copyright (c) 2006-2007 Everaldo Coelho. They are released under GPL license lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/tree/0000775000175000017500000000000012542740737026353 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/tree/root.gif0000644000175000017500000000174412542740737030031 0ustar clementclementGIF89aԗi[~wjznv|Ⱦ_QvbTyl_Ŀode[rieZ{rl~zpm༻ܲqpFFFFHHWWnneeiiɐÖџƴܦǵծ̱˲˭·ϥޡk؉^`_㟳g揠a萺qY9Q9<=MRTUW둹Wbfkllw~!, 8`"%QTɠ_)f *D)SO A9!@$9yك'N"q37m$L5Hנyr",bΌ KPŋ&0(Bʖ+IXHlЀB1dG1BMd3\ѠEFBƅ5F  B;lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/tree/tree.png0000644000175000017500000002603712542740737030026 0ustar clementclementPNG  IHDR j' IDAT}eaKԘuI]1ݚiLHٓmmk7dzmlwo+S@kLǑBQ*hљA)X(0:cѱ8,י#z|s% 0@# z'CJ.j4+tk}f>wlu@[kxv{oݛv+o{m1N~s~z-~[wZou}%߳off­}%޵l{Pn1=hBg=[xj/9'7<~'5G싿x[oƯWrѷˬWubl^{3{>pʏ5Zb}wO}se8Cͬ6n^}3^G#p{{o7h[mswl׾x[{o-ۺuwu]s ];_zw妣p{IOl?޵wOv۵N@3[un8jwut|rmW{қ?yb=Oh @gל{ڽw8خ}no鯶/y{Ymܲݵ|5];_zw妣ۮhs{݁{8kwˉow\ѽwwwl׾]zNxͬ6n=Лof;^յCrmWگ^}Ob7Ѣ}v;u{۫_~~3[u'>n핛nr^ؿw^tTE;Ϻhw;u{ve_l_-N=nܲmMG]iw!c)rӏw兏k7~hw;u{^`}7 hٕN= r ҫ=on$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$]@aF+tk}f>wl퟼g+9wt7׻7 ý_xݿ~wJ.w}3~־Ouލ[=zcyҳ֭g<ҋO{r?t-zַ־[mwzo_E/[޿z_lm=k}f=N}W|@w{J.v-ۺu![;?۫yFëWHE/ܷz}{>g>^vYS?jmݿ冮/r}8}C{'6Go>޷`{>خ}`3[un8jwut|rmW{қ?yb=Oh?޵wOv۵N@3[V׻}=ЛokKttەmn{ۡ;p~gvn9޵wOv۵`m?%yo3[u-7YonǵWuPottەg>tWſohw\ѽwwwl׾]zNxͬ6n֝;Sں#v~Wn:ʁ6{^zac?ߝnzQ8}m޻wl׾]zݾ73;Kq˶ž+7v=M?ޕ>Ѣםg?w캽zO{//|ɖH[N||7^tTsOyㇺv׾]̭{vۭӾM?۫=on4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh4 0@#i@aF$FII 4&4h$Mh4 Hh$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$ItH@aF$>7;VZמ^}3FF+wOoG_}ݻwmX9.9@-tR/=izS{?я)'C>9G>joӫzݿ[Po=}>pʏ5ҡlܲW Gmx^}3ڮhaG#pDq˶_6a}ok{nkz{ꂓHq˶_ Gmn񚮝k?vmׁ 8Q۸e[okuoZ7a}rCo񚮝g?J3wF:[u-7YoQsv\{U7Tەvw79G>jlΝO|Am];?KzZەv׫w7Fz(wi7nٶCzSۮu A#>Ӟ~i{_Oz+~Ğ'tˉ7t兏FH$iH$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$if@םc=kE_űgg}?9Y;n}W{=O^מr̳Z߷-i}/ݺm^~{͵׬_7t~K_Z[o޾λ{]oo~;{l׊H?vӵ=g/9c`[׻7#/w^]ۻq˶Pv]t:n=㩽G^|ړSA#U_ݿ-zמ>\8P6n݆6<{Po>mW0[{^#8Q۸e[vڰݵ=еC?vauIOlCٸe[6|W7xM5֟n^Qmܲݵڰ{n7xMvׁ[N||#-ۺz׬ ݹsz;kz{ٛ~JׁA#[u'>ng=JUׁ^tT#=Sϻl[m=mWϿ:pw兏k }8?Ӟ~i{_Oz+~Ğ'tˉ7t兏FIs=r@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4\{l׊1wYYg?kys[_}k}O8=o8=-oynڴ}_ߋ/h}n۶_q^s5{ׯM7ݴ_җ[}}{w {l׊H$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH|էv/P?~?k4a~M =;^37o}N?~oC֧??Yj_E[hGh]7. IDATkumwo4H$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH$iH_WOv#}?G>~[{ܳѣ4zXR?77k~w z^n|F.'=,K~7{_3>={ s/OM[ߋ}G7xZ Gwm#iB@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#IZ4@#i.;v|+=<@Glǎ+vɟ\?|e}ozKOxA#=vg~?=gO{'>vU4zDv\7}-m#w|I/?ێ{v|}Ǘ?jv+[v>\;>׋۞=7hׁnjpcϵ~ sh5 :@>=b۷utyO|E{ܟd?'yc_sYX_okWm_Y{o~rI_ox#Wj_G_[{zoK_z}yCryXҳُ| u>+}Kk.ٿ_wy`܏~\>}??X+{wo_z7s>\K#v٥;/wv}W^yS?k7~++W?nes?܋>k{Eᆰo;S^Fhᄏ'izm__NF0$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-I$-0!sW;Ppv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;jCPpv8T;,7_IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/tree/spacer.gif0000644000175000017500000000005312542740737030313 0ustar clementclementGIF89a!,D;lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/0000775000175000017500000000000012542740740030034 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/pastel.png0000644000175000017500000001237012542740740032033 0ustar clementclementPNG  IHDR: pHYsaa?iIDATxo\}fp;%J)Ql-{ر؎$M6m4/yMP@_ "S$hѤu&qi];oe䌩Z.W0 5{j~<;ܫE$I7nHf&DA?u,t5h+<-7Gs%'/N7:V|Ep ZEz}J~%)@` rӄ eS % 7y yTނo%iu[e%YAnzqQU_2 Ik/R8)_~9IGPŃ|_cѣ c9jj*bUL<ˡ2WyWzDsvvgR5g7v*4ufpL"(v"݂]556QUh,V7'11vIIu4)fX #$[ްv?  ݽ'jʆON( _$݅P6e/rs)&C}$mu#GRBn'HRt)$)$"֧̻!\Ν;(^Z[[ܻUE˕i&hSBNy>|LWWTV2 333saT tm| \%裸}kbٳgI&LNNoR*PU N:E.{練>JFXD"^ux'BCFFFattݻw$i^jK/188HU)(d2}Q^{5(?OocOBOΝ;ie;b'|``!a>5;ys\fڷBF&rש =72cd"i9 Lz~Byahh(B*477d>5Rٿ-2_;͡};#E>(^=9{ydiq={Y5bxd2{;/Vl|?~ _fbzl3|dp#S+&#+T P3.~9(Fg)M^;n'Ч8CX\Oa6aDfƚlso})$efr%F<\3>tHմ)ULƦX(nP(hJƸXZvSRł~<ixөů3Mkty񓋗I'cW}4ćY?YZL4b4[fz7 L y9tttpI}أ$S]vqIJmDB.oF4N:::8{,By6iEa:u<Ν>r9,vBQ,"IZ'ydYZZZ>P(`Y`6i055E[[xr,DZW>7JQTD"it]G4TUm<\u] m* XRD[־y$5jmh˼Hq<uqgZKeH!B|<,baal6KfeZs"L L{e؜BO|8R ue,[PEQp}7o߾Cywg;c47QP49Կx+/g~v !ռ5B>n&bYrbxyDUF8N#Ƨ9si#3}fi UlϵXwstGBO* QT0MQaljDQbX<ݗUN((<=hL pgs~J½J%4MX,8# Dm]ׯS-Mѵ4?v{dէ&*et| Vjid2xG[xxalJ«(y-kqf/N ӧzo}mfaZJetJ!Т Bj5J˹b6y7%4YƦxALen*5 |\-dd"g?S~z|hRJTT5y:?C,PBƜB@\R4ʼ׶ KH&i4htSuoiX}JNJ8@)S}5`Vj-/񺮋hm8dEQFRv%i҂?0zK\U]>8Y*XaJE*Fp殹OMO&ޓy\[evD})B<15ND5/UC*qmoW !z5=jKWCÖc;_w./MZeF3oIFD%3O<҄Y$s,\x C[Uom ݷCjYfz!il" 3bb )7 稀g/ʸj"/3(BD"_x)N|k (932PxjXB[VjX&d`a};pKWY\ˁ°d2Z 㼫h:%z/ oGj:X>x\`~ ؊E¾f^HwQWz;˧ X zg=nJSMeY^UU1jyywy>hXͻ zsb)4w5 z>:^,_'|1ZN-曈byEUvo$bјUO6H.P5rbpGEq.Г<8ČF' nm{Ue^!DQW0,[q}**(5A'X]Wcy޺sr)>!bYDW v}y/'Q=A6|uZ*W-S!n'rOŦf)ֵAR~yP,8rs}6$r$"iLB(H&>&xK%K( <)yr*JĮ|X7B޼c{{s0]?(.3q"_7(\1K?ؓM ٙMpfx ,{e{r$LRV9Fo{*Dn 8(JO>$(pf" !:#`wOAөj05>dǮ=<4[r<{:* z[R!հ,Ǯ/ ]}9zmOHH2KZ஥ˆ6#P⑉/^վT*-*DźzPlׅH }$mB/ X0 _+|ogamGCN+I45+VI45ʿ,I۝̝$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I D2@$) I PzܠzIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/impact.png0000644000175000017500000001604412542740740032022 0ustar clementclementPNG  IHDR: pHYsaa?iIDATxyl{IrRC}YrtlYqb%n"bqڴl6  P,--EN:؎W1XYEE!ù睙4ǒ,d[; Ǽ<7{<d L 4 D" DB"@ ЀAh@ 4&D" DB"@ъ% ; 4]qpbMHQE 8ض,nm$^"IE$Ik|"f6D+2a&Zȴm~5ky^S|J,u2n.Kt*9VPw.K?}b ^ͪTYL,$IxMv$"@ ~f?o(<  _u3>6%ۊX$fMp#ʦ9o]g&?!2LTm!)~q{aν5LM̯r]xشm?Gضs+O?|ⳟ?Ǝ;Ȥ3tvx[/c?uL~^Ky,h Ywӥ* YdM"4&~o^ՍmضʞN"-ܺu K.#orab[oF,q(Bj ^݋ DG c$:T -Q3iű\eמB}XeYmI'͋3OQshqZgN2cӦ_}4nR1+Pw>/ik}_klں$IX(VoWs.?vp1q }y.E2-|]xR29k8x0`_zM$\˃Yt /& ߇ەo !:B)GFQ$_I]:|tԡH{wOv܂Lxe`gU7v_/{'QAd"^kPۿþa2@<ϣl1Dv@v<R;+1N%`;2Ps*خϵYݲXw_}} xT /,{C}No?YB;| /IUyXƹ]:eJV$d^֘*'Z}`:&cb9&ksgǥx/ѵ-IZw<7m+V1< fhf{9Uy,ge5Bͩ;+%dՔͼ$m5Ǡbv l[7Q S6T,]fW Q8}r+F >fk\L?]Ex[fWeaXz^ZH$j㠪MO$=ɚ k&ɑ\54mܕ|ms:"p4*Ȓ9؎EͩR8˺xT*%2FGG Bu{PT d=ݫW:Vڛm˲02=ifgѕH $砠'-q{#feUU`zz]ioo8KŽyÅVZ mBe&oe(.|V_ޛwmł1rxd{49H(D$eqdYFu,.\Vn֖Vbm1?itUSxߴb]M&att-?O65/N?Xi]"DHzٞ%.##d2t]'P*SQ>ٍeTkȲL:F1؇LMM177G"+}4M4GevvEQBB! à\..L&%,v~3zF.M h;vNd2r9=ʱc( :pVZZZhmm$ 8d]חu`,;]oUS~j[q󼅼0ٳzJH&B! @`YT]$6pp$t,BӵKn4IPJIr9Iu]׉bl۶"57}m$ 0? T(qabWQ*t|6ϝA.\*396 :1ƭe_(`8 :yF@5ٕzWt\&G$]kV>IJ*mUk1]i;?f߿uge7duWfhи y`xx~ʖ[ e]So&&&Oʉ'ظq#wt|AN>޽{ygطo=@T*E40 qAزe Of˖-z 3>>i۷~wO?M&;w_җxꩧغu+XAؿ?/> ɓ<裾ω'cٰ`(HRŶZZ|p4y>t}+RДǓO>?̉'կ~ņ 8p7/~mx'X~=\pivٴi|_3 ?غu+gΜ! RV7`޽DQ,ȑ##IO>$vP([o#2apy>L W\7d39:S ;'gu9_˺Ha{$<{1>OrI:;;$ DZcǸ{9x  <ĉl޼vٷoַr.;F*-[opK?<o8td@ ]w/K~:D( _Gz/Nҍt`(Q2[iq1Ȳ(BF˴.jA^&qM.f6gϞeƍ& 8@:Sõ @]ɉ7P ApyX%^kWz2GhCh-+.ΒՔRT0kR8Ç&Yj'OdݺuVVZe۶Yv-{azz)lmp t9^xٲe98 D#Q\0&Z<D*˾b r^@z{ذ_)s|>ׯGQ7z[Xmt3M)biǺ^y0UǏ4K(a׷>X@jikkСCtttP.ٳgǏGUU0ld2 vE+y===xG.'d'N;\.L&&JeR,$򭭭HD8FUUdYѣ$ Lr6o4Moo/211Z.֏@ LMM8A:;c{{{#d,L&mTUΝ;wS,Rɿ$󮜤/.rs֋\.G,NW(޳hzzT*$IXu{ `.ޭ`!Y,aDz,*J>NGGܹ]dCEj#'βb ,Ǥ(0D(dH$&e =2fKﱐ+y.NXDe``0LOO}vI$i`!AxELH$,tww;6yD"i,k֬X,jժz7|>1 IXjU:m377cnn>DV uio_XaN8dϣ( b˲bLkk+TX, =U=UV;?,L&ZF#+ I*CCb1~Zd~>M$!0:zn--d3}'yզLҥRs]Ie:_|FT"E𻪚 ׻%4ST*166(ʕ+!Jjk֬q*2JHϣji贴099I<ԭ[UM9Ȳ*b_EwUp}6 b~Y$ff b R*5xnI \t15u' HW\s˵^y(ejy*2y5W&eSӴQ"JGVSLWgaLbWl;>fki\؞CͭHo7={6`UJH˅T,}|VaaSŻJL$:5'qP$]1ԊqYf.k jwH.45qDB"@ ЀIp}cеw?9CS5JY3wq>65NHY]L<(\& 9 4{j^eX Z"۶.# %iS², 4\(+=flIJ,%?ZysV((k>ZFmv|1*+WV!2ԧ"bԗ,H$BX$ɰb @bYr%~Eop Uu* cS7opwlY+SD.ñ)m[MRO{Ml߾_|nΜ9C&aڵ$ X͛E4 ---  eFDu:;;fl۶.r >}jihF"`>|NJbH,#ؾ}O_wlf``9q]b\iDZ, qbrrX\.G @4Hd CcLT8U-cQoRuP$哉{9W=,IlBW`%+Ùl&Q.W_`ll9,bڵ044đ#G<^{ ˲fxW<_Yt]G4r###(BKK pӧOuL&C{{;wfzz\.,[,$0<eO YRw=Ta*w|H$`8ueL&Ql6+}**O̲̪n06ʮix/\_MӴz^$ICof} 6|t˟hźK]otuuݐ} DBP" DB"@ ЀAh@ 4 D" DB"@ ЀAh@ 4 D" DBF.aIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/custom.png0000644000175000017500000002407612542740740032063 0ustar clementclementPNG  IHDR:sRGBbKGD pHYsaa?itIME %x IDATx}{w]f>ܐ*J(j MQƭy56%$)^Ш" Ҡ7}_nFRD)AH$NrmfZ3{f_|>=g֞YܟUCгkcLv1|8 M̞ؖsBXw(&Q$Yp01Pǁ9t is`MB|P9bTQ*o'P,Jf,\b s؁iԶ7)u%,d+~8[NDMЀٖX ,(<y@{,Qª<֊Y"s%LpZH}q@[1ڴ"2A"z yn&@g]LYiF(j-bcݭlBp0O]̂NBFbd^M£u0:Q)%o(g`. 5HSUc \rGp H s%(o$j@I5BUD>  "Z h= Dq D"k3PA~g 01D*tbFJ%9?k @b&4aALC=48": 5{\,ƪ8 %`\VpԂVTWhdOe`N?pp+b 0$43op]d:QL¢&BBc`K.:d+Dk`aJӀ L͆'X.RTYsOja'uT(wX*JQKm z3.."ۍX^~``7H?!b ˂QVĴ;DzP$&ޭ Vƚ=] `2p@ Q=#5AʢƫGQ-p|5Ĭ@qmY[B uWkn5{K-0&tűVRb1^̖ V,Fe#OCBN­ tYrgX8FsLXsA%bUBC RJ01>/n-T-ydB$Uf/!cU@١m< CJ )%ǁ2@Ct%to|y3A";C5|߇( ( \o[^3Gv@E"Bcc#n-` qڮTJ+<!0!L1~a5gIAz~/裏!*VZQdXn]g>}fX\[s)<B<$y2e jjj?O=Q__޽{O>zաT {þ% ¾8pp]בp4۶\c9Q @3AO6luD9s>|pQ <Ν[=E]lGr+U$8W &cI@s˕*`,*}B%L٤:00uTRp?H!+h"|1ݣ+ū0AID94uYR޵ )(ƒO~ إ긮3RpEOmilܰRr % 0&@LB3  E|#MleͤlԀ]<0p`ܿ7Na؎b=5]ݼ 4euI͟8}z1.]0aBR@)y<?~s=. .+ҥK|oC9$&c.XF* ^o~[o5Z/Lnb8oCJW4s}03< &4\WWYfU֭\_]r%WX^z)t:EȮv[߶E/1[|~6)SB[Æ3b.HCZY .j<`BԘm[i\{| nPBB5PzJ4FͶq 3C#GIA  *;~qnjg~\>xte˖a}iy_~9N82C>A9qs L, {$zK۱Ǘ?lj(* ;E\pg.sK0.ַ6%O}ZJ(ׅJLsh!$%>XGq@p"b̘|K 9+p!vkߦsoθ~x' 1ϱE.1?<:N44.״܇JīS~tVXU Ƅm ^ >iL~q咇@f97L# k! .(YCe9H,~i~.Ƕnf&8꨸} uA#%f͛1yѫW-J0}FWgvQK[ Q.rUWŎy1iҤ߿{t$HƎ=;b9јyM+ƹvkoSh S>A 'p,Ojj w )w1W e&L "#_ xo+N[milllfc}pΑ/ >߬Y0mڴfŪ4 (4^z'G7;{x'w嶶vLyP7Æ7وo~0`uǫ[+;o{]WonOr730qGL1WWo֝vո_4 3mHGU, HPJ-@X3*U-[V,mxPSSlڀ#Xtc?nDӎ>h<쉦HXt_D-[ y]Rεfhҹ?ƽ[viX6P|q1oB= :BqKV_mo\}u}G[3%͜_~ >g9>wc'WpI':DlͯGcp[0|1Ģ>R_ k>$4cܡ'`AE}dBA>QW#3_=xNX[ljڜb9s0yk5ӣk[<(_܊W/>6l؀=G6|8FCmm-fs9|Z*O-+.^uߥKe?~|aw&7t|-.Vp`ЯjZvIX8, lJ2xgpicpL=PUz[㏏8VZl#HR Æ ?~j\p!N^23f5X|9o = gƴi="#MfcsæƜZC\.͙,9 >|mu8HRS_>IMyPHC0?_xVb͇aHA]i.9r$=X|P_6봳|>D8A^xϞ64wo.\u92C1ˬ [ooL󔭪Π'Bzp]\CO2xFAvG7 #.+֦0o-Xo*oaϰVxsr`d l4>7k׭t ^x\Y,t:_LYv^FQsH)̊N8q0 aA0f K<Y6%b#9(cD Lu3}x1'{`3.ڄO+ AsO]+:jԥjSsSy]:HUEM'pԸ)Crb[:?c 5'ʂCk3ԬG i&,YDb[jb HNHK_ 6J)JWr.&hbQQvPvv8gl*QP6\)P_p% H":Ӥ}&e+"n ŋc!Cv‘GR~BDH#i!kJ +-8(#BdH9)GF.,o(kiu튼APOʑIqa gk]WVBl,ɔa&ddYv[N?qf*զ".C@O":"^!]cz׍ża?@#38#/Yu:y##"ja y6n؈^~3o+Vݻ7Vzy @B~.Zv4'fYD4.00%?X[7Xx>u;F>Ê]w ӷ2z" O%I]LfQ$ PxR @J˦z3z83pgwE7#2&Z̢Kl 1-bmKK)qE+j1+_䜣W^u]1j(L0Æ K~BJzB %JPB @J(HB %I( %$JPB @J(HB %I( %$$PJPB @J( %$$PJPB @J(HB %I( %PJPB @J(HB %I( %$$PJPB %I( %$$PoIRIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/bootstrap.png0000644000175000017500000000645012542740740032562 0ustar clementclementPNG  IHDR:sBIT|d pHYs+ IDATxIogSU,.%Re˒Idg֝ qn1[6%}K fv$tb;QdǶ%yT6El<$WVZ__7!vdBd!"8IbwĢNέghzy }H@0>K(!aD0&H(!:0a2E d ZswϞccFk c0$ n:4[cPJa!45ҙnfLadNIfN1hAVSVX~0FL]l;NӬW:d x{S/p%FJGp^}ݥtl&OCQuC~x$oq$3XIWL.UnY";0C<#nmc f`cV9">z۶nMgH3t:m&G,Y;kCkl$U}WF* B& 1,$ttG"j_OhX$(@[É찓iAKhL(!DAaBD2O*DD"&m2A⯲eScX__?8sb!4^dw:AIr[b0jk1-mHw+$$ 1Z-Z֎~yŅ=yަ1KI1 jŭ8N}m5ݥk׮駟ZR!6TUsa<[xkwK:<ϣ\.wC8A044ԋH Kwرc? 399I;v'Ni裏y3[FH@bHt:Ǧy@í2$qyym !tB(Z$ 1H@A)k\[=ù4 H ZkƎ4u)BI@bhZc0ܱuiiZrrاĴyOo$ te0O>!I !㠔BkR aRי'!٥c cQJ.hfxGZebbjJ>'IBK|Aw'O\0n5`k0?11lDĴ=[?=cIlNnّĐd}l~Adz] m B!z'x$ BD`Lɩ]F/..255ŷ~4MFFFX]]㫯. &￧R.f1>|ȇ~(ψ$5>)ܹsllllZoj8{,FrѣGVr9,"S(x JRoÔ֚$s AG>?K/<=vٌ<}̪=Z"; HL!TJ@R.V mջW1B9 ťȤdi$ 1}e/FƲc>zqI@b0R).N\䯏JS9$.G{;C?s~c ílHlfFO:zۧBN g|7Nv m:ʲHk)F2LFg[$ :2[iqU;x1b[b"@):Jx\I1!8ڐ H [) 4I$.7¹6&{nVn4u5$mSuNh>8(kA@8p`$Q"D$ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D $ BDA"D t::q`I "D $ BDpz]gyR 5J㝄aeYc,7ۏ:mQkmضϳ0tm21Ϧql}ljC5K^}U6a} afjqJ%;}]^ʅ HR sM^{5Ξ=KX ,VWWڵkLOOl6Y^^歷۔J%2i_NP@kB5|oŋjrx֚VA8hYZZ̙3233C.Çq̙nWWWVh_> !ˌJPJ1==dǛl233ý{0ư( T*ǡhPX\\Yq-Ν;4M~mJ+++\rbl;8ilۦ\.j~:t:^z%"J"/"KKKm) ܹsNCVcn! C:ljʩS'NBkOƶm97ԩS4M׹t7odjjvJ}Fd2"=ş h4L++J>SSSllly7)dY2 AL}u:rEv&%Zf>'$Z? dW!"?J7FIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/portal-skins/dark.png0000644000175000017500000001777412542740740031501 0ustar clementclementPNG  IHDRq# pHYsaa?iIDATxYl׹UFvs*RiS,*-;h&ov; q dM⛱#/AlɲY eERHq&{_k&lMI:u;wNFA A Ȣh`4IX@|>۶mt"Bd`iC2,Y:5 $sN\.!uCE****i: . Œ=82ܒ둊0{Ư+!+4I D͈!EuTUᓳ?hȊXR˪jOMYqZɢ$BL&3;lI:9*⯶e:3#gq5vILş| MӘt9>N$fb 1pO]+NFǗڵ&1sڢ\9Lj|f$$(d_gGN]|b/м+j1^VT$Axljl;S 1]gӣ8+=|I*HN@$Q\5&x?>ajpT8Nb:{޿'igNPk3$0=Ɋqd5sdTUW${λ[ʂ;GeTn}xH*-_K?N'x}\YSVa;ߟr]щ$o|d&f+urUAN98էJQd`C`xA `c4a$ICnEuVWQTuy/U@EE?< u@udym]s4Mctt_~Ǐk«@{9 qHSS/2.`\ DQ1{,VQ,[݊kㅠit:;rƹs疼*!k9Ab6 q.b4f뒅0 j5q"Ic "Fe5GC kȅ  4t]'JH$E"䢸PL&C*ByTjcһ0 k_W_ ;v`ttzùsx駳רJ4d2N畍3 fUU$t:8TUN BTVVDPUF"biS[kx *l6[I"F(4 qQ&''AE=zEBEt]'ȚiZ6b1dYd2vd2p8D"d2L&T ۍd""2DbUe{5HYY<uuuNgIsEL&C0d||⋢K/o߾E@gG}e`Yf9(n5e߾}twwՅ \L,|(L&fffq\<#q^y$I̙3?o6dg}W_}7 ^yloɞ={b:tl˗Z|;Yy֚Q.%44ȩON0>1A4/pGEb+$R?8p~Yӟ$I 1::ʷ-8Ct]grrǏuV<ϟܹs(=K/͛9p?A"Qն45E)b-[*lCwUD~'N355Egg'gΜ{ s!>N>^/o? @_/:м߽@-RuD"1ۼ Sib7* ( ::dd2n/(R5M?K<ŋHEEipO?~… ,G$!jzp-iX8P\٬\%"W z?AN Ηڂ<3H4 LCl:EQDez衬@YY& ׋fT*E<'GTAH5}6IՂnut"H W@ub/Ѣl޼M6d+ׅƎ1AVZh8+2mĂ V>_HsYbYZfK@r_1-y?8wt3Y E;η]T1_ȍKqW(QlzqfHɇ.ّ$)s/ IRIEd^f #_0 ,GYuM4U5A֑uۿo%rSY‚?$c2j9rAtM%=ugb-ḫArX{KpCy{(^[o1::Eeq\?N> tttPWWDZcPUN\(R)v{օ!݋4J]; сOp~hJQ-,y5 eFNCX`A9ŵk8{,RUUm:r---4:?9tT!mF2 F|>^J >WI^CK !jZGSUUszNK0ޔ,bEvڅb0::J2vL&}kApvڜL__]]]x<RNp8L]]TUU{nr_P҃薯jۆmtf2u+gCN`6hjlc:JY"B sg*Y0n w"BImهguiZM|]*r'[ͶUFhlj3KQEɲL0drr.^$Iy;#7-%g2ԩSp8JE! qڵa("ޘx#ĠEMH&\t_\74O CKS&K+U7oTnE|NsjƝHƄbMy2\XX*r-FmKOFP, HƱt"Ede;FXVf`$"s_CABۨp3GG݄@Ui fJse' |11>g-] pc(pQq,Hh(h7&œD8#"r-:YR ̶h*޶o#RZAMrxOI c$(7 Hi6^N^CV8ޭMfv" " b5fg 'J^?}/ k xy/4㲖3aq3$Zήa5;pIQ$QS phTl?%?jjj8{,i\.333tttK{{;XVN'LNNw^._̦Mhjj;?8n.]c2uX,yGL&|;v:tԖA< 06 ^xfðg3$etp~R860'```Jtv d![ZZCoo/\~Ι3gؽ{7pߟu{ꩧ8|0cBttt{hiiܹsttt*cccCSSgϞ' bXrz#OSS'N`޽XV\.555 qNEG~lkkcjj;w9<;wGyD"A4K_=W^% /099ݻr *[nfޞb`'j3̑#Gb Uxx3 ` *\CP[ 4U>j`Cm0p<¾}H&@,ۍ444r:eeeTUUD$Jen߾nJcc#^g'kiiG}#GB[[h;vxPU2>v>6oތ륹3grPYu $QVVF$~9].!I,iY⓮R)2 ^h4Jyy9X APUEQx(T Ӊ g1A pT !10(!10(!10(!10(!10( gHݴIENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/bullet_orange.png0000644000175000017500000000043312542740740030734 0ustar clementclementPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT81 q_ɦ xe:%2\(etW'9[%bRF^K6ó~ꩯ|\5ӒfR89E/cb. &*00x,Q!w0Ta P|Fn^1Bưy<рir #[Xj[MU,O|ދds)IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/images/1rightarrow_16x16.png0000644000175000017500000000124312542740737031236 0ustar clementclementPNG  IHDRasRGBbKGD pHYs  tIME24C5#IDAT8˅=haw\mWQQ*~@4N.C ];uӹ`nnuA$X Zjzizh\sxMCj?z-&oCz}0(t5mBP+W6Xߛq*׀YdoY%]s=ZZ "3dcw\>bS ^iRqlwi?#A $jq,iC?RpHy̭xF;L{YW%zB2-(>IENDB`lemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/js/0000775000175000017500000000000012542740741024556 5ustar clementclementlemonldap-ng-1.4.6/lemonldap-ng-manager/example/skins/default/js/manager.js0000644000175000017500000015422312542740741026533 0ustar clementclement/** * Lemonldap::NG Manager jQuery scripts */ /* Help chapters */ var helpCh = { 'advanced': '/pages/documentation/current/start.html#advanced_features', 'authApache': '/pages/documentation/current/authapache.html', 'authBrowserID': '/pages/documentation/current/authbrowserid.html', 'authDBI': '/pages/documentation/current/authdbi.html', 'authDBIConnection': '/pages/documentation/current/authdbi.html#connection', 'authDBILevel': '/pages/documentation/current/authdbi.html#authentication_level', 'authDBIPassword': '/pages/documentation/current/authdbi.html#password', 'authDBISchema': '/pages/documentation/current/authdbi.html#schema', 'authCAS': '/pages/documentation/current/authcas.html', 'authChoice': '/pages/documentation/current/authchoice.html', 'authDemo': '/pages/documentation/current/authdemo.html', 'authFacebook': '/pages/documentation/current/authfacebook.html', 'authGoogle': '/pages/documentation/current/authgoogle.html', 'authLDAP': '/pages/documentation/current/authldap.html', 'authLDAPConnection': '/pages/documentation/current/authldap.html#connection', 'authLDAPFilters': '/pages/documentation/current/authldap.html#filters', 'authLDAPGroups': '/pages/documentation/current/authldap.html#groups', 'authLDAPLevel': '/pages/documentation/current/authldap.html#authentication_level', 'authLDAPPassword': '/pages/documentation/current/authldap.html#password', 'authNull': '/pages/documentation/current/authnull.html', 'authOpenID': '/pages/documentation/current/authopenid.html', 'authParams': '/pages/documentation/current/start.html#authentication_users_and_password_databases', 'authProxy': '/pages/documentation/current/authproxy.html', 'authRemote': '/pages/documentation/current/authremote.html', 'authSlave': '/pages/documentation/current/authslave.html', 'authSSL': '/pages/documentation/current/authssl.html', 'authTwitter': '/pages/documentation/current/authtwitter.html', 'authWebID': '/pages/documentation/current/authwebid.html', 'authYubikey': '/pages/documentation/current/authyubikey.html', 'captcha': '/pages/documentation/current/captcha.html', 'cookies': '/pages/documentation/current/ssocookie.html', 'customfunctions': '/pages/documentation/current/customfunctions.html', 'default': '/pages/documentation/current/start.html#configuration', 'exportedVars': '/pages/documentation/current/exportedvars.html', 'headers': '/pages/documentation/current/writingrulesand_headers.html#headers', 'issuerdb': '/pages/documentation/current/start.html#identity_provider', 'issuerdbCAS': '/pages/documentation/current/idpcas.html', 'issuerdbOpenID': '/pages/documentation/current/idpopenid.html', 'issuerdbSAML': '/pages/documentation/current/idpsaml.html', 'loginHistory': '/pages/documentation/current/loginhistory.html', 'logoutforward': '/pages/documentation/current/logoutforward.html', 'logs': '/pages/documentation/current/logs.html', 'macrosandgroups': '/pages/documentation/current/exportedvars.html#extend_variables_using_macros_and_groups', 'menu': '/pages/documentation/current/portalmenu.html', 'menuCatAndApp': '/pages/documentation/current/portalmenu.html#categories_and_applications', 'notifications': '/pages/documentation/current/notifications.html', 'password': '/pages/documentation/current/resetpassword.html', 'portal': '/pages/documentation/current/ssocookie.html#portal_url', 'portalcustom': '/pages/documentation/current/portalcustom.html', 'portalParams': '/pages/documentation/current/portal.html', 'portalRedirections': '/pages/documentation/current/redirections.html#portal_redirections', 'post': '/pages/documentation/current/formreplay.html', 'redirections': '/pages/documentation/current/redirections.html', 'register': '/pages/documentation/current/register.html', 'reloadUrls': '/pages/documentation/current/configlocation.html#configuration_reload', 'rules': '/pages/documentation/current/writingrulesand_headers.html#rules', 'samlIDP': '/pages/documentation/current/authsaml.html#register_partner_identity_provider_on_lemonldapng', 'samlIDPExportedAttributes': '/pages/documentation/current/authsaml.html#exported_attributes', 'samlIDPMetaDataXML': '/pages/documentation/current/authsaml.html#metadata', 'samlIDPOptions': '/pages/documentation/current/authsaml.html#options', 'samlService': '/pages/documentation/current/samlservice.html', 'samlServiceAA': '/pages/documentation/current/samlservice.html#attribute_authority', 'samlServiceAdvanced': '/pages/documentation/current/samlservice.html#advanced', 'samlServiceAuthnContexts': '/pages/documentation/current/samlservice.html#authentication_contexts', 'samlServiceEntityID': '/pages/documentation/current/samlservice.html#entry_identifier', 'samlServiceIDP': '/pages/documentation/current/samlservice.html#identity_provider', 'samlServiceNameIDFormats': '/pages/documentation/current/samlservice.html#nameid_formats', 'samlServiceOrganization': '/pages/documentation/current/samlservice.html#organization', 'samlServiceSecurity': '/pages/documentation/current/samlservice.html#security_parameters', 'samlServiceSP': '/pages/documentation/current/samlservice.html#service_provider', 'samlSP': '/pages/documentation/current/idpsaml.html#register_partner_service_provider_on_lemonldapng', 'samlSPExportedAttributes': '/pages/documentation/current/idpsaml.html#exported_attributes', 'samlSPMetaDataXML': '/pages/documentation/current/idpsaml.html#metadata', 'samlSPOptions': '/pages/documentation/current/idpsaml.html#options', 'securetoken': '/pages/documentation/current/securetoken.html', 'security': '/pages/documentation/current/security.html#configure_security_settings', 'sessions': '/pages/documentation/current/sessions.html', 'sessionsdb': '/pages/documentation/current/start.html#sessions_database', 'sympa': '/pages/documentation/current/applications/sympa.html', 'userdbParams': '/pages/documentation/current/start.html#authentication_and_users_database', 'vhostOptions': '/pages/documentation/current/configvhost.html#options', 'virtualHosts': '/pages/documentation/current/configvhost.html', 'zimbra': '/pages/documentation/current/applications/zimbra.html' }; /* Init simpleTreeCollection */ var simpleTreeCollection; /* Convert boolean strings into javascript booleans */ if (treeautoclose.match('true')) { treeautoclose = true; } else { treeautoclose = false; } if (treejquerycss.match('true')) { treejquerycss = true; } else { treejquerycss = false; } $(document).ready(function() { /* Menu height */ resizeMenu(); jQuery.event.add(window, "load", resizeMenu); jQuery.event.add(window, "resize", resizeMenu); /* Buttons */ $('#header a.configuration').button({ icons: { primary: "ui-icon-document" } }); $('#header a.sessions').button({ icons: { primary: "ui-icon-key" } }); $('#header a.notifications').button({ icons: { primary: "ui-icon-calendar" } }); $('#header a.portal').button({ icons: { primary: "ui-icon-home" }, text: false }); $('#header a.logout').button({ icons: { primary: "ui-icon-power" }, text: false }); $('#header span#css-switch-link').button({ icons: { primary: "ui-icon-image" }, text: false }); $('#css-switch button[alt=tree]').button({ icons: { primary: "ui-icon-grip-dotted-vertical" } }); $('#css-switch button[alt=accordion]').button({ icons: { primary: "ui-icon-grip-dotted-horizontal" } }); $('#css-switch button[alt=ui-lightness]').button({ icons: { primary: "ui-icon-lightbulb" } }); $('#css-switch button[alt=ui-darkness]').button({ icons: { primary: "ui-icon-star" } }); $('#buttons button').button(); $('#content button').button(); $('button#bsave').button({ icons: { primary: "ui-icon-disk" } }); $('button[id*=new]').button({ icons: { primary: "ui-icon-circle-plus" } }); $('button[id*=del]').button({ icons: { primary: "ui-icon-circle-minus" } }); $('#query-switch a[alt=user]').button({ icons: { primary: "ui-icon-person" } }); $('#query-switch a[alt=ip]').button({ icons: { primary: "ui-icon-gear" } }); $('#query-switch a[alt=2ip]').button({ icons: { primary: "ui-icon-alert" } }); $('#query-switch a[alt=list]').button({ icons: { primary: "ui-icon-mail-closed" } }); $('#query-switch a[alt=listDone]').button({ icons: { primary: "ui-icon-mail-open" } }); $('#query-switch a[alt=newNotif]').button({ icons: { primary: "ui-icon-circle-plus" } }); $('#sendNewNotif').button({ icons: { primary: "ui-icon-circle-plus" } }); /* Display/hide divs */ $("#buttons h1").click(function() { $('#buttons h1 img').toggle(); $("#buttons_content").slideToggle('fast'); }); $("#edition h1").click(function() { $('#edition h1 img').toggle(); $("#content").slideToggle('fast'); }); $("#help h1").click(function() { $('#help h1 img').toggle(); $("#help_content").slideToggle('fast'); }); /* Skin selector dialog */ $('#skinImagePicker').dialog({ autoOpen: false, minWidth: 500, modal: true }); $('#content_skin button.current').click(function() { $('#skinImagePicker').dialog("open"); return false; }); $('#skinImagePicker button').click(function() { var skin = $("img", this).attr('title'); changeSkinImage(skin); $('#skinImagePicker').dialog("close"); return false; }); /* Apps logo selector dialog */ $('#appsLogoPicker').dialog({ autoOpen: false, minWidth: 300, modal: true }); $('#content_applicationListApplication button.current').click(function() { $('#appsLogoPicker').dialog("open"); return false; }); $('#appsLogoPicker button').click(function() { var logo = $("img", this).attr('title'); changeAppsLogo(logo + '.png'); $('#appsLogoPicker').dialog("close"); return false; }); /* Display configuration datas */ getCfgAttributes(); display('cfgDatas', ''); /* Load Simple Tree */ loadSimpleTree(); /* Menu CSS switch */ $('#css-switch').dialog({ autoOpen: false, modal: true }); $('span#css-switch-link').click(function() { // Open dialog $('#css-switch').dialog("open"); // Fix focus $('#css-switch button').each(function() { $(this).removeClass('ui-state-focus'); }); if ($.cookie("managermenu")) { css_menu = $.cookie("managermenu"); } if ($.cookie("managertheme")) { css_theme = $.cookie("managertheme"); } $('#css-switch button[alt=' + css_menu + ']').addClass('ui-state-focus').focus(); $('#css-switch button[alt=' + css_theme + ']').addClass('ui-state-focus'); return false; }); if ($.cookie("managermenu")) { simpleTreeSetMenuStyle($.cookie("managermenu")); } if ($.cookie("managertheme")) { $("link#csstheme").attr("href", themepath + $.cookie("managertheme") + '/jquery-ui-' + jqueryuiversion + '.custom.min.css'); } $("#css-switch #organization button").click(function() { var style = $(this).attr("alt"); $.cookie("managermenu", style, { expires: 365, path: '/' }); simpleTreeSetMenuStyle(style); $('#css-switch').dialog("close"); return false; }); $("#css-switch #theme button").click(function() { var theme = $(this).attr("alt"); $.cookie("managertheme", theme, { expires: 365, path: '/' }); $("link#csstheme").attr("href", themepath + theme + '/jquery-ui-' + jqueryuiversion + '.custom.min.css'); $('#css-switch').dialog("close"); return false; }); /* Load default help */ loadHelp('default'); }); function loadSimpleTree() { /* Simple Tree */ simpleTreeCollection = $(".simpleTree").simpleTree({ autoclose: treeautoclose, useClickToToggle: true, drag: false, afterClick: function(node) { var span = $('span:first', node); loadHelp(span.attr('help')); simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); }, afterCloseNearby: function(node) { simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); }, afterNewNode: function(node) { simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); }, afterDblClick: function(node) { simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); }, afterSetTrigger: function(node) { simpleTreeTriggerJqueryClasses(); }, afterMove: function(destination, source, pos) {}, afterAjax: function() { simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); }, animate: true, docToFolderConvert: true }); if (treejquerycss) { simpleTreeDefaultJqueryClasses(); } } function simpleTreeSetMenuStyle(style) { if (style == "tree") { $("link#cssmenu").attr("href", csspath + "tree.css"); treejquerycss = false; treeautoclose = false; simpleTreeCollection[0].option.autoclose = treeautoclose; } else { $("link#cssmenu").attr("href", csspath + "accordion.css"); treejquerycss = true; treeautoclose = true; simpleTreeCollection[0].option.autoclose = treeautoclose; } simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); } /* Add jQuery UI CSS classes to simpleTree */ function simpleTreeDefaultJqueryClasses() { if (treejquerycss) { $(".simpleTree .root > span").addClass("ui-widget-header ui-corner-all"); $(".simpleTree .folder-open > span").addClass("ui-state-default ui-corner-all"); $(".simpleTree .folder-open-last > span").addClass("ui-state-default ui-corner-all"); $(".simpleTree .folder-close > span").addClass("ui-state-default ui-corner-all"); $(".simpleTree .folder-close-last > span").addClass("ui-state-default ui-corner-all"); $(".simpleTree .doc > span").addClass("ui-state-default ui-corner-all"); $(".simpleTree .doc-last > span").addClass("ui-state-default ui-corner-all"); } else { $(".simpleTree span").removeClass("ui-widget-header ui-corner-all ui-state-default"); } simpleTreeTriggerJqueryClasses(); } function simpleTreeToggleJqueryClasses() { if (treejquerycss) { $(".simpleTree .folder-open > span").addClass("ui-state-focus"); $(".simpleTree .folder-open-last > span").addClass("ui-state-focus"); $(".simpleTree .folder-close > span").removeClass("ui-state-focus"); $(".simpleTree .folder-close-last > span").removeClass("ui-state-focus"); $(".simpleTree span.active").addClass("ui-state-active"); $(".simpleTree span.text").removeClass("ui-state-active"); } else { $(".simpleTree span").removeClass("ui-state-focus ui-state-active"); } } function simpleTreeTriggerJqueryClasses() { if (treejquerycss) { $(".simpleTree .folder-open > img.trigger").addClass("ui-icon"); $(".simpleTree .folder-open-last > img.trigger").addClass("ui-icon"); $(".simpleTree .folder-close > img.trigger").addClass("ui-icon"); $(".simpleTree .folder-close-last > img.trigger").addClass("ui-icon"); $(".simpleTree .folder-open > img.trigger").removeClass("ui-icon-triangle-1-e").addClass("ui-icon-triangle-1-s"); $(".simpleTree .folder-open-last > img.trigger").removeClass("ui-icon-triangle-1-e").addClass("ui-icon-triangle-1-s"); $(".simpleTree .folder-close > img.trigger").removeClass("ui-icon-triangle-1-s").addClass("ui-icon-triangle-1-e"); $(".simpleTree .folder-close-last > img.trigger").removeClass("ui-icon-triangle-1-s").addClass("ui-icon-triangle-1-e"); } else { $(".simpleTree img.trigger").removeClass("ui-icon ui-icon-triangle-1-e ui-icon-triangle-1-s"); } } var currentId; /* @function string safeSelector(string data) * Escape base64 special chars to be compliant with jquery selectors * @param data input data * @return escaped string */ function safeSelector(data) { var escaped_data = data; escaped_data = escaped_data.replace(/\//g, '\\/'); escaped_data = escaped_data.replace(/\+/g, '\\+'); escaped_data = escaped_data.replace(/=/g, '\\='); return escaped_data; } function lmtext(id) { return $('#text_' + safeSelector(id)).attr('name'); } function lmdata(id) { return unescape($('#text_' + safeSelector(id)).attr('value')); } function lmparent(id) { return $('#' + safeSelector(id)).parent().parent().attr('id'); } function setlmtext(id, v, prefixvalue) { if (!prefixvalue) { prefixvalue = ""; } if (v.length == 0) { alert("Null value"); } else { $('#text_' + safeSelector(id)).attr('name', prefixvalue + v); $('#text_' + safeSelector(id)).text(v); } } function setlminputtext(id, input, prefixvalue) { var inputname = $(input).attr('id'); var inputvalue = $(input).val(); if (!prefixvalue) { prefixvalue = ""; } if (inputvalue.length == 0) { alert('No ' + inputname); return false; } setlmtext(id, inputvalue, prefixvalue); } function setlmdata(id, v) { $('#text_' + safeSelector(id)).attr('value', escape(v)); } function setlminputdata(id, input) { var inputvalue = $(input).val(); setlmdata(id, inputvalue); } function setlmrule(id, c, r, v) { c = $(c).val(); r = $(r).val(); v = $(v).val(); var re = r; var text = r; if (c.length > 0) { c = c.replace(/\)/g, ']').replace(/\(/g, '['); re = '(?#' + c + ')' + r; text = c; } setlmdata(id, v); $('#text_' + safeSelector(id)).attr('name', re); $('#text_' + safeSelector(id)).text(text); } function setlmgrantsessionrule(id, c, r, v) { c = $(c).val(); r = $(r).val(); v = $(v).val() || '#'; var re = r; var text = r; if (c.length > 0) { re = r + '##' + c; text = c; } setlmdata(id, v); $('#text_' + safeSelector(id)).attr('name', re); $('#text_' + safeSelector(id)).text(text); } function setlmfile(id, input) { var inputname = $(input).attr('id'); if ($(input).val().length == 0) { alert('No ' + inputname); return false; } $("#" + inputname + "-loadimg").ajaxStart(function() { $(this).show(); }).ajaxComplete(function() { $(this).hide(); }); $.ajaxFileUpload({ url: scriptname, secureuri: false, fileElementId: inputname, dataType: 'json', success: function(data, status) { if (typeof(data.content.errors) != 'undefined' && data.content.errors != '') { popup('

    Request failed

    • Error code: ' + data.content.errors + '
    '); } else { data.content = data.content.replace(/</g, '<').replace(/>/g, '>'); setlmdata(id, data.content); $('#filearea').val(lmdata(id)); display('filearea', lmtext(id)); } }, error: function(xhr, ajaxOptions, thrownError) { popup('

    Request failed

    • Error code: ' + xhr.status + ', ' + thrownError + '
    '); } }); /* Remove global event on loading image */ $("#" + inputname + "-loadimg").unbind('ajaxStart'); return false; } function setlmsamlassertion(id) { var ind = $('#samlAssertionIndex').val(); var bin = $('#samlAssertionBinding').val(); var loc = $('#samlAssertionLocation').val(); var def = $('input[type=radio][name=samlAssertionDefaultBoolean]:checked').attr("value"); // Update default value in other assertions. var parentId = lmparent(id); var t = $('#' + parentId).find('span').get(); for (i in t) { if (def == '1') { var currentId = $(t[i]).attr('id').replace('text_', ''); if ((currentId != id) && (currentId != parentId)) { var d = lmdata(currentId).split(';'); d[0] = '0'; setlmdata(currentId, d.join(';')); } // If off, force on the first one. } else if (i < t.length - 1) { var currentId = $(t[t.length - 1 - i]).attr('id').replace('text_', ''); var d = lmdata(currentId).split(';'); if (t.length - 1 - i > 1) { d[0] = '0'; } else { d[0] = '1'; } setlmdata(currentId, d.join(';')); if (currentId == id) { def = '1'; } } } var v = def + ';' + ind + ';' + bin + ';' + loc; setlmdata(id, v); } function setlmsamlattribute(id) { var name = $('#samlAttributeName').val(); var form = $('#samlAttributeFormat').val(); var altr = $('#samlAttributeFriendlyName').val(); var mand = $('input[type=radio][name=samlAttributeMandatoryBoolean]:checked').attr("value"); var v = mand + ';' + name + ';' + form + ';' + altr; setlmtext(id, $('#samlAttributeKey').val()); setlmdata(id, v); } function setlmsamlservice(id) { var bin = $('#samlServiceBinding').val(); var loc = $('#samlServiceLocation').val(); var rep = $('#samlServiceResponseLocation').val(); var v = bin + ';' + loc + ';' + rep; setlmdata(id, v); } function setopenididplist(id) { var type = $('input[type=radio][name=openIdServerlistBoolean]:checked').attr("value"); var list = $('#openid_serverlist_text').val(); setlmdata(id, type + ';' + list); } function display(div, title) { var divs = $('#content').children(); divs.toggleClass('hidden', true); divs.removeClass('content'); $('#content_' + div).removeClass('hidden'); $('#content_' + div).addClass('content'); $('#content_title').html(title); $('#newkb,#newrb,#delkb,#newkbr,#newrbr,#newgsrb,#newgsrbr,#bdelvh,#bnewvh').hide(); $('#newidpsamlmetadatab,#delidpsamlmetadatab').hide(); $('#newspsamlmetadatab,#delspsamlmetadatab').hide(); $('#newsamlattributeb,#delsamlattributeb').hide(); $('#newsamlattributebr').hide(); $('#newchoicer,#newchoice,#delchoice').hide(); $('#newcategoryr,#delcategory').hide(); $('#newapplicationr,#delapplication').hide(); $('#newpostr,#delpost').hide(); $('#newpostdatar,#delpostdata').hide(); // Resize (or hide) Help window var height_menu = $('#menu').height(); var height_buttons_edition = $('#buttons').height() + $('#edition').height(); var help_height = height_menu - height_buttons_edition - 50; if (help_height < 1) { $('#help h1 img').toggle(); $('#help_content').toggle(); } else { $('#help_content').height(help_height); } } function none(id) { currentId = id; display('default', ''); } function hashRoot(id) { currentId = id; display('default', ''); $('#newkbr').show(); } function vhostRoot(id) { currentId = id; display('default', ''); $('#bnewvh').show(); } function samlIdpRoot(id) { currentId = id; display('default', ''); $('#newidpsamlmetadatab').show(); } function samlSpRoot(id) { currentId = id; display('default', ''); $('#newspsamlmetadatab').show(); } /* @function splitModuleAndOptions(string data) * Split module and options from authentication or userDB string * @return module, options */ function splitModuleAndOptions(data) { var module = '' var options = ''; if (data.match(' ')) { module = data.substring(0, data.indexOf(' ')); options = data.substring(data.indexOf(' ') + 1); } else { module = data; } return Array(module, options); } function authParams(id) { currentId = id; var t = splitModuleAndOptions(lmdata(id)); // Update options field $('#authOptions').val(t[1]); if (t[1].length > 1) { $('#authOptions').show(); } else { $('#authOptions').hide(); } // Check Multi $('#authText').unbind('change'); $('#authText').change(function() { var isMulti = false; $('#content_authParams option:selected').each(function() { if ($(this).val() == 'Multi') { isMulti = true; } }); if (isMulti) { $('#authOptions').show(); } else { $('#authOptions').hide(); } }); formateSelectAuth('authText', t[0]); display('authParams', lmtext(id)); } function formateSelectAuth(id, value) { // Handle "ldap" case for old versions if (value && value.toLowerCase() == "ldap") { value = "LDAP"; } formateSelect(id, ['Apache=Apache', 'AD=Active Directory', 'BrowserID=BrowserID (Mozilla Persona)', 'Choice=Authentication choice', 'CAS=Central Authentication Service (CAS)', 'DBI=Database (DBI)', 'Demo=Demonstration', 'Facebook=Facebook', 'Google=Google', 'LDAP=LDAP', 'Multi=Multiple', 'Null=None', 'OpenID=OpenID', 'Proxy=Proxy', 'Radius=Radius', 'Remote=Remote', 'SAML=SAML v2', 'Slave=Slave', 'SSL=SSL', 'Twitter=Twitter', 'WebID=WebID', 'Yubikey=Yubikey'], value); } function userdbParams(id) { currentId = id; var t = splitModuleAndOptions(lmdata(id)); // Update options field $('#authOptions').val(t[1]); if (t[1].length > 1) { $('#authOptions').show(); } else { $('#authOptions').hide(); } // Check Multi $('#authText').unbind('change'); $('#authText').change(function() { var isMulti = false; $('#content_authParams option:selected').each(function() { if ($(this).val() == 'Multi') { isMulti = true; } }); if (isMulti) { $('#authOptions').show(); } else { $('#authOptions').hide(); } }); formateSelectUser('authText', t[0]); display('authParams', lmtext(id)); } function formateSelectUser(id, value) { // Handle "ldap" case for old versions if (value && value.toLowerCase() == "ldap") { value = "LDAP"; } formateSelect(id, ['AD=Active Directory', 'DBI=Database (DBI)', 'Demo=Demonstration', 'Facebook=Facebook', 'Google=Google', 'LDAP=LDAP', 'Multi=Multiple', 'Null=None', 'OpenID=OpenID', 'Proxy=Proxy', 'Remote=Remote', 'SAML=SAML v2', 'Slave=Slave', 'WebID=WebID'], value); } function passworddbParams(id) { currentId = id; $('#authOptions').hide(); formateSelectPassword('authText', lmdata(id)); display('authParams', lmtext(id)); } function formateSelectPassword(id, value) { // Handle "ldap" case for old versions if (value && value.toLowerCase() == "ldap") { value = "LDAP"; } formateSelect(id, ['AD=Active Directory', 'DBI=Database (DBI)', 'Demo=Demonstration', 'LDAP=LDAP', 'Null=None'], value); } function registerdbParams(id) { currentId = id; formateSelectRegister('select', lmdata(id)); display('select', lmtext(id)); } function formateSelectRegister(id, value) { formateSelect(id, ['AD=Active Directory', 'Demo=Demonstration', 'LDAP=LDAP', 'Null=None'], value); } function skinSelect(id) { currentId = id; changeSkinImage(lmdata(id)); display('skin', lmtext(id)); } /* Change current skin */ function changeSkinImage(skin) { // Set field value $('#skinText').val(skin); // Set skin to custom if not a registered skin // Custom field can the be edited if ((skin != 'pastel') && (skin != 'dark') && (skin != 'impact') && (skin != 'bootstrap')) { skin = 'custom'; $('#skinText').removeAttr('readonly'); } else { $('#skinText').attr('readonly', 'readonly'); } // Set image source var imgsrc = imagepath + 'portal-skins/' + skin + '.png'; $('#content_skin img.current').attr('src', imgsrc); $('#content_skin img.current').attr('alt', skin); } function nameIdFormatParams(id) { currentId = id; formateSelect('select', ['=', 'unspecified=Unspecified', 'email=Email', 'x509=X509 certificate', 'windows=Windows', 'kerberos=Kerberos', 'entity=Entity', 'persistent=Persistent', 'transient=Transient', 'encrypted=Encrypted'], lmdata(id)); display('select', lmtext(id)); } function bindingParams(id) { currentId = id; formateSelect('select', ['=', 'http-post=POST', 'http-redirect=REDIRECT', 'http-soap=SOAP', 'artifact-get=Artifact GET', 'artifact-post=Artifact POST'], lmdata(id)); display('select', lmtext(id)); } function authnContextParams(id) { currentId = id; formateSelect( 'select', [ '=', 'kerberos=Kerberos', 'password-protected-transport=Password protected transport', 'password=Password', 'tls-client=TLS client certificate', ], lmdata(id)); display('select', lmtext(id)); } function encryptionModeParams(id) { currentId = id; formateSelect('select', ['none=None', 'nameid=Name ID', 'assertion=Assertion'], lmdata(id)); display('select', lmtext(id)); } function timeoutActivityParams(id) { currentId = id; formateSelect('select', ['0=None', '900=15 min', '1800=30 min', '2700=45 min', '3600=60 min'], lmdata(id)); display('select', lmtext(id)); } function zimbraByParams(id) { currentId = id; formateSelect('select', ['=', 'name=User name', 'id=User id', 'foreignPrincipal=Foreign principal'], lmdata(id)); display('select', lmtext(id)); } function casAccessControlPolicyParams(id) { currentId = id; formateSelect('select', ['none=None', 'error=Display error on portal', 'faketicket=Send a fake service ticket'], lmdata(id)); display('select', lmtext(id)); } function btext(id) { currentId = id; $('#btextKey').val(lmtext(id)); $('#btextValue').val(lmdata(id)); display('btext', lmtext(id)); $('#btextValue,#btextKey').elastic() $('#newkb,#delkb').show(); } function bool(id) { currentId = id; if (lmdata(id) == 1) { $('#On').prop('checked', true) } else { $('#Off').prop('checked', true) } display('bool', lmtext(id)); } function trool(id) { currentId = id; if (lmdata(id) == 1) { $('#TrOn').prop('checked', true) } else { if (lmdata(id) == 0) { $('#TrOff').prop('checked', true) } else { $('#TrDefault').prop('checked', true) } } display('trool', lmtext(id)); } function int(id) { currentId = id; $('#int').val(lmdata(id)); display('int', lmtext(id)); } function text(id) { currentId = id; $('#text').val(lmdata(id)); display('text', lmtext(id)); } function textarea(id) { currentId = id; $('#textarea').val(lmdata(id)); display('textarea', lmtext(id)); } function filearea(id) { currentId = id; $('#urlinput').hide(); $('#downloadfile').hide(); $('#generatefile').hide(); $('#filearea').val(lmdata(id)); /* Only samlIDPMetaDataXML and samlSPMetaDataXML element could be loaded from URL */ if (lmtext(id) == 'samlIDPMetaDataXML') { $('#urlinput').show(); } if (lmtext(id) == 'samlSPMetaDataXML') { $('#urlinput').show(); } /* Only samlServicePrivateKey* elements could generate keys */ if (lmtext(id) == 'samlServicePrivateKeySig') { $('#generatefile').show(); } if (lmtext(id) == 'samlServicePrivateKeyEnc') { $('#generatefile').show(); } /* If data, then allow to download */ if (lmdata(id).length) { $('#downloadfile').show(); } /* Set switchReadonly text */ $('#switchreadonly span').text(text4edit); display('filearea', lmtext(id)); } function samlAssertion(id) { currentId = id; var t = lmdata(id).split(';'); // Reset text fields $('#samlAssertionIndex').removeAttr('value'); $('#samlAssertionLocation').removeAttr('value'); // Fill fields if (t[0] == 1) { $('#samlAssertionDefaultOn').prop('checked', true); } else { $('#samlAssertionDefaultOff').prop('checked', true); } $('#samlAssertionIndex').val(t[1]); formateSelect('samlAssertionBinding', ['urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact=Artifact', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST=HTTP POST', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect=HTTP Redirect', 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP=SOAP'], t[2]); $('#samlAssertionLocation').val(t[3]); display('samlAssertion', lmtext(id)); } function samlAttribute(id) { currentId = id; var t = lmdata(id).split(';'); // Reset text fields $('#samlAttributeKey').removeAttr('value'); $('#samlAttributeName').removeAttr('value'); $('#samlAttributeFriendlyName').removeAttr('value'); // Fill fields if (t[0] == 1) { $('#samlAttributeMandatoryOn').prop('checked', true); } else { $('#samlAttributeMandatoryOff').prop('checked', true); } $('#samlAttributeKey').val(lmtext(id)); $('#samlAttributeName').val(t[1]); formateSelect('samlAttributeFormat', ['=', 'urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified=Unspecified', 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri=URI', 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic=Basic'], t[2]); $('#samlAttributeFriendlyName').val(t[3]); display('samlAttribute', lmtext(id)); $('#newsamlattributeb,#delsamlattributeb').show(); } function samlAttributeRoot(id) { currentId = id; display('default', ''); $('#newsamlattributebr').show(); } function samlIdpMetaData(id) { currentId = id; $('#samlIdpMetaData').val(lmtext(id)); display('samlIdpMetaData', lmtext(id)); if ($('#li_' + myB64('/samlIDPMetaDataNode')).find('span').size() == 1) { $('#delidpsamlmetadatab').hide(); } else { $('#delidpsamlmetadatab').show(); } $('#newidpsamlmetadatab').show(); } function samlSpMetaData(id) { currentId = id; $('#samlSpMetaData').val(lmtext(id)); display('samlSpMetaData', lmtext(id)); if ($('#li_' + myB64('/samlSPMetaDataNode')).find('span').size() == 1) { $('#delspsamlmetadatab').hide(); } else { $('#delspsamlmetadatab').show(); } $('#newspsamlmetadatab').show(); } function samlService(id) { currentId = id; var t = lmdata(id).split(';'); formateSelect('samlServiceBinding', ['urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect=HTTP Redirect', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST=HTTP POST', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact=HTTP Artifact', 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP=SOAP'], t[0]); $('#samlServiceLocation').val(t[1]); $('#samlServiceResponseLocation').val(t[2]); display('samlService', lmtext(id)); } function openididplist(id) { currentId = id; var t = lmdata(id).split(';'); if (t[0] == 1) { $('#openid_serverlist_white').prop('checked', true); } else { $('#openid_serverlist_black').prop('checked', true); } $('#openid_serverlist_text').val(t[1]); display('openid_serverlist', lmtext(id)); } function securedCookieValues(id) { currentId = id; formateSelect('select', ['0=' + text4securedCookie0, '1=' + text4securedCookie1, '2=' + text4securedCookie2, '3=' + text4securedCookie3], lmdata(id)); display('select', lmtext(id)); } function vhost(id) { currentId = id; $('#vhost').val(lmtext(id)); display('vhost', lmtext(id)); $('#bdelvh,#bnewvh').show(); } function cfgDatas(id) { var span = $('#' + id + ' span'); loadHelp(span.attr('help')); display('cfgDatas', ''); getCfgAttributes(); } function delvh(id) { var vhname = lmtext(id); if (confirm('Delete ' + vhname + ' ?')) { delKey(id); } } function rules(id) { currentId = id; var t = lmtext(id); var b = t.match(/^(?:\(\?#(.*?)\))?(.*)/); if (typeof(b[1]) == 'undefined') b[1] = ''; //$('#rulComment').val(b[1]); $('#rulComment').val(b[1]); $('#rulKey').val(b[2]); $('#rulValue').val(lmdata(id)); display('rules', lmtext(lmparent(id))); $('#rulComment,#rulKey,#rulValue').elastic(); if (t == 'default') { $('#rulKey').attr('readonly', 'readonly'); $('#rulCommentDiv').css('display', 'none'); } else { $('#rulKey').removeAttr('readonly'); $('#rulCommentDiv').css('display', 'block'); $('#delkb').show(); } $('#newrb').show(); } function rulesRoot(id) { currentId = id; display('default', ''); $('#newrbr').show(); } function grantSessionRules(id) { currentId = id; var t = lmtext(id); var b = t.match(/^(.*?)(?:|##(.*))$/); if (typeof(b[2]) == 'undefined') b[2] = ''; var v = lmdata(id); if (v == '#') v = '' $('#grantSessionRulKey').val(b[1]); $('#grantSessionRulComment').val(b[2]); $('#grantSessionRulValue').val(v); display('grantSessionRules', lmtext(lmparent(id))); $('#grantSessionRulKey,#grantSessionRulComment,#grantSessionRulValue').elastic(); $('#delkb').show(); $('#newgsrb').show(); } function grantSessionRulesRoot(id) { currentId = id; display('default', ''); $('#newgsrbr').show(); } function reloadAuthParams() { var value = $('#authText').val(); if ($('#authOptions').is(':visible')) { value += ' ' + $('#authOptions').val(); } setlmdata(currentId, value); $.ajax({ type: "POST", url: scriptname, data: { node: 'generalParameters/authParams', conf: 'authentication userDB passwordDB issuerDB', cfgNum: lmdata('li_cm9vdA2'), authentication: lmdata('li_L2F1dGhlbnRpY2F0aW9u0'), userDB: lmdata('li_L3VzZXJEQg2'), passwordDB: lmdata('li_L3Bhc3N3b3JkREI1'), issuerDB: lmdata('li_L2lzc3VlckRC0') }, dataType: 'html', success: function(data) { if (data == null) { networkPb() } else { var node = $('#li_Z2VuZXJhbFBhcmFtZXRlcnMvYXV0aFBhcmFtcw2 >ul'); node.html(data); simpleTreeCollection[0].setTreeNodes(node, true); simpleTreeDefaultJqueryClasses(); simpleTreeToggleJqueryClasses(); } }, error: function(xhr, ajaxOptions, thrownError) { popup('

    Request failed

    • Error code: ' + xhr.status + ', ' + thrownError + '
    '); } }); } var count = 0; function newId(c) { if (!c) { return false; } count++; c = c.replace(/^NewID_(.*)_\d+$/, '$1'); return 'NewID_' + c + '_' + count; } function newKeyR() { var newIdValue = newId(currentId); simpleTreeCollection[0].addNode(newIdValue, text4newKey, function(d, s) { $('>span', s).attr('onClick', 'btext("' + newIdValue + '")').attr('name', text4newKey).attr('value', value4newKey).attr('id', 'text_' + newIdValue); btext(newIdValue); }); return false; } function newKey() { var newIdValue = newId(currentId); simpleTreeCollection[0].newNodeAfter(newIdValue, text4newKey, function(d, s) { $('>span', s).attr('onClick', 'btext("' + newIdValue + '")').attr('name', text4newKey).attr('value', value4newKey).attr('id', 'text_' + newIdValue); btext(newIdValue); }); return false; } function newRuleR() { var newIdValue = newId(currentId); simpleTreeCollection[0].addNode(newIdValue, text4newKey, function(d, s) { $('>span', s).attr('onClick', 'rules("' + newIdValue + '")').attr('name', text4newKey).attr('value', value4newKey).attr('id', 'text_' + newIdValue); rules(newIdValue); }); return false; } function newRule() { var newIdValue = newId(currentId); simpleTreeCollection[0].newNodeAfter(newIdValue, text4newKey, function(d, s) { $('>span', s).attr('onClick', 'rules("' + newIdValue + '")').attr('name', text4newKey).attr('value', value4newKey).attr('id', 'text_' + newIdValue); rules(newIdValue); }); return false; } function newGrantSessionRuleR() { var newIdValue = newId(currentId); simpleTreeCollection[0].addNode(newIdValue, text4newCondition, function(d, s) { $('>span', s).attr('onClick', 'grantSessionRules("' + newIdValue + '")').attr('name', '##' + text4newCondition).removeAttr('value').attr('id', 'text_' + newIdValue); grantSessionRules(newIdValue); }); return false; } function newGrantSessionRule() { var newIdValue = newId(currentId); simpleTreeCollection[0].newNodeAfter(newIdValue, text4newCondition, function(d, s) { $('>span', s).attr('onClick', 'grantSessionRules("' + newIdValue + '")').attr('name', '##' + text4newCondition).removeAttr('value').attr('id', 'text_' + newIdValue); grantSessionRules(newIdValue); }); return false; } function delKey(id) { if (!id) { id = currentId; } $('#' + safeSelector(id)).prev().remove(); $('#' + safeSelector(id)).remove(); } function newVh(name) { // Prompt for virtual host name var name = prompt(text4newVhost, 'test25.example.com'); if (!name) { return false; } var vhId = 'li_' + myB64('/locationRules/' + name); simpleTreeCollection[0].newAjaxNodeIn($('#li_L3ZpcnR1YWxIb3N0cw2'), vhId, name, scriptname + '?type=new&node=virtualHosts/' + name, function(d, s) { $('>span', s).attr('name', name).attr('help', 'default').attr('id', 'text_' + vhId).attr('onclick', 'vhost(\'' + vhId + '\')'); vhost(vhId); }); } function delSamlAttribute() { delKey(); } function delIdpSamlMetaData(id) { var idpname = lmtext(id); if (confirm('Delete ' + idpname + ' ?')) { delKey(id); samlIdpMetaData(id); } } function delSpSamlMetaData(id) { var spname = lmtext(id); if (confirm('Delete ' + spname + ' ?')) { delKey(id); samlSpMetaData(id); } } function newSamlAttribute() { var newIdValue = newId(currentId); simpleTreeCollection[0].newNodeAfter(newIdValue, text4newSamlAttribute, function(d, s) { $('>span', s).attr('onClick', 'samlAttribute("' + newIdValue + '")').attr('name', text4newSamlAttribute).attr('value', value4newSamlAttribute).attr('id', 'text_' + newIdValue); samlAttribute(newIdValue); }); return false; } function newSamlAttributeR() { var newIdValue = newId(currentId); simpleTreeCollection[0].addNode(newIdValue, text4newSamlAttribute, function(d, s) { $('>span', s).attr('onClick', 'samlAttribute("' + newIdValue + '")').attr('name', text4newSamlAttribute).attr('value', value4newSamlAttribute).attr('id', 'text_' + newIdValue); samlAttribute(newIdValue); }); return false; } function newIdpSamlMetaData() { var name = prompt(text4newSamlMetaData, 'idp-example'); if (!name) { return false; } var idpId = 'li_' + myB64('/samlIDPMetaDataExportedAttributes/' + name); simpleTreeCollection[0].newAjaxNodeIn($('#li_L3NhbWxJRFBNZXRhRGF0YU5vZGU1'), idpId, name, scriptname + '?type=new&node=/samlIDPMetaDataNode/' + name, function(d, s) { $('>span', s).attr('name', name).attr('help', 'default').attr('id', 'text_' + idpId).attr('onclick', 'samlIdpMetaData(\'' + idpId + '\')'); samlIdpMetaData(idpId); }); } function newSpSamlMetaData() { var name = prompt(text4newSamlMetaData, 'sp-example'); if (!name) { return false; } var spId = 'li_' + myB64('/samlSPMetaDataExportedAttributes/' + name); simpleTreeCollection[0].newAjaxNodeIn($('#li_L3NhbWxTUE1ldGFEYXRhTm9kZQ2'), spId, name, scriptname + '?type=new&node=/samlSPMetaDataNode/' + name, function(d, s) { $('>span', s).attr('name', name).attr('help', 'default').attr('id', 'text_' + spId).attr('onclick', 'samlSpMetaData(\'' + spId + '\')'); samlSpMetaData(spId); }); } var cfgAttrDone = 0; function uploadConf(f) { if (! (f == 1)) f = 0; $.ajax({ type: "POST", url: scriptname, data: { data: $('#li_cm9vdA2').html(), force: f }, dataType: 'json', success: function(data) { if (data == null) { networkPb() } else { var c = '

    ' + data.content.result.msg + '

    '; if (data.content.result.cfgNum <= 0) { if (typeof(data.content.errors) != 'undefined') { c += '

    Errors

    '; c += '
      '; for (m in data.content.errors) { c += '
    • ' + m + ': ' + data.content.errors[m] + '
    • '; } c += '
    '; } } else { // Update configuration attributes var cfgNum = data.content.result.cfgNum; $('#cfgNum').text(cfgNum); setCfgAttributes(data.content.cfgDatas); cfgAttrDone++; // Reload menu $.ajax({ type: "POST", url: scriptname, data: { menu: cfgNum }, dataType: 'html', success: function(data) { if (data == null) { networkPb() } else { $("div#menu").html(data); loadSimpleTree(); display('cfgDatas', ''); } } }); } if (typeof(data.content.warnings) != 'undefined') { c += '

    Warnings

    '; c += '
      '; for (m in data.content.warnings) { c += '
    • ' + m + ': ' + data.content.warnings[m] + '
    • '; } c += '
    '; } c += '

    ' + data.content.result.other + '

    '; if (typeof(data.content.applyStatus) != 'undefined') { c += '

    Application status

    '; c += '
      '; for (m in data.content.applyStatus) { c += '
    • ' + m + ': ' + data.content.applyStatus[m] + '
    • '; } c += '
    '; } popup(c); } }, error: function(xhr, ajaxOptions, thrownError) { popup('

    Request failed

    • Error code: ' + xhr.status + ', ' + thrownError + '
    '); } }); } function getCfgAttributes() { if (cfgAttrDone > 0) return; $.ajax({ type: "POST", url: scriptname, data: { cfgNum: lmdata('li_cm9vdA2'), cfgAttr: 1 }, dataType: 'json', success: function(data) { if (data == null) { networkPb() } else { setCfgAttributes(data.content); cfgAttrDone++; } }, error: function(xhr, ajaxOptions, thrownError) { var msg = 'Error code: ' + xhr.status + ', ' + thrownError; setCfgAttributes({ cfgAuthor: msg, cfgAuthorIP: msg, cfgDate: msg }); } }); } function setCfgAttributes(data) { var t = new Array('cfgAuthor', 'cfgAuthorIP', 'cfgDate'); // Convert date to locale string var date = data.cfgDate.toString(); if (date.match(/^\d+$/)) { var d = new Date(date * 1000); data.cfgDate = d.toLocaleString(); } // Set configuration data for (i in t) { $('#' + t[i]).text(data[t[i]]); } } /* Warning, it's not a real base64 */ function myB64(s) { var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; var res = ""; var s2 = ""; while (i < s.length) { chr1 = s.charCodeAt(i++); chr2 = s.charCodeAt(i++); chr3 = s.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; res += keyStr.charAt(enc1) + keyStr.charAt(enc2); if (isNaN(chr2)) { res += '2'; break; } res += keyStr.charAt(enc3); if (isNaN(chr3)) { res += '1'; break; } res += keyStr.charAt(enc4); if (i == s.length) { res += '0'; } } return res; } /* Function to download a file */ function downloadFile(id) { var content = lmdata(id).replace(/"/g, '"'); var inputs = ''; var filename = prompt(text4newFilename, 'lemonldap-ng.txt'); if (!filename) { return false; } inputs += ''; inputs += ''; jQuery('
    ' + inputs + '
    ').appendTo('body').submit().remove(); } /* Function to generate a file */ function generateFile(id) { /* If samlServicePrivateKey* elements, then generate keys */ if (lmtext(id) == 'samlServicePrivateKeySig' || lmtext(id) == 'samlServicePrivateKeyEnc') { var password = prompt(text4newGeneratedFile, ''); $('#button-loadimg').ajaxStart(function() { $(this).show(); }).ajaxComplete(function() { $(this).hide(); }); $.ajax({ type: 'POST', url: scriptname, data: { request: 'generateKeys', password: password }, dataType: 'json', success: function(data) { if (data == null) { networkPb() } else { var _public; var _id; setlmdata(id, data.content.private); if (lmtext(id) == 'samlServicePrivateKeySig') { _public = 'samlServicePublicKeySig'; } if (lmtext(id) == 'samlServicePrivateKeyEnc') { _public = 'samlServicePublicKeyEnc'; } _id = $('#' + lmparent(id) + ' span[name=' + _public + ']').attr('id').replace(/text_/, ''); setlmdata(_id, data.content.public); _id = $('#' + lmparent(id) + ' span[name=' + lmtext(id) + 'Pwd]').attr('id').replace(/text_/, ''); setlmdata(_id, password); filearea(id); } }, error: function(xhr, ajaxOptions, thrownError) { popup('

    Request failed

    • Error code: ' + xhr.status + ', ' + thrownError + '
    '); } }); $('#button-loadimg').unbind('ajaxStart'); } } /* Could not be called directly in _Struct.pm, required values */ function formateSelect(id, values, selectedValue) { var options = ''; for (i = 0; i < values.length; i++) { var key = values[i].substring(0, values[i].indexOf('=')); var val = values[i].substring(values[i].indexOf('=') + 1); options += '