Bug 457279 - Review Request: cerebro - Cerebro provides mesh network services and presence information
Review Request: cerebro - Cerebro provides mesh network services and presence...
Status: CLOSED DEFERRED
Product: Fedora
Classification: Fedora
Component: Package Review (Show other bugs)
rawhide
All Linux
medium Severity medium
: ---
: ---
Assigned To: Rakesh Pandit
Fedora Extras Quality Assurance
: Reopened
Depends On:
Blocks: FE-DEADREVIEW FedoraOLPCDelta
  Show dependency treegraph
 
Reported: 2008-07-30 12:30 EDT by Robin Norwood
Modified: 2013-10-19 10:42 EDT (History)
5 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2009-11-30 07:38:09 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
rpandit: fedora‑review+


Attachments (Terms of Use)

  None (edit)
Description Robin Norwood 2008-07-30 12:30:49 EDT
Spec URL: http://people.redhat.com/rnorwood/rpms/cerebro.spec
SRPM URL: http://people.redhat.com/rnorwood/rpms/cerebro-2.9.8-1.fc9.src.rpm
Description: Cerebro provides presence information, extends the mesh network to
regular 802.11b/g devices, allows sharing activities and provides an
effient data transport mechanism.
Comment 1 Polychronis Ypodimatopoulos 2008-07-30 22:44:57 EDT
Thank you for considering Cerebro. What Cerebro claims to do well is provide
presence information and data transport in a mobile mesh network.
Comment 2 Rakesh Pandit 2008-08-16 16:44:23 EDT
Expect a full review in few days:
 
rpmlint output:
[rpmbuild@rocky noarch]$ rp -i cerebro-2.9.8-1.fc9.noarch.rpm 
cerebro.noarch: W: conffile-without-noreplace-flag /etc/dbus-1/system.d/cerebro.conf
A configuration file is stored in your package without the noreplace flag. A
way to resolve this is to put the following in your SPEC file:
%config(noreplace) /etc/your_config_file_here

cerebro.noarch: W: service-default-enabled /etc/rc.d/init.d/cerebro
The service is enabled by default after "chkconfig --add"; for security
reasons, most services should not be. Use "-" as the default runlevel in the
init script's "chkconfig:" line and/or remove the "Default-Start:" LSB keyword
to fix this if appropriate for this service.

1 packages and 0 specfiles checked; 0 errors, 2 warnings.

