Deviations from the design

The list of deviations is sorted according to the design document for the ease of usage, and most of the deviations relate to some specific sub-sections in it.

·        No (optional) recording mechanism is implemented for this version. (2.8)

·        An installer was added.

·        We discovered limitations of the XML::Simple parser – it does not support saving Hebrew characters. This required changes in the database to support saving data in Hebrew (and also limits the configuration files). (3.3)

·        We don't use the Algorithm::Diff module. Instead, we implement our own differences check. (3.3)

·        The messenger does not split large messages to smaller ones (there's a limited number of messages that can be sent, and we don't want one big message to split over many SMSs). (4.3)

·        We found a bug in sendsms and fixed it (Hebrew didn't work with Cellcom). In addition we sent an update to Nadav Har'El – author of the sendsms script (and thus we have participated in another Open Source Project). The format of the switch we added to sendsms was also changed due to the limitations of parseargs which is what sendsms uses to parse the arguments. We didn't want to make big changes there, hoping Nadav will accept what we did and update it on his site (we are still waiting for his reply). (4.3.1)

·        sendmail.pl also does authentication. (4.3.2)

·        The SiteSeer function receives two parameters. In addition to the optional parameter mentioned in the design (a Kamajii::Conf::System object, which is opened for reading), it also receives a $sys_password argument – Kamajii password for encryption/decryption of the database and private key files. (4.4)

·        No need for signal handling in the scheduler since no special cleanup has to take place when Kamajii goes down. (4.5)

·        The private key is encrypted with Blowfish, not Triple DES. (5.1.1)

·        No user password validation is done. We cannot authenticate a user's password by encrypting it with the public key and then comparing it to user.key, due to the fact the RSA modules create different outputs (yet decipherable using the private key!) for each encryption. They probably do that in order to avoid password guessing by malicious users. Anyway, the result is that if the password argument passed to the relevant functions is not of type private key, we assume it to be the correct user plain password. If it is not the correct password, the user configuration file will not open due to an error. (5.1.3)

·        Two exported functions were added to the Kamajii::Conf::System module:

o       is_open – A function which checks if the configuration file was opened successfully.

o       get_error – A function which returns the last error message that happened on this object. (5.2.1)

·        Five additional exported functions were added to the Kamajii::Conf::User module:

o       is_open – A function which checks if the configuration file was opened successfully.

o       get_error – A function which returns the last error message that happened on this object.

o       get_password – A function which retrieves the password of a given user from user.key.

o       write_user_key – A function which writes user.key (after encrypting the user password with system public key)

o       create_new – A function which creates a new user. (5.2.3)

·        The prototypes of Kamajii::Conf::User::Save and Kamajii::Conf::User::Close were changed, so that the public key argument was canceled (The encryption of the file is done with Triple DES, and thus there is no need for the RSA public key here). (5.2.3.2, 5.2.3.3)

·        Two additional exported functions were added to the Kamajii::Conf::Site module:

o       is_open – A function which checks if the configuration file was opened successfully.

o       get_error – A function which returns the last error message that happened on this object.

·        The prototype of Kamajii::Conf::Site::Open was changed, so that the function now receives four parameters:

o       $site_name – The name of the requested site XML file.

o       $sites_dir_tree – A user or system tree object containing the location of the sites directory.

o       $user_name (optional): The name of the requested user.

o       $write – If it is defined, the file is opened for writing. (5.2.4.1)

·        Kamajii::Conf::Site::open must get as first argument, the site's name including the suffix .xml. (5.2.4.1)

·        Kamajii::Conf::Site::open searches for the site EITHER in the system directory (if no user_name parameter is passed), or in the user sites directory (if a user name parameter is passed). However, in SiteSeer.pm the function __open_site_conf makes sure that if the site is not found in user directory (where it is first searched), it will be searched in the system directory. Within the GUI, the site is anyway searched either in the user directory, or in the system directory, so the behavior is ok. (5.2.4.1)

·        The prototype of Kamajii::Conf::Site::save was changed, so that the function now receives four parameters:

o       $self – package object

o       $site_name - The name of the destination file.

o       $sites_dir_tree (optional) – A user or system tree object containing the location of the sites directory, where the file should be save to. This argument can be used for instance in order to save a site configuration file which is defined in one user A directory, to user B directory.

o       $user_name (optional): The name of the requested user. If this parameter is not passed, the site is saved in the system site directory. (5.2.4.3)

·        There are no "Restart Kamajii" and "Stop Kamajii" options in the GUI, due to difficulties in performing the windows equivalent to 'ps' command. These options will be added in future versions. (5.3.3)

·        We removed user-defined "sites" directory (for the GUI to be able to know where the user sites are without having the passwords of these users). (5.8.4.1)

·        We don't the run_foreach tag since it is redundant. If a parameter is actually a list, we just loop over the list. (5.8.5.2.4)

·        We removed the "modify" page-parameters. These parameters are not needed since when dealing with tables (where HTML entities are not desired), we use HTML::Parser which does the entities decoding job for us, whereas in the case of parameters of type "regex", we can rule out these entities by a smart usage of parentheses. (5.8.5.2.4)

·        Regarding the diff elements, we have slightly changed the semantics of newA, newB and change. The new definition, taken from our web site is:

o       Check For: Must be one of:

§         newA - Only valid when A and B are lists or tables. Alerts on new rows  in A that do not exist in B.

§         newB - Only valid when A and B are lists or tables. Alerts on new rows in B that do not exist in A.

§         change - If A and B are scalars (strings or numbers), alerts when they are different. If they are lists or tables their length should be the same, and Kamajii will alert when a row in A does not match the row of the same index in B.