Ejemplo n.º 1
0
bool_t
svcauth_gss_set_svc_name(gss_name_t name)
{
	OM_uint32	maj_stat, min_stat;

	log_debug("in svcauth_gss_set_svc_name()");

	if (_svcauth_gss_name != NULL) {
		maj_stat = gss_release_name(&min_stat, &_svcauth_gss_name);

		if (maj_stat != GSS_S_COMPLETE) {
			log_status("gss_release_name", maj_stat, min_stat);
			return (FALSE);
		}
		_svcauth_gss_name = NULL;
	}
	maj_stat = gss_duplicate_name(&min_stat, name, &_svcauth_gss_name);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_duplicate_name", maj_stat, min_stat);
		return (FALSE);
	}

	return (TRUE);
}
Ejemplo n.º 2
0
static void log_service_name(gss_ctx_id_t context)
{
    OM_uint32 major_status = 0, minor_status = 0;
    gss_name_t service_name;
    gss_buffer_desc service_name_buffer;

    major_status = gss_inquire_context(&minor_status,
                                       context,
                                       NULL,
                                       &service_name,
                                       NULL,
                                       NULL,
                                       NULL,
                                       NULL,
                                       NULL);
    if (major_status != GSS_S_COMPLETE) {
        log_status("gss_inquire_context", major_status, minor_status);
        return;
    }

    major_status = gss_display_name(&minor_status,
                                    service_name,
                                    &service_name_buffer,
                                    NULL);
    if (major_status == GSS_S_COMPLETE) {
        LOG_LOGINCONT(log_debug,
                      "service principal is `%s'",
                      service_name_buffer.value);

        gss_release_buffer(&minor_status, &service_name_buffer);
    } else
        log_status("gss_display_name", major_status, minor_status);

    gss_release_name(&minor_status, &service_name);
}
Ejemplo n.º 3
0
///
/// Sets the minimum SSL protocol version given a version string
///
/// If None, no change will be made to the SSL context.  If version string is invalid or unsupported
/// in this build (see SSL_PROTOCOLS), an error is logged to offer guidance on fixing the problem.
///
/// @param[in,out] ssl_ctx      SSL context
/// @param[in]     min_version  Name of minimum required SSL protocol version, or "None"
/// @returns       1 if successful, otherwise 0
///
int
set_ssl_ctx_min_version(SSL_CTX * ssl_ctx, const char *min_version)
{
	int min_version_num = ssl_protocol_from_string(min_version);
	switch (min_version_num) {
	case 0:
		// None specified, no changes needed
		return 1;
	case -1:
		log_status("ERROR: Unknown ssl_min_protocol_version '%s'.  Specify one of: %s",
		           min_version, SSL_KNOWN_PROTOCOLS);
		fprintf(stderr,
		        "ERROR: Unknown ssl_min_protocol_version '%s'.  Specify one of: %s\n",
		        min_version, SSL_KNOWN_PROTOCOLS);
		return 0;
	case SSL_UNSUPPORTED_PROTOCOL:
		log_status("ERROR: ssl_min_protocol_version '%s' not supported by the SSL library "
		           "in this build.  Specify one of: %s",
		           min_version, SSL_KNOWN_PROTOCOLS);
		fprintf(stderr,
		        "ERROR: ssl_min_protocol_version '%s' not supported by the SSL library "
		        "in this build.  Specify one of: %s\n",
		        min_version, SSL_KNOWN_PROTOCOLS);
		return 0;
	default:
		log_status("Requiring SSL protocol version '%s' or higher for encrypted connections",
		           min_version);
#if defined(SSL_CTX_set_min_proto_version)
		// Added in OpenSSL >= 1.1.0
		// See: https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html
		return SSL_CTX_set_min_proto_version(ssl_ctx, min_version_num);
#elif defined(SSL_CTX_set_options)
		// Easy way not implemented, manually turn off protocols to match the minimum version.
		// FB_*_VERSION macros are guaranteed to be defined regardless of OpenSSL version,
		// either as a real version or SSL_UNSUPPORTED_PROTOCOL, which will never be greater
		// than min_version_num.
		if (min_version_num > FB_SSL3_VERSION)
			SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_SSLv3);
		if (min_version_num > FB_TLS1_VERSION)
			SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_TLSv1);
		if (min_version_num > FB_TLS1_1_VERSION)
			SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_TLSv1_1);
		if (min_version_num > FB_TLS1_2_VERSION)
			SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_TLSv1_2);
		// No need to add newer versions as OpenSSL >= 1.1.0 supports the much-nicer
		// SSL_CTX_set_min_proto_version - see above
		return 1;
