/* * Called when the LFS module is activated. * Need to initialize APR ourselves */ int lfs_activate(void) { globus_extension_registry_add( GLOBUS_GFS_DSI_REGISTRY, "lfs", GlobusExtensionMyModule(globus_gridftp_server_lfs), &globus_l_gfs_lfs_dsi_iface); // See if we're configured to write to statsd char * local_host = globus_malloc(256); if (local_host) { memset(local_host, 0, 256); if (gethostname(local_host, 255)) { strcpy(local_host, "UNKNOWN"); } } char statsd_namespace_prefix [] = "lfs.gridftp."; char * statsd_namespace = globus_malloc(strlen(statsd_namespace_prefix)+ strlen(local_host)+1); strcpy(statsd_namespace, statsd_namespace_prefix); char * source = local_host; char * dest; for (dest = statsd_namespace + strlen(statsd_namespace_prefix); *source != '\0'; ++source, ++dest) { if (*source == '.') { *dest = '_'; } else { *dest = *source; } } *dest = '\0'; char * lfs_statsd_link_port = getenv("GRIDFTP_LFS_STATSD_PORT"); char * lfs_statsd_link_host = getenv("GRIDFTP_LFS_STATSD_HOST"); if (lfs_statsd_link_host) { int lfs_statsd_link_port_conv = 8125; if (lfs_statsd_link_port) { lfs_statsd_link_port_conv = atoi(lfs_statsd_link_port); } lfs_statsd_link = statsd_init_with_namespace(lfs_statsd_link_host, lfs_statsd_link_port_conv, statsd_namespace); globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "Sending log data to statsd %s:%i, namespace %s\n", lfs_statsd_link_host, lfs_statsd_link_port_conv, statsd_namespace); } else { globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "Not logging to statsd. Set $GRIDFTP_LFS_STATSD_HOST to enable\n"); lfs_statsd_link = NULL; } globus_free(statsd_namespace); globus_gfs_log_message(GLOBUS_GFS_LOG_INFO, "LFS DSI activated.\n"); STATSD_COUNT("activate",1); if (local_host) globus_free(local_host); return 0; }
static void osg_extensions_init(globus_gfs_operation_t op, globus_gfs_session_info_t * session) { GlobusGFSName(osg_extensions_init); globus_result_t result = globus_gridftp_server_add_command(op, "SITE USAGE", GLOBUS_GFS_OSG_CMD_SITE_USAGE, 3, 5, "SITE USAGE <sp> [TOKEN <sp> $name] <sp> $location: Get usage information for a location.", GLOBUS_FALSE, GFS_ACL_ACTION_LOOKUP); if (result != GLOBUS_SUCCESS) { result = GlobusGFSErrorWrapFailed("Failed to add custom 'SITE USAGE' command", result); globus_gridftp_server_finished_session_start(op, result, NULL, NULL, NULL); return; } #ifdef VOMS_FOUND struct vomsdata *vdata = VOMS_Init(NULL, NULL); if (vdata) { int error; if (!VOMS_RetrieveFromCred(session->del_cred, RECURSE_CHAIN, vdata, &error)) { globus_gfs_log_message(GLOBUS_GFS_LOG_TRANSFER, "No VOMS info in credential.\n"); } else { struct voms *vext; int idx; for (idx = 0; vdata->data[idx] != NULL; idx++) { char msg[1024]; char *pos = msg; int char_remaining = 1022; vext = vdata->data[idx]; int this_round; if ((char_remaining > 0) && vext->voname) { this_round = snprintf(pos, char_remaining, "VO %s ", vext->voname); pos += this_round; char_remaining -= this_round; } char *fqan; int count = 0; int idx2 = 0; for (idx2 = 0; vext->fqan[idx2] != NULL; idx2++) { fqan = vext->fqan[idx2]; if (char_remaining > 0) { count ++; this_round = snprintf(pos, char_remaining, "%s,", fqan); pos += this_round; char_remaining -= this_round; } } if (count && char_remaining >= 0) {pos--;} if (char_remaining >= 0) { *pos = '\n'; *(pos+1) = '\0'; } else { msg[1023] = '\0'; msg[1022] = '\n'; } globus_gfs_log_message(GLOBUS_GFS_LOG_TRANSFER, msg); } } VOMS_Destroy(vdata); } #endif // VOMS_FOUND original_init_function(op, session); }