#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <selinux/selinux.h>

static __attribute__ ((__noreturn__)) void usage(const char *name, const char *detail, int rc)
{
	fprintf(stderr, "usage:  %s command [ fromcon ]\n", name);
	if (detail)
		fprintf(stderr, "%s:  %s\n", name, detail);
	exit(rc);
}

static char * get_selinux_proc_context(const char *command, char * execcon) {
	char * fcon = NULL, *newcon = NULL;

	int ret = getfilecon(command, &fcon);
	if (ret < 0) goto err;
	ret = security_compute_create(execcon, fcon, string_to_security_class("process"), &newcon);
	if (ret < 0) goto err;

err:
	freecon(fcon);
	return newcon;
}

int main(int argc, char **argv)
{
	int ret = -1;
	char * proccon = NULL, *con = NULL;
	if (argc < 2 || argc > 3)
		usage(argv[0], "Invalid number of arguments", -1);

	if (argc == 2) {
		if (getcon(&con) < 0) {
			perror(argv[0]);
			return -1;
		}
	} else {
		con = strdup(argv[2]);
	}

	proccon = get_selinux_proc_context(argv[1], con);
	if (proccon) {
		printf("%s\n", proccon);
		ret = 0;
	} else {
		perror(argv[0]);
	}

	free(proccon);
	free(con);
	return ret;
}