#else
		// A minimum version was requested, but the SSL library doesn't support specifying that.
		// Error out with some advice.
		log_status("ERROR: specifying ssl_min_protocol_version is not supported by the SSL "
		           "library used in this build.  Set to 'None', or maybe use OpenSSL?");
		fprintf(stderr,
		        "specifying ssl_min_protocol_version is not supported by the SSL "
		        "library used in this build.  Set to 'None', or maybe use OpenSSL?\n");
		return 0;
#endif
	}
}
Ejemplo n.º 4
0
void
dump_database(void)
{
	epoch++;

	log_status("DUMPING: %s.#%d#", dumpfile, epoch);
	dump_database_internal();
	log_status("DUMPING: %s.#%d# (done)", dumpfile, epoch);
}
Ejemplo n.º 5
0
void
do_shutdown(dbref player)
{
	if (Wizard(player)) {
		log_status("SHUTDOWN: by %s", unparse_object(player, player));
		shutdown_flag = 1;
		restart_flag = 0;
	} else {
		notify(player, "Your delusions of grandeur have been duly noted.");
		log_status("ILLEGAL SHUTDOWN: tried by %s", unparse_object(player, player));
	}
}
Ejemplo n.º 6
0
void
do_restart(dbref player)
{
	if (Wizard(player) && Typeof(player) == TYPE_PLAYER) {
		log_status("SHUTDOWN & RESTART: by %s", unparse_object(player, player));
		shutdown_flag = 1;
		restart_flag = 1;
	} else {
		notify(player, "Your delusions of grandeur have been duly noted.");
		log_status("ILLEGAL RESTART: tried by %s", unparse_object(player, player));
	}
}
Ejemplo n.º 7
0
int
init_game(const char *infile, const char *outfile)
{
	FILE *f;

	if ((f = fopen(MACRO_FILE, "rb")) == NULL)
		log_status("INIT: Macro storage file %s is tweaked.", MACRO_FILE);
	else {
		macroload(f);
		fclose(f);
	}

	in_filename = (char *) string_dup(infile);
	if ((input_file = fopen(infile, "rb")) == NULL)
		return -1;

#ifdef DELTADUMPS
	if ((delta_outfile = fopen(DELTAFILE_NAME, "wb")) == NULL)
		return -1;

	if ((delta_infile = fopen(DELTAFILE_NAME, "rb")) == NULL)
		return -1;
#endif

	db_free();
	init_primitives();			/* init muf compiler */
	mesg_init();				/* init mpi interpreter */
	SRANDOM(getpid());			/* init random number generator */
	tune_load_parmsfile(NOTHING);	/* load @tune parms from file */

	/* ok, read the db in */
	log_status("LOADING: %s", infile);
	fprintf(stderr, "LOADING: %s\n", infile);
	if (db_read(input_file) < 0)
		return -1;
	log_status("LOADING: %s (done)", infile);
	fprintf(stderr, "LOADING: %s (done)\n", infile);

	/* set up dumper */
	if (dumpfile)
		free((void *) dumpfile);
	dumpfile = alloc_string(outfile);

	if (!db_conversion_flag) {
		/* initialize the _sys/startuptime property */
		add_property((dbref) 0, "_sys/startuptime", NULL, (int) time((time_t *) NULL));
		add_property((dbref) 0, "_sys/maxpennies", NULL, tp_max_pennies);
		add_property((dbref) 0, "_sys/dumpinterval", NULL, tp_dump_interval);
		add_property((dbref) 0, "_sys/max_connects", NULL, 0);
	}

	return 0;
}
Ejemplo n.º 8
0
/*-------------*/
static int accept_sec_context (gss_ctx_id_t *context, gss_cred_id_t server_creds,
                               gss_buffer_desc *ticket_buffer, gss_name_t *client_name,
                               gss_buffer_desc *authenticator_buff)
{
    OM_uint32 major_status = 0, minor_status = 0, ret_flags;

    /* Initialize autheticator buffer. */
    authenticator_buff->length = 0;
    authenticator_buff->value = NULL;

    LOG(log_debug, logtype_uams, "accept_context: accepting context (ticketlen: %u)",
        ticket_buffer->length);

    /*
     * Try to accept the secondary context using the tocken in ticket_buffer.
     * We don't care about the mechanisms used, nor for the time.
     * We don't act as a proxy either.
     */
    major_status = gss_accept_sec_context( &minor_status, context,
                                           server_creds, ticket_buffer, GSS_C_NO_CHANNEL_BINDINGS,
                                           client_name, NULL, authenticator_buff,
                                           &ret_flags, NULL, NULL );

    if (major_status != GSS_S_COMPLETE) {
        log_status( "accept_sec_context", major_status, minor_status );
        return 1;
    }
    log_ctx_flags( ret_flags );
    return 0;
}
Ejemplo n.º 9
0
/*-------------*/
static int acquire_credentials (gss_name_t *server_name, gss_cred_id_t *server_creds)
{
    OM_uint32 major_status = 0, minor_status = 0;
    char *envp;

    if ((envp = getenv("KRB5_KTNAME")))
        LOG(log_debug, logtype_uams,
            "acquire credentials: acquiring credentials (uid = %d, keytab = %s)",
            (int)geteuid(), envp);
    else
        LOG(log_debug, logtype_uams,
            "acquire credentials: acquiring credentials (uid = %d) - $KRB5_KTNAME not found in env",
            (int)geteuid());
        
    /*
     * Acquire credentials usable for accepting context negotiations.
     * Credentials are for server_name, have an indefinite lifetime,
     * have no specific mechanisms, are to be used for accepting context
     * negotiations and are to be placed in server_creds.
     * We don't care about the mechanisms or about the time for which they are valid.
     */
    major_status = gss_acquire_cred( &minor_status, *server_name,
                                     GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_ACCEPT,
                                     server_creds, NULL, NULL );

    if (major_status != GSS_S_COMPLETE) {
        log_status( "acquire_cred", major_status, minor_status );
        return 1;
    }

    return 0;
}
Ejemplo n.º 10
0
void platform_set_boot_args()
{
#if CFG_BOOT_ARGUMENT
    boot_arg_t *bootarg = (boot_arg_t*)BOOT_ARGUMENT_ADDR;

    bootarg->magic = BOOT_ARGUMENT_MAGIC;
    bootarg->mode  = g_boot_mode;
    bootarg->e_flag = sp_check_platform();
    bootarg->log_port = CFG_UART_LOG;
    bootarg->log_baudrate = CFG_LOG_BAUDRATE;
    bootarg->log_enable = (u8)log_status();
    bootarg->dram_rank_num = get_dram_rank_nr();
    get_dram_rank_size(bootarg->dram_rank_size);
    bootarg->boot_reason = g_boot_reason;
    bootarg->meta_com_type = (u32)g_meta_com_type;
    bootarg->meta_com_id = g_meta_com_id;
    bootarg->boot_time = get_timer(g_boot_time);

    bootarg->da_info.addr = 0;
    bootarg->da_info.arg1 = 0;
    bootarg->da_info.arg2 = 0;

    print("\n%s boot reason: %d\n", MOD, g_boot_reason);
    print("%s boot mode: %d\n", MOD, g_boot_mode);
    print("%s META COM%d: %d\n", MOD, bootarg->meta_com_id, bootarg->meta_com_type);
    print("%s <0x%x>: 0x%x\n", MOD, &bootarg->e_flag, bootarg->e_flag);
    print("%s boot time: %dms\n", MOD, bootarg->boot_time);
#endif

}
Ejemplo n.º 11
0
/* dbref references on the callstack */
static int
has_refs(dbref program, timequeue ptr)
{
	int loop;

	if (!ptr) {
		log_status("WARNING: has_refs(): NULL ptr passed !  Ignored.");
		return 0;
	}

	if (ptr->typ != TQ_MUF_TYP || !(ptr->fr) ||
		Typeof(program) != TYPE_PROGRAM || !(PROGRAM_INSTANCES(program)))
		return 0;

	for (loop = 1; loop < ptr->fr->caller.top; loop++) {
		if (ptr->fr->caller.st[loop] == program)
			return 1;
	}

	for (loop = 0; loop < ptr->fr->argument.top; loop++) {
		if (ptr->fr->argument.st[loop].type == PROG_ADD &&
			ptr->fr->argument.st[loop].data.addr->progref == program)
			return 1;
	}

	return 0;
}
Ejemplo n.º 12
0
void
dump_deltas(void)
{
    if (time_for_monolithic()) {
	fork_and_dump();
	deltas_count = 0;
	return;
    }

    epoch++;
    log_status("DELT: %s.#%d#\n", dumpfile, epoch);

    if (tp_deltadump_warning)
	wall_and_flush(tp_dumpdeltas_mesg);

    db_write_deltas(delta_outfile);

    if (tp_deltadump_warning)
	wall_and_flush(tp_dumpdone_mesg);
#ifdef DISKBASE
    propcache_hits = 0L;
    propcache_misses = 1L;
#endif
    host_save();
}
Ejemplo n.º 13
0
int
unset_source(dbref player, dbref loc, dbref action)
{

    dbref oldsrc;

    if ((oldsrc = DBFETCH(action)->location) == NOTHING) {
        /* old-style, sourceless exit */
        if (!member(action, DBFETCH(loc)->exits)) {
            return 0;
        }
        DBSTORE(DBFETCH(player)->location, exits,
                remove_first(DBFETCH(DBFETCH(player)->location)->exits,
                             action));
    } else {
        switch (Typeof(oldsrc)) {
            case TYPE_PLAYER:
            case TYPE_ROOM:
            case TYPE_THING:
                DBSTORE(oldsrc, exits,
                        remove_first(DBFETCH(oldsrc)->exits, action));
                break;
            default:
                log_status("PANIC: source of action #%d was type: %d.\n",
                           action, Typeof(oldsrc));
                return 0;
                /* NOTREACHED */
                break;
        }
    }
    return 1;
}
Ejemplo n.º 14
0
static bool_t
svcauth_gss_import_name(char *service)
{
	gss_name_t	name;
	gss_buffer_desc	namebuf;
	OM_uint32	maj_stat, min_stat;

	log_debug("in svcauth_gss_import_name()");

	namebuf.value = service;
	namebuf.length = strlen(service);

	maj_stat = gss_import_name(&min_stat, &namebuf,
				   (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, &name);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_import_name", maj_stat, min_stat);
		return (FALSE);
	}
	if (svcauth_gss_set_svc_name(name) != TRUE) {
		gss_release_name(&min_stat, &name);
		return (FALSE);
	}
	return (TRUE);
}
Ejemplo n.º 15
0
AUTH *
authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
{
	AUTH			*auth;
	OM_uint32		 maj_stat = 0, min_stat = 0;
	gss_buffer_desc		 sname;
	gss_name_t		 name;

	log_debug("in authgss_create_default()");
	

	sname.value = service;
	sname.length = strlen(service);
	
	maj_stat = gss_import_name(&min_stat, &sname,
		(gss_OID)gss_nt_service_name,
		&name);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_import_name", maj_stat, min_stat);
		rpc_createerr.cf_stat = RPC_AUTHERROR;
		return (NULL);
	}

	auth = authgss_create(clnt, name, sec);
	
 	if (name != GSS_C_NO_NAME)
 		gss_release_name(&min_stat, &name);
	
	log_debug("authgss_create_default returning auth 0x%08x", auth);
	return (auth);
}
Ejemplo n.º 16
0
static void process_signal(int sig){
	int r = 0;

	switch(sig) {
	case SIGINT:
	case SIGQUIT:
	case SIGTERM:
	case SIGHUP:
		r += log_status();
		break;
	case SIGUSR1:
	case SIGUSR2:
		log_debug();
		/*local_debug();*/
		cluster_debug();
		return;
	default:
		LOG_PRINT("Unknown signal received... ignoring");
		return;
	}

	if (!r) {
		LOG_DBG("No current cluster logs... safe to exit.");
		cleanup_all();
		exit(EXIT_SUCCESS);
	}

	LOG_ERROR("Cluster logs exist.  Refusing to exit.");
}
Ejemplo n.º 17
0
/*
 * Gracefully shut the server down.
 */
