57054e188ea89728eee8a2af8f7b4bfc25a25608
[util-vserver.git] / src / testsuite / rpm-fake-test.c
1 // $Id: rpm-fake-test.c,v 1.4 2004/02/27 18:57:28 ensc Exp $    --*- c -*--
2
3 // Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 //  
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
8 //  
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //  
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18
19 #ifdef HAVE_CONFIG_H
20 #  include <config.h>
21 #endif
22
23
24 #include <grp.h>
25 #include <pwd.h>
26 #include <unistd.h>
27 #include <stdbool.h>
28 #include <stdlib.h>
29 #include <stdio.h>
30 #include <string.h>
31
32 #define ENSC_WRAPPERS_UNISTD    1
33 #include <wrappers.h>
34
35 int wrapper_exit_code = 1;
36
37 int main(/*int argc, char *argv[]*/)
38 {
39   char          buf[1000];
40
41   while (true) {
42     char        *ptr = buf;
43     char        c;
44     do {
45       if (read(0, &c, 1)==0) break;
46       if (c=='\n') break;
47       *ptr++ = c;
48     } while (ptr<buf+sizeof(buf));
49     *ptr = '\0';
50     if (ptr==buf) break;
51
52     switch (buf[0]) {
53       case 'P'          : {
54         struct passwd   *pw;
55         
56         pw = getpwnam(buf+1);
57         printf("P(%s) = ", buf+1);
58         if (pw) printf("%u\n", pw->pw_uid);
59         else    printf("(null)\n");
60         
61         break;
62       }
63
64       case 'G'          : {
65         struct group    *gr;
66         
67         gr = getgrnam(buf+1);
68         printf("G(%s) = ", buf+1);
69         if (gr) printf("%u\n", gr->gr_gid);
70         else    printf("(null)\n");
71         
72         break;
73       }
74
75       case 'C'          :
76         switch (buf[1]) {
77           case 'g'      :  endgrent(); break;
78           case 'p'      :  endpwent(); break;
79           default       :  abort(); break;
80         }
81         break;
82
83       default           :
84         abort();
85     }
86   }
87
88   {
89     char *      cmd[] = { "/bin/grep", "^s_context", "/proc/self/status", 0 };
90     Eexecv(cmd[0], cmd);
91   }
92 }