Example #1
0
void load_registry_shares(void)
{
	struct registry_key *key;
	char *name;
	WERROR err;
	int i;

	DEBUG(8, ("load_registry_shares()\n"));
	if (!lp_registry_shares()) {
		return;
	}

	err = reg_open_path(NULL, KEY_SMBCONF, REG_KEY_READ,
			    get_root_nt_token(), &key);
	if (!(W_ERROR_IS_OK(err))) {
		return;
	}

	for (i=0; W_ERROR_IS_OK(reg_enumkey(key, key, i, &name, NULL)); i++) {
		load_registry_service(name);
		TALLOC_FREE(name);
	}

	TALLOC_FREE(key);
	return;
}
Example #2
0
void load_registry_shares(void)
{
	DEBUG(8, ("load_registry_shares()\n"));
	if (!lp_registry_shares()) {
		return;
	}

	process_registry_shares();

	return;
}
Example #3
0
static int load_registry_service(const char *servicename)
{
	if (!lp_registry_shares()) {
		return -1;
	}

	if ((servicename == NULL) || (*servicename == '\0')) {
		return -1;
	}

	if (strequal(servicename, GLOBAL_NAME)) {
		return -2;
	}

	if (!process_registry_service(servicename)) {
		return -1;
	}

	return lp_servicenumber(servicename);
}
Example #4
0
static int load_registry_service(const char *servicename)
{
	struct registry_key *key;
	char *path;
	WERROR err;

	uint32 i;
	char *value_name;
	struct registry_value *value;

	int res = -1;

	if (!lp_registry_shares()) {
		return -1;
	}

	if ((servicename == NULL) || (*servicename == '\0')) {
		return -1;
	}

	if (strequal(servicename, GLOBAL_NAME)) {
		return -2;
	}

	if (asprintf(&path, "%s\\%s", KEY_SMBCONF, servicename) == -1) {
		return -1;
	}

	err = reg_open_path(NULL, path, REG_KEY_READ, get_root_nt_token(),
			    &key);
	SAFE_FREE(path);

	if (!W_ERROR_IS_OK(err)) {
		return -1;
	}

	res = lp_add_service(servicename, -1);
	if (res == -1) {
		goto error;
	}

	for (i=0;
	     W_ERROR_IS_OK(reg_enumvalue(key, key, i, &value_name, &value));
	     i++) {
		switch (value->type) {
		case REG_DWORD: { 
			char *tmp;
			if (asprintf(&tmp, "%d", value->v.dword) == -1) {
				continue;
			}
			lp_do_parameter(res, value_name, tmp);
			SAFE_FREE(tmp);
			break;
		}
		case REG_SZ: {
			lp_do_parameter(res, value_name, value->v.sz.str);
			break;
		}
		default:
			/* Ignore all the rest */
			break;
		}

		TALLOC_FREE(value_name);
		TALLOC_FREE(value);
	}

 error:

	TALLOC_FREE(key);
	return res;
}