Exemplo n.º 1
0
char *
logfsisgroupsetleader(LogfsIdentityStore *is, char *groupname, char *leadername)
{
    Group *g, *lg;
    groupname = logfsisustadd(is, groupname);
    if(groupname == nil)
        return Enomem;
    g = findgroupfromuname(is, groupname);
    if(g == nil)
        return Enonexist;
    if(leadername && leadername[0]) {
        leadername = logfsisustadd(is, leadername);
        if(leadername == nil)
            return Enomem;
        lg = findgroupfromuname(is, leadername);
        if(lg == nil)
            return Enonexist;
        if(!logfsgroupsetismember(g->members, lg))
            return "not a member of the group";
        g->leader = lg;
    }
    else
        g->leader = nil;
    return nil;
}
Exemplo n.º 2
0
char *
logfsisgroupcreate(LogfsIdentityStore *is, char *groupname, char *groupid)
{
    Group *group;
    Uname *uname;

    if(strcmp(groupname, logfsisgroupnonename) == 0 || groupname[0] == '(')
        return "group name reserved";
    groupname = logfsisustadd(is, groupname);
    groupid = logfsisustadd(is, groupid);
    if(groupname == nil || groupid == nil)
        return Enomem;
    return logfsgroupmapnewentry(is->groupmap, is->unamemap, groupid, groupname, &group, &uname);
}
Exemplo n.º 3
0
char *
logfsisgrouprename(LogfsIdentityStore *is, char *oldgroupname, char *newgroupname)
{
    Group *og, *ng;
    oldgroupname = logfsisustadd(is, oldgroupname);
    if(oldgroupname == nil)
        return Enomem;
    og =findgroupfromuname(is, oldgroupname);
    if(og == nil)
        return Enonexist;
    newgroupname = logfsisustadd(is, newgroupname);
    if(newgroupname == nil)
        return Enomem;
    ng = findgroupfromuname(is, newgroupname);
    if(ng != nil)
        return Eexist;
    og->uname = newgroupname;
    return nil;
}
Exemplo n.º 4
0
static
mkdirentry(LogfsServer *server, Entry *e, int inuse, ulong path, Entry *parent, char *name, char *uid, char *gid,
	ulong mtime, char *muid, ulong perm)
{
//print("mkdirentry 0x%.8lux\n", e);
	e->inuse = inuse;
	e->qid.path = path;
	e->qid.vers = 0;
	e->qid.type = QTDIR;
	e->parent = parent;
	e->name = name;
	e->uid = logfsisustadd(server->is, uid);
	e->gid = logfsisustadd(server->is, gid);
	e->mtime = mtime;
	e->muid = logfsisustadd(server->is, muid);
	e->perm = perm | DMDIR;
	e->next = nil;
	return e->uid != nil && e->muid != nil && e->name != nil;
}
Exemplo n.º 5
0
char *
logfsisgroupaddmember(LogfsIdentityStore *is, char *groupname, char *membername)
{
    Group *g, *mg;
    groupname = logfsisustadd(is, groupname);
    if(groupname == nil)
        return Enomem;
    g =findgroupfromuname(is, groupname);
    if(g == nil)
        return Enonexist;
    membername = logfsisustadd(is, membername);
    if(membername == nil)
        return Enomem;
    mg = findgroupfromuname(is, membername);
    if(mg == nil)
        return Enonexist;
    if(!logfsgroupsetadd(g->members, mg))
        return Enomem;
    return nil;
}
Exemplo n.º 6
0
char *
logfsentrynew(LogfsServer *server, int inuse, u32int path, Entry *parent, char *name, char *uid, char *gid,
u32int mtime, char *muid, u32int perm, ulong cvers, ulong length, Entry **ep)
{
	Entry *e;
	char *errmsg;
	e = logfsrealloc(nil, sizeof(*e));
	if(e == nil)
		return Enomem;
	e->inuse = inuse;
	e->qid.path = path;
	e->qid.vers = 0;
	e->qid.type = perm >> 24;
	e->parent = parent;
	e->name = logfsstrdup(name);
	e->uid = logfsisustadd(server->is, uid);
	e->gid = logfsisustadd(server->is, gid);
	e->muid = logfsisustadd(server->is, muid);
	if(e->uid == nil || e->gid == nil || e->muid == nil || e->name == nil) {
		logfsentryfree(e);
		return Enomem;
	}
	e->mtime = mtime;
	if(perm & DMDIR)
		e->perm = perm & (~0777 | (parent->perm & 0777));
	else {
		e->perm = perm & (~0666 | (parent->perm & 0666));
		e->u.file.cvers = cvers;
		e->u.file.length = length;
		errmsg = logfsextentlistnew(&e->u.file.extent);
		if(errmsg) {
			logfsentryfree(e);
			return errmsg;
		}
	}
//print("e 0x%.8lux perm 0%.uo\n", e, e->perm);
	*ep = e;
	return nil;
	
}
Exemplo n.º 7
0
char *
logfsisgroupremovemember(LogfsIdentityStore *is, char *groupname, char *nonmembername)
{
    Group *g, *nonmg;
    groupname = logfsisustadd(is, groupname);
    if(groupname == nil)
        return Enomem;
    g =findgroupfromuname(is, groupname);
    if(g == nil)
        return Enonexist;
    nonmembername = logfsisustadd(is, nonmembername);
    if(nonmembername == nil)
        return Enomem;
    nonmg = findgroupfromuname(is, nonmembername);
    if(nonmg == nil)
        return Enonexist;
    if(!logfsgroupsetremove(g->members, nonmg))
        return Enonexist;
    if(g->leader == nonmg)
        g->leader = nil;
    return nil;
}
Exemplo n.º 8
0
char *
logfsserverattach(LogfsServer *server, u32int fid, char *uname, Qid *qid)
{
	char *errmsg;
	Fid *f;
	if(server->trace > 1)
		print("logfsserverattach(%ud, %s)\n", fid, uname);
	errmsg = logfsfidmapnewentry(server->fidmap, fid, &f);
	if(errmsg)
		return errmsg;
	f->uname = logfsisustadd(server->is, uname);
	if(f->uname == nil) {
		logfsfidmapclunk(server->fidmap, fid);
		return Enomem;
	}
	f->entry = &server->root;
	f->entry->inuse++;
	*qid = f->entry->qid;
	return nil;
}