From f9a95c83ef9379a0cf6d4d46f35ca0a12b84dd9b Mon Sep 17 00:00:00 2001 From: Frank Lahm Date: Wed, 30 Nov 2011 14:27:44 +0100 Subject: [PATCH] Several small fixes, from Riccardo Magliocchetti --- etc/afpd/afp_asp.c | 3 ++- etc/afpd/appl.c | 2 ++ etc/afpd/dircache.c | 1 + etc/afpd/unix.c | 1 + etc/atalkd/config.c | 2 ++ etc/cnid_dbd/dbif.c | 27 ++++++++++++++++----------- etc/uams/uams_passwd.c | 4 ++-- 7 files changed, 26 insertions(+), 14 deletions(-) diff --git a/etc/afpd/afp_asp.c b/etc/afpd/afp_asp.c index ea916d8b..3e208f74 100644 --- a/etc/afpd/afp_asp.c +++ b/etc/afpd/afp_asp.c @@ -88,7 +88,6 @@ static void afp_authprint_remove(AFPObj *obj) if ((len = read( capfd, addr_filename_buff, 256 )) > 0) { int file_pid; char *p_filepid; - close(capfd); addr_filename_buff[len] = 0; if ( (p_filepid = strrchr(addr_filename_buff, ':')) != NULL) { *p_filepid = '\0'; @@ -116,6 +115,8 @@ static void afp_authprint_remove(AFPObj *obj) } else { LOG(log_info, logtype_afpd, "couldn't read data from %s", addr_filename ); } + if (capfd != -1) + close(capfd); } else { LOG(log_info, logtype_afpd, "%s is not a regular file", addr_filename ); } diff --git a/etc/afpd/appl.c b/etc/afpd/appl.c index 51b64ef2..d791d280 100644 --- a/etc/afpd/appl.c +++ b/etc/afpd/appl.c @@ -250,6 +250,7 @@ int afp_addappl(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, siz mpath = obj->newtmp; mp = makemacpath( vol, mpath, AFPOBJ_TMPSIZ, curdir, path->m_name ); if (!mp) { + close(tfd); return AFPERR_PARAM; } mplen = mpath + AFPOBJ_TMPSIZ - mp; @@ -263,6 +264,7 @@ int afp_addappl(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, siz memcpy(p, appltag, sizeof( appltag )); cc = mpath + AFPOBJ_TMPSIZ - p; if ( write( tfd, p, cc ) != cc ) { + close(tfd); unlink( tempfile ); return( AFPERR_PARAM ); } diff --git a/etc/afpd/dircache.c b/etc/afpd/dircache.c index d3b8b6fc..05eaff01 100644 --- a/etc/afpd/dircache.c +++ b/etc/afpd/dircache.c @@ -693,5 +693,6 @@ void dircache_dump(void) fprintf(dump, "\n"); fflush(dump); + fclose(dump); return; } diff --git a/etc/afpd/unix.c b/etc/afpd/unix.c index 8d60a6ef..cc10d97b 100644 --- a/etc/afpd/unix.c +++ b/etc/afpd/unix.c @@ -393,6 +393,7 @@ int setdirmode(const struct vol *vol, const char *name, mode_t mode) int setmode = (osx && *dirp->d_name == '.')?hf_mode:mode; if (setfilmode(dirp->d_name, setmode, &st, vol->v_umask) < 0) { + closedir( dir ); LOG(log_error, logtype_afpd, "setdirmode: chmod %s: %s",dirp->d_name, strerror(errno) ); return -1; } diff --git a/etc/atalkd/config.c b/etc/atalkd/config.c index 957c18a2..4005d699 100644 --- a/etc/atalkd/config.c +++ b/etc/atalkd/config.c @@ -871,6 +871,8 @@ int plumb(void) } LOG(log_info, logtype_atalkd, "plumbed %s%d", device, ppa ); + + close(fd); } return( 0 ); diff --git a/etc/cnid_dbd/dbif.c b/etc/cnid_dbd/dbif.c index ac67e4dc..b96b2e68 100644 --- a/etc/cnid_dbd/dbif.c +++ b/etc/cnid_dbd/dbif.c @@ -21,6 +21,7 @@ #include #include +#include #include "db_param.h" #include "dbif.h" @@ -33,27 +34,28 @@ */ static int dbif_stamp(DBD *dbd, void *buffer, int size) { + EC_INIT; struct stat st; - int rc,cwd; + int cwd = -1; if (size < 8) - return -1; + EC_FAIL; /* Remember cwd */ if ((cwd = open(".", O_RDONLY)) < 0) { LOG(log_error, logtype_cnid, "error opening cwd: %s", strerror(errno)); - return -1; + EC_FAIL; } /* chdir to db_envhome */ if ((chdir(dbd->db_envhome)) != 0) { LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno)); - return -1; + EC_FAIL; } - if ((rc = stat(dbd->db_table[DBIF_CNID].name, &st)) < 0) { + if (stat(dbd->db_table[DBIF_CNID].name, &st) < 0) { LOG(log_error, logtype_cnid, "error stating database %s: %s", dbd->db_table[DBIF_CNID].name, db_strerror(errno)); - return -1; + EC_FAIL; } LOG(log_maxdebug, logtype_cnid,"stamp: %s", asctime(localtime(&st.st_ctime))); @@ -61,12 +63,15 @@ static int dbif_stamp(DBD *dbd, void *buffer, int size) memset(buffer, 0, size); memcpy(buffer, &st.st_ctime, sizeof(st.st_ctime)); - if ((fchdir(cwd)) != 0) { - LOG(log_error, logtype_cnid, "error chdiring back: %s", strerror(errno)); - return -1; +EC_CLEANUP: + if (cwd != -1) { + if (fchdir(cwd) != 0) { + LOG(log_error, logtype_cnid, "error chdiring back: %s", strerror(errno)); + EC_STATUS(-1); + } + close(cwd); } - - return 0; + EC_EXIT; } /*! diff --git a/etc/uams/uams_passwd.c b/etc/uams/uams_passwd.c index db9be446..36d7a387 100644 --- a/etc/uams/uams_passwd.c +++ b/etc/uams/uams_passwd.c @@ -109,7 +109,7 @@ static int pwd_login(void *obj, char *username, int ulen, struct passwd **uam_pw } pwd->pw_passwd = sp->sp_pwdp; - if (sp && sp->sp_max != -1 && sp->sp_lstchg) { + if (sp->sp_max != -1 && sp->sp_lstchg) { time_t now = time(NULL) / (60*60*24); int32_t expire_days = sp->sp_lstchg - now + sp->sp_max; if ( expire_days < 0 ) { @@ -338,7 +338,7 @@ static int passwd_printer(char *start, char *stop, char *username, struct papfil } pwd->pw_passwd = sp->sp_pwdp; - if (sp && sp->sp_max != -1 && sp->sp_lstchg) { + if (sp->sp_max != -1 && sp->sp_lstchg) { time_t now = time(NULL) / (60*60*24); int32_t expire_days = sp->sp_lstchg - now + sp->sp_max; if ( expire_days < 0 ) { -- 2.39.2