Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 0/3] v2v: vCenter: Remove proxy environment variables
Fix for: https://bugzilla.redhat.com/show_bug.cgi?id=1354507 Main explanation is in patch #3. Rich.
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 1/3] mllib: Combine small Unix library call bindings into Unix_utils module.
Concatenate six small modules containing Unix/POSIX library call bindings into a single module called Unix_utils. The previous modules and the library functions bound were: - Dev_t: makedev(3), major(3), minor(3) - Exit: _exit(2) - Fnmatch: fnmatch(3) - Fsync: sync(2) - Mkdtemp: mkdtemp(3) - StatVFS: statvfs(2) --- builder/builder.ml | 1 + builder/sigchecker.ml | 1 + dib/dib.ml | 1 + docs/C_SOURCE_FILES | 7 +- mllib/Makefile.am | 21 +--- mllib/StatVFS.ml | 21 ---- mllib/StatVFS.mli | 23 ---- mllib/common_utils.ml | 4 +- mllib/dev_t-c.c | 53 -------- mllib/dev_t.ml | 21 ---- mllib/dev_t.mli | 28 ----- mllib/exit-c.c | 33 ----- mllib/exit.ml | 19 --- mllib/exit.mli | 20 --- mllib/fnmatch-c.c | 66 ---------- mllib/fnmatch.ml | 29 ----- mllib/fnmatch.mli | 37 ------ mllib/fsync-c.c | 84 ------------- mllib/fsync.ml | 20 --- mllib/fsync.mli | 25 ---- mllib/mkdtemp-c.c | 58 --------- mllib/mkdtemp.ml | 24 ---- mllib/mkdtemp.mli | 29 ----- mllib/statvfs-c.c | 50 -------- mllib/unix_utils-c.c | 200 ++++++++++++++++++++++++++++++ mllib/unix_utils.ml | 58 +++++++++ mllib/unix_utils.mli | 90 ++++++++++++++ resize/resize.ml | 1 + sparsify/copying.ml | 1 + sysprep/sysprep_operation_backup_files.ml | 2 +- sysprep/sysprep_operation_script.ml | 1 + v2v/changeuid.ml | 1 + v2v/input_ova.ml | 1 + v2v/output_glance.ml | 1 + v2v/output_null.ml | 1 + v2v/output_rhv.ml | 1 + v2v/v2v.ml | 7 +- 37 files changed, 370 insertions(+), 670 deletions(-) delete mode 100644 mllib/StatVFS.ml delete mode 100644 mllib/StatVFS.mli delete mode 100644 mllib/dev_t-c.c delete mode 100644 mllib/dev_t.ml delete mode 100644 mllib/dev_t.mli delete mode 100644 mllib/exit-c.c delete mode 100644 mllib/exit.ml delete mode 100644 mllib/exit.mli delete mode 100644 mllib/fnmatch-c.c delete mode 100644 mllib/fnmatch.ml delete mode 100644 mllib/fnmatch.mli delete mode 100644 mllib/fsync-c.c delete mode 100644 mllib/fsync.ml delete mode 100644 mllib/fsync.mli delete mode 100644 mllib/mkdtemp-c.c delete mode 100644 mllib/mkdtemp.ml delete mode 100644 mllib/mkdtemp.mli delete mode 100644 mllib/statvfs-c.c create mode 100644 mllib/unix_utils-c.c create mode 100644 mllib/unix_utils.ml create mode 100644 mllib/unix_utils.mli diff --git a/builder/builder.ml b/builder/builder.ml index 14b42d7..e59c763 100644 --- a/builder/builder.ml +++ b/builder/builder.ml @@ -21,6 +21,7 @@ open Common_gettext.Gettext module G = Guestfs open Common_utils +open Unix_utils open Password open Planner open Utils diff --git a/builder/sigchecker.ml b/builder/sigchecker.ml index 4c0d78e..68f99e8 100644 --- a/builder/sigchecker.ml +++ b/builder/sigchecker.ml @@ -18,6 +18,7 @@ open Common_gettext.Gettext open Common_utils +open Unix_utils open Utils diff --git a/dib/dib.ml b/dib/dib.ml index 5713bc6..d6fcb09 100644 --- a/dib/dib.ml +++ b/dib/dib.ml @@ -18,6 +18,7 @@ open Common_gettext.Gettext open Common_utils +open Unix_utils open Cmdline open Utils diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES index 65ced48..33e1d77 100644 --- a/docs/C_SOURCE_FILES +++ b/docs/C_SOURCE_FILES @@ -325,15 +325,10 @@ lib/whole-file.c lua/lua-guestfs.c make-fs/make-fs.c mllib/common_utils-c.c -mllib/dev_t-c.c mllib/dummy.c -mllib/exit-c.c -mllib/fnmatch-c.c -mllib/fsync-c.c mllib/getopt-c.c -mllib/mkdtemp-c.c mllib/progress-c.c -mllib/statvfs-c.c +mllib/unix_utils-c.c mllib/uri-c.c mllib/visit-c.c mllib/xml-c.c diff --git a/mllib/Makefile.am b/mllib/Makefile.am index ff687b6..ee2f1a7 100644 --- a/mllib/Makefile.am +++ b/mllib/Makefile.am @@ -31,20 +31,15 @@ SOURCES_MLI = \ xml.mli \ xpath_helpers.mli \ checksums.mli \ + unix_utils.mli \ common_utils.mli \ curl.mli \ - dev_t.mli \ - exit.mli \ - fnmatch.mli \ - fsync.mli \ getopt.mli \ JSON.mli \ - mkdtemp.mli \ planner.mli \ progress.mli \ regedit.mli \ registry.mli \ - StatVFS.mli \ stringMap.mli \ URI.mli \ visit.mli @@ -56,21 +51,16 @@ SOURCES_ML = \ stringMap.ml \ common_gettext.ml \ getopt.ml \ - dev_t.ml \ + unix_utils.ml \ common_utils.ml \ - fsync.ml \ progress.ml \ URI.ml \ - mkdtemp.ml \ visit.ml \ - fnmatch.ml \ planner.ml \ registry.ml \ regedit.ml \ - StatVFS.ml \ JSON.ml \ curl.ml \ - exit.ml \ checksums.ml \ xml.ml \ xpath_helpers.ml @@ -82,14 +72,9 @@ SOURCES_C = \ ../common/options/uri.c \ ../common/progress/progress.c \ common_utils-c.c \ - dev_t-c.c \ - exit-c.c \ - fnmatch-c.c \ - fsync-c.c \ getopt-c.c \ - mkdtemp-c.c \ progress-c.c \ - statvfs-c.c \ + unix_utils-c.c \ uri-c.c \ visit-c.c \ xml-c.c diff --git a/mllib/StatVFS.ml b/mllib/StatVFS.ml deleted file mode 100644 index 98e6d22..0000000 --- a/mllib/StatVFS.ml +++ /dev/null @@ -1,21 +0,0 @@ -(* virt tools interface to statvfs - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Binding for [statvfs], but just for getting disk free space. *) - -external free_space : string -> int64 = "guestfs_int_mllib_statvfs_free_space" diff --git a/mllib/StatVFS.mli b/mllib/StatVFS.mli deleted file mode 100644 index b1b8834..0000000 --- a/mllib/StatVFS.mli +++ /dev/null @@ -1,23 +0,0 @@ -(* virt tools interface to statvfs - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Binding for [statvfs], but just for getting disk free space. *) - -val free_space : string -> int64 -(** [free_space path] returns the free space available on the - filesystem that contains [path], in bytes. *) diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml index 7c78121..9802a6b 100644 --- a/mllib/common_utils.ml +++ b/mllib/common_utils.ml @@ -1028,8 +1028,8 @@ let is_partition dev if not (is_block_device dev) then false else ( let rdev = (Unix.stat dev).Unix.st_rdev in - let major = Dev_t.major rdev in - let minor = Dev_t.minor rdev in + let major = Unix_utils.Dev_t.major rdev in + let minor = Unix_utils.Dev_t.minor rdev in let path = sprintf "/sys/dev/block/%d:%d/partition" major minor in Unix.access path [Unix.F_OK]; true diff --git a/mllib/dev_t-c.c b/mllib/dev_t-c.c deleted file mode 100644 index be7260a..0000000 --- a/mllib/dev_t-c.c +++ /dev/null @@ -1,53 +0,0 @@ -/* libguestfs OCaml tools common code - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/sysmacros.h> - -#include <caml/mlvalues.h> - -/* OCaml doesn't bind the dev_t calls makedev, major and minor. */ - -extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv); -extern value guestfs_int_mllib_dev_t_major (value devv); -extern value guestfs_int_mllib_dev_t_minor (value devv); - -/* NB: This is a "noalloc" call. */ -value -guestfs_int_mllib_dev_t_makedev (value majv, value minv) -{ - return Val_int (makedev (Int_val (majv), Int_val (minv))); -} - -/* NB: This is a "noalloc" call. */ -value -guestfs_int_mllib_dev_t_major (value devv) -{ - return Val_int (major (Int_val (devv))); -} - -/* NB: This is a "noalloc" call. */ -value -guestfs_int_mllib_dev_t_minor (value devv) -{ - return Val_int (minor (Int_val (devv))); -} diff --git a/mllib/dev_t.ml b/mllib/dev_t.ml deleted file mode 100644 index 143954a..0000000 --- a/mllib/dev_t.ml +++ /dev/null @@ -1,21 +0,0 @@ -(* libguestfs OCaml tools common code - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -external makedev : int -> int -> int = "guestfs_int_mllib_dev_t_makedev" "noalloc" -external major : int -> int = "guestfs_int_mllib_dev_t_major" "noalloc" -external minor : int -> int = "guestfs_int_mllib_dev_t_minor" "noalloc" diff --git a/mllib/dev_t.mli b/mllib/dev_t.mli deleted file mode 100644 index 340ead0..0000000 --- a/mllib/dev_t.mli +++ /dev/null @@ -1,28 +0,0 @@ -(* virt-resize - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Bindings for [dev_t] related functions [makedev], [major] and [minor]. *) - -val makedev : int -> int -> int -(** makedev(3) *) - -val major : int -> int -(** major(3) *) - -val minor : int -> int -(** minor(3) *) diff --git a/mllib/exit-c.c b/mllib/exit-c.c deleted file mode 100644 index 419d2e4..0000000 --- a/mllib/exit-c.c +++ /dev/null @@ -1,33 +0,0 @@ -/* libguestfs OCaml tools common code - * Copyright (C) 2009-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#include <caml/mlvalues.h> - -extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn)); - -int -guestfs_int_mllib_exit (value rv) -{ - _exit (Int_val (rv)); -} diff --git a/mllib/exit.ml b/mllib/exit.ml deleted file mode 100644 index 4ca8a27..0000000 --- a/mllib/exit.ml +++ /dev/null @@ -1,19 +0,0 @@ -(* libguestfs OCaml tools common code - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -external _exit : int -> 'a = "guestfs_int_mllib_exit" "noalloc" diff --git a/mllib/exit.mli b/mllib/exit.mli deleted file mode 100644 index ddf3072..0000000 --- a/mllib/exit.mli +++ /dev/null @@ -1,20 +0,0 @@ -(* libguestfs OCaml tools common code - * Copyright (C) 2016 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -val _exit : int -> 'a -(** Call _exit directly, ie. do not run OCaml atexit handlers. *) diff --git a/mllib/fnmatch-c.c b/mllib/fnmatch-c.c deleted file mode 100644 index 61f302e..0000000 --- a/mllib/fnmatch-c.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Binding for fnmatch. - * Copyright (C) 2009-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <config.h> - -#include <stdlib.h> -#include <fnmatch.h> -#include <errno.h> - -#include <caml/alloc.h> -#include <caml/memory.h> -#include <caml/mlvalues.h> -#include <caml/unixsupport.h> - -#pragma GCC diagnostic ignored "-Wmissing-prototypes" - -/* NB: These flags must appear in the same order as fnmatch.ml */ -static int flags[] = { - FNM_NOESCAPE, - FNM_PATHNAME, - FNM_PERIOD, - FNM_FILE_NAME, - FNM_LEADING_DIR, - FNM_CASEFOLD, -}; - -value -guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv) -{ - CAMLparam3 (patternv, strv, flagsv); - int f = 0, r; - - /* Convert flags to bitmask. */ - while (flagsv != Val_int (0)) { - f |= flags[Int_val (Field (flagsv, 0))]; - flagsv = Field (flagsv, 1); - } - - r = fnmatch (String_val (patternv), String_val (strv), f); - - if (r == 0) - CAMLreturn (Val_true); - else if (r == FNM_NOMATCH) - CAMLreturn (Val_false); - else { - /* XXX The fnmatch specification doesn't mention what errors can - * be returned by fnmatch. Assume they are errnos for now. - */ - unix_error (errno, (char *) "fnmatch", patternv); - } -} diff --git a/mllib/fnmatch.ml b/mllib/fnmatch.ml deleted file mode 100644 index fa47a6a..0000000 --- a/mllib/fnmatch.ml +++ /dev/null @@ -1,29 +0,0 @@ -(* Binding for fnmatch. - * Copyright (C) 2009-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - *) - -(* NB: These flags must appear in the same order as fnmatch-c.c *) -type flag -| FNM_NOESCAPE -| FNM_PATHNAME -| FNM_PERIOD -| FNM_FILE_NAME -| FNM_LEADING_DIR -| FNM_CASEFOLD - -external fnmatch : string -> string -> flag list -> bool - "guestfs_int_mllib_fnmatch" diff --git a/mllib/fnmatch.mli b/mllib/fnmatch.mli deleted file mode 100644 index e8f3d8d..0000000 --- a/mllib/fnmatch.mli +++ /dev/null @@ -1,37 +0,0 @@ -(* Binding for fnmatch. - * Copyright (C) 2009-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - *) - -(** Binding for the fnmatch(3) function in glibc or gnulib. *) - -type flag -| FNM_NOESCAPE -| FNM_PATHNAME -| FNM_PERIOD -| FNM_FILE_NAME -| FNM_LEADING_DIR -| FNM_CASEFOLD -(** Flags passed to the fnmatch function. *) - -val fnmatch : string -> string -> flag list -> bool -(** The [fnmatch pattern filename flags] function checks whether - the [filename] argument matches the wildcard in the [pattern] - argument. The [flags] is a list of flags. Consult the - fnmatch(3) man page for details of the flags. - - The [filename] might be a filename element or a full path - (depending on the pattern and flags). *) diff --git a/mllib/fsync-c.c b/mllib/fsync-c.c deleted file mode 100644 index 8e2b995..0000000 --- a/mllib/fsync-c.c +++ /dev/null @@ -1,84 +0,0 @@ -/* libguestfs OCaml tools common code - * Copyright (C) 2013-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> - -#include <caml/alloc.h> -#include <caml/fail.h> -#include <caml/memory.h> -#include <caml/mlvalues.h> - -#ifdef HAVE_CAML_UNIXSUPPORT_H -#include <caml/unixsupport.h> -#else -#define Nothing ((value) 0) -extern void unix_error (int errcode, char * cmdname, value arg) Noreturn; -#endif - -/* OCaml doesn't bind any *sync* calls. */ - -extern value guestfs_int_mllib_sync (value unitv); -extern value guestfs_int_mllib_fsync_file (value filenamev); - -/* NB: This is a "noalloc" call. */ -value -guestfs_int_mllib_sync (value unitv) -{ - sync (); - return Val_unit; -} - -/* Flush all writes associated with the named file to the disk. - * - * Note the wording in the SUS definition: - * - * "The fsync() function forces all currently queued I/O operations - * associated with the file indicated by file descriptor fildes to the - * synchronised I/O completion state." - * - * http://pubs.opengroup.org/onlinepubs/007908775/xsh/fsync.html - */ -value -guestfs_int_mllib_fsync_file (value filenamev) -{ - CAMLparam1 (filenamev); - const char *filename = String_val (filenamev); - int fd, err; - - /* Note to do fsync you have to open for write. */ - fd = open (filename, O_RDWR); - if (fd == -1) - unix_error (errno, (char *) "open", filenamev); - - if (fsync (fd) == -1) { - err = errno; - close (fd); - unix_error (err, (char *) "fsync", filenamev); - } - - if (close (fd) == -1) - unix_error (errno, (char *) "close", filenamev); - - CAMLreturn (Val_unit); -} diff --git a/mllib/fsync.ml b/mllib/fsync.ml deleted file mode 100644 index ade6b65..0000000 --- a/mllib/fsync.ml +++ /dev/null @@ -1,20 +0,0 @@ -(* libguestfs OCaml tools common code - * Copyright (C) 2013-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -external sync : unit -> unit = "guestfs_int_mllib_sync" "noalloc" -external file : string -> unit = "guestfs_int_mllib_fsync_file" diff --git a/mllib/fsync.mli b/mllib/fsync.mli deleted file mode 100644 index fa45e5a..0000000 --- a/mllib/fsync.mli +++ /dev/null @@ -1,25 +0,0 @@ -(* virt-resize - * Copyright (C) 2013 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Bindings for sync, fsync. *) - -val sync : unit -> unit -(** sync(2) syscall. *) - -val file : string -> unit -(** fsync a single file by name. *) diff --git a/mllib/mkdtemp-c.c b/mllib/mkdtemp-c.c deleted file mode 100644 index b245986..0000000 --- a/mllib/mkdtemp-c.c +++ /dev/null @@ -1,58 +0,0 @@ -/* libguestfs OCaml tools common code - * Copyright (C) 2014-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <config.h> - -#include <stdlib.h> -#include <errno.h> -#include <string.h> - -#include <caml/alloc.h> -#include <caml/fail.h> -#include <caml/memory.h> -#include <caml/mlvalues.h> - -#ifdef HAVE_CAML_UNIXSUPPORT_H -#include <caml/unixsupport.h> -#else -#define Nothing ((value) 0) -extern void unix_error (int errcode, char * cmdname, value arg) Noreturn; -#endif - -#pragma GCC diagnostic ignored "-Wmissing-prototypes" - -value -guestfs_int_mllib_mkdtemp (value val_pattern) -{ - CAMLparam1 (val_pattern); - CAMLlocal1 (rv); - char *pattern, *ret; - - pattern = strdup (String_val (val_pattern)); - if (pattern == NULL) - unix_error (errno, (char *) "strdup", val_pattern); - - ret = mkdtemp (pattern); - if (ret == NULL) - unix_error (errno, (char *) "mkdtemp", val_pattern); - - rv = caml_copy_string (ret); - free (pattern); - - CAMLreturn (rv); -} diff --git a/mllib/mkdtemp.ml b/mllib/mkdtemp.ml deleted file mode 100644 index 996bb60..0000000 --- a/mllib/mkdtemp.ml +++ /dev/null @@ -1,24 +0,0 @@ -(* libguestfs OCaml tools common code - * Copyright (C) 2014-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -open Common_utils - -external mkdtemp : string -> string = "guestfs_int_mllib_mkdtemp" - -let temp_dir ?(base_dir = Filename.temp_dir_name) prefix suffix - mkdtemp (base_dir // (prefix ^ "XXXXXX" ^ suffix)) diff --git a/mllib/mkdtemp.mli b/mllib/mkdtemp.mli deleted file mode 100644 index f8e3300..0000000 --- a/mllib/mkdtemp.mli +++ /dev/null @@ -1,29 +0,0 @@ -(* virt-builder - * Copyright (C) 2014 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - *) - -(** Functions to create temporary directories. *) - -val mkdtemp : string -> string -(** [mkdtemp pattern] Tiny wrapper to the C [mkdtemp]. *) - -val temp_dir : ?base_dir:string -> string -> string -> string -(** [temp_dir prefix suffix] creates a new unique temporary directory. - - The optional [~base_dir:string] changes the base directory where - to create the new temporary directory; if not specified, the default - [Filename.temp_dir_name] is used. *) diff --git a/mllib/statvfs-c.c b/mllib/statvfs-c.c deleted file mode 100644 index c5d1751..0000000 --- a/mllib/statvfs-c.c +++ /dev/null @@ -1,50 +0,0 @@ -/* virt tools interface to statvfs - * Copyright (C) 2013-2017 Red Hat Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <config.h> - -#include <stdio.h> -#include <stdlib.h> -#include <sys/statvfs.h> -#include <stdint.h> - -#include <caml/alloc.h> -#include <caml/fail.h> -#include <caml/memory.h> -#include <caml/mlvalues.h> - -extern value guestfs_int_mllib_statvfs_free_space (value pathv); - -value -guestfs_int_mllib_statvfs_free_space (value pathv) -{ - CAMLparam1 (pathv); - CAMLlocal1 (rv); - struct statvfs buf; - int64_t free_space; - - if (statvfs (String_val (pathv), &buf) == -1) { - perror ("statvfs"); - caml_failwith ("statvfs"); - } - - free_space = (int64_t) buf.f_bsize * buf.f_bavail; - rv = caml_copy_int64 (free_space); - - CAMLreturn (rv); -} diff --git a/mllib/unix_utils-c.c b/mllib/unix_utils-c.c new file mode 100644 index 0000000..f9615ec --- /dev/null +++ b/mllib/unix_utils-c.c @@ -0,0 +1,200 @@ +/* libguestfs OCaml tools common code + * Copyright (C) 2009-2017 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <fnmatch.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/sysmacros.h> +#include <sys/statvfs.h> + +#include <caml/alloc.h> +#include <caml/fail.h> +#include <caml/memory.h> +#include <caml/mlvalues.h> + +#ifdef HAVE_CAML_UNIXSUPPORT_H +#include <caml/unixsupport.h> +#else +#define Nothing ((value) 0) +extern void unix_error (int errcode, char * cmdname, value arg) Noreturn; +#endif + +extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv); +extern value guestfs_int_mllib_dev_t_major (value devv); +extern value guestfs_int_mllib_dev_t_minor (value devv); +extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn)); +extern value guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv); +extern value guestfs_int_mllib_sync (value unitv); +extern value guestfs_int_mllib_fsync_file (value filenamev); +extern value guestfs_int_mllib_mkdtemp (value val_pattern); +extern value guestfs_int_mllib_statvfs_free_space (value pathv); + +/* NB: This is a "noalloc" call. */ +value +guestfs_int_mllib_dev_t_makedev (value majv, value minv) +{ + return Val_int (makedev (Int_val (majv), Int_val (minv))); +} + +/* NB: This is a "noalloc" call. */ +value +guestfs_int_mllib_dev_t_major (value devv) +{ + return Val_int (major (Int_val (devv))); +} + +/* NB: This is a "noalloc" call. */ +value +guestfs_int_mllib_dev_t_minor (value devv) +{ + return Val_int (minor (Int_val (devv))); +} + +/* NB: This is a "noalloc" call. */ +int +guestfs_int_mllib_exit (value rv) +{ + _exit (Int_val (rv)); +} + +/* NB: These flags must appear in the same order as unix_utils.ml */ +static int flags[] = { + FNM_NOESCAPE, + FNM_PATHNAME, + FNM_PERIOD, + FNM_FILE_NAME, + FNM_LEADING_DIR, + FNM_CASEFOLD, +}; + +value +guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv) +{ + CAMLparam3 (patternv, strv, flagsv); + int f = 0, r; + + /* Convert flags to bitmask. */ + while (flagsv != Val_int (0)) { + f |= flags[Int_val (Field (flagsv, 0))]; + flagsv = Field (flagsv, 1); + } + + r = fnmatch (String_val (patternv), String_val (strv), f); + + if (r == 0) + CAMLreturn (Val_true); + else if (r == FNM_NOMATCH) + CAMLreturn (Val_false); + else { + /* XXX The fnmatch specification doesn't mention what errors can + * be returned by fnmatch. Assume they are errnos for now. + */ + unix_error (errno, (char *) "fnmatch", patternv); + } +} + + +/* NB: This is a "noalloc" call. */ +value +guestfs_int_mllib_sync (value unitv) +{ + sync (); + return Val_unit; +} + +/* Flush all writes associated with the named file to the disk. + * + * Note the wording in the SUS definition: + * + * "The fsync() function forces all currently queued I/O operations + * associated with the file indicated by file descriptor fildes to the + * synchronised I/O completion state." + * + * http://pubs.opengroup.org/onlinepubs/007908775/xsh/fsync.html + */ +value +guestfs_int_mllib_fsync_file (value filenamev) +{ + CAMLparam1 (filenamev); + const char *filename = String_val (filenamev); + int fd, err; + + /* Note to do fsync you have to open for write. */ + fd = open (filename, O_RDWR); + if (fd == -1) + unix_error (errno, (char *) "open", filenamev); + + if (fsync (fd) == -1) { + err = errno; + close (fd); + unix_error (err, (char *) "fsync", filenamev); + } + + if (close (fd) == -1) + unix_error (errno, (char *) "close", filenamev); + + CAMLreturn (Val_unit); +} + +value +guestfs_int_mllib_mkdtemp (value val_pattern) +{ + CAMLparam1 (val_pattern); + CAMLlocal1 (rv); + char *pattern, *ret; + + pattern = strdup (String_val (val_pattern)); + if (pattern == NULL) + unix_error (errno, (char *) "strdup", val_pattern); + + ret = mkdtemp (pattern); + if (ret == NULL) + unix_error (errno, (char *) "mkdtemp", val_pattern); + + rv = caml_copy_string (ret); + free (pattern); + + CAMLreturn (rv); +} + +value +guestfs_int_mllib_statvfs_free_space (value pathv) +{ + CAMLparam1 (pathv); + CAMLlocal1 (rv); + struct statvfs buf; + int64_t free_space; + + if (statvfs (String_val (pathv), &buf) == -1) { + perror ("statvfs"); + caml_failwith ("statvfs"); + } + + free_space = (int64_t) buf.f_bsize * buf.f_bavail; + rv = caml_copy_int64 (free_space); + + CAMLreturn (rv); +} diff --git a/mllib/unix_utils.ml b/mllib/unix_utils.ml new file mode 100644 index 0000000..aeb24ed --- /dev/null +++ b/mllib/unix_utils.ml @@ -0,0 +1,58 @@ +(* mllib + * Copyright (C) 2009-2017 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + +module Dev_t = struct + external makedev : int -> int -> int = "guestfs_int_mllib_dev_t_makedev" "noalloc" + external major : int -> int = "guestfs_int_mllib_dev_t_major" "noalloc" + external minor : int -> int = "guestfs_int_mllib_dev_t_minor" "noalloc" +end + +module Exit = struct + external _exit : int -> 'a = "guestfs_int_mllib_exit" "noalloc" +end + +module Fnmatch = struct + (* NB: These flags must appear in the same order as unix_utils-c.c *) + type flag + | FNM_NOESCAPE + | FNM_PATHNAME + | FNM_PERIOD + | FNM_FILE_NAME + | FNM_LEADING_DIR + | FNM_CASEFOLD + + external fnmatch : string -> string -> flag list -> bool + "guestfs_int_mllib_fnmatch" +end + +module Fsync = struct + external sync : unit -> unit = "guestfs_int_mllib_sync" "noalloc" + external file : string -> unit = "guestfs_int_mllib_fsync_file" +end + +module Mkdtemp = struct + external mkdtemp : string -> string = "guestfs_int_mllib_mkdtemp" + + let temp_dir ?(base_dir = Filename.temp_dir_name) prefix suffix + mkdtemp (Filename.concat base_dir (prefix ^ "XXXXXX" ^ suffix)) +end + +module StatVFS = struct + external free_space : string -> int64 + "guestfs_int_mllib_statvfs_free_space" +end diff --git a/mllib/unix_utils.mli b/mllib/unix_utils.mli new file mode 100644 index 0000000..be3eab8 --- /dev/null +++ b/mllib/unix_utils.mli @@ -0,0 +1,90 @@ +(* mllib + * Copyright (C) 2009-2017 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + +(** Binding for various Unix/POSIX library functions which are not + provided by the OCaml stdlib. *) + +module Dev_t : sig + (** Bindings for [dev_t] related functions [makedev], [major] and [minor]. *) + + val makedev : int -> int -> int + (** makedev(3) *) + + val major : int -> int + (** major(3) *) + + val minor : int -> int + (** minor(3) *) +end + +module Exit : sig + val _exit : int -> 'a + (** Call _exit directly, ie. do not run OCaml atexit handlers. *) +end + +module Fnmatch : sig + (** Binding for the fnmatch(3) function in glibc or gnulib. *) + + type flag + | FNM_NOESCAPE + | FNM_PATHNAME + | FNM_PERIOD + | FNM_FILE_NAME + | FNM_LEADING_DIR + | FNM_CASEFOLD + (** Flags passed to the fnmatch function. *) + + val fnmatch : string -> string -> flag list -> bool + (** The [fnmatch pattern filename flags] function checks whether + the [filename] argument matches the wildcard in the [pattern] + argument. The [flags] is a list of flags. Consult the + fnmatch(3) man page for details of the flags. + + The [filename] might be a filename element or a full path + (depending on the pattern and flags). *) +end + +module Fsync : sig + (** Bindings for sync, fsync. *) + + val sync : unit -> unit + (** sync(2) syscall. *) + + val file : string -> unit + (** fsync a single file by name. *) +end + +module Mkdtemp : sig + (** Functions to create temporary directories. *) + + val mkdtemp : string -> string + (** [mkdtemp pattern] Tiny wrapper to the C [mkdtemp]. *) + + val temp_dir : ?base_dir:string -> string -> string -> string + (** [temp_dir prefix suffix] creates a new unique temporary directory. + + The optional [~base_dir:string] changes the base directory where + to create the new temporary directory; if not specified, the default + [Filename.temp_dir_name] is used. *) +end + +module StatVFS : sig + val free_space : string -> int64 + (** [free_space path] returns the free space available on the + filesystem that contains [path], in bytes. *) +end diff --git a/resize/resize.ml b/resize/resize.ml index 476ba8e..dc96b23 100644 --- a/resize/resize.ml +++ b/resize/resize.ml @@ -20,6 +20,7 @@ open Printf open Common_utils open Common_gettext.Gettext +open Unix_utils open Getopt.OptionName module G = Guestfs diff --git a/sparsify/copying.ml b/sparsify/copying.ml index a05ed6c..9042bd5 100644 --- a/sparsify/copying.ml +++ b/sparsify/copying.ml @@ -25,6 +25,7 @@ open Printf open Common_utils open Common_gettext.Gettext +open Unix_utils open Utils open Cmdline diff --git a/sysprep/sysprep_operation_backup_files.ml b/sysprep/sysprep_operation_backup_files.ml index 5e89989..6b1a100 100644 --- a/sysprep/sysprep_operation_backup_files.ml +++ b/sysprep/sysprep_operation_backup_files.ml @@ -21,7 +21,7 @@ open Printf open Common_gettext.Gettext open Common_utils open Visit -open Fnmatch +open Unix_utils.Fnmatch open Sysprep_operation open Utils diff --git a/sysprep/sysprep_operation_script.ml b/sysprep/sysprep_operation_script.ml index ff4b073..e3663eb 100644 --- a/sysprep/sysprep_operation_script.ml +++ b/sysprep/sysprep_operation_script.ml @@ -21,6 +21,7 @@ open Unix open Common_gettext.Gettext open Common_utils +open Unix_utils open Getopt.OptionName open Sysprep_operation diff --git a/v2v/changeuid.ml b/v2v/changeuid.ml index 367c212..dbb05bc 100644 --- a/v2v/changeuid.ml +++ b/v2v/changeuid.ml @@ -23,6 +23,7 @@ open Printf open Common_utils open Common_gettext.Gettext +open Unix_utils open Utils diff --git a/v2v/input_ova.ml b/v2v/input_ova.ml index 411e901..fff1c22 100644 --- a/v2v/input_ova.ml +++ b/v2v/input_ova.ml @@ -20,6 +20,7 @@ open Printf open Common_gettext.Gettext open Common_utils +open Unix_utils open Types open Utils diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml index 3b804e5..d6f5e0d 100644 --- a/v2v/output_glance.ml +++ b/v2v/output_glance.ml @@ -20,6 +20,7 @@ open Printf open Common_gettext.Gettext open Common_utils +open Unix_utils open Types open Utils diff --git a/v2v/output_null.ml b/v2v/output_null.ml index a21a712..b0e99b4 100644 --- a/v2v/output_null.ml +++ b/v2v/output_null.ml @@ -20,6 +20,7 @@ open Printf open Common_gettext.Gettext open Common_utils +open Unix_utils open Types open Utils diff --git a/v2v/output_rhv.ml b/v2v/output_rhv.ml index 6991b0a..e42429c 100644 --- a/v2v/output_rhv.ml +++ b/v2v/output_rhv.ml @@ -18,6 +18,7 @@ open Common_gettext.Gettext open Common_utils +open Unix_utils open Unix open Printf diff --git a/v2v/v2v.ml b/v2v/v2v.ml index a711121..ee00d2e 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml @@ -20,15 +20,16 @@ open Unix open Printf open Common_gettext.Gettext - -module G = Guestfs - open Common_utils +open Unix_utils + open Types open Utils open Cmdline +module G = Guestfs + type conversion_mode | Copying of overlay list * target list | In_place -- 2.9.3
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 2/3] mllib: Add unsetenv(3) binding to Unix_utils.
Missing from the OCaml stdlib. This implementation is the same as the one in Jane St's Core, except we don't bother to throw an exception on error. --- mllib/unix_utils-c.c | 9 +++++++++ mllib/unix_utils.ml | 4 ++++ mllib/unix_utils.mli | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/mllib/unix_utils-c.c b/mllib/unix_utils-c.c index f9615ec..1a4c3d7 100644 --- a/mllib/unix_utils-c.c +++ b/mllib/unix_utils-c.c @@ -45,6 +45,7 @@ extern void unix_error (int errcode, char * cmdname, value arg) Noreturn; extern value guestfs_int_mllib_dev_t_makedev (value majv, value minv); extern value guestfs_int_mllib_dev_t_major (value devv); extern value guestfs_int_mllib_dev_t_minor (value devv); +extern value guestfs_int_mllib_unsetenv (value strv); extern int guestfs_int_mllib_exit (value rv) __attribute__((noreturn)); extern value guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv); extern value guestfs_int_mllib_sync (value unitv); @@ -74,6 +75,14 @@ guestfs_int_mllib_dev_t_minor (value devv) } /* NB: This is a "noalloc" call. */ +value +guestfs_int_mllib_unsetenv (value strv) +{ + unsetenv (String_val (strv)); + return Val_unit; +} + +/* NB: This is a "noalloc" call. */ int guestfs_int_mllib_exit (value rv) { diff --git a/mllib/unix_utils.ml b/mllib/unix_utils.ml index aeb24ed..66b6e4f 100644 --- a/mllib/unix_utils.ml +++ b/mllib/unix_utils.ml @@ -22,6 +22,10 @@ module Dev_t = struct external minor : int -> int = "guestfs_int_mllib_dev_t_minor" "noalloc" end +module Env = struct + external unsetenv : string -> unit = "guestfs_int_mllib_unsetenv" "noalloc" +end + module Exit = struct external _exit : int -> 'a = "guestfs_int_mllib_exit" "noalloc" end diff --git a/mllib/unix_utils.mli b/mllib/unix_utils.mli index be3eab8..0a4c1b3 100644 --- a/mllib/unix_utils.mli +++ b/mllib/unix_utils.mli @@ -32,6 +32,11 @@ module Dev_t : sig (** minor(3) *) end +module Env : sig + val unsetenv : string -> unit + (** Unset named environment variable, see unsetenv(3). *) +end + module Exit : sig val _exit : int -> 'a (** Call _exit directly, ie. do not run OCaml atexit handlers. *) -- 2.9.3
Richard W.M. Jones
2017-Feb-22 15:29 UTC
[Libguestfs] [PATCH 3/3] v2v: vCenter: Remove proxy environment variables (RHBZ#1354507).
Currently imports from vCenter sometimes obey proxy environment variables (eg. $http_proxy) and sometimes don't. The initial libvirt connection to fetch metadata never uses the proxy, but because the subsequent conversion and copying uses libcurl, it will pick up on proxy environment variables. This makes no sense, and in any case vCenter is really slow as it is without putting another device into the data path. Therefore ensure that libcurl does not see any proxy environment variables by unsetting them. --- v2v/input_libvirt_vcenter_https.ml | 13 +++++++++++++ v2v/virt-v2v.pod | 16 +++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/v2v/input_libvirt_vcenter_https.ml b/v2v/input_libvirt_vcenter_https.ml index 7976821..79dff43 100644 --- a/v2v/input_libvirt_vcenter_https.ml +++ b/v2v/input_libvirt_vcenter_https.ml @@ -20,6 +20,7 @@ open Common_gettext.Gettext open Common_utils +open Unix_utils.Env open Types open Utils @@ -48,6 +49,18 @@ object error_if_libvirt_does_not_support_json_backingfile (); + (* Remove proxy environment variables so curl doesn't try to use + * them. Libvirt doesn't use the proxy anyway, and using a proxy + * is generally a bad idea because vCenter is slow enough as it is + * without putting another device in the way (RHBZ#1354507). + *) + unsetenv "https_proxy"; + unsetenv "all_proxy"; + unsetenv "no_proxy"; + unsetenv "HTTPS_PROXY"; + unsetenv "ALL_PROXY"; + unsetenv "NO_PROXY"; + (* Get the libvirt XML. This also checks (as a side-effect) * that the domain is not running. (RHBZ#1138586) *) diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod index 86e6e9c..4c7204b 100644 --- a/v2v/virt-v2v.pod +++ b/v2v/virt-v2v.pod @@ -1187,19 +1187,9 @@ forwards the information, so if you have a firewall between vCenter and its hypervisors you may need to open additional ports (consult VMware documentation). -=head3 vCenter: Proxy settings - -To copy the disks, virt-v2v uses L<libcurl(3)>. The Curl library -obeys the proxy environment variables, in particular C<https_proxy>, -C<all_proxy> and C<no_proxy> (C<HTTPS_PROXY>, C<ALL_PROXY> and -C<NO_PROXY> can also be used, but the lowercase named environment -variables take precedence). - -If these environment variables are set then copying may happen via the -proxy, and so a different set of ports may need to be opened in the -firewall. - -The port 5480 connection never uses a proxy. +The proxy environment variables (C<https_proxy>, C<all_proxy>, +C<no_proxy>, C<HTTPS_PROXY>, C<ALL_PROXY> and C<NO_PROXY>) are +B<ignored> when doing vCenter conversions. =head1 INPUT FROM VMWARE OVA -- 2.9.3
Pino Toscano
2017-Feb-22 15:59 UTC
Re: [Libguestfs] [PATCH 0/3] v2v: vCenter: Remove proxy environment variables
On Wednesday, 22 February 2017 15:29:21 CET Richard W.M. Jones wrote:> Fix for: > > https://bugzilla.redhat.com/show_bug.cgi?id=1354507 > > Main explanation is in patch #3.The series LGTM. Thanks, -- Pino Toscano
Maybe Matching Threads
- [PATCH] mllib: Add a binding for realpath(3).
- [PATCH 0/4] sysprep: Remove various backup files.
- [PATCH v3 0/5] sysprep: Remove various backup files.
- [PATCH v2 0/4] sysprep: Remove various backup files.
- [PATCH v2 0/2] builder: Choose better weights in the planner.