Commit Graph
100 Commits
Author SHA1 Message Date
Rob Crittenden 6943acc161 Add return value information to the ipa command man page
The man tool I use, manedit, also excepted all dashes. Seems benign.

ticket 803
2011-02-18 15:11:53 -05:00
Rob Crittenden 7b71604521 Fix NSS initialization errors during ipa-replica-prepare
When enabling replication we make an SSL connection. I think the way
this goes is python-ldap -> openldap -> NSS. It may be a problem in
the openldap SSL client, maybe it isn't calling NSS_Shutdown(). In any
case if we use ldapi instead the problem goes away.

Back out the temporary code to ignore nss_shutdown errors.

ticket 965
2011-02-18 10:00:03 -05:00
Rob Crittenden cd2365bf64 Configure SSSD to use DNS to find the IPA server by default.
Add the server we registered with as a fallback.

ticket 980
2011-02-17 17:12:42 -05:00
Rob Crittenden 4211eee992 Special handling for nsaccountlock attribute in user.
nsaccountlock doesn't have a visible Param but we want do so
some basic validation to be sure garbage doesn't get in there so
do it in the pre_callback of add and mod.

ticket 968
2011-02-17 17:11:06 -05:00
Rob Crittenden 86fe47b87d Don't allow host cn to be changed (it isn't used anyway).
We are required by LDAP schema to have a cn value. Don't let
users change it thinking they are actually doing something.

tickets 706 and 707
2011-02-16 22:19:12 -05:00
Rob Crittenden c4206d6462 Fix typo in rewording of help for the user module.
I was too quick on the patch push and didn't see a nack on the wording.
2011-02-16 08:47:42 -05:00
Rob Crittenden f558ffe294 Fix service validator, ensure the service isn't blank.
ticket 961
2011-02-15 15:46:08 -05:00
Rob Crittenden aab27a76e2 Require ipactl be run as root to avoid a lot of misleading error msgs.
Trying to run ipactl as non-root results in a slew of bogus
error messages, some of which come because dirsrv can't read certain
files as the wrong user, some based on our handling of that fact.

ticket 936
2011-02-15 14:21:08 -05:00
Rob Crittenden edcdd87bc8 A privilege cannot be a member of a permission, remove it from metadata
ticket 970
2011-02-15 13:39:49 -05:00
Rob Crittenden 94395b2661 Become IPA v2 RC 1 (2.0.0.rc1) 2011-02-14 20:12:05 -05:00
Rob Crittenden 16b8d62968 Fix two problems with ipa-replica-prepare
1. Fix a unicode() problem creating the DNS entries
2. Fix a strange NSS error when generating the certificates against
   a dogtag server.

The NSS errors are quite strange. When generating the first certificate
nss_shutdown() fails because the database isn't initialized yet but
nss_is_initialized() returned True. The second pass fails because
something is in use.
2011-02-14 18:15:35 -05:00
Rob Crittenden dab452442d The --out option wasn't working at all with cert-show.
Also fix some related problems in write_certificate(), handle
either a DER or base64-formatted incoming certificate and don't
explode if the filename is None.

ticket 954
2011-02-14 16:43:48 -05:00
Rob Crittenden 0e4f0528cf Add missing import for netaddr
ticket 964
2011-02-14 16:22:29 -05:00
Rob Crittenden 81020a2ffa A mod command should not be able to remove a required attribute.
Some attribute enforcement is done by schema, others should be done
by the required option in a Parameter. description, for example, is
required by many plugins but not the schema. We need to enforce in the
framework that required options are provided.

After all the setattr/addattr work is done run through the modifications
and ensure that no required values will be removed.

ticket 852
2011-02-14 14:46:29 -05:00
Rob Crittenden c9431749a0 Let 389-ds start up even if Kerboros is not configured yet.
The situation is if during installation /etc/krb5.conf either doesn't
exist or configures no realms then 389-ds won't start up at all, causing
the installation to fail. This will let the server start up in a degraded
mode.

Also need to make the sub_dict in ldapupdate.py handle no realm otherwise
the installation will abort enabling the compat plugin.

ticket 606
2011-02-14 14:07:17 -05:00
Rob Crittenden 77e1ef2f80 Add a replace option to ipa-ldap-updater.
We have no way to say "replace value X with Y". This would be useful
for us to replace a default value only if the user hasn't already
updated it.

