]> granicus.if.org Git - sudo/commitdiff
Trim leading slashes from iolog_file and trailing slashes from iolog_dir
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 30 Dec 2010 23:05:53 +0000 (18:05 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 30 Dec 2010 23:05:53 +0000 (18:05 -0500)
plugins/sudoers/iolog.c
plugins/sudoers/iolog_path.c

index 0c5d5f546e2b420e020f0b8361784d1ea6ecf3e6..d05b8e11d394e6024d8bd1bed7b8ed5a13519f6f 100644 (file)
@@ -209,29 +209,6 @@ mkdir_iopath(const char *iolog_path, char *pathbuf, size_t pathsize)
 {
     int len;
 
-#if 0 /* XXX - move this into sudoers when it concats dir + file */
-    /* Trim extraneous slashes. */
-    dirlen = strlen(iolog_dir);
-    while (dirlen > 1 && iolog_dir[dirlen - 1] == '/')
-       dirlen--;
-    while (*iolog_file == '/')
-       iolog_file++;
-    filelen = strlen(iolog_file);
-    while (filelen > 1 && iolog_file[filelen - 1] == '/')
-       filelen--;
-
-    if (*iolog_dir != '/' || *iolog_file == '\0')
-       log_error(0, "invalid I/O log path: %s/%s", iolog_dir, iolog_file);
-
-    len = snprintf(pathbuf, pathsize, "%.*s/%.*s", dirlen, iolog_dir,
-       filelen, iolog_file);
-    if (len <= 0 && len >= pathsize) {
-       errno = ENAMETOOLONG;
-       log_error(USE_ERRNO, "%.*s/%.*s", dirlen, iolog_dir,
-           filelen, iolog_file);
-    }
-#endif
-
     len = strlcpy(pathbuf, iolog_path, pathsize);
     if (len >= pathsize) {
        errno = ENAMETOOLONG;
index 17fb8d5000b61b310788d7b9ddbb4b76a9595dc6..c0eb5d87f2c559c4a210d76ec8701429f53e4fec 100644 (file)
@@ -156,6 +156,10 @@ expand_iolog_path(const char *prefix, const char *dir, const char *file)
     dst = path = emalloc(psize);
     *path = '\0';
 
+    /* Trim leading slashes from file component. */
+    while (*file == '/')
+       file++;
+
     if (prefix != NULL) {
        plen = strlcpy(path, prefix, psize);
        dst += plen;
@@ -166,6 +170,9 @@ expand_iolog_path(const char *prefix, const char *dir, const char *file)
            src = dir;
            break;
        case 1:
+           /* Only add path separator if dir doesn't end in a slash. */
+           if (dst > path && dst[-1] == '/')
+               continue;
            src = "/";
            break;
        case 2: