Re: Symlinks and Cryogenic Sleep

From: Goetz Babin-Ebell (babinebellat_private)
Date: Tue Jan 04 2000 - 03:11:19 PST

  • Next message: Kevin Hecht: "Re: Hotmail security hole - injecting JavaScript using <IMG"

    At 21:24 03.01.00 +0100, Olaf Kirch wrote:
    >Hi all,
    Hallo Olaf,
    
    >when you're dealing with files in /tmp that are supposed to be re-opened
    >(rather than opened once and then discarded) there's an established
    >way to do it which goes like this:
    >
    >	if (lstat(fname, &stb1) >= 0 && S_ISREG(stb1.st_mode)) {
    >		fd = open(fname, O_RDWR);
    >		if (fd < 0 || fstat(fd, &stb2) < 0
    >		 || ino_or_dev_mismatch(&stb1, &stb2))
    >			raise_big_stink()
    >	} else {
    >		/* do the O_EXCL thing */
    >	}
    
    I did something that way:
    
    FILE *DoOpen(const char *cpFile, long bAppend)
    {
       FILE *spNew;
       FILE *spTest;
       struct stat sStat;
    
       spTest = fopen(cpFile,"a");
       if (!spTest)
       {
          Log("ERR FILE OPEN",cpFile);
          return NULL;
       }
       if (lstat(cpFile,&sStat))
       {
          Log("ERR STAT",cpFile);
          return NULL;
       }
       if ((sStat.st_mode & S_IFMT) == S_IFLNK)
       {
          fclose(spTest);
          Log("ERR ISLINK",cpFile);
          return NULL;
       }
       if (bAppend)
          spNew = spTest;
       else
       {
          spNew = freopen(cpFile,"w",spTest);
          fclose(spTest);
       }
       if (!spNew)
       {
          Log("ERR FILE OPEN",cpFile);
          return NULL;
       }
       return spFile;
    }
    
    Comments ?
    Improvements ?
    
    By
    
    Goetz
    
    --
    Goetz Babin-Ebell, TC TrustCenter GmbH, http://www.trustcenter.de
    Sonninstr. 24-28, 20097 Hamburg, Germany
    Tel.: +49-(0)40 80 80 26 -0,  Fax: +49-(0)40 80 80 26 -126
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 15:25:44 PDT