1 #include <sys/types.h>
2 #include <unistd.h>
3 #include "matrixSsl.h"
4 #include "uidgid.h"
5 #include "prot.h"
6 #include "error.h"
7 #include "strerr.h"
8 #include "fd.h"
9 #include "pathexec.h"
10 #include "stralloc.h"
11 #include "byte.h"
12 #include "taia.h"
13 #include "iopause.h"
14 #include "ndelay.h"
15 #include "fmt.h"
16 #include "scan.h"
17 #include "sgetopt.h"
18 #include "env.h"
19 #include "sig.h"
20 #include "sslerror_str.h"
21 #include "ssl_io.h"
22 
23 #define USAGEROOT " -u user [-U user] [-/ root] [-C cert] [-K key] [-A ca] [-vc] prog"
24 #define USAGE " [-C cert] [-K key] [-A ca] [-cv] prog"
25 #define VERSION "$Id: c08b30d00b9743c5bd24fa59a281a90dd4c742c4 $"
26 
27 const char *progname;
28 unsigned int verbose =0;
29 
usage()30 void usage() {
31   if (getuid() == 0) strerr_die4x(111, "usage: ", progname, USAGEROOT, "\n");
32   strerr_die4x(111, "usage: ", progname, USAGE, "\n");
33 }
34 
main(int argc,const char ** argv)35 int main(int argc, const char **argv) {
36   int opt;
37 
38   progname =*argv;
39   pid =getpid();
40   id[fmt_ulong(id, pid)] =0;
41 
42   while ((opt =getopt(argc, argv, "u:U:/:C:K:A:cvV")) != opteof) {
43     switch(opt) {
44     case 'u': ssluser =(char*)optarg; break;
45     case 'U': svuser =(char*)optarg; break;
46     case '/': root =(char*)optarg; break;
47     case 'C': cert =(char*)optarg; break;
48     case 'K': key =(char*)optarg; break;
49     case 'c': client =1; break;
50     case 'A': ca =(char*)optarg; break;
51     case 'v': ++verbose; break;
52     case 'V': strerr_warn1(VERSION, 0);
53     case '?': usage();
54     }
55   }
56   argv +=optind;
57   if (! argv || ! *argv) usage();
58 
59   if (getuid() == 0) { if (! ssluser) usage(); }
60   else { if (root || ssluser || svuser) usage(); }
61 
62   if (! client) {
63     if (! cert) cert ="./cert.pem";
64     if (! key) key =cert;
65   }
66   if (ssluser) if (! uidgids_get(&sslugid, ssluser)) {
67     if (errno)
68       strerr_die3sys(111, "sslio[", id, "]: fatal: unable to get user/group: ");
69     strerr_die4x(100, "sslio[", id, "]: fatal: unknown user/group: ", ssluser);
70   }
71   if (svuser) if (! uidgids_get(&ugid, svuser)) {
72     if (errno)
73       strerr_die3sys(111, "sslio[", id, "]: fatal: unable to get user/group: ");
74     strerr_die4x(100, "sslio[", id, "]: fatal: unknown user/group: ", svuser);
75   }
76 
77   return(ssl_io(1, argv));
78 }
79