[CRIU] [PATCH 2/2] service: add work_dir_fd support
Pavel Emelyanov
xemul at parallels.com
Tue Feb 4 00:14:23 PST 2014
On 02/04/2014 12:10 PM, Ruslan Kuprieiev wrote:
> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> ---
> cr-service.c | 29 ++++++++++++++++++++++-------
> 1 file changed, 22 insertions(+), 7 deletions(-)
>
> diff --git a/cr-service.c b/cr-service.c
> index 74ea3c3..5ef5d52 100644
> --- a/cr-service.c
> +++ b/cr-service.c
> @@ -148,6 +148,7 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
> struct stat st;
> socklen_t ids_len = sizeof(struct ucred);
> char images_dir_path[PATH_MAX];
> + char work_dir_path[PATH_MAX];
>
> if (getsockopt(sk, SOL_SOCKET, SO_PEERCRED, &ids, &ids_len)) {
> pr_perror("Can't get socket options");
> @@ -164,24 +165,38 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
> BUG_ON(st.st_ino == -1);
> service_sk_ino = st.st_ino;
>
> - /* going to dir, where to place/get images*/
> + /* open images_dir */
> sprintf(images_dir_path, "/proc/%d/fd/%d", ids.pid, req->images_dir_fd);
>
> if (req->parent_img)
> opts.img_parent = req->parent_img;
>
> - if (chdir(images_dir_path)) {
> - pr_perror("Can't chdir to images directory");
> + if (open_image_dir(images_dir_path) < 0) {
> + pr_perror("Can't open images directory");
> return -1;
> }
>
> - if (open_image_dir(".") < 0)
> + /* chdir to work dir */
> + if (req->has_work_dir_fd)
> + sprintf(work_dir_path, "/proc/%d/fd/%d", ids.pid,
> + req->work_dir_fd);
> + else
> + strcpy(work_dir_path, images_dir_path);
> +
> + if (chdir(work_dir_path)) {
> + pr_perror("Can't chdir to work_dir");
> return -1;
> + }
> +
> + /* initiate log file in work dir */
> + if (req->log_file) {
> + if (strchr(req->log_file, '.') || strchr(req->log_file, '/')) {
Logfile restrictions into separate patch, please.
> + pr_perror("No subdirs are allowed in log_file name");
> + return -1;
> + }
>
> - /* initiate log file in imgs dir */
> - if (req->log_file)
> opts.output = req->log_file;
> - else
> + } else
> opts.output = DEFAULT_LOG_FILENAME;
>
> log_set_loglevel(req->log_level);
>
More information about the CRIU
mailing list