diff --git a/.gitignore b/.gitignore index ac74d790..9bb68054 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ debian/alternc-slave debian/alternc-squirrelmail debian/alternc-upnp debian/files +debian/.debhelper lang/de_DE.po lang/es_ES.po lang/fr_FR.po diff --git a/README.md b/README.md index 3840fdbb..56295d7d 100644 --- a/README.md +++ b/README.md @@ -19,30 +19,30 @@ This project native tongue is French, and the code is commented in English. The ## Developper information -* This software is built around a Debian package for Jessie whose packaging instructions are located in [debian/](debian/) folder +* This software is built around a Debian package for Stretch whose packaging instructions are located in [debian/](debian/) folder (this package can be installed on Jessie safely too) * To **build the packages**, clone this repository in a Debian machine and use `debuild` or `dpkg-buildpackage` from source code root. -* If you want to **build it for Squeeze**, clone the source and patch it for Squeeze using [squeeze/patch.sh](squeeze/patch.sh) script. You'll be able to use dpkg-buildpackage to build the Wheezy version. -* If you want to **build it for Wheezy**, clone the source and patch it for Wheezy using [wheezy/patch.sh](wheezy/patch.sh) script. You'll be able to use dpkg-buildpackage to build the Wheezy version. - * The web control panel pages written in PHP are located in [bureau/admin](bureau/admin) and the associated PHP classes doing the stuff are in [bureau/class](bureau/class). ## Nightly build -We have 3 nightly build repositories: +We have 1 nightly build repositories: +* stretch - [stable 3.5](http://stable-3-5.nightly.alternc.org/) + +and 3 nightly from former Debian releases (now unmaintained) * jessie - [stable 3.3](http://stable-3-3.nightly.alternc.org/) * wheezy - [stable 3.2](http://stable-3-2.nightly.alternc.org/) * squeeze - [stable 3.1](http://stable-3-1.nightly.alternc.org/) -To use one of them, create a file named `/etc/apt/sources.list.d/alternc-nightly-stable-3.3.list` (for debian jessie) as follow : +To use one of them, create a file named `/etc/apt/sources.list.d/alternc-nightly-stable-3.5.list` (for debian Jessie or Stretch) as follow : ``` - deb http://stable-3-3.nightly.alternc.org/ latest/ + deb http://stable-3-5.nightly.alternc.org/ latest/ ``` The repository and the packages are signed by the pgp key of AlternC nightly build user : ``` -wget http://stable-3-3.nightly.alternc.org/nightly.key -O - | apt-key add - +wget http://stable-3-5.nightly.alternc.org/nightly.key -O - | apt-key add - ``` ## License diff --git a/bureau/admin/adm_variables.php b/bureau/admin/adm_variables.php index 4507dafc..c7d276a8 100755 --- a/bureau/admin/adm_variables.php +++ b/bureau/admin/adm_variables.php @@ -59,7 +59,7 @@ foreach( variables_list() as $vars) { ?> - + diff --git a/bureau/admin/dom_edit.inc.php b/bureau/admin/dom_edit.inc.php index 1b16a315..e69c4de2 100755 --- a/bureau/admin/dom_edit.inc.php +++ b/bureau/admin/dom_edit.inc.php @@ -136,7 +136,11 @@ $dom->unlock(); } else { __("Add this subdomain"); } -?>" /> +?>" /> + + " onclick="document.location = 'dom_edit.php?domain='"/> + + diff --git a/bureau/admin/styles/style.css b/bureau/admin/styles/style.css index 33b33b32..5c408cd1 100644 --- a/bureau/admin/styles/style.css +++ b/bureau/admin/styles/style.css @@ -1,47 +1,128 @@ -html, body { - margin: 0px; - padding: 0px; +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #5cb85c; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #868e96; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #868e96; + --success: #5cb85c; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --font-family-monospace: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +html { + height: 100%; } body { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; + height: 100%; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; color: #000000; - background-color: #B2CFE4; + background-color: #f0f0f0; + margin:0px; + } body.light { - background-color: #F0F0F4; + background-color: #fff; } .hlp { font-family: Helvetica, Tahoma, sans-serif; - font-size: 11px; + font-size: 14px; color: #202020; } table { - border-collapse: collapse; + border-radius: 5px; +} + +.lst2 { + /*background-color: #F1F8FD;*/ + background-color: none; +} +.lst1 { + background-color: #f9f9f9; +} + +.lst:nth-child(even) { + background:#f9f9f9; +} + +.lst:nth-child(odd) { + background:none; +} + +thead tr th:hover, table.tlist tbody tr:first-child th:hover { + background-color: #f0f0f0 !important; +} + +tbody tr:first-child { + border-bottom: 1px solid #eee; +} + +table.tlist > tbody > tr.lst:hover, +table.tlist > tbody > tr.lst > td:hover, +form[action="adm_dodel.php"] > table.tlist > tbody > tr:hover, +form[action="adm_dodel.php"] > table.tlist > tbody > tr > td:hover { + background-color: #DFEEF8 !important; +} + +table.tlist > tbody > tr.lst:first-child { + background-color: #fff; +} + +table.tlist > thead { + border-bottom: 1px solid #eee; +} + +table.tlist > thead + tbody > tr.lst { + border-bottom: transparent !important; +} + +tr:hover, td:hover +{ + background-color: transparent; } td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; color: #000000; padding-right: 6px; } th { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; color: black; - background: #B2CFE4; - font-weight: normal; + background: #f0f0f0; + font-weight: bold; text-align: left; } h3 { - font-family: Verdana, Arial, Helvetica, sans-serif; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 23px; font-weight: normal; color: #444; @@ -52,12 +133,19 @@ h3 { word-wrap: break-word; } +#content > h3 { + padding-bottom: 9px; + margin: 20px 0 20px 15px; + border-bottom: 1px solid #eee; +} + .trbtn { text-align: right; + } h4 { - font-family: Verdana, Arial, Helvetica, sans-serif; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 16px; font-weight: bold; color: #007777 @@ -67,204 +155,367 @@ hr { /*color: #007799;*/ height: 1px; /*border: 1px solid #007799;*/ - border: 1px solid #555; + border: 1px solid transparent; border-width: 1px 0 0 0; } +#content > hr, #content br { + display: none; +} + +.block_login_page br, td br, form > br, p.hlp > br, td br { + display: block !important; +} + a { text-decoration: none; - color: #0D5689; + color: #337ab7; } a:hover { text-decoration: underline; - color: #000000; + color: black; + text-decoration: none; +} + +td[style='background: red'], td[style='background: green'], td[style='background: yellow'], td[style='background: orange'] { + border-radius: 1000px; + display: block; + vertical-align: middle; + width: 10px; + height: 10px; +} + +th:hover { + background-color: #DFEEF8; +} + +td[style='padding-right: 2px; border-right: 1px solid black; '], td[style='padding-right: 2px; border-right: 1px solid black; color: red'] { + border-right: 1px solid #ddd !important; +} + +.trbtn:hover { + background-color: transparent !important; } fieldset { - border: 1px solid #555; + border: 1px solid transparent; } pre { overflow: auto; - background-color: #ddd; - padding: 10px; - border: solid 1px #999; + background-color: #eee; + border: 1px solid transparent; border-radius: 4px; -webkit-border-radius: 4px; -moz-border-radius: 4px; } -.inp { - /* Should not be use anymore !!! */ - border-color: blue; - border-width: 5px; - background-color: #500000; - color: white; +div.ui-accordion-content > ul { + margin-top: 0px !important; +} + +select { + border: 1px solid #999; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 13px; + color: black; + background: white; + text-transform: lowercase; } .inc, .inl { - border: 1px solid black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - border-style: none; + border: 1px solid #999; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 13px; color: black; background: white; } -.inb { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - border: 1px solid #999; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - padding: 4px 6px; - color: black; - background-color: #CFE3F1; - cursor: pointer; - margin-right: 4px; - height: 25px; - vertical-align: middle; -} -.inb:hover { - background-color: #BFD3E1; -} -.ina a, .ina a:hover, .inb a, .inb a:hover { - color: #000; - text-decoration: none; - vertical-align: middle; - line-height: 15px; -} -input.ui-state-hover { - font-weight: normal; +#inp1 { + min-width: 50%; + margin-top: 5px; } -span.inb { - display: inline-block; - height: 15px; - padding: 4px 6px; +form > br + .inb, form > br + .ina, form > br + .inb + .inb, form > br + .ina + .inb, form > br + .inb + .ina, form > br + .ina + .ina { + margin-top: 10px; } -input.ina, input.inav { - border: 1px solid #999; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - padding: 2px 4px 2px 4px; - color: black; - cursor: pointer; - /*float: right;*/ +p > input#file + br + .inb, p > input#file + br + .inb + .inb { + margin-top: 10px; } -input.ina:hover, input.ina, input.inav, input.inav:hover { - border: 1px solid #999; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - color: black; - cursor: pointer; - /*float: right;*/ +.showdirsize_button { + margin-top: 10px; } -input.ina, .ina a { - background-color: #F1F8FD; -} -input.ina:hover, .ina a:hover, -input.inav, .inav a { - background-color: #CFE3F1; -} -input.inav:hover, .inav a:hover, a.inav:hover { - background-color: #F1F8FD; -} - -.ina-active a, a.ina-active, input.ina-active { - background-color: #C1FFCD; -} - -.ina a, a.ina, .inav a, a.inav { +input.inb, input.ina{ color: black; white-space: nowrap; border: 1px solid #999; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + padding: 4px 10px 4px 0px; + cursor: pointer; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + vertical-align: middle; + padding-left: 10px; + height: auto; +} + +input.inb:hover, input.ina:hover { + border: 1px solid #999; + text-decoration: none; + background-color: #F0F0F0; +} + +input.inb:focus, input.ina.focus { + box-shadow: 0 0 0 0.2rem inbrgba(40, 167, 69, 0.5); +} + +.inb.disabled, .inb:disabled { + background-color: #5cb85c; + border-color: #5cb85c; +} + + +.cancel.inb:not([disabled]):not(.disabled):active:, .cancel.inb:not([disabled]):not(.disabled).active, +.cancel.show > .inb.dropdown-toggle { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +input.inb.cancel:active { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.cancel:active{ + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.delete.inb:not([disabled]):not(.disabled):active, .delete.inb:not([disabled]):not(.disabled).active, +.delete.show > .inb.dropdown-toggle { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} + +input.inb.delete:active { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; + +} + +.ok.inb:not([disabled]):not(.disabled):active, .ok.inb:not([disabled]):not(.disabled).active, +.ok.show > .inb.dropdown-toggle { + color: #fff; + background-color: #449d44; + border-color: #255625; +} + +input.inb.ok:active { + color: #fff; + background-color: #449d44; + border-color: #255625; +} + +.add.inb:not([disabled]):not(.disabled):active, .add.inb:not([disabled]):not(.disabled).active, +.add.show > .inb.dropdown-toggle { + color: #fff; + background-color: #449d44; + border-color: #255625; +} + +input.inb.add:active { + color: #fff; + background-color: #449d44; + border-color: #255625; +} + +input.ui-state-hover { + font-weight: normal; +} + +input.ina, input.inav, +input.ina:hover, input.inav:hover { + border: 1px solid #999; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + color: black; + cursor: pointer; +} + +input.ina[name="actdel"], input.ina[name="actrename"], input.ina[name="actperms"], input.ina[name="actcopy"], input.ina[name="actmove"] { + padding-top: 5px; + padding-bottom: 4px; +} + +input.ina, .ina a, .inb a, input.inb, input.ina, +input.inav, .inav a { + background-color: #fff; +} + +input.inav:hover, .inav a:hover, a.inav:hover, +input.ina:hover, .ina a:hover, .inb a:hover { + background-color: #F0F0F0; +} + +.ina a, a.ina, .inb a, a.inb,.inav a, a.inav { + color: black; + white-space: nowrap; + border: 1px solid #999; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; padding: 4px 10px; color: black; cursor: pointer; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - display: inline-block; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; vertical-align: middle; - line-height: 15px; - height: 15px; -} - -.inb a, a.inb { - padding: 4px 10px; -} - -input[type=button], -input[type=submit] { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; + line-height: 23px; height: 25px; } -.ina a:hover, a.ina:hover, .inav a:hover, a.inav:hover { + +#emaildom.int, #newsubname.int, #create_dom_list { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + padding-right: 10px; +} + +#tabsdom-addsub #newsubname.int { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + padding-right: 10px; + display: inline-table; + padding-top: 0.23em; + padding-bottom: 0.23em; +} + +span#newsubname { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + padding-right: 10px; + display: inline-table; + padding-top: 0.28em; + padding-bottom: 0.18em; +} + +.int#sub, .int#mail_arg { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + display: inline-table; +} + +.ina a:hover, a.ina:hover, .inb a:hover, a.inb:hover,.inav a:hover, a.inav:hover { text-decoration: none; color: black; } -.ina img, .ina img { +.ina img, .inb img { vertical-align: middle; padding: 0 2px 0 0; float: left; } .bff { border: 1px solid #999; - background-color: #F1F8FD; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; + background-color: #F0F0F0; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 13px; padding-left: 2px; padding-right: 4px; color: black; cursor: pointer; } -.int { - border: 1px dotted black; - background-color: white; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - padding: 2px; + +form[action='adm_dodefquotas.php'] table { + border-color: transparent; } + +.int { + font-size: 14px; + line-height: 1.4; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + min-height: 2em; + padding-left: 6px; + padding-right: 6px; +} + +span.intleft, #usernpfx, #newdomwww { + border: 0; /* disabled, not compatible with bootstrap */ +} + +form#formlist1 > span.int.intleft { + padding-bottom: 0.14em; + padding-top: 0.43em; +} + +input[name="domain_id"] + input.inb.add { + margin-top: -4px; +} + +#create_dom_list_pfx { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + border-right: 0; + padding-bottom: 5px; + padding-top: 3px; + padding-right: 10px; + padding-left: 10px; + padding-right: 0px; +} + +#usern, #newdomain { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +span.intright { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + padding-bottom: 4px; + padding-top: 3px; + padding-right: 10px; +} + +input.intleft { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +input.intright { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +input.int[name="userfile"] { + padding-top: 5px; + padding-bottom: 2px; +} + .intleft { border-right: 0px; padding-right: 0px; } + .intright { border-left: 0px; padding-left: 0px; } -.lst2 { - /*background-color: #F1F8FD;*/ - background-color: #E7F0F9; -} -.lst1 { - background-color: #CFE3F1; -} - -.lst:nth-child(even) { background:#E7F0F9; } -.lst:nth-child(odd) { background:#CFE3F1; } - -.dlogin { - text-align: center; -} - -.login { - margin-left: auto; - margin-right: auto; -} - img { border: 0px; vertical-align: middle; @@ -272,81 +523,83 @@ img { /* Alerts */ .alert { - border: 1px solid transparent; - border-radius: 4px 4px 4px 4px; - margin-bottom: 20px; - padding: 15px; + border: 1px solid transparent; + border-radius: 4px 4px 4px 4px; + margin-bottom: 20px; + padding: 15px; } .alert h4 { - color: inherit; - margin-top: 0; + color: inherit; + margin-top: 0; } .alert .alert-link { - font-weight: bold; + font-weight: bold; } .alert > p, .alert > ul { - margin-bottom: 0; - margin-top: 0; + margin-bottom: 0; + margin-top: 0; } .alert > p + p { - margin-top: 5px; + margin-top: 5px; } .alert-dismissable { - padding-right: 35px; + padding-right: 35px; } .alert-dismissable .close { - color: inherit; - position: relative; - right: -21px; - top: -2px; + color: inherit; + position: relative; + right: -21px; + top: -2px; } .alert-success { - background-color: #DFF0D8; - border-color: #D6E9C6; - color: #356635; + background-color: #DFF0D8; + border-color: #D6E9C6; + color: #356635; } .alert-success hr { - border-top-color: #C9E2B3; + border-top-color: #C9E2B3; } .alert-success .alert-link, .alert-success a{ - color: #234323; + color: #234323; } + .alert-info { - background-color: #D9EDF7; - border-color: #BCE8F1; - color: #2D6987;} + background-color: #D9EDF7; + border-color: #BCE8F1; + color: #2D6987; +} .alert-info hr { - border-top-color: #A6E1EC; + border-top-color: #A6E1EC; } .alert-info .alert-link, .alert-info a { - color: #193B4D; + color: #193B4D; } .alert-warning { - background-color: #FCF8E3; - border-color: #FBEED5; - color: #A47E3C; + background-color: #FCF8E3; + border-color: #FBEED5; + color: #A47E3C; } .alert-warning hr { - border-top-color: #F8E5BE; + border-top-color: #F8E5BE; } .alert-warning .alert-link, .alert-warning a { - color: #6C5228; + color: #6C5228; } .alert-danger { - background-color: #F2DEDE; - border-color: #EED3D7; - color: #953B39; + background-color: #F2DEDE; + border-color: #EED3D7; + color: #953B39; } .alert-danger hr { - border-top-color: #E6C1C7; + border-top-color: #E6C1C7; } .alert-danger .alert-link, .alert-danger a{ - color: #6F2B2A; + color: #6F2B2A; } .alert-danger-tr { background-color: #F2DEDE !important; @@ -355,24 +608,23 @@ img { /* Alert icons */ #content .alert { - background-position: 12px center; - background-repeat: no-repeat; - padding-left: 48px; + background-position: 12px center; + background-repeat: no-repeat; + padding-left: 48px; } #content .alert-danger { - background-image: url("../images/danger.png"); + background-image: url("../images/danger.png"); } #content .alert-info{ - background-image: url("../images/info.png"); + background-image: url("../images/info.png"); } #content .alert-success { - background-image: url("../images/success.png"); + background-image: url("../images/success.png"); } #content .alert-warning { - background-image: url("../images/warning.png"); + background-image: url("../images/warning.png"); } - .alerte { color: #A00; font-style: italic; @@ -398,24 +650,21 @@ img { text-align: center; } +ul > li > a > span > img { + display: none; +} + #global { display: block; - margin-left: auto; - margin-right: auto; - margin-top: 20px; - margin-bottom: 20px; width: 1020px; - border: 1px solid #888; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - box-shadow: 1px 1px 15px #555; - background-color: #F0F0F4; + border: 1px solid #ddd; + background-color: #fff; + border: 0; + min-height: 100%; } @media screen and (min-width: 1000px) { #global { - margin: 20px 50px; width: auto; display: flex; } @@ -430,76 +679,105 @@ img { #menu { display: block; - border-right: 1px solid #888; - padding: 0; + border-right: 1px solid #ddd; + border-bottom: transparent; + padding: 0px; + } #content { display: block; - width: 770px; float: right; - margin-left: 10px; - padding-right: 10px; + padding: 10px; vertical-align: top; + background-color: #fff; + } .clearfix:after { - visibility: hidden; - display: block; - content: ""; - clear: both; - height: 0; - } + visibility: hidden; + display: block; + content: ""; + clear: both; +} + +a[href="ftp_edit.php?create=1"], a[href="httpperm_list.php"] { + margin-left: -4px; +} + +form[action="mman_edit.php"] > table > tbody > tr.lst1:hover, form[action="mman_edit.php"] > table > tbody > tr.lst2:hover { + background-color: #DFEEF8; +} /* Menu */ #menu { display: block; + background-color: #f0f0f0; float: left; padding: 0px; margin: 0px; - width: 200px; - padding-right: 10px; - padding-bottom: 10px; - padding-left: 10px; - border-radius: 10px 0 0 10px; - -webkit-border-radius: 10px 0 0 10px; - -moz-border-radius: 10px 0 0 10px; + width: 250px; +} + +.menu-title:active { + background-color: #DFEEF8; +} + +#menu-dom:active { + background-color: #DFEEF8; +} + +.block_login_page .menu-box { + font-size: 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 5px; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05); + box-shadow: 0 1px 1px rgba(0,0,0,.05); +} + +.menu-box a .menu-title { + border-bottom: 1px solid #e7e7e7; +} + +.menu-box li:last-child { + border-bottom: 1px solid #e7e7e7; } .menu-box { - margin-bottom: 10px; - font-size: 11px; - background-color: #F4F4FA; - border: 1px solid #888; - box-shadow: 1px 1px 5px #888; - border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; + font-size: 14px; + background-color: #f0f0f0; + border-top-color: transparent; + height: auto; } .menu-box .menu-title { display: block; color: #000000; - border-bottom: 2px solid #AAA; - background-color: #CFE3F1; + background-color: #f0f0f0; padding: 3px; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; } .menu-box a .menu-title { - min-height: 16px; + min-height: 30px; + padding-top: 7px; } .menu-box .menu-conmargin { margin: 0 5px 5px 5px; } +.menu-content { + background: white; +} +.menu-content ul li a span { + margin-left: 22px; +} + .menu-box ul { margin: 0px; - padding: 5px 0 5px 0; + padding: 0px; list-style-type: none; } @@ -508,7 +786,7 @@ img { .menu-box a { text-decoration: none; - color: #0D5689; + color: #337ab7; } .menu-box a:hover, @@ -517,15 +795,20 @@ img { background-color: #DFEEF8; } +.menu-box a:focus, +.menu-box a:focus .menu-title { + text-decoration: none; + background-color: #DFEEF8; +} + .menu-box li a { display: block; padding: 5px 5px 5px 10px; - color: #0D5689; + color: #444; text-decoration: none; border: 1px solid transparent; border-width: 1px 0; - line-height: 0.75em; - height: 10px; + height: 25px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; @@ -545,7 +828,6 @@ img { .menu-box li a:hover { color: #000000; - border: 1px solid #C1D8E9; border-width: 1px 0; text-decoration: none; background-color: #DFEEF8; @@ -580,8 +862,7 @@ img { } table.searchtable { - width: 700px; - border: 1px dotted #99f; + width: 900px; margin: 20px 0 20px 0px; } @@ -594,6 +875,11 @@ table.searchtable td { text-align: center; margin-left: auto; margin-right: auto; + bottom: 0; +} + +#content > .center { + display: none; } .border { @@ -606,11 +892,12 @@ table.searchtable td { #sendthisfile { + display: flex; margin-top: 6px; } .breadcrumb { - font-size: 12px; + font-size: 14px; } @@ -623,17 +910,11 @@ table.searchtable td { padding-left: 0; } -#create_dom_list_pfx { - border-right: 0; - padding: 3px; -} #create_dom_list { border-left: 0; padding-left: 0; } - - input#email { border-right: 0; padding-right: 0; @@ -643,28 +924,32 @@ input#email { span#emaildom { border-left: 0; padding-left: 2px; + display: inline-table; + padding-top: 0.28em; + padding-bottom: 0.18em; } -.tedit { - border: 1px solid #aaa; - padding: 6px; - margin: 0; - border-collapse: collapse; - } -.tedit td, .tedit th { +.tedit { + border: 1px solid #aaa; + padding: 6px; + margin: 0; + border-collapse: collapse; + border: 1px solid #ddd; + border-radius: 5px; +} +.tedit td, .tedit th { border: 1px solid #aaa; padding: 10px; - margin: 0; + margin: 0; } -.formcell { +.formcell { vertical-align: top; - border: 1px solid #aaa; padding: 10px; } .tlist, .tlist td, .tlist th, -.tlist2, .tlist2 td, .tlist2 th { +.tlist2, .tlist2 td, .tlist2 th { padding: 4px; margin: 0; border-collapse: collapse; @@ -672,33 +957,25 @@ span#emaildom { .tlist { width: 100%; - border: 1px solid #C1D8E9; + border: 1px solid #ddd; } -.tlistb, .tlistb td, .tlistb th { +.tlistb, .tlistb td, .tlistb th { padding: 4px; margin: 0; border-collapse: collapse; } -table.tlistb, .tlistb tr { - border: solid 1px #C1D8E9; +table.tlistb, .tlistb tr, form > table { + border: 1px solid transparent; } -.tlist tr:hover, .tlist2 tr:hover { - background-color: #F1D5CF; -} - -.tlist th, .tlist2 th { - font-size: 125%; -} - -input#dir, input#sub_local { +input#dir, input#sub_local { width: 200px; } .tab-ok { - background-color: lightgreen; + background-color: green; } .tab-err { background-color: red; @@ -728,17 +1005,18 @@ input#dir, input#sub_local { } .retour-auto { - max-width:220px; + max-width:220px; word-wrap:break-word; } .menutoplogo { - margin: 10px 0 0 5px; + top : 0; + margin: 20px 30px; width: 190px; } .currentuser { - margin: 5px 5px 10px 5px; + margin: 25px 5px 10px 5px; color:#444; } @@ -753,8 +1031,10 @@ input#dir, input#sub_local { .menu-quota div.progress-bar { width: 180px; background: #fff; - border: solid 1px #AAA; + color: white; + border: 1px solid transparent; margin-left: 10px; + display: none; } div.progress-bar { @@ -762,11 +1042,11 @@ div.progress-bar { width: 100%; height: 20px; background-color: #fff; - border: solid 1px #aaa; + border: 1px solid transparent; overflow: hidden; -webkit-border-radius: 4px; -moz-border-radius: 4px; - border-radius: 4px; + border-radius: 4px; } div.progress-bar div.barre { @@ -780,15 +1060,13 @@ div.progress-bar div.barre { div.progress-bar div.txt { position: absolute; - top: 3px; left: 0; width: 100%; - text-align:center; + text-align:center; } .ombrage { - border: 1px solid #888; - box-shadow: 1px 1px 15px #555; + border: 1px solid #ddd; } .petit, @@ -799,271 +1077,395 @@ div.progress-bar div.txt { } #adm_panel li, #adm_panel_root li { - padding: 4px 0 4px 0; + padding: 4px 0 4px 0; } #adm_panel li:hover, #adm_panel_root li:hover { - background-color: #BFD3E1; + background-color: #DFEEF8; } .edit a, a.edit, input.edit { background-image: url(../images/edit.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .view a, a.view, input.view { background-image: url(../images/code.png); background-repeat: no-repeat; - background-position: 8px 3px; - padding-left: 30px; -} - -.delete a, a.delete, input.delete { - background-image: url(../icon/delete.png); - background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .lock a, a.lock, input.lock { background-image: url(../icon/encrypted.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .settings a, a.settings, input.settings { background-image: url(../icon/settings.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .ok a, a.ok, input.ok { background-image: url(../icon/ok.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +input.ok:hover, input.ok:focus { + background-image: url(../icon/ok.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; + color: #fff; + background-color: #449d44; + border-color: #398439; +} + +input[value="Supprimer les utilisateurs cochés"], +input[value="Delete the checked users"] { + margin-bottom: 10px; +} + +.add a, a.add, +input.add, span.add .ina { + background-image: url(../icon/add.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; +} + +div.add > a:hover, +div > .add a:hover, p > a.add:hover { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +input.add:hover, input.add:focus { + background-image: url(../icon/add.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; + color: #fff; + background-color: #449d44; + border-color: #398439; +} + +.delete a, a.delete, input.delete { + background-image: url(../icon/delete.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; +} + +div.delete a:hover, +div > .delete a:hover, p > a.delete:hover { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} + +input.delete:hover, input.delete:focus { + background-image: url(../icon/delete.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; } .cancel a, a.cancel, input.cancel { background-image: url(../icon/cancel.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } -.add a, a.add, input.add { - background-image: url(../icon/add.png); +input.cancel:hover { + background-image: url(../icon/cancel.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; + background-color: #fcf8e3; +} + +input.cancel:active { + background-image: url(../icon/cancel.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; + background-color: #f0ad4e; + border-color: #eea236; +} + +.inb[name='cancel']:active { + background-color: #f0ad4e; + border-color: #eea236; +} +.inb[name='cancel']:hover { + background-color: #fcf8e3; +} + +.inb[name='select']:active { + background-color: #449d44; + border-color: #255625; +} +.inb[name='select']:hover { + background-color: #dff0d8; } .configure a, a.configure, input.configure { background-image: url(../icon/configure.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .edit a, a.edit, input.edit { background-image: url(../icon/edit.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .save a, a.save, input.save { background-image: url(../icon/save.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .down a, a.down, input.down { background-image: url(../icon/save.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .up a, a.up, input.up { background-image: url(../icon/up.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; + padding-top: 5px; + padding-bottom: 5px; +} + +.up a:hover, a.up:hover, input.up:hover { + background-image: url(../icon/up.png); + background-repeat: no-repeat; + background-position: 8px 5px; + padding-left: 30px; + padding-top: 5px; + padding-bottom: 5px; +} + +#btb1.ina { + padding-top: 5px; + padding-bottom: 4px; } .back a, a.back, input.back { background-image: url(../icon/back.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } .admin a, a.admin, input.admin, .admin-menu .menu-title { background-image: url(../images/admin.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .home a, a.home, input.home, .home-menu .menu-title { background-image: url(../images/home.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; + margin-top: 10px; + border-top: 1px solid #ddd; } .dom a, a.dom, input.dom, .dom-menu .menu-title { background-image: url(../images/dom.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .mail a, a.mail, input.mail, .mail-menu .menu-title { background-image: url(../images/mail.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .bro a, a.bro, input.bro, .bro-menu .menu-title { background-image: url(../images/folder.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .hta a, a.hta, input.hta, .hta-menu .menu-title { background-image: url(../images/password.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .ftp a, a.ftp, input.ftp, .ftp-menu .menu-title { background-image: url(../images/ftp.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .cron a, a.cron, input.cron, .cron-menu .menu-title { background-image: url(../images/schedule.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .lxc a, a.lxc, input.lxc, .lxc-menu .menu-title { background-image: url(../images/ssh.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .mysql a, a.mysql, input.mysql, .mysql-menu .menu-title { background-image: url(../images/mysql.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .quota a, a.quota, input.quota, .quota-menu .menu-title { background-image: url(../images/quota.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .authip a, a.authip, input.authip, .authip-menu .menu-title { background-image: url(../images/ip.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .log a, a.log, input.log, .log-menu .menu-title { background-image: url(../images/logs.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .help a, a.help, input.help, .help-menu .menu-title { background-image: url(../images/help.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .lang a, a.lang, input.lang, .lang-menu .menu-title { background-image: url(../images/lang.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } .mem a, a.mem, input.mem, .mem-menu .menu-title { background-image: url(../images/settings.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 10px; padding-left: 30px; } -.logout a, a.logout, input.logout, .logout-menu .menu-title { - background-image: url(../images/exit.png); - background-repeat: no-repeat; - background-position: 8px 3px; - padding-left: 30px; -} -.ssl a, a.ssl, input.ssl, .ssl-menu .menu-title { - background-image: url(../images/ssl.png); - background-repeat: no-repeat; - background-position: 8px 3px; - padding-left: 30px; -} .filter a, a.edit, input.filter { background-image: url(../icon/filter.png); background-repeat: no-repeat; - background-position: 8px 3px; + background-position: 8px 5px; padding-left: 30px; } + /* Jquery-ui */ +body .ui-tabs { + padding: 0em; + border: transparent; +} + body .ui-widget-content { -/* margin-top: 15px; */ + margin-top: 15px; + background: #fff; +} + +#b1 { + display:contents; + background: #fff; +} + +#browseiframe { + padding: 20px; } body .ui-widget-header { - background: #CFE3F1; + background: #fff; + border: 1px solid transparent; + border-bottom-color: #ddd; + border-radius: 4px 4px 0 0; } body .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { - color: #0D5689; + color: #337ab7; } body .ui-state-default, body .ui-widget-content .ui-state-default, body .ui-widget-header .ui-state-default { - background: #F0F0F4; + background: #fff; + border: 1px solid transparent; } body .ui-state-active, body .ui-widget-content, body .ui-state-active, body .ui-widget-header .ui-state-active { - background: #F0F0F4; + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; +} + +body .ui-accordion .ui-accordion-content { + padding: 0 !important; + margin: 0 !important; + border: 0; + border-radius: 0; + border-bottom: 1px solid #ddd; } body .ui-state-active a, body .ui-state-active a:link { - color: black; + color: #555; } body .ui-tabs .ui-tabs-panel { - background: #F0F0F4; + background: #fff; + margin: 0 !important; } body .ui-tabs .ui-tabs-nav li a { @@ -1081,7 +1483,15 @@ body .ui-dialog .ui-dialog-title { } body .ui-widget-content a { - color: #0D5689; + color: #337ab7; +} + +li.ui-state-hover[aria-selected='false'] { + background: #eee; +} + +li.ui-state-active[role='tab'] { + border-bottom-color: transparent; } .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { @@ -1093,121 +1503,278 @@ body .ui-widget-content a { } .info-toggle { - background: none repeat scroll 0 0 #CFE3F1; + background: none repeat scroll 0 0 #f5f5f5; border: 1px solid #CCCCCC; border-radius: 15px 15px 15px 15px; margin: 16px 0; padding: 0 16px; } +th.headerSortUp { + background-image: url(../images/asc.gif); + background-repeat: no-repeat; + background-position: right; + cursor: pointer; + background-color: #3399FF; +} + +th.headerSortDown { + background-image: url(../images/desc.gif); + background-repeat: no-repeat; + background-position: right; + cursor: pointer; + background-color: #3399FF; +} + +.sub-disabled { + text-decoration: line-through; +} + +.dlogin { + text-align: center; +} + +span.menu-title > span > img { + display: none; + +} + +.login_page .inb { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} +.login_page .inb:hover { + text-decoration: none; + color: #fff; + background-color: #449d44; + border-color: #449d44; +} + +.login_page .inb:focus, .login_page .inb.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.login_page .inb.disabled, .login_page .inb:disabled { + background-color: #5cb85c; + border-color: #5cb85c; +} + + +.login_page .inb:not([disabled]):not(.disabled):active, .login_page .inb:not([disabled]):not(.disabled).active, +.show > .inb.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.login { + margin-left: auto; + margin-right: auto; +} + +body.login_page { + max-height: 100px !important; +} + +.login_page #global { + max-width: 1024px !important; + margin: 60px auto !important; + width: auto !important; +} + +.login_page .unsecure { + font-size: 14px; + margin-bottom: 1em; +} + +.login_page #content { + padding: 10px 10px 10px 10px; + border: 1px solid #ddd; + border-radius: 5px; + width: auto; +} + +.login_page #logo, .login_page { + text-align:center; +} + +.login_page #logo, .login_page > img { + margin-right: 10px; +} + +.login_page .block_list { + display: flex; + flex-flow: column; + padding: 0 10%; +} +.login_page .block_login_page { + margin: 10px 15px; +} + +.login_page .menu-box { + width: 400px; +} + +.login_page .block_list .menu-box { + display: inline-block; +} + +.menu-title { + background-position: 8px 10px !important; +} + +.block_login_page > b { + + font-weight: inherit; +} + +.login_page .menu-box .menu-title { + text-align: center; + font-size: 1.2em; +} + +.login_page .menu-box .menu-content { + margin: 15px; +} + +.login_page .menu-box .menu-content > div { + margin-bottom: 7px; +} + +.login_page .menu-box .menu-content label { + width: 25%; + margin-bottom: 10px; + text-align: left; + display: inline-block; +} + +.login_page .menu-box .menu-content input { + width: 60%; +} + +.login_page .menu-box .menu-content .submit { + text-align: center; +} + +.login_page .menu-box .menu-content input[type='submit']{ + height: 2em; + width: 85%; +} + +small > i { + display: flex; +} + +.content { + height: 100%; +} + +@media (max-width:1000px) { + .login_page .block_login_page { + width: 100%; + } + + .login_page #global { + margin: 0 !important; + } + + #global { + margin-top: 60px; + width: auto; + display: flex; + min-height: 100%; + } + + .global { + display: block; + width: auto; + height: auto; + } + + .menu, .content, #menu, #content { + float: block; + width: auto; + height: auto; + } + + .content { + height: 100%; + } +} + +.logout a, a.logout, input.logout, .logout-menu .menu-title { + background-image: url(../images/exit.png); + background-repeat: no-repeat; + background-position: 8px 10px; + padding-left: 30px; + text-align: center; +} + +.alternc_powered { + text-align:right; +} + +.toggle_menu { + display: none; + position: fixed; + top: 10px; + right: 10px; + z-index: 1000; +} + +@media (max-width:2000px) { + span#emaildom { + padding-top: 0.17em; + padding-bottom: 0.27em; + } + form#formlist1 > span.int.intleft { + padding-bottom: 0.15em; + padding-top: 0.4em; + } + span.intright { + padding-bottom: 0.4em; + padding-top: 0.25em; + } + span#newsubname { + padding-top: 0.17em; + padding-bottom: 0.27em; + } + #tabsdom-addsub #newsubname.int { + padding-top: 0.1em; + padding-bottom: 0.35em; + } +} + + +.ssl a, a.ssl, input.ssl, .ssl-menu .menu-title { + background-image: url(../images/ssl.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + textarea.cert { font-family: Courier New, Courier, monospace, fixed; font-size: 12px; } -th.headerSortUp { - background-image: url(../images/asc.gif); - background-repeat: no-repeat; - background-position: right; - cursor: pointer; - background-color: #3399FF; -} - -th.headerSortDown { - background-image: url(../images/desc.gif); - background-repeat: no-repeat; - background-position: right; - cursor: pointer; - background-color: #3399FF; -} - -.sub-disabled { - text-decoration: line-through; -} - -.login_page #global { - max-width: 1000px !important; - margin: 20px auto !important; - width: auto !important; -} - - - -.login_page .unsecure { - font-size: 1.1em; - width: 90%; - margin-bottom: 1em; -} - -.login_page #content { - padding: 10px; - width: auto; -} -.login_page #logo, .login_page .alternc_powered { - text-align:center; -} - -.login_page .block_list { - display: flex; - flex-flow: row wrap; -} -.login_page .block_login_page { - margin: 10px; - width: 420px; -} - -.login_page .menu-box .menu-title { - text-align: center; - font-weight: bold; - font-size: 1.2em; -} - -.login_page .menu-box .menu-content { - margin: 15px; -} -.login_page .menu-box .menu-content > div { - margin-bottom: 7px; -} -.login_page .menu-box .menu-content label { - width: 30%; - display: inline-block; -} -.login_page .menu-box .menu-content input { - width: 60%; -} -.login_page .menu-box .menu-content .submit { - text-align: center; -} -.login_page .menu-box .menu-content input[type='submit']{ - width: 100px; - height: 2em; -} - -.toggle_menu { - display: none; - position: fixed; - top: 10px; - right: 10px; - z-index: 1000; -} - -@media (max-width:980px) { - .login_page .block_login_page { - width: 100%; - } - - .login_page #global { - margin: 0 !important; - } - #global { - display: block; - width: auto; - } - - #menu, #content { - float: none; - width:auto; - } textarea[readonly='readonly'] { background-color: #ddd; } + diff --git a/bureau/class/functions.php b/bureau/class/functions.php index 0627744e..0fe4f259 100755 --- a/bureau/class/functions.php +++ b/bureau/class/functions.php @@ -541,7 +541,6 @@ function _md5cr($pass, $salt = "") { return crypt($pass, $salt); } - /** split mysql database name between username and custom database name * @param string $dbname database name * @return array returns username as first element, custom name as second @@ -1204,3 +1203,42 @@ function csrf_check($token=null) { $db->exec("DELETE FROM csrf WHERE created= 7.0 + $salt = base64_encode(random_bytes(12)); + } + else if (function_exists('mcrypt_create_iv')) { + $salt = base64_encode(mcrypt_create_iv(12, MCRYPT_DEV_URANDOM)); + } + else if (function_exists('')) { + $salt = base64_encode(openssl_random_pseudo_bytes(12)); + } + if (!$salt) { + throw Error('Unable to generate salt'); + } + } + $salt = '$6$rounds=20000$' . $salt; + $hash = crypt($password, $salt); + return $hash; +} + +/** + * Create a password hash for use with dovecot. + */ +function _dovecot_hash($password) { + // In any case the final password saved for dovecot can store the + // scheme to override the default on a per-account basis. + // Ideally this is updated to bcrypt or argon2 when those become + // available in dovecot. + // @see https://wiki.dovecot.org/Authentication/PasswordSchemes + $hash = _sha512cr($password); + return '{SHA512-CRYPT}' . $hash; +} diff --git a/bureau/class/m_admin.php b/bureau/class/m_admin.php index 1fdb4691..11d30db2 100644 --- a/bureau/class/m_admin.php +++ b/bureau/class/m_admin.php @@ -634,7 +634,7 @@ class m_admin { $msg->raise("ERROR", "admin", _("Login can only contains characters a-z, 0-9 and -")); return false; } - $pass = _md5cr($pass); + $pass = password_hash($pass, PASSWORD_BCRYPT); $db = new DB_System(); // Already exist? $db->query("SELECT count(*) AS cnt FROM membres WHERE login= ?;", array($login)); @@ -772,7 +772,7 @@ class m_admin { $db = new DB_System(); if ($pass) { - $pass = _md5cr($pass); + $pass = password_hash($pass, PASSWORD_BCRYPT); $second_query = "UPDATE membres SET mail= ?, canpass= ?, enabled= ?, `type`= ?, notes= ? , pass = ? WHERE uid= ?;"; $second_query_args = array($mail, $canpass, $enabled, $type, $notes, $pass, $uid); } else { diff --git a/bureau/class/m_ftp.php b/bureau/class/m_ftp.php index 74b02788..11566a79 100644 --- a/bureau/class/m_ftp.php +++ b/bureau/class/m_ftp.php @@ -321,7 +321,7 @@ class m_ftp { return false; // The error has been raised by checkPolicy() } } - $encrypted_password = _md5cr($pass, strrev(microtime(true))); + $encrypted_password = _sha512cr($pass); $db->query("UPDATE ftpusers SET name= ? , password='', encrypted_password= ?, homedir= ?, uid= ? WHERE id= ?;", array($full_login, $encrypted_password, $absolute, $cuid, $id)); } else { $db->query("UPDATE ftpusers SET name= ? , homedir= ? , uid= ? WHERE id= ? ;", array($full_login, $absolute, $cuid, $id)); @@ -406,7 +406,7 @@ class m_ftp { } if ($quota->cancreate("ftp")) { - $encrypted_password = _md5cr($pass, strrev(microtime(true))); + $encrypted_password = _sha512cr($pass); $db->query("INSERT INTO ftpusers (name,password, encrypted_password,homedir,uid) VALUES ( ?, '', ?, ?, ?)", array($full_login, $encrypted_password, $absolute, $cuid)); return true; } else { diff --git a/bureau/class/m_mail.php b/bureau/class/m_mail.php index 28bcdb78..eec5c9a0 100644 --- a/bureau/class/m_mail.php +++ b/bureau/class/m_mail.php @@ -620,8 +620,10 @@ ORDER BY return false; } if ($canbeempty && empty($pass)) { - return $db->query("UPDATE address SET password= ? where id = ? ;", array(null, $mail_id )); - } else if (!$db->query("UPDATE address SET password= ? where id = ? ;", array(_md5cr($pass), $mail_id ))) { + return $db->query("UPDATE address SET password= ? where id = ? ;", + array(null, $mail_id )); + } else if (!$db->query("UPDATE address SET password= ? where id = ? ;", + array(_dovecot_hash($pass), $mail_id ))) { return false; } return true; diff --git a/bureau/class/m_mem.php b/bureau/class/m_mem.php index b5420b98..4885bed9 100644 --- a/bureau/class/m_mem.php +++ b/bureau/class/m_mem.php @@ -93,7 +93,7 @@ class m_mem { return false; } $db->next_record(); - if (_md5cr($password, $db->f("pass")) != $db->f("pass")) { + if (!password_verify($password, $db->f('pass'))) { $db->query("UPDATE membres SET lastfail=lastfail+1 WHERE uid= ? ;", array($db->f("uid"))); $msg->raise("ERROR", "mem", _("User or password incorrect")); return false; @@ -104,6 +104,12 @@ class m_mem { } $this->user = $db->Record; $cuid = $db->f("uid"); + // Transitional code to update md5 hashed passwords to those created + // with password_hash(). + if (strncmp($db->f('pass'), '$1$', 3) == 0) { + $db->query("update membres set pass = ? where uid = ?", + array(password_hash($password, PASSWORD_BCRYPT), $cuid)); + } if (panel_islocked() && $cuid != 2000) { $msg->raise("ALERT", "mem", _("This website is currently under maintenance, login is currently disabled.")); @@ -396,7 +402,7 @@ class m_mem { $msg->raise("ERROR", "mem", _("You are not allowed to change your password.")); return false; } - if ($this->user["pass"] != _md5cr($oldpass, $this->user["pass"])) { + if (!password_verify($oldpass, $this->user['pass'])) { $msg->raise("ERROR", "mem", _("The old password is incorrect")); return false; } @@ -410,7 +416,7 @@ class m_mem { if (!$admin->checkPolicy("mem", $login, $newpass)) { return false; // The error has been raised by checkPolicy() } - $newpass = _md5cr($newpass); + $newpass = password_hash($newpass, PASSWORD_BCRYPT); $db->query("UPDATE membres SET pass= ? WHERE uid= ?;", array($newpass, $cuid)); $msg->init_msgs(); return true; diff --git a/debian/changelog b/debian/changelog index 3ed86856..191ee5c7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,22 @@ +alternc (3.5.0rc1) stable; urgency=low + + * AlternC 3.5 for Jessie & Stretch + * added AlternC-ssl natively now, based on cert providers (external package) + + -- Benjamin Sonntag Fri, 21 Jun 2018 15:26:00 +0100 + +alternc (3.1.11) oldoldstable; urgency=low + + * fix This is a big security upgrade of AlternC 3.x + * added CSRF token to all forms (as much as possible) to prevent cross-site attacks + * added XSS protection to many form fields and views + * migrated the DB abstraction layer from mysql_* functions to PDO + * migrated the DB calls from addslases to prepared-queries or quotes + * fix many unix rights issues (prevents a root escalation from alterncpanel!) + * fix some little interface issues on forms + + -- Benjamin Sonntag Fri, 27 May 2016 10:36:00 +0200 + alternc (3.3.10) stable; urgency=low * Version identical to 3.1 for Squeeze diff --git a/debian/control b/debian/control index f3c1ece3..02449f92 100644 --- a/debian/control +++ b/debian/control @@ -302,31 +302,3 @@ Description: Rest or get/post API for AlternC . More information at http://www.alternc.com/ Homepage: http://www.alternc.com/ - -Package: alternc-ssl -Priority: optional -Section: admin -Architecture: all -Depends: openssl - , mysql-client | mariadb-client - , debconf - , alternc (>= 3.0) - , php5-cli | php7.0-cli - , ${misc:Depends} -Conflicts: alternc (<< 3.0) -Description: HTTPS module for AlternC - AlternC is a mutualized hosting software manager for Linux. - It allows you to manage your websites, domains, ftp, emails, aliases, - web statistics, mailing-lists, jabber accounts, etc. - . - This package is an optional module that adds HTTPS vhosts and SSL Certificates - management to the virtual desktop. - . - More information on http://www.alternc.com/ -Description-fr.UTF-8: Module HTTPS pour AlternC - AlternC est un logiciel d'hébergement mutualisé pour serveur Linux. - Il permet de gérer les sites web, domaines, ftp, emails, alias, - statistiques web, listes de discussions, comptes jabber, etc. - . - Ce paquet est un module optionnel qui permet aux utilisateurs - de gérer des hôtes virtuels HTTPS et des certificats SSL dans AlternC. diff --git a/etc/alternc/templates/alternc/apache2.conf b/etc/alternc/templates/alternc/apache2.conf index 7fb527e6..0efcdf26 100644 --- a/etc/alternc/templates/alternc/apache2.conf +++ b/etc/alternc/templates/alternc/apache2.conf @@ -11,7 +11,7 @@ AssignUserId www-data www-data # Deny access to the root filesystem - Options FollowSymLinks + Options +FollowSymLinks AllowOverride None Order allow,deny Deny from all @@ -22,15 +22,13 @@ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch - Order allow,deny - Allow from all + Require all granted - Order allow,deny - Allow from all - + Require all granted + php_admin_flag safe_mode_gid off php_admin_flag safe_mode off AddDefaultCharset UTF-8 @@ -43,8 +41,8 @@ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride AuthConfig FileInfo Limit Options Indexes Options -Indexes +Includes -FollowSymLinks +MultiViews +SymLinksIfOwnerMatch - Order allow,deny - Allow from all + Require all granted + php_admin_flag safe_mode_gid off php_admin_flag safe_mode off php_admin_flag enable_dl off @@ -62,18 +60,16 @@ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride AuthConfig Options FileInfo Limit Indexes - Options Indexes Includes FollowSymLinks MultiViews - Order allow,deny - Allow from all + Options +Indexes +Includes +FollowSymLinks +MultiViews + Require all granted AllowOverride AuthConfig Options FileInfo Limit Indexes - Options Indexes Includes FollowSymLinks MultiViews - Order allow,deny - Allow from all + Options +Indexes +Includes +FollowSymLinks +MultiViews + Require all granted - allow from all + Require all granted diff --git a/etc/alternc/templates/apache2/roundcube-ssl.conf b/etc/alternc/templates/apache2/roundcube-ssl.conf index 8e5e5e2f..659eaeca 100644 --- a/etc/alternc/templates/apache2/roundcube-ssl.conf +++ b/etc/alternc/templates/apache2/roundcube-ssl.conf @@ -19,10 +19,9 @@ # Access to tinymce files - Options Indexes MultiViews FollowSymLinks + Options +Indexes +MultiViews +FollowSymLinks AllowOverride None - Order allow,deny - allow from all + Require all granted @@ -30,8 +29,7 @@ # This is needed to parse /var/lib/roundcube/.htaccess. See its # content before setting AllowOverride to None. AllowOverride All - order allow,deny - allow from all + Require all granted # Protecting basic directories: @@ -57,9 +55,8 @@ Alias /javascript /usr/share/javascript/ - Options FollowSymLinks MultiViews - Order allow,deny - Allow from all + Options +FollowSymLinks +MultiViews + Require all granted SSLEngine On diff --git a/etc/alternc/templates/apache2/squirrelmail-ssl.conf b/etc/alternc/templates/apache2/squirrelmail-ssl.conf index a67b8837..f5132599 100644 --- a/etc/alternc/templates/apache2/squirrelmail-ssl.conf +++ b/etc/alternc/templates/apache2/squirrelmail-ssl.conf @@ -19,13 +19,13 @@ php_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail/:/var/lib/squirrelmail/data/:/var/spool/squirrelmail/:/etc/mailname php_admin_flag safe_mode off - Options Indexes FollowSymLinks + Options +Indexes +FollowSymLinks Alias /javascript /usr/share/javascript/ - Options FollowSymLinks MultiViews + Options +FollowSymLinks +MultiViews Order allow,deny Allow from all diff --git a/install/mysql.sql b/install/mysql.sql index 0b9f628a..0eb6b8da 100644 --- a/install/mysql.sql +++ b/install/mysql.sql @@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS ftpusers ( id int(10) unsigned NOT NULL auto_increment, name varchar(64) NOT NULL default '', password varchar(32) NOT NULL default '', - encrypted_password VARCHAR(32) default NULL, + encrypted_password VARCHAR(255) default NULL, homedir varchar(128) NOT NULL default '', uid int(10) unsigned NOT NULL default '0', enabled boolean NOT NULL DEFAULT TRUE, @@ -159,7 +159,7 @@ CREATE TABLE IF NOT EXISTS local ( CREATE TABLE IF NOT EXISTS membres ( uid int(10) unsigned NOT NULL auto_increment, -- Numéro du membre (GID) login varchar(128) NOT NULL default '', -- Nom d`utilisateur - pass varchar(64) NOT NULL default '', -- Mot de passe + pass varchar(255) NOT NULL default '', -- Mot de passe enabled tinyint(4) NOT NULL default '1', -- Le compte est-il actif ? su tinyint(4) NOT NULL default '0', -- Le compte est-il super-admin ? mail varchar(128) NOT NULL default '', -- Adresse email du possesseur diff --git a/install/upgrades/3.4.11.sql b/install/upgrades/3.4.11.sql new file mode 100644 index 00000000..643d3bc8 --- /dev/null +++ b/install/upgrades/3.4.11.sql @@ -0,0 +1,2 @@ +ALTER TABLE `membres` MODIFY `pass` varchar(255); +ALTER TABLE `ftpusers` MODIFY `encrypted_password` varchar(255); diff --git a/roundcube/class/m_roundcube.php b/roundcube/class/m_roundcube.php index 2d17734c..6626b6d3 100644 --- a/roundcube/class/m_roundcube.php +++ b/roundcube/class/m_roundcube.php @@ -101,7 +101,7 @@ class m_roundcube { $req=$stmt->execute(array($fullmail)); if ($req) { - foreach ( $req->fetchAll() as $t ) { + foreach ( $stmt->fetchAll() as $t ) { if (empty($t['user_id'])) continue ; $rcuser_id=$t['user_id']; diff --git a/roundcube/roundcube-install b/roundcube/roundcube-install index 59a26119..d5fda51a 100644 --- a/roundcube/roundcube-install +++ b/roundcube/roundcube-install @@ -96,3 +96,10 @@ EOF fi +if [ "$1" = "end" ]; then + #This is necessary because upgrading roundcube from 7.1 to 7.2 changes this setting + chown alternc-roundcube:root /etc/roundcube/main.inc.php + # In case owner is reset to www-data + chown alternc-roundcube:nogroup /var/lib/roundcube/temp +fi + diff --git a/wheezy/patch.sh b/wheezy/patch.sh deleted file mode 100755 index efb16bce..00000000 --- a/wheezy/patch.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Apply diffs to build for wheezy - -# DON'T COMMIT ANYTHING AFTER launching this -# reset your repos back to the serverside one! - -# The patch files were generated by running -# REV_NEW=ebb3471f04d49dd839237608bafc396e8b5090e5 REV_OLD=3ae6c0a5c2eecf864319dd42afbfc995baee9f68 \ -# for i in `git diff --name-only $REV_NEW $REV_OLD` ; do BASE_NAME=`echo $i | rev | cut -d '/' -f 1 | rev` ; \ -# git diff -p $REV_NEW $REV_OLD -- "$i" > jessie/$BASE_NAME ; done - -DIR_NAME=`dirname $0` -cd "$DIR_NAME"/../ - -for i in `ls "$DIR_NAME"`; do - patch -p1 < "$DIR_NAME/$i" -done