]> granicus.if.org Git - sudo/commitdiff
Remove touch() from fileops.c and just call utimes/futimes directly.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 26 Jun 2014 21:51:15 +0000 (15:51 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 26 Jun 2014 21:51:15 +0000 (15:51 -0600)
Rename lock_file -> sudo_lock_file to avoid namespace pollution

include/fileops.h
lib/util/fileops.c
lib/util/util.exp
plugins/sudoers/iolog.c
plugins/sudoers/ldap.c
plugins/sudoers/logging.c
plugins/sudoers/timestamp.c
plugins/sudoers/visudo.c
src/sudo_edit.c

index 44cf9d6ded7c48a92f4989404e20d3f294cf1834..c1a36401644e386d9c74f5a4071afcafa5cbdeae 100644 (file)
@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 2010, 2011, 2013 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2010, 2011, 2013, 2014
+ *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -26,8 +27,7 @@
 
 struct timeval;
 
-__dso_public bool lock_file(int, int);
-__dso_public int touch(int, char *, struct timeval *);
+__dso_public bool sudo_lock_file(int, int);
 __dso_public ssize_t  sudo_parseln(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp);
 
 #endif /* _SUDO_FILEOPS_H */
index c0f34519c95700da93a31766f05e094651bc80bc..3f715cea4cd671d2c4bf70d1aae9eb679779acdd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999-2005, 2007, 2009-2013
+ * Copyright (c) 1999-2005, 2007, 2009-2014
  *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
 #else
 # include "compat/stdbool.h"
 #endif
-#ifdef TIME_WITH_SYS_TIME
-# include <time.h>
-#endif
-#ifndef HAVE_STRUCT_TIMESPEC
-# include "compat/timespec.h"
-#endif
 
 #include "missing.h"
 #include "fileops.h"
 #include "sudo_debug.h"
 
-/*
- * Update the access and modify times on an fd or file.
- */
-int
-touch(int fd, char *path, struct timeval *tvp)
-{
-    struct timeval times[2];
-    int rval = -1;
-    debug_decl(touch, SUDO_DEBUG_UTIL)
-
-    if (tvp != NULL) {
-       times[0].tv_sec = times[1].tv_sec = tvp->tv_sec;
-       times[0].tv_usec = times[1].tv_usec = tvp->tv_usec;
-    }
-
-#if defined(HAVE_FUTIME) || defined(HAVE_FUTIMES)
-    if (fd != -1)
-       rval = futimes(fd, tvp ? times : NULL);
-    else
-#endif
-    if (path != NULL)
-       rval = utimes(path, tvp ? times : NULL);
-    debug_return_int(rval);
-}
-
 /*
  * Lock/unlock a file.
  */
 #ifdef HAVE_LOCKF
 bool
-lock_file(int fd, int lockit)
+sudo_lock_file(int fd, int lockit)
 {
     int op = 0;
-    debug_decl(lock_file, SUDO_DEBUG_UTIL)
+    debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL)
 
     switch (lockit) {
        case SUDO_LOCK:
@@ -117,10 +86,10 @@ lock_file(int fd, int lockit)
 }
 #elif defined(HAVE_FLOCK)
 bool
-lock_file(int fd, int lockit)
+sudo_lock_file(int fd, int lockit)
 {
     int op = 0;
-    debug_decl(lock_file, SUDO_DEBUG_UTIL)
+    debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL)
 
     switch (lockit) {
        case SUDO_LOCK:
@@ -137,12 +106,12 @@ lock_file(int fd, int lockit)
 }
 #else
 bool
-lock_file(int fd, int lockit)
+sudo_lock_file(int fd, int lockit)
 {
 #ifdef F_SETLK
     int func;
     struct flock lock;
-    debug_decl(lock_file, SUDO_DEBUG_UTIL)
+    debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL)
 
     lock.l_start = 0;
     lock.l_len = 0;
index 981e5d84858fc37f3ffd43681777616f4170b6ed..7c05a4f3b8dec1aea6a962b13ff10502fff7b1f9 100644 (file)
@@ -50,7 +50,6 @@ lbuf_append_quoted
 lbuf_destroy
 lbuf_init
 lbuf_print
-lock_file
 parse_gid_list
 sudo_asprintf
 sudo_clock_gettime
@@ -116,6 +115,7 @@ sudo_getopt_long_only
 sudo_glob
 sudo_globfree
 sudo_inet_pton
+sudo_lock_file
 sudo_memrchr
 sudo_memset_s
 sudo_mkdtemp
@@ -142,7 +142,6 @@ term_kill
 term_noecho
 term_raw
 term_restore
-touch
 vfatal_nodebug
 vfatalx_nodebug
 vwarning_nodebug
index 18200d96cfe85e75edbb5d48c0a4a51c0af461a0..9c8a7e72aff5036b9375514aedeb33c2435b7e28 100644 (file)
@@ -209,7 +209,7 @@ io_nextid(char *iolog_dir, char *iolog_dir_fallback, char sessid[7])
        log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), pathbuf);
        debug_return_bool(false);
     }
