Second and hopefully final fix to .db sync when renaming a user; we must run
a full reindex in this case to remove the old record. #ifdef -u capability since this is available on FreeBSD only. PR: bin/16418 Problem pointed out by: Masachika ISHIZUKA <ishizuka@ish.org>
This commit is contained in:
parent
74c7cee09a
commit
f52bcb0a5c
@ -43,6 +43,7 @@ static const char rcsid[] =
|
|||||||
#include "pwupd.h"
|
#include "pwupd.h"
|
||||||
|
|
||||||
#define HAVE_PWDB_C 1
|
#define HAVE_PWDB_C 1
|
||||||
|
#define HAVE_PWDB_U 1
|
||||||
|
|
||||||
static char pathpwd[] = _PATH_PWD;
|
static char pathpwd[] = _PATH_PWD;
|
||||||
static char * pwpath = pathpwd;
|
static char * pwpath = pathpwd;
|
||||||
@ -150,9 +151,12 @@ pw_update(struct passwd * pwd, char const * user, int mode)
|
|||||||
#else
|
#else
|
||||||
{ /* No -C */
|
{ /* No -C */
|
||||||
#endif
|
#endif
|
||||||
char pfx[32];
|
char pfx[PWBUFSZ];
|
||||||
char pwbuf[PWBUFSZ];
|
char pwbuf[PWBUFSZ];
|
||||||
int l = sprintf(pfx, "%s:", user);
|
int l = snprintf(pfx, PWBUFSZ, "%s:", user);
|
||||||
|
#ifdef HAVE_PWDB_U
|
||||||
|
int isrename = strcmp(user, pwd->pw_name);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update the passwd file first
|
* Update the passwd file first
|
||||||
@ -172,10 +176,14 @@ pw_update(struct passwd * pwd, char const * user, int mode)
|
|||||||
fmtpwentry(pwbuf, pwd, PWF_MASTER);
|
fmtpwentry(pwbuf, pwd, PWF_MASTER);
|
||||||
rc = fileupdate(getpwpath(_MASTERPASSWD), 0644, pwbuf, pfx, l, mode);
|
rc = fileupdate(getpwpath(_MASTERPASSWD), 0644, pwbuf, pfx, l, mode);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
if (mode == UPD_DELETE)
|
#ifdef HAVE_PWDB_U
|
||||||
|
if (mode == UPD_DELETE || isrename)
|
||||||
|
#endif
|
||||||
rc = pwdb(NULL);
|
rc = pwdb(NULL);
|
||||||
|
#ifdef HAVE_PWDB_U
|
||||||
else
|
else
|
||||||
rc = pwdb("-u", pwd->pw_name, NULL);
|
rc = pwdb("-u", user, NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user