The ultimate ACI-interface?


From: Jörgen Sigvardsson <jorgen.sigvardsson@kau.se>
Subject: The ultimate ACI-interface?
Date: Sat, 24 Mar 2001 14:50:52 +0100

Next Article (by Subject): Re: The ultimate ACI-interface? Amon Ott
Previous Article (by Subject): temporary patch homepage Jörgen Sigvardsson
Next in Thread: Re: The ultimate ACI-interface? Amon Ott
Articles sorted by: [Date] [Author] [Subject]


--------------Boundary-00=_SSFPHCHTWLWMSTPJ6Y85
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I have just finished implementing persistance using ACI in my REG-module. I 
think I have come with a pretty nice design which could be refitted into a 
very general ACI-list interface. I just thought of the discussion some weeks 
ago.. :)

This is how I do persistance:
For any list, I write two pieces of information to disk:
Version and size. Size is used so that reading the list from disk is easy. 
The version is a simple byte-tuple consisting of a major and a minor version. 
This is for maintaining backward compability when a decision module evolves 
over time. Of course, when the list is serialized again the newest version 
will be used. 
Anyhow, version and size are on the disk. Now I just write my elements to 
disk one at a time. I guess this does not differ a whole lot from how it is 
done now. 

Now the inverse: reading information from disk.
Now the version-tuple is utilized. By using this information a 
deserializer-function is located which can handle data with this version. I 
am using a table of 
struct { 
   __u16 from_version, upto_version; 
   deserializer_t deserializer;
};

So when my reading method finds the list on disk, it will scan through the 
table to find a deserializer which can handle version x, where from_version 
<= x < upto_version.

This is an interface that I'd love to use:

/* Describes a deserializer function which can deserialize one element of 
version x, where from_version <= x < upto_version */
typedef struct deserializer_info {
	const __u16 from_version, upto_version;
	int (*deserialize)(struct file*, void** element);
} deserializer_info_t;

/* Describes serialization in general. Note that serialization (writing) is 
not version-dependent. It is assumed that the serialize function always writes
data using the newest version. This way a simple list update will convert the
entire ACI file. Neat when upgrading decision modules. */
typedef struct serialization_info {
	int automatic_serialization;  /* Should RSBAC serialize automatically? */
	int (*serialize)(struct file*, void* element); /* Writes to disk */
	const __u16 cur_version;
            deserializer_t* deserializers;
} serialization_info_t;

/* General list info. I could probably come up with more, but this is enough 
to show what I mean. */
typedef struct list_info {
	int (*cmp)(void* cur_element, void* search_key); /* for searching in list */
	serialization_info_t serialization_info;
} list_info_t;

/* symbolic_name = basename of ACI file */
int aci_list_register(const char* symbolic_name, list_info_t* info);
int aci_list_unregister(const char* symbolic_name) 
                 - OR -
int aci_list_unregister(aci_list_desc_t ld);

+ the various add/remove/find/....-functions.
(aci_list internal datastructure left as an exercise for the reader)

All modifiying functions mark the list as dirty if automatic serialization 
has been requested. On each rsbacd pulse, all dirty lists are serialized.

Overall benefits:
1) RSBAC does not know anything about the data being stored. At all.
2) Flexible versioning. In the end, all ACI information will be "upgraded"
3) Less to think about for the user (kernel locking, semaphore ups and downs 
can be done by RSBAC)
4) Since everything is hidden for the user in terms of structures, the 
underlying datastructure may very well be an AVL-tree instead of a list. 
5) 1) Gives a mechanism rather than a policy which is good - the UNIX way.

Attached is a piece of code which hints at how this could be implemented. 
This is of course very raw - it's not finished yet (which the 
#warning-directives hints at ;)

- -- 
Jörgen Sigvardsson, B. Sc. (M. Sc. Really soon now :)
Lecturer, Computer Science Dept. Karlstad University
Tel: +46-(0)54-700 1786
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.3 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE6vKY8JtcD8rikkmwRAuLoAKCQO3MorguX5KL3tRpVqeypc8l3KQCdGVTQ
eE+zEK/ICTcb3GA8BUS3mCQ=
=QGBX
-----END PGP SIGNATURE-----

--------------Boundary-00=_SSFPHCHTWLWMSTPJ6Y85
Content-Type: text/x-c;
  name="eac_binver_aci.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="eac_binver_aci.c"