Am waiting for koji to get up -- have too low bandwidth to set up mock or local mirror. :(
Comment 3 Polychronis Ypodimatopoulos 2008-08-17 21:38:11 EDT
Thanks for your comments.
Could you please propose how the spec file should be affected to incorporate your comments? I would very much appreciate this, thanks!

(In reply to comment #2)
> Expect a full review in few days:
> 
> rpmlint output:
> [rpmbuild@rocky noarch]$ rp -i cerebro-2.9.8-1.fc9.noarch.rpm 
> cerebro.noarch: W: conffile-without-noreplace-flag
> /etc/dbus-1/system.d/cerebro.conf
> A configuration file is stored in your package without the noreplace flag. A
> way to resolve this is to put the following in your SPEC file:
> %config(noreplace) /etc/your_config_file_here
> 
> cerebro.noarch: W: service-default-enabled /etc/rc.d/init.d/cerebro
> The service is enabled by default after "chkconfig --add"; for security
> reasons, most services should not be. Use "-" as the default runlevel in the
> init script's "chkconfig:" line and/or remove the "Default-Start:" LSB keyword
> to fix this if appropriate for this service.
> 
> 1 packages and 0 specfiles checked; 0 errors, 2 warnings.
> 
> Am waiting for koji to get up -- have too low bandwidth to set up mock or local
> mirror. :(
Comment 4 Robin Norwood 2008-08-18 11:06:48 EDT
Hi Polychronis,

Don't worry, I'll take care of the issues with the spec file, and let you know if I have any questions or need help.  I just Cc'ed you on the bug in case we run into trouble.

Rakesh,

Comments about your comments - 
conffile-without-noreplace-flag: dbus configs aren't really something that a normal user is going to edit - it doesn't make much sense to me to have (noreplace) on them, especially since, if the app changes the way it uses DBUS, having the configs not be updated on upgrade will break upgrades.  Do we have a standard for this already?

service-default-enabled: I don't mind to disable it by default, but since it's a network service, I would think it would be enabled by default, like NetworkManager.  What do you think?
Comment 5 Polychronis Ypodimatopoulos 2008-08-18 12:25:15 EDT
(In reply to comment #4)
> 
> service-default-enabled: I don't mind to disable it by default, but since it's
> a network service, I would think it would be enabled by default, like
> NetworkManager.  What do you think?

In the network that Cerebro creates, every node can not only communicate with others, but also update its own profile and receive updates for everyone else. While you are not running Cerebro, the user will miss those updates. If necessary, the user can go into "silent mode" and have Cerebro never transmit a single byte, while still receiving as much of the information that is being broadcasted anyway and would otherwise be dropped by the kernel (because there is no process listening for this type of data).

In conclusion, the user _might_ lose some potentially interesting information while not running Cerebro, but probably nothing to lose while running it.
Comment 6 Rakesh Pandit 2008-08-18 13:14:50 EDT
@Polychronis & @Robin

I am having some tough time with my system & will only be able to review as soon as infrastructure problems are solved. (koji or need to set up mock)

as said above hopefully in few days. Thanks.
Comment 7 Rakesh Pandit 2008-08-23 16:08:30 EDT
Review

Point is I could not start server for me at least on my machine. The init.d script seems to be very bad:

[rpmbuild@rocky cerebro]$ sudo /etc/init.d/cerebro start
Starting Cerebro:                                          [  OK  ]
[rpmbuild@rocky cerebro]$ cat: /sys/class/net/msh0/address: No such file or directory


I tried with :

[rpmbuild@rocky cerebro]$ cerebroui --help
master True
Error in sys.excepthook:
TypeError: print_exc() takes at most 2 arguments (3 given)

Original exception was:
Traceback (most recent call last):
  File "/usr/bin/cerebroui", line 1038, in <module>
    gui = GUI()
  File "/usr/bin/cerebroui", line 291, in __init__
    CerebroInterface.__init__(self, ATYPE)
  File "/usr/lib/python2.5/site-packages/cerebro/interface.py", line 58, in __init__
    self.signup()
  File "/usr/lib/python2.5/site-packages/cerebro/interface.py", line 62, in signup
    iface = bus.get_object('org.laptop.cerebro', '/org/laptop/cerebro')
  File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 244, in get_object
    follow_name_owner_changes=follow_name_owner_changes)
  File "/usr/lib/python2.5/site-packages/dbus/proxies.py", line 241, in __init__
    self._named_service = conn.activate_name_owner(bus_name)
  File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 183, in activate_name_owner
    self.start_service_by_name(bus_name)
  File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 281, in start_service_by_name
    'su', (bus_name, flags)))
  File "/usr/lib/python2.5/site-packages/dbus/connection.py", line 607, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.laptop.cerebro was not provided by any .service files
[rpmbuild@rocky cerebro]$ 

[rpmbuild@rocky cerebro]$ /etc/init.d/cerebro start
touch: cannot touch `/var/lock/subsys/cerebro': Permission denied ]

[rpmbuild@rocky cerebro]$ Error in sys.excepthook:
TypeError: print_exc() takes at most 2 arguments (3 given)

Original exception was:
Traceback (most recent call last):
  File "/usr/sbin/cerebro", line 1077, in <module>
    if __name__ == "__main__": main()
  File "/usr/sbin/cerebro", line 1054, in main
    sys.stdout = open("/var/log/cerebro", 'a')
IOError: [Errno 13] Permission denied: '/var/log/cerebro'


Does not look sane!!



Regarding 1) conf file i agree 2) keep it on by default will be okay.

rpmlint(rp => rpmlint):
[rpmbuild@rocky noarch]$ rp -i cerebro-2.9.8-1.fc9.noarch.rpm 
cerebro.noarch: W: conffile-without-noreplace-flag /etc/dbus-1/system.d/cerebro.conf
A configuration file is stored in your package without the noreplace flag. A
way to resolve this is to put the following in your SPEC file:
%config(noreplace) /etc/your_config_file_here

*I agree with you here. It does not seem to be logical for putting a noreplace on it.*

cerebro.noarch: W: service-default-enabled /etc/rc.d/init.d/cerebro
The service is enabled by default after "chkconfig --add"; for security
reasons, most services should not be. Use "-" as the default runlevel in the
init script's "chkconfig:" line and/or remove the "Default-Start:" LSB keyword
to fix this if appropriate for this service.

*you can ignore it*

1 packages and 0 specfiles checked; 0 errors, 2 warnings. 


Build successfully:
http://koji.fedoraproject.org/koji/taskinfo?taskID=781524

Required:
[x] Name -- 
[!] License -- License seems to be GPLv2+ as I can check from COPYING & src 
[x] Spec file is in American Eng and legible
[x] Build successfully
[x] BuildRequires 
[x] Duplicate files - nil
[NA] locale
[x] permissions -- okay
[x]  source link correct
[x] packaging guidlines
[x] Buildroot correct
[x] owns every directory it creates
[x] file encoding - checked
[x] package has no dependency on files in %doc
[x] gui
[x] No dependencies outside FHS guidelines
[x] md5sum
Source from site: 4402c421790fcb13a942f01815145413
Source from srpm: 4402c421790fcb13a942f01815145413
[x] np .pyc files in %{_bindir}
[x] .egg taken care


Optional suggestions:
a. if you are still to report upstream about the missing shebang --
then may be you would like to inform.

Key NA = N/A, x = Check, ! = Problem, ? = Not evaluated


In short:
may be you need to work on making application get to usable level in sane way first, then there is license issue.
Comment 8 Polychronis Ypodimatopoulos 2008-08-23 16:32:56 EDT
(In reply to comment #7)
> Review
> 
> Point is I could not start server for me at least on my machine. The init.d
> script seems to be very bad:

Yes it is. I 'll get back with a better one.


> I tried with :
> 
> [rpmbuild@rocky cerebro]$ cerebroui --help

cerebroui is intended to be used as a sample application for cerebro, but should be executed while cerebro is running.

> master True
> Error in sys.excepthook:
> TypeError: print_exc() takes at most 2 arguments (3 given)
> 
> Original exception was:
> Traceback (most recent call last):
>   File "/usr/bin/cerebroui", line 1038, in <module>
>     gui = GUI()
>   File "/usr/bin/cerebroui", line 291, in __init__
>     CerebroInterface.__init__(self, ATYPE)
>   File "/usr/lib/python2.5/site-packages/cerebro/interface.py", line 58, in
> __init__
>     self.signup()
>   File "/usr/lib/python2.5/site-packages/cerebro/interface.py", line 62, in
> signup
>     iface = bus.get_object('org.laptop.cerebro', '/org/laptop/cerebro')
>   File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 244, in get_object
>     follow_name_owner_changes=follow_name_owner_changes)
>   File "/usr/lib/python2.5/site-packages/dbus/proxies.py", line 241, in
> __init__
>     self._named_service = conn.activate_name_owner(bus_name)
>   File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 183, in
> activate_name_owner
>     self.start_service_by_name(bus_name)
>   File "/usr/lib/python2.5/site-packages/dbus/bus.py", line 281, in
> start_service_by_name
>     'su', (bus_name, flags)))
>   File "/usr/lib/python2.5/site-packages/dbus/connection.py", line 607, in
> call_blocking
>     message, timeout)
> dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The
> name org.laptop.cerebro was not provided by any .service files
> [rpmbuild@rocky cerebro]$ 
> 
> [rpmbuild@rocky cerebro]$ /etc/init.d/cerebro start
> touch: cannot touch `/var/lock/subsys/cerebro': Permission denied ]


cerebro is a service, not an application and as such it requires root privileges to execute. Chief among the reasons for elevated privileges is the use of raw sockets and the attachment to org.laptop.cerebro dbus interface.


> [!] License -- License seems to be GPLv2+ as I can check from COPYING & src 


Huh? what is wrong with GPLv2+ ?
Comment 9 Rakesh Pandit 2008-08-23 16:43:41 EDT
>cerebro is a service, not an application and as such it requires root
>privileges to execute. Chief among the reasons for elevated privileges is the
>use of raw sockets and the attachment to org.laptop.cerebro dbus interface.

Yes, I know -- my point is, it should respond in a sane way for whatever user does.


>> [!] License -- License seems to be GPLv2+ as I can check from COPYING & src 


>Huh? what is wrong with GPLv2+ ?

Spec says: GPLv3+ which is wrong.
Comment 10 Robin Norwood 2008-08-23 21:17:39 EDT
Hi Rakesh,

Sounds like Poly is going to work on the initscript issues.  I used the GPLv3+ license tag because demjson.py says GPLv3 or later (everything else says GPLv2+, as you say).  My understanding is that the package as a whole therefore must be GPLv3 or later.

If you want to block the review on the initscript, that's ok...I'll work with upstream to get it fixed.
Comment 11 Polychronis Ypodimatopoulos 2008-08-23 23:21:57 EDT
(In reply to comment #9)
> >cerebro is a service, not an application and as such it requires root
> >privileges to execute. Chief among the reasons for elevated privileges is the
> >use of raw sockets and the attachment to org.laptop.cerebro dbus interface.
> 
> Yes, I know -- my point is, it should respond in a sane way for whatever user
> does.

I completely agree. Cerebro has received extensive network testing but this is a good exercise to make it usable also. I do not claim to be an expert in packaging or addressing a large user audience, so any suggestions are greatly appreciated.

> 
> 
> >> [!] License -- License seems to be GPLv2+ as I can check from COPYING & src 
> 
> 
> >Huh? what is wrong with GPLv2+ ?
> 
> Spec says: GPLv3+ which is wrong.

I see. Is it a problem if while demjson.py is GPLv3+ while the rest is GPLv2+ ?
Comment 12 Rakesh Pandit 2008-08-24 02:22:26 EDT
@robin & @Polychronis

You may like to inform upstream that if there intention is to move to GPLv3+ & if yes then update whole source (LICENSE file, source code blocks)?

That would be nice if you folks work upstream to get initscript fixed. It would be equally *cool* if user interaction is sane.
Comment 13 Rakesh Pandit 2008-09-29 09:08:30 EDT
It has already been more then one month, without an update. I have CLOSED it as DEFERRED till I get more information about it from reporter who is working upstream to put things in place.

Thanks
Comment 14 Polychronis Ypodimatopoulos 2008-10-21 16:27:44 EDT
I'd like to revisit the status of this bug report.

I am currently working on the following:
1) providing more informative error messages to the user
2) eliminating any parts of the code that were present mostly for debugging purposes (like a sample UI application) and turn cerebro into a purely networking and presence service
3) Is there still an issue with the license? Do I need to update the license to GPLv3+? Isn't this covered by GPLv2+?

