The following commit has been merged in the master branch:
commit 109f215f03425682997b3210d9b587a79aca1f6a
Author: Guillem Jover <[email protected]>
Date:   Wed Sep 9 17:50:14 2009 +0200

    Only use errno for error reason when securely removing a file
    
    There's no point in setting an error string, it complicates the code
    needlessly and the reason is in errno anyway.

diff --git a/src/help.c b/src/help.c
index 3184b40..03af902 100644
--- a/src/help.c
+++ b/src/help.c
@@ -504,27 +504,27 @@ void oldconffsetflags(const struct conffile *searchconff) 
{
   }
 }
 
-int chmodsafe_unlink(const char *pathname, const char **failed) {
-  /* Sets *failed to `chmod' or `unlink' if those calls fail (which is
-   * always unexpected).  If stat fails it leaves *failed alone. */
+int
+chmodsafe_unlink(const char *pathname)
+{
   struct stat stab;
 
   if (lstat(pathname,&stab)) return -1;
-  *failed= N_("unlink");
-  return chmodsafe_unlink_statted(pathname, &stab, failed);
+
+  return chmodsafe_unlink_statted(pathname, &stab);
 }
-  
-int chmodsafe_unlink_statted(const char *pathname, const struct stat *stab,
-                            const char **failed) {
-  /* Sets *failed to `chmod'' if that call fails (which is always
-   * unexpected).  If unlink fails it leaves *failed alone. */
+
+int
+chmodsafe_unlink_statted(const char *pathname, const struct stat *stab)
+{
   if (S_ISREG(stab->st_mode) ? (stab->st_mode & 07000) :
       !(S_ISLNK(stab->st_mode) || S_ISDIR(stab->st_mode) ||
        S_ISFIFO(stab->st_mode) || S_ISSOCK(stab->st_mode))) {
     /* We chmod it if it is 1. a sticky or set-id file, or 2. an unrecognised
      * object (ie, not a file, link, directory, fifo or socket)
      */
-    if (chmod(pathname,0600)) { *failed= N_("chmod"); return -1; }
+    if (chmod(pathname, 0600))
+      return -1;
   }
   if (unlink(pathname)) return -1;
   return 0;
@@ -532,7 +532,7 @@ int chmodsafe_unlink_statted(const char *pathname, const 
struct stat *stab,
 
 void ensure_pathname_nonexisting(const char *pathname) {
   int c1;
-  const char *u, *failed;
+  const char *u;
 
   u = path_skip_slash_dotslash(pathname);
   assert(*u);
@@ -540,18 +540,16 @@ void ensure_pathname_nonexisting(const char *pathname) {
   debug(dbg_eachfile,"ensure_pathname_nonexisting `%s'",pathname);
   if (!rmdir(pathname)) return; /* Deleted it OK, it was a directory. */
   if (errno == ENOENT || errno == ELOOP) return;
-  failed= N_("delete");
   if (errno == ENOTDIR) {
     /* Either it's a file, or one of the path components is.  If one
      * of the path components is this will fail again ...
      */
-    if (!chmodsafe_unlink(pathname, &failed)) return; /* OK, it was */
+    if (chmodsafe_unlink(pathname) == 0)
+      return; /* OK, it was */
     if (errno == ENOTDIR) return;
   }
   if (errno != ENOTEMPTY && errno != EEXIST) { /* Huh ? */
-    const char *failed_local = gettext(failed);
-
-    ohshite(_("failed to %s '%.255s'"), failed_local, pathname);
+    ohshite(_("unable to securely remove '%.255s'"), pathname);
   }
   c1= m_fork();
   if (!c1) {
diff --git a/src/main.h b/src/main.h
index 8f1829e..1921724 100644
--- a/src/main.h
+++ b/src/main.h
@@ -231,9 +231,8 @@ int force_conff_miss(struct deppossi *possi);
 int force_conflicts(struct deppossi *possi);
 void oldconffsetflags(const struct conffile *searchconff);
 void ensure_pathname_nonexisting(const char *pathname);
-int chmodsafe_unlink(const char *pathname, const char **failed);
-int chmodsafe_unlink_statted(const char *pathname, const struct stat *stab,
-                            const char **failed);
+int chmodsafe_unlink(const char *pathname);
+int chmodsafe_unlink_statted(const char *pathname, const struct stat *stab);
 void checkpath(void);
 
 struct filenamenode *namenodetouse(struct filenamenode*, struct pkginfo*);
diff --git a/src/processarc.c b/src/processarc.c
index 1d40f81..6fd0f7f 100644
--- a/src/processarc.c
+++ b/src/processarc.c
@@ -74,7 +74,7 @@ void process_archive(const char *filename) {
   char *cidir, *cidirrest, *p;
   char *pfilenamebuf, conffilenamebuf[MAXCONFFILENAME];
   char *psize;
-  const char *pfilename, *newinfofilename, *failed;
+  const char *pfilename, *newinfofilename;
   struct fileinlist *newconff, **newconffileslastp;
   struct fileinlist *cfile;
   struct reversefilelistiter rlistit;
@@ -759,12 +759,9 @@ void process_archive(const char *filename) {
       if (sameas)
        continue;
 
-      failed= N_("delete");
-      if (chmodsafe_unlink_statted(fnamevb.buf, &oldfs, &failed)) {
-        const char *failed_local = gettext(failed);
-
-        warning(_("unable to %s old file '%.250s': %s"),
-                failed_local, namenode->name, strerror(errno));
+      if (chmodsafe_unlink_statted(fnamevb.buf, &oldfs)) {
+        warning(_("unable to securely remove old file '%.250s': %s"),
+                namenode->name, strerror(errno));
       }
 
     } /* !S_ISDIR */

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to