Changeset 871 in openpam


Ignore:
Timestamp:
Dec 1, 2015, 7:21:50 PM (5 years ago)
Author:
Dag-Erling Smørgrav
Message:

In t_fopen(), resolve the full path to the file before opening it.
In t_fprintf(), immediately flush the file after writing to it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/t/t_file.c

    r648 r871  
    5656{
    5757        struct t_file *tf;
    58         int fd;
     58        int fd, dynfn;
    5959
    6060        if ((tf = calloc(sizeof *tf, 1)) == NULL)
    6161                err(1, "%s(): calloc()", __func__);
    6262        if (filename) {
    63                 if ((tf->name = strdup(filename)) == NULL)
    64                         err(1, "%s(): strdup()", __func__);
     63                dynfn = 0;
    6564        } else {
    66                 asprintf(&tf->name, "%s.%lu.%p.tmp",
     65                asprintf(&filename, "%s.%lu.%p.tmp",
    6766                    t_progname, (unsigned long)getpid(), (void *)tf);
    68                 if (tf->name == NULL)
     67                if (filename == NULL)
    6968                        err(1, "%s(): asprintf()", __func__);
     69                dynfn = 1;
    7070        }
    71         if ((fd = open(tf->name, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0)
     71        if ((fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0)
    7272                err(1, "%s(): %s", __func__, tf->name);
     73        if ((tf->name = realpath(filename, NULL)) == NULL)
     74                err(1, "%s(): realpath()", __func__);
     75        if (dynfn)
     76                free(filename);
    7377        if ((tf->file = fdopen(fd, "r+")) == NULL)
    7478                err(1, "%s(): fdopen()", __func__);
     
    9397        if (ferror(tf->file))
    9498                err(1, "%s(): vfprintf()", __func__);
     99        if (fflush(tf->file) != 0)
     100                err(1, "%s(): fflush()", __func__);
    95101        return (len);
    96102}
Note: See TracChangeset for help on using the changeset viewer.