p.
Comment 15 Rakesh Pandit 2008-10-21 23:38:30 EDT
GPLv2+ is okay, spec was not correct, if I remember.

Good, looking for more update soon.
Comment 16 Robin Norwood 2008-10-23 11:38:41 EDT
As far as item #2 in comment #14 goes, I think the standard practice for things like sample code is to make it non-executable and mark it as documentation.  If you want to I can make this change for cerebroui when we resubmit cerebro.

For item #3, yes, the license tag was set to GPLv3+ because of demjson.py - I think the license tag is correct.  Since that file is GPLv3+, we can distribute cerebro as GPLv3+, but not as GPLv2+.  The 'more restrictive' (GPLv3+) license wins.  As a matter of clarity, the LICENSE file should probably be changed to match GPLv3+, but I don't think that's usually required to pass package review.  I could be mistaken, though.
Comment 17 Rakesh Pandit 2008-10-23 12:40:27 EDT
@Robin

You are correct, regarding license. - Thanks.
Comment 18 Polychronis Ypodimatopoulos 2009-01-10 01:16:38 EST
Having dealt with all three issues in comment #14, I 'd like to ask you to reconsider opening this review request.

Thanks,
Pol
Comment 19 Rakesh Pandit 2009-01-10 01:32:18 EST
I will review it in few days or next week end.

