You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2004/09/04 13:36:15 UTC

cvs commit: httpd-2.0/support rotatelogs.c

trawick     2004/09/04 04:36:14

  Modified:    .        Tag: APACHE_2_0_BRANCH CHANGES STATUS
               support  Tag: APACHE_2_0_BRANCH rotatelogs.c
  Log:
  merge from 2.1-dev:
  
  Add -l option to rotatelogs to let it use local time rather than
  UTC.
  
  PR:             24417
  Submitted by:	Ken Coar, Uli Zappe <uli ritual.org>
  Reviewed by:	trawick, nd, stoddard
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.988.2.348 +3 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.988.2.347
  retrieving revision 1.988.2.348
  diff -u -r1.988.2.347 -r1.988.2.348
  --- CHANGES	2 Sep 2004 11:18:44 -0000	1.988.2.347
  +++ CHANGES	4 Sep 2004 11:36:13 -0000	1.988.2.348
  @@ -1,5 +1,8 @@
   Changes with Apache 2.0.51
   
  +  *) Add -l option to rotatelogs to let it use local time rather than
  +     UTC.  PR 24417.  [Ken Coar, Uli Zappe <uli ritual.org>]
  +
     *) mod_log_config: Fix a bug which prevented request completion time
        from being logged for I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
        processing.  PR 29696.  [Alois Treindl <alois astro.ch>]
  
  
  
  1.751.2.1043 +1 -6      httpd-2.0/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/STATUS,v
  retrieving revision 1.751.2.1042
  retrieving revision 1.751.2.1043
  diff -u -r1.751.2.1042 -r1.751.2.1043
  --- STATUS	3 Sep 2004 20:57:53 -0000	1.751.2.1042
  +++ STATUS	4 Sep 2004 11:36:13 -0000	1.751.2.1043
  @@ -104,11 +104,6 @@
                native chars here and it will be converted later? (I'm not sure)
            (2) I'd put out (null) only if val is NULL, not if it's empty.
   
  -    *) Add -l option to rotatelogs to let it use local time rather than
  -       UTC.  PR 24417.  [Ken Coar, Uli Zappe <uli ritual.org>]
  -         support/rotatelogs.c: r1.33, r1.34, r1.35
  -       +1: trawick, nd, stoddard
  -
       *) Fix the handling of URIs containing %2F when AllowEncodedSlashes
          is enabled.  Previously, such urls would still be rejected with
          404.
  
  
  
  No                   revision
  No                   revision
  1.27.2.5  +43 -11    httpd-2.0/support/rotatelogs.c
  
  Index: rotatelogs.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/support/rotatelogs.c,v
  retrieving revision 1.27.2.4
  retrieving revision 1.27.2.5
  diff -u -r1.27.2.4 -r1.27.2.5
  --- rotatelogs.c	9 Feb 2004 20:59:49 -0000	1.27.2.4
  +++ rotatelogs.c	4 Sep 2004 11:36:14 -0000	1.27.2.5
  @@ -23,6 +23,13 @@
    * Ported to APR by Mladen Turk <mt...@mappingsoft.com>
    *
    * 23 Sep 2001
  + *
  + * -l option added 2004-06-11
  + *
  + * -l causes the use of local time rather than GMT as the base for the
  + * interval.  NB: Using -l in an environment which changes the GMT offset
  + * (such as for BST or DST) can lead to unpredictable results!
  + *
    */
   
   
  @@ -60,19 +67,31 @@
       int nMessCount = 0;
       apr_size_t nRead, nWrite;
       int use_strftime = 0;
  +    int use_localtime = 0;
       int now = 0;
       const char *szLogRoot;
       apr_file_t *f_stdin, *nLogFD = NULL, *nLogFDprev = NULL;
       apr_pool_t *pool;
       char *ptr = NULL;
  +    int argBase = 0;
  +    int argFile = 1;
  +    int argIntv = 2;
  +    int argOffset = 3;
   
       apr_app_initialize(&argc, &argv, NULL);
       atexit(apr_terminate);
   
       apr_pool_create(&pool, NULL);
  -    if (argc < 3 || argc > 4) {
  +    if ((argc > 2) && (strcmp(argv[1], "-l") == 0)) {
  +        argBase++;
  +        argFile += argBase;
  +        argIntv += argBase;
  +        argOffset += argBase;
  +        use_localtime = 1;
  +    }
  +    if (argc < (argBase + 3) || argc > (argBase + 4)) {
           fprintf(stderr,
  -                "Usage: %s <logfile> <rotation time in seconds> "
  +                "Usage: %s [-l] <logfile> <rotation time in seconds> "
                   "[offset minutes from UTC] or <rotation size in megabytes>\n\n",
                   argv[0]);
   #ifdef OS2
  @@ -96,12 +115,12 @@
           exit(1);
       }
   
  -    szLogRoot = argv[1];
  +    szLogRoot = argv[argFile];
   
  -    ptr = strchr (argv[2], 'M');
  +    ptr = strchr(argv[argIntv], 'M');
       if (ptr) {
           if (*(ptr+1) == '\0') {
  -            sRotation = atoi(argv[2]) * 1048576;
  +            sRotation = atoi(argv[argIntv]) * 1048576;
           }
           if (sRotation == 0) {
               fprintf(stderr, "Invalid rotation size parameter\n");
  @@ -109,10 +128,10 @@
           }
       }
       else {
  -        if (argc >= 4) {
  -            utc_offset = atoi(argv[3]) * 60;
  +        if (argc >= (argBase + 4)) {
  +            utc_offset = atoi(argv[argOffset]) * 60;
           }
  -        tRotation = atoi(argv[2]);
  +        tRotation = atoi(argv[argIntv]);
           if (tRotation <= 0) {
               fprintf(stderr, "Rotation time must be > 0\n");
               exit(6);
  @@ -127,9 +146,20 @@
   
       for (;;) {
           nRead = sizeof(buf);
  -        if (apr_file_read(f_stdin, buf, &nRead) != APR_SUCCESS)
  +        if (apr_file_read(f_stdin, buf, &nRead) != APR_SUCCESS) {
               exit(3);
  +        }
           if (tRotation) {
  +            /*
  +             * Check for our UTC offset every time through the loop, since
  +             * it might change if there's a switch between standard and
  +             * daylight savings time.
  +             */
  +            if (use_localtime) {
  +                apr_time_exp_t lt;
  +                apr_time_exp_lt(&lt, apr_time_now());
  +                utc_offset = lt.tm_gmtoff;
  +            }
               now = (int)(apr_time_now() / APR_USEC_PER_SEC) + utc_offset;
               if (nLogFD != NULL && now >= tLogEnd) {
                   nLogFDprev = nLogFD;
  @@ -158,10 +188,12 @@
           if (nLogFD == NULL) {
               int tLogStart;
                   
  -            if (tRotation)
  +            if (tRotation) {
                   tLogStart = (now / tRotation) * tRotation;
  -            else
  +            }
  +            else {
                   tLogStart = (int)apr_time_sec(apr_time_now());
  +            }
   
               if (use_strftime) {
                   apr_time_t tNow = apr_time_from_sec(tLogStart);