URL: https://github.com/SSSD/sssd/pull/175
Author: lslebodn
Title: #175: Add module for starting services
Action: opened
PR body:
"""
This is a WIP version of reducing code duplication in our cwrap integration tests.
I am still not sure whether we should also reuse function `create_sssd_fixture`.
And if yes; then probably in different nodule then `services`
And comments are welcome.
BTW I wrote patches few weeks ago; therefore new tests are not converted.
I am just sending patches to get some feedback.
Site effect of this patches is that tests are cca 20% faster (IIRC)
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/175/head:pr175
git checkout pr175
URL: https://github.com/SSSD/sssd/pull/844
Author: mastersin
Title: #844: sssd-ad and gpo_child: GPO apply fixes during reading fails
Action: opened
PR body:
"""
Ignore AD GPO errors:
- if SecEdit/GptTmpl.inf is missing
or
- if reading sysvol_gpt_version fails and cached_gpt_version already exists
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/844/head:pr844
git checkout pr844
URL: https://github.com/SSSD/sssd/pull/616
Author: asheplyakov
Title: #616: become_user: add supplementary groups so ad provider can access keytab
Action: opened
PR body:
"""
For security reasons one might want to run providers as a non-privileged
user (say, _sssd). However some providers (in particular ad) might need
an access to restricted (non world-readable) files (for instance,
/etc/krb5.keytab). One of the possible ways to solve the problem is to
- add a special group (for instance, _keytab)
- set the owner:group of the file in question to root:_keytab
- set the permissions of the file in question to 640
- make the _sssd user a member of the _keytab group
For this to work become_user should assign supplementary groups, which
is what this patch does.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/616/head:pr616
git checkout pr616
URL: https://github.com/SSSD/sssd/pull/943
Author: elkoniu
Title: #943: files_ops: Fix cached password remove
Action: opened
PR body:
"""
When SSSD daemon will detect refresh of password (group) file
it will delete all cached users (groups) data.
With this change cached data will be deleted only for non
existing users (groups).
Resolves:
https://pagure.io/SSSD/sssd/issue/3591
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/943/head:pr943
git checkout pr943
URL: https://github.com/SSSD/sssd/pull/269
Author: NWilson
Title: #269: Add support for ActiveDirectory's logonHours restrictions
Action: opened
PR body:
"""
This is a straightforward patch for denying access to a user when the user is not permitted to access their account due to logonHours restrictions.
This matches the default behaviour for domain-joined Windows machines. When outside the logonHours, all types of authentication are denied (password/Kerberos/certificate) - so it is appropriate to put this check inside the PAM "account" rules.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/269/head:pr269
git checkout pr269
URL: https://github.com/SSSD/sssd/pull/837
Author: sumit-bose
Title: #837: p11_child: make OCSP digest configurable
Action: opened
PR body:
"""
Currently sha1 is used to create the certid for an OCSP request. Since sha1
is not recommend for new applications anymore and not FIPS compliant this
patch changes the default to sha256 and makes the digest function
configurable as well.
Related to https://pagure.io/SSSD/sssd/issue/4032
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/837/head:pr837
git checkout pr837
URL: https://github.com/SSSD/sssd/pull/578
Author: amitkumar50
Title: #578: proxy: proxy_child hardening
Action: opened
PR body:
"""
proxy_child will call chdir("/"), umask(022)
and reset the environment with clearenv().
The --domain argument to be sanitized.
Resolves: https://pagure.io/SSSD/sssd/issue/2689
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/578/head:pr578
git checkout pr578
URL: https://github.com/SSSD/sssd/pull/1011
Author: pbrezina
Title: #1011: sysdb: check if the id override belongs to requested domain
Action: opened
PR body:
"""
Steps to reproduce:
1. Setup an id override (administrator(a)ad.vm: uid -> 10001)
2. Request user by name to fill cache
```
$ id Administrator(a)ad.vm
uid=10001(administrator(a)ad.vm) ...
```
3. Request user by id and see that domain part is missing
```
$ id 10001
uid=10001(administrator) ...
```
First, the uid is looked up in IPA domain and the override object is
found when we hit `sysdb_search_override_by_id` because id values are
not qualified. Therefore the origin object (administrator(a)ad.vm) is
returned as part of IPA domain.
We need to check if the original object belongs to the requested domain.
Resolves:
https://pagure.io/SSSD/sssd/issue/4173
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1011/head:pr1011
git checkout pr1011
URL: https://github.com/SSSD/sssd/pull/1005
Author: sumit-bose
Title: #1005: pam: Use cache for users with existing session
Action: opened
PR body:
"""
Users that have an existing session do the bulk of their authentication to
unlock services that do not make use of initgroups (used only to create a
new login session). Forcing online initgroups calls for these users leads
mostly to delays in providing those services and do not provide any useful
data.
Resolves: https://pagure.io/SSSD/sssd/issue/4098
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1005/head:pr1005
git checkout pr1005
URL: https://github.com/SSSD/sssd/pull/999
Author: alexey-tikhonov
Title: #999: Mem-cache fixes/improvements
Action: opened
PR body:
"""
This is set of patches consisting of the following:
(1) fix of https://pagure.io/SSSD/sssd/issue/4160
(2) revival of @mzidek-gh's patch to make size of mem-caches configurable (#390)
(3 & 4) slight improvements of (2)
(5) additional debug&syslog message to signal user that cache is full and may require change of size
This is to address https://github.com/SSSD/sssd/pull/390#issuecomment-371428333 (at least to some extent)
I keep those patches separate to make review easier. But if PR will be accepted then it makes sense to squash (2, 3 & 4) into single patch before merging.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/999/head:pr999
git checkout pr999
URL: https://github.com/SSSD/sssd/pull/1015
Author: pbrezina
Title: #1015: proxy: allow proxy provider to start without having proxy_resolver_lib_name set
Action: opened
PR body:
"""
Proxy provider fails to start unless `proxy_resolver_lib_name` is set
since recent hosts resolver addition. This would impact all existing
proxy provider configurations.
This patch makes sure that proxy resolver is disabled if the option
is not set but other functions are not affected.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1015/head:pr1015
git checkout pr1015
URL: https://github.com/SSSD/sssd/pull/992
Author: lfrancke
Title: #992: This changes the default ldap_group_name attribute to sAMAccountName
Action: opened
PR body:
"""
This changes the default ldap_group_name attribute to sAMAccountName when the ad schema is used for the LDAP provider.
This is to make it consistent with the AD provider which was changed in adb148603344a42d6edffdda0786a10af715dacb.
"name" is an optional field for the group class.
See https://lists.fedorahosted.org/archives/list/sssd-users@lists.fedorahosted.… for a short discussion
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/992/head:pr992
git checkout pr992
URL: https://github.com/SSSD/sssd/pull/1009
Author: noelpower
Title: #1009: Use ndr_pull_steal_switch_value for modern samba versions
Action: opened
PR body:
"""
commit bc56b10aea999284458dcc293b54cf65288e325d attempted to
fix the build error resulting from removal of 'ndr_pull_get_switch'
However this just basically leaves the old code in place, the
reason for the change in the samba code was to address a possible
NDR crash from possible illegal large array allocations, please
see https://bugzilla.samba.org/show_bug.cgi?id=13876
This change uses the new replacement method
'ndr_pull_steal_switch_value' if available and otherwise puts
back the old method (which better describes what the code is doing)
Signed-off-by: Noel Power <noel.power(a)suse.com>
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1009/head:pr1009
git checkout pr1009
URL: https://github.com/SSSD/sssd/pull/1013
Author: thalman
Title: #1013: SYSDB: override_gid not working for subdomains
Action: opened
PR body:
"""
The override_gid is not propagated to subdomain. This patch
assigns subdomain's override_gid to the value comming from
parent domain.
Resolves:
https://pagure.io/SSSD/sssd/issue/4061
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1013/head:pr1013
git checkout pr1013
URL: https://github.com/SSSD/sssd/pull/1014
Author: sumit-bose
Title: #1014: sysdb: sanitize certmap rule name before using it in DN
Action: opened
PR body:
"""
The name of a certificate mapping and matching rule might contain
characters which are not allowed in RDNs an must be escaped before if can
be used in the DN of the cached certmap object.
Resolves: https://pagure.io/SSSD/sssd/issue/3721
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1014/head:pr1014
git checkout pr1014
URL: https://github.com/SSSD/sssd/pull/1006
Author: elkoniu
Title: #1006: LDAP: Netgroups refresh in background task
Action: opened
PR body:
"""
refresh_expired_interval config value spawns be_task
responsible for refreshing expired cache entries
in background.
Netgroup related entries are stored in persistent
cache rather than timestamp cache. After sdap_refresh_step()
has been replaced by generic be_refresh_step()
lookup routine was searching for entries only in
timestamp cache. This result in LDAP netgroup entries
not refreshing in background.
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1779486
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1006/head:pr1006
git checkout pr1006
SSSD repository is currently spread over multiple places. We use Pagure
[1][2] to manage upstream issues and documentation and Github [3] as our
main development platform.
We chose to move only to a single platform to reduce number of tools we
use and to have everything at one place. We decided to move from Pagure
to Github.
This is only a heads up. Precise date will be set soon and I will notify
you on sssd-users and sssd-devel mailing lists.
There are several steps that needs to be done in order to achieve this
change but the most significant for our users and contributors is: We
will no longer accept new issues and pull request in Pagure and we will
kindly ask you to use Github instead.
Thank you.
Best regards,
Pavel.
[1] https://pagure.io/SSSD/sssd
[2] https://pagure.io/SSSD/docs
[3] https://github.com/SSSD/sssd
URL: https://github.com/SSSD/sssd/pull/1007
Author: elkoniu
Title: #1007: LDAP: Remove unused sdap_refresh code
Action: opened
PR body:
"""
There was a refactoring of LDAP background refresh task
in the middle of 2019 made by Jan Hrozek and Summit Bose.
Now LDAP refresh is done by generic be_refresh.
SDAP refresh functions are unused anymore.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1007/head:pr1007
git checkout pr1007
URL: https://github.com/SSSD/sssd/pull/693
Author: jhrozek
Title: #693: SYSDB: Fall back to the MPG result of getgrgid search if the non-MPG search for override doesn't match anything
Action: opened
PR body:
"""
Commit cf4f5e031ecbdfba0b55a4f69a06175a2e718e67 changed the logic of
getgrgid (and getpwnam, so far this patch only touches getgrgid) in the
sense that if looking up a GID in a MPG domain, the code checks if the GID
was overriden and if yes, it mandates that the overriden GID resolves to
a group by falling back to a non-MPG search.
This breaks the following use-case:
$ ipa idoverrideuser-add --uid=13133 --gidnumber=13133 'Default Trust View' user@domain
Most importantly, I'm on the fence about whether the current behaviour is
a bug or not. In general, I would have expected that if a primary GID is
overriden, you more or less break the MPG model, and then it's fair from
SSSD to make sure the GID number resolves to an entry. But apparently our
users were relying on the old behaviour where you can set the primary GID
with an override and then still resolve the primary group by ID to the user
entry.
So the patch in the PR is just a quick hack which sort of falls back to using
the user entry as the group if the overriden GID doesn't resolve to anything.
Should we support this use-case at all? Should we maybe limit it to
cases where the UID and GID are the same?
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/693/head:pr693
git checkout pr693
URL: https://github.com/SSSD/sssd/pull/596
Author: amitkumar50
Title: #596: [CONFDB]:[RFE] Add "enabled" option to domain section
Action: opened
PR body:
"""
Upstream Request:
Instead of enabling domains using the "domains" option in [sssd]
section we could have [domain/*] option "enabled". This would allow
admins to configure and enable domain in the same snippet file.
This Fix would be submitted in 2 patches:
Patch-1(This Patch):
- Introduces 'enabled' option in domain section
- Introduces 'CONFDB_DOMAIN_ENABLED' variable to retrieve enabled value
from confdb
- Code to call start_service() routine only for domains having enabled=1
Patch-2(Upcoming):
- Would remove 'domains' option from sssd section.
- Would remove corresponding code to parse 'domains' option
- Providing a check that atlest One domain have enabled option set.
Resolves: https://pagure.io/SSSD/sssd/issue/3735
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/596/head:pr596
git checkout pr596
URL: https://github.com/SSSD/sssd/pull/1003
Author: alexey-tikhonov
Title: #1003: Watchdog: fixes "off-by-one" error
Action: opened
PR body:
"""
'man sssd.conf': timeout: "Note that after three missed heartbeats
the process will terminate itself."
But implementation was:
```
\#define WATCHDOG_MAX_TICKS 3
...
if (__sync_add_and_fetch(&watchdog_ctx.ticks, 1) > WATCHDOG_MAX_TICKS) {
...
_exit(1);
```
-- since after reset ticks start from 0 effectively this was 4 heartbeats.
Fixed to match man page.
Resolves: https://pagure.io/SSSD/sssd/issue/4169
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1003/head:pr1003
git checkout pr1003
URL: https://github.com/SSSD/sssd/pull/1001
Author: sumit-bose
Title: #1001: ssh: fix matching rules default
Action: opened
PR body:
"""
Before the ssh_use_certificate_matching_rules option was added the ssh
responder returned ssh keys derived from all valid certificates. Since
the default of the ssh_use_certificate_matching_rules option is
'all_rules' in a case where no matching rules are defined all
certificated will be filtered out and no ssh keys are returned.
The intention of the default was to allow the same same certificates
which are allowed in the PAM responder for authentication. The missing
default matching rule which is currently use by the PAM responder if no
other rules are available is added by this patch.
There might still be a small regression in case certificates without the
extended key usage (EKU) clientAuth were used for ssh. In this case
'ssh_use_certificate_matching_rules = no_rules' or a suitable matching
rule must be added to the configuration.
Related to https://pagure.io/SSSD/sssd/issue/4121
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/1001/head:pr1001
git checkout pr1001
Hi,
I found the filtering of domain-local groups was implemented after a
change to query the group memberships from the LDAP server of the
domain the user belongs to instead of the global catalog, which had the
side effect of retrieving the DLGs of trusted domains [1].
This DLGs are cached but treated as non-POSIX gruops (no gid number
assigned and not returned), after the commit implementing the filter
[2].
I have found an use case where not filtering domain-local groups would
be useful. If you want to use group memberships in sudo rules to allow
temporary sudo access, the replication latency of global groups is very
high and can take up to 15 minutes, but using domain local groups
replication is done in less than one minute.
Would you willing to accept a patch adding a new parameter to disable
the filtering of DLGs?
Regards,
[1] https://pagure.io/SSSD/sssd/issue/2161
[2] https://pagure.io/SSSD/sssd/issue/2178
--
Samuel Cabrero / SUSE Labs Samba Team
GPG: D7D6 E259 F91C F0B3 2E61 1239 3655 6EC9 7051 0856
scabrero(a)suse.com
scabrero(a)suse.de
URL: https://github.com/SSSD/sssd/pull/993
Author: arkamar
Title: #993: configure: prefer python3 if available
Action: opened
PR body:
"""
We should prefer python3 every time when it is available regardless of
whether python3 binding are generated, otherwise `sbus_generate.sh` fails
in python3 only systems, where sssd is configured with
`--without-python3-bindings` parameter.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/993/head:pr993
git checkout pr993
URL: https://github.com/SSSD/sssd/pull/998
Author: mzidek-gh
Title: #998: spec: Do not overwrite /etc/pam.d/sssd-shadowutils on update
Action: opened
PR body:
"""
We should not overwrite this file when sssd-common is
updated.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/998/head:pr998
git checkout pr998
URL: https://github.com/SSSD/sssd/pull/979
Author: pbrezina
Title: #979: sdap: provide error message when password change fail in ldap_modify mode
Action: opened
PR body:
"""
Steps to reproduce:
1. Configure LDAP server to enable password constraints
2. Set ldap_pwmodify_mode = ldap_modify in [domain]
3. Run SSSD and authenticate as a user
4. Run passwd to change password, use password that does not meet requirements
It will print "password change successful" without this patch and server
error message with this patch applied.
Resolves:
https://pagure.io/SSSD/sssd/issue/4148
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/979/head:pr979
git checkout pr979
URL: https://github.com/SSSD/sssd/pull/996
Author: pbrezina
Title: #996: 1.16: failover: make sure we switch to anoter server if only port differs
Action: opened
PR body:
"""
This is a regression introduced in 735af71a8e169f17fa5462db610a1567c9618e29.
After this commit we checked only server name instead of name and port combo.
Steps to reproduce:
1. Configure SSSD to use two servers with same name but different ports
```
[domain/LDAP]
debug_level=0xFFF0
id_provider = ldap
ldap_uri = ldap://$SERVER1:12345,ldap://$SERVER1:389
ldap_tls_cacertdir = /etc/openldap/certs
ldap_search_base = dc=example,dc=com
```
2. The first server port is unreachable, the second is working.
3. Run sssd and try to resolve user.
4. Without the patch SSSD tries to connect to the first server twice
because new URI is not constructed and goes offline.
Resolves:
https://pagure.io/SSSD/sssd/issue/4112
Reviewed-by: Michal Židek <mzidek(a)redhat.com>
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/996/head:pr996
git checkout pr996
URL: https://github.com/SSSD/sssd/pull/918
Title: #918: Add support for NSS hosts database lookup.
sumit-bose commented:
"""
Hi,
> Fixed, I have skipped `sssd-ldap-attributes.5.xml` because other `ldap_*_entry_usn` are not there either.
That's ok, thanks.
> I have also fixed a couple of issues I found while working in the networks support.
I guess there is a fair chance that there still might be some copy-and-paste issues like the ones you fixed.
Nevertheless, ACK.
Thank you for you patience.
bye,
Sumit
"""
See the full comment at https://github.com/SSSD/sssd/pull/918#issuecomment-594536408
URL: https://github.com/SSSD/sssd/pull/997
Author: tscherf
Title: #997: Fix sssd-ldap man page
Action: opened
PR body:
"""
The option 'ldap_default_authtok_type' also accepts non clear text passwords
in the meantime.
Signed-off-by: Thorsten Scherf <tscherf(a)redhat.com>
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/997/head:pr997
git checkout pr997
URL: https://github.com/SSSD/sssd/pull/918
Title: #918: Add support for NSS hosts database lookup.
scabrero commented:
"""
Fixed, I have skipped `sssd-ldap-attributes.5.xml` because other `ldap_*_entry_usn` are not there either. I have also fixed a couple of issues I found while working in the networks support.
"""
See the full comment at https://github.com/SSSD/sssd/pull/918#issuecomment-594436135
Hi devs,
I'm thinking about ways to implement SSSD KCM notification that
something has changed (i.e. user called kinit/kdestroy) [1]. The main
use case is to notify Gnome Online Accounts (which is a daemon running
under logged-in user) when something has changed and it is already a
D-Bus service.
The basic idea is that we would use D-Bus signals that would be emitted
by SSSD KCM responder (sssd_kcm process). Signals are broadcasted
messages that are delivered to client that chose to listen to them.
The problem is that we
1) can't connect to specific user's session bus because KCM runs as
root/sssd and connecting to other user's bus is not allowed
2) can't specify which user is allowed to get the signal
3) therefore we can't send the signal only to specific user
So the solution is that KCM connects to system bus and sends
org.sssd.kcm.Changed(uid) signal where uid is uid of the user which
ccache has changed so the receiver can know which user is affected. This
signal is broadcasted to everyone who listens to it.
It is perfectly usable, however the question is whether we can broadcast
this information (that user A run kinit/kdestroy/other modification of
ccache) or it is a security leak that we must avoid and we should seek
other solution.
I asked this secalert and they reply that there is no security concern
"but":
> After looking at this issue, honestly I dont see an attack vector here, but i am afraid something like this could be used with some other security flaw to maybe gain privesc? For example a flaw which is some component which can be triggered only when kinit is run? where precise timing is required.
>
> So in conclusion if there is another "better" solution than it should be preferred. Or in worse case atleast have an option to disable this somehow via some config, so that such situations can be avoided.
I don't think a precise timing is necessary and we can send the signal
few miliseconds or a second later. That should eliminate this concern (I
asked this, waiting for an answer).
I can think of two more solutions currently:
1) Have client connect to KCM socket and await signal there. This
however would mean that connection between client and KCM need to be
always established and KCM responder would be running all the time
(currently it is only short-lived socket activated process).
2) Create a temporary file in a directory owned by user. User can then
setup inotify watch to the file and sssd would write to the file on
changes. Since it is in directory owned by user, other users would not
be able to setup the watch.
Note that it is possile to setup inotify watch on FILE ccache (keeping
distro settings out of the question the default ccache is
FILE:/tmp/krb5cc_%{uid} as per krb5.conf manpage) so perhaps we really
don't have to care about broadcasting this information.
Thanks,
Pavel.
[1] https://pagure.io/SSSD/sssd/issue/3568
URL: https://github.com/SSSD/sssd/pull/970
Author: alexey-tikhonov
Title: #970: sss_ptr_hash: pass new hash_entry_t to custom delete callback
Action: opened
PR body:
"""
This is backport of f95db37aa8486304d0569d12a876b1c74ee1b0d1 amended with PR 968
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/970/head:pr970
git checkout pr970
URL: https://github.com/SSSD/sssd/pull/994
Author: mzidek-gh
Title: #994: sssd.spec: Add recommended packages
Action: opened
PR body:
"""
sssd-dbus is recommended for tools and SSSD's logrotate
support can only be useful with the logrotate package
in place. It makes sense to recommend them.
"""
To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/994/head:pr994
git checkout pr994