1
0
Fork 0

Merge branch 'devel' of github.com:triAGENS/ArangoDB into devel

This commit is contained in:
Michael Hackstein 2014-02-03 11:42:48 +01:00
commit 4dc635e59c
26 changed files with 183 additions and 72 deletions

View File

@ -1,6 +1,17 @@
v1.5.0 (XXXX-XX-XX)
-------------------
* added command-line option `--server.disable-authentication-unix-sockets`
with this option, authentication can be disabled for all requests coming
in via UNIX domain sockets, enabling clients located on the same host as
the ArangoDB server to connect without authentication.
Other connections (e.g. TCP/IP) are not affected by this option.
The default value for this option is `false`.
Note: this option is only supported on platforms that support Unix domain
sockets.
* fail if invalid `strategy`, `order` or `itemOrder` attribute values
are passed to the AQL TRAVERSAL function. Omitting these attributes
is not considered an error, but specifying an invalid value for any

View File

@ -107,6 +107,10 @@ Command-Line Options for arangod {#CommandLineArangod}
@anchor CommandLineArangoDisableAuthentication
@copydetails triagens::arango::ArangoServer::_disableAuthentication
@CLEARPAGE
@anchor CommandLineArangoDisableAuthenticationUnixSockets
@copydetails triagens::arango::ArangoServer::_disableAuthenticationUnixSockets
@CLEARPAGE
@anchor CommandLineArangoAuthenticateSystemOnly
@copydetails triagens::arango::ArangoServer::_authenticateSystemOnly

View File

@ -18,6 +18,7 @@ TOC {#CommandLineTOC}
- @ref CommandLineConsole "console"
- @ref CommandLineArangoEndpoint "server.endpoint"
- @ref CommandLineArangoDisableAuthentication "server.disable-authentication"
- @ref CommandLineArangoDisableAuthenticationUnixSockets "server.disable-authentication-unix-sockets"
- @ref CommandLineArangoAuthenticateSystemOnly "server.authenticate-system-only"
- @ref CommandLineArangoKeepAliveTimeout "server.keep-alive-timeout"
- @ref CommandLineArangoDefaultApiCompatibility "server.default-api-compatibility"

View File

@ -265,6 +265,7 @@ ArangoServer::ArangoServer (int argc, char** argv)
_applicationV8(0),
_authenticateSystemOnly(false),
_disableAuthentication(false),
_disableAuthenticationUnixSockets(false),
_dispatcherThreads(8),
_dispatcherQueueSize(8192),
_databasePath(),
@ -509,6 +510,9 @@ void ArangoServer::buildApplicationServer () {
additional[ApplicationServer::OPTIONS_SERVER + ":help-admin"]
("server.authenticate-system-only", &_authenticateSystemOnly, "use HTTP authentication only for requests to /_api and /_admin")
("server.disable-authentication", &_disableAuthentication, "disable authentication for ALL client requests")
#ifdef TRI_HAVE_LINUX_SOCKETS
("server.disable-authentication-unix-sockets", &_disableAuthenticationUnixSockets, "disable authentication for requests via UNIX domain sockets")
#endif
("server.disable-replication-logger", &_disableReplicationLogger, "start with replication logger turned off")
("server.disable-replication-applier", &_disableReplicationApplier, "start with replication applier turned off")
;
@ -1245,13 +1249,14 @@ void ArangoServer::openDatabases () {
TRI_vocbase_defaults_t defaults;
// override with command-line options
defaults.defaultMaximalSize = _defaultMaximalSize;
defaults.removeOnDrop = _removeOnDrop;
defaults.removeOnCompacted = _removeOnCompacted;
defaults.defaultWaitForSync = _defaultWaitForSync;
defaults.forceSyncProperties = _forceSyncProperties;
defaults.requireAuthentication = ! _disableAuthentication;
defaults.authenticateSystemOnly = _authenticateSystemOnly;
defaults.defaultMaximalSize = _defaultMaximalSize;
defaults.removeOnDrop = _removeOnDrop;
defaults.removeOnCompacted = _removeOnCompacted;
defaults.defaultWaitForSync = _defaultWaitForSync;
defaults.forceSyncProperties = _forceSyncProperties;
defaults.requireAuthentication = ! _disableAuthentication;
defaults.requireAuthenticationUnixSockets = ! _disableAuthenticationUnixSockets;
defaults.authenticateSystemOnly = _authenticateSystemOnly;
assert(_server != 0);

View File

@ -262,6 +262,26 @@ namespace triagens {
bool _disableAuthentication;
////////////////////////////////////////////////////////////////////////////////
/// @brief disable authentication for requests via UNIX domain sockets
///
/// @CMDOPT{\--server.disable-authentication-unix-sockets @CA{value}}
///
/// Setting @CA{value} to true will turn off authentication on the server side
/// for requests coming in via UNIX domain sockets. With this flag enabled,
/// clients located on the same host as the ArangoDB server can use UNIX domain
/// sockets to connect to the server without authentication.
/// Requests coming in by other means (e.g. TCP/IP) are not affected by this
/// option.
///
/// The default value is @LIT{false}.
///
/// Note: this option is only available on platforms that support UNIX domain
/// sockets.
////////////////////////////////////////////////////////////////////////////////
bool _disableAuthenticationUnixSockets;
////////////////////////////////////////////////////////////////////////////////
/// @brief number of dispatcher threads for non-database worker
///

View File

@ -30,6 +30,7 @@
#include "BasicsC/common.h"
#include "BasicsC/logging.h"
#include "BasicsC/tri-strings.h"
#include "Rest/ConnectionInfo.h"
#include "VocBase/auth.h"
#include "VocBase/server.h"
#include "VocBase/vocbase.h"
@ -101,6 +102,18 @@ HttpResponse::HttpResponseCode VocbaseContext::authenticate () {
return HttpResponse::OK;
}
#ifdef TRI_HAVE_LINUX_SOCKETS
// check if we need to run authentication for this type of
// endpoint
ConnectionInfo const& ci = _request->connectionInfo();
if (ci.endpointType == Endpoint::DOMAIN_UNIX &&
! _vocbase->_settings.requireAuthenticationUnixSockets) {
// no authentication required for unix socket domain connections
return HttpResponse::OK;
}
#endif
if (_vocbase->_settings.authenticateSystemOnly) {
// authentication required, but only for /_api, /_admin etc.
const char* path = _request->requestPath();

View File

@ -458,6 +458,11 @@ int main (int argc, char* argv[]) {
TRIAGENS_REST_SHUTDOWN;
TRI_GlobalExitFunction(res, NULL);
if (ArangoInstance != 0) {
delete ArangoInstance;
ArangoInstance = 0;
}
return res;
}

View File

@ -7823,6 +7823,7 @@ static v8::Handle<v8::Value> JS_CreateDatabase (v8::Arguments const& argv) {
v8::Local<v8::String> keyDefaultWaitForSync = v8::String::New("defaultWaitForSync");
v8::Local<v8::String> keyForceSyncProperties = v8::String::New("forceSyncProperties");
v8::Local<v8::String> keyRequireAuthentication = v8::String::New("requireAuthentication");
v8::Local<v8::String> keyRequireAuthenticationUnixSockets = v8::String::New("requireAuthenticationUnixSockets");
v8::Local<v8::String> keyAuthenticateSystemOnly = v8::String::New("authenticateSystemOnly");
// overwrite database defaults from argv[2]
@ -7852,6 +7853,10 @@ static v8::Handle<v8::Value> JS_CreateDatabase (v8::Arguments const& argv) {
if (options->Has(keyRequireAuthentication)) {
defaults.requireAuthentication = options->Get(keyRequireAuthentication)->BooleanValue();
}
if (options->Has(keyRequireAuthenticationUnixSockets)) {
defaults.requireAuthenticationUnixSockets = options->Get(keyRequireAuthenticationUnixSockets)->BooleanValue();
}
if (options->Has(keyAuthenticateSystemOnly)) {
defaults.authenticateSystemOnly = options->Get(keyAuthenticateSystemOnly)->BooleanValue();

View File

@ -44,13 +44,14 @@
void TRI_ApplyVocBaseDefaults (TRI_vocbase_t* vocbase,
TRI_vocbase_defaults_t const* defaults) {
vocbase->_settings.defaultMaximalSize = defaults->defaultMaximalSize;
vocbase->_settings.removeOnDrop = defaults->removeOnDrop;
vocbase->_settings.removeOnCompacted = defaults->removeOnCompacted;
vocbase->_settings.defaultWaitForSync = defaults->defaultWaitForSync;
vocbase->_settings.forceSyncProperties = defaults->forceSyncProperties;
vocbase->_settings.requireAuthentication = defaults->requireAuthentication;
vocbase->_settings.authenticateSystemOnly = defaults->authenticateSystemOnly;
vocbase->_settings.defaultMaximalSize = defaults->defaultMaximalSize;
vocbase->_settings.removeOnDrop = defaults->removeOnDrop;
vocbase->_settings.removeOnCompacted = defaults->removeOnCompacted;
vocbase->_settings.defaultWaitForSync = defaults->defaultWaitForSync;
vocbase->_settings.forceSyncProperties = defaults->forceSyncProperties;
vocbase->_settings.requireAuthentication = defaults->requireAuthentication;
vocbase->_settings.requireAuthenticationUnixSockets = defaults->requireAuthenticationUnixSockets;
vocbase->_settings.authenticateSystemOnly = defaults->authenticateSystemOnly;
}
////////////////////////////////////////////////////////////////////////////////
@ -72,6 +73,7 @@ TRI_json_t* TRI_JsonVocBaseDefaults (TRI_memory_zone_t* zone,
TRI_Insert3ArrayJson(zone, json, "waitForSync", TRI_CreateBooleanJson(zone, defaults->defaultWaitForSync));
TRI_Insert3ArrayJson(zone, json, "forceSyncProperties", TRI_CreateBooleanJson(zone, defaults->forceSyncProperties));
TRI_Insert3ArrayJson(zone, json, "requireAuthentication", TRI_CreateBooleanJson(zone, defaults->requireAuthentication));
TRI_Insert3ArrayJson(zone, json, "requireAuthenticationUnixSockets", TRI_CreateBooleanJson(zone, defaults->requireAuthenticationUnixSockets));
TRI_Insert3ArrayJson(zone, json, "authenticateSystemOnly", TRI_CreateBooleanJson(zone, defaults->authenticateSystemOnly));
TRI_Insert3ArrayJson(zone, json, "defaultMaximalSize", TRI_CreateNumberJson(zone, (double) defaults->defaultMaximalSize));
@ -120,6 +122,12 @@ void TRI_FromJsonVocBaseDefaults (TRI_vocbase_defaults_t* defaults,
defaults->requireAuthentication = optionJson->_value._boolean;
}
optionJson = TRI_LookupArrayJson(json, "requireAuthenticationUnixSockets");
if (TRI_IsBooleanJson(optionJson)) {
defaults->requireAuthenticationUnixSockets = optionJson->_value._boolean;
}
optionJson = TRI_LookupArrayJson(json, "authenticateSystemOnly");
if (TRI_IsBooleanJson(optionJson)) {

View File

@ -58,6 +58,7 @@ typedef struct TRI_vocbase_defaults_s {
bool defaultWaitForSync;
bool forceSyncProperties;
bool requireAuthentication;
bool requireAuthenticationUnixSockets;
bool authenticateSystemOnly;
}
TRI_vocbase_defaults_t;

View File

@ -107,6 +107,12 @@ controller.put("/foxxes/:key", function (req, res) {
controller.get("/foxxes/thumbnail/:app", function (req, res) {
res.transformations = [ "base64decode" ];
res.body = foxxes.thumbnail(req.params("app"));
// evil mimetype detection attempt...
var start = require("internal").base64Decode(res.body.substr(0, 8));
if (start.indexOf("PNG") !== -1) {
res.contentType = "image/png";
}
}).pathParam("app", {
description: "The appname which is used to identify the foxx in the list of available foxxes.",
type: "string",

View File

@ -41,21 +41,24 @@ ul.headerButtonList > li {
a.headerButton {
float: left;
cursor: pointer;
margin-top: 0px;
margin-top: 2px;
margin-left: 5px;
margin-right: 5px;
min-height: 19px;
margin-right: 3px;
min-height: 15px;
border-radius: 3px;
position: relative;
box-shadow: none;
background: #8AA051 !important;
/*
background: #8f8d8c !important;
*/
color:#FFFFFF !important;
height:20px;
width:13px;
padding: 5px 11px 2px 9px;
background: #ddd;
color: #555;
height: 17px;
width: 9px;
padding: 4px 9px 2px 9px;
border: 1px solid #222;
}
a.headerButton:hover {
background: #fff;
color: #000;
}
a.paginationButton, ul.arangoPagination a {
@ -64,11 +67,16 @@ a.paginationButton, ul.arangoPagination a {
/* better look of some icons */
a.headerButton .icon_arangodb_filter {
top: 1px !important;
top: 3px !important;
}
a.headerButton .icon_arangodb_import {
top: -1px !important;
top: 1px !important;
}
a.headerButton .icon_arangodb_checklist {
top: 3px !important;
right: 5px;
}
a.headerButton .icon_arangodb_arrowleft,

View File

@ -16,7 +16,8 @@
.span3 h5 {
font-family: 'Open Sans', sans-serif !important;
font-weight: 500;
font-weight: 300;
font-size: 12px;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
@ -42,29 +43,27 @@
.span3 .ICON {
position: absolute;
right: 0px;
margin-top: 5px;
margin-right: 5px;
opacity: 0.5;
cursor: pointer;
font-size: 25px;
font-size: 18px;
}
.span3 .ICON:hover {
opacity: 1.0;
}
.span3 .glyphicon-edit {
margin-top: 4px !important;
font-size: 19.5px;
}
.span3 .ICON{
right: 0px;
}
.span3 .spanInfo {
right: 25px;
}
.span3 .ICON:hover {
opacity: 1.0;
}
.spanDisabled {
right: 25px !important;
opacity: 0.2 !important;
@ -81,4 +80,5 @@
.badge, .label, .btn {
text-shadow: none !important;
font-size: 11px;
}

View File

@ -9,7 +9,7 @@
#newCollection {
position: relative;
margin-left: 22px;
font-size: 28px;
font-size: 22px;
margin-top: -5px;
margin-right: 10px;
}
@ -35,7 +35,8 @@
}
.thumbnails li {
background-color: #f4f3f3;
background-color: rgba(0, 0, 0, 0.05);
/* #f4f3f3; */
}
.thumbnails a.add {
@ -48,7 +49,7 @@
.thumbnails .icon {
padding-right:5px;
padding-left: 5px;
padding-top: 5px;
padding-top: 10px;
cursor: pointer;
}

View File

@ -115,11 +115,11 @@
}
.nv-axislabel {
margin-left: 20px;
margin-left: 0px;
}
.nv-axisMaxMin > text {
font: 10px sans-serif;
/* font: 10px 'Open Sans', sans-serif; */
}
.svgCollections {
@ -128,7 +128,7 @@
}
.svgClass {
height: 155px;
height: 142px;
width: 300px;
}
@ -166,7 +166,7 @@ li:hover h6, li.hover h6 {
}
.boxHeader h6 {
opacity: 0.8;
/* opacity: 0.8; */
padding-top: 0 !important;
color: black;
margin-left: 5px;
@ -207,7 +207,7 @@ li:hover h6, li.hover h6 {
}
.nv-x .nv-axislabel {
display: none;
display: none;
}
.nv-point {
@ -525,6 +525,12 @@ li:hover h6, li.hover h6 {
font-weight: 400;
}
#dbThumbnailsIn .dashboardH6 {
opacity: 1.0 !important;
font-size: 12px;
font-weight: 300;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
.svgClass{margin-top: 10px !important;}
.statSingleClient{margin-top: 10.5px !important;}
@ -532,8 +538,10 @@ li:hover h6, li.hover h6 {
}
.nvd3 .nv-axis .nv-axisMaxMin text {
/*
font-weight: 400;
font-size: 12px !important;
*/
}
.nvd3 .nv-wrap .nv-axis:last-child {

View File

@ -1,6 +1,6 @@
/* Sets the default values shared for content views*/
#content {
background-color: rgba(0, 0, 0, 0.15);
background-color: rgba(0, 0, 0, 0.0675);
margin-top: 25px;
margin-bottom: 33px;
min-height: 80px;

View File

@ -4,7 +4,7 @@ div.headerBar {
margin-top: 5px;
margin-left: 5px;
margin-right: 5px;
margin-bottom: 0px;
margin-bottom: 5px;
background-color: #686766;
color: #FFFFFF;
height: 36px;

View File

@ -259,9 +259,9 @@ button {
}
li a [class^="icon_arangodb"], li a [class*=" icon_arangodb"] {
font-size: 22px;
font-size: 18px;
position: absolute;
right: 5px;
right: 4px;
top: 2px;
}

View File

@ -93,11 +93,15 @@ svg {
svg text {
font: normal 12px Arial;
font-weight: 300;
font-size: 10px;
font-family: 'Open Sans', sans-serif;
}
svg .title {
font: bold 14px Arial;
font-weight: 400;
font-size: 14px;
font-family: 'Open Sans', sans-serif;
}
.nvd3 .nv-background {
@ -170,7 +174,6 @@ svg .title {
}
.nvd3 .nv-axis .nv-axisMaxMin text {
font-weight: bold;
}
.nvd3 .x .nv-axis .nv-axisMaxMin text,
@ -179,8 +182,6 @@ svg .title {
text-anchor: middle
}
/**********
* Brush
*/
@ -278,7 +279,7 @@ svg .title {
}
.nvd3.nv-pie .hover path {
fill-opacity: .7;
fill-opacity: .8;
/*
stroke-width: 6px;
stroke-opacity: 1;
@ -296,7 +297,7 @@ svg .title {
.nvd3 .nv-groups path.nv-line {
fill: none;
stroke-width: 2.5px;
stroke-width: 1.25px;
/*
stroke-linecap: round;
shape-rendering: geometricPrecision;

View File

@ -52,7 +52,6 @@
// cannot use strict here as we are going to delete globals
var exports = require("internal");
var fs = require("fs");
// -----------------------------------------------------------------------------
// --SECTION-- Module "internal"

View File

@ -4,7 +4,7 @@
</div>
<div class="plain">
<img src="<%= attributes.picture %>" height="60" width="60" alt="" class="icon">
<img src="<%= attributes.picture %>" height="50" width="50" alt="" class="icon">
<span class="badge badge-success <%= attributes.status %>"><div class="cornered"><%= attributes.status %></div></span>
<h5 class="collectionName">

View File

@ -505,32 +505,38 @@
if (self.detailGraph === identifier) {
d3.select("#detailGraphChart svg")
.call(chart)
.datum([{
values: self.seriesData[identifier].values,
key: identifier,
color: "#8AA051"
}])
.transition().duration(500);
.call(chart)
.datum([{
values: self.seriesData[identifier].values,
key: identifier,
color: "#8aa14c"
}])
.attr("stroke-width", "0.5")
.transition().duration(500);
}
//disable ticks/label for small charts
d3.select("#" + identifier + "Chart svg")
.call(chart)
.datum([ {
values: self.seriesData[identifier].values,
key: identifier,
color: "#8AA051" }
color: "#8aa14c" }
])
.transition().duration(500);
.attr("stroke-width", "0.5")
.transition().duration(500);
// Claudius: hide y-axis labels for small charts
$('#' + identifier + ' .nv-y.nv-axis text').attr('display', 'none');
});
this.loadGraphState();
// #8AA051
//fix position for last x-value label in detailgraph
$('.nv-x.nv-axis .nvd3.nv-wrap.nv-axis:last-child text').attr('x','-5');
//fix position of small graphs
$('.svgClass .nv-lineChart').attr('transform','translate(5,5)');
},
calculateSeries: function (flush) {

View File

@ -52,7 +52,6 @@
// cannot use strict here as we are going to delete globals
var exports = require("internal");
var fs = require("fs");
// -----------------------------------------------------------------------------
// --SECTION-- Module "internal"

View File

@ -1,4 +1,4 @@
/*jslint indent: 2, nomen: true, maxlen: 120 */
/*jslint indent: 2, nomen: true, maxlen: 120, vars: true */
/*global module, require, exports */
////////////////////////////////////////////////////////////////////////////////
@ -209,11 +209,15 @@ BaseMiddleware = function () {
if (trace) {
if (response.hasOwnProperty("body")) {
var bodyLength = 0;
if (response.body !== undefined) {
bodyLength = parseInt(response.body.length, 10);
}
console.log("%s, outgoing response with status %s of type %s, body length: %d",
options.mount,
response.responseCode,
response.contentType,
parseInt(response.body.length, 10));
bodyLength);
} else if (response.hasOwnProperty("bodyFromFile")) {
console.log("%s, outgoing response with status %s of type %s, body file: %s",
options.mount,

View File

@ -32,6 +32,7 @@
#include "Basics/Common.h"
#include "Basics/StringUtils.h"
#include "Rest/Endpoint.h"
namespace triagens {
namespace rest {
@ -48,6 +49,7 @@ namespace triagens {
serverAddress(),
clientAddress(),
endpoint(),
endpointType(Endpoint::DOMAIN_UNKNOWN),
sslContext(0) {
}
@ -57,6 +59,7 @@ namespace triagens {
serverAddress(that.serverAddress),
clientAddress(that.clientAddress),
endpoint(that.endpoint),
endpointType(that.endpointType),
sslContext(that.sslContext) {
}
@ -67,6 +70,7 @@ namespace triagens {
serverAddress = that.serverAddress;
clientAddress = that.clientAddress;
endpoint = that.endpoint;
endpointType = that.endpointType;
sslContext = that.sslContext;
}
@ -81,6 +85,7 @@ namespace triagens {
string serverAddress;
string clientAddress;
string endpoint;
Endpoint::DomainType endpointType;
void* sslContext;
};

View File

@ -234,6 +234,7 @@ bool ListenTask::handleEvent (EventToken token, EventType revents) {
info.serverAddress = _endpoint->getHost();
info.serverPort = _endpoint->getPort();
info.endpoint = _endpoint->getSpecification();
info.endpointType = _endpoint->getDomainType();
return handleConnected(connectionSocket, info);
}