void
sig_shutdown(int i)
{
    log_status("SHUTDOWN: via SIGNAL");
    shutdown_flag = 1;
    restart_flag = 0;
}
Ejemplo n.º 18
0
AUTH *
authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
{
	AUTH			*auth;
	OM_uint32		 maj_stat = 0, min_stat = 0;
	gss_buffer_desc		 sname;
	gss_name_t		 name = GSS_C_NO_NAME;

	log_debug("in authgss_create_default()");


	sname.value = service;
	sname.length = strlen(service);

	maj_stat = gss_import_name(&min_stat, &sname,
		(gss_OID)GSS_C_NT_HOSTBASED_SERVICE,
		&name);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_import_name", maj_stat, min_stat);
		rpc_createerr.cf_stat = RPC_AUTHERROR;
		return (NULL);
	}

	auth = authgss_create(clnt, name, sec);

	if (name != GSS_C_NO_NAME) {
#ifdef DEBUG
	fprintf(stderr, "authgss_create_default: freeing name %p\n", name);
#endif
 		gss_release_name(&min_stat, &name);
	}

	return (auth);
}
Ejemplo n.º 19
0
// ----------------------------------------------------------------------------
//
void DMXStudio::showIpAddress()
{
    char        cpuName [128] ;
    DWORD       dwSize = sizeof(cpuName);
    WSADATA     wsaData;
    int         iResult;

    if ( GetComputerName( cpuName, &dwSize) == 0 )
        return;

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult == 0) {
        PADDRINFOA  pAddrInfo;
        iResult = getaddrinfo( cpuName, "http", NULL, &pAddrInfo );

        if ( iResult == 0 ) {
            for ( PADDRINFOA pAddr=pAddrInfo; pAddr != NULL; pAddr=pAddr->ai_next ) {
                if ( AF_INET == pAddr->ai_family ) {
                    struct sockaddr_in  *sockaddr_ipv4;
                    sockaddr_ipv4 = (struct sockaddr_in *) pAddr->ai_addr;
                    log_status( "%s IP address %s", cpuName, inet_ntoa(sockaddr_ipv4->sin_addr) );
                }
            }

            freeaddrinfo( pAddrInfo );
        }
    }

    WSACleanup();
}
Ejemplo n.º 20
0
void
log_program_text(struct line *first, dbref player, dbref i)
{
        FILE *f;
        char fname[BUFFER_LEN];
        time_t lt = time(NULL);

        strcpyn(fname, sizeof(fname), PROGRAM_LOG);
        f = fopen(fname, "ab");
        if (!f) {
                log_status("Couldn't open file %s!", fname);
                return;
        }

        fputs("#######################################", f);
        fputs("#######################################\n", f);
        fprintf(f, "PROGRAM %s, SAVED AT %s BY %s(%d)\n",
                        unparse_object(player, i), ctime(&lt), NAME(player), player);
        fputs("#######################################", f);
        fputs("#######################################\n\n", f);

        while (first) {
                if (!first->this_line)
                        continue;
                fputs(first->this_line, f);
                fputc('\n', f);
                first = first->next;
        }
        fputs("\n\n\n", f);
        fclose(f);
}
Ejemplo n.º 21
0
void
write_program(struct line *first, dbref i)
{
        FILE *f;
        char fname[BUFFER_LEN];

        snprintf(fname, sizeof(fname), "muf/%d.m", (int) i);
        f = fopen(fname, "wb");
        if (!f) {
                log_status("Couldn't open file %s!", fname);
                return;
        }
        while (first) {
                if (!first->this_line)
                        continue;
                if (fputs(first->this_line, f) == EOF) {
                        abort();
                }
                if (fputc('\n', f) == EOF) {
                        abort();
                }
                first = first->next;
        }
        fclose(f);
}
Ejemplo n.º 22
0
bool_t
svcauth_gss_nextverf(struct svc_req *rqst, u_int num)
{
	struct svc_rpc_gss_data	*gd;
	gss_buffer_desc		 signbuf, checksum;
	OM_uint32		 maj_stat, min_stat;

	log_debug("in svcauth_gss_nextverf()");

	if (rqst->rq_xprt->xp_auth == NULL)
		return (FALSE);

	gd = SVCAUTH_PRIVATE(rqst->rq_xprt->xp_auth);

	signbuf.value = &num;
	signbuf.length = sizeof(num);

	maj_stat = gss_get_mic(&min_stat, gd->ctx, gd->sec.qop,
			       &signbuf, &checksum);

	if (maj_stat != GSS_S_COMPLETE) {
		log_status("gss_get_mic", maj_stat, min_stat);
		return (FALSE);
	}
	rqst->rq_xprt->xp_verf.oa_flavor = RPCSEC_GSS;
	rqst->rq_xprt->xp_verf.oa_base = (caddr_t)checksum.value;
	rqst->rq_xprt->xp_verf.oa_length = (u_int)checksum.length;

	return (TRUE);
}
Ejemplo n.º 23
0
void 
do_restart(dbref player, const char *msg)
{
    if (Arch(player)) {
      if( *msg == '\0' || strcmp(msg, tp_muckname))
      {
	notify(player, "Usage: @restart muckname" );
	return;
      }
	log_status("REST: by %s\n", unparse_object(player, player));
	shutdown_flag = 1;
	restart_flag = 1;
    } else {
	anotify_fmt(player, CFAIL "%s", tp_noperm_mesg);
	log_status("SHAM: Restart by %s\n", unparse_object(player, player));
    }
}
Ejemplo n.º 24
0
/*
 * Gracefully shut the server down.
 */