Thanks for your efforts.
Comment 20 Robin Norwood 2009-01-14 23:33:53 EST
Here's a new SRPM and spec based on ypod's latest 3.0.5 release:

http://people.fedoraproject.org/~rnorwood/rpms/cerebro-3.0.5-1.fc11.src.rpm
http://people.fedoraproject.org/~rnorwood/rpms/cerebro.spec
Comment 21 Rakesh Pandit 2009-03-17 02:38:26 EDT
Sorry for being non responsive for long, I would like to review it now. May you re-upload spec and srpm again - they are not reachable.
Comment 22 Polychronis Ypodimatopoulos 2009-03-17 11:54:11 EDT
Hi - here is the spec and SRPM files of the latest version:

http://dev.laptop.org/~ypod/releases/SPECS/cerebro.spec
http://dev.laptop.org/~ypod/releases/SRPMS/cerebro-3.0.6-1.olpc3.src.rpm

thanks
Comment 23 Rakesh Pandit 2009-06-24 06:37:54 EDT
Sorry for keeping this for long wait .. I reviwed it again and found everything fine .. but while running first as root it fails:

[rakesh@dhcp7-204 noarch]$ cerebro 
/usr/lib/python2.6/site-packages/cerebro/teleporter.py:17: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sys, time, select, os, sha, threading
Traceback (most recent call last):
  File "/usr/sbin/cerebro", line 71, in <module>
    filemode='a')
  File "/usr/lib64/python2.6/logging/__init__.py", line 1358, in basicConfig
    hdlr = FileHandler(filename, mode)
  File "/usr/lib64/python2.6/logging/__init__.py", line 790, in __init__
    stream = self._open()
  File "/usr/lib64/python2.6/logging/__init__.py", line 810, in _open
    stream = open(self.baseFilename, self.mode)