I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgoKI2RlZmluZSBfX05PX1ZFUlNJT05fXwojaW5jbHVk
ZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9mcy5oPgojaW5jbHVkZSA8bGludXgv
c21wX2xvY2suaD4KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9zbGFi
Lmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8ZWFjX2JpbnZlcl9tb2QuaD4K
I2luY2x1ZGUgPGVhY19iaW52ZXJfYWNpLmg+CiNpbmNsdWRlIDxlYWNfdXRpbHMuaD4KI2luY2x1
ZGUgPHJzYmFjL2FjaV9kYXRhX3N0cnVjdHVyZXMuaD4KI2luY2x1ZGUgPHJzYmFjL2Vycm9yLmg+
CiNpbmNsdWRlIDxnbXAuaD4KCi8qIERldGVybWluZXMgdGhlIHNpemUgZm9yIHRlbXBvcmFyeSBi
dWZmZXIgd2hpY2ggbnVtYmVycyBhcmUKICogc2VyaWFsaXplZCB0byBiZWZvcmUgd3JpdGluZyB0
byBkaXNrLiBJIHJlYWxseSBzaG91bGQgd3JpdGUKICogYSBzZXQgb2YgbXB6X3NlcmlhbGl6ZShz
dHJ1Y3QgZmlsZSogZmlsZSwgLi4uKS1mdW5jdGlvbnMuCiAqLwojZGVmaW5lIFRNUF9NRU1fU0la
RQkoNCAqIFBBR0VfU0laRSkKCiN3YXJuaW5nICJYWFg6IEltcGxlbWVudCB3YXJuaW5nL2xvZ2dp
bmcgd2hlbiBlcnJvcnMgb2NjdXIgb24gZGlzayBJL08iCgovKgogKiBGdW5jdGlvbiBwcm90b3R5
cGVzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2VyaWFsaXphdGlvbiBoZWxwZXIgZnVuY3Rpb25z
CiAqLwpzdGF0aWMgaW50IGRlc2VyaWFsaXplX3N0cmluZyhzdHJ1Y3QgZmlsZSogZmlsZSwgY2hh
cioqIHN0ciwgX191MTYqIHN0cl9sZW5ndGgpOwpzdGF0aWMgaW50IGRlc2VyaWFsaXplX21weihz
dHJ1Y3QgZmlsZSogZmlsZSwgbXB6X3QgbnVtKTsKc3RhdGljIGludCBzZXJpYWxpemVfc3RyaW5n
KHN0cnVjdCBmaWxlKiBmaWxlLCBjaGFyKiBzdHIsIF9fdTE2IHN0cl9sZW5ndGgpOwpzdGF0aWMg
aW50IHNlcmlhbGl6ZV9tcHooc3RydWN0IGZpbGUqIGZpbGUsIG1wel90IG51bSk7CgoKLyogCiAq
IFdlaXJkIGFuZCB3b25kZXJmdWwgY3BwLWhhY2tzLgogKiBQdXJwb3NlIG9mIHRoZXNlPyBUbyBt
YWtlIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBkZXNlcmlhbGl6YXRpb24gcm91dGluZQogKiBhcyBl
YXN5IGFzIHBvc3NpYmxlLgogKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBNQUNSTy1IQUNL
UyBTVEFSVFMgSEVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBURVNUX0VSUihlcnJfY29k
ZSwgZXhfbGVuZ3RoLCBlcnJfbGFiZWwsIGVycl9uZXdfdmFsKSBcCmRvIHsgaWYoZXJyX2NvZGUg
PCBleF9sZW5ndGgpIHsgZ290byBlcnJfbGFiZWw7IGVycl9jb2RlID0gZXJyX25ld192YWw7IH0g
fSB3aGlsZSgwKQoKdHlwZWRlZiBpbnQgKCpkZXNlcmlhbGl6ZXJfdCkoZWFjX3RzaV9saXN0X2l0
ZW1fdCoqLCBzdHJ1Y3QgZmlsZSopOwoKI2RlZmluZSBERVNFUklBTElaRVJfTkFNRShtYWosIG1p
biwgdW1haiwgdW1pbikgXApkZXNlcmlhbGl6ZXJfIyNtYWojI18jI21pbiMjX18jI3VtYWojI18j
I3VtaW4KCiNkZWZpbmUgREVTRVJJQUxJWkVSKG1haiwgbWluLCB1bWFqLCB1bWluKSAJCQkJCQkJ
XAppbnQgZGVzZXJpYWxpemVyXyMjbWFqIyNfIyNtaW4jI19fIyN1bWFqIyNfIyN1bWluKGVhY190
c2lfbGlzdF9pdGVtX3QqKiBwcGl0ZW0sIFwKc3RydWN0IGZpbGUqIGZpbGUpCgojZGVmaW5lIEVO
VFJZKGZyb21fbWFqLCBmcm9tX21pbiwgdXB0b19tYWosIHVwdG9fbWluKSAJICAgICAgICAgICAg
XAp7IE1LX1ZFUihmcm9tX21haiwgZnJvbV9taW4pLCBNS19WRVIodXB0b19tYWosIHVwdG9fbWlu
KSwgICAgICAgICAgIFwKICBERVNFUklBTElaRVJfTkFNRShmcm9tX21haiwgZnJvbV9taW4sIHVw
dG9fbWFqLCB1cHRvX21pbikgfQoKI2RlZmluZSBOVUxMX0VOVFJZICAgICAgeyBNS19WRVIoMCwg
MCksIE1LX1ZFUigwLCAwKSwgTlVMTCB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIE1BQ1JP
LUhBQ0tTIEVORFMgSEVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qIERlc2VyaWFsaXplciBm
b3IgdmVyc2lvbiAoMCwgMSkgPD0geCA8ICgwLCAyKQogKi8Kc3RhdGljIERFU0VSSUFMSVpFUigw
LCAxLCAwLCAyKTsKCnN0YXRpYyBzdHJ1Y3QgewoJX191MTYJCQkJZnJvbV92ZXJzaW9uOwoJX191
MTYJCQkJdXB0b192ZXJzaW9uOwoJZGVzZXJpYWxpemVyX3QJCWRlc2VyaWFsaXplcjsKfSBkZXNl
cmlhbGl6ZXJzW10gPSB7CglFTlRSWSgwLCAxLCAwLCAyKSwKCU5VTExfRU5UUlkgICAgICAgICAg
ICAgICAgICAgICAgIC8qIE1VU1QgQkUgTEFTVCAqLwp9OwoKCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLyogV0FSTklORyEgQUxMIChERSlTRVJJQUxJWkFUSU9OIEZVTkNUSU9OUyBBU1NVTUUgRlMg
PSBLRVJORUxfRFMhISEgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBTZXJp
YWxpemVyIGZvciB2ZXJzaW9uICgwLCAxKSA8PSB4IDwgKDAsIDIpCiAqLwpzdGF0aWMgREVTRVJJ
QUxJWkVSKDAsIDEsIDAsIDIpCnsKCWludAkJCQkJZXJyID0gMDsKCV9fdTE2CQkJCWlkX2xlbmd0
aDsKCWNoYXIqCQkJCWlkOwoJbXB6X3QJCQkJbjsKCW1wel90CQkJCWU7CgoJbXB6X2luaXQobik7
CgltcHpfaW5pdChlKTsKCglpZigoZXJyID0gZGVzZXJpYWxpemVfc3RyaW5nKGZpbGUsICZpZCwg
JmlkX2xlbmd0aCkpIDwgMCkKCQlnb3RvIGVycm9yX291dDsKCglpZigoZXJyID0gZGVzZXJpYWxp
emVfbXB6KGZpbGUsIG4pKSA8IDApCgkJZ290byBlcnJvcl9vdXQ7CgkKCWlmKChlcnIgPSBkZXNl
cmlhbGl6ZV9tcHooZmlsZSwgZSkpIDwgMCkKCQlnb3RvIGVycm9yX291dDsKCgkqcHBpdGVtID0g
ZWFjX3RzaV9pdGVtX2NyZWF0ZShpZCwgaWRfbGVuZ3RoLCBuLCBlKTsKCWlmKE5VTEwgPT0gKnBw
aXRlbSkKCQllcnIgPSAtUlNCQUNfRU5PTUVNOwoJZWxzZQoJCWVyciA9IDA7IC8qIFN1Y2Nlc3Mh
ICovCiBlcnJvcl9vdXQ6CgltcHpfY2xlYXIobik7CgltcHpfY2xlYXIoZSk7CglyZXR1cm4gZXJy
Owp9CgovKgogKiBEZXNlcmlhbGl6ZXMgYSBzdHJpbmcsIHdoZXJlIGEgc3RyaW5nIGlzIChfX3Ux
NiBsZW4sIGNoYXIgc3Rye2xlbn0pCiAqLwpzdGF0aWMgaW50IApkZXNlcmlhbGl6ZV9zdHJpbmco
c3RydWN0IGZpbGUqIGZpbGUsIGNoYXIqKiBzdHIsIF9fdTE2KiBzdHJfbGVuZ3RoKQp7CglpbnQJ
CQkJCWVyciA9IDA7CgoJKnN0ciA9IE5VTEw7CgoJZXJyID0gZmlsZS0+Zl9vcC0+cmVhZChmaWxl
LCAoY2hhciopc3RyX2xlbmd0aCwgc2l6ZW9mKF9fdTE2KSwgJmZpbGUtPmZfcG9zKTsKCVRFU1Rf
RVJSKGVyciwgc2l6ZW9mKF9fdTE2KSwgZXJyb3Jfb3V0LCBlcnIpOwoKCWlmKE5VTEwgPT0gKCpz
dHIgPSBrbWFsbG9jKCpzdHJfbGVuZ3RoLCBHRlBfS0VSTkVMKSkpCgkJZ290byBlcnJvcl9vdXQ7
CgllcnIgPSBmaWxlLT5mX29wLT5yZWFkKGZpbGUsICpzdHIsICpzdHJfbGVuZ3RoLCAmZmlsZS0+
Zl9wb3MpOwoJVEVTVF9FUlIoZXJyLCAoaW50KSpzdHJfbGVuZ3RoLCBlcnJvcl9vdXQsIGVycik7
CgkKCQogZXJyb3Jfb3V0OgoJaWYoZXJyIDwgMCAmJiBOVUxMICE9ICpzdHIpCgkJa2ZyZWUoKnN0
cik7CgkKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyBpbnQgCnNlcmlhbGl6ZV9zdHJpbmcoc3RydWN0
IGZpbGUqIGZpbGUsIGNoYXIqIHN0ciwgX191MTYgc3RyX2xlbmd0aCkKewoJaW50CQkJCQllcnIg
PSAwOwoKCWVyciA9IGZpbGUtPmZfb3AtPndyaXRlKGZpbGUsIChjb25zdCBjaGFyKikmc3RyX2xl
bmd0aCwgCgkJCQkJCQlzaXplb2YoX191MTYpLCAmZmlsZS0+Zl9wb3MpOwoJVEVTVF9FUlIoZXJy
LCBzaXplb2YoX191MTYpLCBlcnJvcl9vdXQsIGVycik7CgoJZXJyID0gZmlsZS0+Zl9vcC0+d3Jp
dGUoZmlsZSwgc3RyLCBzdHJfbGVuZ3RoLCAmZmlsZS0+Zl9wb3MpOwoJVEVTVF9FUlIoZXJyLCBz
dHJfbGVuZ3RoLCBlcnJvcl9vdXQsIGVycik7CgoJZXJyID0gMDsgLyogU3VjY2VzcyEgKi8KCiBl
cnJvcl9vdXQ6CglyZXR1cm4gZXJyOwp9CgoKLyoKICogRGVzZXJpYWxpemVzIGFuIG1wei4gVXNl
cyB0aGUgbXB6LWludGVybmFsIGZvcm1hdC4KICovCnN0YXRpYyBpbnQgCmRlc2VyaWFsaXplX21w
eihzdHJ1Y3QgZmlsZSogZmlsZSwgbXB6X3QgbnVtKQp7CgljaGFyKgkJdG1wX21lbSA9IE5VTEw7
CglfX3UzMgkJbnVtX2xlbjsKCWludAkJCWVyciA9IDA7CgoJZXJyID0gZmlsZS0+Zl9vcC0+cmVh
ZChmaWxlLCAoY2hhciopJm51bV9sZW4sIHNpemVvZihfX3UzMiksICZmaWxlLT5mX3Bvcyk7CglU
RVNUX0VSUihlcnIsIHNpemVvZihfX3UzMiksIGVycm9yX291dCwgZXJyKTsKCQoJaWYoTlVMTCA9
PSAodG1wX21lbSA9IGttYWxsb2MobnVtX2xlbiwgR0ZQX0tFUk5FTCkpKSB7CgkJZXJyID0gLVJT
QkFDX0VOT01FTTsKCQlnb3RvIGVycm9yX291dDsKCX0KCgllcnIgPSBmaWxlLT5mX29wLT5yZWFk
KGZpbGUsIHRtcF9tZW0sIG51bV9sZW4sICZmaWxlLT5mX3Bvcyk7CglURVNUX0VSUihlcnIsIG51
bV9sZW4sIGVycm9yX291dCwgZXJyKTsKCQoJbXB6X2Rlc2VyaWFsaXplKG51bSwgdG1wX21lbSwg
bnVtX2xlbik7CgllcnIgPSAwOyAvKiBTdWNjZXNzICovCgogZXJyb3Jfb3V0OgoJaWYoTlVMTCAh
PSB0bXBfbWVtKQoJCWtmcmVlKHRtcF9tZW0pOwoKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyBpbnQg
CnNlcmlhbGl6ZV9tcHooc3RydWN0IGZpbGUqIGZpbGUsIG1wel90IG51bSkKewoJY2hhcioJCXRt
cF9tZW0gPSBOVUxMOwoJX191MzIJCW51bV9sZW47CglpbnQJCQllcnIgPSAwOwoJc2l6ZV90CQlz
aXplOwoKCWlmKE5VTEwgPT0gKHRtcF9tZW0gPSBrbWFsbG9jKFRNUF9NRU1fU0laRSwgR0ZQX0tF
Uk5FTCkpKSB7CgkJZXJyID0gLVJTQkFDX0VOT01FTTsKCQlnb3RvIGVycm9yX291dDsKCX0KCglp
Zigoc2l6ZSA9IG1wel9zZXJpYWxpemUobnVtLCB0bXBfbWVtLCBUTVBfTUVNX1NJWkUpKSA8IDAp
IHsKCQllcnIgPSAtUlNCQUNfRU5PTUVNOwoJCWdvdG8gZXJyb3Jfb3V0OwoJfQoKCW51bV9sZW4g
PSAoX191MzIpc2l6ZTsKCWVyciA9IGZpbGUtPmZfb3AtPndyaXRlKGZpbGUsIChjb25zdCBjaGFy
KikmbnVtX2xlbiwgCgkJCQkJCQlzaXplb2YoX191MzIpLCAmZmlsZS0+Zl9wb3MpOwoJVEVTVF9F
UlIoZXJyLCBzaXplb2YoX191MzIpLCBlcnJvcl9vdXQsIGVycik7CgoJZXJyID0gZmlsZS0+Zl9v
cC0+d3JpdGUoZmlsZSwgdG1wX21lbSwgc2l6ZSwgJmZpbGUtPmZfcG9zKTsKCVRFU1RfRVJSKGVy
ciwgc2l6ZSwgZXJyb3Jfb3V0LCBlcnIpOwoKCWVyciA9IDA7IC8qIFN1Y2Nlc3MhICovCgogZXJy
b3Jfb3V0OgoJaWYoTlVMTCAhPSB0bXBfbWVtKQoJCWtmcmVlKHRtcF9tZW0pOwoKCXJldHVybiBl
cnI7Cn0KCi8qCiAqIERpc3BhdGNoZXMgdGhlIGRlc2VyaWFsaXphdGlvbiB0byBhIGZ1bmN0aW9u
IHdoaWNoIGNhbgogKiBoYW5kbGUgdGhlIHZlcnNpb24gd2hpY2ggdGhlIGxpc3Qgd2FzIHNlcmlh
bGl6ZWQgd2l0aC4KICovCnN0YXRpYyBpbnQKZGlzcGF0Y2hfZGVzZXJpYWxpemF0aW9uKF9fdTE2
CQkJCQl2ZXJzaW9uLCAKCQkJCQkJIF9fdTMyCQkJCQlsaXN0X2xlbiwgCgkJCQkJCSBlYWNfdHNp
X2xpc3RfaGVhZF90Kgl0c2lfZGIsIAoJCQkJCQkgc3RydWN0IGZpbGUqCQkJZmlsZSkKewoJX191
MzIJCQkJCQkJCWk7CglkZXNlcmlhbGl6ZXJfdAkJCQkJCWRlc2VyOwoJZWFjX3RzaV9saXN0X2l0
ZW1fdCoJCQkJaXRlbTsKCWludAkJCQkJCQkJCWVycjsKCglkZXNlciA9IE5VTEw7Cglmb3IoaSA9
IDA7IGRlc2VyaWFsaXplcnNbaV0udXB0b192ZXJzaW9uICE9IE1LX1ZFUigwLCAwKTsgaSsrKSB7
CgkJLyoKCQkgKiBNYXRjaGluZyBkZXNlcmlhbGl6ZXIgZm9yIHRoaXMgVFNJIGRiLXZlcnNpb24K
CQkgKi8KCQlpZihWRVJfR1JFQVRFUl9PUl9FUVVBTCh2ZXJzaW9uLCBkZXNlcmlhbGl6ZXJzW2ld
LmZyb21fdmVyc2lvbikgJiYKCQkgICBWRVJfTEVTUyh2ZXJzaW9uLCBkZXNlcmlhbGl6ZXJzW2ld
LnVwdG9fdmVyc2lvbikpIHsKCQkJZGVzZXIgPSBkZXNlcmlhbGl6ZXJzW2ldLmRlc2VyaWFsaXpl
cjsKCQkJYnJlYWs7CgkJfQoJfQoJLyogV2UgZm91bmQgbm8gbWF0Y2hpbmcgZGVzZXJpYWxpemVy
IGZ1bmN0aW9uISAqLwoJaWYoTlVMTCA9PSBkZXNlcikKCQlyZXR1cm4gLVJTQkFDX0VSRUFERkFJ
TEVEOwoKI3dhcm5pbmcgIlhYWDogSW1wbGVtZW50IEJFVFRFUiBlcnJvciBoYW5kbGluZyBpbiBk
aXNwYXRjaF9kZXNlcmlhbGl6YXRpb24iCgoJZXJyID0gMDsKCWZvcihpID0gMDsgaSA8IGxpc3Rf
bGVuOyBpKyspIHsKCQlpZigoZXJyID0gZGVzZXIoJml0ZW0sIGZpbGUpKSA8IDApCgkJCWJyZWFr
OwoJCWVhY190c2lfYWRkX2l0ZW0odHNpX2RiLCBpdGVtLCBET05UX0xPQ0spOwoJfQoKCWlmKGVy
ciA8IDApCgkJcmV0dXJuIGVycjsKCWVsc2UKCQlyZXR1cm4gMTsgLyogMSBsaXN0IHJlYWQgKi8K
fQoKLyoKICogUmVhZHMgVFNJIGluZm9ybWF0aW9uIGZyb20gZGlzay4KICogV2lsbCBmYWlsIGlm
IHRoZSB0c2lfZGIgbGlzdCBpcyBub3QgZW1wdHkhCiAqIFJldHVybiB2YWx1ZSBpcyBhIC1FeHh4
IGNvZGUgb24gZmFpbHVyZSwgIG9yIGEgcG9zaXRpdmUgbnVtYmVyCiAqIG9mIGxpc3RzIHJlYWQg
ZnJvbSBkaXNrICh0eXBpY2FsbHkgMSkKICogCiAqIFRoaXMgZnVuY3Rpb24gcnctbG9ja3MgdGhl
IHRzaV9kYiBsb2NrX2xpc3QgaWZmIHRoZSBsb2NrIGFyZ3VtZW50CiAqIGlzIG5vbi16ZXJvLiAK
ICogCiAqIExvY2tzIHRoZSBrZXJuZWwgaWYgbG9ja19rZXJuIGlzIG5vbi16ZXJvCiAqLwppbnQK
ZWFjX3RzaV9yZWFkX2FjaShlYWNfdHNpX2xpc3RfaGVhZF90Kgl0c2lfZGIsIAoJCQkJIGNvbnN0
IGludAkJCQlsb2NrX2xpc3QsIAoJCQkJIGNvbnN0IGludAkJCQlsb2NrX2tlcm4pCnsKCWludAkJ
CQkJCQllcnIgPSAwOwoJc3RydWN0IGZpbGUJCQkJCWZpbGU7Cgl1X2xvbmcJCQkJCQlsb2NrX2Zs
YWdzOwoJbW1fc2VnbWVudF90CQkJCW9sZGZzOwoJaW50CQkJCQkJCWZpbGVfb3BlbmVkID0gMDsK
CV9fdTE2CQkJCQkJdmVyc2lvbjsKCV9fdTMyCQkJCQkJbGlzdF9sZW47CgoJaWYobG9ja19rZXJu
KQoJCWxvY2tfa2VybmVsKCk7CglpZihsb2NrX2xpc3QpCgkJcnNiYWNfd3JpdGVfbG9jaygmdHNp
X2RiLT5sb2NrLCAmbG9ja19mbGFncyk7Cglkb3duKCZyc2JhY193cml0ZV9zZW0pOwoKCWVyciA9
IHJzYmFjX3JlYWRfb3BlbihFQUNfQklOVkVSX0FDSV9GSUxFTkFNRSwKCQkJCQkJICAmZmlsZSwK
CQkJCQkJICByc2JhY19yb290X2Rldik7CgoJaWYoZXJyIDwgMCkgewoJCWVyciA9IC1FTk9FTlQ7
CgkJZ290byBlcnJvcl9vdXQ7Cgl9CgoJZmlsZV9vcGVuZWQgPSAxOwoKCW9sZGZzID0gZ2V0X2Zz
KCk7CglzZXRfZnMoS0VSTkVMX0RTKTsKCgllcnIgPSBmaWxlLmZfb3AtPnJlYWQoJmZpbGUsIChj
aGFyKikmdmVyc2lvbiwgCgkJCQkJCSAgc2l6ZW9mKF9fdTE2KSwgJmZpbGUuZl9wb3MpOwoJVEVT
VF9FUlIoZXJyLCBzaXplb2YoX191MTYpLCBlcnJvcl9vdXQsIC1SU0JBQ19FUkVBREZBSUxFRCk7
CgkKCWVyciA9IGZpbGUuZl9vcC0+cmVhZCgmZmlsZSwgKGNoYXIqKSZsaXN0X2xlbiwgCgkJCQkJ
CSAgIHNpemVvZihfX3UzMiksICZmaWxlLmZfcG9zKTsKCVRFU1RfRVJSKGVyciwgc2l6ZW9mKF9f
dTMyKSwgZXJyb3Jfb3V0LCAtUlNCQUNfRVJFQURGQUlMRUQpOwoKCWVyciA9IGRpc3BhdGNoX2Rl
c2VyaWFsaXphdGlvbih2ZXJzaW9uLCBsaXN0X2xlbiwgdHNpX2RiLCAmZmlsZSk7CgkKIGVycm9y
X291dDoKCglzZXRfZnMob2xkZnMpOwoJaWYoZmlsZV9vcGVuZWQpCgkJcnNiYWNfcmVhZF9jbG9z
ZSgmZmlsZSk7Cgl1cCgmcnNiYWNfd3JpdGVfc2VtKTsKCWlmKGxvY2tfbGlzdCkKCQlyc2JhY193
cml0ZV91bmxvY2soJnRzaV9kYi0+bG9jaywgJmxvY2tfZmxhZ3MpOwoJaWYobG9ja19rZXJuKQoJ
CXVubG9ja19rZXJuZWwoKTsKCQoJcmV0dXJuIGVycjsKfQoKLyoKICogRmx1c2hlcyBUU0kgaW5m
b3JtYXRpb24gdG8gZGlzay4KICogUmV0dXJuIHZhbHVlIGlzIGEgLUV4eHggY29kZSBvbiBmYWls
dXJlLCBvciBhIHBvc2l0aXZlIG51bWJlcgogKiBvZiBsaXN0cyB3cml0dGVuIHRvIGRpc2sgKHR5
cGljYWxseSAxKQogKiAKICogVGhpcyBmdW5jdGlvbiByLWxvY2tzIHRoZSB0c2lfZGIgbGlzdCBp
ZmYgdGhlIGxvY2tfbGlzdCBhcmd1bWVudCBpcwogKiBub24temVyby4KICogCiAqIExvY2tzIHRo
ZSBrZXJuZWwgaWYgbG9ja19rZXJuIGlzIG5vbi16ZXJvCiAqLwppbnQKZWFjX3RzaV9mbHVzaF9h
Y2koZWFjX3RzaV9saXN0X2hlYWRfdCoJdHNpX2RiLCAKCQkJCSAgY29uc3QgaW50CQkJCWxvY2tf
bGlzdCwgCgkJCQkgIGNvbnN0IGludAkJCQlsb2NrX2tlcm4pCnsKICAgIGludAkJCQkJCQllcnIg
PSAwOwoJc3RydWN0IGZpbGUJCQkJCWZpbGU7Cgl1X2xvbmcJCQkJCQlsb2NrX2ZsYWdzOwoJZWFj
X3RzaV9saXN0X2l0ZW1fdCoJCWl0ZW07CgltbV9zZWdtZW50X3QJCQkJb2xkZnM7CglpbnQJCQkJ
CQkJZmlsZV9vcGVuZWQgPSAwOwoKCgkvKiBEbyBzb21lIGxvY2tpbmcgKi8KCWlmKGxvY2tfa2Vy
bikKCQlsb2NrX2tlcm5lbCgpOwoKCWlmKGxvY2tfbGlzdCkKCQlyc2JhY19yZWFkX2xvY2soJnRz
aV9kYi0+bG9jaywgJmxvY2tfZmxhZ3MpOwoKCWRvd24oJnJzYmFjX3dyaXRlX3NlbSk7CgoJLyog
T3BlbiBBQ0kgZmlsZSAqLwoJZXJyID0gcnNiYWNfd3JpdGVfb3BlbihFQUNfQklOVkVSX0FDSV9G
SUxFTkFNRSwgCgkJCQkJCSAgICZmaWxlLAoJCQkJCQkgICByc2JhY19yb290X2Rldik7CglpZihl
cnIgPCAwKQoJCWdvdG8gZXJyb3Jfb3V0OwoKCWZpbGVfb3BlbmVkID0gMTsKCQoJLyogZmlsZW9w
cyBkb2VzIHN0dWZmIHRvIHVzZXIgc3BhY2UgYnkgZGVmYXVsdC4KCSAqIExldHMgbWFrZSBmcyBw
b2ludCB0byBrZXJuZWwgZHMhCgkgKi8KCW9sZGZzID0gZ2V0X2ZzKCk7CglzZXRfZnMoS0VSTkVM
X0RTKTsKCgkvKiBEbyBzb21lIHdvcmsuLi4gKi8KCS8qIFdyaXRlIHZlcnNpb24gbnVtYmVyICov
CgllcnIgPSBmaWxlLmZfb3AtPndyaXRlKCZmaWxlLCAoY29uc3QgY2hhciopJmVhY19iaW52ZXJf
dmVyc2lvbiwgCgkJCQkJCSAgIHNpemVvZihfX3UxNiksICZmaWxlLmZfcG9zKTsKCVRFU1RfRVJS
KGVyciwgc2l6ZW9mKF9fdTE2KSwgZXJyb3Jfb3V0LCAtUlNCQUNfRVdSSVRFRkFJTEVEKTsKCgkv
KiBXcml0ZSBsaXN0IGxlbmd0aCAqLwoJZXJyID0gZmlsZS5mX29wLT53cml0ZSgmZmlsZSwgKGNv
bnN0IGNoYXIqKSZ0c2lfZGItPmxlbmd0aCwgCgkJCQkJCSAgIHNpemVvZihfX3UzMiksICZmaWxl
LmZfcG9zKTsKCVRFU1RfRVJSKGVyciwgc2l6ZW9mKF9fdTMyKSwgZXJyb3Jfb3V0LCAtUlNCQUNf
RVdSSVRFRkFJTEVEKTsKCgllcnIgPSAwOwoJZm9yKGl0ZW0gPSB0c2lfZGItPmhlYWQ7IGl0ZW0g
IT0gTlVMTDsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKCQkvKiBXcml0ZSBpZCBsZW5ndGgsIGlkICov
CgkJaWYoKGVyciA9IHNlcmlhbGl6ZV9zdHJpbmcoJmZpbGUsIGl0ZW0tPmlkLCBpdGVtLT5pZF9s
ZW5ndGgpKSA8IDApIHsKCQkJZXJyID0gLVJTQkFDX0VXUklURUZBSUxFRDsKCQkJZ290byBlcnJv
cl9vdXQ7CgkJfQoKCQlpZigoZXJyID0gc2VyaWFsaXplX21weigmZmlsZSwgaXRlbS0+bikpIDwg
MCkgewoJCQllcnIgPSAtUlNCQUNfRVdSSVRFRkFJTEVEOwoJCQlnb3RvIGVycm9yX291dDsKCQl9
CgoJCWlmKChlcnIgPSBzZXJpYWxpemVfbXB6KCZmaWxlLCBpdGVtLT5lKSkgPCAwKSB7CgkJCWVy
ciA9IC1SU0JBQ19FV1JJVEVGQUlMRUQ7CgkJCWdvdG8gZXJyb3Jfb3V0OwoJCX0KCX0KCgllcnIg
PSAxOyAvKiAxIGxpc3Qgd3JpdHRlbiAqLwogZXJyb3Jfb3V0OgoJCglzZXRfZnMob2xkZnMpOwoJ
CgkvKiBDbG9zZSBBQ0kgZmlsZSAqLwoJaWYoZmlsZV9vcGVuZWQpCgkJcnNiYWNfd3JpdGVfY2xv
c2UoJmZpbGUpOwoKCXVwKCZyc2JhY193cml0ZV9zZW0pOwoKCWlmKGxvY2tfbGlzdCkKCQlyc2Jh
Y19yZWFkX3VubG9jaygmdHNpX2RiLT5sb2NrLCAmbG9ja19mbGFncyk7CgkKCWlmKGxvY2tfa2Vy
bikKCQl1bmxvY2tfa2VybmVsKCk7CiAgICByZXR1cm4gZXJyOwp9Cg==

--------------Boundary-00=_SSFPHCHTWLWMSTPJ6Y85--
-
To unsubscribe from the rsbac list, send a mail to
majordomo@rsbac.org with
unsubscribe rsbac
as single line in the body.

Next Article (by Subject): Re: The ultimate ACI-interface? Amon Ott
Previous Article (by Subject): temporary patch homepage Jörgen Sigvardsson
Next in Thread: Re: The ultimate ACI-interface? Amon Ott
Articles sorted by: [Date] [Author] [Subject]


Go to Compuniverse LWGate Home Page.