-    lock_file(fd, SUDO_LOCK);
+    sudo_lock_file(fd, SUDO_LOCK);
 
     /*
      * If there is no seq file in iolog_dir and a fallback dir was
index 5890e4b962c404cb421c55cfac123fc151c4b18f..c2d04a139b03805db881bbd756d67454dd081436 100644 (file)
@@ -2118,7 +2118,7 @@ sudo_krb5_copy_cc_file(const char *old_ccname)
 
        if (ofd != -1) {
            (void) fcntl(ofd, F_SETFL, 0);
-           if (lock_file(ofd, SUDO_LOCK)) {
+           if (sudo_lock_file(ofd, SUDO_LOCK)) {
                snprintf(new_ccname, sizeof(new_ccname), "%s%s",
                    _PATH_TMP, "sudocc_XXXXXXXX");
                nfd = mkstemp(new_ccname);
index a84a13a25ba627d85a8cb75aa35111e08e01a56a..18fe3a1244dbe5fc4430edd0aedf8bc6438d02bf 100644 (file)
@@ -186,7 +186,7 @@ do_logfile(char *msg)
     if (fp == NULL) {
        send_mail(_("unable to open log file: %s: %s"),
            def_logfile, strerror(errno));
-    } else if (!lock_file(fileno(fp), SUDO_LOCK)) {
+    } else if (!sudo_lock_file(fileno(fp), SUDO_LOCK)) {
        send_mail(_("unable to lock log file: %s: %s"),
            def_logfile, strerror(errno));
     } else {
@@ -217,7 +217,7 @@ do_logfile(char *msg)
            efree(full_line);
        }
        (void) fflush(fp);
-       (void) lock_file(fileno(fp), SUDO_UNLOCK);
+       (void) sudo_lock_file(fileno(fp), SUDO_UNLOCK);
        (void) fclose(fp);
     }
     sudoers_setlocale(oldlocale, NULL);
index 8f75607ad57c8ad1eda005376a5029466fcf54a8..c41d2a36db722b7c41dbe0acd3c92de3b9b12f2d 100644 (file)
@@ -360,7 +360,7 @@ update_timestamp(struct passwd *pw)
     }
 
     /* Update record or append a new one. */
-    lock_file(fd, SUDO_LOCK);
+    sudo_lock_file(fd, SUDO_LOCK);
     ts_update_record(fd, &entry, timestamp_hint);
     close(fd);
 
@@ -444,7 +444,7 @@ timestamp_status(struct passwd *pw)
        status = TS_MISSING;
        goto done;
     }
-    lock_file(fd, SUDO_LOCK);
+    sudo_lock_file(fd, SUDO_LOCK);
 
     /* Ignore and clear time stamp file if mtime predates boot time. */
     if (fstat(fd, &sb) == 0) {
@@ -574,7 +574,7 @@ remove_timestamp(bool unlink_it)
        (void) restore_perms();
     if (fd == -1)
        goto done;
-    lock_file(fd, SUDO_LOCK);
+    sudo_lock_file(fd, SUDO_LOCK);
 
     /*
      * Find matching entries and invalidate them.
index eef6615331e2d6fa64e1a0d8975f37562aab8322..65696da484dd99cfc0bc7cab07cbc113e034b71e 100644 (file)
@@ -315,7 +315,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
     char *cp;                          /* scratch char pointer */
     char buf[PATH_MAX*2];              /* buffer used for copying files */
     char linestr[64];                  /* string version of lineno */
-    struct timeval tv, tv1, tv2;       /* time before and after edit */
+    struct timeval tv, times[2];       /* time before and after edit */
     struct timeval orig_mtim;          /* starting mtime of sudoers file */
     off_t orig_size;                   /* starting size of sudoers file */
     ssize_t nread;                     /* number of bytes read */
@@ -351,7 +351,9 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
        }
        (void) close(tfd);
     }