IOError: [Errno 13] Permission denied: '/var/log/cerebro'
[rakesh@dhcp7-204 noarch]$ 
[rakesh@dhcp7-204 noarch]$ 
[rakesh@dhcp7-204 noarch]$ 


Even later as root ?

[rakesh@dhcp7-204 noarch]$ su -
Password: 
[root@dhcp7-204 ~]# cerebro 
/usr/lib/python2.6/site-packages/cerebro/teleporter.py:17: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sys, time, select, os, sha, threading
Interface msh0 was not found!
Aborting.


May you update with latest updates if any ?

Thanks,
Comment 24 Rakesh Pandit 2009-06-24 06:39:25 EDT
So it is expecting .. I guess .. but it is fail sane way for non root users ???
Comment 25 Rakesh Pandit 2009-07-02 00:59:54 EDT
ping ?? Lets finish this ASAP ??
Comment 26 Robin Norwood 2009-07-02 11:39:47 EDT
For the first issue, we could pretty easily catch that error and display a prettier error message.  For the second, I'm not sure - we could include a more descriptive error message ("Hey, Cerebro needs a mesh network interface to work.") and maybe a link to further documentation.
Comment 27 Rakesh Pandit 2009-07-03 01:03:43 EDT
@robin

that would suffice .. after this I don't see any other issues.
Comment 28 Polychronis Ypodimatopoulos 2009-07-06 16:10:56 EDT
Addressed both issues and replaced the sha module with hashlib to eliminate the DeprecationWarning.

The latest RPMs can be found at the usual place:

http://dev.laptop.org/~ypod/releases/
Comment 29 Rakesh Pandit 2009-08-03 02:18:39 EDT
Sorry for delay,

APPROVED
Comment 30 Rakesh Pandit 2009-08-03 02:48:31 EDT
Just missed one point ... do clean the SPEC file before importing.
Comment 31 Rakesh Pandit 2009-08-23 00:14:01 EDT
ping, may you start cvs procedure ? :)
Comment 32 Polychronis Ypodimatopoulos 2009-08-23 08:53:21 EDT
New Package CVS Request
=======================
Package Name: cerebro
Short Description: presence information service
Owners: Polychronis Ypodimatopoulos
Branches: F-10 F-11 FedoraOLPCDelta
InitialCC: michael@laptop.org
Comment 33 Rakesh Pandit 2009-09-14 01:15:26 EDT
set '?' for fedora-cvs, was missing.

