40 lines
1.4 KiB
Diff
40 lines
1.4 KiB
Diff
diff -Naur sssd-2.8.2/src/sss_client/common.c sssd-2.8.2-b/src/sss_client/common.c
|
|
--- sssd-2.8.2/src/sss_client/common.c 2023-03-28 11:25:28.000000000 +0800
|
|
+++ sssd-2.8.2-b/src/sss_client/common.c 2023-03-28 11:26:09.000000000 +0800
|
|
@@ -663,22 +663,27 @@
|
|
const char *socket_name,
|
|
int timeout)
|
|
{
|
|
- static pid_t mypid;
|
|
- struct stat mysb;
|
|
+ static pid_t mypid_s;
|
|
+ static ino_t myself_ino;
|
|
+ struct stat mypid_sb, myself_sb;
|
|
+ pid_t mypid_d;
|
|
int mysd;
|
|
int ret;
|
|
|
|
- if (getpid() != mypid) {
|
|
- ret = fstat(sss_cli_sd, &mysb);
|
|
+ ret = lstat("/proc/self/", &myself_sb);
|
|
+ mypid_d = getpid();
|
|
+ if (mypid_d != mypid_s || (ret == 0 && myself_sb.st_ino != myself_ino)) {
|
|
+ ret = fstat(sss_cli_sd, &mypid_sb);
|
|
if (ret == 0) {
|
|
- if (S_ISSOCK(mysb.st_mode) &&
|
|
- mysb.st_dev == sss_cli_sb.st_dev &&
|
|
- mysb.st_ino == sss_cli_sb.st_ino) {
|
|
+ if (S_ISSOCK(mypid_sb.st_mode) &&
|
|
+ mypid_sb.st_dev == sss_cli_sb.st_dev &&
|
|
+ mypid_sb.st_ino == sss_cli_sb.st_ino) {
|
|
sss_cli_close_socket();
|
|
}
|
|
}
|
|
sss_cli_sd = -1;
|
|
- mypid = getpid();
|
|
+ mypid_s = mypid_d;
|
|
+ myself_ino = myself_sb.st_ino;
|
|
}
|
|
|
|
/* check if the socket has been closed on the other side */
|