related to ticket 930
2011-02-14 13:55:30 -05:00
Rob Crittenden 779f8da2f0 API fix for dns -> dnsrecord change in permission plugin 2011-02-14 11:48:12 -05:00
Rob Crittenden 29706fb13b Add default success/failure output logging.
Request logging on the server only happened if you added verbose=True
or debug=True to the IPA config file. We should log the basics at
least: who, what, result.

Move a lot of entries from info to debug logging as well.

Related to ticket 873
2011-02-14 10:23:52 -05:00
Rob Crittenden 1315ba19d2 Add permission/privilege for updating IPA configuration.
ticket 950
2011-02-14 10:22:55 -05:00
Rob Crittenden f2ed8de028 Move tools that are really only applicable to be run on the server
This moves a bunch of tools that only make sense to run on the actual
server from the admintools subpackage to the server subpackage.

ticket 947
2011-02-14 10:22:28 -05:00
Rob Crittenden cb48ec3508 Ignore case when removing group members.
ticket 944
2011-02-14 10:22:28 -05:00
Rob Crittenden 76f2d2eac2 Handle bad DM password in ipa-host-net-manage & ipa-copmat-manage.
This was resulting in a traceback because while conn was not None
it wasn't connected either.

ticket 920
2011-02-14 10:13:52 -05:00
Rob Crittenden 3ac3130fc9 Convert json strings to unicode when they are unmarshalled.
This patch removes some individual work-arounds of converting strings
to unicode, they only masked the problem. String values are not
passed to the validator or normalizers so things like adding the
realm automatically to services weren't happening.

ticket 941
2011-02-11 13:36:15 -05:00
Rob Crittenden eed1130008 Don't include error.kw in the error response in the JSON server.
This can include a full exception which cannot be marshalled. This
value contains duplicate information and isn't used by the client.

ticket 905
2011-02-11 10:37:21 -05:00
Rob Crittenden 95b0563817 Ensure that file ownership doesn't change when config is updated.
Out of the blue update_file() and set_directive() changed file
ownership to root:root when it updated some files. This was causing
dogtag to break. So grab the owner before opening the file and reset
it after closing.

ticket 928
2011-02-11 09:51:44 -05:00
Rob Crittenden a880396de9 Add pyOpenSSL as a BuildRequires 2011-02-11 09:35:38 -05:00
Rob Crittenden 2b2642e0c2 Rename ipa.spec.in to freeipa.spec.in in BUILD.txt.
This is the shortcut to installing the build-deps.

ticket 859
2011-02-10 17:52:43 -05:00
Rob Crittenden 456101bd29 Update API.txt with updated usercertificate in service-find 2011-02-10 14:51:39 -05:00
Rob Crittenden b77046d550 Disable replication version plugin by default.
The 389-ds replication plugin may not be installed on all platforms
and our replication version plugin will cause 389-ds to not start
if it is loaded and the replication plugin is not. So disable by
default.

When a replica is prepared we check for the replication plugin.
If it exists we will enable the replication version plugin.

Likewise on installation of a replica we check for existence of
the repliation plugin and if it is there then we enable the version
plugin before replication begins.

ticket 918
2011-02-10 13:54:39 -05:00
Rob Crittenden c187b276ad Fix test failures caused by the performance patch.
It isn't safe to assume there is an environment or mode in any given
object. Only skip the extra work if the object explicitly has production
in it.
2011-02-10 13:52:29 -05:00
Rob Crittenden f34c0ab916 Set minimum version of sssd to 1.5.1
ticket 926
2011-02-10 13:51:35 -05:00
Rob Crittenden fd50d9e900 nscd should be disabled before sssd is configured/started.
If not then sssd spits out a warning message:

sssd: nscd socket was detected.  As nscd caching capabilities may conflict
with SSSD, it is recommended to not run nscd in parallel with SSSD

Stop nscd before configuring sssd so we don't confuse our users.

ticket 743
2011-02-10 13:50:47 -05:00
Rob Crittenden e6d3b7031d Fix prompt for confirmation of fixed values wrapping around terminal.
ticket 940
2011-02-10 13:50:06 -05:00
Rob Crittenden 51b0a8b4e8 Remove certificate as service a search option.
ticket 912
2011-02-10 13:49:05 -05:00
Rob Crittenden d9eb19b0e8 Make main selfservice aci visible to the selfservice plugin.
ticket 934
2011-02-10 11:16:58 -05:00
Rob Crittenden 121da04579 Add the entitlement API to API.txt
It was missed because the whole module was skipped if python-rhsm wasn't
loaded.

