Пример #1
0
static int elektraResolveUserPasswd (ElektraResolved * handle, Key * warningsKey)
{
	char * dir = elektraResolvePasswd (warningsKey);
	if (!dir) return 0;
	elektraResolveUsingHome (handle, dir, 1);
	elektraFree (dir);
	return 1;
}
Пример #2
0
static int elektraResolvePasswd (resolverHandle * p, Key * warningsKey)
{
	struct passwd pwd;
	struct passwd * result;
	char * buf;
	ssize_t bufsize;
	int s;

	bufsize = sysconf (_SC_GETPW_R_SIZE_MAX);
	if (bufsize == -1) /* Value was indeterminate */
	{
		bufsize = 16384; /* Should be more than enough */
	}

	buf = elektraMalloc (bufsize);
	if (buf == NULL)
	{
		return 0;
	}

	s = getpwuid_r (getuid (), &pwd, buf, bufsize, &result);
	if (result == NULL)
	{
		elektraFree (buf);
		if (s != 0)
		{
			ELEKTRA_ADD_WARNING (90, warningsKey, strerror (s));
		}
		return 0;
	}

	/*
	printf("Info: %s; UID: %ld0, Home: %s\n",
			pwd.pw_gecos,
			(long) pwd.pw_uid,
			pwd.pw_dir);
	*/

	elektraResolveUsingHome (p, pwd.pw_dir, true);
	elektraFree (buf);

	return 1;
}
Пример #3
0
static int elektraResolveEnvHome (ElektraResolved * handle, Key * warningsKey)
{
	const char * home = getenv ("HOME");

	if (!home || !strcmp (home, ""))
	{
		return 0;
	}

	if (home[0] != '/')
	{
		ELEKTRA_ADD_WARNINGF (100, warningsKey,
				      "HOME contains a path that is "
				      "not absolute and thus "
				      "it was skipped: %s",
				      home);
		return 0;
	}
	elektraResolveUsingHome (handle, home, 1);
	return 1;
}
Пример #4
0
static int elektraResolveUserXDGHome (ElektraResolved * handle, Key * warningsKey)
{
	const char * home = getenv ("XDG_CONFIG_HOME");

	if (!home || !strcmp (home, ""))
	{
		return 0;
	}

	if (home[0] != '/')
	{
		ELEKTRA_ADD_WARNINGF (100, warningsKey,
				      "XDG_CONFIG_HOME contains a path that is "
				      "not absolute (violates XDG specification) and thus "
				      "it was skipped: %s",
				      home);
		return 0;
	}
	elektraResolveUsingHome (handle, home, 0);
	return 1;
}