~ubuntu-branches/ubuntu/natty/eglibc/natty-security

« back to all changes in this revision

Viewing changes to sunrpc/openchild.c

  • Committer: Bazaar Package Importer
  • Author(s): Aurelien Jarno
  • Date: 2009-05-05 09:54:14 UTC
  • Revision ID: james.westby@ubuntu.com-20090505095414-c45qsg9ixjheohru
ImportĀ upstreamĀ versionĀ 2.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 
3
 * unrestricted use provided that this legend is included on all tape
 
4
 * media and as a part of the software program in whole or part.  Users
 
5
 * may copy or modify Sun RPC without charge, but are not authorized
 
6
 * to license or distribute it to anyone else except as part of a product or
 
7
 * program developed by the user.
 
8
 *
 
9
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 
10
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 
11
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 
12
 *
 
13
 * Sun RPC is provided with no support and without any obligation on the
 
14
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 
15
 * modification or enhancement.
 
16
 *
 
17
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 
18
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 
19
 * OR ANY PART THEREOF.
 
20
 *
 
21
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 
22
 * or profits or other special, indirect and consequential damages, even if
 
23
 * Sun has been advised of the possibility of such damages.
 
24
 *
 
25
 * Sun Microsystems, Inc.
 
26
 * 2550 Garcia Avenue
 
27
 * Mountain View, California  94043
 
28
 */
 
29
 
 
30
/*
 
31
 * Copyright (c) 1988 by Sun Microsystems, Inc.
 
32
 */
 
33
 
 
34
/*
 
35
 * Open two pipes to a child process, one for reading, one for writing.
 
36
 * The pipes are accessed by FILE pointers. This is NOT a public
 
37
 * interface, but for internal use only!
 
38
 */
 
39
#include <stdio.h>
 
40
#include <stdlib.h>
 
41
#include <unistd.h>
 
42
#include <string.h>
 
43
#include <rpc/rpc.h>
 
44
#include <rpc/clnt.h>
 
45
 
 
46
#ifdef USE_IN_LIBIO
 
47
# include <libio/iolibio.h>
 
48
# define fflush(s) INTUSE(_IO_fflush) (s)
 
49
# define __fdopen(fd,m) INTUSE(_IO_fdopen) (fd,m)
 
50
#endif
 
51
 
 
52
/*
 
53
 * returns pid, or -1 for failure
 
54
 */
 
55
int
 
56
_openchild (const char *command, FILE ** fto, FILE ** ffrom)
 
57
{
 
58
  int i;
 
59
  int pid;
 
60
  int pdto[2];
 
61
  int pdfrom[2];
 
62
 
 
63
  if (__pipe (pdto) < 0)
 
64
    goto error1;
 
65
  if (__pipe (pdfrom) < 0)
 
66
    goto error2;
 
67
  switch (pid = __fork ())
 
68
    {
 
69
    case -1:
 
70
      goto error3;
 
71
 
 
72
    case 0:
 
73
      /*
 
74
       * child: read from pdto[0], write into pdfrom[1]
 
75
       */
 
76
      __close (0);
 
77
      __dup (pdto[0]);
 
78
      __close (1);
 
79
      __dup (pdfrom[1]);
 
80
      fflush (stderr);
 
81
      for (i = _rpc_dtablesize () - 1; i >= 3; i--)
 
82
        __close (i);
 
83
      fflush (stderr);
 
84
      execlp (command, command, NULL);
 
85
      perror ("exec");
 
86
      _exit (~0);
 
87
 
 
88
    default:
 
89
      /*
 
90
       * parent: write into pdto[1], read from pdfrom[0]
 
91
       */
 
92
      *fto = __fdopen (pdto[1], "w");
 
93
      __close (pdto[0]);
 
94
      *ffrom = __fdopen (pdfrom[0], "r");
 
95
      __close (pdfrom[1]);
 
96
      break;
 
97
    }
 
98
  return pid;
 
99
 
 
100
  /*
 
101
   * error cleanup and return
 
102
   */
 
103
error3:
 
104
  __close (pdfrom[0]);
 
105
  __close (pdfrom[1]);
 
106
error2:
 
107
  __close (pdto[0]);
 
108
  __close (pdto[1]);
 
109
error1:
 
110
  return -1;
 
111
}