示例#1
0
char const *
strgeti(char const *s)
{
	char *str = strnew(strlen(s));
	char *p = str;
	const char *ret;

	for (; *s != '\0'; s++)
		*p++ = (isupper(*s)) ? tolower(*s) : *s;

	*p = '\0';
	ret = strget(str);
	strfree(str);
	return ret;
}
// ---------------------------------------------------------------------------
// On ne stocke pas les champs et ils ne sont pas éditables
// -----------
int bv310GridAIASCIIBaseAccessor::load_fields(){
field	fp;
	
	fp.state=0;
	fp.state|=_kFieldEditLock_;
	fp.state|=_kFieldDeleteLock_;
	fp.state|=_kFieldMasked_;
	
// Identifiant
	fp.offset=1;
	fp.fid=-1;
	fp.kind=_int;
	fp.size=sizeof(int);
	fp.len=15;
	fp.decs=0;
	strget(kMsgID,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	fp.offset++;
	fp.fid=-2;
	fp.kind=_char;
	fp.size=32;
	fp.len=30;
	fp.decs=0;
	strget(kMsgCreator,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=-3;
	fp.kind=_date;
	fp.size=sizeof(double);
	fp.len=30;
	fp.decs=0;
	strget(kMsgDTOC,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	fp.offset++;
	fp.fid=-4;
	fp.kind=_char;
	fp.size=32;
	fp.len=30;
	fp.decs=0;
	strget(kMsgModifier,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=-5;
	fp.kind=_date;
	fp.size=sizeof(double);
	fp.len=30;
	fp.decs=0;
	strget(kMsgDTOM,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=-6;
	fp.kind=_int;
	fp.size=sizeof(int);
	fp.len=15;
	fp.decs=0;
	strget(kMsgState,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"0");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=-7;
	fp.kind=_ivxrect;
	fp.size=sizeof(ivx_rect);
	fp.len=15;
	fp.decs=0;
	strget(kMsgBounds,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.state=0;
	fp.state|=_kFieldEditLock_;
	fp.state|=_kFieldDeleteLock_;

	fp.offset++;
	fp.fid=-8;
	fp.kind=_ivxs2;
	fp.size=sizeof(DB_usz);
	fp.len=15;
	fp.decs=0;
	strget(kMsgGeom,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	fp.offset++;
	fp.fid=1;
	fp.kind=_char;
	fp.size=64;
	fp.len=50;
	fp.decs=0;
	strget(kMsgName,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=2;
	fp.kind=_int;
	fp.size=sizeof(int);
	fp.len=15;
	fp.decs=0;
	strget(kMsgSubType,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"1");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	fp.offset++;
	fp.fid=3;
	fp.kind=_int;
	fp.size=sizeof(int);
	fp.len=15;
	fp.decs=0;
	strget(kMsgColor,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"1");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);

	fp.offset++;
	fp.fid=8;
	fp.kind=_int;
	fp.size=sizeof(int);
	fp.len=2;
	fp.decs=0;
	strget(kMsgFlag,fp.name);
	fp.cnstrkind=0;
	strcpy(fp.defval,"0");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	fp.offset++;
	fp.fid=9;
	fp.kind=_double;
	fp.size=sizeof(double);
	fp.len=30;
	fp.decs=6;
	strcpy(fp.name,"VALUE");
	fp.cnstrkind=0;
	strcpy(fp.defval,"0");
	fp.index=fp.offset;
	fp.tbl_id=0;
	_elts.add(&fp);
	
	return(noErr);
}
示例#3
0
static int
cifs_idmap(const key_serial_t key, const char *key_descr)
{
	int rc = 1;
	char *sidstr = NULL;
	struct cifs_sid sid;
	struct cifs_uxid cuxid;

	/*
	 * Use winbind to convert received string to a SID and lookup
	 * name and map that SID to an uid.  If either of these
	 * function calls return with an error, return an error the
	 * upcall caller.  Otherwise instanticate a key using that uid.
	 *
	 * The same applies to SID and gid mapping.
	 */
	sidstr = strget(key_descr, "os:");
	if (sidstr) {
		rc = str_to_sid(plugin_handle, sidstr, &sid);
		if (rc) {
			syslog(LOG_DEBUG, "Unable to convert owner string %s "
				"to SID: %s", key_descr, plugin_errmsg);
			goto cifs_idmap_ret;
		}

		rc = sids_to_ids(plugin_handle, &sid, 1, &cuxid);
		if (rc || (cuxid.type != CIFS_UXID_TYPE_UID &&
			   cuxid.type != CIFS_UXID_TYPE_BOTH)) {
			syslog(LOG_DEBUG, "Unable to convert %s to "
				"UID: %s", key_descr, plugin_errmsg);
			rc = rc ? rc : -EINVAL;
			goto cifs_idmap_ret;
		}
		rc = keyctl_instantiate(key, &cuxid.id.uid, sizeof(uid_t), 0);
		if (rc)
			syslog(LOG_ERR, "%s: key inst: %s", __func__,
					strerror(errno));

		goto cifs_idmap_ret;
	}

	sidstr = strget(key_descr, "gs:");
	if (sidstr) {
		rc = str_to_sid(plugin_handle, sidstr, &sid);
		if (rc) {
			syslog(LOG_DEBUG, "Unable to convert group string %s "
				"to SID: %s", key_descr, plugin_errmsg);
			goto cifs_idmap_ret;
		}

		rc = sids_to_ids(plugin_handle, &sid, 1, &cuxid);
		if (rc || (cuxid.type != CIFS_UXID_TYPE_GID &&
			   cuxid.type != CIFS_UXID_TYPE_BOTH)) {
			syslog(LOG_DEBUG, "Unable to convert %s to "
				"GID: %s", key_descr, plugin_errmsg);
			rc = rc ? rc : -EINVAL;
			goto cifs_idmap_ret;
		}
		rc = keyctl_instantiate(key, &cuxid.id.gid, sizeof(gid_t), 0);
		if (rc)
			syslog(LOG_ERR, "%s: key inst: %s", __func__,
					strerror(errno));

		goto cifs_idmap_ret;
	}

	sidstr = strget(key_descr, "oi:");
	if (sidstr) {
		rc = str_to_uint(sidstr, (unsigned int *)&cuxid.id.uid);
		if (rc) {
			syslog(LOG_ERR, "Unable to convert %s to uid: %s",
				sidstr, strerror(rc));
			goto cifs_idmap_ret;
		}
		cuxid.type = CIFS_UXID_TYPE_UID;

		syslog(LOG_DEBUG, "SID: %s, uid: %u", sidstr, cuxid.id.uid);
		rc = ids_to_sids(plugin_handle, &cuxid, 1, &sid);
		if (rc || sid.revision == 0) {
			syslog(LOG_DEBUG, "uid %u to SID error: %s",
				cuxid.id.uid, plugin_errmsg);
			goto cifs_idmap_ret;
		}

		rc = keyctl_instantiate(key, &sid, sizeof(struct cifs_sid), 0);
		if (rc)
			syslog(LOG_ERR, "%s: key inst: %s", __func__,
				strerror(errno));

		goto cifs_idmap_ret;
	}

	sidstr = strget(key_descr, "gi:");
	if (sidstr) {
		rc = str_to_uint(sidstr, (unsigned int *)&cuxid.id.gid);
		if (rc) {
			syslog(LOG_ERR, "Unable to convert %s to gid: %s",
				sidstr, strerror(rc));
			goto cifs_idmap_ret;
		}
		cuxid.type = CIFS_UXID_TYPE_GID;

		syslog(LOG_DEBUG, "SID: %s, gid: %u", sidstr, cuxid.id.gid);
		rc = ids_to_sids(plugin_handle, &cuxid, 1, &sid);
		if (rc || sid.revision == 0) {
			syslog(LOG_DEBUG, "gid %u to SID error: %s",
				cuxid.id.gid, plugin_errmsg);
			goto cifs_idmap_ret;
		}

		rc = keyctl_instantiate(key, &sid, sizeof(struct cifs_sid), 0);
		if (rc)
			syslog(LOG_ERR, "%s: key inst: %s", __func__,
				strerror(errno));

		goto cifs_idmap_ret;
	}

	syslog(LOG_DEBUG, "Invalid key: %s", key_descr);

cifs_idmap_ret:
	return rc;
}