-    (void) touch(-1, sp->tpath, &orig_mtim);
+    times[0].tv_sec = times[1].tv_sec = orig_mtim.tv_sec;
+    times[0].tv_usec = times[1].tv_usec = orig_mtim.tv_usec;
+    (void) utimes(sp->tpath, times);
 
     /* Does the editor support +lineno? */
     if (lineno > 0)
@@ -421,9 +423,9 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
      *  XPG4 specifies that vi's exit value is a function of the
      *  number of errors during editing (?!?!).
      */
-    gettimeofday(&tv1, NULL);
+    gettimeofday(&times[0], NULL);
     if (run_command(editor, av) != -1) {
-       gettimeofday(&tv2, NULL);
+       gettimeofday(&times[1], NULL);
        /*
         * Sanity checks.
         */
@@ -451,7 +453,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
         * If mtime and size match but the user spent no measurable
         * time in the editor we can't tell if the file was changed.
         */
-       if (sudo_timevalcmp(&tv1, &tv2, !=))
+       if (sudo_timevalcmp(&times[0], &times[1], !=))
            modified = false;
     }
 
@@ -906,7 +908,7 @@ open_sudoers(const char *path, bool doedit, bool *keepopen)
            efree(entry);
            debug_return_ptr(NULL);
        }
-       if (!checkonly && !lock_file(entry->fd, SUDO_TLOCK))
+       if (!checkonly && !sudo_lock_file(entry->fd, SUDO_TLOCK))
            fatalx(U_("%s busy, try again later"), entry->path);
        if ((fp = fdopen(entry->fd, "r")) == NULL)
            fatal("%s", entry->path);
index 6073c79ffa00ca59fa7c982940c30188edb7b9c5..7a4ee3a4458511effd99ed5c23909c61e14d084b 100644 (file)
@@ -93,7 +93,7 @@ sudo_edit(struct command_details *command_details)
     int rc, i, j, ac, ofd, tfd, nargc, rval, tmplen;
     int editor_argc = 0, nfiles = 0;
     struct stat sb;
-    struct timeval tv, tv1, tv2;
+    struct timeval tv, times[2];
     struct tempfile {
        char *tfile;
        char *ofile;
@@ -211,10 +211,12 @@ sudo_edit(struct command_details *command_details)
         * We always update the stashed mtime because the time
         * resolution of the filesystem the temporary file is on may
         * not match that of the filesystem where the file to be edited
-        * resides.  It is OK if touch() fails since we only use the info
-        * to determine whether or not a file has been modified.
+        * resides.  It is OK if futimes() fails since we only use the
+        * info to determine whether or not a file has been modified.
         */
-       (void) touch(tfd, NULL, &tf[j].omtim);
+       times[0].tv_sec = times[1].tv_sec = tf[j].omtim.tv_sec;
+       times[0].tv_usec = times[1].tv_usec = tf[j].omtim.tv_usec;
+       (void) futimes(tfd, times);
        rc = fstat(tfd, &sb);
        if (!rc)
            mtim_get(&sb, &tf[j].omtim);
@@ -241,7 +243,7 @@ sudo_edit(struct command_details *command_details)
      * Run the editor with the invoking user's creds,
      * keeping track of the time spent in the editor.
      */
-    gettimeofday(&tv1, NULL);
+    gettimeofday(&times[0], NULL);
     memcpy(&editor_details, command_details, sizeof(editor_details));
     editor_details.uid = user_details.uid;
     editor_details.euid = user_details.uid;
@@ -251,7 +253,7 @@ sudo_edit(struct command_details *command_details)
     editor_details.groups = user_details.groups;
     editor_details.argv = nargv;
     rval = run_command(&editor_details);
-    gettimeofday(&tv2, NULL);
+    gettimeofday(&times[1], NULL);
 
     /* Copy contents of temp files to real ones */
     for (i = 0; i < nfiles; i++) {
@@ -279,7 +281,7 @@ sudo_edit(struct command_details *command_details)
             * If mtime and size match but the user spent no measurable
             * time in the editor we can't tell if the file was changed.
             */
-           if (sudo_timevalcmp(&tv1, &tv2, !=)) {
+           if (sudo_timevalcmp(&times[0], &times[1], !=)) {
                warningx(U_("%s unchanged"), tf[i].ofile);
                unlink(tf[i].tfile);
                close(tfd);