Thanks,
Comment 34 Dennis Gilmore 2009-09-14 21:07:42 EDT
CVS Not done

FedoraOLPCDelta is not a valid branch in cvs 

Polychronis and Ypodimatopoulos are not valid accounts in fas


you need to use fas accounts and not emails for initialcc,  and fas acounts for owners.  please fix and submit a new cvs request.
Comment 35 Polychronis Ypodimatopoulos 2009-09-14 21:46:08 EDT
(In reply to comment #34)
> CVS Not done
> 
> FedoraOLPCDelta is not a valid branch in cvs 
> 
> Polychronis and Ypodimatopoulos are not valid accounts in fas
> 
> 
> you need to use fas accounts and not emails for initialcc,  and fas acounts for
> owners.  please fix and submit a new cvs request.  

fas account: ypod

I don't have permission to set the cvs request back to fedora-cvs?
Comment 36 Rakesh Pandit 2009-09-21 08:57:23 EDT
I have set '?' on your behalf. Not sure everything is still alright for cvs work.

Thanks,
Comment 37 Jason Tibbitts 2009-09-21 21:45:39 EDT
I can't parse the only CVS request I see, in comment 32.  In addition, the reason that you cannot set the cvs request flag is because you have not been sponsored and thus cannot own packages in Fedora.  I don't see that you ever indicated that you need a sponsor, and I don't recall whether or not Rakesh has the ability to sponsor you.

Rakesh, if you are able and willing to sponsor Polychronis, please do so.  If you cannot or do not wish to do so, please clear the fedora-review flag and go ahead and have this ticket block FE-NEEDSPONSOR.

Once the sponsorship dance has been done, please submit a corrected CVS request and set the fedora-cvs flag back to '?'.
Comment 38 Robin Norwood 2009-09-21 21:49:56 EDT
Poly and Rakesh - I'm willing to sponsor and/or co-own the package if you need.  I haven't had a lot of time to devote to Fedora or OLPC stuff lately, though.
Comment 39 Polychronis Ypodimatopoulos 2009-09-21 22:51:06 EDT
Robin - thanks for the "sponsorship" and it would be great if you 'd like to co-own the package. To be honest, I was not even aware of those procedures. Please let me know when the sponsorship is set.
Comment 40 Jason Tibbitts 2009-09-21 23:14:06 EDT
Polychronis, it may be useful for you to read through this if you haven't already done so:
http://fedoraproject.org/wiki/Join_the_package_collection_maintainers
Comment 41 Rakesh Pandit 2009-09-22 01:21:56 EDT
Thanks Jason, cleared fedora-cvs request till Poly gets sponsored and added FE-NEEDSPONSOR

@Robin

If you consider it apt, you may sponsor Poly.
Comment 42 Robin Norwood 2009-09-22 10:37:42 EDT
Poly, I believe you need to go to your fedora account page to request sponsorship from there, then I can approve you: https://admin.fedoraproject.org/accounts/user/view/ypod
Comment 43 Jason Tibbitts 2009-09-22 16:06:02 EDT
Robin, are you sure you can actually sponsor folks?  FAS shows you as a user in the packager group, not a sponsor.
Comment 44 Robin Norwood 2009-09-22 16:24:30 EDT
Jason: Drat, you're correct.  I thought I was, but perhaps I lost it along the way somewhere.

Ypod: I'm afraid we'll have to find a different sponsor for you, or I could just own the package.  Probably the former, since I'm afraid I can't really guarantee that I'll be able to devote the time to proper maintainership.  Sorry. :-(
Comment 45 Rakesh Pandit 2009-11-09 03:30:57 EST
@Polychronis:

In case you are interested in this package .. you will need to find sponsorship.
https://fedoraproject.org/wiki/How_to_get_sponsored_into_the_packager_group has details.

In case you are not interested we can close this bug and deferrer its inclusion till someone else gets interested.

Thanks,

Note You need to log in before you can comment on or make changes to this bug.