RETSIGTYPE sig_shutdown(int i)
{
	log_status("SHUTDOWN: via SIGNAL");
	shutdown_flag = 1;
	restart_flag = 0;
#if !defined(SYSV) && !defined(_POSIX_VERSION) && !defined(ULTRIX)
	return 0;
#endif
}
Ejemplo n.º 25
0
/**
 * Send status to wizards and log file
 *
 * @private
 * @param s the message to send
 */
static void
wall_status(char *s)
{
    char buf[BUFFER_LEN];

    log_status(s);
    snprintf(buf, sizeof(buf), "## %s", s);
    wall_wizards(buf);
}
Ejemplo n.º 26
0
void CommanderFromFile::Main() {
  sleep(30);
  if (command_ == NONE) {
    FILE *F;
    char buf[CR_BUFF_SIZE];

    commander_mutex_.Lock();
    F = fopen(file_name_.c_str(), "rw");
    if(F) {
      if(fgets(buf, CR_BUFF_SIZE - 1, F)) {
        char* eol = strchr(buf, '\n');
        if (eol != NULL) *eol = '\0';

        if(strstr(buf, CL_PAUSE)) {
          log_status("Setting command to PAUSE.");
          command_ = PAUSE;
          algo_.SetNumThreads(0);
          SetCommand();
        } else if(strstr(buf, CL_RESUME)) {
          log_status("Setting command to RESUME.");
          command_ = RESUME;
          algo_.ResumeThreads();
          SetCommand();
        } else if (strstr(buf, CL_SET_NUM_THREADS)) {
          log_status("Setting command to SET_NUM_THREADS.");
          command_ = SET_NUM_THREADS;
          string tmp = strstr(buf, CL_SET_NUM_THREADS);
          if(tmp.length()>=sizeof(CL_SET_NUM_THREADS)) {
            attributes_ = tmp.substr(sizeof(CL_SET_NUM_THREADS));
          } else {
            attributes_ = "";
          }
          algo_.SetNumThreads(atoi(attributes_.c_str()));
          SetCommand();
        } else {
          log_warn("unknown command.");
        }
      }
      fclose(F);
      remove(file_name_.c_str());
    }
    commander_mutex_.Unlock();
  }
}
Ejemplo n.º 27
0
/* clean up lists from watchpid and sends event */
void
watchpid_process(struct frame *fr)
{
	if (!fr) {
		log_status("WARNING: watchpid_process(): NULL frame passed !  Ignored.");
		return;
	}

	struct frame *frame;
	struct mufwatchpidlist *cur;
	struct mufwatchpidlist **curptr;
	struct inst temp1;
	temp1.type = PROG_INTEGER;
	temp1.data.number = fr->pid;

	while (fr->waitees) {
		cur = fr->waitees;
		fr->waitees = cur->next;

		frame = timequeue_pid_frame (cur->pid);
		free (cur);
		if (frame) {
			for (curptr = &frame->waiters; *curptr; curptr = &(*curptr)->next) {
				if ((*curptr)->pid == fr->pid) {
					cur = *curptr;
					*curptr = (*curptr)->next;
					free (cur);
					break;
				}
			}
		}
	}

	while (fr->waiters) {
		char buf[64];

		snprintf (buf, sizeof(buf), "PROC.EXIT.%d", fr->pid);

		cur = fr->waiters;
		fr->waiters = cur->next;

		frame = timequeue_pid_frame (cur->pid);
		free (cur);
		if (frame) {
			muf_event_add(frame, buf, &temp1, 0);
			for (curptr = &frame->waitees; *curptr; curptr = &(*curptr)->next) {
				if ((*curptr)->pid == fr->pid) {
					cur = *curptr;
					*curptr = (*curptr)->next;
					free (cur);
					break;
				}
			}
		}
	}
}
Ejemplo n.º 28
0
static int get_client_username(char *username,
                               int ulen,
                               gss_name_t *client_name)
{
    OM_uint32 major_status = 0, minor_status = 0;
    gss_buffer_desc client_name_buffer;
    char *p;
    int ret = 0;

    /*
     * To extract the unix username, use gss_display_name on client_name.
     * We do rely on gss_display_name returning a zero terminated string.
     * The username returned contains the realm and possibly an instance.
     * We only want the username for afpd, so we have to strip those from
     * the username before copying it to afpd's buffer.
     */

    major_status = gss_display_name(&minor_status,
                                    *client_name,
                                    &client_name_buffer,
                                    NULL);
    if (major_status != GSS_S_COMPLETE) {
        log_status("gss_display_name", major_status, minor_status);
        return 1;
    }

    LOG_LOGINCONT(log_debug,
                  "user principal is `%s'",
                  client_name_buffer.value);

    /* chop off realm */
    p = strchr(client_name_buffer.value, '@');
    if (p)
        *p = 0;
    /* FIXME: chop off instance? */
    p = strchr(client_name_buffer.value, '/');
    if (p)
        *p = 0;

    /* check if this username fits into afpd's username buffer */
    size_t cnblen = strlen(client_name_buffer.value);
    if (cnblen >= ulen) {
        /* The username is too long for afpd's buffer, bail out */
        LOG_LOGINCONT(log_info,
                      "username `%s' too long (%d)",
                      client_name_buffer.value, cnblen);
        ret = 1;
    } else {
        /* copy stripped username to afpd's buffer */
        strlcpy(username, client_name_buffer.value, ulen);
    }

    gss_release_buffer(&minor_status, &client_name_buffer);

    return ret;
}
Ejemplo n.º 29
0
// ----------------------------------------------------------------------------
//
bool DMXStudio::handleEvent( const Event& event )
{
    if ( isDebug() ) {
        CString output( "EVENT " );
        output.Append( (LPCSTR)EventBus::eventAsString( event ) );
        log_status( output );
    }

    if ( event.m_source == ES_VENUE ) {
        if ( event.m_action == EA_START )
            log_status( "Venue started [%s]", event.m_text );
        else if ( event.m_action == EA_STOP )
            log_status( "Venue stopped [%s]", event.m_text );
        else if ( event.m_action == EA_ERROR )
            log( StudioException( event.m_text ) );
    }

    return false;
}
Ejemplo n.º 30
0
/*
 * Named "fork_and_dump()" mostly for historical reasons...
 */
void fork_and_dump(void)
{
    epoch++;

    last_monolithic_time = time(NULL);
    log_status("DUMP: %s.#%d#\n", dumpfile, epoch);

    dump_database_internal();
    host_save();
}