NetGear GS716T

I've recently worked with a pair of NetGear GS716T switches and want to warn everyone off from buying these switches. While the price is pretty low and performance is very good, the feature-set is entirely bogus. NetGear advertises these as "smart" switches with VLAN, SNMP, etc... Only all these features are useless as the web interface to configure the switch simply doesn't work and no command line interface (via either telnet or SSH) is provided. If you attempt to configure the switch from FireFox you will be constantly prompted for the password, and you can't actually get past that to make any configuration changes. On the other hand, if you use IE6 you can sign in to the switch but the interface is extremely unstable. On one switch I was unable to even set an IP address, upon clicking "Apply" it would close the browser and revert to using the address it acquired via DHCP. On the other switch it took the IP address but attempting to configure port based VLANs resulted in erratic behavior ranging from hanging, to displaying raw HTML, to renaming all the other VLANs and removing all the ports assigned to other VLANs. The administrative interface of the NetGear GS716T is simply unacceptable; NetGear has clearly not performed even a minimum of quality-control or testing on the GS716T.


OpenGroupware & PostgreSQL 8.3

PostgreSQL 8.3 not longer performs automatic casting of INT to TEXT when INTs are compared to character types. This change is documented in the release notes. This change causes a database exception to occur in OpenGroupare's ACL processing. The specific error is:

ERROR: IN types character varying and integer cannot be matched

ACL queries like the following cause the exception because they contain a condition that compares string value to an array of integers: auth_id IN ( 9981, 9991,... where auth_id is a VARCHAR(255) value.

A full ACL query might look like:

SELECT DISTINCT B.company_id FROM person AS B WHERE (( ( B.firstname ILIKE '%%yser%%' ) OR ( B.name ILIKE '%%yser%%' ) )) AND (( B.owner_id = 10100 ) OR ( ( B.is_private = 0 OR B.is_private IS NULL ) AND ( ( 0 = ( SELECT COUNT(*) FROM object_acl WHERE object_id = B.company_id ) OR 0 < ( SELECT COUNT(*) FROM object_acl WHERE object_id = B.company_id AND action = 'allowed' AND permissions LIKE '%r%' AND ( auth_id = 10100 OR auth_id IN ( 9981, 9991, 10003, 11530, 55000, 77210, 142730, 142780, 142850, 393280, 423400, 445160, 949410, 949540, 955770, 970730, 970990, 1096320, 9153790, 9153880, 9154000, 10597021, 10735169 ) ) ) ) ) )) AND (B.is_template_user IS NULL OR B.is_template_user = 0) AND (B.db_status <> 'archived') LIMIT 50

The solution to this problem is to modify the schema of the object_acl table so that the values are integer types; this is possible since the auth_id and object_id only store object ids, which are integers, regardless of the fact that the field type was VARCHAR(255). Originally it was thought that some other values might be used in ACL processing, such as LDAP DNs, but only support for object ids exists and will exist in the forseable future.

The table can be modified using ALTER TABLE:

ALTER TABLE object_acl ALTER COLUMN object_id TYPE INT USING object_id::int;
ALTER TABLE object_acl ALTER COLUMN auth_id TYPE INT USING auth_id::int;

This change will be included as the official schema in OGo 5.4. With this change OpenGroupware should work without any issues in conjunction with PostgreSQL 8.3. The thread discussing this issue is available in the archive.


Cyrus IMAP and the Ampersand

An interesting thread has occurred on the Cyrus IMAPd mailing list regarding the lowly ampersand. Apparently in the encoding used by IMAP (a "modified UTF-7 encoding") the ampersand ("&") requires escaping. So it works fine to have subfolders whose name contains an ampersand as IMAP clients, of course, use the appropriate IMAP encoding. But if your username (internally the name of your INBOX) contains an ampersand you can run into trouble. this is because when the existence of the INBOX is checked the authentication request isn't necessarily encoded in the same way. So if you use an IMAP server user names should be kept in conformance with the IMAP encoding, or more simply, stick with the GOODCHARS defined in Cyrus' mboxname.c


Improvement to SOPE's PostgreSQL Adaptor

Do you have lots of errors like:

Feb 17 20:39:28 ogo-zidestore-1.5 [14569]: ERROR(+[NSCalendarDate(PostgreSQL72Values) valueFromCString:length:postgreSQLType:attribute:adaptorChannel:]): unexpected string '2007-03-13 15:38:41.420456+00' for date type 'DATE', returning now (expected format: '2001-07-26 14:00:00+02')

in your ZideStore error log? This is because the time & date parser in SOPE's PostreSQL adaptor didn't understand the milliseconds portion of the value. As of SOPE r1601 this should be corrected. SOPE now just ignores the millisecond value. See the diff for details.


LINQ Provider for db4o

Jb Evain has created LINQ provider for db4o. This could be potentially great for db4o developers as LINQ is [finally] an answer to the infernal "foreach...if". It is also a great example of the power of extension methods. These days it seems like every time I wish C# could do X, then an article about how X is already available magically appears on monologue.