Ejemplo n.º 1
0
/*
 *     Display all the sysctl settings
 */
static int sysctl_display_all(const char *path)
{
	int retval = 0;
	DIR *dp;
	struct dirent *de;
	char *tmpdir;
	struct stat ts;

	dp = opendir(path);
	if (!dp) {
		return EXIT_FAILURE;
	}
	while ((de = readdir(dp)) != NULL) {
		tmpdir = concat_subpath_file(path, de->d_name);
		if (tmpdir == NULL)
			continue; /* . or .. */
		if (stat(tmpdir, &ts) != 0) {
			bb_perror_msg(tmpdir);
		} else if (S_ISDIR(ts.st_mode)) {
			retval |= sysctl_display_all(tmpdir);
		} else {
			retval |= sysctl_read_setting(tmpdir + strlen_PROC_SYS);
		}
		free(tmpdir);
	} /* end while */
	closedir(dp);

	return retval;
} /* end sysctl_display_all() */
Ejemplo n.º 2
0
int sysctl_main(int argc ATTRIBUTE_UNUSED, char **argv)
{
	int retval;
	int opt;

	opt = getopt32(argv, "+neAapw"); /* '+' - stop on first non-option */
	argv += optind;
	opt ^= (FLAG_SHOW_KEYS | FLAG_SHOW_KEY_ERRORS);
	option_mask32 ^= (FLAG_SHOW_KEYS | FLAG_SHOW_KEY_ERRORS);

	if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL))
		return sysctl_display_all(PROC_SYS);
	if (opt & FLAG_PRELOAD_FILE)
		return sysctl_preload_file_and_exit(*argv ? *argv : ETC_SYSCTL_CONF);

	retval = 0;
	while (*argv) {
		if (opt & FLAG_WRITE)
			retval |= sysctl_write_setting(*argv);
		else
			retval |= sysctl_read_setting(*argv);
		argv++;
	}

	return retval;
} /* end sysctl_main() */
Ejemplo n.º 3
0
/*
 *     Display all the sysctl settings
 *
 */
int sysctl_display_all(const char *path, int output, int show_table)
{
	int retval = 0;
	int retval2;
	DIR *dp;
	struct dirent *de;
	char *tmpdir;
	struct stat ts;

	if (!(dp = opendir(path))) {
		bb_perror_msg(ERR_OPENING_DIR, path);
		retval = -1;
	} else {
		while ((de = readdir(dp)) != NULL) {
			tmpdir = concat_subpath_file(path, de->d_name);
			if(tmpdir == NULL)
				continue;
			if ((retval2 = stat(tmpdir, &ts)) != 0)
				bb_perror_msg(tmpdir);
			else {
				if (S_ISDIR(ts.st_mode)) {
					sysctl_display_all(tmpdir, output, show_table);
				} else
					retval |=
						sysctl_read_setting(tmpdir + bb_strlen(PROC_PATH),
											output);

			}
			free(tmpdir);
		}				/* end while */
		closedir(dp);
	}

	return retval;
}						/* end sysctl_display_all() */
Ejemplo n.º 4
0
int sysctl_main(int argc, char **argv)
{
    int retval = 0;
    int output = 1;
    int write_mode = 0;
    int switches_allowed = 1;

    if (argc < 2)
        bb_show_usage();

    argv++;

    for (; argv && *argv && **argv; argv++) {
        if (switches_allowed && **argv == '-') {	/* we have a switch */
            switch ((*argv)[1]) {
            case 'n':
                output = 0;
                break;
            case 'w':
                write_mode = 1;
                switches_allowed = 0;
                break;
            case 'p':
                argv++;
                return
                    sysctl_preload_file(((argv && *argv
                                          && **argv) ? *argv :
                                         DEFAULT_PRELOAD), output);
            case 'a':
            case 'A':
                switches_allowed = 0;
                return sysctl_display_all(PROC_PATH, output,
                                          ((*argv)[1] == 'a') ? 0 : 1);
            case 'h':
            case '?':
                bb_show_usage();
            default:
                bb_error_msg(ERR_UNKNOWN_PARAMETER, *argv);
                bb_show_usage();
            }
        } else {
            switches_allowed = 0;
            if (write_mode)
                retval = sysctl_write_setting(*argv, output);
            else
                sysctl_read_setting(*argv, output);
        }
    }
    return retval;
}						/* end sysctl_main() */