Exemple #1
0
t_list			*get_link(char *d_name, struct stat *f_stat, char *path)
{
	t_ls			content;
	t_list			*lst;

	if (!f_stat || !d_name)
		return (NULL);
	errno = 0;
	content.nb_hlink = (int)(f_stat->st_nlink);
	content.size = (int)(f_stat->st_size);
	content.nb_blk = (int)(f_stat->st_blocks);
	time_asm(f_stat, &content);
	if (!(content.name = ft_strdup(d_name))
		|| !(content.u_name = get_uname(f_stat->st_uid))
		|| !(content.g_name = get_gname(f_stat->st_gid))
		|| !(content.rights = get_rights(f_stat, path))
		|| !(content.type = get_type(f_stat)))
		return (NULL);
	content.link = f_readlink(content, path);
	if (!(lst = ft_lstnew(&content, sizeof(content))))
	{
		free_content(&content, content.size);
		return (NULL);
	}
	return (lst);
}
Exemple #2
0
void bar_upd(int sig) {
    static char barstr[750];
    snprintf(barstr, 750, "%%{l}%s %s %s%%{c}%s%%{r}%s %s %s %s\n",
            get_win((sig == -2 ? false : true)),
            get_hname(),
            get_xtitle((sig == -1 ? false : true)),
            get_mpd(),
            get_vol(),
            get_load(),
            get_uname(),
            get_time());
    fputs(barstr, barfp);
    fflush(barfp);
}
Exemple #3
0
static gboolean
update_failcount(xmlNode * event, const char *event_node_uuid, int rc, int target_rc, gboolean do_update)
{
    int interval = 0;

    char *task = NULL;
    char *rsc_id = NULL;
    char *attr_name = NULL;

    const char *value = NULL;
    const char *id = crm_element_value(event, XML_LRM_ATTR_TASK_KEY);
    const char *on_uname = get_uname_from_event(event);
    const char *origin = crm_element_value(event, XML_ATTR_ORIGIN);

    if (rc == 99) {
        /* this is an internal code for "we're busy, try again" */
        return FALSE;

    } else if (rc == target_rc) {
        return FALSE;
    }

    if (safe_str_eq(origin, "build_active_RAs")) {
        crm_debug("No update for %s (rc=%d) on %s: Old failure from lrm status refresh",
                  id, rc, on_uname);
        return FALSE;
    }

    if (failed_stop_offset == NULL) {
        failed_stop_offset = strdup(INFINITY_S);
    }

    if (failed_start_offset == NULL) {
        failed_start_offset = strdup(INFINITY_S);
    }

    if (on_uname == NULL) {
        /* uname not in event, check cache */
        on_uname = get_uname(event_node_uuid);
        CRM_CHECK(on_uname != NULL, return TRUE);
    }
Exemple #4
0
/* ========================================================================= */
struct per_user *collect_per_user(struct per_user *ulist, ipcinfo_shm_t *shmbuf)
{
   struct per_user *the_user;

   if ( NULL == shmbuf )
      return(ulist);

   if ( NULL == (the_user = find_user(ulist, shmbuf->shm_perm.uid)) )
   {
      if (NULL == (the_user = (struct per_user *)malloc(sizeof(struct per_user))))
      {
         /* This gives bad results - but is highly unlikely */
         return(ulist);
      }

      the_user->uid = shmbuf->shm_perm.uid;
      the_user->uname = get_uname(shmbuf->shm_perm.uid);
      the_user->total_size = shmbuf->shm_segsz;
      the_user->count = 1;
      if ( shmbuf->shm_nattch = 0 )
         the_user->no_attach_count = 1;
      else
         the_user->no_attach_count = 0;
      the_user->next = ulist;

      return(the_user);
   }
   else
   {
      the_user->total_size += shmbuf->shm_segsz;
      the_user->count++;
      if ( shmbuf->shm_nattch = 0 )
         the_user->no_attach_count++;
      return(ulist);
   }

   /* unreachable */
   return(NULL);
}
static void
set_system_information(Enna_Buffer *b)
{
    if (!b)
        return;

    enna_buffer_append(b, "<c>");
    enna_buffer_append(b, _("System information"));
    enna_buffer_append(b, "</c><br><br>");
    get_distribution(b);
    get_uname(b);
    get_cpuinfos(b);
    get_loadavg(b);
    get_ram_usage(b);
#ifdef BUILD_LIBSVDRP
    get_vdr(b);
#endif /* BUILD_LIBSVDRP */
#ifdef BUILD_LIBXRANDR
    get_resolution(b);
#endif /* BUILD_LIBXRANDR */
    get_network(b);
    get_default_gw(b);
}
Exemple #6
0
int main(int argc, char **argv) {
	int only_root, auth = 0, chpid;
	uid_t uid;
	userinfo_t *as, root, user;

	oldvt = oldsysrq = vt.nr = vt.fd = -1;
	vt.ios = NULL;
	root.name = "root";

	parse_options(argc, argv);

	if (geteuid() != 0) {
		fprintf(stderr, "physlock: must be root!\n");
		return 1;
	}

	setup_signal(SIGTERM, sa_handler_exit);
	setup_signal(SIGQUIT, sa_handler_exit);
	setup_signal(SIGHUP, SIG_IGN);
	setup_signal(SIGINT, SIG_IGN);
	setup_signal(SIGUSR1, SIG_IGN);
	setup_signal(SIGUSR2, SIG_IGN);

	vt_init();
	get_current_vt(&oldvt);

	if (options->only_lock) {
		lock_vt_switch();
		vt_destroy();
		return 0;
	} else if (options->only_unlock) {
		unlock_vt_switch();
		vt_destroy();
		return 0;
	}

	if (options->disable_sysrq) {
		oldsysrq = get_sysrq_state(SYSRQ_PATH);
		if (oldsysrq > 0)
			set_sysrq_state(SYSRQ_PATH, 0);
	}

	if (options->user) {
		user.name = options->user;
	} else {
		uid = getuid();
		get_uname(&user, uid);
	}

	get_pwhash(&root);
	only_root = strcmp(user.name, root.name) == 0;
	if (!only_root) {
		get_pwhash(&user);
		authenticate(&user, ""); /* test authentication */
	}

	acquire_new_vt(&vt);
	lock_vt_switch();
	secure_vt(&vt);

	if (options->detach) {
		chpid = fork();
		if (chpid < 0)
			die("could not spawn background process: %s", strerror(errno));
		else if (chpid > 0)
			return 0;
		else
			setsid();
	}

	if (options->cmd)
		handle_cmd(1);

	while (!auth) {
		as = &root;
		flush_vt(&vt);
		if (!only_root) {
			tty_echo_on(&vt);
			while (1) {
				prompt(vt.ios, "\nUnlock as [%s/%s]: ", user.name, root.name);
				if (!*buf || !strcmp(buf, user.name)) {
					as = &user;
					break;
				} else if (!strcmp(buf, root.name)) {
					break;
				}
			}
			tty_echo_off(&vt);
		} else {
			prompt(vt.ios, "\nPress [Enter] to unlock.\n");
		}

		prompt(vt.ios, "%s's password: "******"\nAuthentication failed\n");
			sleep(AUTH_FAIL_TIMEOUT);
		}
	}

	if (options->crypt)
		add_passphrase(buf, options->fnek, vt.ios);

	if (options->cmd)
		handle_cmd(0);

	sleep(1);

	cleanup();

	return 0;
}
Exemple #7
0
void CrashDialog::show_details(void) {
	if(trace_log->visible()) {
		trace_log->hide();
		save_as->hide();
		details->label(_("@> Show details"));
		size(DIALOG_W, DIALOG_H);
	} else {
		trace_log->show();
		save_as->show();
		details->label(_("@< Hide details"));
		size(DIALOG_W_EXPANDED, DIALOG_H_EXPANDED);

		if(!details_shown) {
			trace_buff->remove(0, trace_buff->length());

			edelib::String address = _("\nPlease report this at: ");
			if(bugaddress)
				address += bugaddress;
			else
				address += "http://bugs.equinox-project.org";

			trace_buff->append(address.c_str());
			trace_buff->append("\n\n");

			trace_buff->append("---------- short summary ----------\n"); 
			trace_buff->append("\nEDE version: " PACKAGE_VERSION);
			trace_buff->append("\nSystem info: ");
			trace_buff->append(get_uname().c_str());

			trace_buff->append("\nProgram name: ");
			if(appname)
				trace_buff->append(appname);
			else
				trace_buff->append("(unknown)");

			trace_buff->append("\nExecutable path: ");
			if(apppath)
				trace_buff->append(apppath);
			else
				trace_buff->append("(unknown)");

			trace_buff->append("\nRunning PID: ");
			if(pid)
				trace_buff->append(pid);
			else
				trace_buff->append("(unknown)");

			trace_buff->append("\nSignal received: ");
			if(signal_num)
				trace_buff->append(signal_num);
			else
				trace_buff->append("(unknown)");

			/* try backtrace via gdb */
			trace_buff->append("\n\n---------- backtrace ----------\n"); 

			const char* core_file = "core";
			const char* gdb_output = "/tmp/.gdb_output";
			const char* gdb_script = "/tmp/.gdb_script";

			if(!edelib::file_test(core_file, edelib::FILE_TEST_IS_REGULAR)) {
				trace_buff->append("\nUnable to find 'core' file. Backtrace will not be done.");
				details_shown = false;
				return;
			}

			edelib::String gdb_path = edelib::file_path("gdb");
			if(gdb_path.empty()) {
				trace_buff->append("\nUnable to find gdb. Please install it first.");
				/* set to false so next 'Show Details' click can try again with the debugger */
				details_shown = false;
				return;
			}

			/* TODO: these files should be unique per session */
			if(spawn_backtrace(gdb_path.c_str(), cmd.c_str(), core_file, gdb_output, gdb_script) == -1) {
				trace_buff->append("\nUnable to properly execute gdb");
				details_shown = false;
				return;
			}

			trace_buff->append("\n");
			if(trace_buff->appendfile(gdb_output) != 0) {
				trace_buff->append("Unable to read gdb output file");
				details_shown = false;
				return;
			}

			edelib::file_remove(gdb_output);
			edelib::file_remove(gdb_script);
			edelib::file_remove(core_file);

			details_shown = true;
		}
	}
}
Exemple #8
0
static gboolean
update_failcount(xmlNode * event, const char *event_node, int rc, int target_rc, gboolean do_update)
{
    int interval = 0;

    char *task = NULL;
    char *rsc_id = NULL;
    char *attr_name = NULL;

    const char *value = NULL;
    const char *id = crm_element_value(event, XML_LRM_ATTR_TASK_KEY);
    const char *on_uname = get_uname(event_node);

    if (rc == 99) {
        /* this is an internal code for "we're busy, try again" */
        return FALSE;

    } else if (rc == target_rc) {
        return FALSE;
    }

    if (failed_stop_offset == NULL) {
        failed_stop_offset = crm_strdup(INFINITY_S);
    }

    if (failed_start_offset == NULL) {
        failed_start_offset = crm_strdup(INFINITY_S);
    }

    CRM_CHECK(on_uname != NULL, return TRUE);

    CRM_CHECK(parse_op_key(id, &rsc_id, &task, &interval), crm_err("Couldn't parse: %s", ID(event));
              goto bail);
    CRM_CHECK(task != NULL, goto bail);
    CRM_CHECK(rsc_id != NULL, goto bail);

    if (do_update || interval > 0) {
        do_update = TRUE;

    } else if (safe_str_eq(task, CRMD_ACTION_START)) {
        do_update = TRUE;
        value = failed_start_offset;

    } else if (safe_str_eq(task, CRMD_ACTION_STOP)) {
        do_update = TRUE;
        value = failed_stop_offset;

    } else if (safe_str_eq(task, CRMD_ACTION_STOP)) {
        do_update = TRUE;
        value = failed_stop_offset;

    } else if (safe_str_eq(task, CRMD_ACTION_PROMOTE)) {
        do_update = TRUE;

    } else if (safe_str_eq(task, CRMD_ACTION_DEMOTE)) {
        do_update = TRUE;
    }

    if (value == NULL || safe_str_neq(value, INFINITY_S)) {
        value = XML_NVPAIR_ATTR_VALUE "++";
    }

    if (do_update) {
        char *now = crm_itoa(time(NULL));

        crm_warn("Updating failcount for %s on %s after failed %s:"
                 " rc=%d (update=%s, time=%s)", rsc_id, on_uname, task, rc, value, now);

        attr_name = crm_concat("fail-count", rsc_id, '-');
        update_attrd(on_uname, attr_name, value, NULL);
        crm_free(attr_name);

        attr_name = crm_concat("last-failure", rsc_id, '-');
        update_attrd(on_uname, attr_name, now, NULL);
        crm_free(attr_name);

        crm_free(now);
    }

  bail:
    crm_free(rsc_id);
    crm_free(task);
    return TRUE;
}