tools/testing/selftests/safesetid/safesetid-test.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/safesetid/safesetid-test.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/safesetid/safesetid-test.c
Extension
.c
Size
12607 bytes
Lines
543
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if (written >= 0) {
			printf("short write to %s\n", filename);
			return false;
		} else {
			printf("write to %s failed: %s\n",
				filename, strerror(errno));
			return false;
		}
	}
	if (close(fd) != 0) {
		printf("close of %s failed: %s\n",
			filename, strerror(errno));
		return false;
	}
	return true;
}

static bool write_file(char *filename, char *fmt, ...)
{
	va_list ap;
	bool ret;

	va_start(ap, fmt);
	ret = vmaybe_write_file(false, filename, fmt, ap);
	va_end(ap);

	return ret;
}

static void ensure_user_exists(uid_t uid)
{
	struct passwd p;

	FILE *fd;
	char name_str[10];

	if (getpwuid(uid) == NULL) {
		memset(&p,0x00,sizeof(p));
		fd=fopen("/etc/passwd","a");
		if (fd == NULL)
			die("couldn't open file\n");
		if (fseek(fd, 0, SEEK_END))
			die("couldn't fseek\n");
		snprintf(name_str, 10, "user %d", uid);
		p.pw_name=name_str;
		p.pw_uid=uid;
		p.pw_gid=uid;
		p.pw_gecos="Test account";
		p.pw_dir="/dev/null";
		p.pw_shell="/bin/false";
		int value = putpwent(&p,fd);
		if (value != 0)
			die("putpwent failed\n");
		if (fclose(fd))
			die("fclose failed\n");
	}
}

static void ensure_group_exists(gid_t gid)
{
	struct group g;

	FILE *fd;
	char name_str[10];

	if (getgrgid(gid) == NULL) {
		memset(&g,0x00,sizeof(g));
		fd=fopen("/etc/group","a");
		if (fd == NULL)
			die("couldn't open group file\n");
		if (fseek(fd, 0, SEEK_END))
			die("couldn't fseek group file\n");
		snprintf(name_str, 10, "group %d", gid);
		g.gr_name=name_str;
		g.gr_gid=gid;
		g.gr_passwd=NULL;
		g.gr_mem=NULL;
		int value = putgrent(&g,fd);
		if (value != 0)
			die("putgrent failed\n");
		if (fclose(fd))
			die("fclose failed\n");
	}
}

static void ensure_securityfs_mounted(void)
{
	int fd = open(add_uid_whitelist_policy_file, O_WRONLY);
	if (fd < 0) {
		if (errno == ENOENT) {

Annotation

Implementation Notes