Review: Approve

Looks good to me, with below mentioned included cleanups.

Diff comments:

> === modified file 'ChangeLog'
> --- ChangeLog 2014-07-03 08:59:30 +0000
> +++ ChangeLog 2014-07-07 10:15:49 +0000
> @@ -1,3 +1,10 @@
> +2014-07-07  James Hunt  <james.h...@ubuntu.com>
> +
> +     * init/tests/test_job_process.c: test_handler():
> +       - Remove logs generated by PROCESS_MAIN. This wasn't necessary before
> +         due to the manifestation of LP: #1302117 not restoring the correct
> +         umask.
> +
>  2014-07-03  James Hunt  <james.h...@ubuntu.com>
>  
>       * init/job_process.c:
> @@ -97,6 +104,13 @@
>         - Clarify default behaviour of 'respawn' stanza.
>         - Add missing 'respawn limit unlimited' details.
>  
> +2014-04-10  James Hunt  <james.h...@ubuntu.com>
> +
> +     * init/log.c: log_file_open(): Restore umask after opening log file
> +       (LP: #1302117).
> +     * util/tests/test_initctl.c: test_reexec(): New test:
> +       - "ensure re-exec does not disrupt umask". 
> +
>  2014-03-11  James Hunt  <james.h...@ubuntu.com>
>  
>       * NEWS: Release 1.12.1
> 
> === modified file 'init/log.c'
> --- init/log.c        2014-06-04 17:37:59 +0000
> +++ init/log.c        2014-07-07 10:15:49 +0000
> @@ -405,6 +405,9 @@
>       struct stat  statbuf;
>       int          ret = -1;
>       int          mode = LOG_DEFAULT_MODE;
> +#if 1
> +     mode_t       old;
> +#endif
>       int          flags = (O_CREAT | O_APPEND | O_WRONLY |

I have cleaned up this #if...

>                             O_CLOEXEC | O_NOFOLLOW | O_NONBLOCK);
>  
> @@ -439,7 +442,11 @@
>       nih_assert (log->fd == -1);
>  
>       /* Impose some sane defaults. */
> +#if 1
> +     old = umask (LOG_DEFAULT_UMASK);
> +#else
>       umask (LOG_DEFAULT_UMASK);
> +#endif
>  

... and this one ...

>       /* Non-blocking to avoid holding up the main loop. Without
>        * this, we'd probably need to spawn a thread to handle
> @@ -447,6 +454,11 @@
>        */
>       log->fd = open (log->path, flags, mode);
>  
> +     /* Restore */
> +#if 1
> +     umask (old);
> +#endif
> +
>       log->open_errno = errno;

... and this one.

>  
>       /* Open may have failed due to path being unaccessible
> 
> === modified file 'init/tests/test_job_process.c'
> --- init/tests/test_job_process.c     2014-06-05 17:57:29 +0000
> +++ init/tests/test_job_process.c     2014-07-07 10:15:49 +0000
> @@ -1,11 +1,8 @@
> -/*
> - * FIXME: test_job_process has been left behind
> - */
>  /* upstart
>   *
>   * test_job_process.c - test suite for init/job_process.c
>   *
> - * Copyright  2011 Canonical Ltd.
> + * Copyright © 2011-2014 Canonical Ltd.
>   * Author: Scott James Remnant <sc...@netsplit.com>.
>   *
>   * This program is free software; you can redistribute it and/or modify
> @@ -5489,11 +5486,16 @@
>       unsigned long   data;
>       struct timespec now;
>       char            dirname[PATH_MAX];
> +     nih_local char *logfile = NULL;
> +     int             fds[2] = { -1, -1};
>  
>       TEST_FILENAME (dirname);       
>       TEST_EQ (mkdir (dirname, 0755), 0);
>       TEST_EQ (setenv ("UPSTART_LOGDIR", dirname, 1), 0);
>  
> +     logfile = NIH_MUST (nih_sprintf (NULL, "%s/%s.log",
> +                             dirname, "test"));
> +
>       TEST_FUNCTION ("job_process_handler");
>       program_name = "test";
>       output = tmpfile ();
> @@ -5763,6 +5765,9 @@
>       class->process[PROCESS_PRE_START] = process_new (class);
>       class->process[PROCESS_PRE_START]->command = "echo";
>  
> +     assert0 (pipe (fds));
> +     close (fds[1]);
> +
>       TEST_ALLOC_FAIL {
>               TEST_ALLOC_SAFE {
>                       job = job_new (class, "");
> @@ -5770,6 +5775,9 @@
>                       blocked = blocked_new (job, BLOCKED_EVENT, event);
>                       event_block (event);
>                       nih_list_add (&job->blocking, &blocked->entry);
> +
> +                     job->process_data[PROCESS_PRE_START] = NIH_MUST (
> +                                     job_process_data_new 
> (job->process_data, job, PROCESS_PRE_START, fds[0]));
>               }
>  
>               job->goal = JOB_START;
> @@ -5812,9 +5820,12 @@
>               nih_free (job);
>       }
>  
> +     close (fds[0]);
> +
>       nih_free (class->process[PROCESS_PRE_START]);
>       class->process[PROCESS_PRE_START] = NULL;
>  
> +     unlink (logfile);
>  
>       /* Check that we can handle a failing pre-start process of the job,
>        * which changes the goal to stop and transitions a state change in
> @@ -5890,6 +5901,7 @@
>       nih_free (class->process[PROCESS_PRE_START]);
>       class->process[PROCESS_PRE_START] = NULL;
>  
> +     unlink (logfile);
>  
>       /* Check that we can handle a killed starting task, which should
>        * act as if it failed.  A different error should be output and
> @@ -5964,6 +5976,7 @@
>       nih_free (class->process[PROCESS_PRE_START]);
>       class->process[PROCESS_PRE_START] = NULL;
>  
> +     unlink (logfile);
>  
>       /* Check that we can catch the running task of a service stopping
>        * with an error, and if the job is to be respawned, go into
> 
> === modified file 'util/tests/test_initctl.c'
> --- util/tests/test_initctl.c 2014-06-05 10:13:51 +0000
> +++ util/tests/test_initctl.c 2014-07-07 10:15:49 +0000
> @@ -11052,6 +11052,8 @@
>       FILE            *file;
>       int              ok;
>       int              ret;
> +     mode_t           expected_umask;
> +     size_t           len;
>  
>       TEST_GROUP ("re-exec support");
>  
> @@ -11317,6 +11319,80 @@
>       STOP_UPSTART (upstart_pid);
>  
>       /*******************************************************************/
> +     TEST_FEATURE ("ensure re-exec does not disrupt umask");
> +
> +     contents = nih_sprintf (NULL, "exec sh -c umask");
> +     TEST_NE_P (contents, NULL);
> +
> +     CREATE_FILE (confdir, "umask.conf", contents);
> +     nih_free (contents);
> +
> +     start_upstart_common (&upstart_pid, TRUE, TRUE, confdir, logdir, NULL);
> +
> +     cmd = nih_sprintf (NULL, "%s start umask 2>&1", get_initctl ());
> +     TEST_NE_P (cmd, NULL);
> +     RUN_COMMAND (NULL, cmd, &output, &lines);
> +     nih_free (output);
> +
> +     logfile = NIH_MUST (nih_sprintf (NULL, "%s/%s",
> +                             logdir,
> +                             "umask.log"));
> +
> +     /* Wait for log to be created */
> +     ok = FALSE;
> +     for (int i = 0; i < 5; i++) {
> +             sleep (1);
> +             if (! stat (logfile, &statbuf)) {
> +                     ok = TRUE;
> +                     break;
> +             }
> +     }
> +     TEST_EQ (ok, TRUE);
> +
> +     contents = nih_file_read (NULL, logfile, &len);
> +     TEST_NE_P (contents, NULL);
> +     TEST_TRUE (len);
> +
> +     /* overwrite '\n' */
> +     contents[len-1] = '\0';
> +
> +     expected_umask = (mode_t)atoi (contents);
> +     assert0 (unlink (logfile));
> +     nih_free (contents);
> +
> +     /* Restart */
> +     REEXEC_UPSTART (upstart_pid, TRUE);
> +
> +     /* Re-run job */
> +     RUN_COMMAND (NULL, cmd, &output, &lines);
> +     nih_free (output);
> +
> +     /* Wait for log to be recreated */
> +     ok = FALSE;
> +     for (int i = 0; i < 5; i++) {
> +             sleep (1);
> +             if (! stat (logfile, &statbuf)) {
> +                     ok = TRUE;
> +                     break;
> +             }
> +     }
> +     TEST_EQ (ok, TRUE);
> +
> +     contents = nih_file_read (NULL, logfile, &len);
> +     TEST_NE_P (contents, NULL);
> +     TEST_TRUE (len);
> +
> +     /* overwrite '\n' */
> +     contents[len-1] = '\0';
> +
> +     TEST_EQ (expected_umask, (mode_t)atoi (contents));
> +
> +     STOP_UPSTART (upstart_pid);
> +
> +     DELETE_FILE (confdir, "umask.conf");
> +     assert0 (unlink (logfile));
> +
> +     /*******************************************************************/
>  
>       TEST_DBUS_END (dbus_pid);
>  
> 


-- 
https://code.launchpad.net/~jamesodhunt/upstart/bug-1302117-remerged/+merge/225177
Your team Upstart Reviewers is subscribed to branch lp:upstart.

-- 
upstart-devel mailing list
upstart-devel@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/upstart-devel

Reply via email to