Projects
Kolab:3.4
pykolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 76
View file
pykolab.spec
Changed
@@ -23,19 +23,13 @@ Summary: Kolab Groupware Solution Name: pykolab -Version: 0.6.12 -Release: 4%{?dist} +Version: 0.6.13 +Release: 1%{?dist} License: GPLv3+ Group: Applications/System URL: http://kolab.org/ Source0: http://files.kolab.org/releases/%{name}-%{version}.tar.gz -Patch1: pykolab-0.6.12-no-switching-gid-in-logger.patch -Patch2: pykolab-0.6.12-dont-drop-privileges-too-early.patch -Patch3: pykolab-0.6.12-allow-auth_cache-reinitialization.patch -Patch4: pykolab-0.6.12-kolab-sap-fix-typo.patch -Patch5: pykolab-0.6.12-close-infinite-loop.patch - # PATCH-FIX-UPSTREAM -- #2869: pickup setup-ds.pl when using 389-ds-base without 389-admin Patch11: pykolab-0.6.11_suse_fixes_2869_setup-ds.patch @@ -506,6 +500,9 @@ %attr(0700,%{kolab_user},%{kolab_group}) %dir %{_var}/spool/pykolab/wallace %changelog +* Wed Mar 5 2014 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.6.13-1 +- New upstream release + * Sun Feb 16 2014 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.6.12-5 - Close infinite loop
View file
pykolab-0.6.12-allow-auth_cache-reinitialization.patch
Deleted
@@ -1,86 +0,0 @@ -commit 10785ecebb741406b9403b1d0c32c1343b9acfd0 -Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> -Date: Sun Feb 16 01:46:24 2014 +0100 - - Allow the auth_cache database to be regenerated automatically when - sqlite on the local filesystem gives errors - -diff --git a/pykolab/auth/ldap/auth_cache.py b/pykolab/auth/ldap/auth_cache.py -index 488deac..bcf38dc 100644 ---- a/pykolab/auth/ldap/auth_cache.py -+++ b/pykolab/auth/ldap/auth_cache.py -@@ -88,12 +88,29 @@ mapper(Entry, entry_table) - - def del_entry(key): - db = init_db() -- _entries = db.query(Entry).filter_by(key=key).delete() -+ -+ try: -+ _entries = db.query(Entry).filter_by(key=key).delete() -+ except sqlalchemy.exc.OperationalError, errmsg: -+ db = init_db(reinit=True) -+ except sqlalchemy.exc.InvalidRequest, errmsg: -+ db = init_db(reinit=True) -+ finally: -+ _entries = db.query(Entry).filter_by(key=key).delete() -+ - db.commit() - - def get_entry(key): - db = init_db() -- _entries = db.query(Entry).filter_by(key=key).all() -+ -+ try: -+ _entries = db.query(Entry).filter_by(key=key).all() -+ except sqlalchemy.exc.OperationalError, errmsg: -+ db = init_db(reinit=True) -+ except sqlalchemy.exc.InvalidRequest, errmsg: -+ db = init_db(reinit=True) -+ finally: -+ _entries = db.query(Entry).filter_by(key=key).all() - - if len(_entries) == 0: - return None -@@ -107,7 +124,14 @@ def get_entry(key): - - def set_entry(key, value): - db = init_db() -- _entries = db.query(Entry).filter_by(key=key).all() -+ try: -+ _entries = db.query(Entry).filter_by(key=key).all() -+ except sqlalchemy.exc.OperationalError, errmsg: -+ db = init_db(reinit=True) -+ except sqlalchemy.exc.InvalidRequest, errmsg: -+ db = init_db(reinit=True) -+ finally: -+ _entries = db.query(Entry).filter_by(key=key).all() - - if len(_entries) == 0: - db.add( -@@ -129,19 +153,24 @@ def purge_entries(db): - db.query(Entry).filter(Entry.last_change <= (datetime.datetime.now() - datetime.timedelta(1))).delete() - db.commit() - --def init_db(): -+def init_db(reinit=False): - """ - Returns a SQLAlchemy Session() instance. - """ - global db - -- if not db == None: -+ if not db == None and not reinit: - return db - - db_uri = conf.get('ldap', 'auth_cache_uri') - if db_uri == None: - db_uri = 'sqlite:///%s/auth_cache.db' % (KOLAB_LIB_PATH) - -+ if reinit: -+ import os -+ if os.path.isfile('%s/auth_cache.db' % (KOLAB_LIB_PATH)): -+ os.unlink('%s/auth_cache.db' % (KOLAB_LIB_PATH)) -+ - echo = conf.debuglevel > 8 - engine = create_engine(db_uri, echo=echo) - metadata.create_all(engine)
View file
pykolab-0.6.12-close-infinite-loop.patch
Deleted
@@ -1,20 +0,0 @@ -commit d32e9a537df6d6badd444f9e727d30a0dae725dd -Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> -Date: Sun Feb 16 02:22:11 2014 +0100 - - Fix inifinite loop for initially connecting - -diff --git a/kolabd/__init__.py b/kolabd/__init__.py -index 5b3c5fa..a6d9865 100644 ---- a/kolabd/__init__.py -+++ b/kolabd/__init__.py -@@ -223,7 +223,8 @@ class KolabDaemon(object): - connected = False - while not connected: - try: -- connected = primary_auth.connect() -+ primary_auth.connect() -+ connected = True - except Exception, errmsg: - connected = False - log.error(_("Could not connect to LDAP, is it running?"))
View file
pykolab-0.6.12-dont-drop-privileges-too-early.patch
Deleted
@@ -1,189 +0,0 @@ -commit fa5709b1a24432a0015f8ba48896f6615077dc87 -Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> -Date: Sat Feb 15 23:17:43 2014 +0100 - - First ensure our socket directory is writeable, then drop privileges - -diff --git a/saslauthd/__init__.py b/saslauthd/__init__.py -index 69accce..d952bdb 100644 ---- a/saslauthd/__init__.py -+++ b/saslauthd/__init__.py -@@ -108,78 +108,9 @@ class SASLAuthDaemon(object): - - exitcode = 0 - -- try: -- try: -- (ruid, euid, suid) = os.getresuid() -- (rgid, egid, sgid) = os.getresgid() -- except AttributeError, errmsg: -- ruid = os.getuid() -- rgid = os.getgid() -- -- if ruid == 0: -- # Means we can setreuid() / setregid() / setgroups() -- if rgid == 0: -- # Get group entry details -- try: -- ( -- group_name, -- group_password, -- group_gid, -- group_members -- ) = grp.getgrnam(conf.process_groupname) -- -- except KeyError: -- print >> sys.stderr, _("Group %s does not exist") % ( -- conf.process_groupname -- ) -- -- sys.exit(1) -- -- # Set real and effective group if not the same as current. -- if not group_gid == rgid: -- log.debug( -- _("Switching real and effective group id to %d") % ( -- group_gid -- ), -- level=8 -- ) -- -- os.setregid(group_gid, group_gid) -- -- if ruid == 0: -- # Means we haven't switched yet. -- try: -- ( -- user_name, -- user_password, -- user_uid, -- user_gid, -- user_gecos, -- user_homedir, -- user_shell -- ) = pwd.getpwnam(conf.process_username) -- -- except KeyError: -- print >> sys.stderr, _("User %s does not exist") % ( -- conf.process_username -- ) -- -- sys.exit(1) -+ self._ensure_socket_dir() - -- -- # Set real and effective user if not the same as current. -- if not user_uid == ruid: -- log.debug( -- _("Switching real and effective user id to %d") % ( -- user_uid -- ), -- level=8 -- ) -- -- os.setreuid(user_uid, user_uid) -- -- except: -- log.error(_("Could not change real and effective uid and/or gid")) -+ self._drop_privileges() - - try: - pid = 1 -@@ -228,12 +159,6 @@ class SASLAuthDaemon(object): - - s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - -- utils.ensure_directory( -- '/var/run/saslauthd/', -- conf.process_username, -- conf.process_groupname -- ) -- - # TODO: The saslauthd socket path could be a setting. - try: - os.remove('/var/run/saslauthd/mux') -@@ -334,3 +259,84 @@ class SASLAuthDaemon(object): - fp = open(conf.pidfile,'w') - fp.write("%d\n" % (pid)) - fp.close() -+ -+ def _ensure_socket_dir(self): -+ utils.ensure_directory( -+ '/var/run/saslauthd/', -+ conf.process_username, -+ conf.process_groupname -+ ) -+ -+ def _drop_privileges(self): -+ try: -+ try: -+ (ruid, euid, suid) = os.getresuid() -+ (rgid, egid, sgid) = os.getresgid() -+ except AttributeError, errmsg: -+ ruid = os.getuid() -+ rgid = os.getgid() -+ -+ if ruid == 0: -+ # Means we can setreuid() / setregid() / setgroups() -+ if rgid == 0: -+ # Get group entry details -+ try: -+ ( -+ group_name, -+ group_password, -+ group_gid, -+ group_members -+ ) = grp.getgrnam(conf.process_groupname) -+ -+ except KeyError: -+ print >> sys.stderr, _("Group %s does not exist") % ( -+ conf.process_groupname -+ ) -+ -+ sys.exit(1) -+ -+ # Set real and effective group if not the same as current. -+ if not group_gid == rgid: -+ log.debug( -+ _("Switching real and effective group id to %d") % ( -+ group_gid -+ ), -+ level=8 -+ ) -+ -+ os.setregid(group_gid, group_gid) -+ -+ if ruid == 0: -+ # Means we haven't switched yet. -+ try: -+ ( -+ user_name, -+ user_password, -+ user_uid, -+ user_gid, -+ user_gecos, -+ user_homedir, -+ user_shell -+ ) = pwd.getpwnam(conf.process_username) -+ -+ except KeyError: -+ print >> sys.stderr, _("User %s does not exist") % ( -+ conf.process_username -+ ) -+ -+ sys.exit(1) -+ -+ -+ # Set real and effective user if not the same as current. -+ if not user_uid == ruid: -+ log.debug( -+ _("Switching real and effective user id to %d") % ( -+ user_uid -+ ), -+ level=8 -+ ) -+ -+ os.setreuid(user_uid, user_uid) -+ -+ except: -+ log.error(_("Could not change real and effective uid and/or gid"))
View file
pykolab-0.6.12-kolab-sap-fix-typo.patch
Deleted
@@ -1,19 +0,0 @@ -commit 34ca3245f0ede2968a7f05d2aca108e79870ab70 -Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> -Date: Sun Feb 16 13:05:27 2014 +0100 - - Fix typo - -diff --git a/bin/kolab_smtp_access_policy.py b/bin/kolab_smtp_access_policy.py -index 935fc6e..0d3fa2f 100755 ---- a/bin/kolab_smtp_access_policy.py -+++ b/bin/kolab_smtp_access_policy.py -@@ -1375,7 +1375,7 @@ def permit(message, policy_request=None): - # If the sender is using an alias as the envelope sender address, take - # into account the preferred domain policy for appending the Sender - # and/or X-Sender headers. -- elif policy_requiest.sasl_user_uses_alias: -+ elif policy_request.sasl_user_uses_alias: - # Domain-specific setting? - if not policy_request.sender_domain == None: - alias_sender_header = conf.get(policy_request.sender_domain, 'alias_sender_header')
View file
pykolab-0.6.12-no-switching-gid-in-logger.patch
Deleted
@@ -1,28 +0,0 @@ -commit ecf74101ee461d16a46626c02237152633a2a802 -Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> -Date: Sat Feb 15 13:49:25 2014 +0100 - - Do not actually switch gid in logger - -diff --git a/pykolab/logger.py b/pykolab/logger.py -index fc396cb..ef38f4f 100644 ---- a/pykolab/logger.py -+++ b/pykolab/logger.py -@@ -142,17 +142,6 @@ class Logger(logging.Logger): - - sys.exit(1) - -- # Set real and effective group if not the same as current. -- if not group_gid == rgid: -- self.debug( -- _("Switching real and effective group id to %d") % ( -- group_gid -- ), -- level=8 -- ) -- -- os.setregid(group_gid, group_gid) -- - if ruid == 0: - # Means we haven't switched yet. - try:
View file
debian.changelog
Changed
@@ -1,3 +1,9 @@ +pykolab (0.6.13-0~kolab1) unstable; urgency=low + + * Correct more permission errors + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Wed, 5 Mar 2014 01:49:00 +0100 + pykolab (0.6.12-0~kolab8) unstable; urgency=low * Regenerate auth_cache automatically
View file
pykolab-0.6.12.tar.gz/bin/kolab_smtp_access_policy.py -> pykolab-0.6.13.tar.gz/bin/kolab_smtp_access_policy.py
Changed
@@ -1375,7 +1375,7 @@ # If the sender is using an alias as the envelope sender address, take # into account the preferred domain policy for appending the Sender # and/or X-Sender headers. - elif policy_requiest.sasl_user_uses_alias: + elif policy_request.sasl_user_uses_alias: # Domain-specific setting? if not policy_request.sender_domain == None: alias_sender_header = conf.get(policy_request.sender_domain, 'alias_sender_header')
View file
pykolab-0.6.12.tar.gz/kolabd/__init__.py -> pykolab-0.6.13.tar.gz/kolabd/__init__.py
Changed
@@ -223,7 +223,8 @@ connected = False while not connected: try: - connected = primary_auth.connect() + primary_auth.connect() + connected = True except Exception, errmsg: connected = False log.error(_("Could not connect to LDAP, is it running?"))
View file
pykolab-0.6.12.tar.gz/pykolab/auth/ldap/__init__.py -> pykolab-0.6.13.tar.gz/pykolab/auth/ldap/__init__.py
Changed
@@ -1789,6 +1789,7 @@ entry['kolabmailfolderaclentry'] ) + delivery_address_attribute = self.config_get('sharedfolder_delivery_address_attribute') if entry.has_key(delivery_address_attribute) and \ not entry[delivery_address_attribute] == None: self.imap.set_acl(folder_path, 'anyone', '+p')
View file
pykolab-0.6.12.tar.gz/pykolab/auth/ldap/auth_cache.py -> pykolab-0.6.13.tar.gz/pykolab/auth/ldap/auth_cache.py
Changed
@@ -88,12 +88,29 @@ def del_entry(key): db = init_db() - _entries = db.query(Entry).filter_by(key=key).delete() + + try: + _entries = db.query(Entry).filter_by(key=key).delete() + except sqlalchemy.exc.OperationalError, errmsg: + db = init_db(reinit=True) + except sqlalchemy.exc.InvalidRequest, errmsg: + db = init_db(reinit=True) + finally: + _entries = db.query(Entry).filter_by(key=key).delete() + db.commit() def get_entry(key): db = init_db() - _entries = db.query(Entry).filter_by(key=key).all() + + try: + _entries = db.query(Entry).filter_by(key=key).all() + except sqlalchemy.exc.OperationalError, errmsg: + db = init_db(reinit=True) + except sqlalchemy.exc.InvalidRequest, errmsg: + db = init_db(reinit=True) + finally: + _entries = db.query(Entry).filter_by(key=key).all() if len(_entries) == 0: return None @@ -107,7 +124,14 @@ def set_entry(key, value): db = init_db() - _entries = db.query(Entry).filter_by(key=key).all() + try: + _entries = db.query(Entry).filter_by(key=key).all() + except sqlalchemy.exc.OperationalError, errmsg: + db = init_db(reinit=True) + except sqlalchemy.exc.InvalidRequest, errmsg: + db = init_db(reinit=True) + finally: + _entries = db.query(Entry).filter_by(key=key).all() if len(_entries) == 0: db.add( @@ -129,19 +153,24 @@ db.query(Entry).filter(Entry.last_change <= (datetime.datetime.now() - datetime.timedelta(1))).delete() db.commit() -def init_db(): +def init_db(reinit=False): """ Returns a SQLAlchemy Session() instance. """ global db - if not db == None: + if not db == None and not reinit: return db db_uri = conf.get('ldap', 'auth_cache_uri') if db_uri == None: db_uri = 'sqlite:///%s/auth_cache.db' % (KOLAB_LIB_PATH) + if reinit: + import os + if os.path.isfile('%s/auth_cache.db' % (KOLAB_LIB_PATH)): + os.unlink('%s/auth_cache.db' % (KOLAB_LIB_PATH)) + echo = conf.debuglevel > 8 engine = create_engine(db_uri, echo=echo) metadata.create_all(engine)
View file
pykolab-0.6.12.tar.gz/pykolab/conf/__init__.py -> pykolab-0.6.13.tar.gz/pykolab/conf/__init__.py
Changed
@@ -446,11 +446,15 @@ setattr(self,option,self.cli_parser.defaults[option]) def has_section(self, section): - self.read_config() + if not self.cfg_parser: + self.read_config() return self.cfg_parser.has_section(section) def has_option(self, section, option): + if not self.cfg_parser: + self.read_config() + return self.cfg_parser.has_option(section, option) def get_list(self, section, key):
View file
pykolab-0.6.12.tar.gz/pykolab/logger.py -> pykolab-0.6.13.tar.gz/pykolab/logger.py
Changed
@@ -142,17 +142,6 @@ sys.exit(1) - # Set real and effective group if not the same as current. - if not group_gid == rgid: - self.debug( - _("Switching real and effective group id to %d") % ( - group_gid - ), - level=8 - ) - - os.setregid(group_gid, group_gid) - if ruid == 0: # Means we haven't switched yet. try:
View file
pykolab-0.6.12.tar.gz/pykolab/setup/setup_ldap.py -> pykolab-0.6.13.tar.gz/pykolab/setup/setup_ldap.py
Changed
@@ -317,6 +317,8 @@ setup_ds_admin = "/usr/sbin/setup-ds-admin.pl" #elif os.path.isfile("/usr/sbin/setup-ds-admin"): #setup_ds_admin = "/usr/sbin/setup-ds-admin" + elif os.path.isfile("/usr/sbin/setup-ds.pl"): + setup_ds_admin = "/usr/sbin/setup-ds.pl" elif os.path.isfile("/usr/sbin/setup-ds"): setup_ds_admin = "/usr/sbin/setup-ds" else:
View file
pykolab-0.6.12.tar.gz/pykolab/setup/setup_mta.py -> pykolab-0.6.13.tar.gz/pykolab/setup/setup_mta.py
Changed
@@ -383,15 +383,18 @@ t = Template(template_definition, searchList=[amavisd_settings]) + fp = None if os.path.isdir('/etc/amavisd'): fp = open('/etc/amavisd/amavisd.conf', 'w') elif os.path.isdir('/etc/amavis'): fp = open('/etc/amavis/amavisd.conf', 'w') + + if not fp == None: fp.write(t.__str__()) fp.close() else: - log.error(_("Could not write out Amavis configuration file /etc/amavisd/amavisd.conf")) + log.error(_("Could not write out Amavis configuration file amavisd.conf")) return # On APT installations, /etc/amavis/conf.d/ is a directory with many more files.
View file
pykolab-0.6.12.tar.gz/pykolab/setup/setup_mysql.py -> pykolab-0.6.13.tar.gz/pykolab/setup/setup_mysql.py
Changed
@@ -64,7 +64,10 @@ } answer = 0 - if os.path.exists('/var/run/mysqld/mysqld.sock'): + if os.path.exists('/var/lib/mysql/mysql.sock') or \ + os.path.exists('/var/run/mysqld/mysqld.sock') or \ + os.path.exists('/var/run/mysql/mysql.sock') or \ + os.path.exists('/var/run/mysqld/mysqld.pid'): answer = utils.ask_menu(_("What MySQL server are we setting up?"), options) if answer == "1" or answer == 1:
View file
pykolab-0.6.12.tar.gz/pykolab/setup/setup_roundcube.py -> pykolab-0.6.13.tar.gz/pykolab/setup/setup_roundcube.py
Changed
@@ -139,7 +139,7 @@ for root, directories, filenames in os.walk('/usr/share/doc/'): for directory in directories: if directory.startswith("roundcubemail"): - for root, directories, filenames in os.walk(os.path.join('/usr/share/doc/', directory)): + for root, directories, filenames in os.walk(os.path.join(root, directory)): for filename in filenames: if filename.startswith('mysql.initial') and filename.endswith('.sql'): schema_filepath = os.path.join(root,filename)
View file
pykolab-0.6.12.tar.gz/saslauthd/__init__.py -> pykolab-0.6.13.tar.gz/saslauthd/__init__.py
Changed
@@ -108,78 +108,9 @@ exitcode = 0 - try: - try: - (ruid, euid, suid) = os.getresuid() - (rgid, egid, sgid) = os.getresgid() - except AttributeError, errmsg: - ruid = os.getuid() - rgid = os.getgid() - - if ruid == 0: - # Means we can setreuid() / setregid() / setgroups() - if rgid == 0: - # Get group entry details - try: - ( - group_name, - group_password, - group_gid, - group_members - ) = grp.getgrnam(conf.process_groupname) - - except KeyError: - print >> sys.stderr, _("Group %s does not exist") % ( - conf.process_groupname - ) - - sys.exit(1) - - # Set real and effective group if not the same as current. - if not group_gid == rgid: - log.debug( - _("Switching real and effective group id to %d") % ( - group_gid - ), - level=8 - ) - - os.setregid(group_gid, group_gid) - - if ruid == 0: - # Means we haven't switched yet. - try: - ( - user_name, - user_password, - user_uid, - user_gid, - user_gecos, - user_homedir, - user_shell - ) = pwd.getpwnam(conf.process_username) - - except KeyError: - print >> sys.stderr, _("User %s does not exist") % ( - conf.process_username - ) - - sys.exit(1) + self._ensure_socket_dir() - - # Set real and effective user if not the same as current. - if not user_uid == ruid: - log.debug( - _("Switching real and effective user id to %d") % ( - user_uid - ), - level=8 - ) - - os.setreuid(user_uid, user_uid) - - except: - log.error(_("Could not change real and effective uid and/or gid")) + self._drop_privileges() try: pid = 1 @@ -228,12 +159,6 @@ s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - utils.ensure_directory( - '/var/run/saslauthd/', - conf.process_username, - conf.process_groupname - ) - # TODO: The saslauthd socket path could be a setting. try: os.remove('/var/run/saslauthd/mux') @@ -334,3 +259,84 @@ fp = open(conf.pidfile,'w') fp.write("%d\n" % (pid)) fp.close() + + def _ensure_socket_dir(self): + utils.ensure_directory( + '/var/run/saslauthd/', + conf.process_username, + conf.process_groupname + ) + + def _drop_privileges(self): + try: + try: + (ruid, euid, suid) = os.getresuid() + (rgid, egid, sgid) = os.getresgid() + except AttributeError, errmsg: + ruid = os.getuid() + rgid = os.getgid() + + if ruid == 0: + # Means we can setreuid() / setregid() / setgroups() + if rgid == 0: + # Get group entry details + try: + ( + group_name, + group_password, + group_gid, + group_members + ) = grp.getgrnam(conf.process_groupname) + + except KeyError: + print >> sys.stderr, _("Group %s does not exist") % ( + conf.process_groupname + ) + + sys.exit(1) + + # Set real and effective group if not the same as current. + if not group_gid == rgid: + log.debug( + _("Switching real and effective group id to %d") % ( + group_gid + ), + level=8 + ) + + os.setregid(group_gid, group_gid) + + if ruid == 0: + # Means we haven't switched yet. + try: + ( + user_name, + user_password, + user_uid, + user_gid, + user_gecos, + user_homedir, + user_shell + ) = pwd.getpwnam(conf.process_username) + + except KeyError: + print >> sys.stderr, _("User %s does not exist") % ( + conf.process_username + ) + + sys.exit(1) + + + # Set real and effective user if not the same as current. + if not user_uid == ruid: + log.debug( + _("Switching real and effective user id to %d") % ( + user_uid + ), + level=8 + ) + + os.setreuid(user_uid, user_uid) + + except: + log.error(_("Could not change real and effective uid and/or gid"))
View file
pykolab.dsc
Changed
@@ -2,7 +2,7 @@ Source: pykolab Binary: pykolab, kolab-cli, kolab-conf, kolab-saslauthd, kolab-server, kolab-telemetry, kolab-xml, wallace Architecture: all -Version: 0.6.12-0~kolab8 +Version: 0.6.13-0~kolab1 Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Uploaders: Paul Klos <kolab@klos2day.nl> Homepage: http://www.kolab.org @@ -40,5 +40,5 @@ pykolab deb python optional wallace deb python optional Files: - 00000000000000000000000000000000 0 pykolab-0.6.12.tar.gz + 00000000000000000000000000000000 0 pykolab-0.6.13.tar.gz 00000000000000000000000000000000 0 debian.tar.gz
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.