added vcopy
[util-vserver.git] / util-vserver / src / rpm-fake-resolver.c
index 6af3c67..e8ffce3 100644 (file)
 #include "internal.h"
 #include "vserver.h"
 #include "util.h"
-#include "wrappers.h"
-#include "wrappers-vserver.h"
 
 #include <getopt.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <grp.h>
 #include <pwd.h>
+#include <fcntl.h>
+
+#define ENSC_WRAPPERS_VSERVER  1
+#define ENSC_WRAPPERS_UNISTD   1
+#define ENSC_WRAPPERS_FCNTL    1
+#include <wrappers.h>
 
 #define MAX_RQSIZE     0x1000
 
 int wrapper_exit_code = 1;
 
 struct ArgInfo {
-    ctx_t              ctx;
+    xid_t              ctx;
     uid_t              uid;
     gid_t              gid;
     bool               do_fork;
@@ -182,7 +186,7 @@ run()
   uint8_t      c;
 
   while (true) {
-    Ewrite(2, ".", 1);
+    Ewrite(3, ".", 1);
     Eread (0, &c,  sizeof c);
     switch (c) {
       case 'P' :  do_getpwnam(); break;
@@ -198,7 +202,13 @@ run()
 static void
 daemonize(struct ArgInfo const UNUSED * args, int pid_fd)
 {
-  pid_t                pid = Efork();
+  int          p[2];
+  pid_t                pid;
+  char         c;
+  
+  Epipe(p);
+  pid = Efork();
+  
   if (pid!=0) {
     if (pid_fd!=-1) {
       char     buf[sizeof(id_t)*3 + 2];
@@ -210,6 +220,9 @@ daemonize(struct ArgInfo const UNUSED * args, int pid_fd)
     }
     _exit(0);
   }
+  Eclose(p[1]);
+  read(p[0], &c, 1);
+  Eclose(p[0]);
 }
 
 int main(int argc, char * argv[])
@@ -218,12 +231,19 @@ int main(int argc, char * argv[])
     .ctx      = VC_RANDCTX,
     .uid      = 99,
     .gid      = 99,
-    .do_fork  = false,
+    .do_fork  = true,
     .pid_file = 0,
     .chroot   = 0
   };
   int                  pid_fd = -1;
 
+#ifndef __dietlibc__
+#  warning  *** rpm-fake-resolver is built against glibc; please do not report errors before trying a dietlibc version ***
+  WRITE_MSG(2,
+           "***  rpm-fake-resolver was built with glibc;  please do  ***\n"
+           "***  not report errors before trying a dietlibc version. ***\n");
+#endif
+
   parseArgs(&args, argc, argv);
   if (args.pid_file && args.do_fork)
     pid_fd = Eopen(args.pid_file, O_CREAT|O_WRONLY, 0644);