[Fedora-directory-commits] ldapserver/ldap/servers/slapd protect_db.c, 1.10, 1.11 main.c, 1.19, 1.20 log.c, 1.15, 1.16 libglobs.c, 1.18, 1.19 slap.h, 1.24, 1.25
Noriko Hosoi (nhosoi)
fedora-directory-commits at redhat.com
Fri Aug 17 02:12:39 UTC 2007
- Previous message (by thread): [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm dbhelp.c, 1.7, 1.8 dblayer.c, 1.18, 1.19
- Next message (by thread): [Fedora-directory-commits] adminserver configure.ac, 1.18, 1.19 aclocal.m4, 1.29, 1.30 configure, 1.32, 1.33 missing, 1.20, 1.21 install-sh, 1.20, 1.21 depcomp, 1.20, 1.21 config.sub, 1.20, 1.21 config.guess, 1.20, 1.21 compile, 1.19, 1.20 Makefile.in, 1.35, 1.36
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: nhosoi
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9738
Modified Files:
protect_db.c main.c log.c libglobs.c slap.h
Log Message:
Resolves: #253069
Summary: cyclic dependency from getpwnam() in log rotation code
Description: Moved getpwnam call to the startup time, store the info in
slapdFrontendConfig to reuse.
Index: protect_db.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/protect_db.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- protect_db.c 16 Aug 2007 19:28:57 -0000 1.10
+++ protect_db.c 17 Aug 2007 02:12:37 -0000 1.11
@@ -201,17 +201,16 @@
}
/* Make sure it's owned by the correct user */
- if (slapdFrontendConfig->localuser != NULL) {
- if ( (pw = getpwnam(slapdFrontendConfig->localuser)) == NULL ) {
- LDAPDebug(LDAP_DEBUG_ANY, GETPWNAM_WARNING, slapdFrontendConfig->localuser, errno, strerror(errno));
- } else {
+ if (slapdFrontendConfig->localuser != NULL &&
+ slapdFrontendConfig->localuserinfo != NULL) {
+ pw = slapdFrontendConfig->localuserinfo;
if (chown(dir, pw->pw_uid, -1) == -1) {
stat(dir, &stat_buffer);
if (stat_buffer.st_uid != pw->pw_uid) {
LDAPDebug(LDAP_DEBUG_ANY, CHOWN_WARNING, dir, 0, 0);
+ return 1;
}
}
- } /* else */
}
return 0;
@@ -233,24 +232,23 @@
file_name[sizeof(file_name)-1] = (char)0;
if ((prfd = PR_Open(file_name, PR_RDWR | PR_CREATE_FILE, 0666)) == NULL) {
- LDAPDebug(LDAP_DEBUG_ANY, FILE_CREATE_WARNING, file_name, 0, 0);
- return;
+ LDAPDebug(LDAP_DEBUG_ANY, FILE_CREATE_WARNING, file_name, 0, 0);
+ return;
}
/* Make sure the owner is of the file is the user the server
* runs as. */
- if (slapdFrontendConfig->localuser != NULL) {
- if ( (pw = getpwnam(slapdFrontendConfig->localuser)) == NULL ) {
- LDAPDebug(LDAP_DEBUG_ANY, GETPWNAM_WARNING, slapdFrontendConfig->localuser, errno, strerror(errno));
- } else {
+ if (slapdFrontendConfig->localuser != NULL &&
+ slapdFrontendConfig->localuserinfo != NULL) {
+ pw = slapdFrontendConfig->localuserinfo;
if (chown(file_name, pw->pw_uid, -1) == -1) {
stat(file_name, &stat_buffer);
if (stat_buffer.st_uid != pw->pw_uid) {
LDAPDebug(LDAP_DEBUG_ANY, CHOWN_WARNING, file_name, 0, 0);
}
}
- } /* else */
}
+bail:
PR_Close(prfd);
}
Index: main.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/main.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- main.c 3 Aug 2007 22:14:41 -0000 1.19
+++ main.c 17 Aug 2007 02:12:37 -0000 1.20
@@ -247,8 +247,8 @@
/* change the owner for each of the files in the dir */
while( (entry = PR_ReadDir(dir , PR_SKIP_BOTH )) !=NULL )
{
- PR_snprintf(file,MAXPATHLEN+1,"%s/%s",log,entry->name);
- slapd_chown_if_not_owner( file, pw->pw_uid, -1 );
+ PR_snprintf(file,MAXPATHLEN+1,"%s/%s",log,entry->name);
+ slapd_chown_if_not_owner( file, pw->pw_uid, -1 );
}
PR_CloseDir( dir );
}
@@ -267,14 +267,23 @@
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-
- if ( slapdFrontendConfig->localuser != NULL ) {
- if ( (pw = getpwnam( slapdFrontendConfig->localuser )) == NULL )
- return;
- }
- else {
- return;
+ if (slapdFrontendConfig->localuser != NULL) {
+ if (slapdFrontendConfig->localuserinfo == NULL) {
+ pw = getpwnam( slapdFrontendConfig->localuser );
+ if ( NULL == pw ) {
+ LDAPDebug(LDAP_DEBUG_ANY,
+ "Unable to find user %s in system account database, "
+ "errno %d (%s)\n",
+ slapdFrontendConfig->localuser, errno, strerror(errno));
+ return;
+ }
+ slapdFrontendConfig->localuserinfo =
+ (struct passwd *)slapi_ch_malloc(sizeof(struct passwd));
+ memcpy(slapdFrontendConfig->localuserinfo, pw, sizeof(struct passwd));
+ }
+ pw = slapdFrontendConfig->localuserinfo;
}
+
/* config directory needs to be owned by the local user */
if (slapdFrontendConfig->configdir) {
chown_dir_files(slapdFrontendConfig->configdir, pw, PR_FALSE);
Index: log.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/log.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- log.c 10 Nov 2006 23:45:40 -0000 1.15
+++ log.c 17 Aug 2007 02:12:37 -0000 1.16
@@ -3480,9 +3480,9 @@
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
#ifndef _WIN32
- if ( slapdFrontendConfig->localuser != NULL ) {
- if ( (pw = getpwnam( slapdFrontendConfig->localuser )) == NULL )
- return LOG_UNABLE_TO_OPENFILE;
+ if ( slapdFrontendConfig->localuser != NULL &&
+ slapdFrontendConfig->localuserinfo != NULL ) {
+ pw = slapdFrontendConfig->localuserinfo;
}
else {
return LOG_UNABLE_TO_OPENFILE;
Index: libglobs.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/libglobs.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- libglobs.c 11 Jul 2007 01:14:05 -0000 1.18
+++ libglobs.c 17 Aug 2007 02:12:37 -0000 1.19
@@ -2500,9 +2500,20 @@
}
if (apply) {
+ struct passwd *pw = NULL;
CFG_LOCK_WRITE(slapdFrontendConfig);
slapi_ch_free ( (void **) &slapdFrontendConfig->localuser );
slapdFrontendConfig->localuser = slapi_ch_strdup ( value );
+ if (slapdFrontendConfig->localuserinfo != NULL) {
+ slapi_ch_free ( (void **) &(slapdFrontendConfig->localuserinfo) );
+ }
+ pw = getpwnam( value );
+ if ( pw ) {
+ slapdFrontendConfig->localuserinfo =
+ (struct passwd *)slapi_ch_malloc(sizeof(struct passwd));
+ memcpy(slapdFrontendConfig->localuserinfo, pw, sizeof(struct passwd));
+ }
+
CFG_UNLOCK_WRITE(slapdFrontendConfig);
}
return retVal;
Index: slap.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slap.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- slap.h 3 Aug 2007 22:14:41 -0000 1.24
+++ slap.h 17 Aug 2007 02:12:37 -0000 1.25
@@ -1925,6 +1925,9 @@
char *ldapi_gidnumber_type; /* type that contains gid number */
char *ldapi_search_base_dn; /* base dn to search for mapped entries */
char *ldapi_auto_dn_suffix; /* suffix to be appended to auto gen DNs */
+#ifndef _WIN32
+ struct passwd *localuserinfo; /* userinfo of localuser */
+#endif /* _WIN32 */
} slapdFrontendConfig_t;
#define SLAPD_FULL 0
- Previous message (by thread): [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm dbhelp.c, 1.7, 1.8 dblayer.c, 1.18, 1.19
- Next message (by thread): [Fedora-directory-commits] adminserver configure.ac, 1.18, 1.19 aclocal.m4, 1.29, 1.30 configure, 1.32, 1.33 missing, 1.20, 1.21 install-sh, 1.20, 1.21 depcomp, 1.20, 1.21 config.sub, 1.20, 1.21 config.guess, 1.20, 1.21 compile, 1.19, 1.20 Makefile.in, 1.35, 1.36
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Fedora-directory-commits
mailing list