ticket 919
2011-02-10 11:16:58 -05:00
Rob Crittenden ec0911e61b Become IPA v2 beta 2 (2.0.0.pre2) 2011-02-10 11:16:56 -05:00
Rob Crittenden 9b73da1d54 Refresh state data before removing the dirsrv user, fixes uninstall.
The state is read only at initialization time. This works ok when
individual services remove their state data but when worked upon again
at the top-level it still has the full state in memory, so when the
state file is re-written all of the data that was removed is re-added.

ticket 916
2011-02-07 14:41:05 -05:00
Rob Crittenden d30592ed6d Update minimum version of 389-ds-base, mod_nss and selinux-policy.
* Set min version of 389-ds-base to 1.2.8
* Set min version of mod_nss 1.0.8-10
* Set min version of selinux-policy to 3.9.7-27
2011-02-03 10:35:05 -05:00
Rob Crittenden 0188158a76 Use correct LDAP attributes for city and state.
Also add a unit test for address.

Ticket 889
2011-02-02 16:53:32 -05:00
Rob Crittenden 275998f6bd Add support for tracking and counting entitlements
Adds a plugin, entitle, to register to the entitlement server, consume
entitlements and to count and track them. It is also possible to
import an entitlement certificate (if for example the remote entitlement
server is unaviailable).

This uses the candlepin server from https://fedorahosted.org/candlepin/wiki
for entitlements.

Add a cron job to validate the entitlement status and syslog the results.

tickets 28, 79, 278
2011-02-02 10:00:38 -05:00
Rob Crittenden f3d04bfc40 Fix installing with an external CA and wait for dogtag to come up
There wasn't an exception in the "is the server already installed"
check for a two-stage CA installation.

Made the installer slightly more robust. We create a cache file of
answers so the next run won't ask all the questions again. This cache
is removed when the installation is complete. Previously nothing would work
if the installer was run more than once, this should be fixed now.
The cache is encrypted using the DM password.

The second problem is that the tomcat6 init script returns control
before the web apps are up. Add a small loop in our restart method
to wait for the 9180 port to be available.

This also adds an additional restart to ensure that nonces are disabled.

ticket 835

revise
2011-02-01 17:52:57 -05:00
Rob Crittenden c6ef39b2c0 Add new schema to store information about permissions.
There are some permissions we can't display because they are stored
outside of the basedn (such as the replication permissions). We
are adding a new attribute to store extra information to make this
clear, in this case SYSTEM.

ticket 853
2011-02-01 16:00:41 -05:00
Rob Crittenden 4b7e5721d4 Fix changing membergroup in a delegation.
This is mostly due to inconsistent option name usage but also due
to the aci plugin not always treating memberof as a special kind
of filter.

ticket 869
2011-02-01 11:59:24 -05:00
Rob Crittenden 41abde2604 Fix privilege name we are assigning to DNS principal.
This fixes an installation failure.
2011-01-31 17:43:29 -05:00
Rob Crittenden bf4f77d985 Rename permissions and privileges to be more readable.
This also drops description from permissions since it seems redundant and
fixes up the help text a little.

ticket 792
2011-01-31 13:17:38 -05:00
Rob Crittenden 359d54e741 Don't perform some API self-tests in production mode for performance reasons
The API does a fair number of self tests and locking to assure that the
registered commands are consistent and will work. This does not need
to be done on a production system and adds additional overhead causing
somewhere between a 30 and 50% decrease in performance.

Because makeapi is executed when a build is done ensure that it is
executed in developer mode to ensure that the framework is ok.

