more values in ?configuration
authorJiří Filipovič <fila@ics.muni.cz>
Mon, 27 Feb 2012 15:07:57 +0000 (15:07 +0000)
committerJiří Filipovič <fila@ics.muni.cz>
Mon, 27 Feb 2012 15:07:57 +0000 (15:07 +0000)
org.glite.lb.server/src/bkserverd.c
org.glite.lb.server/src/lb_proto.c
org.glite.lb.server/src/lb_text.c
org.glite.lb.server/src/lb_text.h

index df30841..396a332 100644 (file)
@@ -1068,10 +1068,14 @@ int bk_handle_connection(int conn, struct timeval *timeout, void *data)
 
        ctx->count_statistics = count_statistics;
 
+       ctx->count_server_stats = count_server_stats;
+
        ctx->serverIdentity = strdup(server_subject);
 
        ctx->rssTime = rss_time;
 
+       ctx->authz_policy_file = strdup(policy_file);
+
        gettimeofday(&conn_start, 0);
 
        alen = sizeof(a);
index 9cd46aa..dab6849 100644 (file)
@@ -927,7 +927,7 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx,
                        isadm = ctx->noAuth || edg_wll_amIroot(ctx->peerName, ctx->fqans,&ctx->authz_policy);
                        // Filo, tuto muzes pouzit k rozhodnuti, co vsechno se bude na konfiguracni strance ukazovat
 
-                       edg_wll_ConfigurationToText(ctx, &message);
+                       edg_wll_ConfigurationToText(ctx, isadm, &message);
                        edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_TEXT_VIEWS);
        /* GET /?stats*/
                } else if (extra_opt == HTTP_EXTRA_OPTION_STATS) {
index f882a90..8fc970c 100644 (file)
@@ -20,6 +20,8 @@ limitations under the License.
 #include "lb_text.h"
 #include "lb_proto.h"
 #include "cond_dump.h"
+#include "server_state.h"
+#include "authz_policy.h"
 
 #include "glite/lb/context-int.h"
 #include "glite/lb/xml_conversions.h"
@@ -30,6 +32,10 @@ limitations under the License.
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #ifdef __GNUC__
 #define UNUSED_VAR __attribute__((unused))
@@ -94,7 +100,7 @@ int edg_wll_QueryToText(edg_wll_Context ctx UNUSED_VAR, edg_wll_Event *eventsOut
                 l = asprintf(&a,"%s=" type "", \
                         name, field); \
         else \
-                l = asprintf(&a,"%s=", name); \
+                l = asprintf(&a,"%s=\n", name); \
         b = realloc(b, sizeof(*b)*(pomL+l+1)); \
         strcpy(b+pomL, a); \
         pomL += l; \
@@ -273,12 +279,26 @@ int edg_wll_JobStatusToText(edg_wll_Context ctx UNUSED_VAR, edg_wll_JobStat stat
         return 0;
 }
 
-int edg_wll_ConfigurationToText(edg_wll_Context ctx, char **message){
+int edg_wll_ConfigurationToText(edg_wll_Context ctx, int admin, char **message){
        char *a = NULL, *b;
        int pomL = 0;
        int i;
        b = strdup("");
 
+       TRS("server_version", "%s\n", VERSION);
+
+       TRS("server_identity", "%s\n", ctx->serverIdentity);
+
+       if (ctx->job_index)
+               for (i = 0; ctx->job_index[i]; i++){
+                       char *ch = edg_wll_QueryRecToColumn(ctx->job_index[i]);
+                       if (i == 0) TRS("server_indices", "%s", ch)
+                       else TRA("%s", ch);
+                       free(ch);
+               }
+       if (i > 0)
+                TRA("%s", NULL);
+
        if (ctx->msg_brokers)
                for (i = 0; ctx->msg_brokers[i]; i++){
                        if (i == 0) TRS("msg_brokers", "%s", ctx->msg_brokers[i])
@@ -293,7 +313,53 @@ int edg_wll_ConfigurationToText(edg_wll_Context ctx, char **message){
                        else TRA("%s", ctx->msg_prefixes[i]);
        if (i > 0)
                 TRA("%s", NULL);
-       
+
+       /* only for superusers */
+       if (admin){
+               char *dbname, *dbhost;
+               dbname = glite_lbu_DBGetName(ctx->dbctx);
+               dbhost = glite_lbu_DBGetHost(ctx->dbctx);
+               TRS("database_name", "%s\n", dbname);
+               TRS("database_host", "%s\n", dbhost);
+
+               free(dbname);
+               free(dbhost);
+
+               char *pf = NULL;
+               int fd;
+               if (ctx->authz_policy_file && (fd = open(ctx->authz_policy_file, O_RDONLY)) >= 0){
+                       off_t size = lseek(fd, 0, SEEK_END) - lseek(fd, 0, SEEK_SET);
+                       char *pft = (char*)malloc(size);
+                       read(fd, pft, size);
+                       close(fd);
+                       pf = escape_text(pft);
+                       
+               }
+               TRS("authz_policy_file", "%s\n", pf);
+               if (pf) free(pf);
+
+               edg_wll_authz_policy ap = edg_wll_get_server_policy();
+               int i, j, k, l = 0;
+               for (i = 0; i < ap->actions_num; i++){
+                       if (ap->actions[i].id == ADMIN_ACCESS)
+                               for (j = 0; j < ap->actions[i].rules_num; j++)
+                                       for (k = 0; k < ap->actions[i].rules[j].attrs_num; k++){
+                                               if (l == 0)
+                                                       TRS("admins", "\"%s\"", ap->actions[i].rules[j].attrs[k].value)
+                                               else
+                                                       TRA("\"%s\"", ap->actions[i].rules[j].attrs[k].value);
+                                               l++;
+                                       }
+               }
+               if (l) TRA("%s", NULL);
+
+               char *start = NULL, *end = NULL;
+               edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_START, &start);
+               edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_END, &end);
+               TRS("dump_start", "%s\n", start);
+               TRS("dump_end", "%s\n", end);
+       }
+
        *message = b;
 
        return 0;
index 6e70004..c6d5da6 100644 (file)
@@ -28,7 +28,7 @@ int edg_wll_JobStatusToText(edg_wll_Context, edg_wll_JobStat, char **);
 int edg_wll_UserInfoToText(edg_wll_Context, edg_wlc_JobId *, char **);
 int edg_wll_UserNotifsToText(edg_wll_Context ctx, char **notifids, char **message);
 int edg_wll_NotificationToText(edg_wll_Context ctx, notifInfo *ni, char **message);
-int edg_wll_ConfigurationToText(edg_wll_Context ctx, char **message);
+int edg_wll_ConfigurationToText(edg_wll_Context ctx, int admin, char **message);
 char *edg_wll_ErrorToText(edg_wll_Context,int);
 
 #endif /* GLITE_LB_TEXT */