Ejemplo n.º 1
0
static Npuser *
_usercache_del (Npsrv *srv, Npuser *prev, Npuser *u)
{
    Npusercache *uc = srv->usercache;
    Npuser *tmp = u->next;

    if (prev)
        prev->next = tmp;
    else
        uc->users = tmp;
    np_user_decref (u);

    return tmp;
}
Ejemplo n.º 2
0
Archivo: ops.c Proyecto: eugmes/diod
int
diod_remapuser (Npfid *fid, Npstr *uname, u32 n_uname, Npstr *aname)
{
    int ret = 0;

    if (diod_conf_get_allsquash ()) {
        char *squash = diod_conf_get_squashuser ();
        Npuser *user = NULL;

        if (!(user = np_uname2user (fid->conn->srv, squash))) {
            ret = -1;
            goto done;
        }
        if (fid->user)
            np_user_decref (fid->user);
        fid->user = user; 
    }
done:
    return ret;
}
Ejemplo n.º 3
0
void
np_fid_destroy(Npfid *fid)
{
	int hash;
	Npconn *conn;
	Npsrv *srv;
	Npfidpool *fp;
	Npfid **htable;

	conn = fid->conn;
	srv = conn->srv;
	fp = conn->fidpool;
	if (!fp)
		return;

//	printf("destroy conn %p fid %d\n", conn, fid->fid);
	pthread_mutex_lock(&fp->lock);
	hash = fid->fid % fp->size;
	htable = fp->htable;
	if (fid->prev)
		fid->prev->next = fid->next;
	else
		htable[hash] = fid->next;

	if (fid->next)
		fid->next->prev = fid->prev;

	pthread_mutex_unlock(&fp->lock);

	if (fid->type & Qtauth && srv->auth && srv->auth->clunk)
		(*srv->auth->clunk)(fid);
	else if (!(fid->type&Qtauth) && srv->fiddestroy)
		(*srv->fiddestroy)(fid);

	if (fid->user)
		np_user_decref(fid->user);

	free(fid);

	return;
}
Ejemplo n.º 4
0
Archivo: ioctx.c Proyecto: chaos/diod
static int
_ioctx_close_destroy (IOCtx ioctx, int seterrno)
{
    int rc = 0;

    if (ioctx->dir) {
        rc = closedir(ioctx->dir);
        if (rc < 0 && seterrno)
            np_uerror (errno);
    } else if (ioctx->fd != -1) {
        rc = close (ioctx->fd);
        if (rc < 0 && seterrno)
            np_uerror (errno);
    }
    if (ioctx->user)
        np_user_decref (ioctx->user);
    pthread_mutex_destroy (&ioctx->lock);
    free (ioctx);

    return rc;
}
Ejemplo n.º 5
0
static Npfid *
_destroy_fid (Npfid *f)
{
	Npsrv *srv;
	Npfid *next;

	NP_ASSERT(f != NULL);
	NP_ASSERT(f->magic == FID_MAGIC);

	srv = f->conn->srv;
	next = f->next;
	if (f->refcount > 0 && (srv->flags & SRV_FLAGS_DEBUG_FIDPOOL)) {
		np_logmsg (srv, "_destroy_fid: fid %d has %d refs",
			   f->fid, f->refcount);
	}
	if ((f->type & P9_QTAUTH)) {
		if (srv->auth && srv->auth->clunk)
			(*srv->auth->clunk)(f);
	} else if ((f->type & P9_QTTMP)) {
		np_ctl_fiddestroy (f);
	} else {
		if (srv->fiddestroy)
			(*srv->fiddestroy)(f);
	}	
	if (f->user)
		np_user_decref(f->user);
	if (f->tpool)
		np_tpool_decref(f->tpool);
	if (f->aname)
		free (f->aname);
	pthread_mutex_destroy (&f->lock);
	f->magic = FID_MAGIC_FREED;
	free(f);

	return next;
}