ticket 751
2011-01-28 18:49:17 -05:00
Rob Crittenden 878aa9ee1f Apply changes discovered in Fedora package review process (#672986)
Ticket 804
2011-01-27 17:09:19 -05:00
Rob Crittenden 80e87e75bd Add an option for overriding the hostname value.
Ticket 834
2011-01-26 15:53:41 -05:00
Rob Crittenden 5c88225dda Add brackets around optional parameters when prompting.
ticket 832
2011-01-25 17:08:57 -05:00
Rob Crittenden 1229fd5654 Clean up some rpmlint errors in the spec file.
Re-arrange doc and defattr to clean up rpmlint warnings
Remove conditionals on older releases
Move some man pages into admintools subpackage
Remove some explicit Requires in client that aren't needed
Consistent use of buildroot vs RPM_BUILD_ROOT

Ticket 804
2011-01-25 14:01:36 -05:00
Rob Crittenden 678c764d40 Make a copy of objectclasses so a call can't update them globally.
In the host plugin we may change the default objectclasses based on
the options selected. This was affecting it globally and causing
subsequent calls to fail.
2011-01-24 14:35:11 -05:00
Rob Crittenden 96469fbc88 Fix failed tests. API for utcoffset changed and strings are more robust.
In Python 2.7 the API for time.utcoffset() changed.

We do more automatic conversions of strings so need to loosen the tests
a bit.
2011-01-24 14:34:38 -05:00
Rob Crittenden 6e7729726f Block anonymous access to HBAC, role and some member information.
Prevents an unauthenticated user from accessing HBAC and role
information as well as memberof which could disclose roles,
memberships in HBAC, etc.

ticket 811
2011-01-24 14:33:21 -05:00
Rob Crittenden 0637bff95f Fix exception doctest failure 2011-01-24 10:42:16 -05:00
Rob Crittenden 8cc46af050 Remove del-all from dnsrecord_del from API.txt
This was from an unpushed patch I had in my tree.
2011-01-21 16:03:22 -05:00
Rob Crittenden 5f0c52ab97 Add new option to dns_del and always ask permission options to API.txt 2011-01-21 15:13:58 -05:00
Rob Crittenden cf9ec1c427 Update kerberos password policy values on LDAP binds.
On a failed bind this will update krbLoginFailedCount and krbLastFailedAuth
and will potentially fail the bind altogether.

On a successful bind it will zero krbLoginFailedCount and set
krbLastSuccessfulAuth.

This will also enforce locked-out accounts.

See http://k5wiki.kerberos.org/wiki/Projects/Lockout for details on
kerberos lockout.

ticket 343
2011-01-21 13:59:24 -05:00
Rob Crittenden 4361cd0242 Rename INTERNAL to NO_CLI for commands we hide from the cli.
Also make i18n_messages and json_metadata NO_CLI.

ticket 821
2011-01-21 13:56:02 -05:00
Rob Crittenden 35f2f1d720 Improve output when options are not found in non-interactive client install
We should still give some feedback when things go wrong when in
non-interactive mode.

ticket 828
2011-01-21 13:47:55 -05:00
Rob Crittenden fc28fae03f Add some basic filter validation to permissions and disallow empty filters
Try a query with a filter to see if it is at least legal. This doesn't
guarantee that the filter is at all otherwise sane.

ticket 808
2011-01-21 10:47:43 -05:00
Rob Crittenden 886e417fd7 Set the default Int maxvalue to the maximum XML-RPC can handle.
Also handle marshalling errors thrown by xmlrpclib more gracefully.

ticket 770
2011-01-18 10:03:55 -05:00
Rob Crittenden 84ff4ca0f1 Don't require or create the log dirs if we're just validating the API.
Fixes an error displayed in the automated builds, plus we don't want
a Makefile messing around with our homedir.
2011-01-14 17:26:49 -05:00
Rob Crittenden d7bd9138c8 Execute /usr/bin/python directly instead of /usr/bin/env python
ticket 608
2011-01-14 16:27:48 -05:00
Rob Crittenden c69d8084c1 Add API version and have server reject incompatible clients.
This patch contains 2 parts.

The first part is a small utility to create and validate the current
API. To do this it needs to load ipalib which on a fresh system
introduces a few problems, namely that it relies on a python plugin
to set the default encoding to utf8. For our purposes we can skip that.
It is also important that any optional plugins be loadable so the
API can be examined.

The second part is a version exchange between the client and server.
The version has a major and a minor version. The major verion is
updated whenever existing API changes. The minor version is updated when
new API is added. A request will be rejected if either the major versions
don't match or if the client major version is higher than then server
major version (though by implication new API would return a command not
found if allowed to proceed).

To determine the API version of the server from a client use the ping
command.

ticket 584
2011-01-14 14:26:22 -05:00
Rob Crittenden ce169c7fa6 Set minimum version of dogtag to 9
ticket 763
2011-01-14 09:51:01 -05:00
Rob Crittenden 6785283568 python-ldap fails gloriously if the search time limit is 0. Don't allow it.
Don't allow the time limit to be set in the API. Also add a failsafe
in the ldap driver because such bad things happen if this value is 0.
I think it literally spends 0 time on the request and just returns
immediately.

ticket 752
2011-01-14 09:48:07 -05:00
Rob Crittenden 4da9228fb2 Drop dependency on mozldap 2011-01-12 17:41:53 -05:00
Rob Crittenden c7789199f9 Fix output of failed managedby hosts, allow a host to manage itself.
The output problem was a missing label for failed managedby.

This also fixes a call to print_entry that was missing the flags argument.

Add a flag to specify whether a group can be a member of itself, defaulting
to False.

ticket 708
2011-01-11 10:23:31 -05:00
Rob Crittenden 06179dc105 Exit if a DNS A or AAAA record doesn't exist for the replica we are preparing.
Without this it is possible to prepare a replica for a host that doesn't
exist in DNS. The result when this replica file is installed is that
replication will fail because the master won't be able to communicate
to the replica by name.

ticket 680
2011-01-11 10:22:33 -05:00
Rob Crittenden 371ce528fb Enable low-level LDAP debugging. 2011-01-11 10:22:09 -05:00
Rob Crittenden f0401a9127 Make ipaDefaultLoginShell use IA5String syntax to match POSIX schema.
ticket 739
2011-01-11 10:21:04 -05:00
Rob Crittenden db29cd9849 Simple instructions to start developing IPA.
ticket 314
2011-01-10 10:40:57 -05:00
Rob Crittenden 2dac03d7d5 Ship the ipa-dns-install man page
ticket 734
2011-01-10 10:38:46 -05:00
Rob Crittenden 6f58f38748 Display the entries that failed when deleting with --continue.
We collected the failures but didn't report it back. This changes the
API of most delete commands so rather than returning a boolean it returns
a dict with the only current key as failed.

This also adds a new parameter flag, suppress_empty. This will try to
not print values that are empty if included. This makes the output of
the delete commands a bit prettier.

ticket 687
2011-01-10 10:32:10 -05:00
Rob Crittenden 0a79836082 Setting an empty set of target attributes should raise an exception.
It is possible to create an ACI with attributes and then try to set that
to None via a mod command later. We need to catch this and raise an exception.

If all attributes are set to None in an aci then the attr target is removed
from the ACI. This could result in an illegal ACI if there are no other
targets. Having no targets is a legal state, just not a legal final state.

ticket 647
2011-01-10 10:27:23 -05:00
Rob Crittenden aea1bc7959 Temporarily work around SSL connection issue causing installation to fail.
Not sure if this is an openldap-client, pem-nss or python-ldap problem yet
but the installation is failing.
2011-01-07 18:08:01 -05:00
Rob Crittenden 3f146d9622 Allow the kdc to write krbExtraData 2011-01-07 11:15:16 -05:00
Rob Crittenden a1188d95e8 Better detection when not working with a real keytab in ipa-rmkeytab.
Resolving the keytab isn't enough, this just creates a name. Try to
create a cursor into the keytab to see if it is a valid keytab.

ticket 654
2011-01-07 05:15:37 -05:00
Rob Crittenden 4f2a6e0a25 Don't use Class of Service for account activation, use attribute.
To support group-based account disablement we created a Class of Service
where group membership controlled whether an account was active or not.

Since we aren't doing group-based account locking drop that and use
nsaccountlock directly.

ticket 568
2011-01-04 17:09:56 -05:00
Rob Crittenden e7afe1dec2 Make sure that the messagebus service is started.
This will prevent certmonger failures. On very minimal installs it seems
that messagebus is not always started.

ticket 528
2011-01-04 16:56:18 -05:00
Rob Crittenden 91f4bb4ae5 Remove unnecessary options from host-del.
For some reason it was inheriting LDAPCreate.options...

ticket 652
2011-01-04 16:55:14 -05:00
Rob Crittenden ecf2b252c0 Don't allow a user's uid to be set to 0.
ticket 578
2011-01-04 16:53:54 -05:00
Rob Crittenden e4c94320cb Become IPA v2 beta 1 (2.0.0.pre1) 2010-12-22 14:36:37 -05:00
Rob Crittenden d84ffd9e54 Move permissions and privileges to their own container, cn=pbac,$SUFFIX
ticket 638
2010-12-22 11:26:49 -05:00
Rob Crittenden 4d6cd89258 In meta data make ACI attributes lower-case, sorted. Add possible attributes.
The metadata contains a list of possible attributes that an ACI for that
object might need. Add a new variable to hold possible objectclasses for
optional elements (like posixGroup for groups).

To make the list easier to handle sort it and make it all lower-case.

Fix a couple of missed camel-case attributes in the default ACI list.

ticket 641
2010-12-21 13:00:15 -05:00
Rob Crittenden ffd467bd7e Translate the membergroup dn into a group name.
Drop filter from the output, it is superfluous.

ticket 634
2010-12-20 15:18:42 -05:00
Rob Crittenden 34534a026f Don't use camel-case LDAP attributes in ACI and don't clear enrolledBy
We keep LDAP attributes lower-case elsewhere in the API we should do the
same with all access controls.

There were two ACIs pointing at the manage_host_keytab permission. This
isn't allowed in general and we have decided separately to not clear out
enrolledBy when a host is unenrolled so dropping it is the obvious thing
to do.

ticket 597
2010-12-17 18:04:37 -05:00
Rob Crittenden 7035ffe49c Fix some doctests
A few had bad formatting causing the doctests to fail.
2010-12-17 18:04:37 -05:00
Rob Crittenden eb9cb783ee Catch ACI errors better when adding a permission.
We create the aci with the --test flag to test its validity but it doesn't
do the same level of tests that actually adding an aci to LDAP does. Catch
any syntax errors that get thrown and clean up as best we can.

ticket 621
2010-12-17 18:04:37 -05:00
Rob Crittenden 1600146c94 Verify that the replication plugin exists before setting up replicas.
ticket 502
2010-12-17 17:31:19 -05:00
Rob Crittenden 358b28398c Move automount, default HBAC services, netgroup and hostgroup bootstrapping.
There is no need for these to be done as updates, just add these entries
to the bootstrapping.
2010-12-17 17:31:19 -05:00
Rob Crittenden 1207a7c83f Fix the change_password permissions and the DNS access controls.
The change_password permission was too broad, limit it to users.

The DNS access controls rolled everything into a single ACI. I broke
it out into separate ACIs for add, delete and add. I also added a new
dns type for the permission plugin.

ticket 628
2010-12-17 17:16:25 -05:00
Rob Crittenden b66c680f86 Remove principal as an option when updating an existing user.
ticket 559
2010-12-17 17:08:12 -05:00
Rob Crittenden ffc967b47a Fix a slew of tests.
- Skip the DNS tests if DNS isn't configured
- Add new attributes to user entries (displayname, cn and initials)
- Make the nsaccountlock value consistent
- Fix the cert subject for cert tests
2010-12-17 17:01:57 -05:00
Rob Crittenden 623abc6bdf Properly quote passwords sent to pkisilent so special characters work.
Also check for url-encoded passwords before logging them.

ticket 324
2010-12-17 16:50:14 -05:00
Rob Crittenden 8f87aa1288 Add krb5-pkinit-openssl as a Requires on ipa-server package
ticket 599
2010-12-16 09:33:11 -05:00
Rob Crittenden e0a39234f7 Add metadata for the selfservice and delegation plugins. 2010-12-14 11:06:51 -05:00
Rob Crittenden cd7b64103b Add group to group delegation plugin.
This is a thin wrapper around the ACI plugin that manages granting group A
the ability to write a set of attributes of group B.

ticket 532
2010-12-13 20:15:46 -05:00
Rob Crittenden 8a534bf07b Give the memberof plugin time to work when adding/removing reverse members.
When we add/remove reverse members it looks like we're operating on group A
but we're really operating on group B. This adds/removes the member attribute
on group B and the memberof plugin adds the memberof attribute into group A.

We need to give the memberof plugin a chance to do its work so loop a few
times, reading the entry to see if the number of memberof is more or less
what we expect. Bail out if it is taking too long.

ticket 560
2010-12-13 17:58:43 -05:00