Esempio n. 1
0
static void acl_details(CXmlNodePtr  acl,const char *type)
{
	CXmlNodePtr  h=fileattr_find(acl,type);
	const char *d,*i;
	if(h)
	{
		d=fileattr_getvalue(h,"@deny");
		i=fileattr_getvalue(h,"@inherit");
		if(!strcmp(type,"all") && (d && atoi(d)))
		{
			type="none";
			d=NULL;
		}
		printf("\t%s",type);
		if((d && atoi(d)) || (i && !atoi(i)))
		{
			printf("(");
			if(d && atoi(d))
			{
				printf("deny");
				if(i && atoi(i))
					printf(",");
			}
			if(i&&!atoi(i))
			{
				printf("noinherit");
			}
			printf(")");
		}
		printf("\n");
	}
}
Esempio n. 2
0
static void show_acl(CXmlNodePtr  acl)
{
	while(acl)
	{
		const char *user = fileattr_getvalue(acl,"@user");
		const char *branch = fileattr_getvalue(acl,"@branch");
		const char *merge = fileattr_getvalue(acl,"@merge");
		const char *priority = fileattr_getvalue(acl,"@priority");
		const char *message = fileattr_getvalue(acl,"message");
		const char *comma="";
		printf("\n");
		if(user)
		{
			printf("user=%s",user);
			comma=",";
		}
		if(branch)
		{
			printf("%sbranch=%s",comma,branch);
			comma=",";
		}
		if(merge)
		{
			printf("%smerge=%s",comma,merge);
		}
		if(!user && !branch && !merge)
			printf("<default>");
		if(priority)
			printf(",priority=%s",priority);
		if(message)
			printf(",message=%s",message);
		printf("\n");
		acl_details(acl,"all");
		acl_details(acl,"read");
		acl_details(acl,"write");
		acl_details(acl,"create");
		acl_details(acl,"tag");
		acl_details(acl,"control");

		acl = fileattr_next(acl);
	}
}
Esempio n. 3
0
/*
 * Show file ACL
 */
static Dtype lsacl_dirproc (void *callerdat, char *dir, char *repos, char *update_dir, List *entries, const char *virtual_repository, Dtype hint)
{
	const char *owner;
	CXmlNodePtr  acl;

	if(hint!=R_PROCESS)
	  return hint;

	owner = fileattr_getvalue(NULL,"directory/owner");

	if(is_rlsacl && !strcmp(update_dir,"."))
		update_dir="<root>";
	printf("Directory: %s\n",update_dir);
	printf("Owner: %s\n",(owner&&*owner)?owner:"<not set>");
	
	acl = fileattr_find(NULL,"directory/acl");
	show_acl(acl);

	return R_PROCESS;
}
Esempio n. 4
0
File: chacl.cpp Progetto: acml/cvsnt
static void set_acl(CXmlNodePtr base)
{
	CXmlNodePtr acl, acl_to_set = NULL;
	acl = fileattr_find(base,"acl");

	while(acl)
	{
		const char *user = fileattr_getvalue(acl,"@user");
		const char *branch = fileattr_getvalue(acl,"@branch");
		const char *merge = fileattr_getvalue(acl,"@merge");
		if(((!user && !parms.user) || (user && parms.user && !usercmp(user,parms.user))) &&
		   ((!branch && !parms.branch) || (branch && parms.branch && !strcmp(branch,parms.branch))) &&
		   ((!merge && !parms.merge) || (merge && parms.merge && !strcmp(merge,parms.merge))))
		{
			acl_to_set = acl;
			break;
		}
		acl = fileattr_next(acl);
	}
	if(acl_to_set)
		fileattr_batch_delete(acl_to_set);
		
	if(!parms.del)
	{
		char *parm = xstrdup(parms.access);
		char *acc = parm?strtok(parm,","):NULL;

		base->NewNode("acl");
		fileattr_modified();
		if(parms.user)
			base->NewAttribute("user",parms.user);
		if(parms.branch)
			base->NewAttribute("branch",parms.branch);
		if(parms.merge)
			base->NewAttribute("merge",parms.merge);
		if(parms.priority && atoi(parms.priority))
			base->NewAttribute("priority",parms.priority);
		if(parms.message)
			base->NewNode("message",parms.message,false);
		base->NewNode("modified_by",getcaller(),false);
		base->NewNode("modified_date",current_date,false);
		while(acc)
		{
			int deny=0;
			if(!strncmp(acc,"no",2) && strcmp(acc,"none"))
			{
				deny=1;
				acc+=2;
			}
			if(!strcmp(acc,"all"))
				set_attrs(base,"all",deny,parms.noinherit);
			else if(!strcmp(acc,"none"))
				set_attrs(base,"all",!deny,parms.noinherit);
			else if(!strcmp(acc,"read"))
				set_attrs(base,"read",deny,parms.noinherit);
			else if(!strcmp(acc,"write"))
				set_attrs(base,"write",deny,parms.noinherit);
			else if(!strcmp(acc,"create"))
				set_attrs(base,"create",deny,parms.noinherit);
			else if(!strcmp(acc,"tag"))
				set_attrs(base,"tag",deny,parms.noinherit);
			else if(!strcmp(acc,"control"))
				set_attrs(base,"control",deny,parms.noinherit);
			else
				error(1,0,"Invalid access control attribute '%s'",acc);
			acc = strtok(NULL,",");
		}
		base->GetParent();
		fileattr_prune(base);
		xfree(parm);
	}
	else
	{
		if(acl_to_set)
			fileattr_prune(acl_to_set);
	}
}