mock/src mock-helper.c,1.8,1.9

Seth Vidal (skvidal) fedora-extras-commits at redhat.com
Wed May 24 15:15:22 UTC 2006


Author: skvidal

Update of /cvs/fedora/mock/src
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv10669/src

Modified Files:
	mock-helper.c 
Log Message:

check in Michael Brown's lovely autocache creation patch.



Index: mock-helper.c
===================================================================
RCS file: /cvs/fedora/mock/src/mock-helper.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- mock-helper.c	12 May 2006 20:57:57 -0000	1.8
+++ mock-helper.c	24 May 2006 15:15:20 -0000	1.9
@@ -14,6 +14,8 @@
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
+#include <grp.h>
+#include <libgen.h>
 
 #ifdef USE_SELINUX
 #include <selinux/selinux.h>
@@ -341,6 +343,84 @@
   do_command ("/bin/mknod", &(argv[1]), 0);
 }
 
+void
+do_unpack(int argc, char *argv[])
+{
+  char *new_argv[5];
+
+  if (argc < 4)
+    error ("not enough arguments");
+  
+  check_dir_allowed (rootsdir, argv[2]);
+
+  if (chdir(argv[2]) != 0)
+    error ("could not change dir");
+
+  new_argv[0] = "tar";
+  new_argv[1] = "--same-owner";
+
+  /* select compression */
+  if (strstr(argv[3], ".bz2"))
+    new_argv[2] = "-jxpf";
+  else if (strstr(argv[3], ".gz"))
+    new_argv[2] = "-zxpf";
+  else
+    new_argv[2] = "-xpf";
+
+  new_argv[3] = argv[3];
+  new_argv[4] = NULL;
+  
+  do_command("/bin/tar", new_argv, 0);
+}
+
+
+void
+do_pack(int argc, char *argv[])
+{
+  char *new_argv[6];
+  char *cache_dir = 0;
+  char *argv_copy = 0;
+  struct group *gr = 0;
+
+  if (argc < 5)
+    error ("not enough arguments");
+  
+  check_dir_allowed (rootsdir, argv[2]);
+
+  if (chdir(argv[2]) != 0)
+    error ("could not change dir");
+
+  /* create root-cache dir with appropriate perms */
+  gr = getgrnam("mock");
+  argv_copy = strdup(argv[3]);
+  cache_dir = dirname(argv_copy);
+
+  check_dir_allowed (rootsdir, cache_dir);
+
+  mkdir(cache_dir, 0750);
+  if (gr)
+    chown(cache_dir, 0, gr->gr_gid);
+  free(argv_copy);
+  argv_copy = 0;
+
+  new_argv[0] = "tar";
+  new_argv[1] = "--one-file-system";
+
+  /* select compression */
+  if (strstr(argv[3], ".bz2"))
+    new_argv[2] = "-jlcf";
+  else if (strstr(argv[3], ".gz"))
+    new_argv[2] = "-zlcf";
+  else
+    new_argv[2] = "-clf";
+
+  new_argv[3] = argv[3];
+  new_argv[4] = argv[4];
+  new_argv[5] = NULL;
+  
+  do_command("/bin/tar", new_argv, 0);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -363,6 +443,10 @@
     do_mknod (argc, argv);
   else if (strncmp ("yum", argv[1], 3) == 0)
     do_yum (argc, argv);
+  else if (strncmp ("unpack", argv[1], 6) == 0)
+    do_unpack (argc, argv);
+  else if (strncmp ("pack", argv[1], 4) == 0)
+    do_pack (argc, argv);
   else
   {
     error ("Command %s not recognized !\n", argv[1]);




More information about the fedora-extras-commits mailing list