Пример #1
0
int
dogetproject(const char **list)
{
	struct project proj;
	struct project *pproj;
	projid_t projid;
	void *buf[PROJECT_BUFSZ];
	int rc = EXC_SUCCESS;
	char *ptr;

	if (list == NULL || *list == NULL) {
		setprojent();
		while ((pproj = getprojent(&proj, buf, PROJECT_BUFSZ)) != NULL)
			(void) putprojent(pproj, stdout);
		endprojent();
	} else {
		for (; *list != NULL; list++) {
			projid = strtol(*list, &ptr, 10);
			if (ptr == *list)
				pproj = getprojbyname(*list, &proj,
				    buf, PROJECT_BUFSZ);
			else
				pproj = getprojbyid(projid, &proj,
				    buf, PROJECT_BUFSZ);
			if (pproj == NULL)
				rc = EXC_NAME_NOT_FOUND;
			else
				(void) putprojent(pproj, stdout);
		}
	}

	return (rc);
}
Пример #2
0
void
set_project(struct passwd *pw)
{
    struct project proj;
    char buf[PROJECT_BUFSZ];
    int errval;
    debug_decl(set_project, SUDO_DEBUG_UTIL)

    /*
     * Collect the default project for the user and settaskid
     */
    setprojent();
    if (getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf)) != NULL) {
	errval = setproject(proj.pj_name, pw->pw_name, TASK_NORMAL);
	switch(errval) {
	case 0:
	    break;
	case SETPROJ_ERR_TASK:
	    switch (errno) {
	    case EAGAIN:
		sudo_warnx(U_("resource control limit has been reached"));
		break;
	    case ESRCH:
		sudo_warnx(U_("user \"%s\" is not a member of project \"%s\""),
		    pw->pw_name, proj.pj_name);
		break;
	    case EACCES:
		sudo_warnx(U_("the invoking task is final"));
		break;
	    default:
		sudo_warnx(U_("could not join project \"%s\""), proj.pj_name);
	    }
	case SETPROJ_ERR_POOL:
	    switch (errno) {
	    case EACCES:
		sudo_warnx(U_("no resource pool accepting default bindings "
		    "exists for project \"%s\""), proj.pj_name);
		break;
	    case ESRCH:
		sudo_warnx(U_("specified resource pool does not exist for "
		    "project \"%s\""), proj.pj_name);
		break;
	    default:
		sudo_warnx(U_("could not bind to default resource pool for "
		    "project \"%s\""), proj.pj_name);
	    }
	    break;
	default:
	    if (errval <= 0) {
		sudo_warnx(U_("setproject failed for project \"%s\""), proj.pj_name);
	    } else {
		sudo_warnx(U_("warning, resource control assignment failed for "
		    "project \"%s\""), proj.pj_name);
	    }
	}
    } else {
	sudo_warn("getdefaultproj");
    }
    endprojent();
    debug_return;
}