コード例 #1
0
/*
 * This routine assumes that the attributes are hashed already
 */
static CSA_return_code
_DtCmsGetOldCalAttrNames(
	_DtCmsCalendar	*cal,
	uint		*num_names_r,
	cms_attr_name	**names_r)
{
	CSA_return_code	stat = CSA_SUCCESS;
	cms_attr_name	*names;
	uint		i, j;

	if ((names = (cms_attr_name *)calloc(1,
	    sizeof(cms_attr_name)*_DtCM_OLD_CAL_ATTR_SIZE)) == NULL)
		return (CSA_E_INSUFFICIENT_MEMORY);

	for (i = 1, j = 0; i <= _DtCM_DEFINED_CAL_ATTR_SIZE; i++) {
		if ((_CSA_cal_attr_info[i].fst_vers > 0 &&
		    _CSA_cal_attr_info[i].fst_vers <= cal->fversion)
		    || i == CSA_CAL_ATTR_CALENDAR_SIZE_I) {
			if ((names[j].name =
			    strdup(_CSA_calendar_attribute_names[i])) == NULL)
			{
				_DtCmsFreeCmsAttrNames(j, names);
				return (CSA_E_INSUFFICIENT_MEMORY);
			} else {
				names[j].num = i;
				j++;
			}
		}
	}

	*num_names_r = j;
	*names_r = names;

	return (CSA_SUCCESS);
}
コード例 #2
0
ファイル: cmscalendar.c プロジェクト: juddy/edcde
extern CSA_return_code
_DtCmsGetCalAttrNames(
	_DtCmsCalendar	*cal,
	uint		*num_names_r,
	cms_attr_name	**names_r)
{
	CSA_return_code	stat = CSA_SUCCESS;
	cms_attribute	*attrs = cal->attrs;
	cms_attr_name	*names;
	uint		i, j, num_attrs = cal->num_attrs;

	if ((names = calloc(1, sizeof(cms_attr_name)*num_attrs)) == NULL)
		return (CSA_E_INSUFFICIENT_MEMORY);

	/* first element is not used */
	for (i = 1, j = 0; i <= num_attrs; i++) {
		if (attrs[i].value || (i == CSA_CAL_ATTR_CALENDAR_SIZE_I ||
		    i == CSA_CAL_ATTR_NUMBER_ENTRIES_I ||
		    i == CSA_X_DT_CAL_ATTR_SERVER_VERSION_I ||
		    i == CSA_X_DT_CAL_ATTR_DATA_VERSION_I ||
		    i == CSA_CAL_ATTR_ACCESS_LIST_I))
		{
			if (names[j].name = strdup(attrs[i].name.name)) {
				names[j].num = attrs[i].name.num;
				j++;
			} else {
				_DtCmsFreeCmsAttrNames(j, names);
				return (CSA_E_INSUFFICIENT_MEMORY);
			}
		}
	}

	if (j > 0) {
		*num_names_r = j;
		*names_r = names;
	} else {
		*num_names_r = 0;
		*names_r = NULL;
		free(names);
	}

	return (CSA_SUCCESS);
}
コード例 #3
0
extern  cms_enumerate_calendar_attr_res *
cms_enumerate_calendar_attr_5_svc(buffer *args, struct svc_req *svcrq)
{
	static cms_enumerate_calendar_attr_res	res;
	_DtCmsCalendar		*cal;
	char			*user;
	uint			access;


	if (debug)
		fprintf(stderr, "cms_enumerate_calendar_attr_5_svc called\n");

	if (res.num_names > 0) {
		_DtCmsFreeCmsAttrNames(res.num_names, res.names);
		res.num_names = 0;
	}

	if ((res.stat = _DtCmsV5LoadAndCheckAccess(svcrq, *args, &user,
	    &access, &cal)) != CSA_SUCCESS)
		return (&res);

	if (cal->fversion >= _DtCM_FIRST_EXTENSIBLE_DATA_VERSION) {
		if (!_DTCMS_HAS_VIEW_CALENDAR_ATTR_ACCESS(access)) {
			res.stat = CSA_E_NO_AUTHORITY;
			return (&res);
		}

		res.stat = _DtCmsGetCalAttrNames(cal, &res.num_names,
				&res.names);
	} else {
		res.stat = _DtCmsGetOldCalAttrNames(cal, &res.num_names,
				&res.names);
	}

	return (&res);
}